From 475888b0318b3eaca3c749563c338b2d07e27e93 Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Wed, 8 Feb 2023 20:16:41 +0000 Subject: [PATCH] InGamePacketHandler: do not process repeated skin change requests for the same full skin ID this fixes a feedback loop with persona skins in 1.19.60. --- src/network/mcpe/handler/InGamePacketHandler.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/network/mcpe/handler/InGamePacketHandler.php b/src/network/mcpe/handler/InGamePacketHandler.php index f93b4da5a..40e77f410 100644 --- a/src/network/mcpe/handler/InGamePacketHandler.php +++ b/src/network/mcpe/handler/InGamePacketHandler.php @@ -149,6 +149,8 @@ class InGamePacketHandler extends PacketHandler{ /** @var bool */ public $forceMoveSync = false; + protected ?string $lastRequestedFullSkinId = null; + public function __construct( private Player $player, private NetworkSession $session, @@ -745,6 +747,14 @@ class InGamePacketHandler extends PacketHandler{ } public function handlePlayerSkin(PlayerSkinPacket $packet) : bool{ + if($packet->skin->getFullSkinId() === $this->lastRequestedFullSkinId){ + //TODO: HACK! In 1.19.60, the client sends its skin back to us if we sent it a skin different from the one + //it's using. We need to prevent this from causing a feedback loop. + $this->session->getLogger()->debug("Refused duplicate skin change request"); + return true; + } + $this->lastRequestedFullSkinId = $packet->skin->getFullSkinId(); + $this->session->getLogger()->debug("Processing skin change request"); try{ $skin = SkinAdapterSingleton::get()->fromSkinData($packet->skin);