2

プラグインで PocketMine API を使用して、翻訳された説明または使用法でコマンドを作成する方法は?

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

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

4

1 に答える 1

2

を処理DataPacketSendEventおよび変更しTextPacketます。識別子を任意の文字列から抽出できる特別なものにします。

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

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);
    }
}
于 2016-09-18T16:41:47.573 に答える