From ccd288d7fa38ab24f0b17bab0af64ba2581f01a2 Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Tue, 21 Mar 2023 00:04:29 +0000 Subject: [PATCH] Avoid repeated calls to getItemInHand() in drop item handler --- src/network/mcpe/handler/InGamePacketHandler.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/network/mcpe/handler/InGamePacketHandler.php b/src/network/mcpe/handler/InGamePacketHandler.php index c2fa13d46..6dbeaa8f4 100644 --- a/src/network/mcpe/handler/InGamePacketHandler.php +++ b/src/network/mcpe/handler/InGamePacketHandler.php @@ -398,18 +398,19 @@ class InGamePacketHandler extends PacketHandler{ } $inventory = $this->player->getInventory(); - $heldItemStack = TypeConverter::getInstance()->coreItemStackToNet($inventory->getItemInHand()); + $heldItem = $inventory->getItemInHand(); + $heldItemStack = TypeConverter::getInstance()->coreItemStackToNet($heldItem); //because the client doesn't tell us the expected itemstack ID, we have to deep-compare our known //itemstack info with the one the client sent. This is costly, but we don't have any other option :( if($heldItemStack->getCount() < $droppedItemStack->getCount() || !$heldItemStack->equalsWithoutCount($droppedItemStack)){ return false; } - $newHeldItem = $inventory->getItemInHand(); - $droppedItem = $newHeldItem->pop($droppedItemStack->getCount()); + //this modifies $heldItem + $droppedItem = $heldItem->pop($droppedItemStack->getCount()); $builder = new TransactionBuilder(); - $builder->getInventory($inventory)->setItem($inventory->getHeldItemIndex(), $newHeldItem); + $builder->getInventory($inventory)->setItem($inventory->getHeldItemIndex(), $heldItem); $builder->addAction(new DropItemAction($droppedItem)); $transaction = new InventoryTransaction($this->player, $builder->generateActions());