====== Система реестра ======
Вам нужно будет зарегистрировать большую часть контента, который вы добавляете в игру. Это может помочь с:
* Сообщением игре, что ваш контент существует.
* Проверкой игрового контента между клиентом и сервером.
* Обработкой недопустимого содержимого в сохранении.
* Предотвращением конфликтов между разными модами.
* Сжатием для связи клиент<->сервер и сохранением данных.
* Абстрагированием или сокрытием числовых идентификаторов.
При регистрации любого типа контента вы передаете ''%%Identifier%%'', который является меткой для вашего добавления. Идентификаторы, часто сокращенно называемые Айди(ID), имеют пространство имен и путь. В большинстве случаев пространство имен — это идентификатор вашего мода, а путь — это имя контента, который вы регистрируете. Например, стандартный блок грязи имеет идентификатор ''%%minecraft:dirt%%''.
Использование пользовательского контента без его регистрации может привести к ошибочному поведению, например отсутствующим текстурам, проблемам с сохранением мира и сбоям. Игра обычно сообщит вам, если вы забудете что-то зарегистрировать.
===== Типы реестра =====
При регистрации контента необходимо указать, в какой реестр вы добавляете контент. Базовая игра предоставляет реестры для всего ванильного контента, который можно найти в ''%%Registry%%''. Два примера реестров, которые вы можете использовать, включают ''%%Registry.ITEM%%'' для предметов и ''%%Registry.BLOCK%%'' для блоков.
Подробный обзор и описание всех доступных реестров см. на странице [[ru:tutorial:registry_types|Типы реестров]].
===== Регистрация контента =====
Используйте ''%%Registry.register%%'' для добавления контента в реестры:
public static T register(Registry super T> registry, Identifier id, T entry) {
return ((MutableRegistry)registry).add(id, entry);
}
**registry** — экземпляр реестра, в который вы хотите добавить контент. Список всех ванильных реестров, расположенных в ''%%Registry%%'', можно найти на странице [[ru:tutorial:registry_types|Типы реестров]].
**id** — идентификационная метка для вашего контента в реестре. Стандартное соглашение: ''%%modid:name%%'', как видно из ''%%minecraft:dirt%%''.
**запись** — экземпляр контента, который вы хотите зарегистрировать.
===== Методы реестра =====
''%%get%%'' — возвращает запись, связанную с идентификатором внутри реестра. Если запись не существует, ''%%DefaultedRegistry%%'' возвращает значение реестра по умолчанию, а ''%%SimpleRegistry%%'' возвращает null.
@Nullable
public abstract T get(@Nullable Identifier id);
----
''%%getId%%'' — возвращает ''%%Identifier%%'', связанный с записью в реестре. Если запись не существует, ''%%DefaultedRegistry%%'' возвращает идентификатор реестра по умолчанию, а ''%%SimpleRegistry%%'' возвращает null.
@Nullable
public abstract Identifier getId(T entry);
----
''%%getRawId%%'' — возвращает внутренний целочисленный идентификатор, связанный с записью в реестре. Если запись не существует, ''%%DefaultedRegistry%%'' возвращает необработанный идентификатор значения реестра по умолчанию, а ''%%SimpleRegistry%%'' возвращает -1.
public abstract int getRawId(@Nullable T entry);