Move translation flattening logic from Player to NetworkSession

this is network-specific stuff, so it doesn't belong in Player.
This commit is contained in:
Dylan K. Taylor
2022-12-22 16:51:09 +00:00
parent 9c9929ff39
commit b03733442b
2 changed files with 17 additions and 25 deletions

View File

@ -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));
}
}
/**