Accedi Aggiungi il tuo server

GuidaPer proprietari di server

Configurare NuVotifier e testarlo, passo dopo passo

Installa NuVotifier su Paper o Velocity, apri la porta, provalo con il nostro test e capisci ogni errore del log. Testato su Paper 26.3 e Velocity 4.2.

Redazione di ServerList Pubblicato il 13 min di lettura
Console del server[NuVotifier] Votifier enabled on port 8192[NuVotifier] Using protocol v2 tokensGot a protocol v2 vote record from ServerList.net for Steve[VotingPlugin] Steve voted, 2 rewards

NuVotifier è il plugin che riceve i voti dalle liste di server. Lo installi sul tuo server o sul tuo proxy, apri una porta TCP e dai a ogni lista il tuo indirizzo, la porta e una chiave pubblica v1 oppure un token v2. Da solo non distribuisce ricompense, quindi ti serve anche un plugin di ricompense come VotingPlugin, e conviene testare tutto il percorso una volta prima di dire ai giocatori di usare /vote.

Abbiamo scritto questa guida guardando entrambe le estremità del filo. serverlist.net invia voti a 95 schede in questo momento, e per questa guida abbiamo fatto girare NuVotifier su un server Paper 26.3 appena creato e su un proxy Velocity 4.2, gli abbiamo mandato voti corretti e voti volutamente rotti e abbiamo copiato quello che stampava la console. Ogni riga di log citata qui sotto viene da quella configurazione, con token e indirizzi sostituiti da esempi.

  1. Metti nuvotifier.jar nella tua cartella plugins e riavvia.
  2. Annota la porta (8192 di default), il token e la chiave pubblica che NuVotifier genera.
  3. Apri quella porta in TCP presso il tuo host o nel tuo firewall.
  4. Aggiungi indirizzo, porta e token (o chiave) alla tua scheda su serverlist.net.
  5. Manda un test dal test Votifier e guarda la console.
  6. Installa VotingPlugin e dai una ricompensa al sito di voto ServerList.net.

Cosa fa NuVotifier e cosa no

NuVotifier ascolta su una porta TCP. Quando una lista si connette, legge un messaggio di voto, lo verifica con la tua chiave o il tuo token e fa scattare un evento di voto dentro il server. Un voto porta quattro cose: il nome del servizio della lista (il nostro è ServerList.net), il nome utente che il giocatore ha digitato, l'indirizzo IP di chi ha votato e un timestamp.

Quello che non fa conta altrettanto:

  • Non dà ricompense. Un plugin di ricompense ascolta l'evento e paga.
  • Non controlla che il giocatore esista. La lista valida i nomi, e il plugin di ricompense decide cosa fare con quelli sconosciuti.
  • Usa solo il TCP. Una porta aperta solo per UDP lascia Votifier irraggiungibile.
  • Non rimanda nulla a una lista v1, e questo cambia il modo di testare.

La versione ufficiale è ancora la 2.7.3 di luglio 2021, un solo JAR per Paper, Spigot, BungeeCord, Velocity e Sponge. Nel nostro test si è caricata e ha ricevuto voti su Paper 26.3 e Velocity 4.2.0 senza modifiche. Con Java 25 stampa un blocco di avvisi che include WARNING: sun.misc.Unsafe::objectFieldOffset has been called by. Riguarda un cambiamento futuro di Java, non è un errore, e i voti hanno continuato ad arrivare.

La versione ufficiale non supporta Folia. Il fork mantenuto azuvotifier sì (versione 3.3.6, novembre 2025) e parla lo stesso protocollo, quindi le liste lo trattano come NuVotifier.

Chiave v1 o token v2

Le liste possono parlare con NuVotifier in due versioni del protocollo, e puoi lasciarle attive entrambe.

v1 (chiave pubblica)v2 (token)
Cosa dai alla listaIl contenuto di rsa/public.keyIl token di config.yml
Come è protetto un votoCifrato con la tua chiave pubblica RSAFirmato con HMAC-SHA256 usando il token, più una sfida nuova a ogni connessione
Un voto intercettato può essere rigiocatoSìNo, ogni sfida vale una volta sola
La lista scopre se ha funzionatoNo. NuVotifier legge 256 byte e chiude la connessione senza rispostaSì. NuVotifier risponde {"status":"ok"} o con un errore e il motivo
Chi lo supportaQuasi ogni listaLe liste che hanno implementato il protocollo di NuVotifier, serverlist.net compresa

