Best Private Game Servers

Browse Games

4Story ACE Online Aion Black Desert Online Cabal Online Conquer Online Counter-Strike 1.6 Dekaron Discord Dragon Nest Eudemons Online Fiesta Online FiveM Flyff Grand Chase Hytale Iris Online Jade Dynasty KAL Online Knight Online Last Chaos Legend of Mir Lineage 2 MapleStory Metin2 Minecraft Mu Online OGame osu! Perfect World Priston Tale RAN Online Rappelz RF Online Rohan Rose Online RuneScape Seal Online Shaiya Silkroad Online Star Wars Galaxies Tales of Pirates Terraria Tibia Travian Ultima Online World of Warcraft Ragnarok Online TeamSpeak
View all games →
Add Server Login
Games
4Story ACE Online Aion Black Desert Online Cabal Online Conquer Online Counter-Strike 1.6 Dekaron Discord Dragon Nest Eudemons Online Fiesta Online FiveM Flyff Grand Chase Hytale Iris Online Jade Dynasty KAL Online Knight Online Last Chaos Legend of Mir Lineage 2 MapleStory Metin2 Minecraft Mu Online OGame osu! Perfect World Priston Tale RAN Online Rappelz RF Online Rohan Rose Online RuneScape Seal Online Shaiya Silkroad Online Star Wars Galaxies Tales of Pirates Terraria Tibia Travian Ultima Online World of Warcraft Ragnarok Online TeamSpeak
Login Register
Home / Voting Check

Voting Check

What is Voting Check?

Voting Check is how you reward players after they successfully vote for your listing on Best Private Game Servers.

When a vote is accepted, we can notify your website (HTTP postback) and/or your Minecraft server (Votifier). Callbacks fire only after a real vote — never on failed or duplicate attempts.

Setup path: Dashboard → Edit server → Vote Rewards (and Minecraft Details for Votifier).

On this page

  • How it works
  • Postback PHP
  • Minecraft Votifier
  • NuVotifier v2
  • Testing checklist
  • FAQ & troubleshooting

How it works

Core rule: we contact your systems only after the vote is stored on this list. If the player already voted in the last 24 hours, or the form fails validation, nothing is sent.

End-to-end flow

  1. Player opens your vote link Ideally with ?p=USERNAME so the form is prefilled from your site, Discord bot, or launcher.
  2. They submit the vote We enforce a 24-hour cooldown per IP (and per logged-in account). If rewards are configured, the username / parameter is required.
  3. We notify your rewards systems HTTP GET to your postback URL and/or a Votifier packet to your Minecraft host — using the same parameter and the voter’s IP.
  4. You grant the reward Your CMS, shop, or listener plugin credits the account. Delivery failures on your side are logged here but do not remove the vote.

Choose a method

HTTP Postback

Best for websites, launchers, and non-Minecraft games. For Minecraft this is an optional alternative to Votifier (or an addition if you also reward on a website).

  • Works for every game on this list
  • You control points, cooldowns, logging
  • Needs a public HTTPS endpoint
Postback setup →

Minecraft Votifier

Preferred for Minecraft. Best for in-game crates, keys, and listener plugins. We open a TCP connection to your Votifier port.

  • Minecraft listings only
  • Classic RSA or NuVotifier v2 token
  • Needs open port + firewall allowlist
Votifier setup →

For Minecraft, use Votifier first. HTTP postback is an optional alternative (or addition) if you also reward on a website. Each enabled channel runs independently after the vote.

Quick start

  1. Log in and open Dashboard.
  2. Edit your approved server listing.
  3. Set a Postback URL and/or enable Votifier under Minecraft Details.
  4. Copy the incentive voting link from the edit form (ends with ?p=USERNAME).
  5. Place that link on your website or Discord; replace USERNAME per player.
  6. Cast a test vote and confirm rewards arrive.

Postback PHP

Postback is a simple HTTP callback. After a successful vote we request your URL with the player parameter and their IP. Your script marks that account as having voted and grants points or items.

Security: whitelist this website’s public IP in your firewall and in your postback script. Reject every other source. Prefer HTTPS.

1. Set your Postback URL

Dashboard → Edit server → Vote Rewards → Postback URL:

https://YOURDOMAIN/postback.php

  • The filename is arbitrary — use any path your stack prefers.
  • Only public http/https URLs are accepted.
  • Localhost, private LAN IPs, and URL credentials are rejected (SSRF protection).
  • We follow a small number of redirects and time out after a few seconds so voting stays fast.

2. Build incentive voting links

Append a parameter so each player is identified when they land on the vote page:

/GAME/server/SLUG/vote?p=PARAMETER

Replace GAME and SLUG with your listing values. Your server edit page shows the exact URL for that listing.

Piece Rules
PARAMETER / p_resp Letters, numbers, _, - only · max 32 characters · username, account id, or any id you track
ip IPv4 or IPv6 of the voter as seen by this list (Cloudflare / proxy aware)
Prefill query ?p= or ?username= on the vote URL

