2016-09-18 37 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); 
    } 
}