Chiunque abbia la tua chiave pubblica v1 può creare un voto valido, perché cifrare con quella chiave è l'intero protocollo, quindi non incollarla mai in un canale pubblico. E se una chiave v1 corrisponda o no si vede nella tua console e da nessun'altra parte.

Su serverlist.net usa la v2. Tieni attiva la v1 finché altre liste che usi ne hanno bisogno. Al 18 ottobre 2026, 97 delle nostre 218 schede avevano Votifier configurato, 68 con una chiave v1 e 29 con un token v2 (live: 68 e 27).

Installare su Paper

  1. Scarica nuvotifier.jar dalla pagina delle release su GitHub di NuVotifier o dalla sua pagina su SpigotMC e mettilo nella cartella plugins del tuo server.

  2. Avvia il server. Al primo avvio NuVotifier stampa il tuo token e dove ascolta:

    [Votifier] Your default NuVotifier token is e4qk2v9m1r7t0p5s3a8d6f2h1j.
    [Votifier] Votifier enabled on socket /0.0.0.0:8192.
  3. Ferma il server e apri plugins/Votifier/config.yml. Senza i commenti, quella predefinita è fatta così:

    host: 0.0.0.0
    port: 8192
    disable-v1-protocol: false
    tokens:
      default: e4qk2v9m1r7t0p5s3a8d6f2h1j
    forwarding:
      method: none
      pluginMessaging:
        channel: nuvotifier:votes
  4. Controlla host. Per default prende il server-ip di server.properties, oppure 0.0.0.0 quando è vuoto. Sul nostro server di test server-ip era 127.0.0.1, quindi NuVotifier ascoltava in silenzio su 127.0.0.1:8192, dove nessuna lista poteva mai raggiungerlo. Leggi la riga Votifier enabled on socket dopo ogni riavvio. Dovrebbe mostrare 0.0.0.0 o un indirizzo raggiungibile da internet.

  5. Imposta port sulla porta che ti dà il tuo host. Deve essere una porta TCP libera e non può essere la tua porta di gioco.

  6. Lascia disable-v1-protocol: false a meno che ogni lista che usi supporti la v2.

  7. Riavvia completamente il server. Nel nostro test, un token rimosso da config.yml ha continuato a funzionare dopo /nvreload fino al riavvio successivo, quindi non fidarti di un reload dopo aver cambiato i token.

NuVotifier cerca il token in base al nome del servizio della lista e ripiega su default. Un token separato per ogni lista sembra ordinato, ma non funziona per nessun nome di servizio che contenga un punto, il nostro compreso. Paper legge ServerList.net: sotto tokens come una sezione chiamata ServerList con dentro una chiave net. Il lettore TOML di Velocity tiene le virgolette attorno a "ServerList.net" come parte del nome, e senza virgolette la configurazione non si carica affatto. In entrambi i casi la ricerca fallisce e NuVotifier verifica il nostro voto con default, quindi se ci hai dato il token separato, ogni voto fallisce con una firma non valida. Dacci il token default. Le chiavi v1 sono in plugins/Votifier/rsa/, e solo public.key lascia mai il tuo server.

Installare su un network Velocity o BungeeCord

In un network i voti arrivano al proxy, l'unico indirizzo che le liste conoscono. Installa lo stesso nuvotifier.jar sul proxy e su ogni backend che deve ricevere voti. La configurazione del proxy è plugins/nuvotifier/config.toml su Velocity e plugins/NuVotifier/config.yml su BungeeCord.

Inoltrare i voti ai server backend

Il plugin messaging è la scelta semplice per un solo proxy. I voti viaggiano verso i backend attraverso la connessione di un giocatore.

Sul proxy (config.toml su Velocity):

host = "0.0.0.0"
port = 8192

[forwarding]
method = "pluginMessaging"

[forwarding.pluginMessaging]
channel = "nuvotifier:votes"
cache = "file"
onlySendToJoinedServer = false

Su ogni backend (plugins/Votifier/config.yml), spegni il listener del backend con la porta -1 e attiva il forwarding:

