Наш мод будем большим и крутым? Несомненно. Многие крутые и большие моды имеют собственные разделы меню, а потому и мы сегодня добавим вкладку, свою вкладку.
Список уроков
Урок пятый. Текстура и модель для предмета!
Ранее вкладки в творческом режиме назывались CretiveTab, но сейчас переименованы в ItemGroup.
Очевидно, что они нам нужны для отображения наших предметов в творческом режиме.
Подготовка
В первую очередь создадим папку init (mod.astler.tutorial_mod_gs.init). Далее в этой папке нужно создать класс с именем «ModItemGroup«, который наследует класс ItemGroup
(net.minecraft.item.ItemGroup).
Чтобы писать меньше кода и не писать кучу классов (как в ванильном майне). Мы будем использовать Supplier<ItemStack>.
Так же мы будем использовать лямбда выражения. Узнать их можно по оператору ->. Они так же представляют функциональный интерфейс и имеют такой синтаксис: параметр(ы) -> тело выражения
Почему же мы используем Supplier, а не получим предмет прямо из вкладки? Нам нужна задержка, так как ItemGroup вкладки создаются до регистрации любых предметов, а иконка не нужна до момента первого рендера ItemGroup. Если же попробовать создать ItemStack с предметом при создании ItemGroup — мы получим ошибку, так как никаких предметов в игре еще нет. Использование Supplier позволяет отложить запрос иконки до момента, когда она будет нужна.
В итоге наш класс должен выглядеть как-то так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
package mod.astler.tutorial_mod_gs.init; import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; import java.util.function.Supplier; public class ModItemGroup extends ItemGroup { private final Supplier<ItemStack> iconSupplier; public ModItemGroup(final String name, final Supplier<ItemStack> iconSupplier) { super(name); this.iconSupplier = iconSupplier; } @Override public ItemStack createIcon() { return iconSupplier.get(); } } |
Создание вкладки ItemGroup
Итак. Мы написали класс своего ItemGroup и теперь можем создать вкладку в игре. Для этого создаём новый класс MyModItemGroups (в той же папке) и создадим константу ItemGroup c именем MOD_ITEM_GROUP.
В нашем классе два параметра. Первый — наш MODID, а второй — Supplier, где можно указать желаемый любой предмет из игры. Например: () -> new ItemStack(Items.DIAMOND).
Получаем в итоге что-то такое:
1 2 3 4 5 6 7 8 9 10 |
package mod.astler.tutorial_mod_gs.init; import mod.astler.tutorial_mod_gs.TutorialGSMod; import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; public class MyModItemGroups { public static final ItemGroup MOD_ITEM_GROUP = new ModItemGroup(TutorialGSMod.MODID, () -> new ItemStack(Items.DIAMOND)); } |
И укажем нашему предмету нашу вкладку!
До этого он был у меня в еде. Так что ищем строку:
setup (new Item (new Item.Properties().group(ItemGroup.FOOD)), «sausage»)
и заменяем ItemGroup.FOOD на MyModItemGroups.MOD_ITEM_GROUP.
Запускаем…
Итак, народ. Это оно! Ваша вкладка, без смс и регистрации! С кака…ммм… Сосиской и алмазиком!
Свои предметы на вкладке
Если вы когда-либо видели моды, то знаете, что чаще всего новые вкладки используют новые предметы. Сделаем так и мы. Вот только есть один момент. В майнкрафте есть статические ссылки на все предметы и блоки (что мы и использовали). А значит и нам такие нужны. Все в той же папке init создаем файл ModItems и аннотируем его @ObjectHolder (net.minecraftforge.registries.ObjectHolder) с параметром аннотации TutorialGSMod.MODID.
После чего в самом классе добавляем константу типа Item, которая должна иметь такое же имя, как и наш предмет, но значением указываем null.
Иными словами, вот код для сосиски:
1 2 3 4 5 6 7 8 9 10 |
package mod.astler.tutorial_mod_gs.init; import mod.astler.tutorial_mod_gs.TutorialGSMod; import net.minecraft.item.Item; import net.minecraftforge.registries.ObjectHolder; @ObjectHolder(TutorialGSMod.MODID) public class ModItems { public static final Item SAUSAGE = null; } |
Если вы в теме, то у вас могут возникнуть вопросы по поводу null. Но ничего страшного! Переменная будет инициализирована при регистрации предмета. На этом тут все, а мы можем спокойно заменять Items.DIAMOND на ModItems.SAUSAGE.
Проверяем.
На этом пожалуй все. Теперь у вас есть своя вкладка для своих предметов и будем её пополнять!
Спасибо за внимание. Перевел и адаптировал Aslter. Оригинал.