getDamage()); } public function getFlowingForm() : Block{ return BlockFactory::get(Block::FLOWING_LAVA, $this->getDamage()); } public function getBucketFillSound() : int{ return LevelSoundEventPacket::SOUND_BUCKET_FILL_LAVA; } public function getBucketEmptySound() : int{ return LevelSoundEventPacket::SOUND_BUCKET_EMPTY_LAVA; } public function tickRate() : int{ return 30; } public function getFlowDecayPerBlock() : int{ return 2; //TODO: this is 1 in the nether } protected function checkForHarden(){ $colliding = null; foreach(Facing::ALL as $side){ if($side === Facing::DOWN){ continue; } $blockSide = $this->getSide($side); if($blockSide instanceof Water){ $colliding = $blockSide; break; } } if($colliding !== null){ if($this->decay === 0){ $this->liquidCollide($colliding, BlockFactory::get(Block::OBSIDIAN)); }elseif($this->decay <= 4){ $this->liquidCollide($colliding, BlockFactory::get(Block::COBBLESTONE)); } } } protected function flowIntoBlock(Block $block, int $newFlowDecay, bool $falling) : void{ if($block instanceof Water){ $block->liquidCollide($this, BlockFactory::get(Block::STONE)); }else{ parent::flowIntoBlock($block, $newFlowDecay, $falling); } } public function onEntityCollide(Entity $entity) : void{ $entity->fallDistance *= 0.5; $ev = new EntityDamageByBlockEvent($this, $entity, EntityDamageEvent::CAUSE_LAVA, 4); $entity->attack($ev); $ev = new EntityCombustByBlockEvent($this, $entity, 15); $ev->call(); if(!$ev->isCancelled()){ $entity->setOnFire($ev->getDuration()); } $entity->resetFallDistance(); } }