/** * 刷僵尸计时器 */ public function MobGenerate() { foreach ($this->getServer()->getOnlinePlayers() as $p) { //$this->server->getLogger()->info("准备生成僵尸"); $level = $p->getLevel(); $max = 15; //if ($level->getTime() >= 13500) { //是夜晚 //$this->server->getLogger()->info("时间OK"); $v3 = new Vector3($p->getX() + mt_rand(-$this->birth_r, $this->birth_r), $p->getY(), $p->getZ() + mt_rand(-$this->birth_r, $this->birth_r)); for ($y0 = $p->getY() - 10; $y0 <= $p->getY() + 10; $y0++) { $v3->y = $y0; if ($this->whatBlock($level, $v3) == "block") { //$this->server->getLogger()->info("方块OK"); $v3_1 = $v3; $v3_1->y = $y0 + 1; $v3_2 = $v3; $v3_2->y = $y0 + 2; $random = mt_rand(0, 1); if ($level->getBlock($v3_1)->getID() == 0 and $level->getBlock($v3_2)->getID() == 0) { //找到地面 /** @var Entity[] $zoC */ $zoC = []; /** @var Entity[] $cowc */ $cowc = []; foreach ($level->getEntities() as $zo) { if ($zo instanceof Zombie) { $zoC[] = $zo; } if ($zo instanceof Cow) { $cowc[] = $zo; } } if (count($zoC) > $max) { for ($i = 0; $i < count($zoC) - $max; $i++) { $zoC[$i]->kill(); } } elseif ($random == 0 && $level->getTime() >= 13500) { $pos = new Position($v3->x, $v3->y, $v3->z, $level); $this->server->getPluginManager()->callEvent($ev = new EntityGenerateEvent($pos, Zombie::NETWORK_ID, EntityGenerateEvent::CAUSE_AI_HOLDER)); if (!$ev->isCancelled()) { $this->spawnZombie($ev->getPosition()); } //$this->server->getLogger()->info("生成1僵尸"); } if (count($cowc) > $max) { for ($i = 0; $i < count($cowc) - $max; $i++) { $cowc[$i]->kill(); } } elseif ($random == 1) { $pos = new Position($v3->x, $v3->y, $v3->z, $level); $this->server->getPluginManager()->callEvent($ev = new EntityGenerateEvent($pos, Cow::NETWORK_ID, EntityGenerateEvent::CAUSE_AI_HOLDER)); if (!$ev->isCancelled()) { $this->spawnCow($ev->getPosition()); } //$this->server->getLogger()->info("生成1牛"); } break; } } } } }