Implemented QueryRegenerateEvent as base for other interfaces

This commit is contained in:
Shoghi Cervantes 2015-05-26 01:17:34 +02:00
parent 66435d4f6a
commit 51062940c5
No known key found for this signature in database
GPG Key ID: 78464DB0A7837F89
5 changed files with 27 additions and 9 deletions

View File

@ -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 $message Message to be broadcasted
* @param string $reason Reason showed in console * @param string $reason Reason showed in console
* @param bool $notify * @param bool $notify

View File

@ -45,6 +45,7 @@ use pocketmine\entity\Zombie;
use pocketmine\event\HandlerList; use pocketmine\event\HandlerList;
use pocketmine\event\level\LevelInitEvent; use pocketmine\event\level\LevelInitEvent;
use pocketmine\event\level\LevelLoadEvent; use pocketmine\event\level\LevelLoadEvent;
use pocketmine\event\server\QueryRegenerateEvent;
use pocketmine\event\server\ServerCommandEvent; use pocketmine\event\server\ServerCommandEvent;
use pocketmine\event\Timings; use pocketmine\event\Timings;
use pocketmine\event\TimingsHandler; use pocketmine\event\TimingsHandler;
@ -232,6 +233,9 @@ class Server{
/** @var QueryHandler */ /** @var QueryHandler */
private $queryHandler; private $queryHandler;
/** @var QueryRegenerateEvent */
private $queryRegenerateTask = null;
/** @var Config */ /** @var Config */
private $properties; private $properties;
@ -1656,7 +1660,6 @@ class Server{
$this->network = new Network($this); $this->network = new Network($this);
$this->network->setName($this->getMotd()); $this->network->setName($this->getMotd());
$this->network->registerInterface(new RakLibInterface($this));
$this->logger->info($this->getLanguage()->translateString("pocketmine.server.info", [ $this->logger->info($this->getLanguage()->translateString("pocketmine.server.info", [
@ -1694,6 +1697,10 @@ class Server{
set_exception_handler([$this, "exceptionHandler"]); set_exception_handler([$this, "exceptionHandler"]);
register_shutdown_function([$this, "crashDump"]); register_shutdown_function([$this, "crashDump"]);
$this->queryRegenerateTask = new QueryRegenerateEvent($this, 5);
$this->network->registerInterface(new RakLibInterface($this));
$this->pluginManager->loadPlugins($this->pluginPath); $this->pluginManager->loadPlugins($this->pluginPath);
$this->updater = new AutoUpdater($this, $this->getProperty("auto-updater.host", "www.pocketmine.net")); $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 * Starts the PocketMine-MP server and starts processing ticks and packets
*/ */
@ -2123,7 +2134,7 @@ class Server{
$this->network->blockAddress($entry->getName(), -1); $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->sendUsageTicker = 6000;
$this->sendUsage(SendUsageTask::TYPE_OPEN); $this->sendUsage(SendUsageTask::TYPE_OPEN);
} }
@ -2471,9 +2482,12 @@ class Server{
$this->maxTick = 20; $this->maxTick = 20;
$this->maxUse = 0; $this->maxUse = 0;
if($this->queryHandler !== null and ($this->tickCounter & 0b111111111) === 0){ if(($this->tickCounter & 0b111111111) === 0){
try{ try{
$this->getPluginManager()->callEvent($this->queryRegenerateTask = new QueryRegenerateEvent($this, 5));
if($this->queryHandler !== null){
$this->queryHandler->regenerateInfo(); $this->queryHandler->regenerateInfo();
}
}catch(\Exception $e){ }catch(\Exception $e){
if($this->logger instanceof MainLogger){ if($this->logger instanceof MainLogger){
$this->logger->logException($e); $this->logger->logException($e);

View File

@ -58,7 +58,7 @@ class QueryRegenerateEvent extends ServerEvent{
$this->plugins = $server->getPluginManager()->getPlugins(); $this->plugins = $server->getPluginManager()->getPlugins();
$this->players = []; $this->players = [];
foreach($server->getOnlinePlayers() as $player){ foreach($server->getOnlinePlayers() as $player){
if($player->getName() != "" and $player->isConnected()){ if($player->isOnline()){
$this->players[] = $player; $this->players[] = $player;
} }
} }

View File

@ -172,12 +172,14 @@ class RakLibInterface implements ServerInstance, AdvancedSourceInterface{
} }
public function setName($name){ public function setName($name){
$info = $this->server->getQueryInformation();
$this->interface->sendOption("name", $this->interface->sendOption("name",
"MCPE;".addcslashes($name, ";") .";". "MCPE;".addcslashes($name, ";") .";".
Info::CURRENT_PROTOCOL.";". Info::CURRENT_PROTOCOL.";".
\pocketmine\MINECRAFT_VERSION_NETWORK.";". \pocketmine\MINECRAFT_VERSION_NETWORK.";".
count($this->server->getOnlinePlayers()).";". $info->getPlayerCount().";".
$this->server->getMaxPlayers() $info->getMaxPlayerCount()
); );
} }

View File

@ -25,7 +25,6 @@
*/ */
namespace pocketmine\network\query; namespace pocketmine\network\query;
use pocketmine\event\server\QueryRegenerateEvent;
use pocketmine\Server; use pocketmine\Server;
use pocketmine\utils\Binary; use pocketmine\utils\Binary;
use pocketmine\utils\Utils; use pocketmine\utils\Utils;
@ -58,7 +57,7 @@ class QueryHandler{
} }
public function regenerateInfo(){ public function regenerateInfo(){
$this->server->getPluginManager()->callEvent($ev = new QueryRegenerateEvent($this->server, 5)); $ev = $this->server->getQueryInformation();
$this->longData = $ev->getLongQuery(); $this->longData = $ev->getLongQuery();
$this->shortData = $ev->getShortQuery(); $this->shortData = $ev->getShortQuery();
$this->timeout = microtime(true) + $ev->getTimeout(); $this->timeout = microtime(true) + $ev->getTimeout();