====== Система реестра ====== Вам нужно будет зарегистрировать большую часть контента, который вы добавляете в игру. Это может помочь с: * Сообщением игре, что ваш контент существует. * Проверкой игрового контента между клиентом и сервером. * Обработкой недопустимого содержимого в сохранении. * Предотвращением конфликтов между разными модами. * Сжатием для связи клиент<->сервер и сохранением данных. * Абстрагированием или сокрытием числовых идентификаторов. При регистрации любого типа контента вы передаете ''%%Identifier%%'', который является меткой для вашего добавления. Идентификаторы, часто сокращенно называемые Айди(ID), имеют пространство имен и путь. В большинстве случаев пространство имен — это идентификатор вашего мода, а путь — это имя контента, который вы регистрируете. Например, стандартный блок грязи имеет идентификатор ''%%minecraft:dirt%%''. Использование пользовательского контента без его регистрации может привести к ошибочному поведению, например отсутствующим текстурам, проблемам с сохранением мира и сбоям. Игра обычно сообщит вам, если вы забудете что-то зарегистрировать. ===== Типы реестра ===== При регистрации контента необходимо указать, в какой реестр вы добавляете контент. Базовая игра предоставляет реестры для всего ванильного контента, который можно найти в ''%%Registry%%''. Два примера реестров, которые вы можете использовать, включают ''%%Registry.ITEM%%'' для предметов и ''%%Registry.BLOCK%%'' для блоков. Подробный обзор и описание всех доступных реестров см. на странице [[ru:tutorial:registry_types|Типы реестров]]. ===== Регистрация контента ===== Используйте ''%%Registry.register%%'' для добавления контента в реестры: public static T register(Registry 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);