Ejemplo n.º 1
0
 public function check()
 {
     for ($n = 0; $n < $this->threads; ++$n) {
         if ($this->workers[$n]->isTerminated() === true) {
             $this->workers[$n] = new RCONInstance($this->socket, $this->password, $this->clientsPerThread);
         } elseif ($this->workers[$n]->isWaiting()) {
             if ($this->workers[$n]->response !== "") {
                 $this->server->getLogger()->info($this->workers[$n]->response);
                 $this->workers[$n]->synchronized(function (RCONInstance $thread) {
                     $thread->notify();
                 }, $this->workers[$n]);
             } else {
                 $response = new RemoteConsoleCommandSender();
                 $command = $this->workers[$n]->cmd;
                 $this->server->getPluginManager()->callEvent($ev = new RemoteServerCommandEvent($response, $command));
                 if (!$ev->isCancelled()) {
                     $this->server->dispatchCommand($ev->getSender(), $ev->getCommand());
                 }
                 $this->workers[$n]->response = TextFormat::clean($response->getMessage());
                 $this->workers[$n]->synchronized(function (RCONInstance $thread) {
                     $thread->notify();
                 }, $this->workers[$n]);
             }
         }
     }
 }
Ejemplo n.º 2
0
 /**
  * @param Plugin $plugin
  */
 public function disablePlugin(Plugin $plugin)
 {
     if ($plugin instanceof PluginBase and $plugin->isEnabled()) {
         $this->server->getLogger()->info($this->server->getLanguage()->translateString("BukkitPE.plugin.disable", [$plugin->getDescription()->getFullName()]));
         $this->server->getPluginManager()->callEvent(new PluginDisableEvent($plugin));
         $plugin->setEnabled(false);
     }
 }
Ejemplo n.º 3
0
 public function openSession($identifier, $address, $port, $clientID)
 {
     $ev = new PlayerCreationEvent($this, Player::class, Player::class, null, $address, $port);
     $this->server->getPluginManager()->callEvent($ev);
     $class = $ev->getPlayerClass();
     $player = new $class($this, $ev->getClientId(), $ev->getAddress(), $ev->getPort());
     $this->players[$identifier] = $player;
     $this->identifiersACK[$identifier] = 0;
     $this->identifiers[spl_object_hash($player)] = $identifier;
     $this->server->addPlayer($identifier, $player);
 }
