diff --git a/src/pocketmine/inventory/ChestInventory.php b/src/pocketmine/inventory/ChestInventory.php index 3c9152e42..1dc194270 100644 --- a/src/pocketmine/inventory/ChestInventory.php +++ b/src/pocketmine/inventory/ChestInventory.php @@ -24,6 +24,7 @@ declare(strict_types=1); namespace pocketmine\inventory; use pocketmine\level\Level; +use pocketmine\math\Vector3; use pocketmine\network\mcpe\protocol\BlockEventPacket; use pocketmine\network\mcpe\protocol\LevelSoundEventPacket; use pocketmine\network\mcpe\protocol\types\WindowTypes; @@ -66,26 +67,26 @@ class ChestInventory extends ContainerInventory{ parent::onOpen($who); if(count($this->getViewers()) === 1 and ($level = $this->getHolder()->getLevel()) instanceof Level){ - $this->broadcastBlockEventPacket(1, 2); //chest open + $this->broadcastBlockEventPacket($this->getHolder(), 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(1, 0); //chest close + $this->broadcastBlockEventPacket($this->getHolder(), false); $level->broadcastLevelSoundEvent($this->getHolder()->add(0.5, 0.5, 0.5), LevelSoundEventPacket::SOUND_CHEST_CLOSED); } parent::onClose($who); } - private function broadcastBlockEventPacket(int $case1, int $case2){ + protected function broadcastBlockEventPacket(Vector3 $vector, bool $isOpen) : void{ $pk = new BlockEventPacket(); - $pk->x = $this->getHolder()->getX(); - $pk->y = $this->getHolder()->getY(); - $pk->z = $this->getHolder()->getZ(); - $pk->case1 = $case1; - $pk->case2 = $case2; + $pk->x = (int) $vector->x; + $pk->y = (int) $vector->y; + $pk->z = (int) $vector->z; + $pk->case1 = 1; //it's always 1 for a chest + $pk->case2 = $isOpen ? 1 : 0; $this->getHolder()->getLevel()->addChunkPacket($this->getHolder()->getX() >> 4, $this->getHolder()->getZ() >> 4, $pk); } } diff --git a/src/pocketmine/inventory/DoubleChestInventory.php b/src/pocketmine/inventory/DoubleChestInventory.php index 907a2a863..0ae5e2781 100644 --- a/src/pocketmine/inventory/DoubleChestInventory.php +++ b/src/pocketmine/inventory/DoubleChestInventory.php @@ -24,8 +24,6 @@ declare(strict_types=1); namespace pocketmine\inventory; use pocketmine\item\Item; -use pocketmine\level\Level; -use pocketmine\network\mcpe\protocol\BlockEventPacket; use pocketmine\Player; use pocketmine\tile\Chest; @@ -113,29 +111,13 @@ class DoubleChestInventory extends ChestInventory implements InventoryHolder{ parent::onOpen($who); if(count($this->getViewers()) === 1){ - $pk = new BlockEventPacket(); - $pk->x = $this->right->getHolder()->getX(); - $pk->y = $this->right->getHolder()->getY(); - $pk->z = $this->right->getHolder()->getZ(); - $pk->case1 = 1; - $pk->case2 = 2; - if(($level = $this->right->getHolder()->getLevel()) instanceof Level){ - $level->addChunkPacket($this->right->getHolder()->getX() >> 4, $this->right->getHolder()->getZ() >> 4, $pk); - } + $this->broadcastBlockEventPacket($this->right->getHolder(), true); } } public function onClose(Player $who) : void{ if(count($this->getViewers()) === 1){ - $pk = new BlockEventPacket(); - $pk->x = $this->right->getHolder()->getX(); - $pk->y = $this->right->getHolder()->getY(); - $pk->z = $this->right->getHolder()->getZ(); - $pk->case1 = 1; - $pk->case2 = 0; - if(($level = $this->right->getHolder()->getLevel()) instanceof Level){ - $level->addChunkPacket($this->right->getHolder()->getX() >> 4, $this->right->getHolder()->getZ() >> 4, $pk); - } + $this->broadcastBlockEventPacket($this->right->getHolder(), false); } parent::onClose($who); }