diff --git a/src/network/mcpe/protocol/types/LegacySkinAdapter.php b/src/network/mcpe/protocol/types/LegacySkinAdapter.php index 676868b3e..639e1adcf 100644 --- a/src/network/mcpe/protocol/types/LegacySkinAdapter.php +++ b/src/network/mcpe/protocol/types/LegacySkinAdapter.php @@ -31,10 +31,8 @@ use function is_string; class LegacySkinAdapter implements SkinAdapter{ public function toSkinData(Skin $skin) : SkinData{ - $capeData = new SkinImage(32, 64, $skin->getCapeData()); - if($skin->getCapeData() === ""){ - $capeData = new SkinImage(0, 0, $skin->getCapeData()); - } + $capeData = $skin->getCapeData(); + $capeImage = $capeData === "" ? new SkinImage(0, 0, "") : new SkinImage(32, 64, $capeData); $geometryName = $skin->getGeometryName(); if($geometryName === ""){ $geometryName = "geometry.humanoid.custom"; @@ -43,13 +41,18 @@ class LegacySkinAdapter implements SkinAdapter{ $skin->getSkinId(), json_encode(["geometry" => ["default" => $geometryName]]), SkinImage::fromLegacy($skin->getSkinData()), [], - $capeData, + $capeImage, $skin->getGeometryData() ); } public function fromSkinData(SkinData $data) : Skin{ - $capeData = $data->getCapeImage()->getData(); + if($data->isPersona()){ + return new Skin("Standard_Custom", str_repeat(random_bytes(3) . "\xff", 2048)); + } + + $capeData = $data->isPersonaCapeOnClassic() ? "" : $data->getCapeImage()->getData(); + $geometryName = ""; $resourcePatch = json_decode($data->getResourcePatch(), true); if(is_array($resourcePatch["geometry"]) && is_string($resourcePatch["geometry"]["default"])){ @@ -57,11 +60,7 @@ class LegacySkinAdapter implements SkinAdapter{ }else{ //TODO: Kick for invalid skin } - if($data->isPersona()){ - return new Skin("Standard_Custom", str_repeat(random_bytes(3) . "\xff", 2048)); - }elseif($data->isPersonaCapeOnClassic()){ - $capeData = ""; - } + return new Skin($data->getSkinId(), $data->getSkinImage()->getData(), $capeData, $geometryName, $data->getGeometryData()); } }