From c8d0cb315b9749e0d12194a18dc8cfd7d7a1360e Mon Sep 17 00:00:00 2001 From: Stephen Date: Wed, 20 Nov 2019 21:52:49 -0500 Subject: [PATCH] Move persona skin hack to legacyskinadapter --- src/pocketmine/Player.php | 17 ++++------------- .../mcpe/protocol/types/LegacySkinAdapter.php | 6 +++++- 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/src/pocketmine/Player.php b/src/pocketmine/Player.php index c45578fe5..154c7b5e2 100644 --- a/src/pocketmine/Player.php +++ b/src/pocketmine/Player.php @@ -146,6 +146,7 @@ use pocketmine\network\mcpe\protocol\types\CommandParameter; use pocketmine\network\mcpe\protocol\types\ContainerIds; use pocketmine\network\mcpe\protocol\types\DimensionIds; use pocketmine\network\mcpe\protocol\types\PlayerPermissions; +use pocketmine\network\mcpe\protocol\types\SkinAdapterSingleton; use pocketmine\network\mcpe\protocol\types\SkinAnimation; use pocketmine\network\mcpe\protocol\types\SkinData; use pocketmine\network\mcpe\protocol\types\SkinImage; @@ -1922,7 +1923,8 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{ foreach($packet->clientData["AnimatedImageData"] as $animation){ $animations[] = new SkinAnimation(new SkinImage($animation["ImageHeight"], $animation["ImageWidth"], $animation["Image"]), $animation["Type"], $animation["Frames"]); } - new SkinData( + + $skinData = new SkinData( $packet->clientData["SkinId"], base64_decode($packet->clientData["SkinResourcePatch"] ?? ""), new SkinImage($packet->clientData["SkinImageHeight"], $packet->clientData["SkinImageWidth"], base64_decode($packet->clientData["SkinData"])), @@ -1936,18 +1938,7 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{ $packet->clientData["CapeId"] ?? "" ); - $skinData = base64_decode($packet->clientData["SkinData"]); - if((bool) $packet->clientData["PersonaSkin"]){ - $skinData = str_repeat(random_bytes(3) . "\xff", 2048); - } - - $skin = new Skin( - $packet->clientData["SkinId"], - $skinData, - base64_decode($packet->clientData["CapeData"] ?? ""), - base64_decode($packet->clientData["SkinResourcePatch"] ?? ""), - base64_decode($packet->clientData["SkinGeometryData"] ?? "") - ); + $skin = SkinAdapterSingleton::get()->fromSkinData($skinData); if(!$skin->isValid()){ $this->close("", "disconnectionScreen.invalidSkin"); diff --git a/src/pocketmine/network/mcpe/protocol/types/LegacySkinAdapter.php b/src/pocketmine/network/mcpe/protocol/types/LegacySkinAdapter.php index 8157a8510..8f57dfdd5 100644 --- a/src/pocketmine/network/mcpe/protocol/types/LegacySkinAdapter.php +++ b/src/pocketmine/network/mcpe/protocol/types/LegacySkinAdapter.php @@ -32,6 +32,10 @@ class LegacySkinAdapter implements SkinAdapter{ } public function fromSkinData(SkinData $data) : Skin{ - return new Skin($data->skinId, $data->skinImage->getData(), $data->capeImage->getData(), $data->resourcePatch, $data->geometryData); + $skinData = $data->skinImage->getData(); + if($data->persona){ + $skinData = str_repeat(random_bytes(3) . "\xff", 2048); + } + return new Skin($data->skinId, $skinData, $data->capeImage->getData(), $data->resourcePatch, $data->geometryData); } } \ No newline at end of file