Guides
Matchmaking
How /play picks a server, and when to use fill or spread.
When a player types /play skywars, Link looks at every server in the
skywars group and picks one. It skips:
- the server the player is on now,
- servers that are full.
From what is left, the strategy key in link.json decides.
fill or spread
strategy | Picks | Use it for |
|---|---|---|
fill (default) | The busiest server that still has room | Minigames: games start sooner with fewer, fuller servers |
spread | The emptiest server | Lobbies: players are shared evenly |
Link compares how full servers are, not raw player counts, so a server for 50 players with 25 online counts as fuller than a server for 100 with 30. When two servers are equally full, Link picks one of them at random, so a quiet group doesn’t send everyone to the same server.
The strategy is set per server: it is used when a player leaves that
server. A lobby that sends players to games usually wants fill. A game server
that sends players back to the lobbies usually wants spread.
Where the player counts come from
With Redis and Cloudflare, every server
reports its player count and its maximum with each heartbeat. Link also counts
the players it sends itself, so a burst of /play between two heartbeats
doesn’t pile everyone onto one server.
With a shared file, servers don’t report counts. Link then takes turns between the servers in the group, and can’t tell when one is full.
In the log
Every match is logged on the server the player leaves:
[Link] matched sw-2 (7/12 players, strategy fill)When nothing fits
If the group has no servers, the player sees There are no skywars servers.
If every server in it is full, they see Every skywars server is full. Your own
plugins get the same messages, see the Java API.