目录

Cereal Anvil Lib

一个砧前置库模组(当前基于 NeoForge)。为扩展模组提供通用砧方块(完好/开裂/损坏三态)与行为系统。

功能

  • 通用砧方块注册:一个砧族自动注册 3 个方块(<id>_anvil<id>_chipped_anvil<id>_damaged_anvil)及对应物品,命名空间为扩展模组的 modid。支持两种注册入口:
    • JSON 族清单(数据驱动):data/<modid>/cerealanvillib/anvil_families.json,适合纯外观砧
    • Java APIAnvilRegistry.registerFamily(family, factory),可传入自定义方块类(如带氧化的铜砧)
  • 完整铁砧 GUI:继承原版 AnvilBlock,修复与附魔功能与原版一致;lib 以 Mixin 放行所有 AnvilLibBlock 子类进入 GUI / 摔落损坏流程
  • 损坏降级:完好 → 开裂 → 损坏 → 销毁,保留朝向;通过 AnvilBlockMixin 委托 lib 的降级链,支持任意扩展方块
  • 行为系统:损坏概率、熔炉燃料与燃烧时长可配置(AnvilBehavior),默认回退原版铁砧行为;AnvilBehaviorRegistry 是查询的单一事实来源,预留运行时修改接口
  • 创造栏标签页辅助AnvilCreativeTabs 一键生成”砧合集” tab(标题/图标/按命名空间收集方块),排序可自定义,不声明位置走 NeoForge 默认排序
  • 工具交互转换AnvilBlockTransforms 注册”源族 → 目标族”的逐状态转换(如去皮、脱蜡),AnvilLibBlock 默认实现 getToolModifiedState;工具能力(ItemAbility)与蹲下要求由扩展模组声明,lib 不硬编码具体物品
  • 数据生成:lib 提供 AnvilAssetsProvider(blockstate/方块模型/物品模型)、AnvilRecipesProvider(合成配方基类)、AnvilDataMaps(氧化/涂蜡 DataMap 辅助),扩展模组在 GatherDataEvent 中注册即可生成全部手写 JSON
  • 裂纹纹理:模板模型内置渐变裂纹纹理(开裂/损坏),扩展模组可覆盖

砧模组用法

neoforge.mods.toml 声明对 cerealanvillib 的依赖(requiredordering="AFTER"),然后在主类构造阶段注册砧族。

方式一:JSON 族清单

放置 data/<modid>/cerealanvillib/anvil_families.json

{
  "schemaVersion": 1,
  "families": [
    {
      "id": "copper",
      "textures": {
        "body": "minecraft:block/copper_block",
        "top": "minecraft:block/copper_block",
        "top_side": "minecraft:block/copper_block"
      },
      "block": {
        "mapColor": "copper",
        "strength": [5.0, 6.0],
        "sound": "copper"
      },
      "behavior": {
        "damageChance": 0.1,
        "burnTime": 0
      }
    }
  ]
}

字段说明:

  • id:族 id([a-z0-9_]+),决定方块名
  • textures.body/top/top_side:必填,完整纹理资源路径;textures.crack_chipped/crack_damaged:可选,默认使用 lib 自带渐变裂纹
  • displayNameKey:可选,缺省为 block.<modid>.<id>_anvil,开裂/损坏自动派生
  • block:可选,默认原版铁砧属性(金属色、硬度 5/1200、铁砧音效);requiresCorrectToolForDrops 可选
  • behavior:可选,缺省完全按原版铁砧(损坏 12%、不可燃)

JSON 清单方式使用 lib 内置的通用方块类(AnvilLibBlock),适用于纯外观砧。

方式二:Java API

需要自定义方块类(氧化、去皮等交互)时使用:

AnvilFamily family = new AnvilFamily(
        id, MODID, null,
        "minecraft:block/copper_block",
        "minecraft:block/copper_block",
        "minecraft:block/copper_block",
        "cerealanvillib:block/crack_chipped", "cerealanvillib:block/crack_damaged",
        MapColor.METAL, 5.0F, 1200.0F, SoundType.COPPER, true,
        AnvilBehavior.VANILLA);
AnvilRegistry.registerFamily(family, (properties, displayName, state) -> new MyAnvilBlock(properties, displayName));

自定义方块必须继承 AnvilLibBlock,以便 GUI、损坏 Mixin 与行为系统正常工作。

可选能力

  • 创造栏 tab
    AnvilCreativeTabs.register(CREATIVE_MODE_TABS, MODID, () -> iconFamily, mySorter);
  • 工具转换(如去皮/脱蜡):
    AnvilBlockTransforms.register(unstrippedFamily, strippedFamily, ItemAbilities.AXE_STRIP, true);
  • 数据生成(生成 blockstate/模型/物品/合成/DataMap,替代手写 JSON):
    modEventBus.addListener(MyDataGen::onGatherData);  // 在 GatherDataEvent 中注册 provider

数据生成

lib 提供以下 datagen 类(org.cerealstudio.lib.anvil.datagen):

  • AnvilAssetsProvider:为所有已注册砧族生成 blockstate(facing 旋转模板)、方块模型(引用 cerealanvillib:block/template_anvil{,_chipped,_damaged})与物品模型
  • AnvilLootTableProvider:生成自掉战利品表(survives_explosion),支持 Predicate 过滤与自定义掉落物解析器(返回 null 表示方块不掉落)
  • AnvilRecipesProvider:抽象基类,生成合成配方(### / " P " / PPP),原料由扩展模组声明
  • AnvilDataMaps:氧化(next_oxidation_stage)/涂蜡(waxed)DataMap JSON 辅助

lib 不在数据生成目标 mod 列表内,由扩展模组在自身 GatherDataEvent 中注册这些 provider。src/generated/resources 由 data run 生成并提交到版本库。

行为系统

AnvilBehaviorRegistryorg.cerealstudio.lib.anvil.api)是行为查询的单一事实来源:

  • get(BlockState):未注册时返回 AnvilBehavior.VANILLA(损坏 0.12、不可燃)

开发

# 构建(产物在 build/libs/)
./gradlew build

# 发布到本地 repo(供扩展模组依赖)
./gradlew publish

# 数据生成(输出到 src/generated/resources)
./gradlew runData

# 客户端 / 服务端
./gradlew runClient
./gradlew runServer

环境要求

  • Java 25
  • Minecraft 与 NeoForge 版本请以当前发布说明为准(支持列表随版本更新)

许可证

GNU AGPL-3.0。裂纹纹理来源与署名见 THIRD_PARTY_NOTICES.md

关于

null

174.0 KB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号