# How to Let Bedrock Players Join Your Java Minecraft Server with Geyser and Floodgate (/docs/minecraft/setup-geyser-floodgate)



import { Step, Steps } from 'fumadocs-ui/components/steps';

**Geyser** + **Floodgate** is the standard combo for letting **Bedrock Edition** players (mobile, console, Windows 10/11) join your **Java Edition** server without owning a Java account. Geyser translates the Bedrock protocol to Java in real time. Floodgate handles authentication so Bedrock players don't need a Java login.

This is the only practical way to run a cross-platform server today, and it works on Spigot, Paper, BungeeCord, Velocity, Fabric, NeoForge, and standalone.

How It Works [#how-it-works]

```
┌──────────────────┐                           ┌──────────────┐
│ Bedrock player   │                           │   Java       │
│ (mobile/console) │ ──── port 19132 (UDP) ──► │   server     │
└──────────────────┘                           │  + Geyser    │
                                               │  + Floodgate │
┌──────────────────┐                           │              │
│  Java player     │ ──── port 25565 (TCP) ──► │              │
│   (PC)           │                           │              │
└──────────────────┘                           └──────────────┘
```

* **Geyser** is a protocol translator — Bedrock packets in, Java packets out
* **Floodgate** lets Bedrock players authenticate without a Mojang account
* Both run as plugins on your Java server (no separate proxy needed)

What You Get [#what-you-get]

| Feature                                          | Works?                          |
| ------------------------------------------------ | ------------------------------- |
| Bedrock players join Java server                 | ✅                               |
| Cross-platform PvP / PvE                         | ✅                               |
| Bedrock players see Java skins                   | ✅                               |
| Java players see Bedrock skins                   | ✅                               |
| Most Java plugins (EssentialsX, LuckPerms, etc.) | ✅                               |
| Resource packs                                   | ✅ (with conversion)             |
| Modded servers (Forge mods)                      | ⚠️ Limited — depends on the mod |
| Custom command blocks / vanilla commands         | ✅                               |
| Bedrock-specific UI elements                     | ✅ via Geyser forms              |

Install Geyser and Floodgate [#install-geyser-and-floodgate]

<Steps>
  <Step>
    Download both plugins [#download-both-plugins]

    Get the latest builds from [geysermc.org/download](https://geysermc.org/download). Pick the Geyser AND Floodgate builds for your platform:

    | Platform       | Geyser file             | Floodgate file             |
    | -------------- | ----------------------- | -------------------------- |
    | Spigot / Paper | `Geyser-Spigot.jar`     | `floodgate-spigot.jar`     |
    | BungeeCord     | `Geyser-BungeeCord.jar` | `floodgate-bungee.jar`     |
    | Velocity       | `Geyser-Velocity.jar`   | `floodgate-velocity.jar`   |
    | Fabric         | `Geyser-Fabric.jar`     | `floodgate-fabric.jar`     |
    | NeoForge       | `Geyser-NeoForge.jar`   | `floodgate-neoforge.jar`   |
    | Standalone     | `Geyser-Standalone.jar` | `floodgate-standalone.jar` |

    > **Always install both.** Geyser without Floodgate forces Bedrock players to have a Java account — defeating the point.
  </Step>

  <Step>
    Stop the server [#stop-the-server]

    In the [XGamingServer Panel](https://panel.xgamingserver.com), open **Console** and stop your server.
  </Step>

  <Step>
    Upload to plugins/ or mods/ [#upload-to-plugins-or-mods]

    Click **Files** in the sidebar. Upload both JARs to `plugins/` (or `mods/` for Fabric/NeoForge).
  </Step>

  <Step>
    Add the Bedrock port to Network [#add-the-bedrock-port-to-network]

    Click **Network** in the sidebar. Click **Create Allocation** and add port **19132** as a **UDP** allocation. Bedrock uses UDP, not TCP — make sure it's UDP.

    > **Important:** If your panel doesn't allow setting protocol manually, the default allocation is usually TCP. Open a support ticket to add a UDP allocation if needed.
  </Step>

  <Step>
    Start the server [#start-the-server]

    Start from **Console**. Geyser and Floodgate generate their config files and bind to port 19132.
  </Step>

  <Step>
    Verify [#verify]

    In Console:

    ```
    plugins
    ```

    Both `Geyser-Spigot` (or your platform) and `floodgate` should appear in green. You should also see:

    ```
    [Geyser] Started Geyser on 0.0.0.0:19132
    ```
  </Step>
</Steps>

Connection Details for Players [#connection-details-for-players]

Share these with your community:

| Player platform                       | Server  | Port                         |
| ------------------------------------- | ------- | ---------------------------- |
| Java Edition (PC)                     | Your IP | Your Java port (e.g., 25565) |
| Bedrock — Mobile / Tablet             | Your IP | 19132                        |
| Bedrock — Windows 10/11               | Your IP | 19132                        |
| Bedrock — Xbox / PlayStation / Switch | Your IP | 19132 (see notes below)      |

Console-Specific Caveats [#console-specific-caveats]

* **Xbox**: console-edition Bedrock doesn't allow direct IP entry. Players need [BedrockConnect](https://github.com/Pugmatt/BedrockConnect) or [MCXboxBroadcast](/docs/minecraft/install-mcxbox-broadcast) to connect.
* **PlayStation**: same as Xbox. Use BedrockConnect.
* **Switch**: same. BedrockConnect required.

For Switch/PS/Xbox, install [MCXboxBroadcast](/docs/minecraft/install-mcxbox-broadcast) on your server to make it appear as a Bedrock featured server.

Configure Geyser [#configure-geyser]

Main config: `plugins/Geyser-Spigot/config.yml` (path varies by platform).

Key Settings [#key-settings]

```yaml
bedrock:
  port: 19132
  motd1: "My Cross-Platform Server"
  motd2: "Bedrock + Java"
  server-name: "MyServer"

remote:
  address: auto
  port: auto
  auth-type: floodgate

show-cooldown: title
emote-offhand-workaround: disabled
```

| Setting          | Description                                                  |
| ---------------- | ------------------------------------------------------------ |
| `bedrock.port`   | Port for Bedrock connections (must match Network allocation) |
| `bedrock.motd1`  | Server name shown in Bedrock server list                     |
| `remote.address` | Java server address (`auto` = same machine)                  |
| `remote.port`    | Java server port (`auto` = read from `server.properties`)    |
| `auth-type`      | **Must be `floodgate`** when using Floodgate                 |

Floodgate Username Prefix [#floodgate-username-prefix]

By default, Bedrock players have a `.` prefix on their username (e.g., `.SteveBedrock`) to distinguish them from Java players. To change or remove:

In `plugins/floodgate/config.yml`:

```yaml
username-prefix: "."
```

Set to `""` (empty string) to remove the prefix entirely. **Warning**: removing the prefix can cause name collisions if a Java player has the same username.

Resource Packs [#resource-packs]

Java resource packs don't work directly on Bedrock. Geyser supports converted packs:

1. Convert your Java pack with [GeyserPack Converter](https://github.com/Kas-tle/java2bedrockSh)
2. Drop the `.mcpack` into `plugins/Geyser-Spigot/packs/`
3. Restart — Bedrock players auto-download the pack on join

Plugin Compatibility [#plugin-compatibility]

| Plugin                    | Works with Geyser?                     |
| ------------------------- | -------------------------------------- |
| EssentialsX               | ✅                                      |
| LuckPerms                 | ✅                                      |
| WorldEdit / WorldGuard    | ✅                                      |
| ProtocolLib               | ✅                                      |
| Most chat plugins         | ✅                                      |
| Custom GUIs (anvil-based) | ⚠️ Use Geyser forms instead            |
| Resource pack-based GUIs  | ⚠️ Need Bedrock-compatible pack        |
| Anti-cheat plugins        | ⚠️ May false-positive Bedrock movement |
| Custom items via NBT      | ⚠️ Limited                             |

For best results, use plugins explicitly designed for cross-platform.

BungeeCord / Velocity Setup [#bungeecord--velocity-setup]

If you have a proxy network, install Geyser and Floodgate on the **proxy**, not the backends:

1. Use `Geyser-BungeeCord.jar` or `Geyser-Velocity.jar`
2. Use `floodgate-bungee.jar` or `floodgate-velocity.jar`
3. Backend servers also need `floodgate-spigot.jar` (with the same key file)
4. Copy `key.pem` from proxy's `plugins/floodgate/` to each backend's `plugins/floodgate/`

This lets the proxy translate Bedrock once, and backends accept Floodgate-authenticated players.

Common Issues [#common-issues]

| Problem                                                | Fix                                                 |
| ------------------------------------------------------ | --------------------------------------------------- |
| Bedrock players can't see the server                   | Port 19132 not allocated, or wrong UDP/TCP          |
| "Could not connect" on Bedrock                         | Server offline, wrong port, or ISP blocking UDP     |
| Bedrock players can connect but immediately disconnect | `auth-type` not set to `floodgate`                  |
| Bedrock players need Java account                      | Floodgate not installed                             |
| Anti-cheat kicks Bedrock players                       | Whitelist Bedrock players, or disable strict checks |
| Skins don't load                                       | Geyser API rate limit — wait or restart             |
| Bedrock players appear as "."                          | That's the prefix — change in Floodgate config      |
| Console players can't connect                          | Console needs BedrockConnect or MCXboxBroadcast     |

Common Mistakes [#common-mistakes]

| Mistake                                            | Fix                                         |
| -------------------------------------------------- | ------------------------------------------- |
| Installing Geyser without Floodgate                | Bedrock players forced to use Java accounts |
| Allocating port 19132 as TCP                       | Bedrock uses UDP — allocate as UDP          |
| Forgetting to restart after install                | Geyser binds at startup                     |
| Setting `auth-type: online` instead of `floodgate` | Defeats Floodgate — Bedrock won't auth      |
| Using Geyser-Standalone when running Spigot        | Use Geyser-Spigot instead                   |
| Sharing only the Java port                         | Bedrock uses 19132 — share both             |

Related Guides [#related-guides]

* [Plugin Setup](/docs/minecraft/plugin-setup)
* [Install MCXboxBroadcast](/docs/minecraft/install-mcxbox-broadcast)
* [Convert Bedrock to Java](/docs/minecraft/convert-bedrock-to-java)
* [Custom Server IP](/docs/minecraft/custom-server-ip)
