First-vote setup
From a clean Paper install to a working /vote menu in five minutes.
This guide walks you through getting your first vote to land correctly on a fresh server. Follow it once on a staging box before you run it on production, testing the loop end-to-end is a lot easier when no real players are watching.
What you'll need
- A Paper or Folia 26.1+ server you can stop and restart (on 1.20.x to 1.21.x, use TDX VotePlus 1.2.16)
- NuVotifier (or another Votifier-compatible plugin) installed
- A vote tracker site you've already registered the server on (any one will do, Minecraft-MP, TopG, Planet Minecraft, etc.)
- The TDX VotePlus jar from your purchase account
Steps
Confirm NuVotifier is actually receiving votes
Before installing VotePlus, prove that the existing setup is working.
/nvreload
/testvote YourPlayerNameYou should see a [NuVotifier] Got a protocol v1 vote record from ...
line in latest.log. If you don't, fix that first, VotePlus reacts
to the same event NuVotifier dispatches, so if NuVotifier isn't
receiving votes, neither will VotePlus.
Drop in TDX VotePlus and start once
Place the jar in plugins/, start the server, and let it generate
the default config tree under plugins/TDXVotePlus/. Stop the server
once it finishes loading, we want to edit the configs from a known
clean state before running real votes.
Edit vote-sites.yml to match your real sites
Open plugins/TDXVotePlus/vote-sites.yml and replace the three
example entries with your own. Each entry is a name (shown in chat,
MiniMessage) and the url of your voting page on that site. The list
is only there to send players to the right pages, it does not have to
match anything the sites send back.
Define a minimal reward pool
Open plugins/TDXVotePlus/vote-rewards.yml and replace the default
rewards with something obvious you'll notice when it fires:
rewards:
- type: command
value: "give %player% diamond 1"
- type: message
value: "<#4DA6E8>TEST: vote received from %service%"A diamond is impossible to miss in your inventory, and the chat message confirms the placeholder substitution actually works.
Start the server and fire a test vote
/stop
# (start the server again)
/testvote YourPlayerNameYou should immediately see:
- A diamond appear in your inventory
- The
TEST: vote received from ...line in chat - The vote sound + particles fire
latest.logshow a[TDXVotePlus] [VotifierHook] Received vote: user='...'line
If any of those four things is missing, walk back through the steps - the problem is almost always either NuVotifier not dispatching the event or a typo in the reward pool.
Open the in-game GUI
/voteThe main menu should open. Click the leaderboard button: your test
player should be at #1 with one vote, within two minutes or straight
after /voteplus refresh. Click the milestones button: the
first-vote milestone should already be marked as claimed.
Replace the test rewards with your real ones
Now that the loop is proven, edit vote-rewards.yml again and put
in the rewards you actually want to ship. Run /voteplus reload to
pick them up without restarting.
/voteplus reload
/testvote YourPlayerNameVerify the new rewards fire correctly, and you're done.
After this guide, the natural next steps are tuning your vote party threshold, defining milestones, and (if you have multiple backends) setting up per-server isolation.