Ejemplo n.º 4
0
 public function __construct(Server $server, $type, $playerList = [])
 {
     $endpoint = "http://" . $server->getProperty("anonymous-statistics.host", "stats.BukkitPE.net") . "/";
     $data = [];
     $data["uniqueServerId"] = $server->getServerUniqueId()->toString();
     $data["uniqueMachineId"] = Utils::getMachineUniqueId()->toString();
     $data["uniqueRequestId"] = UUID::fromData($server->getServerUniqueId(), microtime(true))->toString();
     switch ($type) {
         case self::TYPE_OPEN:
             $data["event"] = "open";
             $version = new VersionString();
             $data["server"] = ["port" => $server->getPort(), "software" => $server->getName(), "fullVersion" => $version->get(true), "version" => $version->get(), "build" => $version->getBuild(), "api" => $server->getApiVersion(), "minecraftVersion" => $server->getVersion(), "protocol" => Info::CURRENT_PROTOCOL];
             $data["system"] = ["operatingSystem" => Utils::getOS(), "cores" => Utils::getCoreCount(), "phpVersion" => PHP_VERSION, "machine" => php_uname("a"), "release" => php_uname("r"), "platform" => php_uname("i")];
             $data["players"] = ["count" => 0, "limit" => $server->getMaxPlayers()];
             $plugins = [];
             foreach ($server->getPluginManager()->getPlugins() as $p) {
                 $d = $p->getDescription();
                 $plugins[$d->getName()] = ["name" => $d->getName(), "version" => $d->getVersion(), "enabled" => $p->isEnabled()];
             }
             $data["plugins"] = $plugins;
             break;
         case self::TYPE_STATUS:
             $data["event"] = "status";
             $data["server"] = ["ticksPerSecond" => $server->getTicksPerSecondAverage(), "tickUsage" => $server->getTickUsageAverage(), "ticks" => $server->getTick()];
             //This anonymizes the user ids so they cannot be reversed to the original
             foreach ($playerList as $k => $v) {
                 $playerList[$k] = md5($v);
             }
             $players = [];
             foreach ($server->getOnlinePlayers() as $p) {
                 if ($p->isOnline()) {
                     $players[] = md5($p->getUniqueId()->toBinary());
                 }
             }
             $data["players"] = ["count" => count($players), "limit" => $server->getMaxPlayers(), "currentList" => $players, "historyList" => array_values($playerList)];
             $info = Utils::getMemoryUsage(true);
             $data["system"] = ["mainMemory" => $info[0], "totalMemory" => $info[1], "availableMemory" => $info[2], "threadCount" => Utils::getThreadCount()];
             break;
         case self::TYPE_CLOSE:
             $data["event"] = "close";
             $data["crashing"] = $server->isRunning();
             break;
     }
     $this->endpoint = $endpoint . "api/post";
     $this->data = json_encode($data);
 }
 public function __construct(Server $server, $timeout = 5)
 {
     $this->timeout = $timeout;
     $this->serverName = $server->getServerName();
     $this->listPlugins = $server->getProperty("settings.query-plugins", true);
     $this->plugins = $server->getPluginManager()->getPlugins();
     $this->players = [];
     foreach ($server->getOnlinePlayers() as $player) {
         if ($player->isOnline()) {
             $this->players[] = $player;
         }
     }
     $this->gametype = ($server->getGamemode() & 0x1) === 0 ? "SMP" : "CMP";
     $this->version = $server->getVersion();
     $this->server_engine = $server->getName() . " " . $server->getBukkitPEVersion();
     $this->map = $server->getDefaultLevel() === null ? "unknown" : $server->getDefaultLevel()->getName();
     $this->numPlayers = count($this->players);
     $this->maxPlayers = $server->getMaxPlayers();
     $this->whitelist = $server->hasWhitelist() ? "on" : "off";
     $this->port = $server->getPort();
     $this->ip = $server->getIp();
 }
Ejemplo n.º 6
0
 public function unloadChunk($x, $z, $safe = true, $trySave = true)
 {
     if ($safe === true and $this->isChunkInUse($x, $z)) {
         return false;
     }
     if (!$this->isChunkLoaded($x, $z)) {
         return true;
     }
     $this->timings->doChunkUnload->startTiming();
     $index = Level::chunkHash($x, $z);
     $chunk = $this->getChunk($x, $z);
     if ($chunk !== null and $chunk->getProvider() !== null) {
         $this->server->getPluginManager()->callEvent($ev = new ChunkUnloadEvent($chunk));
         if ($ev->isCancelled()) {
             $this->timings->doChunkUnload->stopTiming();
             return false;
         }
     }
     try {
         if ($chunk !== null) {
             if ($trySave and $this->getAutoSave()) {
                 $entities = 0;
                 foreach ($chunk->getEntities() as $e) {
                     if ($e instanceof Player) {
                         continue;
                     }
                     ++$entities;
                 }
                 if ($chunk->hasChanged() or count($chunk->getTiles()) > 0 or $entities > 0) {
                     $this->provider->setChunk($x, $z, $chunk);
                     $this->provider->saveChunk($x, $z);
                 }
             }
             foreach ($this->getChunkLoaders($x, $z) as $loader) {
                 $loader->onChunkUnloaded($chunk);
             }
         }
         $this->provider->unloadChunk($x, $z, $safe);
     } catch (\Exception $e) {
         $logger = $this->server->getLogger();
         $logger->error($this->server->getLanguage()->translateString("BukkitPE.level.chunkUnloadError", [$e->getMessage()]));
         if ($logger instanceof MainLogger) {
             $logger->logException($e);
         }
     }
     unset($this->chunks[$index]);
     unset($this->chunkTickList[$index]);
     unset($this->chunkCache[$index]);
     $this->timings->doChunkUnload->stopTiming();
     return true;
 }
Ejemplo n.º 7
0
 public function close()
 {
     if (!$this->closed) {
         $this->server->getPluginManager()->callEvent(new EntityDespawnEvent($this));
         $this->closed = true;
         $this->despawnFromAll();
         if ($this->chunk !== null) {
             $this->chunk->removeEntity($this);
         }
         if ($this->level !== null) {
             $this->level->removeEntity($this);
         }
     }
 }