FZ 模块(appeng.integration.modules.FZ)

基本信息

属性 值
源码 appeng/integration/modules/FZ.java
类声明 32,public class
实现接口 IFZ(integration/abstraction/IFZ.java:18)+ IIntegrationModule
静态单例 public static FZ instance
modID factorization(IntegrationType.java:36)
side BOTH
本 wiki 收录情况 Factorization 未被本 wiki 收录 —— 写全名 Factorization

职责

让 AE2 的 ME 端能读写 Factorization 的桶(barrel), 并向 Factorization 注入研磨配方。

生命周期

阶段 行号 动作
init() 128 反射抓 TileEntityDayBarrel 的 4 个成员
postInit() 138 注册 FactorizationHandler 外部存储

注入内容 1:init() 的反射探测(4 项)

// FZ.java:129-134
day_BarrelClass = Class.forName("factorization.weird.TileEntityDayBarrel");
day_getItemCount = day_BarrelClass.getDeclaredMethod("getItemCount");
day_setItemCount = day_BarrelClass.getDeclaredMethod("setItemCount", int.class);
day_getMaxSize   = day_BarrelClass.getDeclaredMethod("getMaxSize");
day_item         = day_BarrelClass.getDeclaredField("item");
缓存字段 目标成员 行号
day_BarrelClass 类 factorization.weird.TileEntityDayBarrel 129
day_getItemCount 方法 getItemCount() 131
day_setItemCount 方法 setItemCount(int) 132
day_getMaxSize 方法 getMaxSize() 133
day_item 字段 item 134

字段名带 day_ 前缀(源码原文),因为 Factorization 里桶分 「日桶」与「夜桶」两类,本模块只处理 TileEntityDayBarrel。

⚠️ 这些是方法句柄缓存,不是 Method.invoke。 getDeclaredMethod 在方法名变化时抛 NoSuchMethodException → 被 IntegrationNode.java:102 捕获 → FAILED。

注入内容 2:postInit() 注册外部存储

// FZ.java:139
AEApi.instance().registries().externalStorage().addExternalStorageInterface(new FactorizationHandler());
handler 源文件
FactorizationHandler integration/modules/helpers/FactorizationHandler.java
FactorizationBarrel integration/modules/helpers/FactorizationBarrel.java

后者是「单个桶」的适配,FZ.java:94 处 new FactorizationBarrel(this, te)。

⚠️ 这是 5 个外部存储注册点之一(见 me/storage 总览)。

IFZ 的 6 个方法

抽象接口 integration/abstraction/IFZ.java:18:

方法 接口行号 性质
barrelGetItem(TileEntity) 20 读
barrelGetMaxItemCount(TileEntity) 22 读
barrelGetItemCount(TileEntity) 24 读
setItemType(TileEntity, ItemStack) 26 写
barrelSetCount(TileEntity, int) 28 写
isBarrel(TileEntity) 32 判定
grinderRecipe(ItemStack, ItemStack) 34 配方注入(7 个,不是 6 个)

⚠️ 上表列了 7 个方法,不是 6。abstraction.md 的表里 IFZ 记的是 6 —— 需要以 IFZ.java 为准:本接口实际声明 7 个方法(20 / 22 / 24 / 26 / 28 / 32 / 34)。

桶不是 AE2 的方块

⚠️ FactorizationBarrel 只是让 AE2 读写别人的桶。 本模块不注册任何 AE2 方块或物品,也不产出「AE2 版桶」。 写条目时不要把 Factorization 的桶写成 AE2 自己的。

mod 没装时是否安全跳过

是。factorization 未装 → FAILED → FZ.class 不加载 → factorization.weird.TileEntityDayBarrel 不解析。

相关条目