port: -1
forwarding:
  method: pluginMessaging
  pluginMessaging:
    channel: nuvotifier:votes

I plugin message hanno bisogno di un giocatore connesso, quindi un backend senza nessuno online riceve i suoi voti più tardi: il proxy li mette in cache (in un file di default, fino a 10 giorni) e li passa quando qualcuno entra. Di default ogni backend riceve ogni voto, quindi se su ognuno gira un plugin di ricompense, chi vota viene pagato su ciascuno. Usa onlySendToJoinedServer = true con un server joinedServerFallback, excludedServers, oppure la configurazione proxy di VotingPlugin.

Il proxy forwarding invia ogni voto attraverso la rete al NuVotifier del backend, firmato con il token del backend. Non richiede giocatori online ma non ha cache: un voto che continua a fallire dopo cinque tentativi viene scartato. È la configurazione che abbiamo testato. Su ogni backend, dai a NuVotifier una porta sua, copia il suo token default e imposta disable-v1-protocol: true. Sul proxy:

[forwarding]
method = "proxy"

[forwarding.proxy.survival]
address = "10.0.0.12"
port = 8193
token = "the survival backend's default token"

Aggiungi un blocco per ogni backend. Il nome è solo un'etichetta. Nel nostro test, un voto v1 e un voto v2 inviati al proxy sono arrivati entrambi a Paper come voti v2 entro un secondo:

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

Poi abbiamo messo un token sbagliato nella voce del backend nel proxy. La lista ha comunque ricevuto {"status":"ok"} dal proxy, mentre il backend rifiutava ogni copia e il proxy continuava a riprovare:

[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).

Quindi in un network un test verde dimostra solo il proxy. Controlla anche la console di un backend. Con entrambi i metodi, proteggi i backend con un firewall in modo che solo il proxy possa raggiungere le loro porte di gioco e Votifier, altrimenti chiunque potrebbe mandargli voti falsi.

Aprire la porta

