From bf1d78d1e42a5e97b3e99b3f8611aa55e0095e29 Mon Sep 17 00:00:00 2001 From: Shoghi Cervantes Pueyo Date: Sun, 13 Jan 2013 17:18:18 +0100 Subject: [PATCH] ANSI Color codes --- src/API/PlayerAPI.php | 2 +- src/API/PluginAPI.php | 12 ++++++--- src/API/ServerAPI.php | 16 ++++++------ src/classes/{Data.class.php => Data.php} | 0 src/classes/Player.php | 5 ++-- src/classes/PocketMinecraftServer.php | 24 +++++++++--------- src/common/dependencies.php | 5 ++++ src/common/functions.php | 31 ++++++++++++++++++++++-- start.cmd | 8 ++++-- 9 files changed, 71 insertions(+), 32 deletions(-) rename src/classes/{Data.class.php => Data.php} (100%) diff --git a/src/API/PlayerAPI.php b/src/API/PlayerAPI.php index 7496c5f2b..c3b10dbd6 100644 --- a/src/API/PlayerAPI.php +++ b/src/API/PlayerAPI.php @@ -193,7 +193,7 @@ class PlayerAPI{ public function add($CID){ if(isset($this->server->clients[$CID])){ $player = $this->server->clients[$CID]; - console("[INFO] Player \"".$player->username."\" connected from ".$player->ip.":".$player->port); + console("[INFO] Player \"\x1b[33m".$player->username."\x1b[0m\" connected from \x1b[36m".$player->ip.":".$player->port."\x1b[0m"); $player->data = $this->getOffline($player->username); $this->server->query("INSERT OR REPLACE INTO players (clientID, ip, port, name) VALUES (".$player->clientID.", '".$player->ip."', ".$player->port.", '".$player->username."');"); } diff --git a/src/API/PluginAPI.php b/src/API/PluginAPI.php index 7e07ff768..740d0a008 100644 --- a/src/API/PluginAPI.php +++ b/src/API/PluginAPI.php @@ -76,7 +76,7 @@ class PluginAPI extends stdClass{ if(!isset($info["name"]) or !isset($info["version"]) or !isset($info["class"]) or !isset($info["author"])){ console("[ERROR] [PluginAPI] Failed parsing of ".basename($file)); } - console("[INFO] [PluginAPI] Loading plugin \"".$info["name"]."\" ".$info["version"]." by ".$info["author"]); + console("[INFO] [PluginAPI] Loading plugin \"\x1b[32m".$info["name"]."\x1b[0m\" \x1b[35m".$info["version"]."\x1b[0m by \x1b[36m".$info["author"]."\x1b[0m"); if(class_exists($info["class"])){ console("[ERROR] [PluginAPI] Failed loading plugin: class exists"); } @@ -85,11 +85,11 @@ class PluginAPI extends stdClass{ } $className = trim($info["class"]); if(isset($info["api"]) and $info["api"] !== true){ - console("[NOTICE] [PluginAPI] Plugin \"".$info["name"]."\" got raw access to Server methods"); + console("[NOTICE] [PluginAPI] Plugin \"\x1b[36m".$info["name"]."\x1b[0m\" got raw access to Server methods"); } $object = new $className($this->server->api, ((isset($info["api"]) and $info["api"] !== true) ? $this->server:false)); if(!($object instanceof Plugin)){ - console("[ERROR] [PluginAPI] Plugin \"".$info["name"]."\" doesn't use the Plugin Interface"); + console("[ERROR] [PluginAPI] Plugin \"\x1b[36m".$info["name"]."\x1b[0m\" doesn't use the Plugin Interface"); if(method_exists($object, "__destruct")){ $object->__destruct(); } @@ -149,7 +149,8 @@ class PluginAPI extends stdClass{ } public function init(){ - $this->server->event("server.start", array($this, "loadAll")); + $this->server->event("server.start", array($this, "initAll")); + $this->loadAll(); } public function loadAll(){ @@ -162,6 +163,9 @@ class PluginAPI extends stdClass{ } } } + } + + public function initAll(){ foreach($this->plugins as $p){ $p[0]->init(); //ARGHHH!!! Plugin loading randomly fails!! } diff --git a/src/API/ServerAPI.php b/src/API/ServerAPI.php index 59039a32a..7549f9e6d 100644 --- a/src/API/ServerAPI.php +++ b/src/API/ServerAPI.php @@ -109,7 +109,7 @@ class ServerAPI{ } if($this->getProperty("last-update") === false or ($this->getProperty("last-update") + 3600) < time()){ console("[INFO] Checking for new server version"); - console("[INFO] Last check: ".date("Y-m-d H:i:s", $this->getProperty("last-update"))); + console("[INFO] Last check: \x1b[36m".date("Y-m-d H:i:s", $this->getProperty("last-update"))."\x1b[0m"); $channel = "stable"; if($this->getProperty("update-channel") == "dev" or $this->getProperty("update-channel") == "development"){ $channel = "dev"; @@ -124,13 +124,13 @@ class ServerAPI{ $last = new DateTime($info["updated_at"]); $last = $last->getTimestamp(); if($last >= $this->getProperty("last-update") and $this->getProperty("last-update") !== false){ - console("[NOTICE] A new DEVELOPMENT version of PocketMine-MP has been released"); - console("[NOTICE] If you want to update, get the latest version at https://github.com/shoghicp/PocketMine-MP/archive/master.zip"); + console("[NOTICE] \x1b[33mA new DEVELOPMENT version of PocketMine-MP has been released"); + console("[NOTICE] \x1b[36mIf you want to update, get the latest version at https://github.com/shoghicp/PocketMine-MP/archive/master.zip"); console("[NOTICE] This message will dissapear when you issue the command \"/update-done\""); sleep(3); }else{ $this->setProperty("last-update", time()); - console("[INFO] This is the latest DEVELOPMENT version"); + console("[INFO] \x1b[36mThis is the latest DEVELOPMENT version"); } } }else{ @@ -151,14 +151,14 @@ class ServerAPI{ if($newest[0] !== -1){ $target = $info[$newest[0]]; - console("[NOTICE] A new STABLE version of PocketMine-MP has been released"); - console("[NOTICE] Version \"".(new VersionString($newest[1]))."\" #".$newest[1]." [".substr($target["commit"]["sha"], 0, 10)."]"); + console("[NOTICE] \x1b[33mA new STABLE version of PocketMine-MP has been released"); + console("[NOTICE] \x1b[36mVersion \"".(new VersionString($newest[1]))."\" #".$newest[1]." [".substr($target["commit"]["sha"], 0, 10)."]"); console("[NOTICE] Download it at ".$target["zipball_url"]); console("[NOTICE] This message will dissapear as soon as you update"); sleep(5); }else{ $this->setProperty("last-update", time()); - console("[INFO] This is the latest STABLE version"); + console("[INFO] \x1b[36mThis is the latest STABLE version"); } } @@ -471,7 +471,7 @@ class ServerAPI{ require_once($file); $this->$name = new $class($this->server); $this->apiList[] = $this->$name; - console("[INFO] API ".$name." [".$class."] loaded"); + console("[INFO] API \x1b[36m".$name."\x1b[0m [\x1b[30m".$class."\x1b[0m] loaded"); } } \ No newline at end of file diff --git a/src/classes/Data.class.php b/src/classes/Data.php similarity index 100% rename from src/classes/Data.class.php rename to src/classes/Data.php diff --git a/src/classes/Player.php b/src/classes/Player.php index ecc12035d..0b653556c 100644 --- a/src/classes/Player.php +++ b/src/classes/Player.php @@ -115,7 +115,7 @@ class Player{ if($msg === true){ $this->server->api->chat->broadcast($this->username." left the game"); } - console("[INFO] Session with ".$this->ip.":".$this->port." Client ID ".$this->clientID." closed due to ".$reason); + console("[INFO] Session with \x1b[36m".$this->ip.":".$this->port."\x1b[0m Client ID ".$this->clientID." closed due to ".$reason); $this->server->api->player->remove($this->CID); } } @@ -286,7 +286,7 @@ class Player{ } $o = $this->server->api->player->getOffline($this->username); if($this->server->whitelist !== false and (!in_array($this->username, $this->server->whitelist)/* or ($o["lastID"] != 0 and $o["lastID"] != $this->clientID)*/)){ - $this->close("\"".$this->username."\" not being on white-list", false); + $this->close("\"\x1b[33m".$this->username."\x1b[0m\" not being on white-list", false); break; } $u = $this->server->api->player->get($this->username); @@ -341,7 +341,6 @@ class Player{ $this->evid[] = $this->server->event("player.equipment.change", array($this, "eventHandler")); $this->evid[] = $this->server->event("player.pickup", array($this, "eventHandler")); $this->evid[] = $this->server->event("block.change", array($this, "eventHandler")); - console("[DEBUG] Player with EID ".$this->eid." \"".$this->username."\" spawned!", true, true, 2); $this->eventHandler(new Container($this->server->motd), "server.chat"); if($this->MTU <= 548){ diff --git a/src/classes/PocketMinecraftServer.php b/src/classes/PocketMinecraftServer.php index 8fd98e623..bd7624a96 100644 --- a/src/classes/PocketMinecraftServer.php +++ b/src/classes/PocketMinecraftServer.php @@ -31,7 +31,7 @@ class PocketMinecraftServer{ private function load(){ $this->version = new VersionString(); - console("[INFO] PocketMine-MP ".MAJOR_VERSION." #".$this->version->getNumber()." by @shoghicp, LGPL License", true, true, 0); + console("[INFO] \x1b[33;1mPocketMine-MP ".MAJOR_VERSION." #".$this->version->getNumber()." by @shoghicp, LGPL License", true, true, 0); console("[DEBUG] Target Minecraft PE: ".CURRENT_MINECRAFT_VERSION.", protocol #".CURRENT_PROTOCOL, true, true, 2); console("[INFO] Starting Minecraft PE Server at *:".$this->port); if($this->port < 19132 or $this->port > 19135){ @@ -71,8 +71,8 @@ class PocketMinecraftServer{ $this->setType("normal"); $this->interface = new MinecraftInterface("255.255.255.255", $this->port, true, false); $this->reloadConfig(); - console("[INFO] Server Name: ".$this->name); - console("[DEBUG] Server GUID: ".$this->serverID, true, true, 2); + console("[INFO] Server Name: \x1b[36m".$this->name."\x1b[0m"); + console("[DEBUG] Server ID: ".$this->serverID, true, true, 2); $this->stop = false; } @@ -254,24 +254,24 @@ class PocketMinecraftServer{ $this->levelData["SpawnZ"] = $this->spawn["z"]; } $this->levelData["Time"] = $this->time; - console("[INFO] Spawn: X ".$this->levelData["SpawnX"]." Y ".$this->levelData["SpawnY"]." Z ".$this->levelData["SpawnZ"]); - console("[INFO] Time: ".$this->time); - console("[INFO] Seed: ".$this->seed); - console("[INFO] Gamemode: ".($this->gamemode === 0 ? "survival":"creative")); + console("[INFO] Spawn: X \x1b[36m".$this->levelData["SpawnX"]."\x1b[0m Y \x1b[36m".$this->levelData["SpawnY"]."\x1b[0m Z \x1b[36m".$this->levelData["SpawnZ"]."\x1b[0m"); + console("[INFO] Time: \x1b[36m".$this->time."\x1b[0m"); + console("[INFO] Seed: \x1b[36m".$this->seed."\x1b[0m"); + console("[INFO] Gamemode: \x1b[36m".($this->gamemode === 0 ? "survival":"creative")."\x1b[0m"); $d = array(0 => "peaceful", 1 => "easy", 2 => "normal", 3 => "hard"); - console("[INFO] Difficulty: ".$d[$this->difficulty]); + console("[INFO] Difficulty: \x1b[36m".$d[$this->difficulty]."\x1b[0m"); console("[INFO] Loading map..."); $this->map = new ChunkParser(); if(!$this->map->loadFile($this->mapDir."chunks.dat")){ - console("[ERROR] Couldn't load the map \"".$this->levelData["LevelName"]."\"!", true, true, 0); + console("[ERROR] Couldn't load the map \"\x1b[32m".$this->levelData["LevelName"]."\x1b[0m\"!", true, true, 0); $this->map = false; }else{ $this->map->loadMap(); } }else{ - console("[INFO] Time: ".$this->time); - console("[INFO] Seed: ".$this->seed); - console("[INFO] Gamemode: ".($this->gamemode === 0 ? "survival":"creative")); + console("[INFO] Time: \x1b[36m".$this->time."\x1b[0m"); + console("[INFO] Seed: \x1b[36m".$this->seed."\x1b[0m"); + console("[INFO] Gamemode: \x1b[36m".($this->gamemode === 0 ? "survival":"creative")."\x1b[0m"); } } diff --git a/src/common/dependencies.php b/src/common/dependencies.php index 1119f1d81..d42f943de 100644 --- a/src/common/dependencies.php +++ b/src/common/dependencies.php @@ -27,6 +27,11 @@ the Free Software Foundation, either version 3 of the License, or require_once(dirname(__FILE__)."/config.php"); require_once("common/functions.php"); +if(strpos(strtoupper(php_uname("s")), "WIN") === false or arg("enable-ansi", false) === true){ + define("ENABLE_ANSI", true); +}else{ + define("ENABLE_ANSI", false); +} //set_error_handler("error_handler"); $errors = 0; diff --git a/src/common/functions.php b/src/common/functions.php index e237a82a1..2b4f0231f 100644 --- a/src/common/functions.php +++ b/src/common/functions.php @@ -167,9 +167,36 @@ function arguments ( $args ){ function console($message, $EOL = true, $log = true, $level = 1){ if(!defined("DEBUG") or DEBUG >= $level){ $message .= $EOL === true ? PHP_EOL:""; - $message = date("H:i:s"). " ". $message; + $time = (ENABLE_ANSI === true ? "\x1b[36m".date("H:i:s")."\x1b[0m":date("H:i:s")) . " "; + $replaced = preg_replace('/\x1b\[[0-9;]*m/', "", $time . $message); if($log === true and (!defined("LOG") or LOG === true)){ - logg($message, "console", false, $level); + logg($replaced, "console", false, $level); + } + if(ENABLE_ANSI === true){ + if(preg_match("/\[([a-zA-Z0-9]*)\]/", $message, $matches) > 0){ + $add = "\x1b"; + switch($matches[1]){ + case "ERROR": + $add .= "[31;1m"; + break; + case "INTERNAL": + case "DEBUG": + $add .= "[30;1m"; + break; + case "WARNING": + $add .= "[33;1m"; + break; + case "NOTICE": + $add .= "[37;1m"; + break; + default: + $add = ""; + break; + } + $message = $time . $add . $message . "\x1b[0m"; + } + }else{ + $message = $replaced; } echo $message; } diff --git a/start.cmd b/start.cmd index 594fe32e3..e84c20f4a 100644 --- a/start.cmd +++ b/start.cmd @@ -1,6 +1,6 @@ @echo off TITLE PocketMine-MP Server - by @shoghicp -COLOR F0 +COLOR 0F mode con: cols=90 echo. @@ -26,6 +26,10 @@ if not "%PHPOUTPUT%"=="1" ( echo [ERROR] Couldn't find PHP binary in PATH. ping 127.0.0.1 -n 3 -w 1000>nul ) else ( -START /B /WAIT php -d enable_dl=On PocketMine-MP.php + if exist bin\ansicon.exe ( + bin\ansicon.exe php -d enable_dl=On PocketMine-MP.php --enable-ansi + ) else ( + php -d enable_dl=On PocketMine-MP.php + ) ) pause