TFC Registry API avatar

TFC Registry API [1.21.10]

TFC Registry API

Облегчённый библиотечный мод, который автоматически обнаруживает и унифицирует все типы реестров TerraFirmaCraft, добавленные любым модом. Он работает с любым аддоном при условии, что они корректно реализуют интерфейсы реестров этой библиотеки или оригинальные интерфейсы TFC:

  • RegistryMetal
  • RegistryRock
  • RegistrySoilVariant
  • RegistryWood

Следующие интерфейсы предоставляются этой библиотекой:

  • RegistryOre
  • RegistrySand
  • RegistrySoil

Принцип работы обнаружения

Мод автоматически находит все типы если:

  • Тип реализует правильный интерфейс 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 металлом, древесиной, породой, рудой, почвой, песком или вариантом, независимо от установленных модов.

Например, вы можете использовать списки типов реестров, созданные этой библиотекой, для лёгкого создания новых блоков, предметов, сущностей и т.д. для всех или выбранных записей определённого типа.

Требуемые зависимости

TerraFirmaCraft avatarTerraFirmaCraftDries007

Скачать TFC Registry API

 
Тип Скачать Версия Загрузчик Обновлено Размер
ReleaseTFCRegistryAPI-1.21.x-1.01.21+10 NeoForge2 декабря 202598,9 КБ
Пожалуйста авторизуйтесь, чтобы оставить свой комментарий.