promotional bannermobile promotional banner

JHS-Votifier | Voting, Vote Party & Streaks

A modern voting plugin for Hytale with V1, V2, and HTTP support. Includes Vote Party, streak rewards, reminders, custom UI menus, and full server-list compatibility.

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-poll and POST /JHS/Votifier/forward-claim on 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:

  1. Install JHS-Votifier on both hub and backend servers, start once to generate configs
  2. On the hub, edit forward_poll_hub.json:
    • Set "enabled": true
    • Set port if needed (default 8194; must be open for backends to reach)
    • Replace ExampleBackend with real backend entries, each with a unique name and a strong shared token
  3. On each backend, edit forward_poll_client.json:
    • Set "enabled": true
    • Set hubUrl to the hub's IP and forward-poll port (e.g., http://192.168.1.10:8194)
    • Set backendName and token to match the hub's config exactly (case-insensitive name match)
  4. Restart both servers
  5. Use /votestatus on 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.