Регистрация в новых версиях 1.14+ (Forge, NeoForge, Architectury API)

Регистрация в новых версиях 1.14+ (Forge, NeoForge, Architectury API)

1,921
107
378
MaximPixel добавил(а) новый ресурс:

Регистрация в новых версиях 1.14+ - Использование новых регистров

С версии 1.14 появились новый способ регистрации блоков, в вообщем все ForgeRegistryEntry-объекты, которые можно вообще зарегистрировать.

Раньше большинство моддеров (знаю из их исходников) делали регистрацию с помощью ивента вот так:
Java:
@SubscribeEvent
public static void registerBlocks(RegistryEvent.Register<Block> event) {
    event.getRegistry().registerAll(...);  
}
С версии 1.14 делать так тоже можно, но вот новый способ.

Появились классы...

Узнать больше об этом ресурсе...
 
Честно, не вижу в данном способе ничего удобного.
Мне проще обращаться к объекту напрямую, а не через геттер.
В том, чтобы ручками прописать объекту имя, не вижу ничего плохого. Тем более, что это можно сделать в методе регистрации ровно так же, как это делается в DeferredRegister.

Сам лично пользуюсь временным списком своих объектов с последующей их регистрацией:
Пример из 1.21.3:
private static final Map<ResourceLocation, Block> BLOCKS = Maps.newHashMap();

public static final MyBlock MY_BLOCK = register("my_block", prop -> new MyBlock(prop));

private static <T extends Block> T register(String name, Function<Properties, T> factory) {
    ResourceLocation res = ResourceLocation.fromNamespaceAndPath(modId, name);
    T block = factory.apply(Properties.of().setId(ResourceKey.create(Registries.BLOCK, res)));
    BLOCKS.put(res, block);
    return block;
}

public static void register(RegisterEvent event) {
    event.register(Registries.BLOCK, helper -> BLOCKS.forEach(helper::register));
}
 
Ну, не знаю, кому как легче.
А мне кажется, это более универсальный способ, раз он перекочевал в Architectury API.
 
Назад
Сверху