diff --git a/src/pocketmine/inventory/ChestInventory.php b/src/pocketmine/inventory/ChestInventory.php index dc1de3231..70398296d 100644 --- a/src/pocketmine/inventory/ChestInventory.php +++ b/src/pocketmine/inventory/ChestInventory.php @@ -67,26 +67,28 @@ class ChestInventory extends ContainerInventory{ parent::onOpen($who); if(count($this->getViewers()) === 1 and ($level = $this->getHolder()->getLevel()) instanceof Level){ - $this->broadcastBlockEventPacket($this->getHolder(), true); + $this->broadcastBlockEventPacket(true); $level->broadcastLevelSoundEvent($this->getHolder()->add(0.5, 0.5, 0.5), LevelSoundEventPacket::SOUND_CHEST_OPEN); } } public function onClose(Player $who) : void{ if(count($this->getViewers()) === 1 and ($level = $this->getHolder()->getLevel()) instanceof Level){ - $this->broadcastBlockEventPacket($this->getHolder(), false); + $this->broadcastBlockEventPacket(false); $level->broadcastLevelSoundEvent($this->getHolder()->add(0.5, 0.5, 0.5), LevelSoundEventPacket::SOUND_CHEST_CLOSED); } parent::onClose($who); } - protected function broadcastBlockEventPacket(Vector3 $vector, bool $isOpen) : void{ + protected function broadcastBlockEventPacket(bool $isOpen) : void{ + $holder = $this->getHolder(); + $pk = new BlockEventPacket(); - $pk->x = (int) $vector->x; - $pk->y = (int) $vector->y; - $pk->z = (int) $vector->z; + $pk->x = (int) $holder->x; + $pk->y = (int) $holder->y; + $pk->z = (int) $holder->z; $pk->eventType = 1; //it's always 1 for a chest $pk->eventData = $isOpen ? 1 : 0; - $this->getHolder()->getLevel()->addChunkPacket($this->getHolder()->getX() >> 4, $this->getHolder()->getZ() >> 4, $pk); + $holder->getLevel()->addChunkPacket($holder->getX() >> 4, $holder->getZ() >> 4, $pk); } } diff --git a/src/pocketmine/inventory/DoubleChestInventory.php b/src/pocketmine/inventory/DoubleChestInventory.php index 2919bc979..8e4254dfc 100644 --- a/src/pocketmine/inventory/DoubleChestInventory.php +++ b/src/pocketmine/inventory/DoubleChestInventory.php @@ -101,14 +101,14 @@ class DoubleChestInventory extends ChestInventory implements InventoryHolder{ public function onOpen(Player $who) : void{ parent::onOpen($who); - if(count($this->getViewers()) === 1){ - $this->broadcastBlockEventPacket($this->right->getHolder(), true); + if(count($this->getViewers()) === 1 and $this->right->getHolder()->isValid()){ + $this->right->broadcastBlockEventPacket(true); } } public function onClose(Player $who) : void{ - if(count($this->getViewers()) === 1){ - $this->broadcastBlockEventPacket($this->right->getHolder(), false); + if(count($this->getViewers()) === 1 and $this->right->getHolder()->isValid()){ + $this->right->broadcastBlockEventPacket(false); } parent::onClose($who); }