Crossplay between Java and Bedrock works in one direction: Bedrock players join a Java server through Geyser, a protocol translator that runs as a plugin or mod on your server. Add Floodgate and Bedrock players do not even need to own a Java account. The minimum setup: install the Geyser plugin/mod, open UDP port 19132 alongside your normal Java port, and Bedrock phones, consoles, and tablets can connect to the same world as everyone else.
This guide covers the install on Paper and Fabric, the Floodgate authentication piece, the port situation on rented servers, and the part most tutorials skip: what Bedrock players actually experience, because the translation is good but not invisible.
Tested on: Minecraft Java Edition 1.21.4 (Paper and Fabric servers), with current Geyser and Floodgate builds from geysermc.org. Bedrock auto-updates on all platforms, and Geyser tracks the latest Bedrock protocol; expect to update Geyser within days of every Bedrock release, independent of your Java version.
How the pieces fit
Geyser sits on your server listening for Bedrock connections (UDP, default port 19132, the standard Bedrock port). When a Bedrock client connects, Geyser translates every packet both ways: Bedrock movement and actions into Java protocol, Java world data into Bedrock terms. The Java server itself sees a normal Java player.
Floodgate solves authentication. Without it, a Bedrock player must log into a paid Java account through Geyser, which defeats the point for console players who own only Bedrock. With Floodgate installed, Bedrock players authenticate with their Xbox account and join under their gamertag with a configurable prefix, . by default, so Steve on Bedrock appears as .Steve. The prefix prevents name collisions with real Java accounts, and the server keeps online-mode=true: Java players are still verified by Mojang, Bedrock players by Xbox Live through Floodgate. Do not disable online-mode for crossplay; it is neither needed nor safe, as covered in the server.properties guide.
Install on Paper (the common case)
- Download Geyser-Spigot and Floodgate-Spigot from the GeyserMC download page (always from geysermc.org; the project moves fast and mirrors go stale).
- Drop both jars into
plugins/, restart the server. - Geyser generates
plugins/Geyser-Spigot/config.yml. Two values matter on day one: underbedrock, theport(default 19132), and underremote, setauth-type: floodgateso Geyser hands authentication to Floodgate. - Restart again. The console logs "Started Geyser on 0.0.0.0:19132" when it is listening.
- From a Bedrock device: Servers tab, Add Server, your server's IP, port 19132. Consoles cannot add servers natively; players there use the well-known BedrockTogether app or a DNS workaround, which is a client-side concern you can link your players to.
On Fabric, the same flow with the Geyser-Fabric and Floodgate-Fabric mods in mods/ (alongside your performance mod stack; they coexist fine). Config lands in the config/ folder. A modded server still only translates vanilla-equivalent gameplay for Bedrock players: custom mod blocks and items do not exist on the Bedrock side, so Geyser on heavily modded servers suits servers where mods are server-side optimizations rather than new content.
Ports, firewalls, and rented servers
Java uses TCP (default 25565), Bedrock uses UDP 19132. Both must be reachable. Self-hosting: forward UDP 19132 in your router in addition to your existing TCP forward; cloud VPS: open it in the provider's firewall too.
On rented game hosting, you often get exactly one port number. The standard trick: in Geyser's config, set the Bedrock port to the same number as your Java port. TCP and UDP are separate namespaces, so the numbers do not clash, and most panels open both protocols on your allocated port. Many hosts also offer Geyser as a one-click install that configures this for you; it is worth checking the hosting comparison for which panels treat crossplay as a first-class feature rather than a support ticket.
Geyser adds CPU overhead per Bedrock player (every packet is translated) and a modest fixed memory cost. For sizing, treat each Bedrock player as roughly a Java player plus translation overhead; the RAM guidance applies unchanged, with CPU mattering a bit more than usual.
Whitelisting and managing Bedrock players
Floodgate players are not in Mojang's name database, so /whitelist add .Steve from the console fails to resolve offline: the vanilla whitelist looks up names via Mojang. The two reliable approaches: add the player while they are connected (the server then knows the UUID Floodgate derived from their Xbox identity), or temporarily disable the whitelist for their first join. The same applies to /op. Once added, they persist in whitelist.json and ops.json like anyone else; the mechanics are the same as in our whitelist and permissions guide.
Bans, kicks, and player-targeting commands all work normally once the player has joined at least once: from the server's perspective they are players with stable UUIDs.
What does not translate (set expectations)
Geyser's translation is mature, but Bedrock and Java are different games at the edges. The honest list for your players:
- Combat feel. Bedrock players get Java's combat rules (attack cooldown) since the server is Java. Bedrock-native players will notice the timing difference.
- Redstone behavior is Java's. The server simulates Java redstone, which is actually a gift for Bedrock players: every Java redstone guide applies, including quasi-connectivity, because the simulation is entirely server-side.
- Visual approximations. A few blocks, particles, and entity animations render as nearest-equivalents on Bedrock. Custom server resource packs need a separately converted Bedrock version.
- Forms and UI. Inventory edge cases (notably off-hand interactions) behave slightly differently; Geyser maps Bedrock's UI onto Java semantics and the seams occasionally show.
- Performance on the client. Low-end phones struggle with high view distances; Geyser caps some settings per client automatically.
None of these break shared survival. Mixed groups build, fight, and trade in the same world; the differences read as quirks, not blockers.
FAQ
Can Bedrock players join a Java server? Yes, through Geyser, which translates the Bedrock protocol to Java on your server. With Floodgate added, they sign in with their Xbox account and need no Java license.
What port does Geyser use? UDP 19132 by default, alongside your normal Java TCP port. On single-port hosting, set Geyser's Bedrock port to the same number as the Java port; TCP and UDP do not conflict.
Can Java players join a Bedrock (Realms/BDS) server instead? Not with Geyser; the translation runs one way, Bedrock clients into Java servers. For a mixed group, host Java and let Bedrock players connect through Geyser.
Do Bedrock players need to install anything? On phones and Windows, no: they add the server IP and port in the Servers tab. Consoles cannot enter arbitrary IPs natively and need the BedrockTogether app or a DNS workaround.
Why does my Bedrock friend get kicked with a whitelist error? Floodgate names (with the dot prefix) cannot be resolved through Mojang's API while the player is offline. Add them to the whitelist while they are connected, or disable the whitelist for their first join, then re-enable it.
Updated for Minecraft 1.21.4 on June 11, 2026. Geyser tracks Bedrock releases continuously; when either side ships a major update, this guide is re-checked and the log updated.




