配方系统

基本信息

loader/RecipeLoader.java(public static final RecipeLoader INSTANCE,实现 Runnable) 注册 53 条标准配方 + 4 个自定义配方类。

项 值
标准配方数 53(GameRegistry.addRecipe / addShapelessRecipe 合计)
自定义配方类 4
触发 RecipeLoader.INSTANCE.run()

53 这个数只覆盖标准路径。自定义的 4 个走 CraftingManager.addRecipe 之外的实现(IRecipe / ShapelessRecipes 子类), 只数 GameRegistry.add* 会漏。

标准配方用到的三种类型

类型 出现处
ShapedOreRecipe 有序合成,支持矿词典
ShapelessOreRecipe 无序合成,支持矿词典
addShapelessRecipe 无序,不支持矿词典

两者用 ItemAndBlockHolder.<NAME>.stack() 取本 mod 产物, AE2 侧材料用 AE2_* 常量。

4 个自定义配方类

类 文件 基类/接口 行 作用
DisassembleRecipe loader/recipe/DisassembleRecipe.java implements IRecipe 140 拆解配方,无固定产物
WirelessTerminalRecipe 同目录 extends ShapelessRecipes 72 无线终端合成
WirelessTerminalEnergyRecipe 同目录 extends ShapelessRecipes 69 无线终端 + 能量卡
WirelessTerminalQuantumBridgeRecipe 同目录 extends ShapelessRecipes 70 无线终端 + 量子桥卡

三个 WirelessTerminal*Recipe 各自持有一个静态 ItemStack (energyCard / quantumBridgeCard / infinityBoosterCard), 并暴露 getEnergyCard() / getQuantumBridgeCard() / getInfinityBoosterCard() 静态取值方法。

DisassembleRecipe 特殊:

  • getRecipeOutput() 注释写 // no default output..
  • getCraftingResult 依输入动态计算
  • getRecipeSize() 单独实现

ItemAndBlockHolder

loader/ItemAndBlockHolder.java 集中持有全部方块/物品引用, 供配方与 AE2 升级卡注册 共用。 ItemAndBlockHolder.init() 在 CommonProxy.preInit() 中调用 (早于 postInit 的升级卡注册)。

三个 Runnable 加载器

加载器 run() 做什么
ChannelLoader 13 条网络消息,见 Channel Loader
RecipeLoader 53 条标准配方 + 4 个自定义配方类
KeybindLoader 7 个按键,见 Key Bindings
RenderLoader WalrusRenderer.load() + 4 个物品渲染器
ListenerLoader ClientHelper.register()(仅事件监听)

IRegister<T> 是它们共同实现的 register() 型接口(单方法), 但这 5 个类实际实现的是 Runnable 的 run() —— IRegister 在本 mod 内没有被这些加载器使用。

RenderLoader 注册的 4 个物品渲染器: ItemDropRender、ItemPacketRender、ItemWalrusRender、 ItemCertusQuartzTankRender。

相关条目

源码

  • src/main/java/com/glodblock/github/loader/RecipeLoader.java
  • src/main/java/com/glodblock/github/loader/recipe/(4 个类)
  • src/main/java/com/glodblock/github/loader/{ChannelLoader,KeybindLoader,RenderLoader,ListenerLoader,IRegister,ItemAndBlockHolder}.java
  • 复算:grep -cE 'GameRegistry\.add(Recipe|ShapelessRecipe)' src/main/java/com/glodblock/github/loader/RecipeLoader.java → 53