diff --git a/src/PocketMine/ChatAPI.php b/src/PocketMine/ChatAPI.php index 47f76dd92..41f6405c9 100644 --- a/src/PocketMine/ChatAPI.php +++ b/src/PocketMine/ChatAPI.php @@ -23,9 +23,7 @@ namespace PocketMine; class ChatAPI{ - /** - * @var Server - */ + /** @var Server */ private $server; function __construct(){ @@ -33,12 +31,9 @@ class ChatAPI{ } public function init(){ - $this->server->api->console->register("tell", " ", array($this, "commandHandler")); $this->server->api->console->register("me", "", array($this, "commandHandler")); $this->server->api->console->register("say", "", array($this, "commandHandler")); - $this->server->api->ban->cmdWhitelist("tell"); $this->server->api->ban->cmdWhitelist("me"); - $this->server->api->console->alias("msg", "tell"); } /** @@ -61,18 +56,6 @@ class ChatAPI{ $sender = ($issuer instanceof Player) ? "Server" : ucfirst($issuer); Player::broadcastMessage("[$sender] " . $s); break; - case "me": - if(!($issuer instanceof Player)){ - if($issuer === "rcon"){ - $sender = "Rcon"; - }else{ - $sender = ucfirst($issuer); - } - }else{ - $sender = $issuer->getDisplayName(); - } - Player::broadcastMessage("* $sender " . implode(" ", $params)); - break; case "tell": if(!isset($params[0]) or !isset($params[1])){ $output .= "Usage: /$cmd \n"; diff --git a/src/PocketMine/LevelAPI.php b/src/PocketMine/LevelAPI.php index bf34d75bf..7ac933f50 100644 --- a/src/PocketMine/LevelAPI.php +++ b/src/PocketMine/LevelAPI.php @@ -31,7 +31,6 @@ class LevelAPI{ } public function init(){ - $this->server->api->console->register("seed", "[world]", array($this, "commandHandler")); $this->server->api->console->register("save-all", "", array($this, "commandHandler")); $this->server->api->console->register("save-on", "", array($this, "commandHandler")); $this->server->api->console->register("save-off", "", array($this, "commandHandler")); @@ -52,16 +51,6 @@ class LevelAPI{ case "save-off": $this->server->saveEnabled = false; break; - case "seed": - if(!isset($params[0]) and ($issuer instanceof Player)){ - $output .= "Seed: " . $issuer->level->getSeed() . "\n"; - }elseif(isset($params[0])){ - if(($lv = Level::get(trim(implode(" ", $params)))) !== false){ - $output .= "Seed: " . $lv->getSeed() . "\n"; - } - }else{ - $output .= "Seed: " . Level::getDefault()->getSeed() . "\n"; - } } return $output; diff --git a/src/PocketMine/Player.php b/src/PocketMine/Player.php index 6b1fb2eb1..48171d6c9 100644 --- a/src/PocketMine/Player.php +++ b/src/PocketMine/Player.php @@ -63,6 +63,7 @@ use PocketMine\Network\RakNet\Info; use PocketMine\Network\RakNet\Packet; use PocketMine\PMF\LevelFormat; use PocketMine\Recipes\Crafting; +use PocketMine\Scheduler\CallbackTask; use PocketMine\Tile\Chest; use PocketMine\Tile\Furnace; use PocketMine\Tile\Sign; @@ -79,7 +80,7 @@ use PocketMine\Utils\Utils; * Class Player * @package PocketMine */ -class Player extends RealHuman /*TODO: implements CommandSender*/{ +class Player extends RealHuman/* implements CommandSender*/{ const BROADCAST_CHANNEL_ADMINISTRATIVE = "pocketmine.broadcast.admin"; const BROADCAST_CHANNEL_USERS = "pocketmine.broadcast.user"; @@ -154,6 +155,11 @@ class Player extends RealHuman /*TODO: implements CommandSender*/{ private $chunkCount = array(); private $received = array(); + /** + * @var \PocketMine\Scheduler\TaskHandler[] + */ + private $tasks = array(); + /** * @param integer $clientID * @param string $ip @@ -166,7 +172,6 @@ class Player extends RealHuman /*TODO: implements CommandSender*/{ $this->server = Server::getInstance(); $this->lastBreak = microtime(true); $this->clientID = $clientID; - $this->CID = Server::clientID($ip, $port); Player::$list[$this->CID] = $this; $this->ip = $ip; $this->port = $port; @@ -180,9 +185,9 @@ class Player extends RealHuman /*TODO: implements CommandSender*/{ $this->packetStats = array(0, 0); $this->buffer = new Packet(Info::DATA_PACKET_0); $this->buffer->data = array(); - $this->server->schedule(2, array($this, "handlePacketQueues"), array(), true); - $this->server->schedule(20 * 60, array($this, "clearQueue"), array(), true); - $this->evid[] = $this->server->event("server.close", array($this, "close")); + $this->tasks[] = $this->server->getScheduler()->scheduleRepeatingTask(new CallbackTask(array($this, "handlePacketQueues")), 1); + $this->tasks[] = $this->server->getScheduler()->scheduleRepeatingTask(new CallbackTask(array($this, "clearQueue")), 20 * 60); + console("[DEBUG] New Session started with " . $ip . ":" . $port . ". MTU " . $this->MTU . ", Client ID " . $this->clientID, true, true, 2); } @@ -244,16 +249,16 @@ class Player extends RealHuman /*TODO: implements CommandSender*/{ * Sends, if available, the next ordered chunk to the client * * @param bool $force - * @param null $ev + * @param bool $ev * * @return bool|void */ public function getNextChunk($force = false, $ev = null){ if($this->connected === false){ - return false; + return; } - if($ev === "server.schedule"){ + if($ev === true){ --$this->chunkScheduled; if($this->chunkScheduled < 0){ $this->chunkScheduled = 0; @@ -263,10 +268,9 @@ class Player extends RealHuman /*TODO: implements CommandSender*/{ foreach($this->chunkCount as $count => $t){ if(isset($this->recoveryQueue[$count]) or isset($this->resendQueue[$count])){ if($this->chunkScheduled === 0){ - $this->server->schedule(MAX_CHUNK_RATE, array($this, "getNextChunk")); + $this->server->getScheduler()->scheduleDelayedTask(new CallbackTask(array($this, "getNextChunk"), array(false, true)), MAX_CHUNK_RATE); ++$this->chunkScheduled; } - return; }else{ unset($this->chunkCount[$count]); @@ -291,7 +295,7 @@ class Player extends RealHuman /*TODO: implements CommandSender*/{ $distance = @$this->chunksOrder[$index]; if($index === null or $distance === null){ if($this->chunkScheduled === 0){ - $this->server->schedule(40, array($this, "getNextChunk")); + $this->server->getScheduler()->scheduleDelayedTask(new CallbackTask(array($this, "getNextChunk")), 60); } return false; @@ -302,7 +306,7 @@ class Player extends RealHuman /*TODO: implements CommandSender*/{ if(!$this->level->isChunkPopulated($X, $Z)){ $this->orderChunks(); if($this->chunkScheduled === 0 or $force === true){ - $this->server->schedule(MAX_CHUNK_RATE, array($this, "getNextChunk")); + $this->server->getScheduler()->scheduleDelayedTask(new CallbackTask(array($this, "getNextChunk")), MAX_CHUNK_RATE); ++$this->chunkScheduled; } @@ -331,7 +335,7 @@ class Player extends RealHuman /*TODO: implements CommandSender*/{ $this->lastChunk = array($X, $Z); if($this->chunkScheduled === 0 or $force === true){ - $this->server->schedule(MAX_CHUNK_RATE, array($this, "getNextChunk")); + $this->server->getScheduler()->scheduleDelayedTask(new CallbackTask(array($this, "getNextChunk")), MAX_CHUNK_RATE); ++$this->chunkScheduled; } } @@ -501,7 +505,7 @@ class Player extends RealHuman /*TODO: implements CommandSender*/{ $this->updateMetadata(); }*/ $this->setSpawn($pos); - $this->server->schedule(60, array($this, "checkSleep")); + $this->server->getScheduler()->scheduleDelayedTask(new CallbackTask(array($this, "checkSleep")), 60); return true; } @@ -534,6 +538,7 @@ class Player extends RealHuman /*TODO: implements CommandSender*/{ public function checkSleep(){ if($this->sleeping !== false){ + //TODO if($this->server->api->time->getPhase($this->level) === "night"){ foreach($this->level->getPlayers() as $p){ if($p->sleeping === false){ @@ -554,6 +559,7 @@ class Player extends RealHuman /*TODO: implements CommandSender*/{ */ public function eventHandler($data, $event){ switch($event){ + //TODO, obsolete case "tile.update": if($data->level === $this->level){ if($data instanceof Furnace){ @@ -688,12 +694,13 @@ class Player extends RealHuman /*TODO: implements CommandSender*/{ if(($this->gamemode & 0x01) === ($gm & 0x01)){ $this->gamemode = $gm; - $this->sendMessage("Your gamemode has been changed to " . $this->getGamemode() . ".\n"); + $this->sendMessage("Your gamemode has been changed to " . Server::getGamemodeString($this->getGamemode()) . ".\n"); }else{ $this->blocked = true; $this->gamemode = $gm; - $this->sendMessage("Your gamemode has been changed to " . $this->getGamemode() . ", you've to do a forced reconnect.\n"); - $this->server->schedule(30, array($this, "close"), "gamemode change"); //Forces a kick + $this->sendMessage("Your gamemode has been changed to " . Server::getGamemodeString($this->getGamemode()) . ", you've to do a forced reconnect.\n"); + $this->server->getScheduler()->scheduleDelayedTask(new CallbackTask(array($this, "close"), array($this->username . " has left the game", "gamemode change")), 30); + } $this->sendSettings(); @@ -750,19 +757,6 @@ class Player extends RealHuman /*TODO: implements CommandSender*/{ $this->dataPacket($pk); } - public function getGamemodeString(){ - switch($this->gamemode){ - case 0: - return "survival"; - case 1: - return "creative"; - case 2: - return "adventure"; - case 3: - return "view"; - } - } - public function measureLag(){ if($this->connected === false){ return false; @@ -949,7 +943,9 @@ class Player extends RealHuman /*TODO: implements CommandSender*/{ $this->username = $packet->username; $this->iusername = strtolower($this->username); $this->loginData = array("clientId" => $packet->clientId, "loginData" => $packet->loginData); - if(count(Player::$list) > $this->server->maxClients and !$this->server->api->ban->isOp($this->iusername)){ + + //TODO: op things + if(count(Player::$list) > $this->server->getMaxPlayers() and !$this->server->api->ban->isOp($this->iusername)){ $this->kick("server full"); return; @@ -981,10 +977,12 @@ class Player extends RealHuman /*TODO: implements CommandSender*/{ return; } + //TODO: whitelist things if($this->server->whitelist === true and !$this->server->api->ban->inWhitelist($this->iusername)){ $this->close($this->username . " has left the game", "Server is white-listed"); return; + //TODO: ban things }elseif($this->server->api->ban->isBanned($this->iusername) or $this->server->api->ban->isIPBanned($this->ip)){ $this->close($this->username . " has left the game", "You are banned"); @@ -1071,14 +1069,16 @@ class Player extends RealHuman /*TODO: implements CommandSender*/{ $this->dataPacket($pk); } - $this->evid[] = $this->server->event("entity.animate", array($this, "eventHandler")); - $this->evid[] = $this->server->event("entity.event", array($this, "eventHandler")); - $this->evid[] = $this->server->event("entity.metadata", array($this, "eventHandler")); - $this->evid[] = $this->server->event("player.pickup", array($this, "eventHandler")); - $this->evid[] = $this->server->event("tile.container.slot", array($this, "eventHandler")); - $this->evid[] = $this->server->event("tile.update", array($this, "eventHandler")); + //TODO: new events, or remove them! + //$this->evid[] = $this->server->event("entity.animate", array($this, "eventHandler")); + //$this->evid[] = $this->server->event("entity.event", array($this, "eventHandler")); + //$this->evid[] = $this->server->event("entity.metadata", array($this, "eventHandler")); + //$this->evid[] = $this->server->event("player.pickup", array($this, "eventHandler")); + //$this->evid[] = $this->server->event("tile.container.slot", array($this, "eventHandler")); + //$this->evid[] = $this->server->event("tile.update", array($this, "eventHandler")); $this->lastMeasure = microtime(true); - $this->server->schedule(50, array($this, "measureLag"), array(), true); + $this->tasks[] = $this->server->getScheduler()->scheduleRepeatingTask(new CallbackTask(array($this, "measureLag")), 50); + console("[INFO] " . TextFormat::AQUA . $this->username . TextFormat::RESET . "[/" . $this->ip . ":" . $this->port . "] logged in with entity id " . $this->id . " at (" . $this->level->getName() . ", " . round($this->x, 4) . ", " . round($this->y, 4) . ", " . round($this->z, 4) . ")"); $this->server->getPluginManager()->callEvent(new Event\Player\PlayerJoinEvent($this, $this->username . " joined the game")); @@ -1096,12 +1096,13 @@ class Player extends RealHuman /*TODO: implements CommandSender*/{ //$this->heal($this->data->get("health"), "spawn", true); $this->spawned = true; $this->spawnToAll(); - $this->sendMessage($this->server->motd . "\n"); + $this->sendMessage($this->server->getMotd() . "\n"); $this->sendInventory(); $this->sendSettings(); $this->sendArmor(); - $this->server->schedule(30, array($this, "orderChunks"), array(), true); + $this->tasks[] = $this->server->getScheduler()->scheduleDelayedTask(new CallbackTask(array($this, "orderChunks")), 30); + $this->blocked = false; $pk = new SetTimePacket; @@ -1111,9 +1112,11 @@ class Player extends RealHuman /*TODO: implements CommandSender*/{ $pos = new Position($this->x, $this->y, $this->z, $this->level); $pos = $this->level->getSafeSpawn($pos); - $this->teleport($pos); + $this->server->getPluginManager()->callEvent($ev = new Event\Player\PlayerRespawnEvent($this, $pos)); + + $this->teleport($ev->getRespawnPosition()); $this->sendBuffer(); - $this->server->handle("player.spawn", $this); + break; case 2: //Chunk loaded? break; @@ -1273,7 +1276,8 @@ class Player extends RealHuman /*TODO: implements CommandSender*/{ $pk->meta = $block->getMetadata(); $this->dataPacket($pk); break; - }elseif($packet->face === 0xff and $this->server->handle("player.action", $data) !== false){ + }elseif($packet->face === 0xff){ + //TODO: add event $this->inAction = true; $this->startAction = microtime(true); //$this->updateMetadata(); @@ -1532,15 +1536,15 @@ class Player extends RealHuman /*TODO: implements CommandSender*/{ $this->server->api->dhandle("entity.animate", array("eid" => $packet->eid, "entity" => $this->entity, "action" => $packet->action)); break;*/ case ProtocolInfo::RESPAWN_PACKET: - if($this->spawned === false){ - break; - } - if(@$this->entity->dead === false){ + if($this->spawned === false or $this->dead === false){ break; } $this->craftingItems = array(); $this->toCraft = array(); - $this->teleport($this->spawnPosition); + + $this->server->getPluginManager()->callEvent($ev = new Event\Player\PlayerRespawnEvent($this, $this->spawnPosition)); + + $this->teleport($ev->getRespawnPosition()); //$this->entity->fire = 0; //$this->entity->air = 300; //$this->entity->setHealth(20, "respawn", true); @@ -1548,7 +1552,6 @@ class Player extends RealHuman /*TODO: implements CommandSender*/{ $this->sendInventory(); $this->blocked = false; - $this->server->handle("player.respawn", $this); break; case ProtocolInfo::SET_HEALTH_PACKET: //Not used break; @@ -1637,10 +1640,14 @@ class Player extends RealHuman /*TODO: implements CommandSender*/{ $packet->message = TextFormat::clean($packet->message); if(trim($packet->message) != "" and strlen($packet->message) <= 255){ $message = $packet->message; - if($message{0} === "/"){ //Command - $this->server->api->console->run(substr($message, 1), $this); + $this->server->getPluginManager()->callEvent($ev = new Event\Player\PlayerCommandPreprocessEvent($this, $message)); + if($ev->isCancelled()){ + break; + } + if(substr($ev->getMessage(), 0, 1) === "/"){ //Command + $this->server->dispatchCommand($ev->getPlayer(), substr($ev->getMessage(), 1)); }else{ - $this->server->getPluginManager()->callEvent($ev = new Event\Player\PlayerChatEvent($this, $message)); + $this->server->getPluginManager()->callEvent($ev = new Event\Player\PlayerChatEvent($this, $ev->getMessage())); if(!$ev->isCancelled()){ Player::groupChat(sprintf($ev->getFormat(), $ev->getPlayer()->getDisplayName(), $ev->getMessage()), $ev->getRecipients()); } @@ -1757,7 +1764,8 @@ class Player extends RealHuman /*TODO: implements CommandSender*/{ $item = Item::get($packet->item->getID(), $packet->item->getMetadata(), $packet->item->getCount()); $slot = $tile->getSlot($slotn); - if($this->server->api->dhandle("player.container.slot", array( + //TODO: container access events? + /*if($this->server->api->dhandle("player.container.slot", array( "tile" => $tile, "slot" => $packet->slot, "offset" => $offset, @@ -1772,7 +1780,7 @@ class Player extends RealHuman /*TODO: implements CommandSender*/{ $pk->item = $slot; $this->dataPacket($pk); break; - } + }*/ if($item->getID() !== Item::AIR and $slot->getID() == $item->getID()){ if($slot->getCount() < $item->getCount()){ $it = clone $item; @@ -1811,7 +1819,8 @@ class Player extends RealHuman /*TODO: implements CommandSender*/{ $item = Item::get($packet->item->getID(), $packet->item->getMetadata(), $packet->item->getCount()); $slot = $tile->getSlot($packet->slot); - if($this->server->api->dhandle("player.container.slot", array( + //TODO: container access events? + /*if($this->server->api->dhandle("player.container.slot", array( "tile" => $tile, "slot" => $packet->slot, "slotdata" => $slot, @@ -1825,7 +1834,7 @@ class Player extends RealHuman /*TODO: implements CommandSender*/{ $pk->item = $slot; $this->dataPacket($pk); break; - } + }*/ if($tile instanceof Furnace and $packet->slot == 2){ switch($slot->getID()){ @@ -1885,7 +1894,7 @@ class Player extends RealHuman /*TODO: implements CommandSender*/{ } break; default: - console("[DEBUG] Unhandled 0x" . dechex($packet->pid()) . " data packet for " . $this->username . " (" . $this->clientID . "): " . print_r($packet, true), true, true, 2); + console("[DEBUG] Unhandled " . $packet->pid() . " data packet for " . $this->username . " (" . $this->clientID . "): " . print_r($packet, true), true, true, 2); break; } } @@ -2098,7 +2107,7 @@ class Player extends RealHuman /*TODO: implements CommandSender*/{ public static function getOffline($name){ $server = Server::getInstance(); $iname = strtolower($name); - if(!file_exists(\PocketMine\DATA . "players/" . $iname . ".dat")){ + if(!file_exists(Server::getInstance()->getDataPath() . "players/" . $iname . ".dat")){ $spawn = Level::getDefault()->getSafeSpawn(); $nbt = new Compound(false, array( new Enum("Pos", array( @@ -2114,7 +2123,7 @@ class Player extends RealHuman /*TODO: implements CommandSender*/{ new Byte("SpawnForced", 1), //TODO new Enum("Inventory", array()), new Compound("Achievements", array()), - new Int("playerGameType", $server->gamemode), + new Int("playerGameType", $server->getGamemode()), new Enum("Motion", array( new Double(0, 0.0), new Double(1, 0.0), @@ -2135,8 +2144,8 @@ class Player extends RealHuman /*TODO: implements CommandSender*/{ $nbt->Inventory->setTagType(NBT::TAG_Compound); $nbt->Motion->setTagType(NBT::TAG_Double); $nbt->Rotation->setTagType(NBT::TAG_Float); - if(file_exists(\PocketMine\DATA . "players/" . $iname . ".yml")){ - $data = new Config(\PocketMine\DATA . "players/" . $iname . ".yml", Config::YAML, array()); + if(file_exists(Server::getInstance()->getDataPath() . "players/" . $iname . ".yml")){ + $data = new Config(Server::getInstance()->getDataPath() . "players/" . $iname . ".yml", Config::YAML, array()); $nbt["playerGameType"] = (int) $data->get("gamemode"); $nbt["Level"] = $data->get("position")["level"]; $nbt["Pos"][0] = $data->get("position")["x"]; @@ -2183,7 +2192,7 @@ class Player extends RealHuman /*TODO: implements CommandSender*/{ foreach($data->get("achievements") as $achievement => $status){ $nbt->Achievements[$achievement] = new Byte($achievement, $status == true ? 1 : 0); } - unlink(\PocketMine\DATA . "players/" . $iname . ".yml"); + unlink(Server::getInstance()->getDataPath() . "players/" . $iname . ".yml"); }else{ console("[NOTICE] Player data not found for \"" . $iname . "\", creating new profile"); Player::saveOffline($name, $nbt); @@ -2191,7 +2200,7 @@ class Player extends RealHuman /*TODO: implements CommandSender*/{ }else{ $nbt = new NBT(NBT::BIG_ENDIAN); - $nbt->readCompressed(file_get_contents(\PocketMine\DATA . "players/" . $iname . ".dat")); + $nbt->readCompressed(file_get_contents(Server::getInstance()->getDataPath() . "players/" . $iname . ".dat")); $nbt = $nbt->getData(); } @@ -2207,7 +2216,7 @@ class Player extends RealHuman /*TODO: implements CommandSender*/{ public static function saveOffline($name, Compound $nbtTag){ $nbt = new NBT(NBT::BIG_ENDIAN); $nbt->setData($nbtTag); - file_put_contents(\PocketMine\DATA . "players/" . strtolower($name) . ".dat", $nbt->writeCompressed()); + file_put_contents(Server::getInstance()->getDataPath() . "players/" . strtolower($name) . ".dat", $nbt->writeCompressed()); } /** @@ -2234,7 +2243,7 @@ class Player extends RealHuman /*TODO: implements CommandSender*/{ /** * Broadcasts a Minecraft packet to a list of players * - * @param array $players + * @param Player[] $players * @param DataPacket $packet */ public static function broadcastPacket(array $players, DataPacket $packet){ @@ -2244,16 +2253,16 @@ class Player extends RealHuman /*TODO: implements CommandSender*/{ } /** - * @param array $craft - * @param array $recipe - * @param $type + * @param Item[] $craft + * @param Item[] $recipe + * @param int $type * * @return array|bool */ public function craftItems(array $craft, array $recipe, $type){ $craftItem = array(0, true, 0); unset($craft[-1]); - foreach($craft as $slot => $item){ + foreach($craft as $item){ if($item instanceof Item){ $craftItem[0] = $item->getID(); if($item->getMetadata() !== $craftItem[1] and $craftItem[1] !== true){ @@ -2267,7 +2276,7 @@ class Player extends RealHuman /*TODO: implements CommandSender*/{ } $recipeItems = array(); - foreach($recipe as $slot => $item){ + foreach($recipe as $item){ if(!isset($recipeItems[$item->getID()])){ $recipeItems[$item->getID()] = array($item->getID(), $item->getMetadata(), $item->getCount()); }else{ @@ -2288,10 +2297,12 @@ class Player extends RealHuman /*TODO: implements CommandSender*/{ } if(is_array($res)){ + //TODO: CraftItemEvent + //$this->server->getPluginManager($ev = new CraftItemEvent($this, $recipe, $craft, $type)); + //if($ev->isCancelled()){ + // return false; + //} - if($this->server->api->dhandle("player.craft", array("player" => $this, "recipe" => $recipe, "craft" => $craft, "type" => $type)) === false){ - return false; - } foreach($recipe as $slot => $item){ $s = $this->getSlot($slot); $s->setCount($s->getCount() - $item->getCount()); diff --git a/src/PocketMine/Server.php b/src/PocketMine/Server.php index 9c05f56bb..e7ad0d174 100644 --- a/src/PocketMine/Server.php +++ b/src/PocketMine/Server.php @@ -35,6 +35,7 @@ use PocketMine\Entity\Entity; use PocketMine\Event\HandlerList; use PocketMine\Event\Server\PacketReceiveEvent; use PocketMine\Event\Server\PacketSendEvent; +use PocketMine\Event\Server\ServerCommandEvent; use PocketMine\Item\Item; use PocketMine\Level\Generator\Generator; use PocketMine\Level\Level; @@ -57,49 +58,31 @@ use PocketMine\Utils\Utils; use PocketMine\Utils\VersionString; class Server{ - /** - * @var Server - */ + /** @var Server */ private static $instance = null; - /** - * @var bool - */ + /** @var bool */ private $isRunning = true; - /** - * @var PluginManager - */ + /** @var PluginManager */ private $pluginManager = null; - /** - * @var ServerScheduler - */ + /** @var ServerScheduler */ private $scheduler = null; - /** - * @var TickScheduler - */ + /** @var TickScheduler */ private $tickScheduler = null; - /** - * @var CommandReader - */ + /** @var CommandReader */ private $console = null; - /** - * @var SimpleCommandMap - */ + /** @var SimpleCommandMap */ private $commandMap = null; - /** - * @var ConsoleCommandSender - */ + /** @var ConsoleCommandSender */ private $consoleSender; - /** - * @var int - */ + /** @var int */ private $maxPlayers; /** @@ -110,9 +93,7 @@ class Server{ private $tickCounter; private $inTick = false; - /** - * @var ThreadedHandler - */ + /** @var ThreadedHandler */ private $interface; private $serverID; @@ -122,14 +103,10 @@ class Server{ private $dataPath; private $pluginPath; - /** - * @var QueryHandler - */ + /** @var QueryHandler */ private $queryHandler; - /** - * @var Config - */ + /** @var Config */ private $properties; /** @@ -251,6 +228,61 @@ class Server{ return $this->getConfigInt("gamemode", 0) & 0b11; } + /** + * Returns the gamemode text name + * + * @param int $mode + * + * @return string + */ + public static function getGamemodeString($mode){ + switch((int) $mode){ + case Player::SURVIVAL: + return "SURVIVAL"; + case Player::CREATIVE: + return "CREATIVE"; + case Player::ADVENTURE: + return "ADVENTURE"; + case Player::SPECTATOR: + return "SPECTATOR"; + } + + return "UNKNOWN"; + } + + /** + * Parses a string and returns a gamemode integer, -1 if not found + * + * @param string $str + * + * @return int + */ + public static function getGamemodeFromString($str){ + switch(strtolower(trim($str))){ + case (string) Player::SURVIVAL: + case "survival": + case "s": + return Player::SURVIVAL; + + case (string) Player::CREATIVE: + case "creative": + case "c": + return Player::CREATIVE; + + case (string) Player::ADVENTURE: + case "adventure": + case "a": + return Player::ADVENTURE; + + case (string) Player::SPECTATOR: + case "spectator": + case "view": + case "v": + return Player::SPECTATOR; + } + return -1; + } + /** * @return int */ @@ -614,7 +646,8 @@ class Server{ public function checkConsole(){ if(($line = $this->console->getLine()) !== null){ - $this->dispatchCommand($this->consoleSender, $line); + $this->pluginManager->callEvent($ev = new ServerCommandEvent($this->consoleSender, $line)); + $this->dispatchCommand($this->consoleSender, $ev->getCommand()); } } @@ -668,7 +701,7 @@ class Server{ pcntl_signal(SIGHUP, array($this, "close")); } */ - console("[INFO] Default game type: " . strtoupper($this->getGamemode())); //TODO: string name + console("[INFO] Default game type: " . self::getGamemodeString($this->getGamemode())); //TODO: string name //$this->trigger("server.start", microtime(true)); console('[INFO] Done (' . round(microtime(true) - \PocketMine\START_TIME, 3) . 's)! For help, type "help" or "?"'); if(Utils::getOS() === "win"){ //Workaround less usleep() waste @@ -691,6 +724,8 @@ class Server{ $this->scheduler->cancelAllTasks(); $this->scheduler->mainThreadHeartbeat(PHP_INT_MAX); + $this->properties->save(); + $this->tickScheduler->kill(); $this->console->kill(); diff --git a/src/PocketMine/ServerAPI.php b/src/PocketMine/ServerAPI.php index 1e520b99e..b8e602484 100644 --- a/src/PocketMine/ServerAPI.php +++ b/src/PocketMine/ServerAPI.php @@ -44,39 +44,25 @@ class ServerAPI{ //TODO: Instead of hard-coding functions, use PHPDoc-compatible methods to load APIs. - /** - * @var ConsoleAPI - */ + /** @var ConsoleAPI */ public $console; - /** - * @var LevelAPI - */ + /** @var LevelAPI */ public $level; - /** - * @var BlockAPI - */ + /** @var BlockAPI */ public $block; - /** - * @var ChatAPI - */ + /** @var ChatAPI */ public $chat; - /** - * @var BanAPI - */ + /** @var BanAPI */ public $ban; - /** - * @var TimeAPI - */ + /** @var TimeAPI */ public $time; - /** - * @var PlayerAPI - */ + /** @var PlayerAPI */ public $player; /** diff --git a/src/PocketMine/ServerOld.php b/src/PocketMine/ServerOld.php index b393b092e..34c3b6758 100644 --- a/src/PocketMine/ServerOld.php +++ b/src/PocketMine/ServerOld.php @@ -35,9 +35,7 @@ use PocketMine\Utils\Utils; use PocketMine\Utils\VersionString; class ServerOld{ - /** - * @var Server - */ + /** @var Server */ private static $instance; public $tCnt; diff --git a/src/PocketMine/command/Command.php b/src/PocketMine/command/Command.php index baa4da73c..8f2034527 100644 --- a/src/PocketMine/command/Command.php +++ b/src/PocketMine/command/Command.php @@ -29,19 +29,13 @@ use PocketMine\Server; use PocketMine\Utils\TextFormat; abstract class Command{ - /** - * @var string - */ + /** @var string */ private $name; - /** - * @var string - */ + /** @var string */ private $nextLabel; - /** - * @var string - */ + /** @var string */ private $label; /** @@ -54,29 +48,19 @@ abstract class Command{ */ private $activeAliases = array(); - /** - * @var CommandMap - */ + /** @var CommandMap */ private $commandMap = null; - /** - * @var string - */ + /** @var string */ protected $description = ""; - /** - * @var string - */ + /** @var string */ protected $usageMessage; - /** - * @var string - */ + /** @var string */ private $permission = null; - /** - * @var string - */ + /** @var string */ private $permissionMessage = null; /** diff --git a/src/PocketMine/command/CommandReader.php b/src/PocketMine/command/CommandReader.php index ac2e86ef4..34b158959 100644 --- a/src/PocketMine/command/CommandReader.php +++ b/src/PocketMine/command/CommandReader.php @@ -24,15 +24,11 @@ namespace PocketMine\Command; class CommandReader extends \Thread{ private $stream; - /** - * @var resource - */ + /** @var resource */ private $fp; private $readline; - /** - * @var \Threaded - */ + /** @var \Threaded */ private $buffer; /** diff --git a/src/PocketMine/command/PluginCommand.php b/src/PocketMine/command/PluginCommand.php index 3c60567a5..8d1444cee 100644 --- a/src/PocketMine/command/PluginCommand.php +++ b/src/PocketMine/command/PluginCommand.php @@ -25,14 +25,10 @@ use PocketMine\Plugin\Plugin; class PluginCommand extends Command{ - /** - * @var Plugin - */ + /** @var Plugin */ private $owningPlugin; - /** - * @var CommandExecutor - */ + /** @var CommandExecutor */ private $executor; /** diff --git a/src/PocketMine/command/SimpleCommandMap.php b/src/PocketMine/command/SimpleCommandMap.php index 85e64ffbe..f2694c034 100644 --- a/src/PocketMine/command/SimpleCommandMap.php +++ b/src/PocketMine/command/SimpleCommandMap.php @@ -21,6 +21,7 @@ namespace PocketMine\Command; +use PocketMine\Command\Defaults\DefaultGamemodeCommand; use PocketMine\Command\Defaults\HelpCommand; use PocketMine\Command\Defaults\PluginsCommand; use PocketMine\Command\Defaults\SeedCommand; @@ -37,9 +38,7 @@ class SimpleCommandMap implements CommandMap{ */ protected $knownCommands = array(); - /** - * @var Server - */ + /** @var Server */ private $server; public function __construct(Server $server){ @@ -55,6 +54,7 @@ class SimpleCommandMap implements CommandMap{ $this->register("pocketmine", new HelpCommand("help")); $this->register("pocketmine", new StopCommand("stop")); $this->register("pocketmine", new TellCommand("tell")); + $this->register("pocketmine", new DefaultGamemodeCommand("defaultgamemode")); } diff --git a/src/PocketMine/command/defaults/DefaultGamemodeCommand.php b/src/PocketMine/command/defaults/DefaultGamemodeCommand.php index 1f989073b..627d16c08 100644 --- a/src/PocketMine/command/defaults/DefaultGamemodeCommand.php +++ b/src/PocketMine/command/defaults/DefaultGamemodeCommand.php @@ -22,21 +22,19 @@ namespace PocketMine\Command\Defaults; use PocketMine\Command\CommandSender; -use PocketMine\Network\Protocol\Info; -use PocketMine\Plugin\Plugin; +use PocketMine\Player; use PocketMine\Server; use PocketMine\Utils\TextFormat; -class VersionCommand extends VanillaCommand{ +class DefaultGamemodeCommand extends VanillaCommand{ public function __construct($name){ parent::__construct( $name, - "Gets the version of this server including any plugins in use", - "/version [plugin name]", - ["ver", "about"] + "Set the default gamemode", + "/defaultgamemode " ); - $this->setPermission("pocketmine.command.version"); + $this->setPermission("pocketmine.command.defaultgamemode"); } public function execute(CommandSender $sender, $currentAlias, array $args){ @@ -45,56 +43,18 @@ class VersionCommand extends VanillaCommand{ } if(count($args) === 0){ - $output = "This server is running PocketMine-MP version " . Server::getInstance()->getPocketMineVersion() . " 「" . Server::getInstance()->getCodename() . "」 (Implementing API version " . Server::getInstance()->getApiVersion() . " for Minecraft: PE " . Server::getInstance()->getVersion() . " protocol version " . Info::CURRENT_PROTOCOL . ")"; - if(\PocketMine\GIT_COMMIT !== str_repeat("00", 20)){ - $output .= " [git " . \PocketMine\GIT_COMMIT . "]"; - } - $sender->sendMessage($output); - }else{ - $pluginName = implode(" ", $args); - $exactPlugin = Server::getInstance()->getPluginManager()->getPlugin($pluginName); - - if($exactPlugin instanceof Plugin){ - $this->describeToSender($exactPlugin, $sender); - - return true; - } - - $found = false; - $pluginName = strtolower($pluginName); - foreach(Server::getInstance()->getPluginManager()->getPlugins() as $plugin){ - if(stripos($plugin->getName(), $pluginName) !== false){ - $this->describeToSender($plugin, $sender); - $found = true; - } - } - - if(!$found){ - $sender->sendMessage("This server is not running any plugin by that name.\nUse /plugins to get a list of plugins."); - } + $sender->sendMessage(TextFormat::RED . "Usage: " . $this->usageMessage); + return false; } + $gameMode = Server::getGamemodeFromString($args[0]); + + if($gameMode !== -1){ + Server::getInstance()->setConfigInt("gamemode", $gameMode); + $sender->sendMessage("Default game mode set to ". strtolower(Server::getGamemodeString($gameMode))); + }else{ + $sender->sendMessage("Unknown game mode"); + } return true; } - - private function describeToSender(Plugin $plugin, CommandSender $sender){ - $desc = $plugin->getDescription(); - $sender->sendMessage(TextFormat::DARK_GREEN . $desc->getName() . TextFormat::WHITE . " version " . TextFormat::DARK_GREEN . $desc->getVersion()); - - if($desc->getDescription() != null){ - $sender->sendMessage($desc->getDescription()); - } - - if($desc->getWebsite() != null){ - $sender->sendMessage("Website: " . $desc->getWebsite()); - } - - if(count($authors = $desc->getAuthors()) > 0){ - if(count($authors) === 1){ - $sender->sendMessage("Author: " . implode(", ", $authors)); - }else{ - $sender->sendMessage("Authors: " . implode(", ", $authors)); - } - } - } } \ No newline at end of file diff --git a/src/PocketMine/event/block/BlockBreakEvent.php b/src/PocketMine/event/block/BlockBreakEvent.php index 7f077e201..71d1d2237 100644 --- a/src/PocketMine/event/block/BlockBreakEvent.php +++ b/src/PocketMine/event/block/BlockBreakEvent.php @@ -29,19 +29,13 @@ use PocketMine\Player; class BlockBreakEvent extends BlockEvent implements Cancellable{ public static $handlerList = null; - /** - * @var \PocketMine\Player - */ + /** @var \PocketMine\Player */ protected $player; - /** - * @var \PocketMine\Item\Item - */ + /** @var \PocketMine\Item\Item */ protected $item; - /** - * @var bool - */ + /** @var bool */ protected $instaBreak = false; public function __construct(Player $player, Block $block, Item $item, $instaBreak = false){ diff --git a/src/PocketMine/event/block/BlockEvent.php b/src/PocketMine/event/block/BlockEvent.php index 36234aa7d..91d65333e 100644 --- a/src/PocketMine/event/block/BlockEvent.php +++ b/src/PocketMine/event/block/BlockEvent.php @@ -27,9 +27,7 @@ namespace PocketMine\Event\Block; use PocketMine\Event\Event; abstract class BlockEvent extends Event{ - /** - * @var \PocketMine\Block\Block - */ + /** @var \PocketMine\Block\Block */ protected $block; public function getBlock(){ diff --git a/src/PocketMine/event/block/BlockPlaceEvent.php b/src/PocketMine/event/block/BlockPlaceEvent.php index b78615231..362616662 100644 --- a/src/PocketMine/event/block/BlockPlaceEvent.php +++ b/src/PocketMine/event/block/BlockPlaceEvent.php @@ -32,14 +32,10 @@ use PocketMine\Player; class BlockPlaceEvent extends BlockEvent implements Cancellable{ public static $handlerList = null; - /** - * @var \PocketMine\Player - */ + /** @var \PocketMine\Player */ protected $player; - /** - * @var \PocketMine\Item\Item - */ + /** @var \PocketMine\Item\Item */ protected $item; diff --git a/src/PocketMine/event/entity/EntityEvent.php b/src/PocketMine/event/entity/EntityEvent.php index 7e73d40ef..fcc959858 100644 --- a/src/PocketMine/event/entity/EntityEvent.php +++ b/src/PocketMine/event/entity/EntityEvent.php @@ -27,9 +27,7 @@ namespace PocketMine\Event\Entity; use PocketMine\Event\Event; abstract class EntityEvent extends Event{ - /** - * @var \PocketMine\Entity\Entity - */ + /** @var \PocketMine\Entity\Entity */ protected $entity; public function getEntity(){ diff --git a/src/PocketMine/event/entity/EntityExplodeEvent.php b/src/PocketMine/event/entity/EntityExplodeEvent.php index c5e5012a9..8102c505e 100644 --- a/src/PocketMine/event/entity/EntityExplodeEvent.php +++ b/src/PocketMine/event/entity/EntityExplodeEvent.php @@ -32,9 +32,7 @@ use PocketMine\Level\Position; class EntityExplodeEvent extends EntityEvent implements Cancellable{ public static $handlerList = null; - /** - * @var Position - */ + /** @var Position */ protected $position; /** @@ -42,9 +40,7 @@ class EntityExplodeEvent extends EntityEvent implements Cancellable{ */ protected $blocks; - /** - * @var float - */ + /** @var float */ protected $yield; /** diff --git a/src/PocketMine/event/entity/EntityMoveEvent.php b/src/PocketMine/event/entity/EntityMoveEvent.php index 0d5bce2af..1f702479d 100644 --- a/src/PocketMine/event/entity/EntityMoveEvent.php +++ b/src/PocketMine/event/entity/EntityMoveEvent.php @@ -29,9 +29,7 @@ use PocketMine\Math\Vector3 as Vector3; class EntityMoveEvent extends EntityEvent implements Cancellable{ public static $handlerList = null; - /** - * @var \PocketMine\Math\Vector3 - */ + /** @var \PocketMine\Math\Vector3 */ private $pos; public function __construct(Entity $entity, Vector3 $pos){ diff --git a/src/PocketMine/event/inventory/InventoryEvent.php b/src/PocketMine/event/inventory/InventoryEvent.php new file mode 100644 index 000000000..1849888fc --- /dev/null +++ b/src/PocketMine/event/inventory/InventoryEvent.php @@ -0,0 +1,47 @@ +inventory; + } + + /** + * @return \PocketMine\Entity\Human[] + */ + public function getViewers(){ + return $this->inventory->getViewers(); + } +} \ No newline at end of file diff --git a/src/PocketMine/event/player/PlayerAchievementAwardedEvent.php b/src/PocketMine/event/player/PlayerAchievementAwardedEvent.php index c20852b22..2af50cbd6 100644 --- a/src/PocketMine/event/player/PlayerAchievementAwardedEvent.php +++ b/src/PocketMine/event/player/PlayerAchievementAwardedEvent.php @@ -30,9 +30,7 @@ use PocketMine\Player; class PlayerAchievementAwardedEvent extends PlayerEvent implements Cancellable{ public static $handlerList = null; - /** - * @var string - */ + /** @var string */ protected $achievement; /** diff --git a/src/PocketMine/event/player/PlayerChatEvent.php b/src/PocketMine/event/player/PlayerChatEvent.php index a6c47fbd1..8b4fdf64c 100644 --- a/src/PocketMine/event/player/PlayerChatEvent.php +++ b/src/PocketMine/event/player/PlayerChatEvent.php @@ -30,14 +30,10 @@ use PocketMine\Player; class PlayerChatEvent extends PlayerEvent implements Cancellable{ public static $handlerList = null; - /** - * @var string - */ + /** @var string */ protected $message; - /** - * @var string - */ + /** @var string */ protected $format; /** diff --git a/src/PocketMine/event/player/PlayerCommandPreprocessEvent.php b/src/PocketMine/event/player/PlayerCommandPreprocessEvent.php new file mode 100644 index 000000000..adb416a0a --- /dev/null +++ b/src/PocketMine/event/player/PlayerCommandPreprocessEvent.php @@ -0,0 +1,73 @@ +player = $player; + $this->message = $message; + } + + /** + * @return string + */ + public function getMessage(){ + return $this->message; + } + + /** + * @param string $message + */ + public function setMessage($message){ + $this->message = $message; + } + + /** + * @param Player $player + */ + public function setPlayer(Player $player){ + $this->player = $player; + } + +} \ No newline at end of file diff --git a/src/PocketMine/event/player/PlayerEvent.php b/src/PocketMine/event/player/PlayerEvent.php index bae408406..eb4740283 100644 --- a/src/PocketMine/event/player/PlayerEvent.php +++ b/src/PocketMine/event/player/PlayerEvent.php @@ -27,9 +27,7 @@ namespace PocketMine\Event\Player; use PocketMine\Event\Event; abstract class PlayerEvent extends Event{ - /** - * @var \PocketMine\Player - */ + /** @var \PocketMine\Player */ protected $player; public function getPlayer(){ diff --git a/src/PocketMine/event/player/PlayerGameModeChangeEvent.php b/src/PocketMine/event/player/PlayerGameModeChangeEvent.php index 4f8e1d632..bebaf0ca9 100644 --- a/src/PocketMine/event/player/PlayerGameModeChangeEvent.php +++ b/src/PocketMine/event/player/PlayerGameModeChangeEvent.php @@ -30,9 +30,7 @@ use PocketMine\Player; class PlayerGameModeChangeEvent extends PlayerEvent implements Cancellable{ public static $handlerList = null; - /** - * @var int - */ + /** @var int */ protected $gamemode; public function __construct(Player $player, $newGamemode){ diff --git a/src/PocketMine/event/player/PlayerInteractEvent.php b/src/PocketMine/event/player/PlayerInteractEvent.php index aecedc3ec..2ae9202df 100644 --- a/src/PocketMine/event/player/PlayerInteractEvent.php +++ b/src/PocketMine/event/player/PlayerInteractEvent.php @@ -37,14 +37,10 @@ class PlayerInteractEvent extends PlayerEvent implements Cancellable{ */ protected $blockTouched; - /** - * @var int - */ + /** @var int */ protected $blockFace; - /** - * @var \PocketMine\Item\Item - */ + /** @var \PocketMine\Item\Item */ protected $item; public function __construct(Player $player, Item $item, Block $block, $face){ diff --git a/src/PocketMine/event/player/PlayerJoinEvent.php b/src/PocketMine/event/player/PlayerJoinEvent.php index 7bc0938b6..650cb3cbf 100644 --- a/src/PocketMine/event/player/PlayerJoinEvent.php +++ b/src/PocketMine/event/player/PlayerJoinEvent.php @@ -29,9 +29,7 @@ use PocketMine\Player; class PlayerJoinEvent extends PlayerEvent{ public static $handlerList = null; - /** - * @var string - */ + /** @var string */ protected $joinMessage; public function __construct(Player $player, $joinMessage){ diff --git a/src/PocketMine/event/player/PlayerKickEvent.php b/src/PocketMine/event/player/PlayerKickEvent.php index aca42debe..5e80110ca 100644 --- a/src/PocketMine/event/player/PlayerKickEvent.php +++ b/src/PocketMine/event/player/PlayerKickEvent.php @@ -30,14 +30,10 @@ use PocketMine\Player; class PlayerKickEvent extends PlayerEvent implements Cancellable{ public static $handlerList = null; - /** - * @var string - */ + /** @var string */ protected $quitMessage; - /** - * @var string - */ + /** @var string */ protected $reason; public function __construct(Player $player, $reason, $quitMessage){ diff --git a/src/PocketMine/event/player/PlayerLoginEvent.php b/src/PocketMine/event/player/PlayerLoginEvent.php index d883b041e..21302287e 100644 --- a/src/PocketMine/event/player/PlayerLoginEvent.php +++ b/src/PocketMine/event/player/PlayerLoginEvent.php @@ -30,9 +30,7 @@ use PocketMine\Player; class PlayerLoginEvent extends PlayerEvent implements Cancellable{ public static $handlerList = null; - /** - * @var string - */ + /** @var string */ protected $kickMessage; public function __construct(Player $player, $kickMessage){ diff --git a/src/PocketMine/event/player/PlayerPreLoginEvent.php b/src/PocketMine/event/player/PlayerPreLoginEvent.php index 51dcb8e26..c52c816f1 100644 --- a/src/PocketMine/event/player/PlayerPreLoginEvent.php +++ b/src/PocketMine/event/player/PlayerPreLoginEvent.php @@ -30,9 +30,7 @@ use PocketMine\Player; class PlayerPreLoginEvent extends PlayerEvent implements Cancellable{ public static $handlerList = null; - /** - * @var string - */ + /** @var string */ protected $kickMessage; public function __construct(Player $player, $kickMessage){ diff --git a/src/PocketMine/event/player/PlayerQuitEvent.php b/src/PocketMine/event/player/PlayerQuitEvent.php index 4c77526ec..955fb2fd5 100644 --- a/src/PocketMine/event/player/PlayerQuitEvent.php +++ b/src/PocketMine/event/player/PlayerQuitEvent.php @@ -29,9 +29,7 @@ use PocketMine\Player; class PlayerQuitEvent extends PlayerEvent{ public static $handlerList = null; - /** - * @var string - */ + /** @var string */ protected $quitMessage; public function __construct(Player $player, $quitMessage){ diff --git a/src/PocketMine/event/player/PlayerRespawntEvent.php b/src/PocketMine/event/player/PlayerRespawntEvent.php index aecedc3ec..4c616a4e6 100644 --- a/src/PocketMine/event/player/PlayerRespawntEvent.php +++ b/src/PocketMine/event/player/PlayerRespawntEvent.php @@ -24,45 +24,38 @@ namespace PocketMine\Event\Player; use PocketMine\Block\Block; use PocketMine\Event\Cancellable; use PocketMine\Item\Item; +use PocketMine\Level\Position; use PocketMine\Player; /** - * Called when a player interacts or touches a block (including air?) + * Called when a player is respawned (or first time spawned) */ -class PlayerInteractEvent extends PlayerEvent implements Cancellable{ +class PlayerRespawnEvent extends PlayerEvent{ public static $handlerList = null; - /** - * @var \PocketMine\Block\Block; - */ - protected $blockTouched; + /** @var Position */ + protected $position; /** - * @var int + * @param Player $player + * @param Position $position */ - protected $blockFace; - - /** - * @var \PocketMine\Item\Item - */ - protected $item; - - public function __construct(Player $player, Item $item, Block $block, $face){ - $this->blockTouched = $block; + public function __construct(Player $player, Position $position){ $this->player = $player; - $this->item = $item; - $this->blockFace = (int) $face; + $this->position = $position; } - public function getItem(){ - return $this->item; + /** + * @return Position + */ + public function getRespawnPosition(){ + return $this->position; } - public function getBlock(){ - return $this->blockTouched; - } - - public function getFace(){ - return $this->blockFace; + /** + * @param Position $position + */ + public function setRespawnPosition(Position $position){ + $this->position = $position; } } \ No newline at end of file diff --git a/src/PocketMine/event/plugin/PluginEvent.php b/src/PocketMine/event/plugin/PluginEvent.php index d7a18a0fd..37c0b49b1 100644 --- a/src/PocketMine/event/plugin/PluginEvent.php +++ b/src/PocketMine/event/plugin/PluginEvent.php @@ -30,9 +30,7 @@ use PocketMine\Plugin\Plugin; abstract class PluginEvent extends Event{ - /** - * @var Plugin - */ + /** @var Plugin */ private $plugin; /** diff --git a/src/PocketMine/event/server/ServerCommandEvent.php b/src/PocketMine/event/server/ServerCommandEvent.php new file mode 100644 index 000000000..b15cdf6e7 --- /dev/null +++ b/src/PocketMine/event/server/ServerCommandEvent.php @@ -0,0 +1,69 @@ +sender = $sender; + $this->command = $command; + } + + /** + * @return string + */ + public function getCommand(){ + return $this->command; + } + + /** + * @param string $command + */ + public function setCommand($command){ + $this->command = $command; + } + +} \ No newline at end of file diff --git a/src/PocketMine/level/Level.php b/src/PocketMine/level/Level.php index fc1cf8fd5..642129e19 100644 --- a/src/PocketMine/level/Level.php +++ b/src/PocketMine/level/Level.php @@ -74,9 +74,7 @@ class Level{ */ public static $list = array(); - /** - * @var Level - */ + /** @var Level */ public static $default = null; /** @@ -106,15 +104,11 @@ class Level{ public $nextSave; - /** - * @var LevelFormat - */ + /** @var LevelFormat */ public $level; public $stopTime; private $time, $startCheck, $startTime; - /** - * @var Server - */ + /** @var Server */ private $server; private $name, $usedChunks, $changedBlocks, $changedCount, $generator; @@ -976,7 +970,7 @@ class Level{ * @param int $X * @param int $Z * - * @return array + * @return Entity[] */ public function getChunkEntities($X, $Z){ $index = LevelFormat::getIndex($X, $Z); @@ -993,7 +987,7 @@ class Level{ * @param int $X * @param int $Z * - * @return array + * @return Tile[] */ public function getChunkTiles($X, $Z){ $index = LevelFormat::getIndex($X, $Z); diff --git a/src/PocketMine/level/Position.php b/src/PocketMine/level/Position.php index 5f1ae6813..cd332ec4b 100644 --- a/src/PocketMine/level/Position.php +++ b/src/PocketMine/level/Position.php @@ -25,9 +25,7 @@ use PocketMine\Math\Vector3 as Vector3; class Position extends Vector3{ - /** - * @var Level - */ + /** @var Level */ public $level = null; /** diff --git a/src/PocketMine/level/generator/populator/TallGrass.php b/src/PocketMine/level/generator/populator/TallGrass.php index 64bdb70d5..1e7de098b 100644 --- a/src/PocketMine/level/generator/populator/TallGrass.php +++ b/src/PocketMine/level/generator/populator/TallGrass.php @@ -28,9 +28,7 @@ use PocketMine\Math\Vector3 as Vector3; use PocketMine\Utils\Random; class TallGrass extends Populator{ - /** - * @var Level - */ + /** @var Level */ private $level; private $randomAmount; private $baseAmount; diff --git a/src/PocketMine/permission/PermissibleBase.php b/src/PocketMine/permission/PermissibleBase.php index 98e3ecfb8..7985f8f4f 100644 --- a/src/PocketMine/permission/PermissibleBase.php +++ b/src/PocketMine/permission/PermissibleBase.php @@ -25,14 +25,10 @@ use PocketMine\Plugin\Plugin; use PocketMine\Server; class PermissibleBase implements Permissible{ - /** - * @var ServerOperator - */ + /** @var ServerOperator */ private $opable = null; - /** - * @var Permissible - */ + /** @var Permissible */ private $parent; /** diff --git a/src/PocketMine/permission/Permission.php b/src/PocketMine/permission/Permission.php index d2f640ef8..d0d131c3e 100644 --- a/src/PocketMine/permission/Permission.php +++ b/src/PocketMine/permission/Permission.php @@ -63,14 +63,10 @@ class Permission{ } } - /** - * @var string - */ + /** @var string */ private $name; - /** - * @var string - */ + /** @var string */ private $description; /** @@ -78,9 +74,7 @@ class Permission{ */ private $children = array(); - /** - * @var string - */ + /** @var string */ private $defaultValue; /** diff --git a/src/PocketMine/permission/PermissionAttachment.php b/src/PocketMine/permission/PermissionAttachment.php index b62e1cfbd..7444d2872 100644 --- a/src/PocketMine/permission/PermissionAttachment.php +++ b/src/PocketMine/permission/PermissionAttachment.php @@ -24,9 +24,7 @@ namespace PocketMine\Permission; use PocketMine\Plugin\Plugin; class PermissionAttachment{ - /** - * @var PermissionRemovedExecutor - */ + /** @var PermissionRemovedExecutor */ private $removed = null; /** @@ -34,14 +32,10 @@ class PermissionAttachment{ */ private $permissions = array(); - /** - * @var Permissible - */ + /** @var Permissible */ private $permissible; - /** - * @var Plugin - */ + /** @var Plugin */ private $plugin; /** diff --git a/src/PocketMine/permission/PermissionAttachmentInfo.php b/src/PocketMine/permission/PermissionAttachmentInfo.php index 25a0ed46e..b100e4983 100644 --- a/src/PocketMine/permission/PermissionAttachmentInfo.php +++ b/src/PocketMine/permission/PermissionAttachmentInfo.php @@ -23,24 +23,16 @@ namespace PocketMine\Permission; class PermissionAttachmentInfo{ - /** - * @var Permissible - */ + /** @var Permissible */ private $permissible; - /** - * @var string - */ + /** @var string */ private $permission; - /** - * @var PermissionAttachment - */ + /** @var PermissionAttachment */ private $attachment; - /** - * @var bool - */ + /** @var bool */ private $value; /** diff --git a/src/PocketMine/plugin/FolderPluginLoader.php b/src/PocketMine/plugin/FolderPluginLoader.php index a4b3f3cf8..c94f48657 100644 --- a/src/PocketMine/plugin/FolderPluginLoader.php +++ b/src/PocketMine/plugin/FolderPluginLoader.php @@ -30,9 +30,7 @@ use PocketMine\Server; */ class FolderPluginLoader implements PluginLoader{ - /** - * @var Server - */ + /** @var Server */ private $server; /** diff --git a/src/PocketMine/plugin/PluginManager.php b/src/PocketMine/plugin/PluginManager.php index 47ac8c9cf..9587d90a1 100644 --- a/src/PocketMine/plugin/PluginManager.php +++ b/src/PocketMine/plugin/PluginManager.php @@ -35,19 +35,13 @@ use PocketMine\Server; */ class PluginManager{ - /** - * @var PluginManager - */ + /** @var PluginManager */ private static $instance = null; - /** - * @var Server - */ + /** @var Server */ private $server; - /** - * @var SimpleCommandMap - */ + /** @var SimpleCommandMap */ private $commandMap; /** diff --git a/src/PocketMine/plugin/RegisteredListener.php b/src/PocketMine/plugin/RegisteredListener.php index 6e94269f6..3b6ab7b56 100644 --- a/src/PocketMine/plugin/RegisteredListener.php +++ b/src/PocketMine/plugin/RegisteredListener.php @@ -27,29 +27,19 @@ use PocketMine\Event\Listener; class RegisteredListener{ - /** - * @var Listener - */ + /** @var Listener */ private $listener; - /** - * @var int - */ + /** @var int */ private $priority; - /** - * @var Plugin - */ + /** @var Plugin */ private $plugin; - /** - * @var EventExecutor - */ + /** @var EventExecutor */ private $executor; - /** - * @var bool - */ + /** @var bool */ private $ignoreCancelled; /** diff --git a/src/PocketMine/scheduler/CallbackTask.php b/src/PocketMine/scheduler/CallbackTask.php index 1b643e687..831bae18f 100644 --- a/src/PocketMine/scheduler/CallbackTask.php +++ b/src/PocketMine/scheduler/CallbackTask.php @@ -29,21 +29,17 @@ namespace PocketMine\Scheduler; */ class CallbackTask extends Task{ - /** - * @var callable - */ + /** @var callable */ protected $callable; - /** - * @var array - */ + /** @var array */ protected $args; /** * @param callable $callable * @param array $args */ - public function __construct(callable $callable, array $args){ + public function __construct(callable $callable, array $args = array()){ $this->callable = $callable; $this->args = $args; $this->args[] = $this; diff --git a/src/PocketMine/scheduler/PluginTask.php b/src/PocketMine/scheduler/PluginTask.php index 2b21aff38..d2ab8cae4 100644 --- a/src/PocketMine/scheduler/PluginTask.php +++ b/src/PocketMine/scheduler/PluginTask.php @@ -28,9 +28,7 @@ use PocketMine\Plugin\Plugin; */ abstract class PluginTask extends Task{ - /** - * @var Plugin - */ + /** @var Plugin */ protected $owner; /** diff --git a/src/PocketMine/scheduler/ServerScheduler.php b/src/PocketMine/scheduler/ServerScheduler.php index 0f30dfab0..e138b2877 100644 --- a/src/PocketMine/scheduler/ServerScheduler.php +++ b/src/PocketMine/scheduler/ServerScheduler.php @@ -38,14 +38,10 @@ class ServerScheduler{ */ protected $tasks = array(); - /** - * @var int - */ + /** @var int */ private $ids = 1; - /** - * @var int - */ + /** @var int */ protected $currentTick = 0; public function __construct(){ diff --git a/src/PocketMine/scheduler/Task.php b/src/PocketMine/scheduler/Task.php index ed991154a..aa434f81c 100644 --- a/src/PocketMine/scheduler/Task.php +++ b/src/PocketMine/scheduler/Task.php @@ -23,9 +23,7 @@ namespace PocketMine\Scheduler; abstract class Task{ - /** - * @var TaskHandler - */ + /** @var TaskHandler */ private $taskHandler = null; /** diff --git a/src/PocketMine/scheduler/TaskHandler.php b/src/PocketMine/scheduler/TaskHandler.php index 827263444..905474d4d 100644 --- a/src/PocketMine/scheduler/TaskHandler.php +++ b/src/PocketMine/scheduler/TaskHandler.php @@ -23,34 +23,22 @@ namespace PocketMine\Scheduler; class TaskHandler{ - /** - * @var Task - */ + /** @var Task */ protected $task; - /** - * @var int - */ + /** @var int */ protected $taskId; - /** - * @var int - */ + /** @var int */ protected $delay; - /** - * @var int - */ + /** @var int */ protected $period; - /** - * @var int - */ + /** @var int */ protected $nextRun; - /** - * @var bool - */ + /** @var bool */ protected $cancelled = false; /** @@ -130,7 +118,9 @@ class TaskHandler{ } public function cancel(){ - $this->task->onCancel(); + if(!$this->isCancelled()){ + $this->task->onCancel(); + } $this->remove(); } diff --git a/src/PocketMine/utils/Config.php b/src/PocketMine/utils/Config.php index 53a11e9c7..dd4c25aa8 100644 --- a/src/PocketMine/utils/Config.php +++ b/src/PocketMine/utils/Config.php @@ -38,21 +38,13 @@ class Config{ const ENUM = 5; // .txt, .list, .enum const ENUMERATION = Config::ENUM; - /** - * @var array - */ + /** @var array */ private $config; - /** - * @var string - */ + /** @var string */ private $file; - /** - * @var boolean - */ + /** @var boolean */ private $correct; - /** - * @var integer - */ + /** @var integer */ private $type = Config::DETECT; public static $formats = array(