合成配方系统

基本信息

Draconic Evolution 在 common/handler/CraftingHandler.java 的 init() 中集中注册全部合成配方,初始化调用点为 CommonProxy.java:154 CraftingHandler.init();。

属性 值
源文件 common/handler/CraftingHandler.java(1087 行)
初始化调用 CommonProxy.java:154
生效配方总数 90
熔炼配方数 2

配方数量统计

init() 中共出现 90 次生效的配方注册调用,按注册方式分类:

注册方式 次数 底层 API 说明
addOre(result, pattern, keyMap, ...) 54 ShapedOreRecipe 有序合成,支持物品字典名
add(result, pattern, keyMap, ...) 16 GameRegistry.addRecipe 原版有序合成,只支持 Item / Block 实例
addShaplessOre(result, ingredients) 11 ShapelessOreRecipe 无序合成,支持物品字典名
addEnergy(result, pattern, keyMap, ...) 9 ShapedOreEnergyRecipe DE 自定义有序合成

方法名 addShaplessOre 在源码中拼写为 Shapless(缺少 e),这是 Brandon3055 原始代码的笔误,引用时必须照抄。已核实:addShapelessOre(正确拼写)在整个仓库中出现 0 次。

统计口径说明:使用 [ \t]+ 行首锚定与「全文调用扫描」两种独立正则分别统计,结果完全一致(均为 addOre 54 / add 16 / addShaplessOre 11 / addEnergy 9)。早期使用 \s+ 的版本会跨越换行匹配并产生错误计数,已弃用。

熔炼配方

CraftingHandler.java:111-119 注册了 2 条熔炼配方:

输入 输出 经验 条件
draconiumBlend(混合龙尘) draconiumIngot × 2 1.0 isEnabled(draconicIngot) && isEnabled(draconicBlend)
draconiumDust(龙尘) draconiumIngot × 1 1.0 isEnabled(draconicIngot) && isEnabled(draconicDust)

禁用联动机制

所有 add* 辅助方法在注册前都会做双重过滤(CraftingHandler.java:1016-1023 等 4 个方法各一份):

private static void addOre(ItemStack result, Object... recipe) {
    if (result == null) return;
    for (Object o : recipe) {
        if (o == null) return;
        String s = o instanceof Item ? ((Item) o).getUnlocalizedName()
                : o instanceof Block ? ((Block) o).getUnlocalizedName() : null;
        if (s != null && ConfigHandler.disabledNamesList.contains(s)) return;
    }
    GameRegistry.addRecipe(new ShapedOreRecipe(result, recipe));
}

因此:

  1. 结果为 null → 整条配方跳过。
  2. 任一材料为 null → 整条配方跳过。
  3. 任一材料的未本地化名出现在配置项 disabledNamesList 中 → 整条配方跳过。

材料通常通过 getStack(Block, count, meta) / getStack(Item, count, meta) 取得,这两个辅助方法会先检查 ModBlocks.isEnabled / ModItems.isEnabled(CraftingHandler.java:1080-1086),若被禁用则返回 null,从而触发上面的第 2 条。

这是一个「全有或全无」的设计:在 disabledNamesList 中禁用任何一个材料,都会连带让用到它的全部配方消失。

跨模组条件分支

init() 中存在若干受其他模组影响的分支:

条件 影响 来源
!Loader.isModLoaded("dreamcraft") 整块跳过龙芯与双足飞龙核心配方 CraftingHandler.java:26, 28
Loader.isModLoaded("ThermalDynamics") 追加 Thermal 系列配方分支 CraftingHandler.java:850
Loader.isModLoaded("IronChest") 追加 Iron Chest 相关配方分支 CraftingHandler.java:1001

dreamcraft 分支意味着:安装 dreamcraft 后,龙芯与双足飞龙核心的基础配方不再注册,这两个物品必须通过其他来源获得。

死代码:被注释的配方

CraftingHandler.java:86 有 1 条被整行注释的配方:

// addOre(ModItems.draconiumBlend, " D ", "DID", " D ", 'I', "ingotIron", 'D', ModItems.draconiumDust);

这是混合龙尘的唯一合成途径。注释掉之后 draconiumBlend 只剩熔炼输出、没有合成输入,详见 材料与消耗品 的「已知缺陷」。

核心升级链配方

四级核心是一条直接合成链,不经过升级调整器:

阶段 形状 注册方式 来源
龙芯 → 双足飞龙核心 CSC / SMS / CSC add(...) CraftingHandler.java:41-50
双足飞龙核心 → 觉醒核心 CSC / SCS / CSC addOre(...) CraftingHandler.java:52
觉醒核心 → 混沌核心 ACA / CSC / ACA addOre(...) CraftingHandler.java:53-62

材料对照见 核心与材料。

数值

数值名 值 来源
生效配方总数 90 CraftingHandler.init()
ShapedOreRecipe 54 同上
原版有序合成 16 同上
ShapelessOreRecipe 11 同上
ShapedOreEnergyRecipe 9 同上
熔炼配方 2 CraftingHandler.java:111-119
被注释的配方 1 CraftingHandler.java:86
受条件分支影响的配方块 3 CraftingHandler.java:26, 850, 1001

交互

触发 行为
在 disabledNamesList 中加入某物品名 该物品与所有用到它的配方一并消失
安装 dreamcraft 龙芯与双足飞龙核心配方消失
安装 ThermalDynamics / IronChest 追加额外配方

相关条目