CommandSender: export getLanguage()

this currently serves as a proxy to the server main language, but it can be used by third party implementations to choose a non-Server language.
This commit is contained in:
Dylan K. Taylor 2020-06-22 20:05:23 +01:00
parent 097fc7e6cb
commit 52fd1a8c1d
10 changed files with 33 additions and 20 deletions

View File

@ -1290,7 +1290,7 @@ class Server{
return true; return true;
} }
$sender->sendMessage($this->getLanguage()->translateString(TextFormat::RED . "%commands.generic.notFound")); $sender->sendMessage($sender->getLanguage()->translateString(TextFormat::RED . "%commands.generic.notFound"));
return false; return false;
} }

View File

@ -108,7 +108,7 @@ abstract class Command{
} }
if($this->permissionMessage === null){ if($this->permissionMessage === null){
$target->sendMessage($target->getServer()->getLanguage()->translateString(TextFormat::RED . "%commands.generic.permission")); $target->sendMessage($target->getLanguage()->translateString(TextFormat::RED . "%commands.generic.permission"));
}elseif($this->permissionMessage !== ""){ }elseif($this->permissionMessage !== ""){
$target->sendMessage(str_replace("<permission>", $this->permission, $this->permissionMessage)); $target->sendMessage(str_replace("<permission>", $this->permission, $this->permissionMessage));
} }
@ -229,7 +229,7 @@ abstract class Command{
public static function broadcastCommandMessage(CommandSender $source, $message, bool $sendToSource = true) : void{ public static function broadcastCommandMessage(CommandSender $source, $message, bool $sendToSource = true) : void{
$users = PermissionManager::getInstance()->getPermissionSubscriptions(Server::BROADCAST_CHANNEL_ADMINISTRATIVE); $users = PermissionManager::getInstance()->getPermissionSubscriptions(Server::BROADCAST_CHANNEL_ADMINISTRATIVE);
if($message instanceof TranslationContainer){ if($message instanceof TranslationContainer){
$formatted = "[" . $source->getName() . ": " . ($source->getServer()->getLanguage()->get($message->getText()) !== $message->getText() ? "%" : "") . $message->getText() . "]"; $formatted = "[" . $source->getName() . ": " . ($source->getLanguage()->get($message->getText()) !== $message->getText() ? "%" : "") . $message->getText() . "]";
$result = new TranslationContainer($formatted, $message->getParameters()); $result = new TranslationContainer($formatted, $message->getParameters());
$colored = new TranslationContainer(TextFormat::GRAY . TextFormat::ITALIC . $formatted, $message->getParameters()); $colored = new TranslationContainer(TextFormat::GRAY . TextFormat::ITALIC . $formatted, $message->getParameters());

View File

@ -23,12 +23,15 @@ declare(strict_types=1);
namespace pocketmine\command; namespace pocketmine\command;
use pocketmine\lang\Language;
use pocketmine\lang\TranslationContainer; use pocketmine\lang\TranslationContainer;
use pocketmine\permission\Permissible; use pocketmine\permission\Permissible;
use pocketmine\Server; use pocketmine\Server;
interface CommandSender extends Permissible{ interface CommandSender extends Permissible{
public function getLanguage() : Language;
/** /**
* @param TranslationContainer|string $message * @param TranslationContainer|string $message
*/ */

View File

@ -23,6 +23,7 @@ declare(strict_types=1);
namespace pocketmine\command; namespace pocketmine\command;
use pocketmine\lang\Language;
use pocketmine\lang\TranslationContainer; use pocketmine\lang\TranslationContainer;
use pocketmine\permission\PermissibleBase; use pocketmine\permission\PermissibleBase;
use pocketmine\permission\PermissibleDelegateTrait; use pocketmine\permission\PermissibleDelegateTrait;
@ -48,15 +49,19 @@ class ConsoleCommandSender implements CommandSender{
return $this->server; return $this->server;
} }
public function getLanguage() : Language{
return $this->server->getLanguage();
}
/** /**
* @param TranslationContainer|string $message * @param TranslationContainer|string $message
*/ */
public function sendMessage($message) : void{ public function sendMessage($message) : void{
$server = $this->getServer(); $server = $this->getServer();
if($message instanceof TranslationContainer){ if($message instanceof TranslationContainer){
$message = $server->getLanguage()->translate($message); $message = $this->getLanguage()->translate($message);
}else{ }else{
$message = $server->getLanguage()->translateString($message); $message = $this->getLanguage()->translateString($message);
} }
foreach(explode("\n", trim($message)) as $line){ foreach(explode("\n", trim($message)) as $line){

View File

@ -243,7 +243,7 @@ class SimpleCommandMap implements CommandMap{
try{ try{
$target->execute($sender, $sentCommandLabel, $args); $target->execute($sender, $sentCommandLabel, $args);
}catch(InvalidCommandSyntaxException $e){ }catch(InvalidCommandSyntaxException $e){
$sender->sendMessage($this->server->getLanguage()->translateString("commands.generic.usage", [$target->getUsage()])); $sender->sendMessage($sender->getLanguage()->translateString("commands.generic.usage", [$target->getUsage()]));
}finally{ }finally{
$target->timings->stopTiming(); $target->timings->stopTiming();
} }

View File

@ -55,7 +55,7 @@ class KillCommand extends VanillaCommand{
if(count($args) === 1){ if(count($args) === 1){
if(!$sender->hasPermission("pocketmine.command.kill.other")){ if(!$sender->hasPermission("pocketmine.command.kill.other")){
$sender->sendMessage($sender->getServer()->getLanguage()->translateString(TextFormat::RED . "%commands.generic.permission")); $sender->sendMessage($sender->getLanguage()->translateString(TextFormat::RED . "%commands.generic.permission"));
return true; return true;
} }
@ -74,7 +74,7 @@ class KillCommand extends VanillaCommand{
if($sender instanceof Player){ if($sender instanceof Player){
if(!$sender->hasPermission("pocketmine.command.kill.self")){ if(!$sender->hasPermission("pocketmine.command.kill.self")){
$sender->sendMessage($sender->getServer()->getLanguage()->translateString(TextFormat::RED . "%commands.generic.permission")); $sender->sendMessage($sender->getLanguage()->translateString(TextFormat::RED . "%commands.generic.permission"));
return true; return true;
} }

View File

@ -50,7 +50,7 @@ class TimeCommand extends VanillaCommand{
if($args[0] === "start"){ if($args[0] === "start"){
if(!$sender->hasPermission("pocketmine.command.time.start")){ if(!$sender->hasPermission("pocketmine.command.time.start")){
$sender->sendMessage($sender->getServer()->getLanguage()->translateString(TextFormat::RED . "%commands.generic.permission")); $sender->sendMessage($sender->getLanguage()->translateString(TextFormat::RED . "%commands.generic.permission"));
return true; return true;
} }
@ -61,7 +61,7 @@ class TimeCommand extends VanillaCommand{
return true; return true;
}elseif($args[0] === "stop"){ }elseif($args[0] === "stop"){
if(!$sender->hasPermission("pocketmine.command.time.stop")){ if(!$sender->hasPermission("pocketmine.command.time.stop")){
$sender->sendMessage($sender->getServer()->getLanguage()->translateString(TextFormat::RED . "%commands.generic.permission")); $sender->sendMessage($sender->getLanguage()->translateString(TextFormat::RED . "%commands.generic.permission"));
return true; return true;
} }
@ -72,7 +72,7 @@ class TimeCommand extends VanillaCommand{
return true; return true;
}elseif($args[0] === "query"){ }elseif($args[0] === "query"){
if(!$sender->hasPermission("pocketmine.command.time.query")){ if(!$sender->hasPermission("pocketmine.command.time.query")){
$sender->sendMessage($sender->getServer()->getLanguage()->translateString(TextFormat::RED . "%commands.generic.permission")); $sender->sendMessage($sender->getLanguage()->translateString(TextFormat::RED . "%commands.generic.permission"));
return true; return true;
} }
@ -81,7 +81,7 @@ class TimeCommand extends VanillaCommand{
}else{ }else{
$world = $sender->getServer()->getWorldManager()->getDefaultWorld(); $world = $sender->getServer()->getWorldManager()->getDefaultWorld();
} }
$sender->sendMessage($sender->getServer()->getLanguage()->translateString("commands.time.query", [$world->getTime()])); $sender->sendMessage($sender->getLanguage()->translateString("commands.time.query", [$world->getTime()]));
return true; return true;
} }
@ -91,7 +91,7 @@ class TimeCommand extends VanillaCommand{
if($args[0] === "set"){ if($args[0] === "set"){
if(!$sender->hasPermission("pocketmine.command.time.set")){ if(!$sender->hasPermission("pocketmine.command.time.set")){
$sender->sendMessage($sender->getServer()->getLanguage()->translateString(TextFormat::RED . "%commands.generic.permission")); $sender->sendMessage($sender->getLanguage()->translateString(TextFormat::RED . "%commands.generic.permission"));
return true; return true;
} }
@ -126,7 +126,7 @@ class TimeCommand extends VanillaCommand{
Command::broadcastCommandMessage($sender, new TranslationContainer("commands.time.set", [$value])); Command::broadcastCommandMessage($sender, new TranslationContainer("commands.time.set", [$value]));
}elseif($args[0] === "add"){ }elseif($args[0] === "add"){
if(!$sender->hasPermission("pocketmine.command.time.add")){ if(!$sender->hasPermission("pocketmine.command.time.add")){
$sender->sendMessage($sender->getServer()->getLanguage()->translateString(TextFormat::RED . "%commands.generic.permission")); $sender->sendMessage($sender->getLanguage()->translateString(TextFormat::RED . "%commands.generic.permission"));
return true; return true;
} }

View File

@ -117,7 +117,7 @@ class WhitelistCommand extends VanillaCommand{
"off" => "disable" "off" => "disable"
]; ];
if(!$sender->hasPermission("pocketmine.command.whitelist." . ($map[$subcommand] ?? $subcommand))){ if(!$sender->hasPermission("pocketmine.command.whitelist." . ($map[$subcommand] ?? $subcommand))){
$sender->sendMessage($sender->getServer()->getLanguage()->translateString(TextFormat::RED . "%commands.generic.permission")); $sender->sendMessage($sender->getLanguage()->translateString(TextFormat::RED . "%commands.generic.permission"));
return true; return true;
} }

View File

@ -768,7 +768,7 @@ class NetworkSession{
$data = new CommandData( $data = new CommandData(
$lname, //TODO: commands containing uppercase letters in the name crash 1.9.0 client $lname, //TODO: commands containing uppercase letters in the name crash 1.9.0 client
$this->server->getLanguage()->translateString($command->getDescription()), $this->player->getLanguage()->translateString($command->getDescription()),
0, 0,
0, 0,
$aliasObj, $aliasObj,

View File

@ -78,6 +78,7 @@ use pocketmine\item\enchantment\EnchantmentInstance;
use pocketmine\item\enchantment\MeleeWeaponEnchantment; use pocketmine\item\enchantment\MeleeWeaponEnchantment;
use pocketmine\item\Item; use pocketmine\item\Item;
use pocketmine\item\ItemUseResult; use pocketmine\item\ItemUseResult;
use pocketmine\lang\Language;
use pocketmine\lang\TranslationContainer; use pocketmine\lang\TranslationContainer;
use pocketmine\math\Vector3; use pocketmine\math\Vector3;
use pocketmine\nbt\tag\CompoundTag; use pocketmine\nbt\tag\CompoundTag;
@ -634,6 +635,10 @@ class Player extends Human implements CommandSender, ChunkLoader, ChunkListener,
return $this->locale; return $this->locale;
} }
public function getLanguage() : Language{
return $this->server->getLanguage();
}
/** /**
* Called when a player changes their skin. * Called when a player changes their skin.
* Plugin developers should not use this, use setSkin() and sendSkin() instead. * Plugin developers should not use this, use setSkin() and sendSkin() instead.
@ -1859,7 +1864,7 @@ class Player extends Human implements CommandSender, ChunkLoader, ChunkListener,
return; return;
} }
$this->networkSession->onRawChatMessage($this->server->getLanguage()->translateString($message)); $this->networkSession->onRawChatMessage($this->getLanguage()->translateString($message));
} }
/** /**
@ -1868,11 +1873,11 @@ class Player extends Human implements CommandSender, ChunkLoader, ChunkListener,
public function sendTranslation(string $message, array $parameters = []) : void{ public function sendTranslation(string $message, array $parameters = []) : void{
if(!$this->server->isLanguageForced()){ if(!$this->server->isLanguageForced()){
foreach($parameters as $i => $p){ foreach($parameters as $i => $p){
$parameters[$i] = $this->server->getLanguage()->translateString($p, [], "pocketmine."); $parameters[$i] = $this->getLanguage()->translateString($p, [], "pocketmine.");
} }
$this->networkSession->onTranslatedChatMessage($this->server->getLanguage()->translateString($message, $parameters, "pocketmine."), $parameters); $this->networkSession->onTranslatedChatMessage($this->getLanguage()->translateString($message, $parameters, "pocketmine."), $parameters);
}else{ }else{
$this->sendMessage($this->server->getLanguage()->translateString($message, $parameters)); $this->sendMessage($this->getLanguage()->translateString($message, $parameters));
} }
} }