From bda6f03e154074c540e4ca93d63f584516c108fa Mon Sep 17 00:00:00 2001 From: Shoghi Cervantes Date: Wed, 15 Oct 2014 13:07:10 +0200 Subject: [PATCH] Added BlockUpdateEvent --- src/pocketmine/event/block/BlockEvent.php | 2 +- .../event/block/BlockUpdateEvent.php | 34 +++++++++++++++++++ src/pocketmine/level/Level.php | 33 ++++++++++-------- 3 files changed, 53 insertions(+), 16 deletions(-) create mode 100644 src/pocketmine/event/block/BlockUpdateEvent.php diff --git a/src/pocketmine/event/block/BlockEvent.php b/src/pocketmine/event/block/BlockEvent.php index c2ac0eb47..dbc4b69a4 100644 --- a/src/pocketmine/event/block/BlockEvent.php +++ b/src/pocketmine/event/block/BlockEvent.php @@ -34,7 +34,7 @@ abstract class BlockEvent extends Event{ /** * @param Block $block */ - protected function __construct(Block $block){ + public function __construct(Block $block){ $this->block = $block; } diff --git a/src/pocketmine/event/block/BlockUpdateEvent.php b/src/pocketmine/event/block/BlockUpdateEvent.php new file mode 100644 index 000000000..5d01b0260 --- /dev/null +++ b/src/pocketmine/event/block/BlockUpdateEvent.php @@ -0,0 +1,34 @@ +getBlock($pos); } - $block->getSide(0)->onUpdate($type); - $block->getSide(1)->onUpdate($type); - $block->getSide(2)->onUpdate($type); - $block->getSide(3)->onUpdate($type); - $block->getSide(4)->onUpdate($type); - $block->getSide(5)->onUpdate($type); + for($side = 0; $side <= 5; ++$side){ + $this->server->getPluginManager()->callEvent($ev = new BlockUpdateEvent($block->getSide($side))); + if(!$ev->isCancelled()){ + $ev->getBlock()->onUpdate(self::BLOCK_UPDATE_NORMAL); + } + } } /** @@ -937,7 +937,7 @@ class Level implements ChunkManager, Metadatable{ Cache::remove("world:" . $this->getID() . ":" . $index); } - if($direct === true){ + //if($direct === true){ $pk = new UpdateBlockPacket; $pk->x = $pos->x; $pk->y = $pos->y; @@ -949,7 +949,7 @@ class Level implements ChunkManager, Metadatable{ /** @var Player $player */ $player->dataPacket($pk); } - }else{ + /*}else{ if(!($pos instanceof Position)){ $pos = new Position($pos->x, $pos->y, $pos->z, $this); } @@ -964,13 +964,16 @@ class Level implements ChunkManager, Metadatable{ $this->changedCount[$index] |= 1 << $Y; } $this->changedBlocks[$index][$Y][] = clone $block; - } + }*/ if($update === true){ - $this->updateAround($pos, self::BLOCK_UPDATE_NORMAL); - $block->onUpdate(self::BLOCK_UPDATE_NORMAL); - foreach($this->getNearbyEntities(new AxisAlignedBB($block->x - 1, $block->y - 1, $block->z - 1, $block->x + 2, $block->y + 2, $block->z + 2)) as $entity){ - $entity->scheduleUpdate(); + $this->updateAround($pos); + $this->server->getPluginManager()->callEvent($ev = new BlockUpdateEvent($block)); + if(!$ev->isCancelled()){ + $ev->getBlock()->onUpdate(self::BLOCK_UPDATE_NORMAL); + foreach($this->getNearbyEntities(new AxisAlignedBB($block->x - 1, $block->y - 1, $block->z - 1, $block->x + 2, $block->y + 2, $block->z + 2)) as $entity){ + $entity->scheduleUpdate(); + } } } }