This is a second-level diagnostic guide for administrators who already followed first-vote verification. It targets VotingPlugin 7.1.1 unless a section explicitly says otherwise.
The most useful question is: At what stage does one known test vote stop progressing? Fix the earliest failed stage before changing unrelated settings.
A. Voting website sends vote
|
B. VotifierPlus / NuVotifier receives record
|
C. VotingPlugin receives and matches ServiceSite
|
D. Player identity and vote data accepted/stored
|
E. [Proxy only] vote forwarded or cached for eligible backend
|
F. Reward rules evaluated and delivered (or deferred)
| Last confirmed stage | Look at | First place to investigate |
|---|---|---|
| A only | Website dashboard / external test | Listener TCP port, DNS, public IP, firewall, Votifier v1/v2 key or token |
| B | Listener console | Is VotingPlugin installed and loaded on this process? Duplicate listener forwarding? |
| C | VotingPlugin console | Enabled VoteSites entry, exact ServiceSite name, vote delay enforcement |
| D | Database/startup logs | UUID mode, SQL/SQLite errors, player-known/AllowUnjoined checks |
| E | Proxy + backend logs | BungeeMethod, shared SQL, backend Server names, SendVotesToAllServers |
| F | Reward logs/console | Rewards path, permissions, command syntax, online/offline context, overlapping rewards |
Start with one test vote and its timestamp; repeating votes can complicate cooldown and duplicate analysis.
A standalone/server admin can run:
/av vote <player> <site>
On a proxy:
/votingpluginproxy status
/votingpluginproxy vote <player> <site>
These are useful for isolating VotingPlugin and forwarding behavior, but do not verify inbound access to the Votifier port or the website's Votifier protocol and key/token.
Send a real or listener-generated vote after the internal test. On a healthy path, look for:
[VotifierPlus] Debug: Received vote record -> Vote (from:SERVICESITEHERE username:ExamplePlayer ...)
[VotingPlugin] Received a vote from service site 'SERVICESITEHERE' by player 'ExamplePlayer'!
Exact listener logging varies by build and debug configuration.
host: 0.0.0.0 means bind on local interfaces, not an address for voting sites. Set the site's public hostname/IP separately.8192) is allocated and reachable. This is normally not Minecraft's 25565 game port.rsa/private.key; do not force v2-only mode while any site still uses v1.If no listener packet arrives, editing VoteSites.yml cannot fix the problem.
Config.yml supports DebugLevel: EXTRA; the proxy has its own debug options.The incoming vote's ServiceSite is set by the voting website. The matching VoteSites.yml entry might look like:
VoteSites:
MyListing:
Enabled: true
ServiceSite: 'SERVICESITEHERE'
VoteURL: 'https://replace-with-real-vote-url.example'
Compare the actual received value in logs or /av servicesites. Matching is case-insensitive but otherwise requires the received service identifier, not an assumed domain. Review the generated site if AutoCreateVoteSites: true is enabled, and replace its placeholder URL/rewards.
Once intended sites work, set AutoCreateVoteSites: false and reload to avoid unknown service IDs automatically creating more entries. With 7.1.1, creating additional sites through /av gui after disabling auto-create may require temporarily re-enabling it; direct YAML edits do not.
Check in this order:
VoteSites.<site>.Rewards; a milestone or vote party is configured in SpecialRewards.yml. See Where to Set Rewards.Money reward needs an economy integration; plugin-specific commands need their respective plugin and correct permissions.AdvancedPriority conditions. Only the first matching AdvancedPriority branch executes.ProcessRewards, SendVotesToAllServers, and the configured server role.A processed vote and successful player total do not prove every reward effect ran.
Inspect all paths before disabling anything:
SendVotesToAllServers: true intentionally letting multiple backends process a vote? For one-server rewards, review false and the targeted backend policy.EverySiteReward overlap with the per-site reward?VoteMilestones replacement enabled?Do not try to fix duplicate processing by arbitrarily deleting user totals; isolate and correct the duplicate route first.
For the standard PLUGINMESSAGING topology:
BungeeMethod and compatible database settings.bungeeconfig.yml contains the main shared SQL config; backend Config.yml should use DataStorage: MYSQL and matching Database credentials.BungeeSettings.yml must have UseBungeecord: true and a unique Server name matching the proxy's registered server.AllowUnJoined and backend AllowUnjoined differ in capitalization; the standard layout uses proxy false, backend true.BlockedServers/WhiteListedServers and SendVotesToAllServers before blaming the transport.For HTTP transport or dedicated voting proxies, do not follow 7.1.1 instructions: those features are documented as development-build-only in their respective reference pages.
See Proxy Setups and PLUGINMESSAGING.
| Symptom | Investigation |
|---|---|
| Driver class missing / connection initialization fails | Check selected DbType and matching JDBC driver on both proxy and backends; Velocity may require MySQLDriver |
| SQL connection refused/authentication failed | Verify private hostname, port, credentials, grants, firewall, and database availability |
| Standalone SQLite data missing | Check whether DataStorage changed unexpectedly or the Users.db file/path was replaced |
| Different totals across a proxy network | Verify shared SQL, proxy BungeeManageTotals: true, server names, and forwarding; do not switch to unsupported per-backend total handling |
| Shared user data is temporarily loading | Inspect the exact API caller and storage/cache logs; don't interpret a transient unavailable value as proof of an actual balance or completed reward |
Before attempting a reset, SQL conversion, or rollback, stop all affected data writers (not just vote intake), make a coordinated backup of SQL/SQLite data and related plugin files, and follow the existing Data Storage Migration guide. For JAR upgrades, keep the previous artifacts and a verified restore point. This page does not require a separate, not-yet-merged upgrade guide.
OnlineMode needs to match the network's UUID identity policy on every instance sharing data.BedrockPlayerPrefix (often a period) in the vote-site player-name field.AllowUnjoined / AllowUnJoined can prevent votes for never-joined identities. That is not the same as processing a valid offline vote for an existing player.See Bedrock Player Support and Online / Offline Mode.
VoteDelay influences when /vote next considers a site available; it does not automatically reject an early real vote.WaitUntilVoteDelay: true can reject early real votes; only use it when the website's actual cooldown matches your configuration.GlobalData is work in progress in 7.1.1. Verify a consistent SQL backup and test on staging before enabling it.See Service Sites, Vote Streak System, and Global Data Handling.
Record:
BungeeMethod, database type, and backend names (use non-sensitive aliases where needed).ServiceSite value and only the relevant, redacted reward/config fragment.Do not share SQL passwords, Votifier private keys, Votifier v2 tokens, proxy/Redis/MQTT credentials, authentication cookies, or full unredacted logs. Disable extra debug after the test.
Back to First Vote Verification or the FAQ.