GuíaPara propietarios de servidores
Cómo configurar NuVotifier en tu servidor de Minecraft y probarlo
Instala NuVotifier en Paper o en una network con Velocity, abre el puerto, pruébalo y entiende cada error que da. Probado en Paper 26.3 y Velocity 4.2.
NuVotifier es el plugin que recibe los votos de las listas de servidores. Lo instalas en tu servidor o en tu proxy, abres un puerto TCP y das a cada lista tu dirección, el puerto y una clave pública v1 o un token v2. No reparte recompensas por sí solo, así que también necesitas un plugin de recompensas como VotingPlugin, y conviene probar todo el recorrido una vez antes de decir a los jugadores que usen /vote.
Escribimos esta guía desde los dos extremos del cable. serverlist.net envía votos a 95 fichas ahora mismo, y para esta guía ejecutamos NuVotifier en un servidor Paper 26.3 recién instalado y en un proxy Velocity 4.2, le enviamos votos correctos y otros deliberadamente rotos y copiamos lo que imprimía la consola. Todas las líneas de registro que se citan abajo salieron de esa instalación, con los tokens y las direcciones cambiados por ejemplos.
- Pon
nuvotifier.jaren tu carpetapluginsy reinicia. - Anota el puerto (8192 por defecto), el token y la clave pública que genera NuVotifier.
- Abre ese puerto para TCP en tu hosting o en el cortafuegos.
- Añade la dirección, el puerto y el token (o la clave) a tu ficha de serverlist.net.
- Envía una prueba desde el probador de Votifier y vigila la consola.
- Instala VotingPlugin y dale una recompensa al sitio de votos
ServerList.net.
Qué hace y qué no hace NuVotifier
NuVotifier escucha en un puerto TCP. Cuando una lista se conecta, lee un mensaje de voto, lo comprueba con tu clave o tu token y lanza un evento de voto dentro del servidor. Un voto lleva cuatro datos: el nombre de servicio de la lista (el nuestro es ServerList.net), el nombre de usuario que escribió el jugador, la dirección IP del votante y una marca de tiempo.
Lo que no hace importa tanto como lo que hace:
- No da recompensas. Un plugin de recompensas escucha el evento y paga.
- No comprueba que el jugador exista. La lista valida los nombres, y el plugin de recompensas decide qué hacer con los desconocidos.
- Usa solo TCP. Un puerto abierto únicamente para UDP deja a Votifier fuera de alcance.
- No envía nada de vuelta a una lista v1, y eso cambia la forma de probarlo.
La versión oficial sigue siendo la 2.7.3 de julio de 2021, un único jar para Paper, Spigot, BungeeCord, Velocity y Sponge. En nuestra prueba se cargó y recibió votos sin cambios en Paper 26.3 y Velocity 4.2.0. Con Java 25 imprime un bloque de avisos que incluye WARNING: sun.misc.Unsafe::objectFieldOffset has been called by. Es un aviso sobre un cambio futuro de Java, no un error, y los votos siguieron funcionando.
La versión oficial no es compatible con Folia. El fork que sigue manteniéndose, azuvotifier, sí lo es (versión 3.3.6, noviembre de 2025) y habla el mismo protocolo, así que las listas lo tratan como a NuVotifier.
Clave v1 o token v2
Las listas pueden hablar con NuVotifier en dos versiones del protocolo, y puedes dejar las dos activadas.
| v1 (clave pública) | v2 (token) | |
|---|---|---|
| Qué das a la lista | El contenido de rsa/public.key | El token de config.yml |
| Cómo se protege un voto | Cifrado con tu clave pública RSA | Firmado con HMAC-SHA256 usando el token, más un desafío nuevo en cada conexión |
| Se puede reenviar un voto capturado | Sí | No, cada desafío sirve una sola vez |
| La lista se entera de si funcionó | No. NuVotifier lee 256 bytes y cierra la conexión sin responder | Sí. NuVotifier responde {"status":"ok"} o un error con su motivo |
| Quién lo admite | Casi todas las listas | Las listas que implementaron el protocolo de NuVotifier, serverlist.net incluida |
Cualquiera que tenga tu clave pública v1 puede crear un voto válido, porque cifrar con ella es todo el protocolo, así que nunca la pegues en un canal público. Y si una clave v1 coincidió o no, solo se ve en tu consola y en ningún otro sitio.
En serverlist.net, usa v2. Deja v1 activado mientras otras listas que uses sigan necesitándolo. A fecha de 18 de octubre de 2026, 97 de nuestras 218 fichas tenían Votifier configurado, 68 con una clave v1 y 29 con un token v2 (en directo: 68 y 27).
Instalar en Paper
Descarga
nuvotifier.jarde la página de releases de GitHub de NuVotifier o de su página de SpigotMC y ponlo en la carpetapluginsde tu servidor.Arranca el servidor. En el primer arranque, NuVotifier imprime tu token y dónde escucha:
[Votifier] Your default NuVotifier token is e4qk2v9m1r7t0p5s3a8d6f2h1j. [Votifier] Votifier enabled on socket /0.0.0.0:8192.Para el servidor y abre
plugins/Votifier/config.yml. Sin sus comentarios, la configuración por defecto tiene este aspecto:host: 0.0.0.0 port: 8192 disable-v1-protocol: false tokens: default: e4qk2v9m1r7t0p5s3a8d6f2h1j forwarding: method: none pluginMessaging: channel: nuvotifier:votesRevisa
host. Por defecto toma elserver-ipdeserver.properties, o0.0.0.0cuando está vacío. En nuestro servidor de pruebaserver-ipera127.0.0.1, así que NuVotifier escuchaba en silencio en127.0.0.1:8192, adonde ninguna lista podía llegar jamás. Lee la líneaVotifier enabled on socketdespués de cada reinicio. Tiene que mostrar0.0.0.0o una dirección a la que llegue internet.Pon en
portel puerto que te dé tu hosting. Tiene que ser un puerto TCP libre y no puede ser el de tu juego.Deja
disable-v1-protocol: falsea menos que todas las listas que uses admitan v2.Reinicia el servidor del todo. En nuestra prueba, un token borrado de
config.ymlsiguió funcionando después de/nvreloadhasta el siguiente reinicio, así que no te fíes de una recarga después de cambiar tokens.
NuVotifier busca el token por el nombre de servicio de la lista y recurre a default. Un token distinto por lista suena ordenado, pero no funciona con ningún nombre de servicio que lleve un punto, el nuestro incluido. Paper lee ServerList.net: dentro de tokens como una sección llamada ServerList con una clave net dentro. El lector de TOML de Velocity conserva las comillas de "ServerList.net" como parte del nombre, y sin comillas la configuración no carga en absoluto. En los dos casos la búsqueda falla y NuVotifier comprueba nuestro voto con default, así que si nos diste el token por separado, todos los votos fallan por firma no válida. Danos el token default. Las claves v1 están en plugins/Votifier/rsa/, y solo public.key sale alguna vez de tu servidor.
Instalar en una network con Velocity o BungeeCord
En una network, los votos llegan al proxy, la única dirección que conocen las listas. Instala el mismo nuvotifier.jar en el proxy y en cada backend que deba recibir votos. La configuración del proxy es plugins/nuvotifier/config.toml en Velocity y plugins/NuVotifier/config.yml en BungeeCord.
Reenviar los votos a los servidores backend
Plugin messaging es la opción sencilla para un solo proxy. Los votos viajan a los backends por la conexión de un jugador.
En el proxy (config.toml en Velocity):
host = "0.0.0.0"
port = 8192
[forwarding]
method = "pluginMessaging"
[forwarding.pluginMessaging]
channel = "nuvotifier:votes"
cache = "file"
onlySendToJoinedServer = false
En cada backend (plugins/Votifier/config.yml), apaga el listener propio del backend con el puerto -1 y activa el reenvío:
port: -1
forwarding:
method: pluginMessaging
pluginMessaging:
channel: nuvotifier:votes
Los plugin messages necesitan un jugador conectado, así que un backend sin nadie en línea recibe sus votos más tarde: el proxy los guarda en caché (en un archivo por defecto, hasta 10 días) y los entrega cuando alguien entra. Por defecto todos los backends reciben todos los votos, así que si cada uno ejecuta un plugin de recompensas, el votante cobra en todos. Usa onlySendToJoinedServer = true con un servidor joinedServerFallback, excludedServers o la configuración de proxy propia de VotingPlugin.
Proxy forwarding envía cada voto por la red al NuVotifier propio del backend, firmado con el token del backend. No necesita jugadores en línea, pero no tiene caché: un voto que sigue fallando tras cinco reintentos se descarta. Esta es la configuración que probamos. En cada backend, dale a NuVotifier su propio puerto, copia su token default y pon disable-v1-protocol: true. En el proxy:
[forwarding]
method = "proxy"
[forwarding.proxy.survival]
address = "10.0.0.12"
port = 8193
token = "the survival backend's default token"
Añade un bloque por backend. El nombre es solo una etiqueta. En nuestra prueba, un voto v1 y otro v2 enviados al proxy llegaron los dos a Paper como votos v2 en menos de un segundo:
[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.
Después pusimos un token equivocado en la entrada del backend del proxy. La lista siguió recibiendo {"status":"ok"} del proxy, mientras el backend rechazaba todas las copias y el proxy seguía reintentando:
[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).
Así que en una network, una prueba en verde solo demuestra que funciona el proxy. Mira también la consola de un backend. Con cualquiera de los dos métodos, protege los backends con cortafuegos para que solo el proxy llegue a sus puertos de juego y de Votifier, o cualquiera podría enviarles votos falsos.
Abre el puerto
Votifier necesita un puerto TCP al que llegue internet.
- Hostings de servidores de juegos. Añade un segundo puerto en tu panel (a menudo una asignación en la pestaña Network) y pon ese puerto en el
portde NuVotifier. Dejahost: 0.0.0.0. - Un VPS o un servidor dedicado. Ábrelo en el cortafuegos, por ejemplo con
sudo ufw allow 8192/tcp, y en el cortafuegos de red de tu proveedor si tiene uno. - Docker. Publícalo junto al puerto de juego, por ejemplo con
-p 8192:8192. - Protección DDoS. Los servicios que protegen la dirección del juego suelen reenviar solo el puerto de Minecraft, así que apunta Votifier a la IP propia de la máquina. De las 97 fichas con Votifier el 18 de octubre de 2026, 68 usaban para Votifier un host distinto del del juego, y 49 de ellas una IP simple.
La mayoría de los servidores acaban con un puerto distinto del 8192. En esa misma fecha, solo 19 de esas 97 usaban el valor por defecto (en directo: 18), y entre todas usaban 70 puertos distintos. Dos usaban el 25575, el puerto RCON por defecto, que solo funciona mientras RCON esté apagado o movido.
Para comprobar el puerto desde fuera, ejecuta esto desde otra máquina u otra red:
nc -v 203.0.113.10 8192
NuVotifier saluda a cada conexión con una línea como VOTIFIER 2 mmdin5k3bh10u2fommgp3hahkv. Si la ves, el puerto está abierto y NuVotifier está detrás. En Windows, Test-NetConnection 203.0.113.10 -Port 8192 de PowerShell muestra TcpTestSucceeded : True con un puerto abierto, pero sin el saludo.
Añade los datos a tu ficha de serverlist.net
Cuando añades un servidor, el paso Votos pide Votifier. Para una ficha que ya tienes, ábrela desde el panel y usa su pestaña Votos. Las dos tienen las mismas cuatro partes.
- Dónde escucha Votifier. Escribe el host que llega a Votifier, a menudo la IP del servidor y no la dirección que usan los jugadores, y el puerto de Votifier, no el del juego. Comprobar puerto llama a ese puerto y lee el saludo de Votifier sin enviar ningún voto, así que ves al instante si el puerto está abierto y si responde NuVotifier o el Votifier clásico.
- Clave o token. Elige Token de NuVotifier y pega tu token
default, o elige Clave pública de Votifier y pega todo el contenido depublic.key. La clave de 2048 bits por defecto es una sola línea de 392 caracteres que empieza porMIIBIjANBgkq. Nunca peguesprivate.key. - Tu plugin de recompensas. Esta parte muestra la línea que necesita VotingPlugin, que se explica más abajo.
- Voto de prueba. Envía uno antes de publicar o guardar.
Tu token y tu clave se guardan cifrados. Cada voto se guarda primero y se entrega justo después en segundo plano, las entregas fallidas se reintentan y cada intento aparece en el registro de entregas de esa pestaña. Nuestro sistema anterior no guardaba los resultados de las entregas, así que añadiremos aquí un desglose de los fallos más comunes cuando el nuevo registro reúna un mes completo.
Prueba con el probador de Votifier
El probador de Votifier envía un voto real, con el nombre de usuario que elijas, a la dirección que escribas. Pide un captcha y permite cinco pruebas por dirección IP cada diez minutos. Con v2 muestra la respuesta propia de NuVotifier, {"status":"ok"} o un error de la tabla de abajo. Con v1 solo puede mostrar que se conectó y envió el voto, así que confírmalo en tu consola.
Un voto entregado empieza una línea de consola como esta, que a continuación enumera el nombre de servicio, el usuario, la dirección y la marca de tiempo del voto:
[Votifier] Got a protocol v2 vote record from /203.0.113.7:50480
Si las líneas siguientes dicen A vote was received, but you don't have any listeners available to listen for it., la entrega funciona y solo falta el plugin de recompensas.
El comando de consola testvote se salta la red, la clave y el token y lanza un evento de voto dentro de tu servidor, así que prueba las recompensas, no la entrega. Los datos extra hay que escribirlos como key=value:
testvote Steve serviceName=ServerList.net
Escrito como testvote Alex ServerList.net 127.0.0.1, puso 127.0.0.1 en el campo del nombre de usuario y dejó el nombre de servicio en TestVote. En un proxy el comando es ptestvote.
Conecta las recompensas con VotingPlugin
VotingPlugin es la opción que sigue recibiendo mantenimiento (7.1.1, julio de 2026). SuperbVote, que aún aparece en la guía de instalación de NuVotifier, se actualizó por última vez en diciembre de 2020.
Pon
VotingPlugin.jarenpluginsjunto a NuVotifier y reinicia.Envía un voto de prueba. VotingPlugin crea por su cuenta un sitio de votos para cualquier nombre de servicio nuevo:
[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...Abre
plugins/VotingPlugin/VoteSites.yml, busca la entradaServerList_netque se ha generado y dale una recompensa. Una entrada terminada tiene este aspecto: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!'ServiceSitetiene que coincidir exactamente.VoteDelay: 24hcoincide con nuestra espera móvil de 24 horas, así que/vote nextmuestra la hora correcta.eco giveda por hecho un plugin de economía como EssentialsX.Recarga con
/av reloady vuelve a votar con el nombre de un jugador que ya haya entrado en tu servidor.
Ese último paso pilla a casi todo el mundo. Con los ajustes por defecto, VotingPlugin ignora los votos de nombres que nunca ha visto:
[VotingPlugin] Player Steve has not joined before, disregarding vote. Reason: unknown-user. Set AllowUnjoined to true to accept.
Prueba con tu propio nombre, o pon AllowUnjoined: true en Config.yml. Con un jugador que estaba desconectado, VotingPlugin anunció el voto de inmediato pero retuvo la recompensa de comandos, que por defecto entrega cuando el jugador vuelve a entrar.
- Jugadores de Bedrock. Con Geyser y Floodgate, los nombres de Bedrock llevan un prefijo, un punto por defecto, así que un jugador de Bedrock tiene que votar como
.Stevepara que la recompensa lo encuentre. En los últimos 30 días, el 6 % de todos los votos de serverlist.net vino de nombres de Bedrock, así que menciona el prefijo en tu mensaje de/vote. La guía de Geyser explica el ajuste del prefijo. - Networks. El modo proxy de VotingPlugin se configura en
BungeeSettings.yml. Da a cada backend un nombre de servidor único ahí y manténVoteSites.ymligual en todos.
Lo que ven los jugadores y qué decirles cuando falta una recompensa está en por qué los servidores de Minecraft te piden que votes.
Errores y qué significan
Todos los mensajes en formato de código salieron de nuestra instalación de prueba. "Lista" significa lo que recibe una lista v2, o nuestro probador.
| Mensaje y dónde lo ves | Qué significa | Solución |
|---|---|---|
Connection refused, en la lista o en el probador | No hay nada escuchando en esa dirección y puerto. | Mira la línea Votifier enabled on socket para ver el puerto y la dirección reales. |
| Tiempo de espera agotado, en la lista o en el probador | Un cortafuegos o el hosting descarta la conexión, o el host es una dirección protegida que solo reenvía el puerto de juego. | Abre el puerto TCP. Usa la IP propia de la máquina. |
Votifier was not able to bind to /0.0.0.0:8192, en la consola al arrancar | Otro programa ya usa el puerto, a menudo un segundo servidor o el proxy en la misma máquina. | Da a cada NuVotifier su propio puerto. |
Could not decrypt data from /203.0.113.7:46788. Make sure the public key on the list is correct., en la consola | La clave v1 no coincide. La lista tiene una clave antigua, una de otro servidor o una cortada. | Copia public.key otra vez, entera, y actualiza la lista. |
Signature is not valid (invalid token?), en la lista y en la consola | El token v2 no coincide. | Copia el token default otra vez, sin espacios. Quita cualquier token que añadieras con nuestro nombre de servicio. En una network, revisa también las entradas de backend del proxy. |
Unknown service 'ServerList.net', en la lista y en la consola | No hay ningún token default en tokens. | Añade un token default y dáselo a la lista. |
This server only accepts well-formed Votifier v2 packets., en la consola | disable-v1-protocol está activado y una lista envió un voto v1. | Pasa esa lista a v2, o vuelve a activar v1. |
Challenge is not valid, en la lista y en la consola | La lista respondió con un desafío equivocado. Es un fallo del lado de la lista. | Avisa a la lista. |
A vote was received, but you don't have any listeners available to listen for it., en la consola | La entrega funciona. No hay ningún plugin de recompensas instalado. | Instala VotingPlugin. |
Player Steve has not joined before, disregarding vote. Reason: unknown-user., en la consola | VotingPlugin se saltó un nombre que nunca había visto. | Prueba con un jugador real, o pon AllowUnjoined: true. |
Unable to send vote to /127.0.0.1:8192. Will retry sending in 1 second(s)., en la consola del proxy | El proxy forwarding no puede entregar a un backend: token, puerto o dirección equivocados. | Lee la consola del backend para ver el motivo real. |
Cuando los errores llegan en ráfaga, NuVotifier deja de imprimirlos después del quinto en dos segundos, así que envía una prueba cada vez.
Preguntas frecuentes
¿Qué puerto debería usar Votifier? Cualquier puerto TCP libre que tu hosting te deje abrir. El 8192 es solo el valor por defecto. No puede ser el puerto de tu juego, y evita el 25575 si usas RCON.
¿Necesito v2? No, aceptamos las dos. v2 es mejor donde una lista lo admite: los votos no se pueden reenviar y la lista puede mostrarte el error exacto. Deja v1 activado para las listas que solo envían v1.
¿Por qué algunas listas solo admiten v1? v1 es el protocolo original de Votifier, que todas las listas implementaron hace años. v2 llegó con NuVotifier, y cada lista tiene que añadirlo por separado.
¿Merece la pena la configuración? Casi toda la votación ocurre donde Votifier está configurado. En los últimos 30 días, el 99,7 % de todos los votos de serverlist.net fue a fichas con Votifier configurado. En los 30 días hasta el 18 de octubre de 2026 fueron 15.443 de 15.477 votos, mientras que 11 fichas sin Votifier se repartieron los 34 restantes. Los votos también alimentan tu posición en la lista, algo que la guía de tus primeros 100 jugadores pone en contexto.
Para seguir leyendo
Sigue leyendo.
Votar en servidores de Minecraft: por qué y cómo funciona
Qué hace un voto, cómo viaja de la lista a tu recompensa, la regla de las 24 horas, los nombres de Bedrock y qué revisar si la recompensa nunca llega.
Cómo conseguir tus primeros 100 jugadores en un servidor de Minecraft
Lo que muestra nuestro pinger sobre los servidores nuevos y cómo conseguir tus primeros 100 jugadores: primero retención, luego listas, votos y Discord.