# Let Bedrock players join a Java server

> Turn on Bedrock crossplay so players on phones, consoles and Windows can join your Minecraft Java server.

Source: https://docs.coritan.com/managed-containers/software/bedrock-crossplay/

In the dashboard:

- /dashboard/servers/…/software: https://www.coritan.com/dashboard/servers

Minecraft Bedrock Edition, the edition on phones, consoles and Windows, cannot join a Java server by itself. *Bedrock crossplay* adds two plugins to a Minecraft Java server: Geyser, which translates between the two editions, and Floodgate, which lets Bedrock players join without a Java account. You turn it on with one switch on the server's **Software** tab. We install both plugins, give Geyser a port of its own and keep both plugins up to date.

## Before you begin

- The server must run plugin software for Minecraft Java, such as Paper, Purpur or Spigot, or a server that loads both plugins and mods, such as Arclight, Mohist or Magma. Mod loaders (Fabric, Quilt, Forge and NeoForge), Vanilla and proxies cannot load Geyser, so the switch does not appear on them.
- The server must run Java 21 or newer, which is the Java for Minecraft 1.20.5 and newer. [Change Java settings](/managed-containers/software/java-settings/) shows the Java your server runs.
- If you added Geyser or Floodgate to the server yourself, remove them first, so the server does not load two copies.
- On a server someone shared with you, you need the Install software permission.

## Turn on Bedrock crossplay

