Skip to content

DaisyVotes — Overview

DaisyVotes is a voting plugin for Paper 1.21+. It receives votes itself, tracks them, and pays out rewards — with an in-game dashboard, a points shop, streaks, parties and leaderboards on top.

It is written in Kotlin on the Sculk framework. You never need to know that; configuration is plain YAML and all text is MiniMessage.

A player runs /vote, sees which sites they can vote on right now, clicks one, and votes. DaisyVotes receives that vote itself — no NuVotifier — credits it, and pays out.

Everything else is built on that one loop, and all of it can be turned off:

  • Vote points and a shop. Players earn points per vote and spend them in /vote shop. Self-contained: no economy plugin needed, though a Command reward hooks into yours if you have one.
  • A daily reward wheel. Vote every site in a day to earn one weighted spin.
  • Streaks. Consecutive days voted, with a grace window, milestone rewards, and earnable freezes that protect a missed day.
  • Vote parties. A server-wide goal that rewards everyone when it fills.
  • Top-voter awards. Automatic daily, weekly and monthly Top 3 payouts, plus leaderboards.
  • Discord webhooks and PlaceholderAPI. Both optional, neither needs a bot or a companion plugin.

A brand-new server with no economy, crate or permissions plugin still gets a complete working setup out of the box — the shipped rewards are vanilla items.

Worth knowing before you install:

  • It does not decide whether a vote is valid. The voting site does. Cooldowns configured here control what the menu shows; they never refuse a vote the site accepted.
  • It does not touch your scoreboard sidebar or tab list. Those belong to your scoreboard plugin. DaisyVotes uses the action bar and an optional boss bar only.
  • It does not run on Spigot or Folia. Paper, or a Paper fork.
RequirementDetails
Server softwarePaper 1.21 through 1.21.11. Every 1.21.x release works — DaisyVotes detects what the server supports. Spigot is not supported; Paper or a Paper fork is required.
Java21 or newer.
Vote receiverBuilt in. DaisyVotes ships its own vote receiver (Votifier v1/v2) — NuVotifier is not required. It listens on a port you open (default 8192).
NuVotifierOptional. Only if you’d rather keep it (bridge mode); DaisyVotes imports its config automatically.
PlaceholderAPIOptional. Needed for %daisyvotes_*% placeholders, and lets other plugins’ %placeholders% resolve inside menus.yml and your messages. Everything else works without it.
StorageSQLite (default, zero setup), or MySQL/MariaDB/Postgres for a multi-server network. MySQL/MariaDB is the well-travelled path; Postgres is newer.
FoliaNot supported.

On first start, DaisyVotes generates its YAML config files plus its database in plugins/DaisyVotes/:

  • Directoryplugins/DaisyVotes/
    • config.yml Main settings — visuals, engagement, wheel, points, parties, Discord, messages
    • receiver.yml Built-in vote receiver — port, tokens, keys
    • menus.yml Vote sites and GUI layout
    • rewards.yml Every reward: per-vote, first vote, streaks, party, wheel, milestones, cumulative
    • shop.yml Vote points shop entries
    • storage.yml Storage backend (SQLite by default)
    • network.yml Cross-server (Redis) — off by default
    • an SQLite database file, created automatically by Sculk Data

Each file is documented in detail:

  1. A player votes on a server list. The list sends the vote to DaisyVotes’ built-in receiver.
  2. DaisyVotes matches the vote to a configured site, drops duplicates, and processes it asynchronously.
  3. It updates the player’s counts, streak, points, and the server vote-party progress, then grants rewards (queuing them if the player is offline).
  4. It checks the daily wheel set, fires Discord embeds, plays effects, and broadcasts as configured.

See Voting & Anti-Fraud for the full lifecycle, or head to Installation to get started.