Skip to content
9MinecraftServer.com home Search servers
EN

Translate this page

Sign up free
Run your server

NuVotifier setup, start to first reward

NuVotifier is the plugin that lets server lists tell your Minecraft server "this player just voted," so a rewards plugin can pay them in game.

For server ownersUpdated 8 min read

Quick answer
  • NuVotifier listens on port 8192 (TCP) and receives votes from server lists.
  • Give lists the v2 token from config.yml (tokens, default) when they support it, or the v1 public key from rsa/public.key when they don't.
  • NuVotifier only receives votes. A rewards plugin such as VotingPlugin decides what players get.
  • On a Velocity or BungeeCord network, receive votes on the proxy and forward them with pluginMessaging.

NuVotifier is a free plugin that receives votes from Minecraft server lists and passes them to your server as an event, so a rewards plugin can give the voter diamonds, crate keys or whatever you choose. It runs on Paper, Spigot and other Bukkit-based servers, on Sponge, and on BungeeCord, Waterfall and Velocity proxies, all from one jar. It's a drop-in replacement for the original Votifier (any vote listener that supports Votifier also supports NuVotifier) and speaks both the old protocol (v1, an RSA key) and the newer one (v2, a shared token).

This guide goes from an empty plugins folder to a test vote landing in game, then covers networks, reward plugins and the problems that stop votes arriving.

8192NuVotifier's default vote port (TCP). It's separate from your game port and needs its own forward or host allocation.

What happens when a player votes

It helps to picture the path, because every "votes aren't working" problem breaks one specific link in it.

  1. The player votes on a list. On 9MinecraftServer that's your vote page, where they type their Minecraft username. One vote per username (and per IP) every 24 hours, with no account needed.
  2. The list opens a connection to your server's vote port. It uses the address and port you gave it, not your game port.
  3. NuVotifier checks the vote is genuine. With v2, the list signs the vote with your token. With v1, it encrypts the vote with your public key.
  4. NuVotifier fires a vote event. It carries four things: the list's service name, the username, the voter's address and a timestamp.
  5. Your rewards plugin reacts. NuVotifier itself gives nothing. VotingPlugin (or a similar listener) matches the service name and runs your reward commands.

Install NuVotifier on Paper or Spigot

  1. Download the jar from the project's GitHub releases page (the latest release there is 2.7.3; the same universal jar covers every platform). Fabric servers have a separate community port, NuVotifier-Fabric, on Modrinth.
  2. Drop it into plugins/ and start the server once. NuVotifier creates plugins/Votifier/config.yml (the folder may be named NuVotifier depending on platform), a random token, and an rsa/ folder holding public.key and private.key.
  3. Open the vote port. Forward TCP 8192 on your router, or on a host, add an extra port allocation in the panel and put that number in port. Many hosts only give you one port per server by default; you may have to ask for a second.
  4. Restart or run /nvreload after any config change.
  5. Install a rewards plugin if you want players to get anything. More on that below.

The NuVotifier config.yml, key by key

The Bukkit and BungeeCord versions use config.yml; Velocity uses config.toml with the same settings in TOML syntax.

KeyDefaultWhat to set
hostThe server's own bind IP, or 0.0.0.0Leave as 0.0.0.0 (all interfaces) unless your host tells you to bind a specific IP
port8192Any free port your host or router lets through. -1 turns the listener off (used on network backends)
disable-v1-protocolfalseKeep false on a normal server so lists that only speak v1 still work. Set true on backends behind proxy forwarding
tokens then defaultA random stringThe v2 token you give to lists. You can add extra lines named after a list's service name to give that list its own token
forwarding then methodnonenone on a single server; pluginMessaging or proxy on a network
forwarding then pluginMessaging then channelnuvotifier:votesLeave it. Proxy and backends must match

NuVotifier v2 token or v1 public key?

Both still exist because server lists support different things. NuVotifier accepts both at once on the same port, so you don't have to choose server-side. You choose per list.

v1 (original Votifier)v2 (NuVotifier)
What you give the listThe contents of rsa/public.keyThe token from tokens, default
How the vote is protectedEncrypted with your RSA public key; the only check is a "VOTE" marker after decryptionSigned with HMAC-SHA256 using your token, plus a one-time challenge from your server to stop replays
SecurityOlder; NuVotifier's own config calls it "not secure"Better; use it wherever a list offers it
Common mistakeCopying the key with line breaks or extra spacesCopying the token before the first restart, then regenerating it

On 9MinecraftServer you pick in your listing's Vote rewards box: "NuVotifier (token)" or "Votifier (public key)". Then fill in the Votifier address (usually the same host as your game address), the Votifier port, and paste the token or key. We sign our votes with the service name 9MinecraftServer.

NuVotifier on Velocity and BungeeCord networks

On a network, players connect to the proxy and move between backend servers, but your rewards plugin usually lives on the backends. So the proxy receives the vote, then hands it to the right backend. NuVotifier supports two ways to do that.

