Documentation menu

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

strategyPicksUse it for
fill (default)The busiest server that still has roomMinigames: games start sooner with fewer, fuller servers
spreadThe emptiest serverLobbies: 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:

lobby-1Output
[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.

Something wrong or missing on this page? Open an issue on GitHub.