1. In the [dashboard](https://www.coritan.com/dashboard/servers), go to **Container Apps** and open the server, then the **Software** tab.
2. On the **Current software** card at the top, turn on **Bedrock crossplay**.
3. Wait while the switch is greyed out. We download both plugins into the server's `plugins` folder straight away.
4. Restart the server from the [console](/managed-containers/console/), so it loads the plugins.

Geyser also gets a port of its own, which the [Ports tab](/managed-containers/ports/) lists as a **Managed** port. It does not count against your plan's ports.

## Find the Bedrock address

Bedrock players add the server in the game with an address and a port. The **Bedrock players join at** line under the switch does not show the address yet, so find it one of these ways:

- If players join the server by a hostname, such as a [free server's](/managed-containers/free-servers/) join address, Bedrock players use the same hostname with port `19132`, the standard Bedrock port.
- Otherwise, open the server's **Ports** tab and find the port marked **Managed** with the purpose `Bedrock (NetherNet)`. Bedrock players enter the IP address before the colon as the address, and the number after it as the port.
- The API returns both in `bedrock_bridge.join`, as [With the API](#with-the-api) shows.

The Java port does not work for Bedrock players.

## Change the Geyser settings

Geyser keeps its settings in `plugins/Geyser-Spigot/config.yml`, and Floodgate keeps its settings in `plugins/floodgate/config.yml`. Edit them in the [Files tab](/managed-containers/files/), then restart the server.

Bedrock players reach Geyser through the port we gave it, so we set these Geyser settings again every time the server starts. A change to them does not last:

| Setting | What we set |
| --- | --- |
| `bedrock.address` and `bedrock.port` | The address and number of Geyser's port |
| `bedrock.clone-remote-port` | `false` |
| `bedrock.transport` | `nethernet` |
| `bedrock.webrtc-port` | `0`, so Geyser uses the same port for everything |
| `bedrock.signaling.mode` | `builtin` |
| `remote.address` | `auto` |
| `remote.auth-type` | `floodgate` |
| `advanced.bedrock.haproxy-protocol-whitelisted-ips` | The addresses of our proxies, which pass on each player's own address |

Everything else in both files is yours to change.

## Keep the plugins up to date

Each time the server starts, we check GeyserMC for new builds of Geyser and Floodgate and install them before the server boots. If GeyserMC does not answer within 20 seconds, the server starts with the builds it already has. You do not need to update the plugins yourself.

The two plugins appear on the [Installed addons](/managed-containers/software/installed-addons/) panel with the **Uploaded by hand** badge, because the Marketplace did not install them. Leave them there: to remove them, turn off the switch.

## Turn off Bedrock crossplay

1. On the server's **Software** tab, turn off **Bedrock crossplay** on the **Current software** card.
2. Restart the server, so it stops running Geyser.

We delete `plugins/Geyser-Spigot.jar`, `plugins/floodgate-spigot.jar` and the folders `plugins/Geyser-Spigot` and `plugins/floodgate`, with any settings you changed in them. Geyser's port goes back to the pool.

If you turn crossplay on again later, it starts afresh. Floodgate creates a new key, and Bedrock players keep their player data, because Floodgate identifies them by their Xbox account.

When you [change the server software](/managed-containers/software/) to software that cannot load Geyser, such as Fabric, Vanilla or a Bedrock server, we turn Bedrock crossplay off in the same way.

## Result

The switch stays on, and a message says `Setting up Bedrock crossplay. Geyser and Floodgate install on the next start.` The plugins are in the `plugins` folder by then, and they load when the server restarts. Bedrock players can then join at the address you found, while Java players join as before.

## Troubleshooting

The **Bedrock crossplay** switch is not on the card
: The server cannot run Geyser. It runs a mod loader, Vanilla, a proxy or a Bedrock server, or it runs a Java older than 21. Change to a plugin server under [Server software](/managed-containers/software/), or move to Minecraft 1.20.5 or newer on Java 21. The API gives the exact reason in `unsupported_reason`.

**Could not change Bedrock crossplay** with `GeyserMC downloads are unavailable right now. Try again shortly.`
: GeyserMC's download service did not answer, so the switch stays off. Turn it on again later.

Bedrock players cannot connect
: Restart the server after you turn the switch on, because the plugins load only when the server starts. Then check that players use the address from [Find the Bedrock address](#find-the-bedrock-address), not the Java port.

Some Bedrock players can join and others cannot
: Ask the players who cannot join to update Minecraft to the latest version. Older versions cannot join.

You installed Geyser yourself and Bedrock players cannot connect
: A copy of Geyser that you uploaded, or installed from a source other than GeyserMC, has no Bedrock port of its own. Remove it, then turn on the switch.

A change to Geyser's config does not last
: The setting is one we set at every start. See [Change the Geyser settings](#change-the-geyser-settings).

## Related

- [Change the server software](/managed-containers/software/)
- [Manage server ports](/managed-containers/ports/)
- [Manage installed addons](/managed-containers/software/installed-addons/)

## With the API

Turn Bedrock crossplay on:

```bash
curl -X POST https://api.coritan.com/api/v1/client/servers/$SERVER/software/bedrock \
  -H "Authorization: Bearer $CORITAN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"enabled": true}'
```

The request returns once both plugins are installed. The response has `enabled` (`true`), `state` (`ready`), `geyser_version`, `geyser_build`, `floodgate_version`, `floodgate_build` and `bedrock_port`, Geyser's port.

Send `{"enabled": false}` to turn it off. The response is the new state, with `enabled` set to `false`, `state` set to `disabled` and the versions set to `null`. A body without `enabled` also turns crossplay off.

`GET /api/v1/client/servers/{uuid}/software/context` shows the state under `bedrock_bridge`:

`supported`
: Whether the server can run Geyser. When it is `false`, `unsupported_reason` says why.

`enabled` and `state`
: `true` and `ready` while crossplay is on, `false` and `disabled` while it is off.

`geyser_version`, `geyser_build`, `floodgate_version` and `floodgate_build`
: The builds on the server.

`last_checked_at`
: When we last checked GeyserMC for new builds.

`join`
: `null` while crossplay is off. Otherwise, `address` and `port` are the hostname and port Bedrock players join at when the server has a hostname. `direct` is the server's IP address and Geyser's port, as `host:port`, and `null` on a free server. `bedrock_port` is Geyser's port. On a server with no hostname, give players `direct`.

A server that cannot run Geyser answers `400` with the reason:

- `This server runs mods rather than plugins. Geyser is a plugin, so it needs Paper, Spigot or another plugin-capable server.`
- `Vanilla Minecraft cannot load plugins. Switch to Paper to add Bedrock support.`
- `This server type does not support plugins.`
- `Geyser needs Java 21 or newer and this server runs Java 17. Update the Minecraft version first.`, with the server's own Java version

`GeyserMC downloads are unavailable right now. Try again shortly.` also answers `400`. On a server shared with you, turning crossplay on or off needs `software.install`.

## API

- `POST /api/v1/client/servers/{uuid}/software/bedrock`: Turn Bedrock crossplay on or off for a Java server (https://docs.coritan.com/api/reference/client/container-apps/servers-software/#op-post-api-v1-client-servers-uuid-software-bedrock)
