
You spent time picking your skin in the Bedrock Dressing Room. It looks perfect in singleplayer. You join a crossplay server running Geyser and suddenly you are Default Steve. Or Default Alex. Your skin is gone.
Other Bedrock players see the same thing. Java players see their skins fine. It is only Bedrock players on Geyser servers that lose their custom appearance.
Why This Happens
Java Edition and Bedrock Edition handle skins completely differently.
Java Edition stores skins on Mojang's servers. When a Java player joins any server, the server fetches the skin texture from Mojang's API and sends it to every other player. The skin data is always available because it lives on a central server.
Bedrock Edition stores custom skins locally on the player's device. When a Bedrock player joins a server, the client sends the skin data directly. The server then distributes it to other players.
Geyser sits between these two systems. It translates Bedrock network packets into Java packets and vice versa. The problem is: the Java server does not natively understand Bedrock skin data. When a Bedrock player connects through Geyser, the server sees an incoming player but has no Mojang skin entry for them. It falls back to the default Steve or Alex skin.
Some Geyser versions attempt to upload the Bedrock skin to a third-party skin server and create a Java-compatible skin profile, but this depends on external services being available and the skin format being compatible. Custom geometry skins (like skins with 3D hats or extra limbs) are not supported at all because Java Edition does not support custom player model geometry.
Fix 1: Use a Skin Restorer Plugin
Install a server-side plugin that forces skin assignments for all players, including Bedrock players connecting through Geyser.
Recommended: GeyserSkinManager or SkinsRestorer
SkinsRestorer is the most popular option. Install it on the server:
- Download from skinsrestorer.net
- Place the .jar in your
plugins/folder - Restart the server
- Bedrock players can set their skin using:
/skin set <URL>where the URL points to a valid Java skin texture
GeyserSkinManager is specifically built for Geyser servers. It intercepts the Bedrock skin data during connection and converts it into a Java-compatible format automatically. No player commands needed.
Download from the GeyserMC plugin list and place it in your plugins folder.
Fix 2: Let Floodgate Upload the Skin
If you run Floodgate alongside Geyser (you should), Floodgate takes care of Bedrock skins itself. Per the Floodgate docs, Bedrock players' skins should be visible to Java players on servers with Floodgate 2.0 installed. The skin goes through GeyserMC's Global API, which converts it to a Java skin and uploads it to Mojang using MineSkin.
There is no config switch to turn this on. If Bedrock players still show up as Steve or Alex:
- Check that
auth-typein Geyser's config is set tofloodgate, so Bedrock players actually join through Floodgate - Give it time and rejoin. The Floodgate docs say the most likely cause is a long upload queue, which can take a while to work through
- Update Geyser and Floodgate to their latest builds
You will find guides that tell you to set send-floodgate-data to true for skins. That setting only exists in the Floodgate config on a BungeeCord or Velocity proxy, where it passes Bedrock player data on to the backend servers. On a single server it is not in the config and does nothing for skins.
Fix 3: Manual Skin Assignment for Persistent Issues
If a specific player's skin refuses to work no matter what:
- Have the player upload their skin texture to a site like mineskin.org
- This gives you a Java-compatible skin URL and signature
- Use SkinsRestorer to assign it:
/skin set <player> <mineskin-url>
This bypasses all Bedrock/Java translation issues entirely because the skin is now stored as a standard Java skin profile on the server.
What Does Not Work
- Changing the skin in the Bedrock Dressing Room. The server does not fetch skins from the Dressing Room. It receives whatever the client sends during connection, and Geyser intercepts that data
- Custom geometry skins (3D models). Java Edition does not support non-standard player models. If your Bedrock skin uses a custom geometry file, it will always fall back to Steve/Alex on crossplay servers. Use a standard 64x64 pixel skin instead
- Marketplace skins from the Minecraft Store. These use DRM-protected formats tied to the Bedrock Marketplace. They cannot be extracted or converted to Java format. Use a classic skin file instead
Quick Reference
| Skin Type | Works on Geyser? | Fix |
|---|---|---|
| Standard 64x64 custom skin | Sometimes | Floodgate skin upload or GeyserSkinManager |
| Custom geometry skin (3D) | No | Switch to standard 64x64 format |
| Marketplace DRM skin | No | Use a classic custom skin instead |
| Java Edition skin | Yes, always | No fix needed |
Crossplay servers add a lot of value to your community because Bedrock players on Xbox, PlayStation, Switch, and mobile get to play with Java friends. The skin issue is annoying but solvable with the right plugin stack.
On Space-Node you install Geyser and Floodgate yourself, the same way as on any Paper server. If Geyser needs its own UDP port for Bedrock players, you create that port in the panel at no extra cost (three port allocations are included, and up to five on request). Our Geyser and Floodgate crossplay guide walks through the whole setup, and the Minecraft plans are here.