How a vote turns into a reward
Three parts work together. A player votes on a server list. The list sends a vote message to Votifier on your server, together with the player name and a service name that identifies the list. VotingPlugin listens for these messages, looks up the vote site whose ServiceSite matches the service name, and runs that site's rewards.
So VotingPlugin does not receive votes on its own. You need a working Votifier first, usually NuVotifier. If you have not set it up yet, follow the NuVotifier setup guide and come back.
- Votifier receives the vote and checks it (token for v2, RSA key for v1).
- VotingPlugin matches the service name and gives the rewards.
- BestMCServerList sends the service name
BestMCServerList.
Step 1: Install VotingPlugin
- Make sure NuVotifier runs and is reachable. A test vote from your Votifier page should show up in the console.
- Put the VotingPlugin JAR into the
pluginsfolder of your Spigot or Paper server and restart once. - VotingPlugin creates its files, among them
plugins/VotingPlugin/VoteSites.ymlfor the vote sites andConfig.ymlfor general settings.
On a proxy network, votes usually arrive at the proxy and rewards run on the backend servers. Keep VoteSites.yml the same on every backend.
Step 2: Add BestMCServerList to VoteSites.yml
Each list you are on gets its own entry under VoteSites. The key is an internal name: keep it short, without spaces and without dots. The important line is ServiceSite.
VoteSites:
BestMCServerList:
Enabled: true
Name: 'BestMCServerList'
Priority: 5
ServiceSite: 'BestMCServerList'
VoteURL: 'https://bestmcserverlist.net/server/your-server/vote'
VoteDelay: 24h
WaitUntilVoteDelay: false
VoteDelayDaily: true
ForceOffline: false
DisplayItem:
Material: 'DIAMOND'
Amount: 1
Rewards:
Commands:
- 'eco give %player% 250'
- 'give %player% diamond 2'
Messages:
Player: '&aThanks for voting on BestMCServerList!'Enabled: trueis needed, the default is false.ServiceSitemust match the service name the list sends. VotingPlugin compares it case-insensitively, but otherwise the text has to be identical. For us it isBestMCServerList.VoteURLis the link players get with/vote. Copy your vote link from your server page;your-serverstands for your own slug.DisplayItemis required for every site, because it is shown in VotingPlugin's menus.- The commands run from the console, and
%player%becomes the voter's name.eco giveneeds an economy plugin; use whatever commands your server has.
Save the file and run /av reload.
Step 3: Vote delay and the daily reset
On BestMCServerList each Minecraft name can vote once per server and calendar day, and the day follows the time zone Europe/Berlin. A new vote is possible right after midnight Berlin time, not 24 hours after the last one.
VoteDelay: 24his used for/vote next, the countdown players see. It does not block votes.VoteDelayDaily: trueresets the delay once a day instead, which fits lists with a daily reset like ours.VoteDelayDailyHoursets the hour in server time (1–24). If your server clock does not run on Berlin time, keep the difference in mind when you set it.WaitUntilVoteDelay: truewould reject votes that arrive before the delay is over. Leave it onfalse: we already enforce one vote per name and day, and a wrong delay setting would cost players their rewards.
Step 4: Test the rewards
- Run
/av vote <player> BestMCServerList. This runs the rewards of that site for a player and shows that your reward config works. It does not test Votifier. - Open your Votifier page on BestMCServerList and press Send test vote. We send a vote for the name
TestVote, which does not count for the ranking. The delivery log shows whether your server accepted it. - Check the console for a line like
[VotingPlugin] Received a vote from service site 'BestMCServerList' by player 'TestVote'!. - Run
/av servicesitesto list the service names VotingPlugin has received so far.
If the test vote arrives but VotingPlugin reports an unknown service site, the ServiceSite line is the problem. With AutoCreateVoteSites: true in Config.yml (the default), VotingPlugin may also create a new entry by itself; it still needs Enabled: true and your rewards.
Bedrock players and offline votes
Bedrock players who join through Geyser and Floodgate have a name prefix, by default a dot: .Steve. They vote with that full name, and we pass it to Votifier unchanged. In VotingPlugin, set the same prefix in Config.yml. On a network use the same value in the proxy and in every backend:
BedrockPlayerPrefix: '.'.Steve and Steve are different players. Never remove the prefix to make a name fit.
Players do not have to be online when they vote. Rewards have a RewardType of ONLINE, OFFLINE or BOTH (the default). Test offline votes as well, because commands that need an online player behave differently.
Vote parties, milestones and streaks
Once the basic rewards work, SpecialRewards.yml adds goals that keep players voting: a VoteParty that triggers when the whole server reaches a number of votes, VoteMilestones for personal totals and VoteStreaks for voting several days in a row. Keep rewards useful but fair; rewards that break your economy make voting feel mandatory.
Want a rank badge for top voters? The LuckPerms prefix guide shows how to give players an image prefix with a command, which you can run as a reward.
Common mistakes
| Problem | Fix |
|---|---|
| Test vote arrives, nobody gets anything | The vote site is not enabled, or ServiceSite is not BestMCServerList. Check /av servicesites. |
| Nothing in the console at all | Votifier does not receive the vote. Check port, token and firewall with the delivery log on your Votifier page. |
| NuVotifier logs that no listeners are available | VotingPlugin is not installed or did not load. Check the startup log. |
/av vote works, real votes do not | The admin command skips Votifier. Test with Send test vote instead. |
| Bedrock players get nothing | BedrockPlayerPrefix does not match your Floodgate prefix. |