samolego/FabricTailor

[BUG] Skin reset after reconnect

Closed this issue · 6 comments

Describe the bug

After using the /skin clear command, the next time the player logs in, they still have their previous skin set. Sometimes it does work, but often it is necessary to run /skin clear multiple times before the player gets their normal skin back.

Note that within the current game session, the skin clears immediately, it's only when re-connecting that the previously set skin often comes back.

Using:
fabrictailor-1.7.1.jar
With 1.17.1 game

Other installed mods:
fabric-api-0.46.1+1.17.jar
FabricProxy-Lite-1.1.5.jar
FabricTPA-3.0.1.jar
lithium-fabric-mc1.17.1-0.7.5.jar
phosphor-fabric-mc1.17.x-0.8.0.jar

Which launcher are you using?

It happens with various clients: Vanilla (Mojang launcher), Fabric-modded client (Mojang launcher), Lunar client.

Looks like a server-side thing: the /skin clear command seems not to clear the skin override from the stored player data, even though it does clear it in memory for the current session/connection.

The /skin clear resets FabricTailor skin data. If player has skin set, it will be refetched after relog. That's intended behaviour actually.

To clarify what I am seeing:

  • When /skin clear is used in game, the player's skin switches to their usual skin (i.e. the one set in the Mojang launcher)
  • But when the player disconnects and reconnects, the skin is back to what was previously set with /skin set.
  • The only way to reliably set the player's skin to their usual one is using the command: /skin set player ownName
  • But then the skin is locked to this skin, rather than following any skin changes made in the Mojang launcher.

Is this really the intended behaviour of /skin clear? Surely it should clear any skin override, so the player skin follows the one set in the Mojang launcher?

I made a video showing what I mean:
https://youtu.be/C2Dr-TdPBk4

The initial server "minigames" is a spigot server and there you see my usual skin.
When I switch to server "piglincraft" you can see that FabricTailor is applying a red Among Us skin.
After /skin clear it resets to my usual skin.
But after disconnecting and reconnecting, it's back to the Among Us skin.

For convenience I'm disconnecting and reconnecting from the Fabric server using the /server command (the 2 different servers are running behind a proxy), but it's the same if I disconnect completely (from the Fabric server point of view it's no different).

Further info: if I look at the NBT playerdata, I can see that the data is not being cleared after the command /skin clear has been used:

image