2

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

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

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

4

1 回答 1

2

处理DataPacketSendEvent和修改TextPackets。使您的标识符成为可以从任意字符串中提取的特殊标识符。

使用此事件处理程序:

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 回答