TFC Registry API
Облегчённый библиотечный мод, который автоматически обнаруживает и унифицирует все типы реестров TerraFirmaCraft, добавленные любым модом. Он работает с любым аддоном при условии, что они корректно реализуют интерфейсы реестров этой библиотеки или оригинальные интерфейсы TFC:
RegistryMetalRegistryRockRegistrySoilVariantRegistryWood
Следующие интерфейсы предоставляются этой библиотекой:
RegistryOreRegistrySandRegistrySoil
Принцип работы обнаружения
Мод автоматически находит все типы если:
- Тип реализует правильный интерфейс
Registry[Type] - Тип является enum (обязательно для автоматического обнаружения)
Если аддон не использует enum или требует ручной регистрации, разработчик аддона всё равно может добавить поддержку, напрямую вызывая вспомогательные методы регистрации:
Пример: ручная регистрация вариантов почвы из источника, не являющегося enum
SoilVariantRegistryHelper.registerTypes(
YourSoilVariantClass.class,
List.of(yourVariant1, yourVariant2, ...),
"yourmodid"
);
Аналогичный метод существует в каждом вспомогательном классе:
MetalRegistryHelper.registerTypes(...)
WoodRegistryHelper.registerTypes(...)
RockRegistryHelper.registerTypes(...)
OreRegistryHelper.registerTypes(...)
SoilRegistryHelper.registerTypes(...)
SandRegistryHelper.registerTypes(...)
SoilVariantRegistryHelper.registerTypes(...)
Примеры кода:
// Металлы
List allMetals = MetalRegistryHelper.getAllMetalValues();
RegistryMetal brass = MetalRegistryHelper.getMetalValueOrDefault("brass");
// Древесина
List allWoods = WoodRegistryHelper.getAllWoodValues();
RegistryWood ebony = WoodRegistryHelper.getWoodValueOrDefault("ebony");
// Породы
List allRocks = RockRegistryHelper.getAllRockValues();
RegistryRock marble = RockRegistryHelper.getRockValueOrDefault("marble");
// Руды
List allOres = OreRegistryHelper.getAllOreValues();
RegistryOre sphalerite = OreRegistryHelper.getOreValueOrDefault("sphalerite");
// Почвы
List
allSoils = SoilRegistryHelper.getAllSoilValues(); RegistrySoil duff = SoilRegistryHelper.getSoilValueOrDefault("duff"); // Цвета песка List
allSands = SandRegistryHelper.getAllSandValues(); RegistrySand white = SandRegistryHelper.getSandValueOrDefault("white"); // Варианты почвы List
allVariants = SoilVariantRegistryHelper.getAllSoilVariantValues(); RegistrySoilVariant inceptisol = SoilVariantRegistryHelper.getSoilVariantValueOrDefault("inceptisol");
Все методы get[Type]ValueOrDefault("name") нечувствительны к регистру и возвращают безопасное значение по умолчанию, если запись не найдена.
Например, перебор списка List может дать список типов древесины, как показано ниже, в сценарии с установленным модом ArborFirmaCraft:
acacia, ash, aspen, birch, blackwood, chestnut, douglas_fir, hickory, kapok, mangrove, maple, oak, palm, pine, rosewood, sequoia, spruce, sycamore, white_cedar, willow, araucaria, baobab, beech, cypress, eucalyptus, fig, ginkgo, hevea, ipe, ironwood, mahoe, mahogany, teak, tualang
Вы можете легко регистрировать новые блоки, используя списки/геттеры, предоставляемые помощниками. Ниже показан пример добавления нового SoilBlock для всех зарегистрированных типов почвы и их вариантов:
public static final Map>> NEW_SOIL_BLOCKS =
SoilRegistryHelper.getAllSoilValues().stream()
.collect(Collectors.toMap(
type -> type,
type -> SoilVariantRegistryHelper.getAllSoilVariantValues().stream()
.collect(Collectors.toMap(
variant -> variant,
variant -> register(type.toString() + "/" + variant.toString(),
() -> new SoilBlock(Block.Properties.of().mapColor(MapColor.DIRT).strength(1.4f), type, variant))
))
));
Например: если конструктор блока/предмета/сущности и т.д. требует использования, например, SoilBlockType, как в случае с ConnectedGrassBlock, вы можете безопасно привести ваш soil из интерфейса RegistrySoil к нему следующим образом: (RegistrySoil)(Object)soil (или любым другим предпочтительным способом), поскольку я реализовал интерфейс RegistrySoil в enum-классе TFC SoilBlockType.
Идеально подходит для разработчиков аддонов, создателей модпаков или любых ситуаций, где требуется работа с каждым совместимым с TFC металлом, древесиной, породой, рудой, почвой, песком или вариантом, независимо от установленных модов.
Например, вы можете использовать списки типов реестров, созданные этой библиотекой, для лёгкого создания новых блоков, предметов, сущностей и т.д. для всех или выбранных записей определённого типа.

