Ejemplo n.º 1
0
 public function SpecialMobGenerate()
 {
     foreach ($this->getServer()->getOnlinePlayers() as $p) {
         $level = $p->getLevel();
         //if ($level->getTime() >= 13500) {//是夜晚\
         if ($level->getTime() >= 14000) {
             //是夜晚
             if ($this->smobbirth_A >= $this->smob_A) {
                 $this->smob_A = $this->smob_A + 1;
                 $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") {
                         $v3_1 = $v3;
                         $v3_1->y = $y0 + 1;
                         $v3_2 = $v3;
                         $v3_2->y = $y0 + 2;
                         if ($level->getBlock($v3_1)->getID() == 0 and $level->getBlock($v3_2)->getID() == 0) {
                             //$this->getLogger()->info("地面OK");						//找到地面
                             //$this->getLogger()->info("亮度".$this->getLight($level,$v3));
                             if ($this->getLight($level, $v3) < 20) {
                                 //$this->getLogger()->info("亮度OK".$this->getLight($level,$v3));
                                 $chunk = $level->getChunk($v3->x >> 4, $v3->z >> 4, false);
                                 $nbt = $this->getNBT($v3);
                                 $zo = new Zombie($chunk, $nbt);
                                 $zo->setPosition($v3);
                                 $zo->spawnToAll();
                                 $zo->sethealth(20);
                                 $type = $this->specialMobtype[array_rand($this->specialMobtype)];
                                 $pk2 = new RemoveEntityPacket();
                                 $pk2->eid = $zo->getId();
                                 $pk3 = new AddEntityPacket();
                                 $pk3->eid = $zo->getId();
                                 $pk3->type = $type;
                                 $pk3->x = $zo->getX();
                                 $pk3->y = $zo->getY();
                                 $pk3->z = $zo->getZ();
                                 $pk3->pitch = $zo->pitch;
                                 $pk3->yaw = $zo->yaw;
                                 $pk3->metadata = [];
                                 foreach ($this->getServer()->getOnlinePlayers() as $p) {
                                     $p->dataPacket($pk2);
                                     $p->dataPacket($pk3);
                                 }
                                 //var_dump($type);
                                 //$this->getLogger()->info("生成了一只");
                                 //var_dump($zo->getId());
                                 if (!isset($this->animals[$zo->getId()])) {
                                     $this->addanimal($zo->getId(), $type, $zo->yaw, $zo->getLevel()->getName(), $zo->getX(), $zo->getY(), $zo->getZ());
                                     //$this->getLogger()->info("加入成功");
                                 }
                             }
                             break;
                         }
                     }
                 }
             }
         }
     }
 }