2016-09-18 9 views
2

PocketMine APIをプラグインで使用して翻訳された説明や使用法でコマンドを作成するにはどうすればよいですか?PocketMineプラグインでローカライズされた説明でコマンドを作成するには?

バニラコマンドでは、%pocketmine.command.help.descriptionのような変換コードの文字列が渡されます。それらは元のPocketMineのlangファイルへの参照であり、プラグインはそれらを変更できません。

プレーヤーが/helpを実行すると、HelpCommandクラスは、Command::getDescription()の結果をヘルプクライアント出力形式と連結します。その後、Player::sendMessageに渡され、文字列がBaseLang::translateStringに渡され、次にBaseLang::parseTranslationに変換され、次に/%[a-zA-Z0-9\.\-]+/の出現で内部的に参照変換が行われます。このプロセス全体を通して、サーバーBaseLangが交換されない限り、何も追加することはできません。

答えて

2

ハンドルDataPacketSendEventと変更TextPacket s。あなたの識別子を何か特別なものにして、任意の文字列から抽出することができます。

は、このイベントハンドラを使用します。

public function e_dps(DataPacketSendEvent $event){ 
    if(($pk = $event->getPacket()) instanceof TextPacket){ 
     $pk->message = preg_replace_callback(
      '/PluginName\-SomeRandomBytesHere\-ForSecurityGenerateThemEveryRestart\-([0-9]+)\-AnotherDelimiterHere/', function($match){ 
       return $this->translate($match[1], $event->getPlayer()); 
      }, $pk->message); 
    } 
} 
関連する問題