mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-07-29 22:25:52 +00:00
Call BlockSpreadEvent when spreading fire to incinerated blocks
This commit is contained in:
parent
8e37f86480
commit
9256afd439
@ -27,6 +27,7 @@ use pocketmine\block\utils\BlockDataSerializer;
|
|||||||
use pocketmine\entity\Entity;
|
use pocketmine\entity\Entity;
|
||||||
use pocketmine\entity\projectile\Arrow;
|
use pocketmine\entity\projectile\Arrow;
|
||||||
use pocketmine\event\block\BlockBurnEvent;
|
use pocketmine\event\block\BlockBurnEvent;
|
||||||
|
use pocketmine\event\block\BlockSpreadEvent;
|
||||||
use pocketmine\event\entity\EntityCombustByBlockEvent;
|
use pocketmine\event\entity\EntityCombustByBlockEvent;
|
||||||
use pocketmine\event\entity\EntityDamageByBlockEvent;
|
use pocketmine\event\entity\EntityDamageByBlockEvent;
|
||||||
use pocketmine\event\entity\EntityDamageEvent;
|
use pocketmine\event\entity\EntityDamageEvent;
|
||||||
@ -172,14 +173,27 @@ class Fire extends Flowable{
|
|||||||
if(!$ev->isCancelled()){
|
if(!$ev->isCancelled()){
|
||||||
$block->onIncinerate();
|
$block->onIncinerate();
|
||||||
|
|
||||||
|
$spreadedFire = false;
|
||||||
if(mt_rand(0, $this->age + 9) < 5){ //TODO: check rain
|
if(mt_rand(0, $this->age + 9) < 5){ //TODO: check rain
|
||||||
$fire = clone $this;
|
$fire = clone $this;
|
||||||
$fire->age = min(15, $fire->age + (mt_rand(0, 4) >> 2));
|
$fire->age = min(15, $fire->age + (mt_rand(0, 4) >> 2));
|
||||||
$this->position->getWorld()->setBlock($block->position, $fire);
|
$spreadedFire = $this->spreadBlock($block, $fire);
|
||||||
}else{
|
}
|
||||||
|
if(!$spreadedFire){
|
||||||
$this->position->getWorld()->setBlock($block->position, VanillaBlocks::AIR());
|
$this->position->getWorld()->setBlock($block->position, VanillaBlocks::AIR());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function spreadBlock(Block $block, Block $newState) : bool{
|
||||||
|
$ev = new BlockSpreadEvent($block, $this, $newState);
|
||||||
|
$ev->call();
|
||||||
|
if(!$ev->isCancelled()){
|
||||||
|
$block->position->getWorld()->setBlock($block->position, $ev->getNewState());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user