Skip to content

Repository files navigation

NeoVotifier

Version Minecraft NeoForge Side License

A Votifier implementation for NeoForge: vote listener, clickable vote menu and instant rewards in one server-side jar.

Server-list voting is one of the best free ways to bring players to a server, but the classic Votifier ecosystem never properly made it to modern NeoForge. NeoVotifier covers the whole pipeline: the site sends the vote, the server receives it, the player gets paid — immediately.

Supported versions

More versions are planned — the new 26.x releases and the rest of what NeoForge supports (1.20.2 - 1.20.6). See TODO.md for the roadmap.

Five jars cover all of 1.21.x. Grab the one that matches your server:

File Minecraft NeoForge
neovotifier-1.0_v1.21.1.jar 1.21.1 21.1
neovotifier-1.0_v1.21.2-4.jar 1.21.2 - 1.21.4 21.2 - 21.4
neovotifier-1.0_v1.21.5-8.jar 1.21.5 - 1.21.8 21.5 - 21.8
neovotifier-1.0_v1.21.9-10.jar 1.21.9 - 1.21.10 21.9 - 21.10
neovotifier-1.0_v1.21.11.jar 1.21.11 21.11

The mod only splits where a Minecraft API it uses actually changed: the registry lookup and player message APIs in 1.21.2, the chat click-event API in 1.21.5, the player-profile API in 1.21.9, and the ResourceLocation to Identifier rename in 1.21.11. Each jar declares its range, so a server on the wrong version refuses it with a clear message instead of breaking mid-game.

In the repo, each window is a branch: mc-1.21.1, mc-1.21.2, mc-1.21.5, mc-1.21.9 and mc-1.21.11. Same mod, same features, same configs on all of them.

Features

  • Full Votifier protocol support: v1 (RSA) and v2 (token/HMAC), so both old and new vote sites work
  • /vote opens a clickable menu of your vote sites (from voting_sites.json); players click an entry and the site opens from chat
  • Instant rewards the moment a vote lands: any commands you configure (economy payouts, crate keys, items, broadcasts)
  • Survives datapack /reload — the listener and /vote keep working
  • Server-side only; vanilla clients see everything, no client mod needed

Installation

  1. Put the jar in the server's mods/ folder
  2. Start the server once — configs and keys generate on first boot
  3. Register your server on the vote sites you want (see below)
  4. Configure your reward commands in votifier.json

Hooking up vote sites

After the first server start you'll have these files:

config/votifier/
  votifier.json       <- port, token, reward commands
  voting_sites.json   <- the /vote menu layout
mods/votifier/rsa/
  public.key          <- give THIS to v1 vote sites
  private.key         <- keep this secret, never share it

Every vote site authenticates one of two ways. You can tell which kind a site is by what its server-owner panel asks you for: a public key means v1, a token means v2. Both kinds connect to the same IP and port, at the same time — mix them freely.

Votifier v1 sites (public key) — most sites

Your server generated an RSA key pair on first boot; the site gets the public half so it can send votes only your server accepts:

  1. Open mods/votifier/rsa/public.key — it's one long line of base64 text. Copy all of it
  2. Paste it into the public key field in the vote site's Votifier settings
  3. Enter your server's public IP and the votifier port (see votifier.json, default 8192 — this is NOT the game port)

Note the file has no -----BEGIN PUBLIC KEY----- wrapper lines and doesn't need them — the bare text is the standard Votifier key format.

If you ever need to regenerate the pair, stop the server, delete both files in mods/votifier/rsa/ and start again — new keys generate on boot. Remember to give the new public key to every site.

Votifier v2 sites (token)

Some newer sites don't ask for a public key at all — their panel has a token field instead (the NuVotifier v2 style). A token is just a shared password between your server and the site, and one was already generated for you on first boot:

  1. Open votifier.json and copy the "token" value
  2. Paste it into the token field on the vote site, along with the same IP and port as v1 sites get

To use your own token instead, change the value and restart the server (the config is read at startup). Blanking it turns v2 off — v1 sites work either way. If you upgraded from an older version and your token is empty, set one yourself or delete votifier.json and restart to regenerate it.

Firewall / port forwarding

The votifier port must be reachable from the internet (vote sites connect TO your server). Open or forward it just like the game port. A quick test from outside your network:

nc -vz your.server.ip 8192

Editing the configs

