Affects Version/s: Minecraft 14w34d, Minecraft 1.8-pre1, Minecraft 1.8, Minecraft 1.8.1, Minecraft 1.8.2-pre1, Minecraft 1.8.4, Minecraft 15w35b, Minecraft 1.8.9, Minecraft 16w04a, Minecraft 1.10.2, Minecraft 16w40a, Minecraft 1.11.2, Minecraft 17w06a, Minecraft 1.13, Minecraft 1.13.1, Minecraft 19w12b, Minecraft 1.14, Minecraft 1.14.3 Pre-Release 3, 20w11a, 20w14a
Fix Version/s: 20w27a
Category:Rendering, Textures and models
When you get a player head, it's supposed to retain the skin that you had when it was created (see this comment by [Mojang] Nathan Adams in
MC-52806). However it fails to retain the skin if there are multiple heads for the same player loaded into the world.
Therefore, a single player can only have one player head. Every head linked to their name that they find afterwards will continue using that skin until they exit the game, regardless of what skin the head should display.
This is a visual / caching bug only, the skin texture is correctly saved in the NBT data.
- Create a world.
- Obtain your player head ("Head A") with
- Place Head A in the world
- Exit the game and change your skin.
- Re-enter the world and give yourself another player head using the same command. This head is Head B. You may notice that Head B has the old skin.
- Place the Head B in the world
- Exit the game, reopen, and re-enter the world
- Both Head A and Head B will now use the same skin. Depending on which skull is loaded first (this seems to be related to coordinates), they'll either have your old or your new skin.
- If both heads have your new skin, destroy Head B, remove it from your inventory, and relog once more. Then, Head A will once again display your old skin correctly.
This bug also results in issues between worlds:
- Perform steps 1-4 above.
- Create a new world, create and place a head. Think of this as Skull C.
- Now, if you load the first world with Skull A, it will display the skin of Skull C.
- If you close and reopen the game and load Skull A's world before loading the Skull C's world, then Skull C will display the skin of Skull A.
I should note more clearly what is happening with the in-between worlds issue. The skull that loads first will be the only one displayed on your player skulls until you fully exit the game. Once you re enter the game after fully closing it, the first of your player skulls that you load next will then be the only one.
Using the /data command, you can change the Name or UUID of the owner to be something different than your (or any other player's) Name/UUID and also be destinct between all the player heads you want to use. This will trick the game into the thinking the head belongs to another player who doesn't yet have a player head so that it properly updates to the skin that it was assigned.
According to Aikar on
MC-68487, the cache for skins uses GameProfile.equals for comparison, which only checks for name and UUID. As such, distinct names or UUIDs allow separate skins, but the same name and UUID means different skins cannot be used.