diff --git a/src/pocketmine/Player.php b/src/pocketmine/Player.php index af849b71d..3151d8d16 100644 --- a/src/pocketmine/Player.php +++ b/src/pocketmine/Player.php @@ -2733,6 +2733,9 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade } /** + * Note for plugin developers: use kick() with the isAdmin + * flag set to kick without the "Kicked by admin" part instead of this method. + * * @param string $message Message to be broadcasted * @param string $reason Reason showed in console * @param bool $notify diff --git a/src/pocketmine/Server.php b/src/pocketmine/Server.php index 32a897350..881cf0c18 100644 --- a/src/pocketmine/Server.php +++ b/src/pocketmine/Server.php @@ -45,6 +45,7 @@ use pocketmine\entity\Zombie; use pocketmine\event\HandlerList; use pocketmine\event\level\LevelInitEvent; use pocketmine\event\level\LevelLoadEvent; +use pocketmine\event\server\QueryRegenerateEvent; use pocketmine\event\server\ServerCommandEvent; use pocketmine\event\Timings; use pocketmine\event\TimingsHandler; @@ -232,6 +233,9 @@ class Server{ /** @var QueryHandler */ private $queryHandler; + /** @var QueryRegenerateEvent */ + private $queryRegenerateTask = null; + /** @var Config */ private $properties; @@ -1656,7 +1660,6 @@ class Server{ $this->network = new Network($this); $this->network->setName($this->getMotd()); - $this->network->registerInterface(new RakLibInterface($this)); $this->logger->info($this->getLanguage()->translateString("pocketmine.server.info", [ @@ -1694,6 +1697,10 @@ class Server{ set_exception_handler([$this, "exceptionHandler"]); register_shutdown_function([$this, "crashDump"]); + $this->queryRegenerateTask = new QueryRegenerateEvent($this, 5); + + $this->network->registerInterface(new RakLibInterface($this)); + $this->pluginManager->loadPlugins($this->pluginPath); $this->updater = new AutoUpdater($this, $this->getProperty("auto-updater.host", "www.pocketmine.net")); @@ -2111,6 +2118,10 @@ class Server{ } + public function getQueryInformation(){ + return $this->queryRegenerateTask; + } + /** * Starts the PocketMine-MP server and starts processing ticks and packets */ @@ -2123,7 +2134,7 @@ class Server{ $this->network->blockAddress($entry->getName(), -1); } - if($this->getProperty("settings.send-usage", true) !== false){ + if($this->getProperty("settings.send-usage", true)){ $this->sendUsageTicker = 6000; $this->sendUsage(SendUsageTask::TYPE_OPEN); } @@ -2471,9 +2482,12 @@ class Server{ $this->maxTick = 20; $this->maxUse = 0; - if($this->queryHandler !== null and ($this->tickCounter & 0b111111111) === 0){ + if(($this->tickCounter & 0b111111111) === 0){ try{ - $this->queryHandler->regenerateInfo(); + $this->getPluginManager()->callEvent($this->queryRegenerateTask = new QueryRegenerateEvent($this, 5)); + if($this->queryHandler !== null){ + $this->queryHandler->regenerateInfo(); + } }catch(\Exception $e){ if($this->logger instanceof MainLogger){ $this->logger->logException($e); diff --git a/src/pocketmine/event/server/QueryRegenerateEvent.php b/src/pocketmine/event/server/QueryRegenerateEvent.php index aa8c58632..1f3028b35 100644 --- a/src/pocketmine/event/server/QueryRegenerateEvent.php +++ b/src/pocketmine/event/server/QueryRegenerateEvent.php @@ -58,7 +58,7 @@ class QueryRegenerateEvent extends ServerEvent{ $this->plugins = $server->getPluginManager()->getPlugins(); $this->players = []; foreach($server->getOnlinePlayers() as $player){ - if($player->getName() != "" and $player->isConnected()){ + if($player->isOnline()){ $this->players[] = $player; } } diff --git a/src/pocketmine/network/RakLibInterface.php b/src/pocketmine/network/RakLibInterface.php index 4ffae87e6..e7fd672a1 100644 --- a/src/pocketmine/network/RakLibInterface.php +++ b/src/pocketmine/network/RakLibInterface.php @@ -172,12 +172,14 @@ class RakLibInterface implements ServerInstance, AdvancedSourceInterface{ } public function setName($name){ + $info = $this->server->getQueryInformation(); + $this->interface->sendOption("name", "MCPE;".addcslashes($name, ";") .";". Info::CURRENT_PROTOCOL.";". \pocketmine\MINECRAFT_VERSION_NETWORK.";". - count($this->server->getOnlinePlayers()).";". - $this->server->getMaxPlayers() + $info->getPlayerCount().";". + $info->getMaxPlayerCount() ); } diff --git a/src/pocketmine/network/query/QueryHandler.php b/src/pocketmine/network/query/QueryHandler.php index bd6d0a73c..465936d01 100644 --- a/src/pocketmine/network/query/QueryHandler.php +++ b/src/pocketmine/network/query/QueryHandler.php @@ -25,7 +25,6 @@ */ namespace pocketmine\network\query; -use pocketmine\event\server\QueryRegenerateEvent; use pocketmine\Server; use pocketmine\utils\Binary; use pocketmine\utils\Utils; @@ -58,7 +57,7 @@ class QueryHandler{ } public function regenerateInfo(){ - $this->server->getPluginManager()->callEvent($ev = new QueryRegenerateEvent($this->server, 5)); + $ev = $this->server->getQueryInformation(); $this->longData = $ev->getLongQuery(); $this->shortData = $ev->getShortQuery(); $this->timeout = microtime(true) + $ev->getTimeout();