diff --git a/src/pocketmine/Player.php b/src/pocketmine/Player.php index 5f4d7c71f..5a3848bc3 100644 --- a/src/pocketmine/Player.php +++ b/src/pocketmine/Player.php @@ -2194,7 +2194,7 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{ }else{ $this->server->getPluginManager()->callEvent($ev = new PlayerChatEvent($this, $ev->getMessage())); if(!$ev->isCancelled()){ - $this->server->broadcastMessage(sprintf($ev->getFormat(), $ev->getPlayer()->getDisplayName(), $ev->getMessage()), $ev->getRecipients()); + $this->server->broadcastMessage($this->getServer()->getLanguage()->translateString($ev->getFormat(), [$ev->getPlayer()->getDisplayName(), $ev->getMessage()]), $ev->getRecipients()); } } } diff --git a/src/pocketmine/Server.php b/src/pocketmine/Server.php index f158e9cc1..8cc1cd999 100644 --- a/src/pocketmine/Server.php +++ b/src/pocketmine/Server.php @@ -407,26 +407,22 @@ class Server{ case (string) Player::SURVIVAL: case "survival": case "s": - case strtolower(Server::getInstance()->getLanguage()->get("gameMode.survival")): return Player::SURVIVAL; case (string) Player::CREATIVE: case "creative": case "c": - case strtolower(Server::getInstance()->getLanguage()->get("gameMode.creative")): return Player::CREATIVE; case (string) Player::ADVENTURE: case "adventure": case "a": - case strtolower(Server::getInstance()->getLanguage()->get("gameMode.adventure")): return Player::ADVENTURE; case (string) Player::SPECTATOR: case "spectator": case "view": case "v": - case strtolower(Server::getInstance()->getLanguage()->get("gameMode.spectator")): return Player::SPECTATOR; } return -1; diff --git a/src/pocketmine/command/Command.php b/src/pocketmine/command/Command.php index ebf5177fa..fab4c0da3 100644 --- a/src/pocketmine/command/Command.php +++ b/src/pocketmine/command/Command.php @@ -289,23 +289,21 @@ abstract class Command{ public static function broadcastCommandMessage(CommandSender $source, $message, $sendToSource = true){ if($message instanceof TextContainer){ $m = clone $message; - $result = $source->getName() . ": " . $m->getText(); + $result = "[".$source->getName().": ".$m->getText()."]"; $users = Server::getInstance()->getPluginManager()->getPermissionSubscriptions(Server::BROADCAST_CHANNEL_ADMINISTRATIVE); - $colored = TextFormat::GRAY . TextFormat::ITALIC . "[$result" . TextFormat::GRAY . TextFormat::ITALIC . "]"; + $colored = TextFormat::GRAY . TextFormat::ITALIC . $result; $m->setText($result); $result = clone $m; $m->setText($colored); $colored = clone $m; }else{ - $result = $source->getName() . ": " . $message; - - //Command minecarts or command blocks are not implemented - $users = Server::getInstance()->getPluginManager()->getPermissionSubscriptions(Server::BROADCAST_CHANNEL_ADMINISTRATIVE); - $colored = TextFormat::GRAY . TextFormat::ITALIC . "[$result" . TextFormat::GRAY . TextFormat::ITALIC . "]"; + $result = new TranslationContainer("chat.type.admin", [$source->getName(), $message]); + $colored = new TranslationContainer(TextFormat::GRAY . TextFormat::ITALIC . "%chat.type.admin", [$source->getName(), $message]); } + if($sendToSource === true and !($source instanceof ConsoleCommandSender)){ $source->sendMessage($message); } diff --git a/src/pocketmine/command/defaults/MeCommand.php b/src/pocketmine/command/defaults/MeCommand.php index d5a9ed5b0..d9e870ceb 100644 --- a/src/pocketmine/command/defaults/MeCommand.php +++ b/src/pocketmine/command/defaults/MeCommand.php @@ -48,14 +48,7 @@ class MeCommand extends VanillaCommand{ return false; } - $message = "* "; - if($sender instanceof Player){ - $message .= $sender->getDisplayName(); - }else{ - $message .= $sender->getName(); - } - - $sender->getServer()->broadcastMessage($message . " " . implode(" ", $args)); + $sender->getServer()->broadcastMessage(new TranslationContainer("chat.type.emote", [$sender instanceof Player ? $sender->getDisplayName() : $sender->getName(), TextFormat::WHITE . implode(" ", $args)])); return true; } diff --git a/src/pocketmine/command/defaults/SayCommand.php b/src/pocketmine/command/defaults/SayCommand.php index 0f4be7cfc..4b56e2dce 100644 --- a/src/pocketmine/command/defaults/SayCommand.php +++ b/src/pocketmine/command/defaults/SayCommand.php @@ -49,17 +49,7 @@ class SayCommand extends VanillaCommand{ return false; } - $message = TextFormat::LIGHT_PURPLE . "["; - if($sender instanceof ConsoleCommandSender){ - $message .= "Server"; - }elseif($sender instanceof Player){ - $message .= $sender->getDisplayName(); - }else{ - $message .= $sender->getName(); - } - $message .= TextFormat::LIGHT_PURPLE . "] " . implode(" ", $args); - $sender->getServer()->broadcastMessage($message); - + $sender->getServer()->broadcastMessage(new TranslationContainer(TextFormat::LIGHT_PURPLE . "%chat.type.announcement", [$sender instanceof Player ? $sender->getDisplayName() : ($sender instanceof ConsoleCommandSender ? "Server" : $sender->getName()), TextFormat::LIGHT_PURPLE . implode(" ", $args)])); return true; } } \ No newline at end of file diff --git a/src/pocketmine/event/player/PlayerChatEvent.php b/src/pocketmine/event/player/PlayerChatEvent.php index 95650070b..875267525 100644 --- a/src/pocketmine/event/player/PlayerChatEvent.php +++ b/src/pocketmine/event/player/PlayerChatEvent.php @@ -42,10 +42,19 @@ class PlayerChatEvent extends PlayerEvent implements Cancellable{ */ protected $recipients = []; - public function __construct(Player $player, $message, $format = "<%s> %s", array $recipients = null){ + public function __construct(Player $player, $message, $format = "chat.type.text", array $recipients = null){ $this->player = $player; $this->message = $message; + + //TODO: @deprecated (backwards-compativility) + $i = 0; + while(($pos = strpos($format, "%s")) !== false){ + $format = substr($format, 0, $pos) . "{%$i}" . substr($format, $pos + 2); + ++$i; + } + $this->format = $format; + if($recipients === null){ $this->recipients = Server::getInstance()->getPluginManager()->getPermissionSubscriptions(Server::BROADCAST_CHANNEL_USERS); }else{ diff --git a/src/pocketmine/lang/BaseLang.php b/src/pocketmine/lang/BaseLang.php index 399b4b0e3..ab1a8d992 100644 --- a/src/pocketmine/lang/BaseLang.php +++ b/src/pocketmine/lang/BaseLang.php @@ -78,6 +78,23 @@ class BaseLang{ } } + /** + * @param string $str + * @param string[] $params + * + * @return string + */ + public function translateString($str, array $params = []){ + $baseText = $this->get($str); + $baseText = $this->parseTranslation( $baseText !== null ? $baseText : $str); + + foreach($params as $i => $p){ + $baseText = str_replace("{%$i}", $this->parseTranslation($p), $baseText); + } + + return $baseText; + } + public function translate(TextContainer $c){ if($c instanceof TranslationContainer){ $baseText = $this->get($c->getText()); diff --git a/src/pocketmine/lang/base/en.ini b/src/pocketmine/lang/base/en.ini index 21ab7330c..3bec0c5ac 100644 --- a/src/pocketmine/lang/base/en.ini +++ b/src/pocketmine/lang/base/en.ini @@ -8,6 +8,13 @@ language.name=English multiplayer.player.joined={%0} joined the game multiplayer.player.leave={%0} left the game +chat.type.text=<{%0}> {%1} +chat.type.emote=* {%0} {%1} +chat.type.announcement=[{%0}] {%1} +chat.type.admin=[{%0}: {%1}] +chat.type.achievement={%0} has just earned the achievement {%1} + + death.fell.accident.generic={%0} fell from a high place death.attack.inFire={%0} went up in flames death.attack.onFire={%0} burned to death