From b03733442b335a6c235f5776ac135d1edc3d225b Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Thu, 22 Dec 2022 16:51:09 +0000 Subject: [PATCH] Move translation flattening logic from Player to NetworkSession this is network-specific stuff, so it doesn't belong in Player. --- src/network/mcpe/NetworkSession.php | 25 ++++++++++++++++--------- src/player/Player.php | 17 +---------------- 2 files changed, 17 insertions(+), 25 deletions(-) diff --git a/src/network/mcpe/NetworkSession.php b/src/network/mcpe/NetworkSession.php index fcae7e8d8..b9c6219fd 100644 --- a/src/network/mcpe/NetworkSession.php +++ b/src/network/mcpe/NetworkSession.php @@ -930,15 +930,22 @@ class NetworkSession{ $this->sendDataPacket(AvailableCommandsPacket::create($commandData, [], [], [])); } - public function onRawChatMessage(string $message) : void{ - $this->sendDataPacket(TextPacket::raw($message)); - } - - /** - * @param string[] $parameters - */ - public function onTranslatedChatMessage(string $key, array $parameters) : void{ - $this->sendDataPacket(TextPacket::translation($key, $parameters)); + public function onChatMessage(Translatable|string $message) : void{ + if($message instanceof Translatable){ + //we can't send nested translations to the client, so make sure they are always pre-translated by the server + $language = $this->player->getLanguage(); + $parameters = array_map(fn(string|Translatable $p) => $p instanceof Translatable ? $language->translate($p) : $p, $message->getParameters()); + if(!$this->server->isLanguageForced()){ + foreach($parameters as $i => $p){ + $parameters[$i] = $language->translateString($p, [], "pocketmine."); + } + $this->sendDataPacket(TextPacket::translation($language->translateString($message->getText(), $parameters, "pocketmine."), $parameters)); + }else{ + $this->sendDataPacket(TextPacket::raw($language->translateString($message->getText(), $parameters))); + } + }else{ + $this->sendDataPacket(TextPacket::raw($message)); + } } /** diff --git a/src/player/Player.php b/src/player/Player.php index a4a516213..1d80d9db6 100644 --- a/src/player/Player.php +++ b/src/player/Player.php @@ -132,7 +132,6 @@ use pocketmine\world\World; use Ramsey\Uuid\UuidInterface; use function abs; use function array_filter; -use function array_map; use function assert; use function count; use function explode; @@ -1994,21 +1993,7 @@ class Player extends Human implements CommandSender, ChunkListener, IPlayer{ * Sends a direct chat message to a player */ public function sendMessage(Translatable|string $message) : void{ - if($message instanceof Translatable){ - //we can't send nested translations to the client, so make sure they are always pre-translated by the server - $parameters = array_map(fn(string|Translatable $p) => $p instanceof Translatable ? $this->getLanguage()->translate($p) : $p, $message->getParameters()); - if(!$this->server->isLanguageForced()){ - foreach($parameters as $i => $p){ - $parameters[$i] = $this->getLanguage()->translateString($p, [], "pocketmine."); - } - $this->getNetworkSession()->onTranslatedChatMessage($this->getLanguage()->translateString($message->getText(), $parameters, "pocketmine."), $parameters); - }else{ - $this->getNetworkSession()->onRawChatMessage($this->getLanguage()->translateString($message->getText(), $parameters)); - } - return; - } - - $this->getNetworkSession()->onRawChatMessage($message); + $this->getNetworkSession()->onChatMessage($message); } /**