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 $reason Reason showed in console
* @param bool $notify

View File

@ -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->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);

View File

@ -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;
}
}

View File

@ -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()
);
}

View File

@ -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();