Перейти к содержанию

Реестры#

В игре существуют классы-реестры. Они необходимы для регистрации всего, что возможно: блоки, предметы, существа, зачарования, жидкости и так далее.

Использование реестров#

Класс Registry содержит множество реестров для самых разных игровых объектов. Создадим свой класс-утилиту для упрощения работы с реестром.

Для начала, я рекомендую создать в нашем главном классе (FabricTutorial) финальную публичную статичную переменную (проще говоря константу) типа String. Назовем её MOD_ID и присваиваем ей наш ID мода (в моём случае это "fabrictut"):

package ru.mcmodding.fabrictut;

import net.fabricmc.api.ModInitializer;

public class FabricTutorial implements ModInitializer {
    public static final String MOD_ID = "fabrictut";
    @Override
    public void onInitialize() {

    }
}

Затем создаём где-нибудь класс с названием FabricTutorialRegistry и сразу импортируем нашу статичную переменную:

package ru.mcmodding.fabrictut.util;

import static ru.mcmodding.fabrictut.FabricTutorial.MOD_ID;

public class FabricTutRegistry {

}

Я создал для класса отдельный пакет util, в котором у меня будут все классы-утилиты.

Добавим в тело нашего класса несколько основных статичных методов, с помощью которых мы будем регистрировать наши блоки и предметы:

package ru.mcmodding.fabrictut.util;

import static ru.mcmodding.fabrictut.FabricTutorial.MOD_ID;

public class FabricTutRegistry {
    public static Item registerItem(String id, Item item) {
        if (item instanceof BlockItem) {
            ((BlockItem)item).appendBlocks(Item.BLOCK_ITEMS, item);
        }
        return Registry.register(Registry.ITEM, new Identifier(MOD_ID, id), item);
    }

    public static Block registerBlock(String id, Block block) {
        return Registry.register(Registry.BLOCK, new Identifier(MOD_ID, id), block);
    }
}

Эти методы используются самой игрой, но мы переделали их, передавая в аргумент строку, а не Identifier т.к. это не очень удобно и короче, а еще позволяет сразу использовать наш MOD_ID, не указывая его каждый раз.

Наиболее часто использующиеся реестры:

Реестр Предназначение
Registry.ITEM Реестр предметов
Registry.BLOCK Реестр блоков
Registry.ENTITY_TYPE Реестр типов существ
Registry.SOUND_EVENT Реестр звуков
Registry.ENCHANTMENT Реестр зачарований
Registry.FLUID Реестр жидкостей

Помимо тех реестров, что есть в таблице, игра содержит еще десятки других, которые Вы можете посмотреть тут Вы можете попробовать создать свои методы для работы с этими реестрами, основываясь на нашем готовом классе-утилите.