Skip to content

DaisyVotes — Common setups

The reference pages list every option. This page answers “how do I do the thing I actually want”, with configuration you can paste.


The shipped rewards are vanilla items so a fresh server works out of the box. To hand out a key from your crate plugin instead, use a Command reward — it runs from console, so it needs the player’s name.

rewards.yml
vote-rewards:
- type: Command
value: "crate key give %player% vote 1"
display-name: "1 Vote Key"
summary:
- "Opens at spawn."

display-name and summary are what the reward-preview menus show players. Without them the menu falls back to printing the raw command, which nobody wants to read.

Placeholders available in a command reward: %player%, %uuid%, %site%, %votes_total%, %streak%, %party_current%.


Two mechanisms, and they stack.

Per-site point overrides — reward the listings that send you the most traffic:

config.yml
points:
enabled: true
per-vote: 1
per-site:
minecraftservers: 3
topg: 2

A site bonus — an extra reward for one listing, on top of the normal vote reward:

rewards.yml
site-rewards:
minecraftservers:
- type: Item
value: "diamond"
item: { material: "diamond", amount: 2 }
display-name: "2 Diamonds"

The key is the site’s id from menus.yml, not its display name.


On by default — worth checking rather than assuming:

config.yml
top-voters:
enabled: true
monthly:
enabled: true
rewards:
1: ["crate key give %player% legendary 3"]
2: ["crate key give %player% legendary 2"]
3: ["crate key give %player% legendary 1"]

Awards run at 00:05 in your wheel.reset-zone, so the month rolls over at the same moment your daily wheel does. sweep-minutes is only a catch-up for a server that was offline across that instant.


Match the cooldowns to what the sites actually do

Section titled “Match the cooldowns to what the sites actually do”

Vote listings do not agree with each other. Some allow another vote a fixed number of hours after your last; others reset at a wall-clock time in their timezone.

menus.yml
sites:
- id: planetminecraft
cooldown: { every: "12h" } # 12 hours after this player's last vote
- id: minecraft-mp
cooldown:
resets-at: "00:00" # everyone resets together...
zone: "America/New_York" # ...in the site's timezone, not yours

Check the listing’s own FAQ for which model it uses. Getting it wrong means a player at 23:00 is told to wait twelve hours when the real answer is one.


Stop players buying in a creative or minigame world

Section titled “Stop players buying in a creative or minigame world”

For servers with per-world inventories, where an item bought in one world does not follow the player home:

config.yml
world-restrictions:
enabled: true
mode: Blacklist
worlds: [creative, minigames]
block-menus: true
block-purchases: true
queue-rewards: true

queue-rewards: true is the important one. A player voting from a restricted world still gets the whole vote — totals, streak, points, party progress — and only the items wait for /vote claim somewhere they can be kept. Nobody loses a vote for standing in the wrong place.


Every button is menus.yml, not code:

menus.yml
vote-menu:
rows: 6
buttons:
shop:
slot: 42
item:
material: emerald
glint: true
name: "<gradient:#FFF1C1:#FFC8DD>Vote Shop</gradient>"
lore:
- "<#B8C0CC>You have <#FFF1C1><points> points"
- ""
- "<#FFFFFF>Click to browse."
milestone:
enabled: false # remove this button entirely

Buttons you do not mention keep their shipped defaults, so you write only what you are changing.

inactive-item is drawn when a button has nothing to offer — no spins left, no rewards waiting — so “spin ready” and “vote more to earn one” can look completely different.


A channel webhook is enough:

config.yml
discord:
enabled: true
webhook-url: "https://discord.com/api/webhooks/..."

Discord content is Markdown, not MiniMessage. Do not paste MiniMessage tags into the Discord templates expecting colour.


One shared MySQL or MariaDB database gives you shared totals, streaks, points and leaderboards:

storage.yml
backend: mysql
remote:
host: "10.0.0.5"
database: "daisyvotes"
username: "daisyvotes"
password: "${DB_PASSWORD:-}"

Redis is optional and buys two things: a vote arriving on one server reaching a player online on another, and vote parties that fill from the whole network. Without it everything still works — rewards wait in the queue until the player joins the server that received the vote.


  1. /daisyvotes doctor — everything green.
  2. /daisyvotes testvote <you> — runs a real vote on every site. Confirms rewards, points and streak, and completes the daily wheel set.
  3. /vote spin — there is now a spin waiting.
  4. /vote shop — buy the cheapest entry and check it arrives.
  5. /daisyvotes forceparty — confirms the party rewards and the broadcast.
  6. Send a real test vote from one listing’s own panel.

Step 6 is the one that cannot be faked. Everything before it proves your configuration; only a real vote proves your firewall and your keys.