Plugin messaging (the recommended way)

  1. Proxy: install NuVotifier in the proxy's plugins folder. Keep port on a free port such as 8192 and forward it. Set forwarding.method to pluginMessaging.
  2. Every backend: install NuVotifier, set port to -1 so it doesn't listen publicly, and set forwarding.method to pluginMessaging.
  3. Choose what happens when the voter is offline. On Velocity, cache = "file" saves votes to disk and delivers them later; onlySendToJoinedServer and joinedServerFallback (for example "Hub") decide which backend gets a vote; excludedServers skips servers that shouldn't receive votes at all.
  4. Give lists the proxy's address, port and token. Backends are never contacted directly.

The catch: plugin messages travel over a player's connection, so a backend can only receive a forwarded vote while someone is on it. That's what the cache is for.

Proxy forwarding (for complex networks)

Here the proxy re-sends each vote to other NuVotifier listeners over the network. Each backend gets its own unused port, sets disable-v1-protocol to true, and you copy each backend's default token into the proxy's forwarding.proxy section with its address, port and token. Keep those backend ports firewalled from the internet; only the proxy should reach them.

Test before you tell anyone to vote

Test in two stages so you know which half is broken.

  1. Local test (skips the network): run /testvote YourName on the server, or /ptestvote YourName on a proxy. It needs the nuvotifier.testvote permission, which ops have by default. You can pass a service name too: /testvote YourName serviceName=9MinecraftServer. If your rewards plugin pays out, the in-game half works.
  2. Real test (goes over the internet): in your 9MinecraftServer listing, type your in-game name under "Test with username" and press Send a test vote. That sends a genuine vote packet from our servers to your Votifier address and port and tells you whether it got through.

If the local test works but ours fails, the problem is the port, the address or the token. If both fail, it's the rewards plugin or its service name.

Pairing NuVotifier with a voting plugin

VotingPlugin is the most common rewards plugin. Each list you're on becomes an entry in its VoteSites.yml, and the one field that has to be exactly right is ServiceSite, which must match the service name the list sends. For us, an entry looks like this:

  • NineMC: (the entry key; VotingPlugin wants no spaces or dots)
  • Enabled: true
  • Name: '9MinecraftServer'
  • ServiceSite: '9MinecraftServer'
  • VoteURL: 'https://9minecraftserver.com/server/your-server/vote'
  • VoteDelay: 24h
  • Rewards: with your Commands and Messages

Not sure what name a list sends? Vote once and read the console: VotingPlugin logs a warning when it gets a vote whose service name doesn't match any site. On a network, the plugin's own config comments recommend receiving votes on the proxy and processing rewards on the backends, with the same VoteSites.yml on each backend.

Don't want a full rewards plugin, or building your own? Our free API has a vote check: /api/v1/servers/your-server/voted?username=Steve returns whether that player voted in the last 24 hours and when they can vote next. It's handy for a Discord bot or a custom reward script, but for normal in-game rewards NuVotifier is simpler.

Votes not arriving? Check these in order

What you seeLikely causeFix
List says it can't connect, times outVote port not open, or you gave the game port insteadForward or allocate the port from config.yml (TCP); check the list has that number, not 25565
Connects, but console shows a signature or token errorToken mismatchCopy tokens.default again after a restart; no quotes, no spaces
Console: "Could not decrypt data (is your key correct?)"The v1 public key on the list doesn't match yoursPaste the whole of public.key again as one line, with no extra spaces
/testvote works, real votes do nothingService name doesn't match ServiceSiteRead the console after a real vote; copy the name exactly
Votes arrive only when someone's online (network)Plugin messaging needs a player on the backendUse cache = "file" and a fallback server
NuVotifier breaks after /reload or PlugManHot-reloading pluginsUse /nvreload for config changes and a full restart for anything else
Nothing in console at allhost bound to the wrong IP, or a host firewallSet host: 0.0.0.0; ask the host to open the port

The project's own troubleshooting guide also notes that NuVotifier itself doesn't cause lag: if votes make the server stutter, profile the reward commands with spark instead.

If your server is down when a player votes on 9MinecraftServer, the vote isn't lost immediately: we retry delivery several times over a few hours (at the time of writing, after 1, 5 and 15 minutes, then 1 hour and 3 hours) before giving up. The vote still counts toward your monthly rank either way. Ranks reset on the 1st of each month, UTC.

Once rewards work, the next job is getting people to vote at all. Our guides on getting more votes and choosing server lists and vote sites pick up from here, and how we rank explains what a vote is worth on our list.

Quick questions

Is NuVotifier still maintained?

It changes rarely. The latest GitHub release is 2.7.3 and the last code change on the main branch was in 2023. It's a small plugin that touches very little of the game, so it doesn't need frequent releases, but check the project's issues page after a big Minecraft update before you blame your config.

Do I need NuVotifier to be on a server list?

No. Votes still count for ranking without it. You only need it if you want players rewarded in game automatically.

Is NuVotifier the same as Votifier?

It's a fork of the original Votifier that keeps the v1 protocol for compatibility and adds v2 tokens, network forwarding and the test commands. Rewards plugins written for Votifier's vote event work with it.

Can I use one token for every list?

Yes, that's what default is for. For tighter control, add a separate token line named after each list's service name, so one leaked token doesn't expose the others.