Connexion Ajouter un serveur

GuidePour les propriétaires de serveurs

Installer NuVotifier et le tester, étape par étape

Installez NuVotifier sur Paper ou Velocity, ouvrez le port, testez et comprenez chaque erreur du journal. Testé sur Paper 26.3 et Velocity 4.2.

La rédaction de ServerList Publié le 14 min de lecture
Console du serveur[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 est le plugin qui reçoit les votes des listes de serveurs. Vous l'installez sur votre serveur ou votre proxy, vous ouvrez un port TCP et vous donnez à chaque liste votre adresse, le port et soit une clé publique v1, soit un jeton v2. Il ne distribue aucune récompense tout seul : il vous faut aussi un plugin de récompenses comme VotingPlugin, et vous devriez tester tout le trajet une fois avant de dire aux joueurs de faire /vote.

Nous avons écrit ce guide en regardant les deux bouts du fil. serverlist.net envoie des votes à 95 fiches en ce moment, et pour ce guide nous avons fait tourner NuVotifier sur un serveur Paper 26.3 tout neuf et sur un proxy Velocity 4.2, nous lui avons envoyé de bons votes et d'autres volontairement cassés, et nous avons recopié ce que la console affichait. Chaque ligne de journal citée ci-dessous vient de cette installation, avec des jetons et des adresses remplacés par des exemples.

  1. Placez nuvotifier.jar dans votre dossier plugins et redémarrez.
  2. Notez le port (8192 par défaut), le jeton et la clé publique que NuVotifier génère.
  3. Ouvrez ce port en TCP chez votre hébergeur ou dans votre pare-feu.
  4. Ajoutez l'adresse, le port et le jeton (ou la clé) à votre fiche serverlist.net.
  5. Envoyez un test depuis le testeur Votifier et surveillez la console.
  6. Installez VotingPlugin et donnez une récompense au site de vote ServerList.net.

Ce que NuVotifier fait et ne fait pas

NuVotifier écoute sur un port TCP. Quand une liste se connecte, il lit un message de vote, le vérifie avec votre clé ou votre jeton et déclenche un événement de vote dans le serveur. Un vote contient quatre éléments : le nom de service de la liste (le nôtre est ServerList.net), le pseudo que le joueur a saisi, l'adresse IP du votant et un horodatage.

Ce qu'il ne fait pas compte tout autant :

  • Il ne donne aucune récompense. Un plugin de récompenses écoute l'événement et paie.
  • Il ne vérifie pas que le joueur existe. La liste valide les pseudos, et le plugin de récompenses décide quoi faire des inconnus.
  • Il n'utilise que le TCP. Un port ouvert en UDP seulement laisse Votifier injoignable.
  • Il ne renvoie rien à une liste v1, ce qui change la façon de tester.

La version officielle reste la 2.7.3 de juillet 2021, un seul JAR pour Paper, Spigot, BungeeCord, Velocity et Sponge. Dans notre test, elle s'est chargée et a reçu des votes sur Paper 26.3 et Velocity 4.2.0 sans modification. Sous Java 25, elle affiche un bloc d'avertissements qui inclut WARNING: sun.misc.Unsafe::objectFieldOffset has been called by. Cela concerne un futur changement de Java, pas une erreur, et les votes ont continué à passer.

La version officielle ne prend pas en charge Folia. Le fork maintenu azuvotifier, lui, le fait (version 3.3.6, novembre 2025) et parle le même protocole, donc les listes le traitent comme NuVotifier.

Clé v1 ou jeton v2

Les listes peuvent parler à NuVotifier dans deux versions du protocole, et vous pouvez garder les deux activées.

v1 (clé publique)v2 (jeton)
Ce que vous donnez à la listeLe contenu de rsa/public.keyLe jeton de config.yml
Comment un vote est protégéChiffré avec votre clé publique RSASigné en HMAC-SHA256 avec le jeton, plus un défi neuf à chaque connexion
Un vote capturé peut être rejouéOuiNon, chaque défi ne sert qu'une fois
La liste sait si cela a marchéNon. NuVotifier lit 256 octets et ferme la connexion sans réponseOui. NuVotifier répond {"status":"ok"} ou une erreur avec sa raison
Qui le prend en chargePresque toutes les listesLes listes qui ont implémenté le protocole de NuVotifier, serverlist.net compris

Quiconque détient votre clé publique v1 peut créer un vote valide, puisque chiffrer avec elle est tout le protocole : ne la collez donc jamais dans un canal public. Et le fait qu'une clé v1 corresponde ou non n'apparaît que dans votre console, nulle part ailleurs.

Sur serverlist.net, utilisez la v2. Gardez la v1 activée tant que d'autres listes que vous utilisez en ont besoin. Au 18 octobre 2026, 97 de nos 218 fiches avaient Votifier configuré, 68 avec une clé v1 et 29 avec un jeton v2 (en direct : 68 et 27).

Installer sur Paper

  1. Téléchargez nuvotifier.jar depuis la page des versions GitHub de NuVotifier ou sa page SpigotMC et placez-le dans le dossier plugins de votre serveur.

  2. Démarrez le serveur. Au premier démarrage, NuVotifier affiche votre jeton et l'endroit où il écoute :

    [Votifier] Your default NuVotifier token is e4qk2v9m1r7t0p5s3a8d6f2h1j.
    [Votifier] Votifier enabled on socket /0.0.0.0:8192.
  3. Arrêtez le serveur et ouvrez plugins/Votifier/config.yml. Sans ses commentaires, la version par défaut ressemble à ceci :

    host: 0.0.0.0
    port: 8192
    disable-v1-protocol: false
    tokens:
      default: e4qk2v9m1r7t0p5s3a8d6f2h1j
    forwarding:
      method: none
      pluginMessaging:
        channel: nuvotifier:votes
  4. Vérifiez host. Il prend par défaut la valeur de server-ip dans server.properties, ou 0.0.0.0 quand elle est vide. Sur notre serveur de test, server-ip valait 127.0.0.1, donc NuVotifier écoutait discrètement sur 127.0.0.1:8192, où aucune liste ne pouvait jamais l'atteindre. Lisez la ligne Votifier enabled on socket après chaque redémarrage. Elle doit afficher 0.0.0.0 ou une adresse joignable depuis Internet.

  5. Réglez port sur le port que votre hébergeur vous donne. Ce doit être un port TCP libre, et ce ne peut pas être votre port de jeu.

  6. Laissez disable-v1-protocol: false tant que toutes les listes que vous utilisez ne gèrent pas la v2.

  7. Redémarrez complètement le serveur. Dans notre test, un jeton supprimé de config.yml a continué à fonctionner après /nvreload jusqu'au redémarrage suivant, donc ne vous fiez pas à un rechargement après avoir changé des jetons.

NuVotifier cherche le jeton d'après le nom de service de la liste et se rabat sur default. Un jeton distinct par liste semble bien rangé, mais cela ne marche pour aucun nom de service contenant un point, le nôtre compris. Paper lit ServerList.net: sous tokens comme une section nommée ServerList contenant une clé net. Le lecteur TOML de Velocity garde les guillemets autour de "ServerList.net" comme partie du nom, et sans guillemets la config ne se charge pas du tout. Dans les deux cas, la recherche échoue et NuVotifier vérifie notre vote avec default, donc si vous nous avez donné le jeton distinct, chaque vote échoue avec une signature invalide. Donnez-nous le jeton default. Les clés v1 se trouvent dans plugins/Votifier/rsa/, et seule public.key quitte un jour votre serveur.

Installer sur un réseau Velocity ou BungeeCord

Sur un réseau, les votes arrivent au proxy, la seule adresse que les listes connaissent. Installez le même nuvotifier.jar sur le proxy et sur chaque backend qui doit recevoir des votes. La config du proxy est plugins/nuvotifier/config.toml sur Velocity et plugins/NuVotifier/config.yml sur BungeeCord.

Transmettre les votes aux serveurs backend

Le plugin messaging est le choix simple pour un seul proxy. Les votes voyagent jusqu'aux backends par la connexion d'un joueur.

Sur le proxy (config.toml sur Velocity) :

host = "0.0.0.0"
port = 8192

[forwarding]
method = "pluginMessaging"

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

Sur chaque backend (plugins/Votifier/config.yml), désactivez l'écouteur propre au backend avec le port -1 et activez le forwarding :

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

Les messages de plugin ont besoin d'un joueur connecté, donc un backend sans personne en ligne reçoit ses votes plus tard : le proxy les met en cache (dans un fichier par défaut, jusqu'à 10 jours) et les transmet quand quelqu'un se connecte. Par défaut, chaque backend reçoit chaque vote, donc si chacun fait tourner un plugin de récompenses, le votant est payé sur chacun. Utilisez onlySendToJoinedServer = true avec un serveur joinedServerFallback, excludedServers, ou la configuration proxy propre à VotingPlugin.

