-
Notifications
You must be signed in to change notification settings - Fork 1
Capacity Queue

The queue starts when every suitable lobby is full. Waiting players see their position and move automatically when a slot becomes available.
First, give every lobby in the pool a finite max_players value. An uncapped lobby can never be considered full, so the queue will never start.
In plugins/velocitynavigator/navigator.toml:
[routing]
default_lobbies = [
{ server = "lobby-1", max_players = 100 },
{ server = "lobby-2", max_players = 100 },
]
[queue]
enabled = true
poll_seconds = 2
notify_seconds = 5
max_size = 500
holding_server = "holding"
command = "queue"
permission = "none"Register a real backend named holding in velocity.toml, then run:
/vn config validate
/vn reload
To test it, fill both lobbies to their configured limits and connect another player. That player should enter holding, receive position updates, and move to a lobby when one slot opens.
poll_seconds controls how often the proxy checks for space. notify_seconds controls position updates, and max_size limits how many players may wait.
VelocityNavigator does not create the holding server, its world, or its map. holding_server must be the name of an existing backend registered in Velocity.
Example:
# velocity.toml
[servers]
lobby-1 = "127.0.0.1:25566"
lobby-2 = "127.0.0.1:25567"
holding = "127.0.0.1:25568"
try = ["lobby-1"]The waiting area can be a simple room, parkour map, or full lobby with scoreboards and NPCs. It only needs the VelocityNavigator JAR if you want bridge features such as backend menus, NPCs, or PlaceholderAPI there.
Keep holding out of default_lobbies and contextual routing groups. Protect its backend port and configure player forwarding exactly like your other Velocity backends.
Make its player limit large enough for the expected queue. If queue.max_size = 500, it must accept roughly that many waiting players, plus room for staff and reconnects.
If holding_server is blank, players who are already online wait on their current backend. New connections are not sent to a dedicated waiting server.
When all eligible lobbies are full, a new player is sent to holding, added to the queue, and shown their position in the action bar. A normal Minecraft connection screen can appear briefly during the transfer.
When space opens, VelocityNavigator removes the first eligible player from the queue and sends them to a lobby.
If the queue reaches max_size, the player receives the queue-full message and is not added. If they are already on the holding backend, they stay there until a command or another plugin moves them.
| Command | Purpose |
|---|---|
/queue |
Show the current position |
/queue leave |
Leave the queue without disconnecting |
/queue leave removes the queue entry but does not move the player. Add an exit NPC, portal, or another server command if players need a way out of the holding area.
Queue positions live in one proxy's memory. Redis does not share them. Use proxy affinity at your external load balancer so reconnecting players return to the same Velocity instance.
-
Queue never starts: Verify every eligible lobby has a finite
max_playersvalue and is actually full. - Holding server validation fails: Register it in Velocity and remove it from every lobby pool.
-
Players remain queued after space opens: Run
/vn serversand confirm the proxy sees the new player count and a healthy lobby. -
The queue command conflicts: Choose another
commandvalue and run/vn config validate.
Queue messages live in messages.toml. See Language Packs if you want to translate them.
Home · Quick Start · Configuration · Operations · FAQ
Website · GitHub · Support / Discord · Report a Bug
VelocityNavigator v4.5.0 · by DemonZ Development
![]()
Getting Started
Routing
- Routing Algorithms
- Algorithm Visualizations
- Initial Join Balancing
- Contextual Routing Guide
- Player Affinity
- Health & Circuit Breakers
- Retries & Fallbacks
- Geo Routing
Player Experience
- Java & Bedrock Selectors
- Selector Customization
- Backend NPCs
- Backend YAML Menus
- Language Packs
- Party System
- Capacity Queue
Configuration
- Configuration Guide
- Modular Configuration
- MOTD Configuration
- Authentication & Security
- Backend Bridge Configuration
- Migration Guide v3 → v4
- Migration Guide v4.4 → 4.5
Network & Operations
- Advanced Proxy Systems
- Redis & Multi-Proxy
- Common Core Architecture
- NavigatorAPI
- Storage & Databases
- Server Management
- Backend Lifecycle States
- Maintenance Mode
- HTML Dashboard
- Operations Runbook
- Prometheus & Grafana Setup
- Troubleshooting Guide
- FAQ
VelocityNavigator 4.5.0