From 926f68d8c5d0901337c6e93c4ef055a29a179893 Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Sat, 6 May 2023 17:53:24 +0100 Subject: [PATCH] Move SkinAdapter under TypeConverter, remove SkinAdapterSingleton this is legacy cruft from PM3, which didn't have TypeConverter or SingletonTrait. --- src/entity/Human.php | 8 ++-- src/network/mcpe/NetworkSession.php | 5 +-- .../mcpe/convert/SkinAdapterSingleton.php | 42 ------------------- src/network/mcpe/convert/TypeConverter.php | 10 +++++ .../mcpe/handler/InGamePacketHandler.php | 3 +- .../mcpe/handler/LoginPacketHandler.php | 3 +- 6 files changed, 18 insertions(+), 53 deletions(-) delete mode 100644 src/network/mcpe/convert/SkinAdapterSingleton.php diff --git a/src/entity/Human.php b/src/entity/Human.php index 7733e995f..ae1aa2464 100644 --- a/src/entity/Human.php +++ b/src/entity/Human.php @@ -46,7 +46,7 @@ use pocketmine\nbt\tag\CompoundTag; use pocketmine\nbt\tag\IntTag; use pocketmine\nbt\tag\ListTag; use pocketmine\nbt\tag\StringTag; -use pocketmine\network\mcpe\convert\SkinAdapterSingleton; +use pocketmine\network\mcpe\convert\TypeConverter; use pocketmine\network\mcpe\EntityEventBroadcaster; use pocketmine\network\mcpe\NetworkBroadcastUtils; use pocketmine\network\mcpe\protocol\AddPlayerPacket; @@ -166,7 +166,7 @@ class Human extends Living implements ProjectileSource, InventoryHolder{ */ public function sendSkin(?array $targets = null) : void{ NetworkBroadcastUtils::broadcastPackets($targets ?? $this->hasSpawned, [ - PlayerSkinPacket::create($this->getUniqueId(), "", "", SkinAdapterSingleton::get()->toSkinData($this->skin)) + PlayerSkinPacket::create($this->getUniqueId(), "", "", TypeConverter::getInstance()->getSkinAdapter()->toSkinData($this->skin)) ]); } @@ -469,11 +469,11 @@ class Human extends Living implements ProjectileSource, InventoryHolder{ protected function sendSpawnPacket(Player $player) : void{ $networkSession = $player->getNetworkSession(); + $typeConverter = $networkSession->getTypeConverter(); if(!($this instanceof Player)){ - $networkSession->sendDataPacket(PlayerListPacket::add([PlayerListEntry::createAdditionEntry($this->uuid, $this->id, $this->getName(), SkinAdapterSingleton::get()->toSkinData($this->skin))])); + $networkSession->sendDataPacket(PlayerListPacket::add([PlayerListEntry::createAdditionEntry($this->uuid, $this->id, $this->getName(), $typeConverter->getSkinAdapter()->toSkinData($this->skin))])); } - $typeConverter = $networkSession->getTypeConverter(); $networkSession->sendDataPacket(AddPlayerPacket::create( $this->getUniqueId(), $this->getName(), diff --git a/src/network/mcpe/NetworkSession.php b/src/network/mcpe/NetworkSession.php index 60b0efc66..6ca258bf3 100644 --- a/src/network/mcpe/NetworkSession.php +++ b/src/network/mcpe/NetworkSession.php @@ -38,7 +38,6 @@ use pocketmine\network\mcpe\cache\ChunkCache; use pocketmine\network\mcpe\compression\CompressBatchPromise; use pocketmine\network\mcpe\compression\Compressor; use pocketmine\network\mcpe\compression\DecompressionException; -use pocketmine\network\mcpe\convert\SkinAdapterSingleton; use pocketmine\network\mcpe\convert\TypeConverter; use pocketmine\network\mcpe\encryption\DecryptionException; use pocketmine\network\mcpe\encryption\EncryptionContext; @@ -1108,12 +1107,12 @@ class NetworkSession{ */ public function syncPlayerList(array $players) : void{ $this->sendDataPacket(PlayerListPacket::add(array_map(function(Player $player) : PlayerListEntry{ - return PlayerListEntry::createAdditionEntry($player->getUniqueId(), $player->getId(), $player->getDisplayName(), SkinAdapterSingleton::get()->toSkinData($player->getSkin()), $player->getXuid()); + return PlayerListEntry::createAdditionEntry($player->getUniqueId(), $player->getId(), $player->getDisplayName(), TypeConverter::getInstance()->getSkinAdapter()->toSkinData($player->getSkin()), $player->getXuid()); }, $players))); } public function onPlayerAdded(Player $p) : void{ - $this->sendDataPacket(PlayerListPacket::add([PlayerListEntry::createAdditionEntry($p->getUniqueId(), $p->getId(), $p->getDisplayName(), SkinAdapterSingleton::get()->toSkinData($p->getSkin()), $p->getXuid())])); + $this->sendDataPacket(PlayerListPacket::add([PlayerListEntry::createAdditionEntry($p->getUniqueId(), $p->getId(), $p->getDisplayName(), TypeConverter::getInstance()->getSkinAdapter()->toSkinData($p->getSkin()), $p->getXuid())])); } public function onPlayerRemoved(Player $p) : void{ diff --git a/src/network/mcpe/convert/SkinAdapterSingleton.php b/src/network/mcpe/convert/SkinAdapterSingleton.php deleted file mode 100644 index db2f7903a..000000000 --- a/src/network/mcpe/convert/SkinAdapterSingleton.php +++ /dev/null @@ -1,42 +0,0 @@ -blockItemIdMap = BlockItemIdMap::getInstance(); @@ -83,6 +85,8 @@ class TypeConverter{ GlobalItemDataHandlers::getSerializer(), GlobalItemDataHandlers::getDeserializer() ); + + $this->skinAdapter = new LegacySkinAdapter(); } public function getBlockTranslator() : BlockTranslator{ return $this->blockTranslator; } @@ -91,6 +95,12 @@ class TypeConverter{ public function getItemTranslator() : ItemTranslator{ return $this->itemTranslator; } + public function getSkinAdapter() : SkinAdapter{ return $this->skinAdapter; } + + public function setSkinAdapter(SkinAdapter $skinAdapter) : void{ + $this->skinAdapter = $skinAdapter; + } + /** * Returns a client-friendly gamemode of the specified real gamemode * This function takes care of handling gamemodes known to MCPE (as of 1.1.0.3, that includes Survival, Creative and Adventure) diff --git a/src/network/mcpe/handler/InGamePacketHandler.php b/src/network/mcpe/handler/InGamePacketHandler.php index d73226697..f49a9b817 100644 --- a/src/network/mcpe/handler/InGamePacketHandler.php +++ b/src/network/mcpe/handler/InGamePacketHandler.php @@ -45,7 +45,6 @@ use pocketmine\math\Facing; use pocketmine\math\Vector3; use pocketmine\nbt\tag\CompoundTag; use pocketmine\nbt\tag\StringTag; -use pocketmine\network\mcpe\convert\SkinAdapterSingleton; use pocketmine\network\mcpe\InventoryManager; use pocketmine\network\mcpe\NetworkSession; use pocketmine\network\mcpe\protocol\ActorEventPacket; @@ -837,7 +836,7 @@ class InGamePacketHandler extends PacketHandler{ $this->session->getLogger()->debug("Processing skin change request"); try{ - $skin = SkinAdapterSingleton::get()->fromSkinData($packet->skin); + $skin = $this->session->getTypeConverter()->getSkinAdapter()->fromSkinData($packet->skin); }catch(InvalidSkinException $e){ throw PacketHandlingException::wrap($e, "Invalid skin in PlayerSkinPacket"); } diff --git a/src/network/mcpe/handler/LoginPacketHandler.php b/src/network/mcpe/handler/LoginPacketHandler.php index db9602369..a8c3d4d62 100644 --- a/src/network/mcpe/handler/LoginPacketHandler.php +++ b/src/network/mcpe/handler/LoginPacketHandler.php @@ -28,7 +28,6 @@ use pocketmine\event\player\PlayerPreLoginEvent; use pocketmine\lang\KnownTranslationFactory; use pocketmine\lang\Translatable; use pocketmine\network\mcpe\auth\ProcessLoginTask; -use pocketmine\network\mcpe\convert\SkinAdapterSingleton; use pocketmine\network\mcpe\JwtException; use pocketmine\network\mcpe\JwtUtils; use pocketmine\network\mcpe\NetworkSession; @@ -72,7 +71,7 @@ class LoginPacketHandler extends PacketHandler{ $clientData = $this->parseClientData($packet->clientDataJwt); try{ - $skin = SkinAdapterSingleton::get()->fromSkinData(ClientDataToSkinDataHelper::fromClientData($clientData)); + $skin = $this->session->getTypeConverter()->getSkinAdapter()->fromSkinData(ClientDataToSkinDataHelper::fromClientData($clientData)); }catch(\InvalidArgumentException | InvalidSkinException $e){ $this->session->getLogger()->debug("Invalid skin: " . $e->getMessage()); $this->session->disconnectWithError(KnownTranslationFactory::disconnectionScreen_invalidSkin());