Both config files live in config/votifier/ and are plain JSON. Ground rules for editing either one:

  • Edit with any text editor, keep it valid JSON: double quotes around strings, commas between entries, no trailing comma after the last one. If the file has a syntax error the mod logs an error on startup and falls back to defaults — check the log if your changes seem ignored
  • Changes apply on server restart
  • Color codes use & (e.g. &6 gold, &a green, &l bold) in names, lore and the GUI title

votifier.json — listener and rewards

Key What it does
host Bind address, keep 0.0.0.0 unless you know why not
port The votifier listener port (this is NOT the game port)
debug Verbose logging of incoming votes, handy while setting up
command-after-voting List of commands run the moment a vote lands; %player% is replaced with the voter's name. Run as the server console, so they can be anything you could type there
gui-title Title of the /vote menu
token Shared secret for v2 sites, generated on first boot; empty disables v2

Example rewards — mix vanilla and modded commands freely:

"command-after-voting": [
  "give %player% minecraft:diamond 1",
  "eco addmoney %player% 500",
  "say %player% just voted for the server!"
]

voting_sites.json — the /vote menu layout

The menu is a 3-row chest: 27 slots, numbered 0 (top-left) through 26 (bottom-right), 9 per row. The file is a JSON list of entries; each entry fills one slot. Anything with a link is a clickable vote site — clicking it closes the menu and puts the link in chat. Entries without a link are decoration (filler panes and such).

{
  "slot": 12,
  "item": "minecraft:diamond_block",
  "name": "&6My Vote Site",
  "lore": ["Click to open the vote page"],
  "link": "https://example-vote-site.com/server/12345",
  "enchanted": true
}

Fields per entry — only slot is required:

Field What it does
slot Which chest slot this entry fills, 0-26
item The item shown, e.g. minecraft:diamond_block
head Instead of item: a base64 skin texture for a custom player head
name Display name, & color codes work
lore List of hover-text lines
link The vote page URL; makes the entry clickable. %player% in the URL is replaced with the clicking player's name
enchanted true for the enchanted glint
count Stack size shown
rarity Name color tint: COMMON, UNCOMMON, RARE or EPIC
show-attributes false (default) hides item attribute clutter in the tooltip

Tip for head textures: sites like minecraft-heads.com list heads with a "Value" string — that whole base64 blob is what goes in head.

Testing your setup

  • Most vote sites have a "test vote" button in the owner panel. Watch the server log — with debug on you'll see the vote arrive and the commands run
  • Note that some test buttons send a placeholder username, so player-targeted rewards can look broken when it's really just a fake name. The reliable test is a real vote with a real in-game name
  • If nothing arrives at all: it's almost always the port (firewall/forwarding) or the wrong key/token on the site

Building from source

You need a JDK 21 (Temurin, Oracle, whatever) and an internet connection — nothing else. The Gradle wrapper is committed, so there is no Gradle to install.

  1. Clone the repo and check out the branch for the version window you want: mc-1.21.1 (1.21.1), mc-1.21.2 (1.21.2-1.21.4), mc-1.21.5 (1.21.5-1.21.8), mc-1.21.9 (1.21.9-1.21.10) or mc-1.21.11 (1.21.11)

    git clone https://github.com/XEXModz/NeoVotifier.git
    cd NeoVotifier
    git checkout mc-1.21.5
    
  2. Build:

    ./gradlew build        (Linux/macOS)
    gradlew.bat build      (Windows)
    
  3. The jar lands in build/libs/ as neovotifier-<version>_<mc-label>.jar.

The first build downloads and decompiles Minecraft through NeoForge's toolchain — expect several minutes and a few GB in ~/.gradle. Later builds take seconds.

Sources live under src/main/java/com/xexmodz/neovotifier/. Each branch differs from the previous one by exactly one commit — the API adaptation for its version window — so diffing two branches shows precisely what changed between Minecraft versions.

Lineage and credits

Based on the kryeit votifier port, extended with NeoForge 1.21.x support, the vote menu, dual v1+v2 protocol handling, instant economy payouts and reload safety. The code lives under the com.xexmodz.neovotifier package; the mod id stays votifier so existing config/votifier/ setups keep working across updates.

License

GPL-3.0, same as the upstream votifier-for-neoforge project. See LICENSE.

Every release jar is tested on a live server of its target Minecraft version before it ships, and the vote pipeline has been verified end-to-end with real votes from live vote sites.

About

Votifier for NeoForge: in-game /vote GUI, v1 (RSA) and v2 (token) protocols, instant rewards. Jars for every Minecraft 1.21.x version.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages