File Details
JHS-Votifier-1.3.2
- R
- Feb 25, 2026
- 2.61 MB
- 62
- Early Access
File Name
JHS-Votifier-1.3.2.jar
Supported Versions
- Early Access
[1.3.2] - 2026-02-24
Added
- Poll-Based Vote Forwarding - Pull-based alternative to TCP forwarding for Docker/Pterodactyl environments
- Hub starts its own embedded HTTP server (no WebServer plugin required)
- Hub queues votes per-backend; backends poll via HTTP (outbound only, no inbound ports needed on backends)
- Hub endpoints:
POST /JHS/Votifier/forward-pollandPOST /JHS/Votifier/forward-claimon configurable port (default 8194) - Per-backend authentication with unique tokens (auto-generated on first run, constant-time comparison)
- IP-based rate limiting (60 req/min), 4KB body limit, POST-only, input sanitization
- Configurable queue size limit (default 1000/backend), vote TTL (default 24h), and cleanup interval
- Configurable poll interval (default 15s) and batch size (default 50) on client side
- Persistent queue storage survives server restarts
- Duplicate vote protection on client side
- Hub logs each poll request (backend name, IP, vote count) for diagnostics
- Client logs connection errors and non-200 responses as warnings for easy troubleshooting
- Hub and client status sections in
/votestatus - Config:
forward_poll_hub.json(hub, disabled by default) - Config:
forward_poll_client.json(backend, disabled by default)
Improved
- General security hardening and protocol improvements
Config Changes
New forward_poll_hub.json (hub server):
{
"enabled": false,
"port": 8194,
"bindAddress": "0.0.0.0",
"maxQueueSizePerBackend": 1000,
"voteTtlMinutes": 1440,
"cleanupIntervalMinutes": 5,
"backends": [
{
"name": "ExampleBackend",
"token": "your-shared-secret-here"
}
]
}
New forward_poll_client.json (backend server):
{
"enabled": false,
"hubUrl": "http://hub-server:8194",
"backendName": "MyBackend",
"token": "your-shared-secret-here",
"pollIntervalSeconds": 15,
"batchSize": 50
}
When to use this vs TCP forwarding (forwarding_config.json):
- Poll forwarding (this): Backends make outbound HTTP requests only. No inbound ports needed on backends. No external plugins required. Ideal for Docker, Pterodactyl, and environments where container IPs change on restart.
- TCP forwarding (v1.3.0): Hub pushes votes to backends via TCP. Requires backends to have V2 port (8192) reachable from the hub. Better for static network setups.
Both can be enabled simultaneously on the hub — votes will be forwarded via TCP AND queued for poll clients.
Setup:
- Install JHS-Votifier on both hub and backend servers, start once to generate configs
- On the hub, edit
forward_poll_hub.json:- Set
"enabled": true - Set
portif needed (default8194; must be open for backends to reach) - Replace
ExampleBackendwith real backend entries, each with a uniquenameand a strong sharedtoken
- Set
- On each backend, edit
forward_poll_client.json:- Set
"enabled": true - Set
hubUrlto the hub's IP and forward-poll port (e.g.,http://192.168.1.10:8194) - Set
backendNameandtokento match the hub's config exactly (case-insensitive name match)
- Set
- Restart both servers
- Use
/votestatuson both sides to verify — the hub shows per-backend queue sizes, the client shows poll/vote/failure counts
Pterodactyl / Docker users: This is the recommended forwarding method. Backends only make outbound HTTP calls, so no Docker port mapping or container IP tracking is needed. Just expose the hub's forward-poll port and point hubUrl at the hub's external address.

