teleport(); return true; } public function onAttack(Item $item, int $face, ?Player $player = null) : bool{ if($player !== null && !$player->getGamemode()->equals(GameMode::CREATIVE())){ $this->teleport(); return true; } return false; } public function teleport() : void{ for($tries = 0; $tries < 16; ++$tries){ $block = $this->position->getWorld()->getBlockAt( $this->position->x + mt_rand(-16, 16), max(World::Y_MIN, min(World::Y_MAX - 1, $this->position->y + mt_rand(-8, 8))), $this->position->z + mt_rand(-16, 16) ); if($block instanceof Air){ $ev = new BlockTeleportEvent($this, $block->position); $ev->call(); if($ev->isCancelled()){ break; } $blockPos = $ev->getTo(); $this->position->getWorld()->addParticle($this->position, new DragonEggTeleportParticle($this->position->x - $blockPos->x, $this->position->y - $blockPos->y, $this->position->z - $blockPos->z)); $this->position->getWorld()->setBlock($this->position, VanillaBlocks::AIR()); $this->position->getWorld()->setBlock($blockPos, $this); break; } } } public function getSupportType(int $facing) : SupportType{ return SupportType::NONE(); } }