Skip to content

A kit wearer sees their own login skin, not the kit's, on their own avatar #1056

Description

@andrewgazelka

Symptom

A player who puts on a kit sees the kit's mob skin on every other player, but on their own avatar they keep the skin they logged in with (a premium player's real account skin, or the default for an offline/empty profile). Reported from a real client as "I see my own skin, not the custom kit skin."

Not on the wire

Captured against a running smash server with the new smash-skin-e2e gate (PR #1055). For any other player the wire is correct: the tab-list profile carries the committed textures value with its Mojang signature, and the entity metadata carries a 0x7F skin-overlay mask (hat included). No Respawn is sent. The wearer's own tab-list entry even carries the custom skin.

So this is not a server encoding bug; it is the 26.2 client caching LocalPlayer's skin. AbstractClientPlayer builds its skin once from the profile it had at spawn and does not rebuild it from a tab-list remove+add for the local player. The kit is chosen in the hub after join, so LocalPlayer was already built with the login skin, and only a rebuild (Respawn) would refresh it.

Already understood in-tree

crates/hyperion/src/egress/player_join/roster.rs documents this exact tradeoff and deliberately leaves the wearer's own view unfixed, because the only rebuild path found is a Respawn, which discards the wearer's world ("Loading terrain..." forever).

Options (needs a decision)

  1. A targeted Respawn for the wearer, restreaming chunks + re-offering entity subscriptions (expensive; the reason roster.rs avoided it).
  2. Assign the kit skin before the wearer enters the world so LocalPlayer is built with it - only works for a fixed/default kit, not a mid-session change.
  3. Confirm whether 26.2 has any LocalPlayer skin-refresh path lighter than a full Respawn (requires the client decompile).

Regression coverage

The wire half (other players get the signed skin + hat bits) is now guarded by tools/skin-check.py / smash-skin-e2e (PR #1055). This issue is only about the wearer's own-avatar view, which a scripted client cannot render or assert.

Filed by an automated agent from a first-hand packet capture; the fix is deliberately not attempted here pending a decision on the options above.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions