Как создавать команды с переведенным описанием или использованием, используя PocketMine API в плагинах?
В ванильных командах строки кодов перевода, такие как %pocketmine.command.help.description
пройдены. Они являются ссылками на файл lang в оригинальном PocketMine, и плагины не могут их изменять.
Когда игрок выполняет /help
, HelpCommand
класс объединяет результат Command::getDescription()
с помощью формата вывода клиента. Затем он передается Player::sendMessage
, который передает строку BaseLang::translateString
а потом BaseLang::parseTranslation
и затем внутренние переводы поиска при появлении /%[a-zA-Z0-9\.\-]+/
, В течение этого процесса невозможно что-либо добавить, если только сервер BaseLang
заменяется
Справиться 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);
}
}
Других решений пока нет …