Моя любимая часть. Она простая, но при этом именно сейчас наш мод перестанет быть пустышкой! Время добавить item — предмет!
Редактируем шаблон мода
Эта часть продолжение изменений, которые мы начали в Mods.toml. Настраиваем новый Forge мод.
Изначальное имя (ExampleMod) не особо подходит, так что меняем как имя класса, так и файла и всех папок в соответствии с тем, что мы прописали в build.gradle.
Ещё добавим статическую переменную modid мода:
1 |
public static final String MODID = "gsmod"; |
А заодно и заменим хард ввод в аннотации Mod:
1 |
@Mod(MODID) |
Добавим ещё одну аннотацию для прослушивания событий:
1 |
@Mod.EventBusSubscriber(bus=Mod.EventBusSubscriber.Bus.MOD) |
И удалим всё лишнее:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
package dev.astler.gsmod; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import static dev.astler.gsmod.GSMod.MODID; import static dev.astler.gsmod.items.ModItems.ITEMS; @Mod(MODID) @Mod.EventBusSubscriber(bus=Mod.EventBusSubscriber.Bus.MOD) public class GSMod { public static final String MODID = "gsmod"; public GSMod() { } } |
Добавляем предмет Item
Теперь создадим папку items, а в ней файл ModItems.java и добавим каменную палку, как и в прошлый раз.
Туда добавляем DeferredRegister для предметов:
1 |
public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, MODID); |
Как вы могли заметить, что тип регистра определяет переданный класс и ForgeRegisties. Дальше мы будем использовать подобные конструкции для регистрации других элементов игры.
1 |
public static final RegistryObject<Item> STONE_STICK = ITEMS.register("stone_stick", () -> new Item(new Item.Properties())); |
На деле в Minecraft 1.17 изменились некоторые импорты и имена классов. Например, вся папка предметов (items) из корня minecraft переехала в папку world. Но это не страшно, особенно если учесть, что все эти импорты за нас делает IDE :D.
Итоговый результат:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
package dev.astler.gsmod.items; import net.minecraft.world.item.Item; import net.minecraftforge.fmllegacy.RegistryObject; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; import static dev.astler.gsmod.GSMod.MODID; public class ModItems { public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, MODID); public static final RegistryObject<Item> STONE_STICK = ITEMS.register("stone_stick", () -> new Item(new Item.Properties())); } |
И, конечно же, регистрируем их в GSMod:
1 2 3 4 5 6 7 8 9 10 |
@Mod(MODID) @Mod.EventBusSubscriber(bus=Mod.EventBusSubscriber.Bus.MOD) public class GSMod { public static final String MODID = "gsmod"; public GSMod() { IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus(); ITEMS.register(bus); } } |
И на этом тут всё. Можно запускать!
Да, это ваш предмет. Но теперь нужно докинуть ресурсов: добавляем модель и текстуру для предмета Minecraf. А ещё его можно перевести: локализация в Minecraft.
Список всех уроков: Создание модов для Minecraft 1.15-1.17 [Forge/Fabric]
Исходный код проекта на Github