/**
* 刷僵尸计时器
*/
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;
}
}
}
}
}