Le proxy forwarding envoie chaque vote par le réseau au NuVotifier propre du backend, signé avec le jeton du backend. Il n'exige aucun joueur en ligne mais n'a pas de cache : un vote qui échoue encore après cinq nouvelles tentatives est abandonné. C'est la configuration que nous avons testée. Sur chaque backend, donnez à NuVotifier son propre port, copiez son jeton default et réglez disable-v1-protocol: true. Sur le proxy :

[forwarding]
method = "proxy"

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

Ajoutez un bloc par backend. Le nom n'est qu'une étiquette. Dans notre test, un vote v1 et un vote v2 envoyés au proxy sont tous deux arrivés sur Paper comme des votes v2 en moins d'une seconde :

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

Ensuite, nous avons mis un mauvais jeton dans l'entrée de backend du proxy. La liste a quand même reçu {"status":"ok"} du proxy, alors que le backend rejetait chaque copie et que le proxy réessayait sans cesse :

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

Donc sur un réseau, un test vert ne prouve que le proxy. Regardez aussi la console d'un backend. Avec l'une ou l'autre méthode, protégez les backends par un pare-feu pour que seul le proxy puisse atteindre leurs ports de jeu et Votifier, sinon n'importe qui pourrait leur envoyer de faux votes.

Ouvrir le port

