コード例 #1
0
ファイル: Weather.php プロジェクト: zzm317/ImagicalMine
 public function __construct(Level $level, $weatherTime = 12000, $weatherNow = 0)
 {
     $this->level = $level;
     $this->weatherTime = $weatherTime;
     $this->weatherNow = $weatherNow;
     $this->weatherLast = 0;
     WeatherManager::registerLevel($level);
 }
コード例 #2
0
ファイル: WeatherCommand.php プロジェクト: Anapopo/Genisys
 public function execute(CommandSender $sender, $currentAlias, array $args)
 {
     if (!$this->testPermission($sender)) {
         return true;
     }
     if (count($args) < 1) {
         $sender->sendMessage(new TranslationContainer("commands.generic.usage", [$this->usageMessage]));
         return false;
     }
     if ($sender instanceof Player) {
         $wea = (int) $args[0];
         if ($wea >= 0 and $wea <= 3) {
             if (WeatherManager::isRegistered($sender->getLevel())) {
                 $sender->getLevel()->getWeather()->setWeather($wea);
                 $sender->sendMessage(TextFormat::GREEN . "Weather changed successfully for " . $sender->getLevel()->getFolderName());
                 return true;
             } else {
                 $sender->sendMessage(TextFormat::RED . $sender->getLevel()->getFolderName() . " hasn't registered to WeatherManager.");
                 return false;
             }
         } else {
             $sender->sendMessage(TextFormat::RED . "Invalid weather.");
             return false;
         }
     }
     if (count($args) < 2) {
         $sender->sendMessage(TextFormat::RED . "Wrong parameters.");
         return false;
     }
     $level = $sender->getServer()->getLevelByName($args[0]);
     if (!$level instanceof Level) {
         $sender->sendMessage(TextFormat::RED . "Invalid level name.");
         return false;
     }
     $wea = (int) $args[1];
     if ($wea >= 0 and $wea <= 3) {
         if (WeatherManager::isRegistered($level)) {
             $level->getWeather()->setWeather($wea);
             $sender->sendMessage(TextFormat::GREEN . "Weather changed successfully for " . $level->getFolderName());
             return true;
         } else {
             $sender->sendMessage(TextFormat::RED . $level->getFolderName() . " hasn't registered to WeatherManager.");
             return false;
         }
     } else {
         $sender->sendMessage(TextFormat::RED . "Invalid weather.");
         return false;
     }
     return true;
 }
コード例 #3
0
ファイル: WeatherCommand.php プロジェクト: CreeperGo/Genisys
 public function execute(CommandSender $sender, $currentAlias, array $args)
 {
     if (!$this->testPermission($sender)) {
         return true;
     }
     if (count($args) < 1) {
         $sender->sendMessage(new TranslationContainer("commands.generic.usage", [$this->usageMessage]));
         return false;
     }
     if ($sender instanceof Player) {
         $wea = (int) $args[0];
         if ($wea >= 0 and $wea <= 3) {
             if (WeatherManager::isRegistered($sender->getLevel())) {
                 $sender->getLevel()->getWeather()->setWeather($wea);
                 $sender->sendMessage(new TranslationContainer("pocketmine.command.weather.changed", [$sender->getLevel()->getFolderName()]));
                 return true;
             } else {
                 $sender->sendMessage(new TranslationContainer("pocketmine.command.weather.noregistered", [$sender->getLevel()->getFolderName()]));
                 return false;
             }
         } else {
             $sender->sendMessage(TextFormat::RED . "%pocketmine.command.weather.invalid");
             return false;
         }
     }
     if (count($args) < 2) {
         $sender->sendMessage(TextFormat::RED . "%pocketmine.command.weather.wrong");
         return false;
     }
     $level = $sender->getServer()->getLevelByName($args[0]);
     if (!$level instanceof Level) {
         $sender->sendMessage(TextFormat::RED . "%pocketmine.command.weather.invalid.level");
         return false;
     }
     $wea = (int) $args[1];
     if ($wea >= 0 and $wea <= 3) {
         if (WeatherManager::isRegistered($level)) {
             $level->getWeather()->setWeather($wea);
             $sender->sendMessage(new TranslationContainer("pocketmine.command.weather.changed", [$level->getFolderName()]));
             return true;
         } else {
             $sender->sendMessage(new TranslationContainer("pocketmine.command.weather.noregistered", [$level->getFolderName()]));
             return false;
         }
     } else {
         $sender->sendMessage(TextFormat::RED . "%pocketmine.command.weather.invalid");
         return false;
     }
     return true;
 }
