DGuard

How to make a lobby on a Minecraft server: world, protection and mode selector

The lobby is where a player lands on joining: they pick a mode here, read the rules and wait for friends. It's either a separate world on the same server or a separate server behind Velocity. Here are both routes: a void world to build in, spawning on every join, turning off damage, hunger and building, and a menu, NPC or compass to pick a mode.

The DGuard team9 min read

In short: on a single server the lobby is its own world — create it with Multiverse-Core and turn on join-destination so every login starts there. On a network the lobby is its own Paper server, first in the try list of velocity.toml. The rest is the same: a void world with a build at the spawn point, players spawning there on every join, damage, hunger, PvP and building switched off, and a mode picked through a menu, an NPC or a compass from a hub plugin.

Lobby world or lobby server

A world on the same serverA separate server behind Velocity
Fits whenThere's one mode: survival, anarchy, creativeThere are several modes, each on its own server
Built withThe Multiverse-Core pluginOne more Paper server and the Velocity proxy
Where a player lands on loginjoin-destination in MultiverseThe first server in try in velocity.toml
Going to a modeA teleport to another world/server <mode> or a menu button
LoadOne shared main thread: lag in one world is felt in allIts own process: the lobby doesn't slow the modes

How a second world differs from a separate server is covered in Multiverse-Core, and how a proxy network fits together in Minecraft server networks and setting up Velocity.

A void world to build in

A lobby is built from scratch or pasted in with WorldEdit — //schem load and //paste, see WorldEdit — so you don't need terrain around it. On a separate lobby server you get a void world without plugins: a flat world of a single air layer with the the_void biome.

a void world without plugins
# server.properties of the lobby server — before the first start
level-type=minecraft\:flat
generator-settings={"biome":"minecraft:the_void","layers":[{"block":"minecraft:air","height":1}]}

Generation settings only apply when the world is created: if the world already exists, stop the server and delete its folder or set a different level-name. On a shared server Multiverse-Core creates the lobby world and a generator plugin makes it empty — for example VoidGen from the generator list in the Multiverse docs.

Players always spawn in the lobby

lobby world: every login starts there
# a lobby world on a shared server: Multiverse-Core + the VoidGen generator
/mv create lobby normal --generator VoidGen
/mv tp lobby
# build or paste a platform, stand on it:
/mv setspawn
/mv config enable-join-destination true
/mv config join-destination lobby
  • Lobby world. With enable-join-destination: true Multiverse puts the player in the join-destination world on every login instead of where they logged out. The option is off by default.
  • Lobby server. Velocity sends the player to the server in try on login and when they're kicked from another server. Inside the lobby, set the point with /setworldspawn and /setspawn from EssentialsX Spawn; spawn-on-join: true in the EssentialsX config.yml teleports everyone who joins to spawn — or only listed groups.
  • Getting back to the lobby. In one world — /spawn from EssentialsX Spawn. On a network — Velocity's built-in /server lobby; the familiar /hub and /lobby aren't built into Velocity, plugins add them.

No damage, hunger, PvP or building

What to turn offWith the game itselfWorldGuard or Multiverse
Hungerdifficulty=peaceful: on Peaceful the hunger bar never depletes and hostile mobs don't spawnThe natural-hunger-drain deny flag; in Multiverse — /mv modify lobby set hunger false
DamageGame rules fall_damage, fire_damage, drowning_damage, freeze_damage → falseThe invincible allow flag — the player can't be hurt at all
PvPGame rule pvp false (since 1.21.9; before that pvp=false in server.properties)The pvp deny flag; in Multiverse — set pvp false
BuildingAdventure mode: gamemode=adventure and force-gamemode=true — without special items blocks can't be broken or placed/mv modify lobby set gamemode adventure — Multiverse switches the mode on entering the world
Time and weatherGame rules advance_time false and advance_weather falseThe time-lock and weather-lock flags — they change only what the player sees
MobsGame rule spawn_mobs falseThe mob-spawning deny flag
Dropping and picking up items—The item-drop deny and item-pickup deny flags
Game rule names are for 1.21.11 and newer; earlier versions use the old names, see game rules
WorldGuard: rules for the whole lobby world
# in the lobby world: rules for the whole world via the __global__ region
/rg flag __global__ pvp deny
/rg flag __global__ invincible allow
/rg flag __global__ natural-hunger-drain deny
/rg flag __global__ mob-spawning deny
/rg flag __global__ item-drop deny
/rg flag __global__ passthrough deny     # only region members can build

