serverName = $server->getMotd(); $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() & 0x01) === 0 ? "SMP" : "CMP"; $this->version = $server->getVersion(); $this->server_engine = $server->getName() . " " . $server->getPocketMineVersion(); $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(); } /** * @deprecated * * @return int */ public function getTimeout() : int{ return 0; } /** * @deprecated * @param int $timeout */ public function setTimeout(int $timeout) : void{ } private function destroyCache() : void{ $this->longQueryCache = null; $this->shortQueryCache = null; } /** * @return string */ public function getServerName() : string{ return $this->serverName; } /** * @param string $serverName */ public function setServerName(string $serverName) : void{ $this->serverName = $serverName; $this->destroyCache(); } /** * @return bool */ public function canListPlugins() : bool{ return $this->listPlugins; } /** * @param bool $value */ public function setListPlugins(bool $value) : void{ $this->listPlugins = $value; $this->destroyCache(); } /** * @return Plugin[] */ public function getPlugins() : array{ return $this->plugins; } /** * @param Plugin[] $plugins */ public function setPlugins(array $plugins) : void{ $this->plugins = $plugins; $this->destroyCache(); } /** * @return Player[] */ public function getPlayerList() : array{ return $this->players; } /** * @param Player[] $players */ public function setPlayerList(array $players) : void{ $this->players = $players; $this->destroyCache(); } /** * @return int */ public function getPlayerCount() : int{ return $this->numPlayers; } /** * @param int $count */ public function setPlayerCount(int $count) : void{ $this->numPlayers = $count; $this->destroyCache(); } /** * @return int */ public function getMaxPlayerCount() : int{ return $this->maxPlayers; } /** * @param int $count */ public function setMaxPlayerCount(int $count) : void{ $this->maxPlayers = $count; $this->destroyCache(); } /** * @return string */ public function getWorld() : string{ return $this->map; } /** * @param string $world */ public function setWorld(string $world) : void{ $this->map = $world; $this->destroyCache(); } /** * Returns the extra Query data in key => value form * * @return array */ public function getExtraData() : array{ return $this->extraData; } /** * @param array $extraData */ public function setExtraData(array $extraData) : void{ $this->extraData = $extraData; $this->destroyCache(); } /** * @return string */ public function getLongQuery() : string{ if($this->longQueryCache !== null){ return $this->longQueryCache; } $query = ""; $plist = $this->server_engine; if(count($this->plugins) > 0 and $this->listPlugins){ $plist .= ":"; foreach($this->plugins as $p){ $d = $p->getDescription(); $plist .= " " . str_replace([";", ":", " "], ["", "", "_"], $d->getName()) . " " . str_replace([";", ":", " "], ["", "", "_"], $d->getVersion()) . ";"; } $plist = substr($plist, 0, -1); } $KVdata = [ "splitnum" => chr(128), "hostname" => $this->serverName, "gametype" => $this->gametype, "game_id" => self::GAME_ID, "version" => $this->version, "server_engine" => $this->server_engine, "plugins" => $plist, "map" => $this->map, "numplayers" => $this->numPlayers, "maxplayers" => $this->maxPlayers, "whitelist" => $this->whitelist, "hostip" => $this->ip, "hostport" => $this->port ]; foreach($KVdata as $key => $value){ $query .= $key . "\x00" . $value . "\x00"; } foreach($this->extraData as $key => $value){ $query .= $key . "\x00" . $value . "\x00"; } $query .= "\x00\x01player_\x00\x00"; foreach($this->players as $player){ $query .= $player->getName() . "\x00"; } $query .= "\x00"; return $this->longQueryCache = $query; } /** * @return string */ public function getShortQuery() : string{ return $this->shortQueryCache ?? ($this->shortQueryCache = $this->serverName . "\x00" . $this->gametype . "\x00" . $this->map . "\x00" . $this->numPlayers . "\x00" . $this->maxPlayers . "\x00" . Binary::writeLShort($this->port) . $this->ip . "\x00"); } }