コード例 #4
0
ファイル: WeatherCommand.php プロジェクト: 1455931078/Genisys
 public function execute(CommandSender $sender, $currentAlias, array $args)
 {
     if (count($args) < 1) {
         $sender->sendMessage(new TranslationContainer("commands.generic.usage", [$this->usageMessage]));
         return false;
     }
     if ($sender instanceof Player) {
         $wea = (int) $args[0];
         if ($wea >= 0 and $wea <= 3) {
             if (WeatherManager::isRegistered($sender->getLevel())) {
                 $sender->getLevel()->getWeather()->setWeather($wea);
                 $sender->sendMessage(TextFormat::GREEN . "天气设置成功!");
                 return true;
             } else {
                 $sender->sendMessage(TextFormat::RED . "这个世界没有注册到天气管理器!");
                 return false;
             }
         } else {
             $sender->sendMessage(TextFormat::RED . "无效的天气!");
             return false;
         }
     }
     if (count($args) < 2) {
         $sender->sendMessage(TextFormat::RED . "缺少参数!");
         return false;
     }
     $level = $sender->getServer()->getLevelByName($args[0]);
     if (!$level instanceof Level) {
         $sender->sendMessage(TextFormat::RED . "错误的地图名!");
         return false;
     }
     $wea = (int) $args[1];
     if ($wea >= 0 and $wea <= 3) {
         if (WeatherManager::isRegistered($level)) {
             $level->getWeather()->setWeather($wea);
             $sender->sendMessage(TextFormat::GREEN . "天气设置成功!");
             return true;
         } else {
             $sender->sendMessage(TextFormat::RED . "这个世界没有注册到天气管理器!");
             return false;
         }
     } else {
         $sender->sendMessage(TextFormat::RED . "无效的天气!");
         return false;
     }
     return true;
 }
コード例 #5
0
ファイル: Player.php プロジェクト: PepbookPvP/Genisys
 protected function doFirstSpawn()
 {
     $this->spawned = true;
     $this->sendSettings();
     $this->setMovementSpeed(0.1);
     $this->sendPotionEffects($this);
     $this->sendData($this);
     $this->inventory->sendContents($this);
     $this->inventory->sendArmorContents($this);
     $pk = new SetTimePacket();
     $pk->time = $this->level->getTime();
     $pk->started = $this->level->stopTime == false;
     $this->dataPacket($pk);
     $pos = $this->level->getSafeSpawn($this);
     $this->server->getPluginManager()->callEvent($ev = new PlayerRespawnEvent($this, $pos));
     $pos = $ev->getRespawnPosition()->add(0, 0.2, 0);
     $pk = new RespawnPacket();
     $pk->x = $pos->x;
     $pk->y = $pos->y;
     $pk->z = $pos->z;
     $this->dataPacket($pk);
     $pk = new PlayStatusPacket();
     $pk->status = PlayStatusPacket::PLAYER_SPAWN;
     $this->dataPacket($pk);
     $this->noDamageTicks = 60;
     foreach ($this->usedChunks as $index => $c) {
         Level::getXZ($index, $chunkX, $chunkZ);
         foreach ($this->level->getChunkEntities($chunkX, $chunkZ) as $entity) {
             if ($entity !== $this and !$entity->closed and $entity->isAlive()) {
                 $entity->spawnTo($this);
             }
         }
     }
     $this->teleport($pos);
     $this->server->getPluginManager()->callEvent($ev = new PlayerJoinEvent($this, new TranslationContainer(TextFormat::YELLOW . "%multiplayer.player.joined", [$this->getDisplayName()])));
     if (strlen(trim($msg = $ev->getJoinMessage())) > 0) {
         if ($this->server->playerMsgType === Server::PLAYER_MSG_TYPE_MESSAGE) {
             $this->server->broadcastMessage($msg);
         } elseif ($this->server->playerMsgType === Server::PLAYER_MSG_TYPE_TIP) {
             $this->server->broadcastTip(str_replace("@player", $this->getName(), $this->server->playerLoginMsg));
         } elseif ($this->server->playerMsgType === Server::PLAYER_MSG_TYPE_POPUP) {
             $this->server->broadcastPopup(str_replace("@player", $this->getName(), $this->server->playerLoginMsg));
         }
     }
     $this->setAllowFlight($this->gamemode == 3 || $this->gamemode == 1);
     $this->server->onPlayerLogin($this);
     $this->spawnToAll();
     if (WeatherManager::isRegistered($this->level)) {
         $this->level->getWeather()->sendWeather($this);
     }
     if ($this->server->expEnabled) {
         //$this->checkExpLevel();
         $this->updateExperience();
     }
     $this->setHealth($this->getHealth());
     if ($this->server->foodEnabled) {
         $this->setFood($this->getFood());
     } else {
         $this->setFood(20);
     }
     if ($this->server->dserverConfig["enable"] and $this->server->dserverConfig["queryAutoUpdate"]) {
         $this->server->updateQuery();
     }
     /*if($this->server->getUpdater()->hasUpdate() and $this->hasPermission(Server::BROADCAST_CHANNEL_ADMINISTRATIVE)){
     			$this->server->getUpdater()->showPlayerUpdate($this);
     		}*/
     if ($this->getHealth() <= 0) {
         $pk = new RespawnPacket();
         $pos = $this->getSpawn();
         $pk->x = $pos->x;
         $pk->y = $pos->y;
         $pk->z = $pos->z;
         $this->dataPacket($pk);
     }
 }
