From c19c42a934189e08be2ca6a756854bae34d61550 Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Tue, 25 Jun 2019 16:30:07 +0100 Subject: [PATCH] PlayerBlockPickEvent: pre-cancel the event when picking would fail in survival --- src/pocketmine/player/Player.php | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/pocketmine/player/Player.php b/src/pocketmine/player/Player.php index 8a8ff3ff9..8cf322183 100644 --- a/src/pocketmine/player/Player.php +++ b/src/pocketmine/player/Player.php @@ -1769,17 +1769,20 @@ class Player extends Human implements CommandSender, ChunkLoader, ChunkListener, $item = $block->getPickedItem($addTileNBT); $ev = new PlayerBlockPickEvent($this, $block, $item); + $existingSlot = $this->inventory->first($item); + if($existingSlot === -1 and $this->hasFiniteResources()){ + $ev->setCancelled(); + } $ev->call(); if(!$ev->isCancelled()){ - $existing = $this->inventory->first($item); - if($existing !== -1){ - if($existing < $this->inventory->getHotbarSize()){ - $this->inventory->setHeldItemIndex($existing); + if($existingSlot !== -1){ + if($existingSlot < $this->inventory->getHotbarSize()){ + $this->inventory->setHeldItemIndex($existingSlot); }else{ - $this->inventory->swap($this->inventory->getHeldItemIndex(), $existing); + $this->inventory->swap($this->inventory->getHeldItemIndex(), $existingSlot); } - }elseif(!$this->hasFiniteResources()){ //TODO: plugins won't know this isn't going to execute + }else{ $firstEmpty = $this->inventory->firstEmpty(); if($firstEmpty === -1){ //full inventory $this->inventory->setItemInHand($item);