Votifier ha bisogno di una porta TCP raggiungibile da internet.

  • Hosting di server di gioco. Aggiungi una seconda porta nel tuo pannello (spesso un'assegnazione sotto una sezione Rete) e imposta port di NuVotifier su quella. Lascia host: 0.0.0.0.
  • Un VPS o un server dedicato. Aprila nel firewall, per esempio con sudo ufw allow 8192/tcp, e nel firewall di rete del tuo provider se ce n'è uno.
  • Docker. Pubblicala accanto alla porta di gioco, per esempio con -p 8192:8192.
  • Protezione DDoS. I servizi che proteggono l'indirizzo di gioco di solito inoltrano solo la porta di Minecraft, quindi punta Votifier all'IP della macchina stessa. Delle 97 schede con Votifier al 18 ottobre 2026, 68 usavano per Votifier un host diverso da quello del gioco, 49 di queste un semplice indirizzo IP.

La maggior parte dei server finisce su una porta diversa dalla 8192. Alla stessa data solo 19 di quelle 97 usavano quella predefinita (live: 18), su 70 porte diverse in totale. Due usavano la 25575, la porta RCON predefinita, che funziona solo finché RCON è spento o spostato.

Per controllare la porta da fuori, lancia questo da un'altra macchina o da un'altra rete:

nc -v 203.0.113.10 8192

NuVotifier accoglie ogni connessione con una riga come VOTIFIER 2 mmdin5k3bh10u2fommgp3hahkv. Se la vedi, la porta è aperta e dietro c'è NuVotifier. Su Windows, Test-NetConnection 203.0.113.10 -Port 8192 in PowerShell mostra TcpTestSucceeded : True per una porta aperta, senza il saluto.

Aggiungere i dati alla tua scheda su serverlist.net

Quando aggiungi un server, il passaggio «Voti» chiede Votifier. Per una scheda che hai già, aprila dalla dashboard e usa la sua sezione «Voti». Entrambi hanno le stesse quattro parti.

  1. Dove ascolta Votifier. Inserisci l'host che raggiunge Votifier, spesso l'IP del server anziché l'indirizzo che usano i giocatori, e la porta di Votifier, non quella di gioco. Controlla la porta bussa a quella porta e legge il saluto di Votifier senza inviare un voto, così vedi subito se la porta è aperta e se risponde NuVotifier o il Votifier classico.
  2. Chiave o token. Scegli Token NuVotifier e incolla il tuo token default, oppure scegli Chiave pubblica Votifier e incolla tutto il contenuto di public.key. La chiave predefinita a 2048 bit è una sola riga di 392 caratteri che inizia con MIIBIjANBgkq. Non incollare mai private.key.
  3. Il tuo plugin delle ricompense. Questa parte mostra la riga che serve a VotingPlugin, spiegata più sotto.
  4. Voto di prova. Inviane uno prima di pubblicare o salvare.

Il tuo token e la tua chiave vengono salvati cifrati. Ogni voto viene prima salvato e consegnato subito dopo in background, le consegne fallite vengono ritentate, e ogni tentativo compare nel registro delle consegne di quella sezione. Il nostro sistema precedente non conservava i risultati delle consegne, quindi qui aggiungeremo una ripartizione degli errori più comuni quando il nuovo registro coprirà un mese intero.

Provare con il test Votifier

Il test Votifier invia un vero voto, con un nome utente a tua scelta, all'indirizzo che inserisci. Chiede un captcha e consente cinque test per indirizzo IP ogni dieci minuti. Per la v2 mostra la risposta stessa di NuVotifier, {"status":"ok"} o un errore della tabella qui sotto. Per la v1 può solo mostrare che si è connesso e ha inviato il voto, quindi conferma nella tua console.

Un voto consegnato avvia una riga di console come questa, che poi elenca nome del servizio, nome utente, indirizzo e timestamp del voto:

[Votifier] Got a protocol v2 vote record from /203.0.113.7:50480

Se le righe successive dicono A vote was received, but you don't have any listeners available to listen for it., la consegna funziona e manca solo il plugin di ricompense.

Il comando di console testvote salta rete, chiave e token e fa scattare un evento di voto dentro il tuo server, quindi testa le ricompense, non la consegna. I dettagli extra vanno scritti come key=value:

testvote Steve serviceName=ServerList.net

Digitato come testvote Alex ServerList.net 127.0.0.1, ha messo 127.0.0.1 nel campo del nome utente e ha mantenuto il nome del servizio TestVote. Su un proxy il comando è ptestvote.

Collegare le ricompense con VotingPlugin

VotingPlugin è la scelta mantenuta attivamente (7.1.1, luglio 2026). SuperbVote, ancora citato nella guida alla configurazione di NuVotifier, è stato aggiornato l'ultima volta a dicembre 2020.

  1. Metti VotingPlugin.jar in plugins accanto a NuVotifier e riavvia.

  2. Invia un voto di prova. VotingPlugin crea da solo un sito per ogni nuovo nome di servizio:

    [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...
  3. Apri plugins/VotingPlugin/VoteSites.yml, trova la voce ServerList_net generata e assegnale una ricompensa. Una voce completa è fatta così:

    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!'

    ServiceSite deve corrispondere esattamente. VoteDelay: 24h corrisponde al nostro cooldown di 24 ore dall'ultimo voto, così /vote next mostra l'orario giusto. eco give presuppone un plugin di economia come EssentialsX.

  4. Ricarica con /av reload e vota di nuovo con il nome di un giocatore che è già entrato nel tuo server.

Quest'ultimo passaggio fa inciampare quasi tutti. Con le impostazioni predefinite VotingPlugin ignora i voti per nomi che non ha mai visto:

[VotingPlugin] Player Steve has not joined before, disregarding vote. Reason: unknown-user. Set AllowUnjoined to true to accept.

Prova con il tuo nome, oppure imposta AllowUnjoined: true in Config.yml. Per un giocatore che era offline, VotingPlugin ha annunciato subito il voto ma ha trattenuto la ricompensa a comando, che di default consegna alla prossima entrata del giocatore.

  • Giocatori Bedrock. Con Geyser e Floodgate i nomi Bedrock portano un prefisso, un punto di default, quindi un giocatore Bedrock deve votare come .Steve perché la ricompensa lo trovi. Negli ultimi 30 giorni una quota pari a 6% di tutti i voti su serverlist.net veniva da nomi Bedrock, quindi cita il prefisso nel tuo messaggio /vote. La guida a Geyser tratta l'impostazione del prefisso.
  • Network. La modalità proxy di VotingPlugin si configura in BungeeSettings.yml. Dai a ogni backend un nome di server univoco e tieni VoteSites.yml uguale su tutti.

Cosa vedono i giocatori dal loro lato, e cosa dire loro quando una ricompensa non arriva, è in perché i server Minecraft ti chiedono di votare.

Errori e cosa significano

Ogni messaggio in formato codice viene dal nostro banco di prova. «Lista» indica ciò che riceve una lista v2, o il nostro test.

Messaggio, e dove lo vediCosa significaSoluzione
Connection refused, sulla lista o nel testNessuno ascolta su quell'indirizzo e quella porta.Leggi la riga Votifier enabled on socket per la porta e l'indirizzo reali.
Connessione scaduta, sulla lista o nel testUn firewall o l'host scarta la connessione, oppure l'host è un indirizzo protetto che inoltra solo la porta di gioco.Apri la porta TCP. Usa l'IP della macchina stessa.
Votifier was not able to bind to /0.0.0.0:8192, nella console all'avvioUn altro programma usa già la porta, spesso un secondo server o il proxy sulla stessa macchina.Dai a ogni NuVotifier una porta sua.
Could not decrypt data from /203.0.113.7:46788. Make sure the public key on the list is correct., nella consoleChiave v1 non corrispondente. La lista ha una chiave vecchia, la chiave di un altro server o una chiave troncata.Copia di nuovo public.key, per intero, e aggiorna la lista.
Signature is not valid (invalid token?), sulla lista e nella consoleToken v2 non corrispondente.Copia di nuovo il token default, senza spazi. Rimuovi ogni token che hai aggiunto con il nostro nome di servizio. In un network controlla anche le voci dei backend nel proxy.
Unknown service 'ServerList.net', sulla lista e nella consoleNon c'è un token default in tokens.Aggiungi un token default e dallo alla lista.
This server only accepts well-formed Votifier v2 packets., nella consoledisable-v1-protocol è attivo e una lista ha inviato un voto v1.Passa quella lista alla v2, o riattiva la v1.
Challenge is not valid, sulla lista e nella consoleLa lista ha risposto con la sfida sbagliata. È un bug dal lato della lista.Segnalalo alla lista.
A vote was received, but you don't have any listeners available to listen for it., nella consoleLa consegna funziona. Non è installato nessun plugin di ricompense.Installa VotingPlugin.
Player Steve has not joined before, disregarding vote. Reason: unknown-user., nella consoleVotingPlugin ha saltato un nome che non ha mai visto.Prova con un giocatore reale, o imposta AllowUnjoined: true.
Unable to send vote to /127.0.0.1:8192. Will retry sending in 1 second(s)., nella console del proxyIl proxy forwarding non riesce a consegnare a un backend: token, porta o indirizzo sbagliati.Leggi la console del backend per il motivo reale.

Quando gli errori arrivano a raffica, NuVotifier smette di stamparli dopo il quinto entro due secondi, quindi manda un test alla volta.

Domande frequenti

Quale porta deve usare Votifier? Qualsiasi porta TCP libera che il tuo host ti lascia aprire. La 8192 è solo quella predefinita. Non può essere la tua porta di gioco, ed evita la 25575 se usi RCON.

Mi serve la v2? No, accettiamo entrambe. La v2 è meglio dove una lista la supporta: i voti non si possono rigiocare, e la lista può mostrarti l'errore esatto. Tieni attiva la v1 per le liste che inviano solo la v1.

Perché alcune liste supportano solo la v1? La v1 è il protocollo Votifier originale che ogni lista ha implementato anni fa. La v2 è arrivata con NuVotifier, e ogni lista deve aggiungerla separatamente.

Vale la pena configurarlo? Quasi tutto il voto avviene dove Votifier è configurato. Negli ultimi 30 giorni il 99,7% di tutti i voti su serverlist.net è andato a schede con Votifier configurato. Nei 30 giorni fino al 18 ottobre 2026 sono stati 15.443 voti su 15.477, mentre 11 schede senza Votifier si sono spartite i restanti 34. I voti alimentano anche la tua posizione nella lista, che la guida ai tuoi primi 100 giocatori inquadra meglio.