mojira.dev
MC-91214

Client caches skin purely by UUID

If a world contains 2 player skulls, each of the same players UUID, but each with a different texture ID (Obtained at 2 different time periods), the client will show alternating skin textures on the skulls.

The root issue lies that the skin cache in the client checks by GameProfile which the equals method only checks by name and uuid.

So when the client looks at a skull after the 15s cache expires, it will get one of the skins, cache it, and use it for both.

The client should show the correct skin for each skull, and simplest way to do that is to make the texture id also part of the cache key.

Linked issues

Attachments

Comments 8

Why is the UUID the same for both skull?

Because they belong to the same player (get your skull, change skin, get another skull of yours)

ok, just clarifying

Is this still an issue in the latest snapshot 16w44a? If so please update the affected versions.

This is an automated comment on any open or reopened issue with out-of-date affected versions.

Is this still an issue in the most recent versions (currently that is 1.11) of Minecraft? If so, please update the affected versions and help us keeping this ticket updated from time to time. If you are the owner/reporter of this ticket, you can modify the affected version(s) yourself.

Confirmed yes still an issue on 1.13.

 

I've fixed this bug in Paper by randomizing the UUID's a bit before sending to the client. Client really needs to cache based on Textures payload instead of UUID.

Attached screenshots demonstrating problem.

On creating 2nd skull in "created" screenshot, witness both the same.

Reopen client and witness "relogged" screenshot, where textures switch to the other skull.

"payload based" is with my server side fix to send different UUID's to the client.

Aikar

(Unassigned)

Plausible

Minecraft 1.8.8, Minecraft 1.13

Retrieved