Votifier a besoin d'un port TCP joignable depuis Internet.

  • Hébergeurs de serveurs de jeu. Ajoutez un second port dans votre panneau (souvent une allocation sous un onglet Réseau) et réglez le port de NuVotifier dessus. Gardez host: 0.0.0.0.
  • Un VPS ou un serveur dédié. Ouvrez-le dans le pare-feu, par exemple avec sudo ufw allow 8192/tcp, et dans le pare-feu réseau de votre fournisseur s'il y en a un.
  • Docker. Publiez-le à côté du port de jeu, par exemple avec -p 8192:8192.
  • Protection DDoS. Les services qui protègent l'adresse de jeu ne transmettent généralement que le port Minecraft : pointez donc Votifier vers l'IP propre de la machine. Sur les 97 fiches avec Votifier au 18 octobre 2026, 68 utilisaient pour Votifier un autre hôte que pour le jeu, dont 49 une simple adresse IP.

La plupart des serveurs finissent sur un port autre que le 8192. À la même date, seules 19 de ces 97 fiches utilisaient celui par défaut (en direct : 18), sur 70 ports différents au total. Deux utilisaient le 25575, le port RCON par défaut, ce qui ne marche que tant que RCON est désactivé ou déplacé.

Pour vérifier le port depuis l'extérieur, lancez ceci depuis une autre machine ou un autre réseau :

nc -v 203.0.113.10 8192

NuVotifier accueille chaque connexion avec une ligne comme VOTIFIER 2 mmdin5k3bh10u2fommgp3hahkv. Si vous la voyez, le port est ouvert et NuVotifier est derrière. Sous Windows, Test-NetConnection 203.0.113.10 -Port 8192 dans PowerShell affiche TcpTestSucceeded : True pour un port ouvert, sans l'accueil.

Ajouter les informations à votre fiche serverlist.net

Quand vous ajoutez un serveur, l'étape « Votes » demande Votifier. Pour une fiche que vous avez déjà, ouvrez-la depuis le tableau de bord et utilisez son onglet « Votes ». Les deux ont les mêmes quatre parties.

  1. Où Votifier écoute. Saisissez l'hôte qui atteint Votifier, souvent l'IP du serveur plutôt que l'adresse utilisée par les joueurs, et le port Votifier, pas le port de jeu. Tester le port frappe à ce port et lit l'accueil de Votifier sans envoyer de vote, ce qui vous montre tout de suite si le port est ouvert et si c'est NuVotifier ou le Votifier classique qui répond.
  2. Clé ou jeton. Choisissez Jeton NuVotifier et collez votre jeton default, ou choisissez Clé publique Votifier et collez tout le contenu de public.key. La clé de 2048 bits par défaut tient sur une seule ligne de 392 caractères commençant par MIIBIjANBgkq. Ne collez jamais private.key.
  3. Votre plugin de récompenses. Cette partie affiche la ligne dont VotingPlugin a besoin, expliquée plus bas.
  4. Vote de test. Envoyez-en un avant de publier ou d'enregistrer.

