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