How to set up Geyser on a BungeeCord network
Run Geyser and Floodgate on your BungeeCord proxy for crossplay across every server, with Floodgate and the shared key.pem on each backend.
Updated · 2 min read
On a network, install Geyser and Floodgate on the BungeeCord proxy, then install Floodgate on every backend Paper server and copy the proxy's key.pem to each. Bedrock players connect to the proxy and can move between servers like Java players.
Layout
| Server | Plugins |
|---|---|
| BungeeCord proxy | Geyser-BungeeCord.jar, floodgate-bungee.jar |
| Each Paper backend | floodgate-spigot.jar (no Geyser) |
Do not also install Geyser on the backends. Only the proxy accepts Bedrock connections.
Before you start
- A working BungeeCord network: proxy created from the BungeeCord template, backends on Paper,
ip_forward: truein the proxy'sconfig.yml, andbungeecord: truein each backend'sspigot.yml. - Backends with
online-mode=falseinserver.properties(the proxy handles authentication).
1. Proxy: install Geyser and Floodgate
- Download the BungeeCord builds of Geyser and Floodgate from geysermc.org/download.
- Upload both to the proxy's
pluginsfolder and restart the proxy. - Set the Bedrock port in
plugins/Geyser-BungeeCord/config.yml:
bedrock:
address: 0.0.0.0
port: 25565 # the proxy's port, or an extra allocation on the proxy
Bedrock uses UDP, so it can share the proxy's port number. See which port do Bedrock players use.
- In the proxy's
plugins/floodgate/config.yml, make sure Floodgate data is forwarded to backends:
send-floodgate-data: true
- Restart the proxy.
2. Backends: install Floodgate
On every Paper server behind the proxy:
- Upload
floodgate-spigot.jartoplugins/and start the server once so it createsplugins/floodgate/. - Stop the server.
- Download
key.pemfrom the proxy'splugins/floodgate/folder and upload it to the backend'splugins/floodgate/, replacing the generated one. - Start the server.
Every Floodgate install on the network must have the same key.pem. If they differ, Bedrock players are kicked with a key error.
Keep username-prefix and replace-spaces the same on all Floodgate configs too, so names are consistent.
Why Floodgate on the backends?
The proxy authenticates Bedrock players, but each backend needs to know a player is a Bedrock player with a Floodgate UUID and name. The backend Floodgate reads the data forwarded by the proxy, which is why the key must match. It also gives plugins on each backend access to the Floodgate API.
Ports on Schokr
Only the proxy needs to be reachable by players. If your backends are separate Schokr servers, the proxy connects to them on their own ports; players never connect to backends directly.
Testing
- Join from Java and switch servers to confirm the network works.
- Join from Bedrock on the proxy address and Bedrock port.
- Switch servers from Bedrock (for example with
/server lobby). - Watch the backend console for any Floodgate errors on join.
Troubleshooting
- Kicked with a Floodgate key or decryption error:
key.pemmismatch. Recopy from the proxy. - Bedrock player shows as a normal offline-mode player on the backend: Floodgate missing on that backend, or
send-floodgate-datais off on the proxy. - Cannot connect at all: see fix "Unable to connect to world".