
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: Use the Floodgate Auth Skin Forwarding
If you run Floodgate alongside Geyser (you should), Floodgate has built-in skin forwarding support.
- Open
plugins/floodgate/config.yml - Look for the
send-floodgate-datasetting and make sure it istrue - Check that
username-prefixis set (default is a dot:.)
Floodgate handles the skin differently from raw Geyser connections. It creates a proper skin profile during the authentication step, which gives the server valid skin data before the player fully joins.
If Floodgate skin forwarding still shows default skins, update both Geyser and Floodgate to the latest development builds. The skin handling code gets improved frequently.
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 | GeyserSkinManager or Floodgate forwarding | | 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 servers, Geyser and Floodgate come pre-configured on request. Check the plans here.
