More langs :D

This commit is contained in:
Shoghi Cervantes 2015-04-11 14:59:15 +02:00
parent c2138aa30c
commit 3b6e10b759
No known key found for this signature in database
GPG Key ID: 78464DB0A7837F89
12 changed files with 153 additions and 60 deletions

View File

@ -1104,7 +1104,7 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
if(!$revert and !$this->isSleeping()){ if(!$revert and !$this->isSleeping()){
if($diff > 0.0625){ if($diff > 0.0625){
$revert = true; $revert = true;
$this->server->getLogger()->warning($this->getName()." moved wrongly!"); $this->server->getLogger()->warning($this->getServer()->getLanguage()->translateString("pocketmine.player.invalidMove", [$this->getName()]));
} }
} }
}elseif($diff > 0){ }elseif($diff > 0){
@ -1533,7 +1533,16 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
$pk->difficulty = $this->server->getDifficulty(); $pk->difficulty = $this->server->getDifficulty();
$this->dataPacket($pk); $this->dataPacket($pk);
$this->server->getLogger()->info(TextFormat::AQUA . $this->username . TextFormat::WHITE . "[/" . $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->getLogger()->info($this->getServer()->getLanguage()->translateString("pocketmine.player.logIn", [
TextFormat::AQUA . $this->username . TextFormat::WHITE,
$this->ip,
$this->port,
$this->id,
$this->level->getName(),
round($this->x, 4),
round($this->y, 4),
round($this->z, 4)
]));
$this->orderChunks(); $this->orderChunks();
@ -1968,7 +1977,7 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
if($target instanceof Entity and $this->getGamemode() !== Player::VIEW and $this->dead !== true and $target->dead !== true){ if($target instanceof Entity and $this->getGamemode() !== Player::VIEW and $this->dead !== true and $target->dead !== true){
if($target instanceof DroppedItem or $target instanceof Arrow){ if($target instanceof DroppedItem or $target instanceof Arrow){
$this->kick("Attempting to attack an invalid entity"); $this->kick("Attempting to attack an invalid entity");
$this->server->getLogger()->warning("Player " . $this->getName() . " tried to attack an invalid entity"); $this->server->getLogger()->warning($this->getServer()->getLanguage()->translateString("pocketmine.player.invalidEntity", [$this->getName()]));
return; return;
} }
@ -2507,7 +2516,12 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
$this->server->getPluginManager()->unsubscribeFromPermission(Server::BROADCAST_CHANNEL_USERS, $this); $this->server->getPluginManager()->unsubscribeFromPermission(Server::BROADCAST_CHANNEL_USERS, $this);
$this->spawned = false; $this->spawned = false;
$this->server->getLogger()->info(TextFormat::AQUA . $this->getName() . TextFormat::WHITE . "[/" . $this->ip . ":" . $this->port . "] logged out due to " . str_replace(["\n", "\r"], [" ", ""], $this->getServer()->getLanguage()->translateString($reason))); $this->server->getLogger()->info($this->getServer()->getLanguage()->translateString("pocketmine.player.logOut", [
TextFormat::AQUA . $this->getName() . TextFormat::WHITE,
$this->ip,
$this->port,
$this->getServer()->getLanguage()->translateString($reason)
]));
$this->windows = new \SplObjectStorage(); $this->windows = new \SplObjectStorage();
$this->windowIndex = []; $this->windowIndex = [];
$this->usedChunks = []; $this->usedChunks = [];

View File

@ -695,10 +695,10 @@ class Server{
return $nbt->getData(); return $nbt->getData();
}catch(\Exception $e){ //zlib decode error / corrupt data }catch(\Exception $e){ //zlib decode error / corrupt data
rename($path . "$name.dat", $path . "$name.dat.bak"); rename($path . "$name.dat", $path . "$name.dat.bak");
$this->logger->warning("Corrupted data found for \"" . $name . "\", creating new profile"); $this->logger->notice($this->getLanguage()->translateString("pocketmine.data.playerCorrupted", [$name]));
} }
}else{ }else{
$this->logger->notice("Player data not found for \"" . $name . "\", creating new profile"); $this->logger->notice($this->getLanguage()->translateString("pocketmine.data.playerNotFound", [$name]));
} }
$spawn = $this->getDefaultLevel()->getSafeSpawn(); $spawn = $this->getDefaultLevel()->getSafeSpawn();
$nbt = new Compound(false, [ $nbt = new Compound(false, [
@ -750,7 +750,7 @@ class Server{
$nbt["SpawnX"] = (int) $data->get("spawn")["x"]; $nbt["SpawnX"] = (int) $data->get("spawn")["x"];
$nbt["SpawnY"] = (int) $data->get("spawn")["y"]; $nbt["SpawnY"] = (int) $data->get("spawn")["y"];
$nbt["SpawnZ"] = (int) $data->get("spawn")["z"]; $nbt["SpawnZ"] = (int) $data->get("spawn")["z"];
$this->logger->notice("Old Player data found for \"" . $name . "\", upgrading profile"); $this->logger->notice($this->getLanguage()->translateString("pocketmine.data.playerOld", [$name]));
foreach($data->get("inventory") as $slot => $item){ foreach($data->get("inventory") as $slot => $item){
if(count($item) === 3){ if(count($item) === 3){
$nbt->Inventory[$slot + 9] = new Compound(false, [ $nbt->Inventory[$slot + 9] = new Compound(false, [
@ -805,7 +805,7 @@ class Server{
$nbt->setData($nbtTag); $nbt->setData($nbtTag);
file_put_contents($this->getDataPath() . "players/" . strtolower($name) . ".dat", $nbt->writeCompressed()); file_put_contents($this->getDataPath() . "players/" . strtolower($name) . ".dat", $nbt->writeCompressed());
}catch(\Exception $e){ }catch(\Exception $e){
$this->logger->critical("Could not save player " . $name . ": " . $e->getMessage()); $this->logger->critical($this->getLanguage()->translateString("pocketmine.data.saveError", [$name, $e->getMessage()]));
if(\pocketmine\DEBUG > 1 and $this->logger instanceof MainLogger){ if(\pocketmine\DEBUG > 1 and $this->logger instanceof MainLogger){
$this->logger->logException($e); $this->logger->logException($e);
} }
@ -982,7 +982,7 @@ class Server{
if($this->isLevelLoaded($name)){ if($this->isLevelLoaded($name)){
return true; return true;
}elseif(!$this->isLevelGenerated($name)){ }elseif(!$this->isLevelGenerated($name)){
$this->logger->notice("Level \"" . $name . "\" not found"); $this->logger->notice($this->getLanguage()->translateString("pocketmine.level.notFound", [$name]));
return false; return false;
} }
@ -992,7 +992,7 @@ class Server{
$provider = LevelProviderManager::getProvider($path); $provider = LevelProviderManager::getProvider($path);
if($provider === null){ if($provider === null){
$this->logger->error("Could not load level \"" . $name . "\": Unknown provider"); $this->logger->error($this->getLanguage()->translateString("pocketmine.level.loadError", [$name, "Unknown provider"]));
return false; return false;
} }
@ -1004,7 +1004,8 @@ class Server{
try{ try{
$level = new Level($this, $name, $path, $provider); $level = new Level($this, $name, $path, $provider);
}catch(\Exception $e){ }catch(\Exception $e){
$this->logger->error("Could not load level \"" . $name . "\": " . $e->getMessage());
$this->logger->error($this->getLanguage()->translateString("pocketmine.level.loadError", [$name, $e->getMessage()]));
if($this->logger instanceof MainLogger){ if($this->logger instanceof MainLogger){
$this->logger->logException($e); $this->logger->logException($e);
} }
@ -1152,7 +1153,7 @@ class Server{
$level->initLevel(); $level->initLevel();
}catch(\Exception $e){ }catch(\Exception $e){
$this->logger->error("Could not generate level \"" . $name . "\": " . $e->getMessage()); $this->logger->error($this->getLanguage()->translateString("pocketmine.level.generateError", [$name, $e->getMessage()]));
if($this->logger instanceof MainLogger){ if($this->logger instanceof MainLogger){
$this->logger->logException($e); $this->logger->logException($e);
} }
@ -1163,7 +1164,7 @@ class Server{
$this->getPluginManager()->callEvent(new LevelLoadEvent($level)); $this->getPluginManager()->callEvent(new LevelLoadEvent($level));
$this->getLogger()->notice("Spawn terrain for level \"$name\" is being generated in the background"); $this->getLogger()->notice($this->getLanguage()->translateString("pocketmine.level.backgroundGeneration", [$name]));
$centerX = $level->getSpawnLocation()->getX() >> 4; $centerX = $level->getSpawnLocation()->getX() >> 4;
$centerZ = $level->getSpawnLocation()->getZ() >> 4; $centerZ = $level->getSpawnLocation()->getZ() >> 4;
@ -1477,7 +1478,6 @@ class Server{
$this->console = new CommandReader(); $this->console = new CommandReader();
$version = new VersionString($this->getPocketMineVersion()); $version = new VersionString($this->getPocketMineVersion());
$this->logger->info("Starting Minecraft: PE server version " . TextFormat::AQUA . $this->getVersion());
$this->logger->info("Loading pocketmine.yml..."); $this->logger->info("Loading pocketmine.yml...");
if(!file_exists($this->dataPath . "pocketmine.yml")){ if(!file_exists($this->dataPath . "pocketmine.yml")){
@ -1517,6 +1517,8 @@ class Server{
$this->baseLang = new BaseLang($this->getProperty("settings.settings.language", "en")); $this->baseLang = new BaseLang($this->getProperty("settings.settings.language", "en"));
$this->logger->info($this->getLanguage()->translateString("pocketmine.server.start", [TextFormat::AQUA . $this->getVersion()]));
ServerScheduler::$WORKERS = $this->getProperty("settings.async-workers", ServerScheduler::$WORKERS); ServerScheduler::$WORKERS = $this->getProperty("settings.async-workers", ServerScheduler::$WORKERS);
if($this->getProperty("network.batch-threshold", 256) >= 0){ if($this->getProperty("network.batch-threshold", 256) >= 0){
@ -1576,7 +1578,7 @@ class Server{
@cli_set_process_title($this->getName() . " " . $this->getPocketMineVersion()); @cli_set_process_title($this->getName() . " " . $this->getPocketMineVersion());
} }
$this->logger->info("Starting Minecraft PE server on " . ($this->getIp() === "" ? "*" : $this->getIp()) . ":" . $this->getPort()); $this->logger->info($this->getLanguage()->translateString("pocketmine.server.networkStart", [$this->getIp() === "" ? "*" : $this->getIp(), $this->getPort()]));
define("BOOTUP_RANDOM", @Utils::getRandomBytes(16)); define("BOOTUP_RANDOM", @Utils::getRandomBytes(16));
$this->serverID = Binary::readLong(substr(Utils::getUniqueID(true, $this->getIp() . $this->getPort()), 0, 8)); $this->serverID = Binary::readLong(substr(Utils::getUniqueID(true, $this->getIp() . $this->getPort()), 0, 8));
@ -1585,8 +1587,13 @@ class Server{
$this->network->registerInterface(new RakLibInterface($this)); $this->network->registerInterface(new RakLibInterface($this));
$this->logger->info("This server is running " . $this->getName() . " version " . ($version->isDev() ? TextFormat::YELLOW : "") . $version->get(true) . TextFormat::WHITE . " \"" . $this->getCodename() . "\" (API " . $this->getApiVersion() . ")"); $this->logger->info($this->getLanguage()->translateString("pocketmine.server.info", [
$this->logger->info($this->getName() . " is distributed under the LGPL License"); $this->getName(),
($version->isDev() ? TextFormat::YELLOW : "") . $version->get(true) . TextFormat::WHITE,
$this->getCodename(),
$this->getApiVersion()
]));
$this->logger->info($this->getLanguage()->translateString("pocketmine.server.license", [$this->getName()]));
PluginManager::$pluginParentTimer = new TimingsHandler("** Plugins"); PluginManager::$pluginParentTimer = new TimingsHandler("** Plugins");
Timings::init(); Timings::init();
@ -1623,7 +1630,7 @@ class Server{
LevelProviderManager::addProvider($this, Anvil::class); LevelProviderManager::addProvider($this, Anvil::class);
LevelProviderManager::addProvider($this, McRegion::class); LevelProviderManager::addProvider($this, McRegion::class);
if(extension_loaded("leveldb")){ if(extension_loaded("leveldb")){
$this->logger->debug("Enabling LevelDB support"); $this->logger->debug($this->getLanguage()->translateString("pocketmine.debug.enable"));
LevelProviderManager::addProvider($this, LevelDB::class); LevelProviderManager::addProvider($this, LevelDB::class);
} }
@ -1668,7 +1675,7 @@ class Server{
$this->properties->save(); $this->properties->save();
if(!($this->getDefaultLevel() instanceof Level)){ if(!($this->getDefaultLevel() instanceof Level)){
$this->getLogger()->emergency("No default level has been loaded"); $this->getLogger()->emergency($this->getLanguage()->translateString("pocketmine.level.defaultError"));
$this->forceShutdown(); $this->forceShutdown();
return; return;
@ -2007,9 +2014,9 @@ class Server{
$this->getScheduler()->scheduleRepeatingTask(new CallbackTask([$this, "checkTicks"]), 20 * 5); $this->getScheduler()->scheduleRepeatingTask(new CallbackTask([$this, "checkTicks"]), 20 * 5);
$this->logger->info("Default game type: " . $this->getLanguage()->get(self::getGamemodeString($this->getGamemode()))); $this->logger->info($this->getLanguage()->translateString("pocketmine.server.defaultGameMode", [self::getGamemodeString($this->getGamemode())]));
$this->logger->info("Done (" . round(microtime(true) - \pocketmine\START_TIME, 3) . 's)! For help, type "help" or "?"'); $this->logger->info($this->getLanguage()->translateString("pocketmine.server.startFinished", [round(microtime(true) - \pocketmine\START_TIME, 3)]));
$this->tickProcessor(); $this->tickProcessor();
$this->forceShutdown(); $this->forceShutdown();
@ -2025,7 +2032,7 @@ class Server{
public function checkTicks(){ public function checkTicks(){
if($this->getTicksPerSecond() < 12){ if($this->getTicksPerSecond() < 12){
$this->logger->warning("Can't keep up! Is the server overloaded?"); $this->logger->warning($this->getLanguage()->translateString("pocketmine.server.tickOverload"));
} }
} }
@ -2079,15 +2086,15 @@ class Server{
ini_set("error_reporting", 0); ini_set("error_reporting", 0);
ini_set("memory_limit", -1); //Fix error dump not dumped on memory problems ini_set("memory_limit", -1); //Fix error dump not dumped on memory problems
$this->logger->emergency("An unrecoverable error has occurred and the server has crashed. Creating a crash dump"); $this->logger->emergency($this->getLanguage()->translateString("pocketmine.crash.create"));
try{ try{
$dump = new CrashDump($this); $dump = new CrashDump($this);
}catch(\Exception $e){ }catch(\Exception $e){
$this->logger->critical("Could not create Crash Dump: " . $e->getMessage()); $this->logger->critical($this->getLanguage()->translateString("pocketmine.crash.error", $e->getMessage()));
return; return;
} }
$this->logger->emergency("Please submit the \"" . $dump->getPath() . "\" file to the Bug Reporting page. Give as much info as you can."); $this->logger->emergency($this->getLanguage()->translateString("pocketmine.crash.submit", [$dump->getPath()]));
if($this->getProperty("auto-report.enabled", true) !== false){ if($this->getProperty("auto-report.enabled", true) !== false){
@ -2116,7 +2123,7 @@ class Server{
if(($data = json_decode($reply)) !== false and isset($data->crashId)){ if(($data = json_decode($reply)) !== false and isset($data->crashId)){
$reportId = $data->crashId; $reportId = $data->crashId;
$reportUrl = $data->crashUrl; $reportUrl = $data->crashUrl;
$this->logger->emergency("The crash dump has been automatically submitted to the Crash Archive. You can view it on $reportUrl or use the ID #$reportId."); $this->logger->emergency($this->getLanguage()->translateString("pocketmine.crash.archive", [$reportUrl, $reportId]));
} }
} }
} }
@ -2170,7 +2177,7 @@ class Server{
} }
} }
}catch(\Exception $e){ }catch(\Exception $e){
$this->logger->critical("Could not tick level " . $level->getName() . ": " . $e->getMessage()); $this->logger->critical($this->getLanguage()->translateString("pocketmine.level.tickError", [$level->getName(), $e->getMessage()]));
if(\pocketmine\DEBUG > 1 and $this->logger instanceof MainLogger){ if(\pocketmine\DEBUG > 1 and $this->logger instanceof MainLogger){
$this->logger->logException($e); $this->logger->logException($e);
} }

View File

@ -289,9 +289,9 @@ abstract class Command{
public static function broadcastCommandMessage(CommandSender $source, $message, $sendToSource = true){ public static function broadcastCommandMessage(CommandSender $source, $message, $sendToSource = true){
if($message instanceof TextContainer){ if($message instanceof TextContainer){
$m = clone $message; $m = clone $message;
$result = "[".$source->getName().": ".$m->getText()."]"; $result = "[".$source->getName().": ".($source->getServer()->getLanguage()->get($m->getText()) !== $m->getText() ? "%" : "") . $m->getText() ."]";
$users = Server::getInstance()->getPluginManager()->getPermissionSubscriptions(Server::BROADCAST_CHANNEL_ADMINISTRATIVE); $users = $source->getServer()->getPluginManager()->getPermissionSubscriptions(Server::BROADCAST_CHANNEL_ADMINISTRATIVE);
$colored = TextFormat::GRAY . TextFormat::ITALIC . $result; $colored = TextFormat::GRAY . TextFormat::ITALIC . $result;
$m->setText($result); $m->setText($result);
@ -299,7 +299,7 @@ abstract class Command{
$m->setText($colored); $m->setText($colored);
$colored = clone $m; $colored = clone $m;
}else{ }else{
$users = Server::getInstance()->getPluginManager()->getPermissionSubscriptions(Server::BROADCAST_CHANNEL_ADMINISTRATIVE); $users = $source->getServer()->getPluginManager()->getPermissionSubscriptions(Server::BROADCAST_CHANNEL_ADMINISTRATIVE);
$result = new TranslationContainer("chat.type.admin", [$source->getName(), $message]); $result = new TranslationContainer("chat.type.admin", [$source->getName(), $message]);
$colored = new TranslationContainer(TextFormat::GRAY . TextFormat::ITALIC . "%chat.type.admin", [$source->getName(), $message]); $colored = new TranslationContainer(TextFormat::GRAY . TextFormat::ITALIC . "%chat.type.admin", [$source->getName(), $message]);
} }

View File

@ -21,6 +21,7 @@
namespace pocketmine\command; namespace pocketmine\command;
use pocketmine\event\TranslationContainer;
use pocketmine\Server; use pocketmine\Server;
use pocketmine\utils\MainLogger; use pocketmine\utils\MainLogger;
use pocketmine\utils\TextFormat; use pocketmine\utils\TextFormat;
@ -49,7 +50,7 @@ class FormattedCommandAlias extends Command{
if($e instanceof \InvalidArgumentException){ if($e instanceof \InvalidArgumentException){
$sender->sendMessage(TextFormat::RED . $e->getMessage()); $sender->sendMessage(TextFormat::RED . $e->getMessage());
}else{ }else{
$sender->sendMessage(TextFormat::RED . "An internal error occurred while attempting to perform this command"); $sender->sendMessage(new TranslationContainer(TextFormat::RED . "%commands.generic.exception"));
$logger = $sender->getServer()->getLogger(); $logger = $sender->getServer()->getLogger();
if($logger instanceof MainLogger){ if($logger instanceof MainLogger){
$logger->logException($e); $logger->logException($e);

View File

@ -189,7 +189,7 @@ class SimpleCommandMap implements CommandMap{
$target->execute($sender, $sentCommandLabel, $args); $target->execute($sender, $sentCommandLabel, $args);
}catch(\Exception $e){ }catch(\Exception $e){
$sender->sendMessage(new TranslationContainer(TextFormat::RED . "%commands.generic.exception")); $sender->sendMessage(new TranslationContainer(TextFormat::RED . "%commands.generic.exception"));
$this->server->getLogger()->critical("Unhandled exception executing command '" . $commandLine . "' in " . $target . ": " . $e->getMessage()); $this->server->getLogger()->critical($this->server->getLanguage()->translateString("pocketmine.command.exception", [$commandLine, (string) $target, $e->getMessage()]));
$logger = $sender->getServer()->getLogger(); $logger = $sender->getServer()->getLogger();
if($logger instanceof MainLogger){ if($logger instanceof MainLogger){
$logger->logException($e); $logger->logException($e);
@ -232,7 +232,7 @@ class SimpleCommandMap implements CommandMap{
foreach($values as $alias => $commandStrings){ foreach($values as $alias => $commandStrings){
if(strpos($alias, ":") !== false or strpos($alias, " ") !== false){ if(strpos($alias, ":") !== false or strpos($alias, " ") !== false){
$this->server->getLogger()->warning("Could not register alias " . $alias . " because it contains illegal characters"); $this->server->getLogger()->warning($this->server->getLanguage()->translateString("pocketmine.command.alias.illegal", [$alias]));
continue; continue;
} }
@ -254,7 +254,7 @@ class SimpleCommandMap implements CommandMap{
} }
if(strlen($bad) > 0){ if(strlen($bad) > 0){
$this->server->getLogger()->warning("Could not register alias " . $alias . " because it contains commands that do not exist: " . $bad); $this->server->getLogger()->warning($this->server->getLanguage()->translateString("pocketmine.command.alias.notFound", [$alias, $bad]));
continue; continue;
} }

View File

@ -89,7 +89,7 @@ class BaseLang{
$baseText = $this->parseTranslation( $baseText !== null ? $baseText : $str); $baseText = $this->parseTranslation( $baseText !== null ? $baseText : $str);
foreach($params as $i => $p){ foreach($params as $i => $p){
$baseText = str_replace("{%$i}", $this->parseTranslation($p), $baseText); $baseText = str_replace("{%$i}", $this->parseTranslation((string) $p), $baseText);
} }
return $baseText; return $baseText;

View File

@ -183,3 +183,64 @@ commands.setworldspawn.usage=/setworldspawn [<x> <y> <z>]
commands.setworldspawn.success=Set the world spawn point to ({%0}, {%1}, {%2}) commands.setworldspawn.success=Set the world spawn point to ({%0}, {%1}, {%2})
# -------------------- PocketMine language files, only for console --------------------
pocketmine.data.playerNotFound=Player data not found for "{%0}", creating new profile
pocketmine.data.playerCorrupted=Corrupted data found for "{%0}", creating new profile
pocketmine.data.playerOld=Old Player data found for "{%0}", upgrading profile
pocketmine.data.saveError=Could not save player "{%0}": {%1}
pocketmine.level.notFound=Level "{%0}" not found
pocketmine.level.loadError=Could not load level "{%0}": {%1}
pocketmine.level.generationError=Could not generate level "{%0}": {%1}
pocketmine.level.tickError=Could not tick level "{%0}": {%1}
pocketmine.level.chunkUnloadError=Error while unloading a chunk: {%0}
pocketmine.level.backgroundGeneration=Spawn terrain for level "{%0}" is being generated in the background
pocketmine.level.defaultError=No default level has been loaded
pocketmine.level.preparing=Preparing level "{%0}"
pocketmine.level.unloading=Unloading level "{%0}"
pocketmine.server.start=Starting Minecraft: PE server version {%0}
pocketmine.server.networkError=[Network] Stopped interface {%0} due to {%1}
pocketmine.server.networkStart=Opening server on {%0}:{%1}
pocketmine.server.info=This server is running {%0} version {%1} "{%2}" (API {%3})
pocketmine.server.license={%0} is distributed under the LGPL License
pocketmine.server.tickOverload=Can't keep up! Is the server overloaded?
pocketmine.server.startFinished=Done ({%0}s)! For help, type "help" or "?"
pocketmine.server.defaultGameMode=Default game type: {%0}
pocketmine.server.query.start=Starting GS4 status listener
pocketmine.server.query.info=Setting query port to {%0}
pocketmine.server.query.running=Query running on {%0}:{%1}
pocketmine.command.alias.illegal=Could not register alias {%0} because it contains illegal characters
pocketmine.command.alias.notFound=Could not register alias {%0} because it contains commands that do not exist: {%1}
pocketmine.command.exception=Unhandled exception executing command '{%0}' in {%1}: {%2}
pocketmine.crash.create=An unrecoverable error has occurred and the server has crashed. Creating a crash dump
pocketmine.crash.error=Could not create crash dump: {%0}
pocketmine.crash.submit=Please upload the "{%0}" file to the Crash Archive and submit the link to the Bug Reporting page. Give as much info as you can.
pocketmine.crash.archive=The crash dump has been automatically submitted to the Crash Archive. You can view it on {%0} or use the ID #{%1}.
pocketmine.debug.enable=LevelDB support enabled
pocketmine.player.invalidMove={%0} moved wrongly!
pocketmine.player.logIn={%0}[/{%1}:{%2}] logged in with entity id {%3} at ({%4}, {%5}, {%6}, {%7})
pocketmine.player.logOut={%0}[/{%1}:{%2}] logged out due to {%3}
pocketmine.player.invalidEntity={%0} tried to attack an invalid entity
pocketmine.plugin.load=Loading {%0}
pocketmine.plugin.enable=Enabling {%0}
pocketmine.plugin.disable=Disabling {%0}
pocketmine.plugin.restrictedName=Restricted name
pocketmine.plugin.incompatibleAPI=Incompatible API version
pocketmine.plugin.unknownDependency=Unknown dependency
pocketmine.plugin.circularDependency=Circular dependency detected
pocketmine.plugin.genericLoadError=Could not load plugin '{%0}'
pocketmine.plugin.spacesDiscouraged=Plugin '{%0}' uses spaces in its name, this is discouraged
pocketmine.plugin.loadError=Could not load plugin '{%0}': {%1}
pocketmine.plugin.duplicateError=Could not load plugin '{%0}': plugin exists
pocketmine.plugin.fileError=Could not load '{%0}' in folder '{%1}': {%2}
pocketmine.plugin.commandError=Could not load command {%0} for plugin {%1}
pocketmine.plugin.aliasError=Could not load alias {%0} for plugin {%1}
pocketmine.plugin.deprecatedEvent=Plugin '{%0}' has registered a listener for '{%1}' on method '{%2}', but the event is Deprecated.
pocketmine.plugin.eventError="Could not pass event '{%0}' to '{%1}': {%2} on {%3}

View File

@ -296,7 +296,7 @@ class Level implements ChunkManager, Metadatable{
}else{ }else{
throw new LevelException("Provider is not a subclass of LevelProvider"); throw new LevelException("Provider is not a subclass of LevelProvider");
} }
$this->server->getLogger()->info("Preparing level \"" . $this->provider->getName() . "\""); $this->server->getLogger()->info($this->server->getLanguage()->translateString("pocketmine.level.preparing", [$this->provider->getName()]));
$this->generator = Generator::getGenerator($this->provider->getGenerator()); $this->generator = Generator::getGenerator($this->provider->getGenerator());
$this->blockOrder = $provider::getProviderOrder(); $this->blockOrder = $provider::getProviderOrder();
@ -439,7 +439,7 @@ class Level implements ChunkManager, Metadatable{
return false; return false;
} }
$this->server->getLogger()->info("Unloading level \"" . $this->getName() . "\""); $this->server->getLogger()->info($this->server->getLanguage()->translateString("pocketmine.level.unloading", [$this->getName()]));
$defaultLevel = $this->server->getDefaultLevel(); $defaultLevel = $this->server->getDefaultLevel();
foreach($this->getPlayers() as $player){ foreach($this->getPlayers() as $player){
if($this === $defaultLevel or $defaultLevel === null){ if($this === $defaultLevel or $defaultLevel === null){
@ -2133,7 +2133,7 @@ class Level implements ChunkManager, Metadatable{
$this->provider->unloadChunk($x, $z, $safe); $this->provider->unloadChunk($x, $z, $safe);
}catch(\Exception $e){ }catch(\Exception $e){
$logger = $this->server->getLogger(); $logger = $this->server->getLogger();
$logger->error("Error when unloading a chunk: " . $e->getMessage()); $logger->error($this->server->getLanguage()->translateString("pocketmine.level.chunkUnloadError", [$e->getMessage()]));
if($logger instanceof MainLogger){ if($logger instanceof MainLogger){
$logger->logException($e); $logger->logException($e);
} }

View File

@ -144,7 +144,7 @@ class Network{
$interface->emergencyShutdown(); $interface->emergencyShutdown();
$this->unregisterInterface($interface); $this->unregisterInterface($interface);
$logger->critical("[Network] Stopped interface ". get_class($interface) ." due to ". $e->getMessage()); $logger->critical($this->server->getLanguage()->translateString("pocketmine.server.networkError", [get_class($interface), $e->getMessage()]));
} }
} }
} }

View File

@ -38,10 +38,10 @@ class QueryHandler{
public function __construct(){ public function __construct(){
$this->server = Server::getInstance(); $this->server = Server::getInstance();
$this->server->getLogger()->info("Starting GS4 status listener"); $this->server->getLogger()->info($this->server->getLanguage()->translateString("pocketmine.server.query.start"));
$addr = ($ip = $this->server->getIp()) != "" ? $ip : "0.0.0.0"; $addr = ($ip = $this->server->getIp()) != "" ? $ip : "0.0.0.0";
$port = $this->server->getPort(); $port = $this->server->getPort();
$this->server->getLogger()->info("Setting query port to $port"); $this->server->getLogger()->info($this->server->getLanguage()->translateString("pocketmine.server.query.info", [$port]));
/* /*
The Query protocol is built on top of the existing Minecraft PE UDP network stack. The Query protocol is built on top of the existing Minecraft PE UDP network stack.
Because the 0xFE packet does not exist in the MCPE protocol, Because the 0xFE packet does not exist in the MCPE protocol,
@ -54,7 +54,7 @@ class QueryHandler{
$this->regenerateToken(); $this->regenerateToken();
$this->lastToken = $this->token; $this->lastToken = $this->token;
$this->regenerateInfo(); $this->regenerateInfo();
$this->server->getLogger()->info("Query running on $addr:$port"); $this->server->getLogger()->info($this->server->getLanguage()->translateString("pocketmine.server.query.running", [$addr, $port]));
} }
public function regenerateInfo(){ public function regenerateInfo(){
@ -86,7 +86,7 @@ class QueryHandler{
$reply .= Binary::writeInt($sessionID); $reply .= Binary::writeInt($sessionID);
$reply .= self::getTokenString($this->token, $address) . "\x00"; $reply .= self::getTokenString($this->token, $address) . "\x00";
$this->server->sendPacket($address, $port, $reply); $this->server->getNetwork()->sendPacket($address, $port, $reply);
break; break;
case self::STATISTICS: //Stat case self::STATISTICS: //Stat
$token = Binary::readInt(substr($payload, 0, 4)); $token = Binary::readInt(substr($payload, 0, 4));
@ -105,7 +105,7 @@ class QueryHandler{
}else{ }else{
$reply .= $this->shortData; $reply .= $this->shortData;
} }
$this->server->sendPacket($address, $port, $reply); $this->server->getNetwork()->sendPacket($address, $port, $reply);
break; break;
} }
} }

View File

@ -52,7 +52,7 @@ class PharPluginLoader implements PluginLoader{
*/ */
public function loadPlugin($file){ public function loadPlugin($file){
if(($description = $this->getPluginDescription($file)) instanceof PluginDescription){ if(($description = $this->getPluginDescription($file)) instanceof PluginDescription){
$this->server->getLogger()->info("Loading " . $description->getFullName()); $this->server->getLogger()->info($this->server->getLanguage()->translateString("pocketmine.plugin.load", [$description->getFullName()]));
$dataFolder = dirname($file) . DIRECTORY_SEPARATOR . $description->getName(); $dataFolder = dirname($file) . DIRECTORY_SEPARATOR . $description->getName();
if(file_exists($dataFolder) and !is_dir($dataFolder)){ if(file_exists($dataFolder) and !is_dir($dataFolder)){
throw new \InvalidStateException("Projected dataFolder '" . $dataFolder . "' for " . $description->getName() . " exists and is not a directory"); throw new \InvalidStateException("Projected dataFolder '" . $dataFolder . "' for " . $description->getName() . " exists and is not a directory");
@ -118,7 +118,7 @@ class PharPluginLoader implements PluginLoader{
*/ */
public function enablePlugin(Plugin $plugin){ public function enablePlugin(Plugin $plugin){
if($plugin instanceof PluginBase and !$plugin->isEnabled()){ if($plugin instanceof PluginBase and !$plugin->isEnabled()){
$this->server->getLogger()->info("Enabling " . $plugin->getDescription()->getFullName()); $this->server->getLogger()->info($this->server->getLanguage()->translateString("pocketmine.plugin.enable", [$plugin->getDescription()->getFullName()]));
$plugin->setEnabled(true); $plugin->setEnabled(true);
@ -131,7 +131,7 @@ class PharPluginLoader implements PluginLoader{
*/ */
public function disablePlugin(Plugin $plugin){ public function disablePlugin(Plugin $plugin){
if($plugin instanceof PluginBase and $plugin->isEnabled()){ if($plugin instanceof PluginBase and $plugin->isEnabled()){
$this->server->getLogger()->info("Disabling " . $plugin->getDescription()->getFullName()); $this->server->getLogger()->info($this->server->getLanguage()->translateString("pocketmine.plugin.disable", [$plugin->getDescription()->getFullName()]));
$this->server->getPluginManager()->callEvent(new PluginDisableEvent($plugin)); $this->server->getPluginManager()->callEvent(new PluginDisableEvent($plugin));

View File

@ -201,14 +201,14 @@ class PluginManager{
if($description instanceof PluginDescription){ if($description instanceof PluginDescription){
$name = $description->getName(); $name = $description->getName();
if(stripos($name, "pocketmine") !== false or stripos($name, "minecraft") !== false or stripos($name, "mojang") !== false){ if(stripos($name, "pocketmine") !== false or stripos($name, "minecraft") !== false or stripos($name, "mojang") !== false){
$this->server->getLogger()->error("Could not load plugin '" . $name . "': restricted name"); $this->server->getLogger()->error($this->server->getLanguage()->translateString("pocketmine.plugin.loadError", [$name, "%pocketmine.plugin.restrictedName"]));
continue; continue;
}elseif(strpos($name, " ") !== false){ }elseif(strpos($name, " ") !== false){
$this->server->getLogger()->warning("Plugin '" . $name . "' uses spaces in its name, this is discouraged"); $this->server->getLogger()->warning($this->server->getLanguage()->translateString("pocketmine.plugin.spacesDiscouraged", [$name]));
} }
if(isset($plugins[$name]) or $this->getPlugin($name) instanceof Plugin){ if(isset($plugins[$name]) or $this->getPlugin($name) instanceof Plugin){
$this->server->getLogger()->error("Could not load duplicate plugin '" . $name . "': plugin exists"); $this->server->getLogger()->error($this->server->getLanguage()->translateString("pocketmine.plugin.duplicateError", [$name]));
continue; continue;
} }
@ -232,7 +232,7 @@ class PluginManager{
} }
if($compatible === false){ if($compatible === false){
$this->server->getLogger()->error("Could not load plugin '" . $name . "': API version not compatible"); $this->server->getLogger()->error($this->server->getLanguage()->translateString("pocketmine.plugin.loadError", [$name, "%pocketmine.plugin.incompatibleAPI"]));
continue; continue;
} }
@ -250,7 +250,7 @@ class PluginManager{
} }
} }
}catch(\Exception $e){ }catch(\Exception $e){
$this->server->getLogger()->error("Could not load '" . $file . "' in folder '" . $directory . "': " . $e->getMessage()); $this->server->getLogger()->error($this->server->getLanguage()->translateString("pocketmine.plugin.fileError", [$file, $directory, $e->getMessage()]));
$logger = $this->server->getLogger(); $logger = $this->server->getLogger();
if($logger instanceof MainLogger){ if($logger instanceof MainLogger){
$logger->logException($e); $logger->logException($e);
@ -268,7 +268,7 @@ class PluginManager{
if(isset($loadedPlugins[$dependency]) or $this->getPlugin($dependency) instanceof Plugin){ if(isset($loadedPlugins[$dependency]) or $this->getPlugin($dependency) instanceof Plugin){
unset($dependencies[$name][$key]); unset($dependencies[$name][$key]);
}elseif(!isset($plugins[$dependency])){ }elseif(!isset($plugins[$dependency])){
$this->server->getLogger()->critical("Could not load plugin '" . $name . "': Unknown dependency"); $this->server->getLogger()->critical($this->server->getLanguage()->translateString("pocketmine.plugin.loadError", [$name, "%pocketmine.plugin.unknownDependency"]));
break; break;
} }
} }
@ -296,7 +296,7 @@ class PluginManager{
if($plugin = $this->loadPlugin($file, $loaders) and $plugin instanceof Plugin){ if($plugin = $this->loadPlugin($file, $loaders) and $plugin instanceof Plugin){
$loadedPlugins[$name] = $plugin; $loadedPlugins[$name] = $plugin;
}else{ }else{
$this->server->getLogger()->critical("Could not load plugin '" . $name . "'"); $this->server->getLogger()->critical($this->server->getLanguage()->translateString("pocketmine.plugin.genericLoadError", [$name]));
} }
} }
} }
@ -310,7 +310,7 @@ class PluginManager{
if($plugin = $this->loadPlugin($file, $loaders) and $plugin instanceof Plugin){ if($plugin = $this->loadPlugin($file, $loaders) and $plugin instanceof Plugin){
$loadedPlugins[$name] = $plugin; $loadedPlugins[$name] = $plugin;
}else{ }else{
$this->server->getLogger()->critical("Could not load plugin '" . $name . "'"); $this->server->getLogger()->critical($this->server->getLanguage()->translateString("pocketmine.plugin.genericLoadError", [$name]));
} }
} }
} }
@ -318,7 +318,7 @@ class PluginManager{
//No plugins loaded :( //No plugins loaded :(
if($missingDependency === true){ if($missingDependency === true){
foreach($plugins as $name => $file){ foreach($plugins as $name => $file){
$this->server->getLogger()->critical("Could not load plugin '" . $name . "': circular dependency detected"); $this->server->getLogger()->critical($this->server->getLanguage()->translateString("pocketmine.plugin.loadError", [$name, "%pocketmine.plugin.circularDependency"]));
} }
$plugins = []; $plugins = [];
} }
@ -577,7 +577,7 @@ class PluginManager{
foreach($plugin->getDescription()->getCommands() as $key => $data){ foreach($plugin->getDescription()->getCommands() as $key => $data){
if(strpos($key, ":") !== false){ if(strpos($key, ":") !== false){
$this->server->getLogger()->critical("Could not load command " . $key . " for plugin " . $plugin->getDescription()->getName()); $this->server->getLogger()->critical($this->server->getLanguage()->translateString("pocketmine.plugin.commandError", [$key, $plugin->getDescription()->getFullName()]));
continue; continue;
} }
if(is_array($data)){ if(is_array($data)){
@ -594,7 +594,7 @@ class PluginManager{
$aliasList = []; $aliasList = [];
foreach($data["aliases"] as $alias){ foreach($data["aliases"] as $alias){
if(strpos($alias, ":") !== false){ if(strpos($alias, ":") !== false){
$this->server->getLogger()->critical("Could not load alias " . $alias . " for plugin " . $plugin->getDescription()->getName()); $this->server->getLogger()->critical($this->server->getLanguage()->translateString("pocketmine.plugin.aliasError", [$alias, $plugin->getDescription()->getFullName()]));
continue; continue;
} }
$aliasList[] = $alias; $aliasList[] = $alias;
@ -669,7 +669,13 @@ class PluginManager{
try{ try{
$registration->callEvent($event); $registration->callEvent($event);
}catch(\Exception $e){ }catch(\Exception $e){
$this->server->getLogger()->critical("Could not pass event " . $event->getEventName() . " to " . $registration->getPlugin()->getDescription()->getFullName() . ": " . $e->getMessage() . " on " . get_class($registration->getListener())); $this->server->getLogger()->critical(
$this->server->getLanguage()->translateString("pocketmine.plugin.eventError", [
$event->getEventName(),
$registration->getPlugin()->getDescription()->getFullName(),
$e->getMessage(),
get_class($registration->getListener())
]));
$logger = $this->server->getLogger(); $logger = $this->server->getLogger();
if($logger instanceof MainLogger){ if($logger instanceof MainLogger){
$logger->logException($e); $logger->logException($e);
@ -716,7 +722,11 @@ class PluginManager{
$class = $parameters[0]->getClass()->getName(); $class = $parameters[0]->getClass()->getName();
$reflection = new \ReflectionClass($class); $reflection = new \ReflectionClass($class);
if(strpos((string) $reflection->getDocComment(), "@deprecated") !== false and $this->server->getProperty("settings.deprecated-verbose", true)){ if(strpos((string) $reflection->getDocComment(), "@deprecated") !== false and $this->server->getProperty("settings.deprecated-verbose", true)){
$this->server->getLogger()->warning('Plugin ' . $plugin->getName() . ' has registered a listener for ' . $class . ' on method ' . get_class($listener) . '->' . $method->getName() . '(), but the event is Deprecated.'); $this->server->getLogger()->warning($this->server->getLanguage()->translateString("pocketmine.plugin.deprecatedEvent", [
$plugin->getName(),
$class,
get_class($listener) . "->" . $method->getName() . "()"
]));
} }
$this->registerEvent($class, $listener, $priority, new MethodEventExecutor($method->getName()), $plugin, $ignoreCancelled); $this->registerEvent($class, $listener, $priority, new MethodEventExecutor($method->getName()), $plugin, $ignoreCancelled);
} }