I want to get the player count using the servers query count (not getting all the online players) I have this: PHP: $player->sendMessage("§aThere are " . $this->getPlayerCount . " §aPlayers Online"); but it doesn't seem to work. here is the rest of the code if needed to solve: PHP: <?phpnamespace itsmemes\join;use pocketmine\event\Listener;use pocketmine\plugin\PluginBase;use pocketmine\command\Command;use pocketmine\command\CommandSender;use pocketmine\plugin\Plugin;use pocketmine\event\player\PlayerJoinEvent;use pocketmine\Server;use pocketmine\Player;use pocketmine\math\Vector3;use pocketmine\utils\Config;use pocketmine\event\server\QueryRegenerateEvent;class Main extends PluginBase implements Listener{ public function onEnable() { $this->getServer()->getPluginManager()->registerEvents($this, $this); } public function onJoin(PlayerJoinEvent $join){ $player = $join->getPlayer(); $player->setGamemode(2); $player->teleport(new \pocketmine\math\Vector3(49, 45, -890)); $player->sendMessage("§aThere are " . $this->getPlayerCount . " Players Online"); return true; }} error: Code: [20:30:29] [Server thread/CRITICAL]: Could not pass event 'pocketmine\event\player\PlayerJoinEvent' to 'JoinEvent v1.5': Undefined property: itsmemes\join\Main::$getPlayerCount on itsmemes\join\Main [20:30:29] [Server thread/CRITICAL]: ErrorException: "Undefined property: itsmemes\join\Main::$getPlayerCount" (EXCEPTION) in "JoinEvent/src/itsmemes/join/Main" at line 27 [20:30:29] [Server thread/DEBUG]: #0 JoinEvent/src/itsmemes/join/Main(27): pocketmine\error_handler(integer 8, string Undefined property: itsmemes\join\Main::$getPlayerCount, string C:\Users\Admin\Creative Cloud Files\Desktop\PrymePE Test Server\plugins\JoinEvent\src\itsmemes\join\Main.php, integer 27, array Array()) [20:30:29] [Server thread/DEBUG]: #1 src/pocketmine/plugin/MethodEventExecutor(38): itsmemes\join\Main->onJoin(pocketmine\event\player\PlayerJoinEvent object) [20:30:29] [Server thread/DEBUG]: #2 src/pocketmine/plugin/RegisteredListener(98): pocketmine\plugin\MethodEventExecutor->execute(itsmemes\join\Main object, pocketmine\event\player\PlayerJoinEvent object) [20:30:29] [Server thread/DEBUG]: #3 src/pocketmine/plugin/PluginManager(721): pocketmine\plugin\RegisteredListener->callEvent(pocketmine\event\player\PlayerJoinEvent object) [20:30:29] [Server thread/DEBUG]: #4 src/pocketmine/Player(951): pocketmine\plugin\PluginManager->callEvent(pocketmine\event\player\PlayerJoinEvent object) [20:30:29] [Server thread/DEBUG]: #5 src/pocketmine/Player(891): pocketmine\Player->doFirstSpawn() [20:30:29] [Server thread/DEBUG]: #6 src/pocketmine/level/Level(2387): pocketmine\Player->sendChunk(integer 1, integer -53, pocketmine\network\mcpe\protocol\BatchPacket object) [20:30:29] [Server thread/DEBUG]: #7 src/pocketmine/level/Level(2428): pocketmine\level\Level->sendChunkFromCache(integer 1, integer -53) [20:30:29] [Server thread/DEBUG]: #8 src/pocketmine/level/format/io/ChunkRequestTask(91): pocketmine\level\Level->chunkRequestCallback(integer 1, integer -53, pocketmine\network\mcpe\protocol\BatchPacket object) [20:30:29] [Server thread/DEBUG]: #9 src/pocketmine/scheduler/AsyncPool(164): pocketmine\level\format\io\ChunkRequestTask->onCompletion(pocketmine\Server object) [20:30:29] [Server thread/DEBUG]: #10 src/pocketmine/scheduler/ServerScheduler(342): pocketmine\scheduler\AsyncPool->collectTasks() [20:30:29] [Server thread/DEBUG]: #11 src/pocketmine/Server(2510): pocketmine\scheduler\ServerScheduler->mainThreadHeartbeat(integer 397) [20:30:29] [Server thread/DEBUG]: #12 src/pocketmine/Server(2257): pocketmine\Server->tick() [20:30:29] [Server thread/DEBUG]: #13 src/pocketmine/Server(2136): pocketmine\Server->tickProcessor() [20:30:29] [Server thread/DEBUG]: #14 src/pocketmine/Server(1718): pocketmine\Server->start() [20:30:29] [Server thread/DEBUG]: #15 src/pocketmine/PocketMine(556): pocketmine\Server->__construct(BaseClassLoader object, pocketmine\utils\MainLogger object, string phar://C:/Users/Admin/Creative Cloud Files/Desktop/PrymePE Test Server/PocketMine-MP.phar/, string C:\Users\Admin\Creative Cloud Files\Desktop\PrymePE Test Server\, string C:\Users\Admin\Creative Cloud Files\Desktop\PrymePE Test Server\plugins\) [20:30:29] [Server thread/DEBUG]: #16 C:/Users/Admin/Creative Cloud Files/Desktop/PrymePE Test Server/PocketMine-MP.phar(1): require(string phar://C:/Users/Admin/Creative Cloud Files/Desktop/PrymePE Test Server/PocketMine-MP.phar/src/pocketmine/PocketMine.php) and would it use pocketmine\event\server\QueryRegenerateEvent ? I'm a bit confused
as I mentioned; I don't want to getOnlinePlayers. I don't want to do this because I have multiple servers which there slots are connected with CombinedSlots to the main lobby server.
You can use an AsyncTask to query the amount of players on the other server and use QueryRegenerateEvent to set the player count or if you know how, MySQL is a good way as well.
You could use https://github.com/robske110/SignServerStats and interface with its API PHP: /** @var $sss robske_110\SSS\SignServerStats */$sss->addServer("example.com", 1234); PHP: public function onSSSasyncUpdate(robske_110\SSS\event\SSSasyncUpdateEvent $event){ $serverPlayersArray = $event->getPlugin()->getPlayerData(); if(isset($serverPlayersArray["example.com"."@".1234])){ $playerCount = $serverPlayersArray["example.com"."@".1234]; }else{ //The information is going to be here in the next event! }}
There must be a more simple way tho.. like look at the plugin FakePlayers they set the query simply: PHP: public function onQueryRegenerate(QueryRegenerateEvent $event) { $event->setPlayerCount($this->config->get("players-count")); $event->setMaxPlayerCount($this->config->get("max-players-count")); }} how is it not this easy to get the count
Do you simply want to know the player count as displayed in QueryRegenerateEvent? You can use the Server->getQueryInformation() to get the latest query result.
What if I use CombinedSlots to get the query count.. PHP: public function queryRegen(QueryRegenerateEvent $ev) { $totalPlayers = 0; $maxPlayers = 0; foreach ($this->server as $server) { $server = explode(":", $server); try { $this->Query->Connect($server[0], $server[1], $this->timeout); $array = ($this->Query->GetInfo()); $totalPlayers = $totalPlayers + $array['Players']; $maxPlayers = $maxPlayers + $array['MaxPlayers']; } catch (MinecraftQueryException $e) { $this->getLogger()->critical($e->getMessage()); } } $localPlayersCount = count($this->getServer()->getOnlinePlayers()); $localMaxPlayerCount = $this->getServer()->getMaxPlayers(); $ev->setPlayerCount($localPlayersCount + $totalPlayers); $ev->setMaxPlayerCount($localMaxPlayerCount + $maxPlayers); }} this with CombinedSlots would work..? (if in CombinedSlots plugin) PHP: public function onJoin(PlayerJoinEvent $join){ { $totalPlayers = 0; $maxPlayers = 0; foreach ($this->server as $server) { $server = explode(":", $server); try { $this->Query->Connect($server[0], $server[1], $this->timeout); $array = ($this->Query->GetInfo()); $totalPlayers = $totalPlayers + $array['Players']; $maxPlayers = $maxPlayers + $array['MaxPlayers']; } catch (MinecraftQueryException $e) { $this->getLogger()->critical($e->getMessage()); } } $localPlayersCount = count($this->getServer()->getOnlinePlayers()); $localMaxPlayerCount = $this->getServer()->getMaxPlayers(); $online = $localPlayersCount + $totalPlayers; $player = $join->getPlayer(); $player->sendMessage("§aThere are§e " . $online . " §aPlayers Online"); return true; } }}
Unfortunately, you won't be able to get any query information out of my CombinedSlots plugin, but you should look up on these forums for how to use poggit virions. I made a library which queries servers for their data. The virion can be found here should you decide to use it: https://github.com/jasonwynn10/libpmquery
oh well I did this and it worked: PHP: public function getTotal(){ $config = $this->getConfig()->get("servers"); foreach($config as $servers){ $content = file_get_contents("http://mcapi.ca/query/".$servers."/mcpe"); $decode = json_decode($content, true); if(!isset($decode["error"])){ $this->maxCount = $this->maxCount + $decode["players"]["max"]; $this->playerCount = $this->playerCount + $decode["players"]["online"]; } else { $this->getLogger()->notice($servers ." is not online or something went wrong while querying."); } } } public function onJoin(PlayerJoinEvent $join){ $join->setJoinMessage(""); $localTotalPlayers = count($this->getServer()->getOnlinePlayers()); $localPlayers = $this->getServer()->getMaxPlayers(); $totalPlayerCount = $localTotalPlayers + $this->playerCount; $player = $join->getPlayer(); $player->addTitle("#bla#nk#", " ", 45, 95, 45); $player->setGamemode(2); $player->teleport(new \pocketmine\math\Vector3(49, 45, -890)); if ($player->hasPlayedBefore() == true) { $player->sendMessage("§dServer > §7Good to see you back " . $player->getNameTag() . "§r§7!"); $player->sendMessage("§6==============================="); $player->sendMessage(" "); $player->sendMessage(" #bl#ank# §bNetwork"); $player->sendMessage(" §bThere are§d ". ($totalPlayerCount) ." §bPlayers Online"); $player->sendMessage(" "); $player->sendMessage("§6==============================="); }else{ $player->sendMessage("§dServer > §7Hello " . $player->getNameTag() . "§r§7!"); $player->sendMessage("§6==============================="); $player->sendMessage(" "); $player->sendMessage(" §bWelcome to #bla#nk# §bNetwork"); $player->sendMessage(" §bThere are§d ". ($totalPlayerCount) ." §bPlayers Online"); $player->sendMessage(" "); $player->sendMessage("§6==============================="); return true; This way it'll be displayed from the servers I add in the config but I still get the same thing as I wanted. The first part of that is from CombinedSlots so thanks heaps Also that title on join does not display, it dosn't show any errors :/ ?
This will be horribly laggy. As I mentioned, trying to query a server waits for the other server's response, which could be very lengthy.