3. What we call after a vote

Only on success:

https://YOURDOMAIN/postback.php?p_resp=PARAMETER&ip=USERIP

If the player did not complete a valid vote, we send no request.

Worked examples

Incentive link Our callback
/minecraft/server/your-server-slug/vote?p=1234 …/postback.php?p_resp=1234&ip=123.123.123.123
/minecraft/server/your-server-slug/vote?p=Razor …/postback.php?p_resp=Razor&ip=123.123.123.123

Conclusion: when we hit your postback with p_resp=Razor, player Razor has voted. The ip value is the address they used on this list — useful for your own abuse checks.

What your script should do

  1. Verify the request comes from this list’s public IP.
  2. Sanitize p_resp and ip (never trust raw input).
  3. Confirm the account / character exists in your database.
  4. Apply your own reward cooldown if you need something stricter than 24 hours.
  5. Grant points, coins, or items; log the event; return HTTP 200.

postback.php example

Host this on your domain (the rewards site), not necessarily on this vote list. Set VOTE_LIST_IP to this website’s outbound public IP before going live. Turn DEBUG on while testing.

/**
 * Example vote postback receiver for YOUR game website / CMS.
 *
 * Configure this URL on your listing under Dashboard → Edit server → Vote Rewards.
 * This list will call it ONLY after a successful vote:
 *
 *   https://yoursite.com/postback.php?p_resp=PARAMETER&ip=USERIP
 *
 * PARAMETER is the username / account id the player entered on the vote form
 * (or the value from ?p= on your incentive voting link).
 *
 * Docs: /voting-check
 */

define('DEBUG', 0); // set to 1 to write _postback.log
define('LOG_FILE', __DIR__ . '/_postback.log');

/**
 * Only accept callbacks from the vote list's public IP.
 * Leave empty to skip the allowlist (not recommended in production).
 *
 * Example: define('VOTE_LIST_IP', '203.0.113.10');
 */
define('VOTE_LIST_IP', '');

$ipRequest = $_SERVER['HTTP_CF_CONNECTING_IP']
    ?? (isset($_SERVER['HTTP_X_FORWARDED_FOR'])
        ? trim(explode(',', (string) $_SERVER['HTTP_X_FORWARDED_FOR'])[0])
        : null)
    ?? $_SERVER['REMOTE_ADDR']
    ?? '';
$ipRequest = trim((string) $ipRequest);

if (VOTE_LIST_IP !== '' && $ipRequest !== VOTE_LIST_IP) {
    if (DEBUG) {
        error_log(date('[Y-m-d H:i] ') . "[Invalid] Request from {$ipRequest}" . PHP_EOL, 3, LOG_FILE);
    }
    http_response_code(403);
    exit('Forbidden');
}

if (DEBUG) {
    error_log(date('[Y-m-d H:i] ') . "[OK] Valid callback: {$ipRequest}" . PHP_EOL, 3, LOG_FILE);
}

// Clean parameters from the vote list (letters, numbers, underscore, hyphen).
$p = preg_replace('/[^A-Za-z0-9_\-]+/', '', (string) ($_GET['p_resp'] ?? '')) ?? '';
$userIp = preg_replace('/[^0-9a-fA-F:\.]+/', '', (string) ($_GET['ip'] ?? '')) ?? '';

if ($p === '') {
    http_response_code(400);
    exit('Missing p_resp');
}

if (DEBUG) {
    error_log(date('[Y-m-d H:i] ') . "[GET] Parameters [p_resp]={$p} [ip]={$userIp}" . PHP_EOL, 3, LOG_FILE);
}

// ---------------------------------------------------------------------------
// Connect to your database, verify account $p exists, enforce your own
// cooldown if needed, then grant vote points / items to $p (voted from $userIp).
// We send p_resp + ip ONLY when that player successfully voted on the list.
// ---------------------------------------------------------------------------

http_response_code(200);
echo 'OK';

Same sample lives in the project as examples/postback.php.

Minecraft Votifier

For Minecraft, we can push the vote straight into your server with the Votifier protocol. A listener plugin then runs your reward commands.

Firewall: allow inbound TCP from this website’s public IP to your Votifier port (default 8192). Do not expose the port to the whole internet if you can avoid it.

Player flow

  1. Player enters their Minecraft username on our vote page (or arrives via ?p=Steve).
  2. Vote succeeds on this list.
  3. We connect to your Votifier host/port and deliver the vote packet.
  4. Your listener grants crates, keys, money, etc.

Auto-fill username

/minecraft/server/your-server-slug/vote?p=Steve

Use real Minecraft usernames (typically up to 16 characters). The same ?p= value is what Votifier receives as the voter name.

