TDXDevelopment
TDX VotePlusGuides

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 YourPlayerName

You 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:

plugins/TDXVotePlus/vote-rewards.yml
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 YourPlayerName

You should immediately see:

  • A diamond appear in your inventory
  • The TEST: vote received from ... line in chat
  • The vote sound + particles fire
  • latest.log show 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

/vote

The 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 YourPlayerName

Verify 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.