Translate format text

This commit is contained in:
Shoghi Cervantes 2015-04-11 02:15:46 +02:00
parent 0c041ebca3
commit c29ae333a2
No known key found for this signature in database
GPG Key ID: 78464DB0A7837F89
8 changed files with 42 additions and 32 deletions

View File

@ -2194,7 +2194,7 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
}else{ }else{
$this->server->getPluginManager()->callEvent($ev = new PlayerChatEvent($this, $ev->getMessage())); $this->server->getPluginManager()->callEvent($ev = new PlayerChatEvent($this, $ev->getMessage()));
if(!$ev->isCancelled()){ 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());
} }
} }
} }

View File

@ -407,26 +407,22 @@ class Server{
case (string) Player::SURVIVAL: case (string) Player::SURVIVAL:
case "survival": case "survival":
case "s": case "s":
case strtolower(Server::getInstance()->getLanguage()->get("gameMode.survival")):
return Player::SURVIVAL; return Player::SURVIVAL;
case (string) Player::CREATIVE: case (string) Player::CREATIVE:
case "creative": case "creative":
case "c": case "c":
case strtolower(Server::getInstance()->getLanguage()->get("gameMode.creative")):
return Player::CREATIVE; return Player::CREATIVE;
case (string) Player::ADVENTURE: case (string) Player::ADVENTURE:
case "adventure": case "adventure":
case "a": case "a":
case strtolower(Server::getInstance()->getLanguage()->get("gameMode.adventure")):
return Player::ADVENTURE; return Player::ADVENTURE;
case (string) Player::SPECTATOR: case (string) Player::SPECTATOR:
case "spectator": case "spectator":
case "view": case "view":
case "v": case "v":
case strtolower(Server::getInstance()->getLanguage()->get("gameMode.spectator")):
return Player::SPECTATOR; return Player::SPECTATOR;
} }
return -1; return -1;

View File

@ -289,23 +289,21 @@ 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().": ".$m->getText()."]";
$users = Server::getInstance()->getPluginManager()->getPermissionSubscriptions(Server::BROADCAST_CHANNEL_ADMINISTRATIVE); $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); $m->setText($result);
$result = clone $m; $result = clone $m;
$m->setText($colored); $m->setText($colored);
$colored = clone $m; $colored = clone $m;
}else{ }else{
$result = $source->getName() . ": " . $message;
//Command minecarts or command blocks are not implemented
$users = Server::getInstance()->getPluginManager()->getPermissionSubscriptions(Server::BROADCAST_CHANNEL_ADMINISTRATIVE); $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)){ if($sendToSource === true and !($source instanceof ConsoleCommandSender)){
$source->sendMessage($message); $source->sendMessage($message);
} }

View File

@ -48,14 +48,7 @@ class MeCommand extends VanillaCommand{
return false; return false;
} }
$message = "* "; $sender->getServer()->broadcastMessage(new TranslationContainer("chat.type.emote", [$sender instanceof Player ? $sender->getDisplayName() : $sender->getName(), TextFormat::WHITE . implode(" ", $args)]));
if($sender instanceof Player){
$message .= $sender->getDisplayName();
}else{
$message .= $sender->getName();
}
$sender->getServer()->broadcastMessage($message . " " . implode(" ", $args));
return true; return true;
} }

View File

@ -49,17 +49,7 @@ class SayCommand extends VanillaCommand{
return false; return false;
} }
$message = TextFormat::LIGHT_PURPLE . "["; $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)]));
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);
return true; return true;
} }
} }

View File

@ -42,10 +42,19 @@ class PlayerChatEvent extends PlayerEvent implements Cancellable{
*/ */
protected $recipients = []; 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->player = $player;
$this->message = $message; $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; $this->format = $format;
if($recipients === null){ if($recipients === null){
$this->recipients = Server::getInstance()->getPluginManager()->getPermissionSubscriptions(Server::BROADCAST_CHANNEL_USERS); $this->recipients = Server::getInstance()->getPluginManager()->getPermissionSubscriptions(Server::BROADCAST_CHANNEL_USERS);
}else{ }else{

View File

@ -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){ public function translate(TextContainer $c){
if($c instanceof TranslationContainer){ if($c instanceof TranslationContainer){
$baseText = $this->get($c->getText()); $baseText = $this->get($c->getText());

View File

@ -8,6 +8,13 @@ language.name=English
multiplayer.player.joined={%0} joined the game multiplayer.player.joined={%0} joined the game
multiplayer.player.leave={%0} left 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.fell.accident.generic={%0} fell from a high place
death.attack.inFire={%0} went up in flames death.attack.inFire={%0} went up in flames
death.attack.onFire={%0} burned to death death.attack.onFire={%0} burned to death