How Votifier delivers a vote
- A player votes for your server on a list.
- The list opens a TCP connection to your server on the Votifier port and sends the player name, its own service name, an address and a timestamp.
- NuVotifier checks the message (RSA key for v1, token for v2) and fires a vote event.
- A reward plugin such as VotingPlugin listens for that event and gives the reward.
NuVotifier itself gives nothing. It ships without any listener, so you always need a second plugin for the rewards.
Step 1: Install NuVotifier on Paper or Spigot
Put the NuVotifier JAR into the plugins folder and start the server once. It creates its config, an RSA key pair and a token. The console prints the token on first start: Your default NuVotifier token is ….
host: 0.0.0.0
port: 8192
disable-v1-protocol: false
tokens:
default: <generated token>
forwarding:
method: none
pluginMessaging:
channel: nuvotifier:voteshostis the address NuVotifier listens on. By default it takes the IP your server is configured for, or0.0.0.0for all interfaces.portis the Votifier port,8192by default. It must not be the Minecraft port.tokens.defaultis used for every list unless you add a token under a list's service name.- The keys for v1 are created in
plugins/Votifier/rsa/aspublic.keyandprivate.key.
Step 2: Make the port reachable
Lists connect from the internet, so the Votifier port has to be open for incoming TCP connections. This is where most setups fail.
- Shared hosting: many panels only open the game port. Add an extra port in the panel and put exactly that number into
port. Some hosts assign the number for you. - Own VPS or root server: allow the port in the firewall, for example
ufw allow 8192/tcp. - At home: forward the port in your router to the machine that runs the server.
Restart the server after changing the config. NuVotifier also has /nvreload, which runs from the console.
Step 3: Choose v1 (public key) or v2 (token)
| Protocol v1 | Protocol v2 | |
|---|---|---|
| Secret | RSA key pair | Shared token |
| What the list needs | Content of rsa/public.key | The token from tokens.default |
| Support | Classic Votifier; most lists speak it | NuVotifier and lists that support it |
Never give anyone private.key. If a list supports v2, the token is the simpler choice: one line, no key file. BestMCServerList supports both, so pick what you like on your Votifier page.
Keep disable-v1-protocol: false on a single server. NuVotifier itself warns that many lists only speak v1.
Step 4: Velocity or BungeeCord networks
On a network, the list connects to the proxy. NuVotifier runs on the proxy and forwards votes to the backend servers where the reward plugin lives. The NuVotifier wiki recommends plugin messaging for most networks.
Proxy (Velocity)
host = "0.0.0.0"
port = 8192
disable-v1-protocol = false
[tokens]
default = "<generated token>"
[forwarding]
method = "pluginMessaging"
[forwarding.pluginMessaging]
channel = "nuvotifier:votes"
cache = "file"On BungeeCord the same keys live in plugins/NuVotifier/config.yml in YAML form. cache = "file" keeps votes for players who are offline and delivers them later.
Every backend server (Paper)
port: -1
forwarding:
method: pluginMessaging
pluginMessaging:
channel: nuvotifier:votesport: -1 turns off the listener on the backend, so only the proxy receives votes. Make sure your backends are only reachable through the proxy, or someone could send fake votes.
The other option, method = "proxy", sends votes from the proxy to a NuVotifier port on each backend, configured with address, port and token per server under [forwarding.proxy.<name>]. It has no vote cache, so plugin messaging is usually the better fit.
Step 5: Enter the details and send a test vote
- Test locally first:
/testvote Steve serviceName=BestMCServerListon Paper, or/ptestvotewith the same arguments on the proxy. If your reward plugin reacts, the inside works. - On BestMCServerList, open your server in the dashboard and go to Votifier. Enter the public address of the server or proxy, the port and the token (v2) or public key (v1), then save.
- Press Send test vote. We send a vote for
TestVotethat does not count for the ranking, and the delivery log shows within seconds whether it arrived.
Votes from BestMCServerList carry the service name BestMCServerList. Bedrock players who join through Geyser and Floodgate vote with their prefixed name, for example .Steve, and the name reaches NuVotifier unchanged. Each Minecraft name can vote once per server per calendar day, counted in Europe/Berlin time.
Not listed yet? Add your server first, then come back to this step.
Common errors and fixes
| Problem | What to check |
|---|---|
| Connection refused | NuVotifier is not running or listens on another port. Compare the port in the config with what you entered. |
| Timed out | A firewall or the host drops the traffic. Open the port for TCP or ask the host for an extra port. |
| Test arrives, players get nothing | No reward plugin. The console logs A vote was received, but you don't have any listeners available to listen for it. |
| Vote rejected with v2 | Token mismatch. Copy tokens.default again, without spaces or quotes. |
| Works on the proxy, not on the backend | The backend is not set to pluginMessaging, or the channel names differ. |
| Wrong port entered | The Minecraft port answers instead of NuVotifier. Use the Votifier port. |
Once votes arrive, set up the rewards: our guide to vote rewards with VotingPlugin covers the service name, VoteSites.yml and daily limits. For the bigger picture, see how to get players for a new server.