RegistryLib

RegistryLib

为NeoForge模组开发者提供的高效注册表库,使用流畅API使注册方块、物品等更快速、简洁且易于扩展。

RegistryLib

WIKI : https://registrylib.gtodyssey.com/

RegistryLib 是一个 NeoForge 库模组,旨在减少注册样板代码,让常见内容的设置更加一致。无需将物品注册、方块设置、流体定义、提示文本逻辑和与数据相关的粘合代码分散到多个类中,你可以将这些工作全部放在一个流畅的构建器工作流中完成。

RegistryLibTest 模块展示了真实模组开发中最重要的日常用例。它涵盖了快速物品和方块注册、自动物品绑定、自定义战利品行为、内容族的分组配置,以及即使内容开始变得复杂也能保持可读性的提示文本组合。

RegistryLib 还为流体内容提供了更简洁的设置路径。示例包括染色流体、原版风格纹理复用、关联流体方块和桶物品自定义,这使得它非常适合科技模组、材料密集型模组以及那些需要添加大量结构化内容而又不想陷入设置代码泥潭的项目。

对于较大的项目,该库的功能超越了基本注册。RegistryLibTest 演示了 CompositeItem 附件、BlockEntity 绑定、客户端渲染器集成和结构化提示文本节点,因此即使你的模组发展到超越简单物品和装饰性方块之后,该 API 依然实用。

如果你需要一个从快速原型扩展到完整内容模组而又不会变成维护沉重的样板代码的注册工作流,RegistryLib 正是为此而设计的。它是一个面向 NeoForge 开发者的实用构建器工具包,能让注册代码更干净,并留出更多时间专注于游戏玩法。

示例代码片段

基本物品注册

public static final ItemEntry<Item> COPPER_COIN = RegistryLibTest.REGISTRYLIB
        .item("copper_coin", Item::new)
        .lang("Copper Coin")
        .register();

带有自定义战利品和提示文本的方块

public static final BlockEntry<Block> DECORATIVE_STONE = RegistryLibTest.REGISTRYLIB
        .block("decorative_stone", Block::new)
        .initialProperties(() -> Blocks.STONE)
        .lang("Decorative Stone")
        .simpleItem()
        .register();

使用分组进行共享配置

public static final Group TIMER_GROUP = RegistryLibTest.REGISTRYLIB
    .group("timers")
    .langPrefix("Timer")
    .blockProperties(p -> p.strength(5.0F, 6.0F))
    .build();

public static final BlockEntry<TimerBlock> TIMER_TIER_1 = TIMER_GROUP.block( "tier_1", p -> new TimerBlock(p, 1), block -> { block.initialProperties(() -> Blocks.IRON_BLOCK) .item(itemBuilder -> itemBuilder.tooltip((collector, stack) -> { collector.node(new SubNode.Basic(Component.literal("Tier 1 Timer"), 0), true, false); collector.node(new SubNode.Basic(Component.literal("Tick interval: 20"), 10)); })); });

流体、方块和桶的单一流程设置

private static final Identifier FLUID_STILL =
        Identifier.fromNamespaceAndPath("registrylib", "block/fluid/liquid_still");
private static final Identifier FLUID_FLOW =
        Identifier.fromNamespaceAndPath("registrylib", "block/fluid/liquid_flow");

public static final FluidEntry<BaseFlowingFluid.Flowing> ACID = RegistryLibTest.REGISTRYLIB .fluid("acid", FLUID_STILL, FLUID_FLOW) .lang("Acid") .clientExtension(FLUID_STILL, FLUID_FLOW) .register();