コード例 #6
0
ファイル: Level.php プロジェクト: xpyctum/Genisys
 /**
  * Unloads the current level from memory safely
  *
  * @param bool $force default false, force unload of default level
  *
  * @return bool
  */
 public function unload($force = false)
 {
     $ev = new LevelUnloadEvent($this);
     if ($this === $this->server->getDefaultLevel() and $force !== true) {
         $ev->setCancelled(true);
     }
     $this->server->getPluginManager()->callEvent($ev);
     if (!$force and $ev->isCancelled()) {
         return false;
     }
     $this->server->getLogger()->info($this->server->getLanguage()->translateString("pocketmine.level.unloading", [$this->getName()]));
     $defaultLevel = $this->server->getDefaultLevel();
     foreach ($this->getPlayers() as $player) {
         if ($this === $defaultLevel or $defaultLevel === null) {
             $player->close($player->getLeaveMessage(), "Forced default level unload");
         } elseif ($defaultLevel instanceof Level) {
             $player->teleport($this->server->getDefaultLevel()->getSafeSpawn());
         }
     }
     if ($this === $defaultLevel) {
         $this->server->setDefaultLevel(null);
     }
     if ($this->weather != null) {
         WeatherManager::unregisterLevel($this);
     }
     $this->close();
     return true;
 }
コード例 #7
0
ファイル: Server.php プロジェクト: xuxugzs/Genisys
 /**
  * Tries to execute a server tick
  */
 private function tick()
 {
     $tickTime = microtime(true);
     if ($tickTime - $this->nextTick < -0.025) {
         //Allow half a tick of diff
         return false;
     }
     Timings::$serverTickTimer->startTiming();
     ++$this->tickCounter;
     $this->checkConsole();
     Timings::$connectionTimer->startTiming();
     $this->network->processInterfaces();
     if ($this->rcon !== null) {
         $this->rcon->check();
     }
     Timings::$connectionTimer->stopTiming();
     Timings::$schedulerTimer->startTiming();
     $this->scheduler->mainThreadHeartbeat($this->tickCounter);
     Timings::$schedulerTimer->stopTiming();
     $this->checkTickUpdates($this->tickCounter, $tickTime);
     foreach ($this->players as $player) {
         $player->checkNetwork();
     }
     if (($this->tickCounter & 0b1111) === 0) {
         $this->titleTick();
         $this->maxTick = 20;
         $this->maxUse = 0;
         if (($this->tickCounter & 0b111111111) === 0) {
             if ($this->dserverConfig["enable"] and $this->dserverConfig["queryTickUpdate"] or !$this->dserverConfig["enable"]) {
                 $this->updateQuery();
             }
         }
         $this->getNetwork()->updateName();
     }
     if ($this->autoSave and ++$this->autoSaveTicker >= $this->autoSaveTicks) {
         $this->autoSaveTicker = 0;
         $this->doAutoSave();
     }
     if ($this->weatherEnabled) {
         WeatherManager::updateWeather();
     }
     /*if($this->sendUsageTicker > 0 and --$this->sendUsageTicker === 0){
     			$this->sendUsageTicker = 6000;
     			$this->sendUsage(SendUsageTask::TYPE_STATUS);
     		}*/
     if ($this->tickCounter % 100 === 0) {
         foreach ($this->levels as $level) {
             $level->clearCache();
         }
         if ($this->getTicksPerSecondAverage() < 1) {
             $this->logger->warning($this->getLanguage()->translateString("pocketmine.server.tickOverload"));
         }
     }
     if ($this->dispatchSignals and $this->tickCounter % 5 === 0) {
         pcntl_signal_dispatch();
     }
     $this->getMemoryManager()->check();
     Timings::$serverTickTimer->stopTiming();
     $now = microtime(true);
     $tick = min(20, 1 / max(0.001, $now - $tickTime));
     $use = min(1, ($now - $tickTime) / 0.05);
     //TimingsHandler::tick($tick <= $this->profilingTickRate);
     if ($this->maxTick > $tick) {
         $this->maxTick = $tick;
     }
     if ($this->maxUse < $use) {
         $this->maxUse = $use;
     }
     array_shift($this->tickAverage);
     $this->tickAverage[] = $tick;
     array_shift($this->useAverage);
     $this->useAverage[] = $use;
     if ($this->nextTick - $tickTime < -1) {
         $this->nextTick = $tickTime;
     } else {
         $this->nextTick += 0.05;
     }
     return true;
 }