Why Bedrock Skins Break on Crossplay Servers and How to Fix It

Published on

Your custom Bedrock skin looks perfect in singleplayer. On a Geyser crossplay server, you show up as default Steve or Alex. Here is why this happens and three ways to fix it.

Written by Jochem Wassenaar – CEO of Space-Node – 15+ years combined experience in game server hosting, VPS infrastructure, and 24/7 streaming solutions. Read author bio →

bedrock skins broken geyser crossplay fix

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:

  1. Download from skinsrestorer.net
  2. Place the .jar in your plugins/ folder
  3. Restart the server
  4. 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.

  1. Open plugins/floodgate/config.yml
  2. Look for the send-floodgate-data setting and make sure it is true
  3. Check that username-prefix is 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:

  1. Have the player upload their skin texture to a site like mineskin.org
  2. This gives you a Java-compatible skin URL and signature
  3. 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.

Jochem Wassenaar

About the Author

Jochem Wassenaar – CEO of Space-Node – Experts in game server hosting, VPS infrastructure, and 24/7 streaming solutions with 15+ years combined experience.

Since 2023
500+ servers hosted
4.8/5 avg rating

Our team specializes in Minecraft, FiveM, Rust, and 24/7 streaming infrastructure, operating enterprise-grade AMD Ryzen 9 hardware in Netherlands datacenters. We maintain GDPR compliance and ISO 27001-aligned security standards.

View Space-Node's full team bio and credentials →

Launch Your VPS Today

Get started with professional VPS hosting powered by enterprise hardware. Instant deployment and 24/7 support included.

Why Bedrock Skins Break on Crossplay Servers and How to Fix It