From 9c9929ff39233da1f32ba574568c50f13efd916a Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Thu, 22 Dec 2022 16:37:36 +0000 Subject: [PATCH] Player: break cycle between sendMessage() and sendTranslation() --- src/player/Player.php | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/player/Player.php b/src/player/Player.php index e24a282c5..a4a516213 100644 --- a/src/player/Player.php +++ b/src/player/Player.php @@ -1995,7 +1995,16 @@ class Player extends Human implements CommandSender, ChunkListener, IPlayer{ */ public function sendMessage(Translatable|string $message) : void{ if($message instanceof Translatable){ - $this->sendTranslation($message->getText(), $message->getParameters()); + //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; } @@ -2007,16 +2016,7 @@ class Player extends Human implements CommandSender, ChunkListener, IPlayer{ * @param string[]|Translatable[] $parameters */ public function sendTranslation(string $message, array $parameters = []) : void{ - //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, $parameters); - if(!$this->server->isLanguageForced()){ - foreach($parameters as $i => $p){ - $parameters[$i] = $this->getLanguage()->translateString($p, [], "pocketmine."); - } - $this->getNetworkSession()->onTranslatedChatMessage($this->getLanguage()->translateString($message, $parameters, "pocketmine."), $parameters); - }else{ - $this->sendMessage($this->getLanguage()->translateString($message, $parameters)); - } + $this->sendMessage(new Translatable($message, $parameters)); } /**