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 不解析。