meta = $meta; } public function getLightLevel() : int{ return 15; } public function getName() : string{ return "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; for($side = 1; $side <= 5; ++$side){ //don't check downwards side $blockSide = $this->getSide($side); if($blockSide instanceof Water){ $colliding = $blockSide; break; } } if($colliding !== null){ if($this->getDamage() === 0){ $this->liquidCollide($colliding, BlockFactory::get(Block::OBSIDIAN)); }elseif($this->getDamage() <= 4){ $this->liquidCollide($colliding, BlockFactory::get(Block::COBBLESTONE)); } } } protected function flowIntoBlock(Block $block, int $newFlowDecay) : void{ if($block instanceof Water){ $block->liquidCollide($this, BlockFactory::get(Block::STONE)); }else{ parent::flowIntoBlock($block, $newFlowDecay); } } 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); Server::getInstance()->getPluginManager()->callEvent($ev); if(!$ev->isCancelled()){ $entity->setOnFire($ev->getDuration()); } $entity->resetFallDistance(); } public function place(Item $item, Block $blockReplace, Block $blockClicked, int $face, Vector3 $clickVector, Player $player = null) : bool{ $ret = $this->getLevel()->setBlock($this, $this, true, false); $this->getLevel()->scheduleDelayedBlockUpdate($this, $this->tickRate()); return $ret; } }