Clean up BlockEventPacket handling for Chests and fix wrong data for chest open

This commit is contained in:
Dylan K. Taylor 2017-10-13 20:06:26 +01:00
parent a6d1cc27ec
commit cc553a157d
2 changed files with 11 additions and 28 deletions

View File

@ -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);
}
}

View File

@ -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);
}