From 0f4ce5a539fde4268713578ea939c38b86b91a68 Mon Sep 17 00:00:00 2001 From: Shoghi Cervantes Pueyo Date: Wed, 19 Dec 2012 14:35:11 +0100 Subject: [PATCH] Added /invisible command --- classes/API/ConsoleAPI.php | 21 +++++++++++++++++++++ classes/API/ServerAPI.php | 6 ++++++ classes/PocketMinecraftServer.class.php | 14 ++++++++++++-- common/default.properties | 1 + 4 files changed, 40 insertions(+), 2 deletions(-) diff --git a/classes/API/ConsoleAPI.php b/classes/API/ConsoleAPI.php index 6c0edae3a..e86c9f14d 100644 --- a/classes/API/ConsoleAPI.php +++ b/classes/API/ConsoleAPI.php @@ -45,6 +45,26 @@ class ConsoleAPI{ public function defaultCommands($cmd, $params){ switch($cmd){ + case "invisible": + $p = strtolower(array_shift($params)); + switch($p){ + case "on": + case "true": + case "1": + console("[INFO] Server is invisible"); + $this->server->api->setProperty("invisible", true); + break; + case "off": + case "false": + case "0": + console("[INFO] Server is visible"); + $this->server->api->setProperty("invisible", false); + break; + default: + console("[INFO] Usage: /invisible "); + break; + } + break; case "status": case "lag": $info = $this->server->debugInfo(); @@ -184,6 +204,7 @@ class ConsoleAPI{ console("[INFO] /status: Show server TPS and memory usage"); console("[INFO] /gamemode: Changes default gamemode"); console("[INFO] /difficulty: Changes difficulty"); + console("[INFO] /invisible: Manages server visibility"); console("[INFO] /say: Broadcasts mesages"); console("[INFO] /save-all: Saves pending changes"); console("[INFO] /whitelist: Manages whitelisting"); diff --git a/classes/API/ServerAPI.php b/classes/API/ServerAPI.php index 7cb54686f..2804abb3b 100644 --- a/classes/API/ServerAPI.php +++ b/classes/API/ServerAPI.php @@ -217,9 +217,13 @@ class ServerAPI extends stdClass{ //Yay! I can add anything to this class in run }else{ $this->config["memory-limit"] = "256M"; } + if(!isset($this->config["invisible"])){ + $this->config["invisible"] = false; + } if(is_object($this->server)){ $this->server->setType($this->config["server-type"]); $this->server->timePerSecond = $this->config["time-per-second"]; + $this->server->invisible = $this->config["invisible"]; $this->server->maxClients = $this->config["max-players"]; $this->server->description = $this->config["description"]; $this->server->motd = $this->config["motd"]; @@ -238,6 +242,7 @@ class ServerAPI extends stdClass{ //Yay! I can add anything to this class in run } $config = $this->config; $config["white-list"] = $config["white-list"] === true ? "true":"false"; + $config["invisible"] = $config["invisible"] === true ? "true":"false"; $prop = "#Pocket Minecraft PHP server properties\r\n#".date("D M j H:i:s T Y")."\r\n"; foreach($config as $n => $v){ if($n == "spawn"){ @@ -304,6 +309,7 @@ class ServerAPI extends stdClass{ //Yay! I can add anything to this class in run $v = array("x" => floatval($v[0]), "y" => floatval($v[1]), "z" => floatval($v[2])); break; case "white-list": + case "invisible": $v = trim($v) == "true" ? true:false; break; } diff --git a/classes/PocketMinecraftServer.class.php b/classes/PocketMinecraftServer.class.php index b7ae717d6..3f129c51e 100644 --- a/classes/PocketMinecraftServer.class.php +++ b/classes/PocketMinecraftServer.class.php @@ -28,7 +28,7 @@ the Free Software Foundation, either version 3 of the License, or require_once("classes/Session.class.php"); class PocketMinecraftServer extends stdClass{ - var $tickMeasure, $preparedSQL, $seed, $protocol, $gamemode, $name, $maxClients, $clients, $eidCnt, $custom, $description, $motd, $timePerSecond, $responses, $spawn, $entities, $mapDir, $mapName, $map, $level, $tileEntities; + var $invisible, $tickMeasure, $preparedSQL, $seed, $protocol, $gamemode, $name, $maxClients, $clients, $eidCnt, $custom, $description, $motd, $timePerSecond, $responses, $spawn, $entities, $mapDir, $mapName, $map, $level, $tileEntities; private $database, $interface, $evCnt, $handCnt, $events, $handlers, $version, $serverType, $lastTick; function __construct($name, $gamemode = 1, $seed = false, $protocol = CURRENT_PROTOCOL, $port = 19132, $serverID = false, $version = CURRENT_VERSION){ $this->port = (int) $port; //19132 - 19135 @@ -47,6 +47,7 @@ class PocketMinecraftServer extends stdClass{ $this->events = array(); $this->handlers = array(); $this->map = false; + $this->invisible = false; $this->level = false; $this->difficulty = 1; $this->tileEntities = array(); @@ -312,6 +313,15 @@ class PocketMinecraftServer extends stdClass{ }else{ switch($packet["pid"]){ case 0x02: + if($this->invisible === true){ + $this->send(0x1c, array( + $data[0], + $this->serverID, + MAGIC, + $this->serverType, + ), false, $packet["ip"], $packet["port"]); + break; + } if(in_array($packet["ip"], $this->bannedIPs)){ $this->send(0x1c, array( $data[0], @@ -406,7 +416,7 @@ class PocketMinecraftServer extends stdClass{ public function process(){ while($this->stop === false){ - $packet = $this->interface->readPacket(); + $packet = @$this->interface->readPacket(); if($packet !== false){ $this->packetHandler($packet); }else{ diff --git a/common/default.properties b/common/default.properties index 5751f2792..762d1cbb2 100644 --- a/common/default.properties +++ b/common/default.properties @@ -2,6 +2,7 @@ server-name=PHP Server description= This is a Work in Progress custom server. motd=Welcome to PHP Server +invisible=false port=19132 protocol=CURRENT memory-limit=256M