Uploaded image for project: 'Minecraft: Java Edition'
  1. Minecraft: Java Edition
  2. MC-68487

Player heads of the same player always have the same skin texture, even if the saved texture data is different

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Resolved
    • Resolution: Fixed
    • 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
    • Confirmation Status:
      Confirmed
    • Category:
      Rendering, Textures and models
    • Mojang Priority:
      Normal

      Description

      The bug

      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.

      To reproduce

      1. Create a world.
      2. Obtain your player head ("Head A") with
        /give @p player_head{SkullOwner:<your player name>}
      3. Place Head A in the world
      4. Exit the game and change your skin.
      5. 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.
      6. Place the Head B in the world
      7. Exit the game, reopen, and re-enter the world
      8. 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.
      9. 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:

      1. Perform steps 1-4 above.
      2. Create a new world, create and place a head. Think of this as Skull C.
      3. Now, if you load the first world with Skull A, it will display the skin of Skull C.
      4. 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.

      Current Workaround

      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.

      Cuase

      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.

        Attachments

        1. 2020-04-06 22-33-23_Trim.mp4
          4.24 MB
        2. heads_created.png
          heads_created.png
          121 kB
        3. heads_payloadbased.png
          heads_payloadbased.png
          161 kB
        4. heads_reloggedin.png
          heads_reloggedin.png
          61 kB

          Issue Links

            Activity

              People

              Assignee:
              boq [Mojang] Bartosz Bok
              Reporter:
              aquosking Thomas Clinton
              Votes:
              16 Vote for this issue
              Watchers:
              14 Start watching this issue

                Dates

                Created:
                Updated:
                Resolved:
                CHK: