Apparently the Minecraft client separates the skin file into squared chunks surrounding 'jacket layer' (aka helm/hat layer, 2nd layer, ...) parts:
[media]Looking at the 'jacket map' above, if any of the squared areas in the skin file is fully opaque, then the underlying jacket part will not show up in game. As soon as there is at least one transparent pixel in a square, that jacket part will show up in the game.
This behavior is very confusing, not intuitive and AFAIK not officially documented.
The expected behavior would be rendering the jacket layer even if a part is fully opaque.
Unless you're okay with a breaking change or re-processing all uploaded skins, you would still need to check for at least one transparent pixel in the whole skin file (to make sure the designer was 'aware' of the jacket layer and to support legacy skins). Otherwise some skins, including Notch's, would result in a fully opaque (not intended) jacket layer (or at least hat layer for < 1.8 skins)
Linked issues
is duplicated by 3
Attachments
Comments 6
@unknown that's MC-101150
The issue isn't correctly fixed.
I told you 😛
Otherwise some skins, including Notch's, would result in a fully opaque (not intended) jacket layer (or at least hat layer for < 1.8 skins)
This is how Notch looks like in the game now:
[media]This can't possibly be intended? Please re-open.
Presumably you meant opaque here, rather than transparent? I mean, it's true that if a section of the second layer is completely transparent, then it won't show up. Because it's transparent. 😉
It presumably checks for transparency as a kind of backwards-compatibility measure, so that files made when that area was unused don't surprise players by displaying it unexpectedly. However, that doesn't cover all cases, and apparently produces unexpected behavior of its own. Since it's possible to disable specific areas of the second layer in-game, and easy to edit the skin to remove unwanted pieces, the transparency check seems like a solution in search of a problem. Figuring out that a piece isn't displaying because it doesn't have a transparent pixel seems much harder for anyone to track down.