如何在 PocketMine 插件中创建具有本地化描述的命令?
How to create commands with localized description in PocketMine plugins?
如何在插件中使用 PocketMine API 创建具有翻译描述或用法的命令?
在普通命令中,会传递翻译代码字符串,例如%pocketmine.command.help.description
。它们是原始PocketMine中lang文件的引用,插件无法修改。
当播放器执行 /help
时,HelpCommand
class 将 Command::getDescription()
的结果与帮助客户端输出格式连接起来。然后,它传递给 Player::sendMessage
,后者将字符串传递给 BaseLang::translateString
,然后传递给 BaseLang::parseTranslation
,然后在出现 /%[a-zA-Z0-9\.\-]+/
时在内部查找翻译。在整个过程中,不可能添加任何东西,除非更换服务器BaseLang
。
处理 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);
}
}
如何在插件中使用 PocketMine API 创建具有翻译描述或用法的命令?
在普通命令中,会传递翻译代码字符串,例如%pocketmine.command.help.description
。它们是原始PocketMine中lang文件的引用,插件无法修改。
当播放器执行 /help
时,HelpCommand
class 将 Command::getDescription()
的结果与帮助客户端输出格式连接起来。然后,它传递给 Player::sendMessage
,后者将字符串传递给 BaseLang::translateString
,然后传递给 BaseLang::parseTranslation
,然后在出现 /%[a-zA-Z0-9\.\-]+/
时在内部查找翻译。在整个过程中,不可能添加任何东西,除非更换服务器BaseLang
。
处理 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);
}
}