diff --git a/src/pocketmine/inventory/AnvilInventory.php b/src/pocketmine/inventory/AnvilInventory.php index 421d34f5b..bec6c6dc1 100644 --- a/src/pocketmine/inventory/AnvilInventory.php +++ b/src/pocketmine/inventory/AnvilInventory.php @@ -59,9 +59,6 @@ class AnvilInventory extends ContainerInventory{ public function onClose(Player $who) : void{ parent::onClose($who); - for($i = 0; $i < 2; ++$i){ - $this->getHolder()->getLevel()->dropItem($this->getHolder()->add(0.5, 0.5, 0.5), $this->getItem($i)); - $this->clear($i); - } + $this->dropContents($this->holder->getLevel(), $this->holder->add(0.5, 0.5, 0.5)); } } \ No newline at end of file diff --git a/src/pocketmine/inventory/BaseInventory.php b/src/pocketmine/inventory/BaseInventory.php index c9190a8ff..4c96ef30e 100644 --- a/src/pocketmine/inventory/BaseInventory.php +++ b/src/pocketmine/inventory/BaseInventory.php @@ -26,6 +26,8 @@ namespace pocketmine\inventory; use pocketmine\event\inventory\InventoryOpenEvent; use pocketmine\item\Item; use pocketmine\item\ItemFactory; +use pocketmine\level\Level; +use pocketmine\math\Vector3; use pocketmine\network\mcpe\protocol\InventoryContentPacket; use pocketmine\network\mcpe\protocol\InventorySlotPacket; use pocketmine\network\mcpe\protocol\types\ContainerIds; @@ -128,6 +130,21 @@ abstract class BaseInventory implements Inventory{ } } + /** + * Drops the contents of the inventory into the specified Level at the specified position and clears the inventory + * contents. + * + * @param Level $level + * @param Vector3 $position + */ + public function dropContents(Level $level, Vector3 $position) : void{ + foreach($this->getContents() as $item){ + $level->dropItem($position, $item); + } + + $this->clearAll(); + } + protected function doSetItemEvents(int $index, Item $newItem) : ?Item{ return $newItem; } diff --git a/src/pocketmine/inventory/EnchantInventory.php b/src/pocketmine/inventory/EnchantInventory.php index 6332f5740..fb31fb9b4 100644 --- a/src/pocketmine/inventory/EnchantInventory.php +++ b/src/pocketmine/inventory/EnchantInventory.php @@ -59,9 +59,6 @@ class EnchantInventory extends ContainerInventory{ public function onClose(Player $who) : void{ parent::onClose($who); - for($i = 0; $i < 2; ++$i){ - $this->getHolder()->getLevel()->dropItem($this->getHolder()->add(0.5, 0.5, 0.5), $this->getItem($i)); - $this->clear($i); - } + $this->dropContents($this->holder->getLevel(), $this->holder->add(0.5, 0.5, 0.5)); } } \ No newline at end of file diff --git a/src/pocketmine/level/Explosion.php b/src/pocketmine/level/Explosion.php index 77d867287..0e85560e6 100644 --- a/src/pocketmine/level/Explosion.php +++ b/src/pocketmine/level/Explosion.php @@ -218,12 +218,7 @@ class Explosion{ $t->unpair(); } - $dropPos = $t->asVector3()->add(0.5, 0.5, 0.5); - foreach($t->getInventory()->getContents() as $drop){ - if(!$drop->isNull()){ - $this->level->dropItem($dropPos, $drop); - } - } + $t->getInventory()->dropContents($this->level, $t->add(0.5, 0.5, 0.5)); } $t->close(); diff --git a/src/pocketmine/level/Level.php b/src/pocketmine/level/Level.php index 3a5413436..448a20254 100644 --- a/src/pocketmine/level/Level.php +++ b/src/pocketmine/level/Level.php @@ -1689,9 +1689,7 @@ class Level implements ChunkManager, Metadatable{ $tile->unpair(); } - foreach($tile->getInventory()->getContents() as $chestItem){ - $this->dropItem($target, $chestItem); - } + $tile->getInventory()->dropContents($this, $target); } $tile->close();