GuiaPara donos de servidor
Como configurar o NuVotifier e testar, passo a passo
Instale o NuVotifier no Paper ou numa rede Velocity, abra a porta, teste e entenda cada erro que ele registra. Testado no Paper 26.3 e no Velocity 4.2.
O NuVotifier é o plugin que recebe os votos das listas de servidores. Você o instala no seu servidor ou no seu proxy, abre uma porta TCP e entrega a cada lista o seu endereço, a porta e uma chave pública v1 ou um token v2. Ele não dá recompensas sozinho, então você também precisa de um plugin de recompensas, como o VotingPlugin, e vale testar o caminho inteiro uma vez antes de mandar os jogadores usarem /vote.
Escrevemos este guia olhando as duas pontas do fio. O serverlist.net envia votos para 95 servidores agora mesmo e, para este guia, rodamos o NuVotifier num servidor Paper 26.3 novo e num proxy Velocity 4.2, mandamos votos corretos e outros propositalmente quebrados e copiamos o que o console imprimiu. Toda linha de log citada abaixo saiu dessa configuração, com tokens e endereços trocados por exemplos.
- Coloque o
nuvotifier.jarna sua pastapluginse reinicie. - Anote a porta (8192 por padrão), o token e a chave pública que o NuVotifier gera.
- Abra essa porta para TCP na sua hospedagem ou no firewall.
- Adicione o endereço, a porta e o token (ou a chave) à página do seu servidor no serverlist.net.
- Envie um teste pelo Testador de Votifier e acompanhe o console.
- Instale o VotingPlugin e dê uma recompensa ao site de votação
ServerList.net.
O que o NuVotifier faz e o que não faz
O NuVotifier escuta numa porta TCP. Quando uma lista se conecta, ele lê uma mensagem de voto, confere com a sua chave ou o seu token e dispara um evento de voto dentro do servidor. Um voto leva quatro informações: o nome de serviço da lista (o nosso é ServerList.net), o nome de usuário que o jogador digitou, o endereço IP de quem votou e um timestamp.
O que ele não faz importa tanto quanto o que faz:
- Ele não dá recompensas. Um plugin de recompensas escuta o evento e paga.
- Ele não confere se o jogador existe. A lista valida os nomes, e o plugin de recompensas decide o que fazer com nomes desconhecidos.
- Ele usa só TCP. Uma porta aberta apenas para UDP deixa o Votifier inalcançável.
- Ele não manda nada de volta para uma lista v1, o que muda o jeito de testar.
A versão oficial continua sendo a 2.7.3, de julho de 2021, um único jar para Paper, Spigot, BungeeCord, Velocity e Sponge. No nosso teste, ela carregou e recebeu votos sem alterações no Paper 26.3 e no Velocity 4.2.0. No Java 25, ela imprime um bloco de avisos que inclui WARNING: sun.misc.Unsafe::objectFieldOffset has been called by. Isso é sobre uma mudança futura do Java, não um erro, e os votos continuaram funcionando.
A versão oficial não é compatível com o Folia. O fork mantido, azuvotifier, é (versão 3.3.6, de novembro de 2025) e fala o mesmo protocolo, então as listas o tratam como o NuVotifier.
Chave v1 ou token v2
As listas podem conversar com o NuVotifier em duas versões do protocolo, e você pode deixar as duas ativadas.
| v1 (chave pública) | v2 (token) | |
|---|---|---|
| O que você entrega à lista | O conteúdo de rsa/public.key | O token do config.yml |
| Como o voto é protegido | Criptografado com a sua chave pública RSA | Assinado com HMAC-SHA256 usando o token, mais um desafio novo a cada conexão |
| Um voto capturado pode ser reenviado | Sim | Não, cada desafio vale uma vez só |
| A lista fica sabendo se funcionou | Não. O NuVotifier lê 256 bytes e fecha a conexão sem responder | Sim. O NuVotifier responde {"status":"ok"} ou um erro com o motivo |
| Quem oferece suporte | Quase todas as listas | Listas que implementaram o protocolo do NuVotifier, o serverlist.net incluído |
Quem tiver a sua chave pública v1 consegue criar um voto válido, já que criptografar com ela é o protocolo inteiro, então nunca a cole num canal público. E se uma chave v1 bateu ou não só aparece no seu console e em nenhum outro lugar.
No serverlist.net, use v2. Mantenha a v1 ativada enquanto outras listas que você usa ainda precisarem dela. Em 18 de outubro de 2026, 97 dos nossos 218 servidores tinham o Votifier configurado, 68 com uma chave v1 e 29 com um token v2 (ao vivo: 68 e 27).
Instalar no Paper
Baixe o
nuvotifier.jarna página de releases do GitHub do NuVotifier ou na página dele no SpigotMC e coloque na pastapluginsdo seu servidor.Inicie o servidor. Na primeira vez, o NuVotifier imprime o seu token e onde ele escuta:
[Votifier] Your default NuVotifier token is e4qk2v9m1r7t0p5s3a8d6f2h1j. [Votifier] Votifier enabled on socket /0.0.0.0:8192.Pare o servidor e abra
plugins/Votifier/config.yml. Sem os comentários, o padrão é assim:host: 0.0.0.0 port: 8192 disable-v1-protocol: false tokens: default: e4qk2v9m1r7t0p5s3a8d6f2h1j forwarding: method: none pluginMessaging: channel: nuvotifier:votesConfira o
host. Por padrão ele usa oserver-ipdoserver.properties, ou0.0.0.0quando está vazio. No nosso servidor de teste, oserver-ipera127.0.0.1, então o NuVotifier ficou escutando em silêncio em127.0.0.1:8192, onde nenhuma lista jamais chegaria. Leia a linhaVotifier enabled on socketdepois de cada reinício. Ela deve mostrar0.0.0.0ou um endereço que a internet alcance.Coloque em
porta porta que a sua hospedagem lhe der. Ela precisa ser uma porta TCP livre e não pode ser a porta do jogo.Deixe
disable-v1-protocol: false, a menos que todas as listas que você usa ofereçam suporte à v2.Reinicie o servidor por completo. No nosso teste, um token removido do
config.ymlcontinuou funcionando depois do/nvreloadaté o reinício seguinte, então não confie num reload depois de mudar tokens.
O NuVotifier procura o token pelo nome de serviço da lista e usa o default como reserva. Um token separado por lista parece organizado, mas não funciona para nenhum nome de serviço que tenha um ponto, o nosso incluído. O Paper lê ServerList.net: dentro de tokens como uma seção chamada ServerList com uma chave net dentro. O leitor de TOML do Velocity mantém as aspas de "ServerList.net" como parte do nome e, sem aspas, a configuração nem carrega. De um jeito ou de outro, a busca falha e o NuVotifier confere o nosso voto contra o default, então, se você nos deu o token separado, todo voto falha como assinatura inválida. Entregue-nos o token default. As chaves v1 ficam em plugins/Votifier/rsa/, e só a public.key sai do seu servidor.
Instalar numa rede Velocity ou BungeeCord
Numa rede, os votos chegam ao proxy, o único endereço que as listas conhecem. Instale o mesmo nuvotifier.jar no proxy e em cada backend que deva receber votos. A configuração do proxy é plugins/nuvotifier/config.toml no Velocity e plugins/NuVotifier/config.yml no BungeeCord.
Encaminhar votos para os servidores backend
Plugin messaging é a escolha simples para um proxy só. Os votos viajam até os backends pela conexão de um jogador.
No proxy (config.toml no Velocity):
host = "0.0.0.0"
port = 8192
[forwarding]
method = "pluginMessaging"
[forwarding.pluginMessaging]
channel = "nuvotifier:votes"
cache = "file"
onlySendToJoinedServer = false
Em cada backend (plugins/Votifier/config.yml), desligue o listener próprio do backend com a porta -1 e ative o encaminhamento:
port: -1
forwarding:
method: pluginMessaging
pluginMessaging:
channel: nuvotifier:votes
Plugin messages precisam de um jogador conectado, então um backend sem ninguém online recebe os votos mais tarde: o proxy os guarda em cache (num arquivo, por padrão, por até 10 dias) e os repassa quando alguém entra. Por padrão, todo backend recebe todo voto, então, se cada um roda um plugin de recompensas, quem votou é pago em todos. Use onlySendToJoinedServer = true com um servidor joinedServerFallback, excludedServers ou a configuração de proxy do próprio VotingPlugin.
O proxy forwarding envia cada voto pela rede ao NuVotifier do próprio backend, assinado com o token do backend. Ele não precisa de jogadores online, mas não tem cache: um voto que ainda falha depois de cinco tentativas é descartado. Foi esta a configuração que testamos. Em cada backend, dê ao NuVotifier a sua própria porta, copie o token default dele e coloque disable-v1-protocol: true. No proxy:
[forwarding]
method = "proxy"
[forwarding.proxy.survival]
address = "10.0.0.12"
port = 8193
token = "the survival backend's default token"
Adicione um bloco por backend. O nome é só um rótulo. No nosso teste, um voto v1 e um v2 enviados ao proxy chegaram os dois ao Paper como votos v2 em menos de um 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.
Depois colocamos um token errado na entrada do backend no proxy. A lista continuou recebendo {"status":"ok"} do proxy, enquanto o backend recusava todas as cópias e o proxy seguia tentando de novo:
[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).
Ou seja, numa rede, um teste verde prova apenas o proxy. Confira também o console de um backend. Com qualquer um dos métodos, proteja os backends com firewall para que só o proxy alcance as portas de jogo e do Votifier deles, senão qualquer pessoa poderia mandar votos falsos.
Abra a porta
O Votifier precisa de uma porta TCP que a internet alcance.
- Hospedagens de servidores de jogos. Adicione uma segunda porta no seu painel (muitas vezes uma alocação numa aba Network) e coloque essa porta no
portdo NuVotifier. Mantenhahost: 0.0.0.0. - Um VPS ou servidor dedicado. Abra no firewall, por exemplo com
sudo ufw allow 8192/tcp, e no firewall de rede do seu provedor, se houver. - Docker. Publique ao lado da porta do jogo, por exemplo com
-p 8192:8192. - Proteção contra DDoS. Serviços que protegem o endereço do jogo costumam encaminhar só a porta do Minecraft, então aponte o Votifier para o IP da própria máquina. Dos 97 servidores com Votifier em 18 de outubro de 2026, 68 usavam um host diferente para o Votifier e para o jogo, e 49 deles um IP simples.
A maioria dos servidores acaba numa porta diferente da 8192. Na mesma data, só 19 desses 97 usavam o padrão (ao vivo: 18), espalhados por 70 portas diferentes no total. Dois usavam a 25575, a porta padrão do RCON, o que só funciona enquanto o RCON estiver desligado ou movido.
Para conferir a porta de fora, rode isto de outra máquina ou de outra rede:
nc -v 203.0.113.10 8192
O NuVotifier recebe toda conexão com uma linha como VOTIFIER 2 mmdin5k3bh10u2fommgp3hahkv. Se você a vir, a porta está aberta e o NuVotifier está atrás dela. No Windows, o Test-NetConnection 203.0.113.10 -Port 8192 do PowerShell mostra TcpTestSucceeded : True para uma porta aberta, sem a saudação.
Adicione os dados à página do seu servidor no serverlist.net
Quando você adiciona um servidor, a etapa Votos pede o Votifier. Para um servidor que você já tem, abra-o pelo painel e use a aba Votação dele. As duas têm as mesmas quatro partes.
- Onde o Votifier escuta. Informe o host que alcança o Votifier, muitas vezes o IP do servidor e não o endereço que os jogadores usam, e a porta do Votifier, não a do jogo. Verificar porta bate nessa porta e lê a saudação do Votifier sem enviar voto nenhum, então você vê na hora se a porta está aberta e se quem responde é o NuVotifier ou o Votifier clássico.
- Chave ou token. Escolha Token do NuVotifier e cole o seu token
default, ou escolha Chave pública do Votifier e cole o conteúdo inteiro dopublic.key. A chave padrão de 2048 bits é uma linha única de 392 caracteres que começa comMIIBIjANBgkq. Nunca cole oprivate.key. - Seu plugin de recompensas. Esta parte mostra a linha de que o VotingPlugin precisa, explicada mais abaixo.
- Voto de teste. Envie um antes de publicar ou salvar.
O seu token e a sua chave ficam armazenados criptografados. Cada voto é salvo primeiro e entregue logo depois, em segundo plano, as entregas que falham são repetidas e cada tentativa aparece no registro de entregas dessa aba. O nosso sistema anterior não guardava resultados de entrega, então vamos acrescentar aqui um resumo dos erros mais comuns quando o novo registro tiver um mês completo.
Teste com o Testador de Votifier
O Testador de Votifier envia um voto real, com um nome de usuário que você escolhe, para o endereço que você informar. Ele pede um captcha e permite cinco testes por endereço IP a cada dez minutos. Na v2, mostra a resposta do próprio NuVotifier, {"status":"ok"} ou um erro da tabela abaixo. Na v1, só consegue mostrar que conectou e enviou o voto, então confirme no seu console.
Um voto entregue abre uma linha de console como esta, que em seguida lista o nome de serviço, o usuário, o endereço e o timestamp do voto:
[Votifier] Got a protocol v2 vote record from /203.0.113.7:50480
Se as linhas seguintes disserem A vote was received, but you don't have any listeners available to listen for it., a entrega funciona e só falta o plugin de recompensas.
O comando de console testvote pula a rede, a chave e o token e dispara um evento de voto dentro do seu servidor, então testa recompensas, não a entrega. Dados extras precisam ser escritos como key=value:
testvote Steve serviceName=ServerList.net
Escrito como testvote Alex ServerList.net 127.0.0.1, ele colocou 127.0.0.1 no campo do nome de usuário e manteve o nome de serviço TestVote. Num proxy, o comando é ptestvote.
Ligue as recompensas com o VotingPlugin
O VotingPlugin é a escolha que continua recebendo manutenção (7.1.1, de julho de 2026). O SuperbVote, que ainda aparece no guia de configuração do NuVotifier, teve a última atualização em dezembro de 2020.
Coloque o
VotingPlugin.jaremplugins, ao lado do NuVotifier, e reinicie.Envie um voto de teste. O VotingPlugin cria um site de votação por conta própria para qualquer nome de serviço novo:
[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...Abra
plugins/VotingPlugin/VoteSites.yml, ache a entradaServerList_netgerada e dê uma recompensa a ela. Uma entrada pronta é assim: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!'O
ServiceSiteprecisa bater exatamente. OVoteDelay: 24hcombina com o nosso intervalo móvel de 24 horas, então o/vote nextmostra o horário certo. Oeco givepressupõe um plugin de economia, como o EssentialsX.Recarregue com
/av reloade vote de novo com o nome de um jogador que já entrou no seu servidor.
Esse último passo pega quase todo mundo. Com as configurações padrão, o VotingPlugin ignora votos de nomes que nunca viu:
[VotingPlugin] Player Steve has not joined before, disregarding vote. Reason: unknown-user. Set AllowUnjoined to true to accept.
Teste com o seu próprio nome ou coloque AllowUnjoined: true no Config.yml. Para um jogador que estava offline, o VotingPlugin anunciou o voto na hora, mas segurou a recompensa em comandos, que por padrão ele entrega quando o jogador entra de novo.
- Jogadores do Bedrock. Com o Geyser e o Floodgate, os nomes do Bedrock levam um prefixo, um ponto por padrão, então um jogador do Bedrock precisa votar como
.Stevepara a recompensa encontrá-lo. Nos últimos 30 dias, 6% de todos os votos do serverlist.net vieram de nomes Bedrock, então mencione o prefixo na sua mensagem do/vote. O guia do Geyser cobre a configuração do prefixo. - Redes. O modo proxy do VotingPlugin é configurado no
BungeeSettings.yml. Dê a cada backend um nome de servidor único ali e mantenha oVoteSites.ymligual em todos.
O que os jogadores veem do lado deles, e o que dizer quando uma recompensa some, está em por que servidores de Minecraft pedem que você vote.
Erros e o que significam
Toda mensagem em formato de código saiu da nossa configuração de teste. "Lista" quer dizer o que uma lista v2, ou o nosso testador, recebe de volta.
| Mensagem e onde você a vê | O que significa | Solução |
|---|---|---|
Connection refused, na lista ou no testador | Nada escuta nesse endereço e nessa porta. | Veja na linha Votifier enabled on socket a porta e o endereço reais. |
| Tempo de conexão esgotado, na lista ou no testador | Um firewall ou a hospedagem derruba a conexão, ou o host é um endereço protegido que só encaminha a porta do jogo. | Abra a porta TCP. Use o IP da própria máquina. |
Votifier was not able to bind to /0.0.0.0:8192, no console na inicialização | Outro programa já usa a porta, muitas vezes um segundo servidor ou o proxy na mesma máquina. | Dê a cada NuVotifier a sua própria porta. |
Could not decrypt data from /203.0.113.7:46788. Make sure the public key on the list is correct., no console | A chave v1 não bate. A lista tem uma chave antiga, a chave de outro servidor ou uma cortada. | Copie o public.key de novo, inteiro, e atualize a lista. |
Signature is not valid (invalid token?), na lista e no console | O token v2 não bate. | Copie o token default de novo, sem espaços. Remova qualquer token que você tenha colocado com o nosso nome de serviço. Numa rede, confira também as entradas de backend do proxy. |
Unknown service 'ServerList.net', na lista e no console | Não existe um token default em tokens. | Adicione um token default e entregue-o à lista. |
This server only accepts well-formed Votifier v2 packets., no console | O disable-v1-protocol está ligado e uma lista enviou um voto v1. | Passe essa lista para a v2 ou ligue a v1 de novo. |
Challenge is not valid, na lista e no console | A lista respondeu com o desafio errado. É um erro do lado da lista. | Avise a lista. |
A vote was received, but you don't have any listeners available to listen for it., no console | A entrega funciona. Nenhum plugin de recompensas está instalado. | Instale o VotingPlugin. |
Player Steve has not joined before, disregarding vote. Reason: unknown-user., no console | O VotingPlugin ignorou um nome que nunca tinha visto. | Teste com um jogador real ou coloque AllowUnjoined: true. |
Unable to send vote to /127.0.0.1:8192. Will retry sending in 1 second(s)., no console do proxy | O proxy forwarding não consegue entregar a um backend: token, porta ou endereço errado. | Leia o console do backend para ver o motivo real. |
Quando os erros chegam em rajada, o NuVotifier para de imprimi-los depois do quinto em dois segundos, então envie um teste de cada vez.
Perguntas frequentes
Qual porta o Votifier deve usar? Qualquer porta TCP livre que a sua hospedagem deixe abrir. A 8192 é só o padrão. Ela não pode ser a porta do jogo, e evite a 25575 se você usa RCON.
Preciso da v2? Não, aceitamos as duas. A v2 é melhor onde a lista oferece suporte: os votos não podem ser reenviados, e a lista pode mostrar o erro exato. Mantenha a v1 ligada para listas que só enviam v1.
Por que algumas listas só aceitam v1? A v1 é o protocolo original do Votifier, que todas as listas implementaram anos atrás. A v2 veio com o NuVotifier, e cada lista precisa acrescentá-la por conta própria.
Vale a pena configurar? Quase toda a votação acontece onde o Votifier está configurado. Nos últimos 30 dias, 99,7% de todos os votos do serverlist.net foram para servidores com o Votifier configurado. Nos 30 dias até 18 de outubro de 2026, foram 15.443 de 15.477 votos, enquanto 11 servidores sem Votifier dividiram os 34 restantes. Os votos também alimentam a sua posição na lista, o que o guia dos seus primeiros 100 jogadores coloca em contexto.
Leia também
Continue lendo.
Por que servidores de Minecraft pedem votos e como funciona
O que um voto faz, o caminho dele da lista até a sua recompensa, a regra das 24 horas, nomes do Bedrock e o que conferir quando a recompensa não chega.
Como conseguir os primeiros 100 jogadores no seu servidor de Minecraft
O que o nosso pinger mostra sobre servidores novos e como conseguir os primeiros 100 jogadores: retenção, listas, votos, Discord e temporadas.
Servidores para experimentar