Перевод команды на сервере

Версия Minecraft
1.7.10
1,976
68
220
Доброго всем времени суток о/

В общем, есть у меня команда, принимающая один аргумент. Используя StatCollector я умудрился локализовать её таким образом, что в зависимости от языка этот аргумент может принимать слова на русском, английском, и любом другом языке при условии перевода команды в .lang-файле.
И вот именно в нём и загвоздка - на сервере, насколько я знаю, по-дефолту стоит английский (en_US), и его нельзя поменять.
И вот вопрос - как в любом месте в коде (пока что только для PlayerLoggedInEvent и CommandBase надо) узнать какой язык стоит на клиенте и в соответствии с ним локализовать текст???

Java:
// Отправка сообщения по эвенту при входе (3 штуки таких)
// На клиенте всё норм, на сервере английский
e.player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("elvenstory.welcome2")));


// Автозаполнение аргумента команды локализованным текстом
// то же самое, сервер чисто англ
String[] ss = new String[9];
for (int i = 0; i < ss.length; i++) ss[i] = EnumRace.fromID(i + 1).localize();
return getListOfStringsMatchingLastWord(args, ss);

// Получение элемента enum'а по делокализованной строке (и дальше обработка, не суть)
public static EnumRace fromString(String name) {
    name = unlocalize(name);
    // ... return ...
}
 
1,976
68
220
@Ivasik а что с вариантом перевода именно аргументов команды?

Java:
public static String unlocalize(String name) {
    return StatCollector.translateToLocal("race." + name + ".reverse");
}

Пример - вводим на русском "ИМП", получаем "IMP" бекоз race.ИМП.reverse=IMP
На любом другом языке тоже самое - ввёл слово на русском, оно делокализовалось и прошло в команду
 
Последнее редактирование:

Icosider

Kotliner
Администратор
3,603
99
664
@Ivasik а что с вариантом перевода именно аргументов команды?

Java:
public static String unlocalize(String name) {
    return StatCollector.translateToLocal("race." + name + ".reverse");
}
Я бы сделал как то так:
new ChatComponentTranslation("beleberda.my", player.getName() and etc.);
Или я чего не понял?
 
1,976
68
220
Или я чего не понял?
Скорее всего.
С отправкой сообщения всё нормально, оно на русском.
Но теперь нужно как-то переводить аргументы. То есть чтобы пользователь мог ввести их на выбранном языке, а мод всё равно их распознавал. Аргументы - string'и, я их потом парсю с английского и перевожу в элементы Enum.

Вот у меня есть "переводчик" с любого на англ для Сингла, ибо там настроен язык. А что делать с сервером?
Java:
public static String unlocalize(String name) {
    return StatCollector.translateToLocal("race." + name + ".reverse");
}

Пример - вводим на русском "ИМП", получаем "IMP" бекоз race.ИМП.reverse=IMP
На любом другом языке тоже самое - ввёл слово на русском, оно делокализовалось и прошло в команду
 
1,976
68
220
Посмотри как реализовано в Essentials
Это ещё что такое?

кроме как отправлять реквест пакет
Так, а теперь можно, пожалуйста, поподробнее, как из CommandBase#processCommand отправить этот пакет, обработать и получить из него результат? А то я вообще не въехаль(
 
1,976
68
220
Я же тебе сказал, пиши в таком формате: "локализированное_название (аргумент_команды)"
Нехочу, небуду ._.

а лучше сделай кликабельные сообщения
Я тебе уже тоже сказал - форк сделал? Сделал. Вперёд, пили кликабельность.
А вообще, мы договорились что либо ты, либо Блесс пилите GUI
 

Icosider

Kotliner
Администратор
3,603
99
664
Это ещё что такое?


Так, а теперь можно, пожалуйста, поподробнее, как из CommandBase#processCommand отправить этот пакет, обработать и получить из него результат? А то я вообще не въехаль(
Ну как обычно отсылаешь игроку sendTo, sender это тот кто отправил, может быть два вида: консоль(или командный блок) и игрок. Ну вроде всё. С реквестом не должно возникнуть проблем.
 
Сверху