One address, three worlds, every platform
For a while, "the server" was one vanilla Java world that a few friends and I had been playing on. Then the requests started: can we have a fresh survival world? Can someone join from a tablet? Can a friend join from their Xbox? Each one is easy on its own. All of them together, without breaking the world everyone had already sunk hours into, took a bit more planning.
The ground rules
Before anything else, the group agreed on a few rules:
- The original world stays exactly as it is. Same builds, same inventories, same everything.
- One address for everything. Nobody should have to remember which port goes with which world.
- Java, Bedrock and Xbox players all get in.
- Keep it a friends-only server with a whitelist.
The shape of it
The trick that makes "one address, many worlds" work is a proxy. Players connect to a single front door (we use Velocity), and it hands them off to whichever world they pick, without disconnecting them. Behind the proxy are four servers:
- Lobby: where everyone lands, with signs to each world.
- Classic: the original world.
- Survival: a fresh world with land claims and a few quality-of-life commands.
- Peaceful: survival with no monsters, and everything shared.
Keeping the original world untouched
This was the one change I treated like production. A proxy needs each world server to trust it, which normally means swapping vanilla Minecraft for a modded server. The popular choice, Paper, reorganises the world folders when it first starts. That's fine for a new world, not for one people have put real time into.
So Classic moved to Fabric instead, with a small mod that lets it sit behind the proxy. Fabric leaves the world files exactly as they are. The change followed the same routine I'd use on any server that matters:
- Back up first: a full copy of the world and server, not just the save files.
- Check what you're about to touch: which Minecraft version last saved the world, so it could never be loaded on an older one.
- Have a way back: the original server setup was kept, so reverting meant a file swap and a restart.
- Prove it, don't assume it: log in and check position, inventory and builds before calling it done.
The first test login put me back in the exact spot I'd logged out, with everything in my inventory. The rollback never got used.
Letting Bedrock and Xbox players in
Java and Bedrock editions don't speak the same language. Geyser translates between them, and its companion Floodgate lets Bedrock players sign in with their Xbox account instead of needing a Java one.
Consoles were trickier, because Xbox doesn't let you type in a server address. The workaround is a little extension that signs into a spare Xbox account and shows the server in that account's friend list. Friends add it, and the server appears under Friends → Joinable like any friend's world.
What I'd tell someone doing this
- Back up first, and check the world's version before changing anything that touches it.
- Leave the precious world on the most conservative setup, and do your experimenting on the new ones.
- Test from outside your network, like your phone on mobile data. Half the surprises only show up there.
Next up: the lobby, which turned into a much bigger project than planned. That story is here.
Under the hood
- Proxy: Velocity with modern player-info forwarding. The world servers only accept players the proxy vouches for (a shared secret), and they only listen on the host itself, so they can't be reached directly.
- World servers: Paper for the lobby, Survival and Peaceful. Classic runs on Fabric with FabricProxy-Lite, the least invasive way to put an existing vanilla world behind a proxy.
- Bedrock and Xbox: Geyser and Floodgate run on the proxy, so every world gets crossplay without per-server setup. MCXboxBroadcast handles the Xbox friend-list trick.
- One name, inside and out: split-horizon DNS. At home the name points straight at the server, everywhere else at the public address, so the same server entry works on every device without router hairpinning.
- Hosting: everything runs in one Windows virtual machine, managed with AMP from CubeCoders, which also handles scheduling and backups.