Создание предмета#
Основа#
Создадим класс для нашего предмета.
public class ItemKey extends Item {
public ItemKey() {
this.setRegistryName("key");
this.setUnlocalizedName("key");
}
}
setRegistryName(name)
- задаёт регистрируемое имя для нашего предмета, т.е. данное имя будет зарегистрировано в игре и его нельзя будет уже использовать более. В игре будет отображаться какmodid:*item_name*
. Чтобы это увидеть нажмите сочетание клавишF3+H
setUnlocalizedName(name)
- задаёт локализованное имя для нашего предмета, т.е. чтобы нам сделать перевод имени для предмета мы задаём имя, которое будет в конечном итоге выглядеть вот такitem.*item_name*.name
.
Регистрация#
Создадим класс ItemsRegistry.
/*
* Указывает ModId для других ObjectHolder в классе
* Если не добавлять аннотацию над классом, то каждый раз придётся прописывать ModId вручную.
* Подробнее см. https://mcforge.readthedocs.io/en/latest/concepts/registries/#injecting-registry-values-into-fields
*/
@ObjectHolder("tut")
@Mod.EventBusSubscriber// Автоматическая регистрация статичных обработчиков событий
public class ItemsRegistry {
/*
* Получение предмета по ключу. Вы также можете использовать данную аннотацию для получения ванильных предметов
* Если вы не добавляли аннотация над классом, то в таком случаи вам нужно прописать вместо `key` -> `tut:key`
*/
@ObjectHolder("key")
public static final Item KEY = null;
/*
* Начиная с 1.12 регистрацию предметов/блоков/моделей и т.п. следует проводить в специальном событии.
* Событие Register<IForgeRegistryEntry> поддерживает регистрацию: Block, Item, Potion, Biome, SoundEvent,
* PotionType, Enchantment, IRecipe, VillagerProfession, EntityEntry.
* Обратите внимание! Метод является статичным, так как мы используем EventBusSubscriber
*/
@SubscribeEvent
public static void onRegistryItem(RegistryEvent.Register<Item> e) {
// Также вместо `register` можно использовать `registerAll`, чтобы прописать все предметы разом
e.getRegistry().register(new ItemKey());
}
/*
* Начиная с 1.11 регистрацию моделей для предметов/блоков следует проводить в специальном событии.
* Обратите внимание! Метод является статичным, так как мы используем EventBusSubscriber
*/
@SubscribeEvent
@SideOnly(Side.CLIENT)
public static void onRegistryModel(ModelRegistryEvent e) {
// См. следующую часть данной главы
}
}
Всё! Вот так быстро и просто мы создали основной класс для регистрации предметов. Чтобы использовать наш предмет,
где-то в моде, достаточно написать ItemsRegistry.KEY
. Больше никаких манипуляций с классом не требуется,
его не нужно прописывать в стадии загрузки игры. Хотелось бы ещё отметить то, что блоки всегда будут регистрироваться раньше,
чем предметы!
Теперь можете запустить Minecraft и посмотреть свой предмет в живую. Для получения предмета пропишите /give @p tut:key
.
Вместо tut
у вас должен быть modId
мода! Вместо key
у вас должно быть регистрируемое имя вашего предмета.
Модель#
После последних обновлений Forge для 1.12.2, произошли некоторые изменения в регистрации моделей для блоков и предметов.
Для удобства напишем метод registryModel
в нашем классе ItemsRegistry
.
@SideOnly(Side.CLIENT)
private static void registryModel(Item item) {
final ResourceLocation regName = item.getRegistryName();// Не забываем, что getRegistryName может вернуть Null!
final ModelResourceLocation mrl = new ModelResourceLocation(regName, "inventory");
ModelBakery.registerItemVariants(item, mrl);// Регистрация вариантов предмета. Это нужно если мы хотим использовать подтипы предметов/блоков(см. статью подтипы)
ModelLoader.setCustomModelResourceLocation(item, 0, mrl);// Устанавливаем вариант модели для нашего предмета. Без регистрации варианта модели, сама модель не будет установлена для предмета/блока(см. статью подтипы)
}
Теперь пропишем в наш ранее созданный метод-обработчик registryModel(KEY)
. Всё! Наша модель для предмета KEY
зарегистрирована!
Далее перейдём к самой модели! Мы должны создать модель предмета, вы можете создать как плоскую модель(примером может послужить яблоко), так и объёмную модель.
Создадим файл key.json
и перенесём его в папку по данному пути src/main/resources/assets/tut/models/item
.
Пропишем такой код для плоской модели:
{
"parent": "item/generated",
"textures": {
"layer0": "tut:items/key"
}
}
tut
- modId мода.
key
- регистрируемое имя нашего предмета.
Если ваша текстура к модели берётся из самого Minecraft, то tut:
(modId) прописывать не надо! Текстуру необходимо добавить по пути:
src/main/resources/assets/tut/textures/items
Запускаем игру и видим, что у нас получилось(на скриншотах объёмная модель):