Votre jeton et votre clé sont stockés chiffrés. Chaque vote est d'abord enregistré, puis livré juste après en arrière-plan, les livraisons échouées sont retentées, et chaque tentative apparaît dans le journal de livraison de cet onglet. Notre ancien système ne gardait aucun résultat de livraison, nous ajouterons donc ici une répartition des échecs les plus courants une fois que le nouveau journal couvrira un mois complet.

Tester avec le testeur Votifier

Le testeur Votifier envoie un vrai vote, avec le pseudo de votre choix, à l'adresse que vous saisissez. Il demande un captcha et autorise cinq tests par adresse IP toutes les dix minutes. Pour la v2, il affiche la réponse même de NuVotifier, {"status":"ok"} ou une erreur du tableau ci-dessous. Pour la v1, il peut seulement montrer qu'il s'est connecté et a envoyé le vote : confirmez donc dans votre console.

Un vote livré déclenche une ligne de console comme celle-ci, qui énumère ensuite le nom de service, le pseudo, l'adresse et l'horodatage du vote :

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

Si les lignes suivantes disent A vote was received, but you don't have any listeners available to listen for it., la livraison fonctionne et il ne manque que le plugin de récompenses.

La commande de console testvote saute le réseau, la clé et le jeton et déclenche un événement de vote à l'intérieur de votre serveur : elle teste donc les récompenses, pas la livraison. Les détails supplémentaires doivent être écrits sous la forme key=value :

testvote Steve serviceName=ServerList.net

Saisie sous la forme testvote Alex ServerList.net 127.0.0.1, elle a mis 127.0.0.1 dans le champ du pseudo et gardé le nom de service TestVote. Sur un proxy, la commande est ptestvote.

Brancher les récompenses avec VotingPlugin