# the same from the console — with the world named
rg flag __global__ pvp -w lobby deny

Test the lobby from a regular account without OP: operators bypass WorldGuard protection, which makes the flags look broken. Region priorities and the other flags are in WorldGuard.

Picking a mode: menu, NPC and compass

  • Menu. A chest with a button per mode. In DeluxeMenus a button with the [connect] survival action sends the player to that network server — on Velocity this needs bungee-plugin-message-channel; for a world on the same server the button runs a world-switch command. Details in menu plugins.
  • NPC. A character by the portal: a click opens a menu or runs a command. Plugins and first commands are in NPC plugins, a label above the NPC in hologram plugins.
  • A compass in the inventory. An item the player gets on joining that opens the mode selector. Ready-made hub plugins provide it — and they also cover world rules and spawn.
DeluxeHubHubbly
Published onSpigotMCModrinth, open source (AGPL-3.0)
VersionsThe page lists versions up to 1.211.20.6–26.x, tagged up to 26.3 on Modrinth
Mode selectorJoin items, a server selector menu with PlaceholderAPI supportA compass server selector, join items
World rulesToggle block breaking and placing, fall damage, hunger, PvP, weather, item drop and pickupToggle building, damage, hunger, weather, item drop and pickup
AlsoScoreboard, tab list, announcements, launch pads, double jump, void-fall protectionLaunch pads, boss bar, announcements, player hider, spawn on join, void-fall protection
Plugins in alphabetical order; features per their SpigotMC and Modrinth pages

A lobby server on a network

A lobby server is set up like any server behind a proxy: online-mode=false, player info forwarding from Velocity and a port closed by the firewall — step by step in setting up Velocity. Keep it on the same version as the modes, and recheck [connect] menus whenever you rename servers in [servers].

The lobby and cheaters

The lobby is the first place a cheater switches the client on: Fly and Speed on the parkour, KillAura in the PvP zone. DGuard — the best anticheat for a modern Minecraft server — goes on the lobby server too, with its own key and the latest PacketEvents next to it, and checks combat, movement, packets, inventory, building and the world the same way on every server of the network. Hidden mode never tells a cheater he's been caught while DGuard collects evidence, and you set the strictness of punishments.

CheatDGuardGrimACVulcanPolarIntaveMatrix
Flyflies without elytra or creative
Speedfaster than the game allows
Timerspeeds the game up
Blinkholds packets, then teleportspartly: no dedicated check — partly, via the experimental BadPacketsR
KillAurahits targets by itselfpartly: no dedicated check — only indirectly, via Reach and packet order
Reachhits beyond reach
What shows up in a lobby: who checks these cheatsAll 47 kinds of cheats in the comparison

If the lobby is a world on the same server, no extra install is needed: the anticheat sees players in every world of its server. A separate lobby server is one more server in the DGuard panel; protection is the same on every plan, and you pay for online players and the number of servers — see pricing.

FAQ

How do I make a lobby on a Minecraft server?

On one server, a separate world made with Multiverse-Core with join-destination turned on; on a network, a separate Paper server first in Velocity's try list. Then a void world with a build, spawn on every join, damage, hunger and PvP turned off, and a mode selector menu.

How do I make players always spawn in the lobby?

In Multiverse-Core run /mv config enable-join-destination true and /mv config join-destination lobby. On a separate lobby server set the point with /setspawn and turn on spawn-on-join: true in the EssentialsX config.yml.

How do I disable hunger and damage in the lobby?

On a separate server use difficulty=peaceful (hunger never depletes on Peaceful) and set the fall_damage, fire_damage, drowning_damage and freeze_damage game rules to false. In a lobby world on a shared server use the WorldGuard flags invincible allow and natural-hunger-drain deny.

How do I make a server selector compass?

The easiest way is a hub plugin such as DeluxeHub or Hubbly: it gives an item on join that opens a server menu. Check that the plugin supports your version before installing it.

Does a lobby server need an anticheat?

Yes: cheaters show up in the lobby first — flying over the parkour or running KillAura in the PvP zone. On a Velocity network the anticheat goes on every game server, the lobby included, not on the proxy.

Sources

All sections

Run the best anticheat for modern Minecraft

DGuard catches all 47 kinds of cheats in our comparison — the closest rival, Intave, has 27. Full protection on every plan, free up to 30 players online.