- Версия(и) Minecraft
- 1.7.10-1.12
Это скорее не туториал, а просто фишка, показавшаяся мне удобной.
Рассказывать буду на примере увлажняемых блоков из Misty World.
Методы, приведённые ниже, взяты из версии 1.12+, но сам принцип, думаю, будет работать во всех версиях.
Не буду рассказывать, как давать описание предметам или блокам, считаю, что вы все это уже знаете. Просто скопирую сюда метод "нормального человека" или тот, который я применял изначально для блока земли:
В lang-файле содержалось примерно следующее:
Всё вполне цивильно и пререканий нет.
Теперь добавляем песок и применяем к нему тот же tooltip:
Упс! Уже что-то не то. Нас это не устраивает.
Попробуем давать разные описания в зависимости от названия самого блока )
Немного модифицируем метод:
Сам lang-файл, в этом случае, будет представлять из себя следующее:
Таким образом, описания фильтруются по двум последним символам названия.
Результатом будет "Почва влажная", но "Песок сухой"!
А если нам нужно добавит ещё один род: средний? Да, русский язык богатый )
Не вопрос:
При этом, нашим иностранным друзьям вообще не нужно будет заботится о родах ) Если они не пишут в конце "_x" или "_y", данная строка игнорируется и описание берётся стандартное.
Пример английский локализации:
Это удобно, но нужно позаботится и о названии самого блока...
Чтобы наши приписки в конце не были видны больше никому, в ItemBlock почвы пришлось добавить следующее:
Благо, почти для всех увлажняемых блоков я применяю один этот ItemBlock.
Думаю, что данный принцип можно применить ещё много к чему. Главное подойти творчески )
На этом мой первый недотутор подошёл к концу. Прошу любить и жаловать )))
Рассказывать буду на примере увлажняемых блоков из Misty World.
Методы, приведённые ниже, взяты из версии 1.12+, но сам принцип, думаю, будет работать во всех версиях.
Итак, во время работы над модом, появилась необходимость дать описание увлажняемым блокам. Описание состояло всего из одного слова: "Влажная" или "Сухая". И оно никак не смущало меня, до тех пор пока в моде увлажняемым блоком была только почва.
"Почва влажная" или "Почва сухая".
Однако потом задумал добавить песок, и уже стало как-то не очень.
Получалось следующее: "Песок влажная" или "Песок сухая".
Хочу заметить, что в обоих случаях английский вариант звучал хорошо: "Sand wet" или "Sand dry".
Но мы-то с вами говорим по русски.
Те, кто уже успел познакомиться с модом, могли заметить, что видов увлажняемых блоков там туева хуча, и давать отдельное описание каждому было бы глупо. Lang-файл, в этом случае, вырос бы раза в полтора... Что не очень удобно.
Вот и решил я немного поизвращаться )))
"Почва влажная" или "Почва сухая".
Однако потом задумал добавить песок, и уже стало как-то не очень.
Получалось следующее: "Песок влажная" или "Песок сухая".
Хочу заметить, что в обоих случаях английский вариант звучал хорошо: "Sand wet" или "Sand dry".
Но мы-то с вами говорим по русски.
Те, кто уже успел познакомиться с модом, могли заметить, что видов увлажняемых блоков там туева хуча, и давать отдельное описание каждому было бы глупо. Lang-файл, в этом случае, вырос бы раза в полтора... Что не очень удобно.
Вот и решил я немного поизвращаться )))
Не буду рассказывать, как давать описание предметам или блокам, считаю, что вы все это уже знаете. Просто скопирую сюда метод "нормального человека" или тот, который я применял изначально для блока земли:
Java:
@Override
@SideOnly(Side.CLIENT)
public void addInformation(ItemStack stack, @Nullable World player, List<String> tooltip, ITooltipFlag advanced) {
boolean wet = getStateFromMeta(stack.getItemDamage()).state.getValue(WET); // Узнаем нужный нам параметр, а именно влажность
tooltip.add(I18n.format(wet ? "tile.block_wet.tooltip" : "tile.block_dry.tooltip")); // Добавляем описание в зависимости от параметра
}
В lang-файле содержалось примерно следующее:
Код:
tile.dirt_f.name=Лесная почва
tile.dirt_s.name=Песчаная почва
tile.dirt_c.name=Глиняная почва
tile.dirt_r.name=Каменистая почва
tile.dirt_t.name=Тропическая почва
tile.block_wet.tooltip=Влажная
tile.block_dry.tooltip=Сухая
Всё вполне цивильно и пререканий нет.
Теперь добавляем песок и применяем к нему тот же tooltip:
Код:
tile.sand.name=Песок
tile.block_wet.tooltip=Влажная
tile.block_dry.tooltip=Сухая
Упс! Уже что-то не то. Нас это не устраивает.
Попробуем давать разные описания в зависимости от названия самого блока )
Немного модифицируем метод:
Java:
@Override
@SideOnly(Side.CLIENT)
public void addInformation(ItemStack stack, @Nullable World player, List<String> tooltip, ITooltipFlag advanced) {
boolean wet = getStateFromMeta(stack.getItemDamage()).getValue(WET); // Как и в прошлый раз, узнаём нужный нам параметр
String gender = I18n.format(stack.getUnlocalizedName() + ".name"); // Далее создаём спец-строчечку) Выясняем каким же будет финальное имя блока, уже переведённое на текущий язык. То есть то, что вы пишете в lang-файле после "="
if (gender.substring(gender.length() - 2, gender.length() - 1).equals("_")) { // Узнаём, является ли предпоследний символ строки нижним подчёркиванием "_"
gender = gender.substring(gender.length() - 2, gender.length()); // Если да, берём последние два символа
} else gender = ""; // Если нет, превращаем строчку в пустую
tooltip.add(I18n.format(wet ? "tile.block_wet" + gender + ".tooltip" : "tile.block_dry" + gender + ".tooltip")); // Добавляем описание, но немного переделанное
}
Сам lang-файл, в этом случае, будет представлять из себя следующее:
Код:
tile.dirt_f.name=Лесная почва_0
tile.dirt_s.name=Песчаная почва_0
tile.dirt_c.name=Глиняная почва_0
tile.dirt_r.name=Каменистая почва_0
tile.dirt_t.name=Тропическая почва_0
tile.sand.name=Песок_1
tile.block_wet_0.tooltip=Влажная
tile.block_dry_0.tooltip=Сухая
tile.block_wet_1.tooltip=Влажный
tile.block_dry_1.tooltip=Сухой
Таким образом, описания фильтруются по двум последним символам названия.
Результатом будет "Почва влажная", но "Песок сухой"!
А если нам нужно добавит ещё один род: средний? Да, русский язык богатый )
Не вопрос:
Код:
tile.dirt_f.name=Лесная почва_0
tile.dirt_s.name=Песчаная почва_0
tile.dirt_c.name=Глиняная почва_0
tile.dirt_r.name=Каменистая почва_0
tile.dirt_t.name=Тропическая почва_0
tile.sand.name=Песок_1
tile.sand.name=Сено_2
tile.block_wet_0.tooltip=Влажная
tile.block_dry_0.tooltip=Сухая
tile.block_wet_1.tooltip=Влажный
tile.block_dry_1.tooltip=Сухой
tile.block_wet_2.tooltip=Влажное
tile.block_dry_2.tooltip=Сухое
При этом, нашим иностранным друзьям вообще не нужно будет заботится о родах ) Если они не пишут в конце "_x" или "_y", данная строка игнорируется и описание берётся стандартное.
Пример английский локализации:
Код:
tile.dirt_f.name=Forest Dirt
tile.dirt_s.name=Sandy Dirt
tile.dirt_c.name=Clay Dirt
tile.dirt_r.name=Rocky Dirt
tile.dirt_t.name=Tropical Dirt
tile.block_wet.tooltip=Wet
tile.block_dry.tooltip=Dry
Это удобно, но нужно позаботится и о названии самого блока...
Чтобы наши приписки в конце не были видны больше никому, в ItemBlock почвы пришлось добавить следующее:
Java:
@Override
public String getItemStackDisplayName(ItemStack stack) {
String s = super.getItemStackDisplayName(stack); // Берём финальное имя блока
if (s.substring(s.length() - 2, s.length() - 1).equals("_")) { // Проверяем его на наличие "_" второго с конца
return s.substring(0, s.length() - 2); // Если есть, обрезаем его нафик )
}
return s;
}
Благо, почти для всех увлажняемых блоков я применяю один этот ItemBlock.
Думаю, что данный принцип можно применить ещё много к чему. Главное подойти творчески )
На этом мой первый недотутор подошёл к концу. Прошу любить и жаловать )))