GidsVoor servereigenaren
NuVotifier instellen en testen, stap voor stap
Installeer NuVotifier op Paper of een Velocity-netwerk, open de poort, test hem en leer elke fout lezen die hij logt. Getest op Paper 26.3 en Velocity 4.2.
NuVotifier is de plugin die stemmen van serverlijsten ontvangt. Je installeert hem op je server of je proxy, opent één TCP-poort en geeft elke lijst je adres, de poort en een publieke v1-sleutel of een v2-token. Hij deelt zelf geen beloningen uit, dus je hebt ook een beloningsplugin nodig zoals VotingPlugin, en je test het hele pad het best één keer voordat je spelers /vote laat gebruiken.
We schreven dit vanuit beide uiteinden van de lijn. serverlist.net stuurt op dit moment stemmen naar 95 vermeldingen, en voor deze gids draaiden we NuVotifier op een verse Paper 26.3-server en een Velocity 4.2-proxy, stuurden we goede stemmen en met opzet kapotte, en kopieerden we wat de console printte. Elke logregel die hieronder staat, komt uit die opstelling, met tokens en adressen vervangen door voorbeelden.
De korte versie
- Zet
nuvotifier.jarin je mappluginsen herstart. - Noteer de poort (standaard 8192), het token en de publieke sleutel die NuVotifier genereert.
- Open die poort voor TCP bij je host of in je firewall.
- Voeg het adres, de poort en het token (of de sleutel) toe aan je vermelding op serverlist.net.
- Stuur een test vanuit de Votifier-tester en houd de console in de gaten.
- Installeer VotingPlugin en geef de stemsite
ServerList.neteen beloning.
Wat NuVotifier wel en niet doet
NuVotifier luistert op een TCP-poort. Als een lijst verbinding maakt, leest hij één stembericht, controleert dat met je sleutel of token en vuurt een stemevent af binnen de server. Een stem bevat vier dingen: de servicenaam van de lijst (de onze is ServerList.net), de gebruikersnaam die de speler typte, het IP-adres van de stemmer en een tijdstempel.
Wat hij niet doet, is even belangrijk:
- Hij geeft geen beloningen. Een beloningsplugin luistert naar het event en betaalt uit.
- Hij controleert niet of de speler bestaat. De lijst valideert namen, en de beloningsplugin beslist wat er met onbekende namen gebeurt.
- Hij gebruikt alleen TCP. Een poort die alleen voor UDP is geopend, laat Votifier onbereikbaar.
- Hij stuurt niets terug naar een v1-lijst, en dat verandert hoe je test.
De officiële release is nog steeds 2.7.3 van juli 2021, één jar voor Paper, Spigot, BungeeCord, Velocity en Sponge. In onze test laadde hij ongewijzigd en ontving hij stemmen op Paper 26.3 en Velocity 4.2.0. Op Java 25 print hij een blok waarschuwingen waarin WARNING: sun.misc.Unsafe::objectFieldOffset has been called by staat. Dat gaat over een toekomstige Java-wijziging en is geen fout, en de stemmen bleven werken.
De officiële release ondersteunt Folia niet. De onderhouden fork azuvotifier wel (versie 3.3.6, november 2025), en die spreekt hetzelfde protocol, dus lijsten behandelen hem als NuVotifier.
v1-sleutel of v2-token
Lijsten kunnen in twee protocolversies met NuVotifier praten, en je kunt ze allebei aan laten staan.
| v1 (publieke sleutel) | v2 (token) | |
|---|---|---|
| Wat je de lijst geeft | De inhoud van rsa/public.key | Het token uit config.yml |
| Hoe een stem wordt beschermd | Versleuteld met je publieke RSA-sleutel | Ondertekend met HMAC-SHA256 met het token, plus een verse challenge bij elke verbinding |
| Een onderschepte stem kan opnieuw worden afgespeeld | Ja | Nee, elke challenge werkt maar één keer |
| De lijst weet of het gelukt is | Nee. NuVotifier leest 256 bytes en sluit de verbinding zonder antwoord | Ja. NuVotifier antwoordt {"status":"ok"} of een fout met een reden |
| Wie het ondersteunt | Bijna elke lijst | Lijsten die het protocol van NuVotifier hebben ingebouwd, serverlist.net inbegrepen |
Iedereen met je publieke v1-sleutel kan een geldige stem maken, want versleutelen met die sleutel is het hele protocol, dus plak hem nooit in een openbaar kanaal. En of een v1-sleutel klopte, zie je alleen in je console en nergens anders.
Gebruik op serverlist.net v2. Laat v1 aan staan zolang andere lijsten die je gebruikt het nog nodig hebben. Op 18 oktober 2026 hadden 97 van onze 218 vermeldingen Votifier ingesteld, 68 met een v1-sleutel en 29 met een v2-token (live: 68 en 27).
Installeren op Paper
Download
nuvotifier.jarvan de GitHub-releasepagina van NuVotifier of van zijn SpigotMC-pagina en zet het in de mappluginsvan je server.Start de server. Bij de eerste start print NuVotifier je token en waar hij luistert:
[Votifier] Your default NuVotifier token is e4qk2v9m1r7t0p5s3a8d6f2h1j. [Votifier] Votifier enabled on socket /0.0.0.0:8192.Stop de server en open
plugins/Votifier/config.yml. Zonder de commentaarregels ziet de standaard er zo uit:host: 0.0.0.0 port: 8192 disable-v1-protocol: false tokens: default: e4qk2v9m1r7t0p5s3a8d6f2h1j forwarding: method: none pluginMessaging: channel: nuvotifier:votesControleer
host. Standaard is dat hetserver-ipuitserver.properties, of0.0.0.0als dat leeg is. Op onze testserver stondserver-ipop127.0.0.1, dus NuVotifier luisterde stilletjes op127.0.0.1:8192, waar geen enkele lijst ooit bij kon. Lees na elke herstart de regelVotifier enabled on socket. Daar moet0.0.0.0staan, of een adres dat het internet kan bereiken.Zet
portop de poort die je host je geeft. Het moet een vrije TCP-poort zijn en mag niet je spelpoort zijn.Laat
disable-v1-protocol: falsestaan, tenzij alle lijsten die je gebruikt v2 ondersteunen.Herstart de server helemaal. In onze test bleef een token dat uit
config.ymlwas verwijderd na/nvreloadwerken tot de volgende herstart, dus vertrouw na het wijzigen van tokens niet op een reload.
NuVotifier zoekt het token op via de servicenaam van de lijst en valt terug op default. Een apart token per lijst klinkt netjes, maar werkt niet voor een servicenaam met een punt erin, de onze inbegrepen. Paper leest ServerList.net: onder tokens als een sectie ServerList met daarin een sleutel net. De TOML-lezer van Velocity houdt de aanhalingstekens rond "ServerList.net" als onderdeel van de naam, en zonder aanhalingstekens laadt de config helemaal niet. Hoe dan ook mist de opzoeking, en NuVotifier controleert onze stem tegen default. Heb je ons dus het aparte token gegeven, dan mislukt elke stem met een ongeldige handtekening. Geef ons het default-token. De v1-sleutels staan in plugins/Votifier/rsa/, en alleen public.key verlaat ooit je server.
Installeren op een Velocity- of BungeeCord-netwerk
Op een netwerk komen stemmen binnen bij de proxy, het enige adres dat lijsten kennen. Installeer dezelfde nuvotifier.jar op de proxy en op elke backend die stemmen moet ontvangen. De config van de proxy is plugins/nuvotifier/config.toml op Velocity en plugins/NuVotifier/config.yml op BungeeCord.
Stemmen doorsturen naar backendservers
Plugin messaging is de simpele keuze voor één proxy. Stemmen reizen naar de backends over de verbinding van een speler.
Op de proxy (config.toml op Velocity):
host = "0.0.0.0"
port = 8192
[forwarding]
method = "pluginMessaging"
[forwarding.pluginMessaging]
channel = "nuvotifier:votes"
cache = "file"
onlySendToJoinedServer = false
Zet op elke backend (plugins/Votifier/config.yml) de eigen listener van de backend uit met poort -1 en zet forwarding aan:
port: -1
forwarding:
method: pluginMessaging
pluginMessaging:
channel: nuvotifier:votes
Plugin messages hebben een verbonden speler nodig, dus een backend waar niemand online is, krijgt zijn stemmen later: de proxy slaat ze op in een cache (standaard in een bestand, tot 10 dagen) en geeft ze door zodra er iemand joint. Standaard krijgt elke backend elke stem, dus als op elke backend een beloningsplugin draait, krijgt de stemmer op elke backend een beloning. Gebruik onlySendToJoinedServer = true met een server als joinedServerFallback, excludedServers, of de eigen proxyinstelling van VotingPlugin.
Proxy forwarding stuurt elke stem over het netwerk naar de eigen NuVotifier van de backend, ondertekend met het token van die backend. Er hoeven geen spelers online te zijn, maar er is geen cache: een stem die na vijf pogingen nog steeds mislukt, valt weg. Dit is de opstelling die we hebben getest. Geef op elke backend NuVotifier een eigen poort, kopieer het default-token ervan en zet disable-v1-protocol: true. Op de proxy:
[forwarding]
method = "proxy"
[forwarding.proxy.survival]
address = "10.0.0.12"
port = 8193
token = "the survival backend's default token"
Voeg één blok per backend toe. De naam is alleen een label. In onze test kwamen een v1- en een v2-stem die naar de proxy werden gestuurd allebei binnen een seconde als v2-stem aan bij Paper:
[nuvotifier]: Successfully forwarded vote Vote (from:ServerList.net username:Steve address:203.0.113.7 timeStamp:1792283636000 additionalData:null) to /127.0.0.1:8192.
Daarna zetten we een verkeerd token in de backendregel van de proxy. De lijst kreeg nog steeds {"status":"ok"} van de proxy, terwijl de backend elke kopie afwees en de proxy bleef opnieuw proberen:
[nuvotifier]: Unable to send vote to /127.0.0.1:8192. Will retry sending in 1 second(s).
[nuvotifier]: Unable to send vote to /127.0.0.1:8192. Will retry sending in 2 second(s).
Op een netwerk bewijst een groene test dus alleen de proxy. Kijk ook in de console van een backend. Zet bij beide methoden de backends achter een firewall zodat alleen de proxy bij hun spel- en Votifier-poorten kan, anders kan iedereen er nepstemmen in schieten.
Open de poort
Votifier heeft één TCP-poort nodig die het internet kan bereiken.
- Gameserverhosts. Voeg in je paneel een tweede poort toe (vaak een allocation onder een tabblad Network) en zet de
portvan NuVotifier op die poort. Laathost: 0.0.0.0staan. - Een VPS of dedicated server. Open hem in de firewall, bijvoorbeeld met
sudo ufw allow 8192/tcp, en in de netwerkfirewall van je provider als die er is. - Docker. Publiceer hem naast de spelpoort, bijvoorbeeld met
-p 8192:8192. - DDoS-bescherming. Diensten die het speladres beschermen sturen meestal alleen de Minecraft-poort door, dus richt Votifier op het eigen IP van de machine. Van de 97 vermeldingen met Votifier gebruikten er op 18 oktober 2026 68 een andere host voor Votifier dan voor het spel, en 49 daarvan een kaal IP-adres.
De meeste servers eindigen op een andere poort dan 8192. Op dezelfde datum gebruikten maar 19 van die 97 de standaard (live: 18), verspreid over in totaal 70 verschillende poorten. Twee gebruikten 25575, de standaard RCON-poort, wat alleen werkt zolang RCON uit staat of is verplaatst.
Om de poort van buitenaf te controleren, voer je dit uit vanaf een andere machine of een ander netwerk:
nc -v 203.0.113.10 8192
NuVotifier begroet elke verbinding met een regel als VOTIFIER 2 mmdin5k3bh10u2fommgp3hahkv. Zie je die, dan staat de poort open en zit NuVotifier erachter. Op Windows toont Test-NetConnection 203.0.113.10 -Port 8192 in PowerShell TcpTestSucceeded : True voor een open poort, zonder de begroeting.
Voeg de gegevens toe aan je vermelding op serverlist.net
Als je een server toevoegt, vraagt de stap Stemmen om Votifier. Voor een vermelding die je al hebt, open je hem vanuit het dashboard en gebruik je het tabblad Stemmen. Beide hebben dezelfde vier onderdelen.
- Waar Votifier luistert. Vul de host in die Votifier bereikt, vaak het IP van de server en niet het adres dat spelers gebruiken, en de Votifier-poort, niet de spelpoort. Poort controleren klopt op die poort aan en leest de Votifier-begroeting zonder een stem te sturen, zodat je meteen ziet of de poort open is en of NuVotifier of klassieke Votifier antwoordt.
- Sleutel of token. Kies NuVotifier-token en plak je
default-token, of kies Publieke sleutel van Votifier en plak de hele inhoud vanpublic.key. De standaardsleutel van 2048 bit is één regel van 392 tekens die begint metMIIBIjANBgkq. Plak nooitprivate.key. - Je beloningsplugin. Dit onderdeel toont de regel die VotingPlugin nodig heeft, hieronder besproken.
- Teststem. Stuur er een voordat je publiceert of opslaat.
Je token en sleutel worden versleuteld opgeslagen. Elke stem wordt eerst opgeslagen en direct daarna op de achtergrond bezorgd, mislukte bezorgingen worden opnieuw geprobeerd en elke poging staat in het afleverlog op dat tabblad. Ons vorige systeem hield geen bezorgresultaten bij, dus we voegen hier een overzicht van de vaakst voorkomende fouten toe zodra het nieuwe log een volle maand bevat.
Test met de Votifier-tester
De Votifier-tester stuurt één echte stem, met een gebruikersnaam naar keuze, naar het adres dat je invoert. Hij vraagt om een captcha en staat vijf tests per IP-adres per tien minuten toe. Bij v2 toont hij het eigen antwoord van NuVotifier, {"status":"ok"} of een fout uit de tabel hieronder. Bij v1 kan hij alleen laten zien dat hij verbinding maakte en de stem verstuurde, dus bevestig het in je console.
Een bezorgde stem begint een consoleregel als deze, waarna de servicenaam, gebruikersnaam, het adres en de tijdstempel van de stem volgen:
[Votifier] Got a protocol v2 vote record from /203.0.113.7:50480
Staat in de volgende regels A vote was received, but you don't have any listeners available to listen for it., dan werkt de bezorging en ontbreekt alleen de beloningsplugin.
Het consolecommando testvote slaat het netwerk, de sleutel en het token over en vuurt een stemevent af binnen je server, dus het test beloningen, geen bezorging. Extra gegevens moeten als key=value worden geschreven:
testvote Steve serviceName=ServerList.net
Getypt als testvote Alex ServerList.net 127.0.0.1 zette het 127.0.0.1 in het veld voor de gebruikersnaam en hield het de servicenaam TestVote. Op een proxy is het commando ptestvote.
Beloningen koppelen met VotingPlugin
VotingPlugin is de keuze die actief wordt onderhouden (7.1.1, juli 2026). SuperbVote, dat nog in de installatiegids van NuVotifier staat, is voor het laatst bijgewerkt in december 2020.
Zet
VotingPlugin.jarinpluginsnaast NuVotifier en herstart.Stuur een teststem. VotingPlugin maakt voor elke nieuwe servicenaam zelf een site aan:
[VotingPlugin] Received a vote from service site 'ServerList.net' by player 'Steve'! [VotingPlugin] VoteSite with service site 'ServerList.net' does not exist, attempting to generate...Open
plugins/VotingPlugin/VoteSites.yml, zoek het gegenereerde onderdeelServerList_neten geef het een beloning. Een afgewerkt onderdeel ziet er zo uit:VoteSites: ServerList_net: Enabled: true Name: 'ServerList.net' ServiceSite: 'ServerList.net' VoteURL: 'https://serverlist.net/server/your-server/vote' VoteDelay: 24h DisplayItem: Material: 'DIAMOND' Amount: 1 Rewards: Commands: - 'eco give %player% 250' Messages: Player: '&aThanks for voting on ServerList.net!'ServiceSitemoet precies overeenkomen.VoteDelay: 24hpast bij onze voortschrijdende cooldown van 24 uur, zodat/vote nextde juiste tijd toont.eco givegaat uit van een economyplugin zoals EssentialsX.Laad opnieuw met
/av reloaden stem nog een keer met de naam van een speler die op je server is geweest.
Over die laatste stap struikelt bijna iedereen. Met de standaardinstellingen negeert VotingPlugin stemmen voor namen die hij nooit heeft gezien:
[VotingPlugin] Player Steve has not joined before, disregarding vote. Reason: unknown-user. Set AllowUnjoined to true to accept.
Test met je eigen naam, of zet AllowUnjoined: true in Config.yml. Voor een speler die offline was, maakte VotingPlugin de stem meteen bekend maar hield hij de commandobeloning vast, die hij standaard uitgeeft zodra de speler weer joint.
- Bedrock-spelers. Met Geyser en Floodgate dragen Bedrock-namen een voorvoegsel, standaard een punt, dus een Bedrock-speler moet stemmen als
.Stevezodat de beloning hem vindt. In de afgelopen 30 dagen kwam 6% van alle stemmen op serverlist.net van Bedrock-namen, dus noem het voorvoegsel in je/vote-bericht. De Geyser-gids behandelt de voorvoegselinstelling. - Netwerken. De proxymodus van VotingPlugin stel je in via
BungeeSettings.yml. Geef daar elke backend een unieke servernaam en houdVoteSites.ymlop alle backends gelijk.
Wat spelers aan hun kant zien, en wat je ze vertelt als een beloning zoekraakt, staat in waarom Minecraft-servers je vragen om te stemmen.
Fouten en wat ze betekenen
Elk bericht in codeopmaak komt uit onze testopstelling. "Lijst" betekent wat een v2-lijst, of onze tester, terugkrijgt.
| Bericht, en waar je het ziet | Wat het betekent | Oplossing |
|---|---|---|
Connection refused, bij de lijst of tester | Er luistert niets op dat adres en die poort. | Kijk in de regel Votifier enabled on socket voor de echte poort en het echte adres. |
| Time-out van de verbinding, bij de lijst of tester | Een firewall of de host laat de verbinding vallen, of de host is een beschermd adres dat alleen de spelpoort doorstuurt. | Open de TCP-poort. Gebruik het eigen IP van de machine. |
Votifier was not able to bind to /0.0.0.0:8192, in de console bij het opstarten | Een ander programma gebruikt de poort al, vaak een tweede server of de proxy op dezelfde machine. | Geef elke NuVotifier een eigen poort. |
Could not decrypt data from /203.0.113.7:46788. Make sure the public key on the list is correct., in de console | De v1-sleutel klopt niet. De lijst heeft een oude sleutel, een sleutel van een andere server of een afgekapte. | Kopieer public.key opnieuw, helemaal, en werk de lijst bij. |
Signature is not valid (invalid token?), bij de lijst en in de console | Het v2-token klopt niet. | Kopieer het default-token opnieuw, zonder spaties. Verwijder elk token dat je onder onze servicenaam hebt toegevoegd. Controleer op een netwerk ook de backendregels van de proxy. |
Unknown service 'ServerList.net', bij de lijst en in de console | Er staat geen default-token in tokens. | Voeg een default-token toe en geef het aan de lijst. |
This server only accepts well-formed Votifier v2 packets., in de console | disable-v1-protocol staat aan en een lijst stuurde een v1-stem. | Zet die lijst op v2, of zet v1 weer aan. |
Challenge is not valid, bij de lijst en in de console | De lijst antwoordde met de verkeerde challenge. Dat is een fout aan de kant van de lijst. | Meld het bij de lijst. |
A vote was received, but you don't have any listeners available to listen for it., in de console | De bezorging werkt. Er is geen beloningsplugin geïnstalleerd. | Installeer VotingPlugin. |
Player Steve has not joined before, disregarding vote. Reason: unknown-user., in de console | VotingPlugin heeft een naam overgeslagen die hij nooit heeft gezien. | Test met een echte speler, of zet AllowUnjoined: true. |
Unable to send vote to /127.0.0.1:8192. Will retry sending in 1 second(s)., in de console van de proxy | Proxy forwarding kan niet bezorgen bij een backend: verkeerd token, verkeerde poort of verkeerd adres. | Lees de console van de backend voor de echte reden. |
Komen fouten snel achter elkaar binnen, dan stopt NuVotifier met printen na de vijfde binnen twee seconden, dus stuur één test per keer.
Veelgestelde vragen
Welke poort moet Votifier gebruiken? Elke vrije TCP-poort die je host je laat openen. 8192 is alleen de standaard. Het mag niet je spelpoort zijn, en vermijd 25575 als je RCON gebruikt.
Heb ik v2 nodig? Nee, we accepteren allebei. v2 is beter waar een lijst het ondersteunt: stemmen kunnen niet opnieuw worden afgespeeld en de lijst kan je de exacte fout laten zien. Laat v1 aan voor lijsten die alleen v1 sturen.
Waarom ondersteunen sommige lijsten alleen v1? v1 is het oorspronkelijke Votifier-protocol dat elke lijst jaren geleden heeft ingebouwd. v2 kwam met NuVotifier, en elke lijst moet het apart toevoegen.
Is het de moeite waard om dit in te stellen? Bijna alle stemmen komen terecht waar Votifier is ingesteld. In de afgelopen 30 dagen ging 99,7% van alle stemmen op serverlist.net naar vermeldingen met Votifier ingesteld. In de 30 dagen tot en met 18 oktober 2026 waren dat 15.443 van de 15.477 stemmen, terwijl 11 vermeldingen zonder Votifier de overige 34 deelden. Stemmen wegen ook mee voor je positie op de lijst, en de gids over je eerste 100 spelers zet dat in context.
Lees verder
Lees nog even door.
Waarom Minecraft-servers je laten stemmen en hoe het werkt
Wat een stem doet, hoe die van de lijst naar je beloning gaat, de 24-uursregel, Bedrock-namen en wat je checkt als een stembeloning nooit aankomt.
Zo krijg je je eerste 100 spelers op je Minecraft-server
Wat onze pinger laat zien over nieuwe Minecraft-servers en hoe je je eerste 100 spelers krijgt: retentie, lijsten, stemmen, Discord en seizoenen.