如何在PocketMine插件中创建具有本地化描述的命令?

时间:2016-09-18 16:06:49

标签: php minecraft pocketmine

如何使用插件中的PocketMine API创建具有已翻译描述或用法的命令?

在vanilla命令中,传递了%pocketmine.command.help.description等翻译代码字符串。它们是对原始PocketMine中lang文件的引用,而插件无法修改它们。

当玩家执行/help时,HelpCommand类将Command::getDescription()的结果与帮助客户端输出格式连接起来。然后,它传递给Player::sendMessage,它将字符串传递给BaseLang::translateString然后传递BaseLang::parseTranslation,然后在/%[a-zA-Z0-9\.\-]+/出现时在内部查找翻译。在整个过程中,除非更换服务器BaseLang,否则无法添加任何内容。

1 个答案:

答案 0 :(得分: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);
    }
}