VotingPlugin est le choix activement maintenu (7.1.1, juillet 2026). SuperbVote, encore cité dans le guide d'installation de NuVotifier, a été mis à jour pour la dernière fois en décembre 2020.

  1. Placez VotingPlugin.jar dans plugins à côté de NuVotifier et redémarrez.

  2. Envoyez un vote de test. VotingPlugin crée tout seul un site pour tout nouveau nom de service :

    [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. Ouvrez plugins/VotingPlugin/VoteSites.yml, repérez l'entrée ServerList_net générée et donnez-lui une récompense. Une entrée terminée ressemble à ceci :

    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 doit correspondre exactement. VoteDelay: 24h correspond à notre délai glissant de 24 heures, pour que /vote next affiche la bonne heure. eco give suppose un plugin d'économie comme EssentialsX.

  4. Rechargez avec /av reload et votez de nouveau avec le pseudo d'un joueur qui s'est déjà connecté à votre serveur.

Cette dernière étape piège presque tout le monde. Avec les réglages par défaut, VotingPlugin ignore les votes pour des pseudos qu'il n'a jamais vus :

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

Testez avec votre propre pseudo, ou réglez AllowUnjoined: true dans Config.yml. Pour un joueur hors ligne, VotingPlugin a annoncé le vote aussitôt mais retenu la récompense par commande, qu'il distribue par défaut à la prochaine connexion du joueur.

  • Joueurs Bedrock. Avec Geyser et Floodgate, les pseudos Bedrock portent un préfixe, un point par défaut, donc un joueur Bedrock doit voter en tant que .Steve pour que la récompense le retrouve. Au cours des 30 derniers jours, 6 % de tous les votes sur serverlist.net venaient de pseudos Bedrock : mentionnez donc le préfixe dans votre message /vote. Le guide Geyser couvre le réglage du préfixe.
  • Réseaux. Le mode proxy de VotingPlugin se règle dans BungeeSettings.yml. Donnez à chaque backend un nom de serveur unique et gardez le même VoteSites.yml partout.

Ce que voient les joueurs de leur côté, et ce qu'il faut leur dire quand une récompense manque, se trouve dans pourquoi les serveurs Minecraft vous demandent de voter.

Erreurs et ce qu'elles signifient

Chaque message au format code vient de notre banc d'essai. « Liste » désigne ce que reçoit une liste v2, ou notre testeur.

Message, et où vous le voyezCe que cela signifieSolution
Connection refused, côté liste ou testeurRien n'écoute sur cette adresse et ce port.Lisez la ligne Votifier enabled on socket pour connaître le vrai port et la vraie adresse.
Délai de connexion dépassé, côté liste ou testeurUn pare-feu ou l'hébergeur coupe la connexion, ou l'hôte est une adresse protégée qui ne transmet que le port de jeu.Ouvrez le port TCP. Utilisez l'IP propre de la machine.
Votifier was not able to bind to /0.0.0.0:8192, dans la console au démarrageUn autre programme utilise déjà le port, souvent un second serveur ou le proxy sur la même machine.Donnez à chaque NuVotifier son propre port.
Could not decrypt data from /203.0.113.7:46788. Make sure the public key on the list is correct., dans la consoleClé v1 incorrecte. La liste a une ancienne clé, la clé d'un autre serveur ou une clé tronquée.Copiez à nouveau public.key, en entier, et mettez la liste à jour.
Signature is not valid (invalid token?), côté liste et dans la consoleJeton v2 incorrect.Copiez à nouveau le jeton default, sans espaces. Supprimez tout jeton ajouté sous notre nom de service. Sur un réseau, vérifiez aussi les entrées de backend du proxy.
Unknown service 'ServerList.net', côté liste et dans la consoleIl n'y a pas de jeton default dans tokens.Ajoutez un jeton default et donnez-le à la liste.
This server only accepts well-formed Votifier v2 packets., dans la consoledisable-v1-protocol est activé et une liste a envoyé un vote v1.Passez cette liste en v2, ou réactivez la v1.
Challenge is not valid, côté liste et dans la consoleLa liste a répondu avec un mauvais défi. C'est un bug côté liste.Signalez-le à la liste.
A vote was received, but you don't have any listeners available to listen for it., dans la consoleLa livraison fonctionne. Aucun plugin de récompenses n'est installé.Installez VotingPlugin.
Player Steve has not joined before, disregarding vote. Reason: unknown-user., dans la consoleVotingPlugin a ignoré un pseudo qu'il n'a jamais vu.Testez avec un vrai joueur, ou réglez AllowUnjoined: true.
Unable to send vote to /127.0.0.1:8192. Will retry sending in 1 second(s)., dans la console du proxyLe proxy forwarding ne peut pas livrer à un backend : mauvais jeton, port ou adresse.Lisez la console du backend pour connaître la vraie raison.

Quand les erreurs arrivent en rafale, NuVotifier cesse de les afficher après la cinquième en deux secondes : envoyez donc un seul test à la fois.

FAQ

Quel port Votifier doit-il utiliser ? N'importe quel port TCP libre que votre hébergeur vous laisse ouvrir. Le 8192 n'est que le port par défaut. Ce ne peut pas être votre port de jeu, et évitez le 25575 si vous utilisez RCON.

Ai-je besoin de la v2 ? Non, nous acceptons les deux. La v2 est meilleure là où une liste la prend en charge : les votes ne peuvent pas être rejoués, et la liste peut vous montrer l'erreur exacte. Gardez la v1 activée pour les listes qui n'envoient que de la v1.

Pourquoi certaines listes ne gèrent-elles que la v1 ? La v1 est le protocole Votifier d'origine que chaque liste a implémenté il y a des années. La v2 est arrivée avec NuVotifier, et chaque liste doit l'ajouter séparément.

Cela vaut-il la peine de le configurer ? Presque tous les votes se font là où Votifier est configuré. Au cours des 30 derniers jours, 99,7 % de tous les votes sur serverlist.net sont allés à des fiches avec Votifier configuré. Sur les 30 jours jusqu'au 18 octobre 2026, cela représentait 15 443 votes sur 15 477, tandis que 11 fiches sans Votifier se partageaient les 34 restants. Les votes alimentent aussi votre position dans la liste, que le guide de vos 100 premiers joueurs replace dans son contexte.