Development-build feature:
DedicatedVotingProxyis not available in the latest public release, VotingPlugin 7.1.1. It requires a 7.1.2-SNAPSHOT development build containing merged commit6867c488(PR #1551) and its backend-presence foundation fromc916763e(PR #1550). Release users will not have this setting yet.
Use this mode when players connect through multiple regional or player-facing proxies, but one separate proxy should receive votes and coordinate VotingPlugin for the entire network.
The dedicated voting proxy does not need local players. Backend servers report their online-player and current-server state through the configured VotingPlugin communication method so the dedicated proxy can route votes, cached rewards, vote parties, broadcasts, and status requests correctly.
Use a dedicated voting proxy when all of these are true:
MYSQL, REDIS, MQTT, or SOCKETS.This is different from Multi-Proxy Setup. MultiProxySupport coordinates multiple VotingPlugin proxies. Dedicated mode instead keeps VotingPlugin on one central proxy while the regional proxies remain outside VotingPlugin's vote-delivery path.
PLUGINMESSAGING BungeeMethod on the dedicated proxy and every backend.Server value in BungeeSettings.yml; it must match the server name configured on the dedicated proxy.
PLUGINMESSAGINGcannot be used for dedicated-proxy routing. It depends on the player-facing proxy's native player/server state and does not carry the backend presence snapshots required by a proxy with no local players. If dedicated mode is enabled withPLUGINMESSAGING, VotingPlugin logs a severe configuration error and falls back to normal proxy routing.
In the dedicated proxy's bungeeconfig.yml:
# Development builds containing merged PR #1551 only
DedicatedVotingProxy: true
# Choose one: MYSQL, REDIS, MQTT, or SOCKETS
BungeeMethod: MQTT
# Normal routing behavior is preserved; choose the behavior you want
SendVotesToAllServers: false
Configure the matching transport section and the normal Database section in the same file. See the method-specific guides:
Enable DedicatedVotingProxy on one central voting proxy only. Do not enable it on regional proxies.
On every backend, configure BungeeSettings.yml with the same method and a unique server name. For example:
UseBungeecord: true
BungeeMethod: MQTT
Server: lobby
MQTT:
ClientID: lobby
BrokerURL: "tcp://mqtt.internal.example:1883"
Username: 'votingplugin'
Password: 'replace-with-a-secret'
Prefix: ''
Also configure the shared SQL storage in backend Config.yml. Follow the selected method guide for its complete proxy and backend settings. In particular, every MQTT instance needs a unique ClientID, and socket endpoints must match the proxy's SpigotServers entries.
Regional/player-facing proxies continue routing players normally, but they do not participate in VotingPlugin routing:
DedicatedVotingProxy on them;Dedicated mode changes where VotingPlugin obtains online-player and current-server state. It does not replace the normal SendVotesToAllServers setting.
| Setting | Behavior in dedicated mode |
|---|---|
SendVotesToAllServers: true |
Preserves normal fan-out behavior and sends the vote to every eligible backend. Existing cache and WaitForUserOnline rules still apply. |
SendVotesToAllServers: false |
A player confirmed online is routed to their reported current backend. An unknown or offline player follows the existing online-vote cache path until presence confirms them. |
BlockedServers, WhiteListedServers, WaitForUserOnline, backend ProcessRewards, proxy broadcasts, and the normal totals settings continue to affect processing. Dedicated mode does not make every backend execute rewards unless the existing settings select that behavior.
For MYSQL, REDIS, MQTT, and SOCKETS, each backend reports its lifecycle and player presence through the same selected communication path:
The current implementation starts its resynchronization request five seconds after proxy startup, performs presence maintenance every 30 seconds, and treats a silent backend as unavailable after 90 seconds. These timings describe the development implementation and may change before release.
Dedicated presence adds no separate presence password, secret file, or persistence file. Each backend's unique configured Server name is its identity inside the selected communication system. Therefore, every participant with access to that transport must be trusted not to impersonate another backend.
SOCKETS, keep the generated/shared encryption key private and follow Sockets.c916763e and 6867c488 on the dedicated proxy and every backend.SpigotServers mapping.DedicatedVotingProxy: true only on the central proxy.SendVotesToAllServers for the intended normal reward-routing behavior.Test both routing modes before production use:
/votingpluginproxy status on the dedicated proxy and confirm each expected backend responds while it has players online./votingpluginproxy vote <player> <site> with a player online and confirm the selected backend behavior.SendVotesToAllServers both enabled and disabled if you may use both modes.| Symptom | Check |
|---|---|
| Severe warning says dedicated routing requires another method | Replace PLUGINMESSAGING with MYSQL, REDIS, MQTT, or SOCKETS on the dedicated proxy and all backends. |
| Players are unknown immediately after proxy startup | Wait for the startup resynchronization and verify backend lifecycle/snapshot messages reach the dedicated proxy. Presence is intentionally not loaded from disk. |
| One backend never becomes available | Verify its unique Server name, matching proxy server entry, selected method, credentials, prefix/topic/database, and firewall rules. |
| MQTT clients repeatedly disconnect | Give the dedicated proxy and every backend a unique ClientID. |
| Votes or broadcasts are duplicated | Ensure the vote enters VotingPlugin once, regional proxies do not run VotingPlugin, Votifier forwarding is not duplicating delivery, and SendVotesToAllServers matches the intended behavior. |
| Offline rewards remain cached after recovery | Confirm the backend appears in status, a complete presence snapshot is accepted, the player is reported on the correct backend, and all instances contain merged PRs #1550 and #1551. |