diff --git a/src/pocketmine/level/Explosion.php b/src/pocketmine/level/Explosion.php index 212badc6d..897f7f00e 100644 --- a/src/pocketmine/level/Explosion.php +++ b/src/pocketmine/level/Explosion.php @@ -27,6 +27,7 @@ use pocketmine\event\entity\EntityDamageByBlockEvent; use pocketmine\event\entity\EntityDamageByEntityEvent; use pocketmine\event\entity\EntityDamageEvent; use pocketmine\event\entity\EntityExplodeEvent; +use pocketmine\event\block\BlockUpdateEvent; use pocketmine\item\Item; use pocketmine\math\AxisAlignedBB; use pocketmine\math\Math; @@ -51,6 +52,8 @@ class Explosion{ * @var Block[] */ public $affectedBlocks = []; + /** @var bool[] */ + public $updatedHashes = []; public $stepLen = 0.3; /** @var Entity|Block */ private $what; @@ -207,6 +210,16 @@ class Explosion{ } } $this->level->setBlockIdAt($block->x, $block->y, $block->z, 0); + for($side = 0; $side <= 6; $side++){ + $sideBlock = $block->getSide($side); + if($sideBlock instanceof Block and !isset($this->affectedBlocks[$index = Level::blockHash($sideBlock->x, $sideBlock->y, $sideBlock->z)]) and !isset($this->updatedHashes[$index])){ + $this->updatedHashes[$index] = true; + $this->level->getServer()->getPluginManager()->callEvent($ev = new BlockUpdateEvent($sideBlock)); + if(!$ev->isCancelled()){ + $ev->getBlock()->onUpdate(Level::BLOCK_UPDATE_NORMAL); + } + } + } $send[] = new Vector3($block->x - $source->x, $block->y - $source->y, $block->z - $source->z); } $pk = new ExplodePacket();