Enable on your listing

  1. Open Dashboard → edit your Minecraft server.
  2. Under Minecraft Details, set Votifier to Enabled.
  3. Choose protocol:
    • NuVotifier v2 — recommended; shared token, no RSA paste.
    • Classic / NuVotifier v1 — RSA public key from public.key.
  4. Enter the public host (same IP players use to connect, unless you run Votifier on a different address) and port.
  5. Paste the token (v2) or the full public key (classic).

Install software

  • NuVotifier — modern plugin; supports classic RSA and protocol v2.
  • Or classic Votifier for RSA-only setups.
  • Plus a listener compatible with your Minecraft version (GAListener, SuperbVote, voting plugins, custom listeners, etc.).

Classic / v1 configuration

  • Public key — entire file /plugins/Votifier/rsa/public.key (with or without BEGIN PUBLIC KEY lines).
  • Host & port — from config.yml.
host: YOUR_PUBLIC_IP
port: 8192
debug: true
listener_folder: plugins/Votifier/listeners

Keep debug: true while connecting a new topsite, then disable it in production.

Service name

Packets identify this list as:

Best Private Game Servers

Listener plugins often filter or display that name. For NuVotifier v2 tokens, map a key to this exact string (see below).

NuVotifier v2

Protocol v2 replaces RSA with a shared token and a one-time challenge. It is the recommended mode for NuVotifier.

1. Enable v2 on the listing

Protocol → NuVotifier v2 · paste the token · save host/port.

2. Tokens in NuVotifier config.yml

tokens:
  default: REPLACE_WITH_DEFAULT_TOKEN
  "Best Private Game Servers": REPLACE_WITH_LIST_TOKEN
  • Paste either the default token or the token keyed to Best Private Game Servers into the dashboard field.
  • Quote the service name when it contains spaces.
  • Restart / reload NuVotifier after changing tokens.

3. Wire format (for developers)

  1. TCP connect → read greeting VOTIFIER 2 <challenge>.
  2. JSON payload: username, serviceName, timestamp (ms), address, challenge.
  3. Signature: Base64(HMAC-SHA256(payload, token)).
  4. Send packet: magic 0x733A + uint16 length + JSON {signature, payload}.
  5. Expect {"status":"ok"}. Anything else is treated as failure and logged.

v2 troubleshooting

Symptom Likely cause
Not a NuVotifier v2 server Greeting has no challenge — use Classic, or upgrade NuVotifier and enable v2.
Invalid signature / unknown service Wrong token, or service name not mapped. Add "Best Private Game Servers" or use default.
Connect failed / timeout Bad host/port, Votifier offline, or firewall blocking this list’s IP.
No response Proxy/plugin interference; enable NuVotifier debug and retry.

Testing checklist

  1. Save listing settings Confirm postback URL and/or Votifier fields saved without validation errors.
  2. Open an incentive link Username field should prefill from ?p=.
  3. Cast one vote You should see the success modal. A second vote within 24 hours must be blocked.
  4. Verify postback Enable DEBUG in your receiver; confirm p_resp and ip arrive from this list’s IP.
  5. Verify Votifier With debug: true, the Minecraft console should show an incoming vote for your username and service name Best Private Game Servers.
  6. Confirm in-game / site reward Listener or CMS should credit the account. If not, fix the listener — the list vote still counts.
Note: delivery attempts are recorded in vote_reward_logs (ok / fail / skipped). A failed callback never rolls back the vote on this list.

FAQ & troubleshooting

Do players need an account on this list?

No. Guests can vote. Logged-in accounts share the same 24-hour cooldown rules for abuse prevention.

Why is username required sometimes?

If you configured a postback URL or Votifier, we need a parameter to tell you who to reward. Without rewards configured, username stays optional.

Can I use postback and Votifier together?

Yes. Both run after a successful vote. Failures are independent.

Our postback URL was rejected when saving

It must be a public http(s) URL. Localhost, .local, private IPs (e.g. 10.*, 192.168.*), and URLs with embedded credentials are blocked.

Players vote but get no reward

  • Confirm the vote succeeded on this list (success modal / vote count).
  • Check your postback logs or NuVotifier debug output.
  • Verify firewall allowlists and that the username matches an in-game account.
  • Remember: list cooldown is 24 hours; your own reward cooldown can be shorter or longer.

Parameter characters

Only A–Z, a–z, 0–9, _, and -. Anything else is stripped. Keep parameters ≤ 32 characters.

Need help?

Contact the site administrator if callbacks look correct on your side but rewards still fail after following this guide.

Open Dashboard · Back to home

We are the best Private Game Server List in 2026. Get new players for your Server today!

Best Private Game Servers
Home About Terms Privacy Help Contact Voting Check Login

© 2026 GGGames SDN. BHD.. Best Private Game Servers. Not affiliated with Mojang, Microsoft, TeamSpeak, or the publishers of listed games.

Level 9, Vertical Corporate Tower B, Avenue 10, Bangsar South, No.8, Jalan Kerinchi, 59200 Kuala Lumpur, Malaysia · +603 39488951 · [email protected]