Recipe System

基本信息

属性 值
总入口 openmodularturrets.handler.recipes.RecipeHandler.initRecipes()
调用时机 init(FMLInitializationEvent),在 ModCompatibility.performModCompat() 之后(ModularTurrets.java:64)
处理器数 6 个(1 个选择器 + 5 个配方集 + 1 个集成配方集)
配方类型 net.minecraftforge.oredict.ShapedOreRecipe(全部为有序合成)
选择配置 miscellaneous/Which recipes should we do?,默认 auto

配方处理器

RecipeHandler.initRecipes()(RecipeHandler.java:14-46)用 if-else 链选择恰好一个配方集:

配置值 条件 处理器
thermalexpansion ModCompatibility.ThermalExpansionLoaded ThermalExpansionRecipeHandler
enderio ModCompatibility.EnderIOLoaded EnderIORecipeHandler
mekanism ModCompatibility.MekanismLoaded MekanismRecipeHandler
vanilla 无条件 VanillaRecipeHandler
auto 依次尝试 EnderIO → ThermalExpansion → Mekanism → Vanilla 同上

兜底:若配置值非法或所选模组未加载(recipesDone 保持 false),最后无条件执行 VanillaRecipeHandler.init()(RecipeHandler.java:43-46)。因此永远存在一套可用的配方。

auto 模式有分支覆盖问题(已核实):auto 分支内部用的是独立的 if-else-if 链(RecipeHandler.java:31-39),当 EnderIO、ThermalExpansion、Mekanism 同时加载时只执行 EnderIO 一套,而外层 if-else if 链中 EnderIO 分支还额外要求 ConfigHandler.recipes.equals("enderio")。这是源码的实际结构,不做推测性修正。

处理器规模

grep -c 'addRecipe|new ShapedOreRecipe' 实测:

处理器 命中数 覆盖内容
RecipeHandler 61 不随模组变化的固定配方(见下)
VanillaRecipeHandler 69 纯原版材料的全部等级部件与炮塔
ThermalExpansionRecipeHandler 73 Thermal Expansion 材料版本
EnderIORecipeHandler 73 Ender IO 材料版本
MekanismRecipeHandler 73 Mekanism 材料版本
ComputerRecipeHandler 3 ComputerCraft / OpenComputers 专用
ThaumcraftRecipeHandler 3 Thaumcraft 专用

来源:逐文件 grep -c 实测。

与模组无关的固定配方

RecipeHandler.initRecipes() 在选择完配方集之后,无条件追加一批固定配方(RecipeHandler.java:48-459),确保低等级内容在任何整合包里都能合成。

Tier 1 部件与底座(:50-126)

产物 源码行 布局
Barrel (Tier 1) :50-59 AAA / ␣B␣ / AAA(A=圆石, B=木板)
Chamber (Tier 1) :61-72 AAA / ␣BC / AAA(A=圆石, B=木板, C=红石粉)
Sensor (Tier 1) :74-83 ␣A␣ / ABA / ␣A␣(A=红石粉, B=木板)
Turret Base (Tier 1) :85-96 ABA / BCB / ABA(A=圆石, B=木板, C=Sensor T1)
Base Power Expander (Tier 1) :98-111 ABA / DCD / ADA(A=圆石, B=木板, C=红石粉, D=IO Bus)
Base Inventory Expander (Tier 1) :113-126 ABA / DCD / ADA(A=圆石, B=木板, C=箱子, D=IO Bus)

源码注释说明用意:“Tier 1 static recipes (Because they shouldn’t use expensive mod items, only redstone, cobblestone and planks)”(RecipeHandler.java:49)。

受配置开关保护的配方(:128-160)

产物 保护条件
Disposable Item Turret ConfigHandler.getDisposableTurretSettings().isEnabled()
Potato Cannon Turret ConfigHandler.getPotatoCannonTurretSettings().isEnabled()

炮塔被配置关闭时,其方块与配方同时消失,不会出现「有配方但没方块」或反之。

无条件追加的其余固定配方

产物组 源码行
Basic Turret Base Crank :162-168
4 种通用附加件(太阳能 / 红石反应堆 / 伤害放大 / 回收 / 伪装) :170-242
Fences Tier 1 – 5 :244-298
Hard Walls Tier 1 – 5 :300-356
5 种升级件 :368-432
Ammo - Blazing Clay(产出 32 个) :434-445
IO Bus :447-459

逐种布局见对应条目:Fences & Hard Walls、Upgrades、Addons、Turret Parts、Ammo、Crank。

跨模组配方

两个集成配方集在固定配方之后追加,各自带条件(RecipeHandler.java:358-366):

处理器 条件
ThaumcraftRecipeHandler ModCompatibility.ThaumcraftLoaded && ConfigHandler.shouldDoThaumcraftIntegration
ComputerRecipeHandler (ComputercraftLoaded || OpenComputersLoaded) && ConfigHandler.shouldDoThaumcraftIntegration

条件写错(已核实):ComputerRecipeHandler 的第二个条件用了 shouldDoThaumcraftIntegration(泰拉的开关)而不是 shouldDoComputerIntegration(计算机的开关)。后者是死配置,全仓 0 处读取。详见 Config 的「无读取者的死配置」。这意味着 ComputerCraft / OpenComputers 的专用配方(例如 Addon - Serial Port)被泰拉的配置项控制。

注意:EnderIORecipeHandler / ThermalExpansionRecipeHandler / MekanismRecipeHandler 只作为 Which recipes should we do? 的候选值出现,它们是「用哪家的材料做配方」,不是「给该模组加东西」;后者只有 Thaumcraft 与 ComputerCraft/OC 两家。

相关条目