teleport(); return true; } public function onAttack(Item $item, Facing $face, ?Player $player = null) : bool{ if($player !== null && $player->getGamemode() !== GameMode::CREATIVE){ $this->teleport(); return true; } return false; } public function teleport() : void{ $world = $this->position->getWorld(); for($tries = 0; $tries < 16; ++$tries){ $block = $world->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(); $world->addParticle($this->position, new DragonEggTeleportParticle($this->position->x - $blockPos->x, $this->position->y - $blockPos->y, $this->position->z - $blockPos->z)); $world->setBlock($this->position, VanillaBlocks::AIR()); $world->setBlock($blockPos, $this); break; } } } public function getSupportType(Facing $facing) : SupportType{ return SupportType::NONE; } }