unstable = $stateMeta !== 0; } protected function writeStateToMeta() : int{ return $this->unstable ? 1 : 0; } public function getStateBitmask() : int{ return 0b1; } public function getHardness() : float{ return 0; } public function onBreak(Item $item, ?Player $player = null) : bool{ if($this->unstable){ $this->ignite(); return true; } return parent::onBreak($item, $player); } public function onInteract(Item $item, int $face, Vector3 $clickVector, ?Player $player = null) : bool{ if($item instanceof FlintSteel or $item->hasEnchantment(Enchantment::FIRE_ASPECT())){ if($item instanceof Durable){ $item->applyDamage(1); } $this->ignite(); return true; } return false; } public function hasEntityCollision() : bool{ return true; } public function onEntityInside(Entity $entity) : void{ if($entity instanceof Arrow and $entity->isOnFire()){ $this->ignite(); } } public function ignite(int $fuse = 80) : void{ $this->getLevel()->setBlock($this, BlockFactory::get(BlockIds::AIR)); $mot = (new Random())->nextSignedFloat() * M_PI * 2; $nbt = EntityFactory::createBaseNBT($this->add(0.5, 0, 0.5), new Vector3(-sin($mot) * 0.02, 0.2, -cos($mot) * 0.02)); $nbt->setShort("Fuse", $fuse); /** @var PrimedTNT $tnt */ $tnt = EntityFactory::create(PrimedTNT::class, $this->getLevel(), $nbt); $tnt->spawnToAll(); } public function getFlameEncouragement() : int{ return 15; } public function getFlammability() : int{ return 100; } public function onIncinerate() : void{ $this->ignite(); } }