DSU 模块(appeng.integration.modules.DSU)
基本信息
| 属性 | 值 |
|---|---|
| 源码 | appeng/integration/modules/DSU.java |
| 类声明 | 25,public class |
| 实现接口 | IDSU(integration/abstraction/IDSU.java:17)+ IIntegrationModule |
| 静态单例 | public static DSU instance |
| modID | null(IntegrationType.java:34,显示名 Deep Storage Unit) |
| side | BOTH |
| 本 wiki 收录情况 | Deep Storage Unit / MFR 未被本 wiki 收录 —— 写全名 Deep Storage Unit(属 Mine Factory Reloaded) |
本模块最重要的两个事实
1. modID 是 null → 恒为启用(AUTO 模式下)
// integration/IntegrationNode.java:77-78
enabled = this.modID == null || apiManager.hasAPI(this.modID)
|| Loader.isModLoaded(this.modID);
modID == null 是 || 的第一个操作数 → 短路 → 恒为 true。
即:Deep Storage Unit 目标不检查任何 mod 是否安装。
IntegrationType.DSU 是 27 个常量里唯一 modID 为 null 的
(IntegrationType.java:34),尽管它实际接的是 MFR 的 DSU 方块
(modID 理应是 MineFactoryReloaded)。
用户只能用配置 ModIntegration / DeepStorageUnit = OFF 显式关闭。
2. 名字叫 DSU,实现用的是 MFR 的方块
postInit()(:49-51)注册的是 MFRDSUHandler:
// DSU.java:50
AEApi.instance().registries().externalStorage().addExternalStorageInterface(new MFRDSUHandler());
配套的 3 个类全在 integration/modules/helpers/:
| 类 | 源文件 |
|---|---|
MFRDSUHandler |
integration/modules/helpers/MFRDSUHandler.java |
MinefactoryReloadedDeepStorageUnit |
integration/modules/helpers/MinefactoryReloadedDeepStorageUnit.java |
⚠️ 另有 MinefactoryReloadedDeepStorageUnit.java 走反射判定
(DSU 的 modID 为 null,反射比 instanceof 更安全)。
⚠️ MFR 模块本身是空壳(MFR.java:30 / :33 皆空)。
DSU 的 MFR 逻辑全部在 DSU 目标里。两个目标共用
「Mine Factory Reloaded」但行为完全不同。
生命周期
| 阶段 | 行号 | 动作 |
|---|---|---|
init() |
46 | 空 {} |
postInit() |
49 | 注册 MFRDSUHandler 外部存储(:50) |
IDSU 只有 1 个方法
integration/abstraction/IDSU.java:17,22 行:
| 方法 | 行号 | 语义 |
|---|---|---|
isDSU(TileEntity te) |
21 | 该 tile 是不是 DSU |
跨维度的真实位置
⚠️ DSU 在 me/ 下完全没有代码。brief 把 DSU 列为 me/ 的候选维度
是错的。全仓库 DSU 相关文件只有 4 个:
| 文件 | 归属维度 |
|---|---|
integration/abstraction/IDSU.java |
abstraction |
integration/modules/DSU.java |
本条目 |
integration/modules/helpers/MFRDSUHandler.java |
helpers |
integration/modules/helpers/MinefactoryReloadedDeepStorageUnit.java |
helpers |
DSU 不是 AE2 的方块
⚠️ Deep Storage Unit 是 Mine Factory Reloaded 的方块。 本模块只让 AE2 的 ME 端 / 接口能读写它, 不注册任何 AE2 方块或物品。写条目时不要把 DSU 说成 AE2 自己的东西。
mod 没装时是否安全跳过
这一条要特别说:modID == null 意味着 IntegrationNode
不会抛 ModNotInstalled(除非配置为 OFF)。
因此 DSU 的 PRE_INIT 一定会走到 loadClass(IntegrationNode.java:82)。
安全性来自两点:
modules/DSU.java:16的 import 清单里 没有minefactory.*(只有appeng.*与cpw.mods.fml.*)- 与 MFR 的耦合被推迟到
postInit(),且在MFRDSUHandler/MinefactoryReloadedDeepStorageUnit内部用反射处理
即:加载 DSU.class 本身不需要 MFR 存在。
但若 MFRDSUHandler 在 MFR 缺失时未妥善判空,
postInit() 抛出的异常仍会被 IntegrationNode.java:102 捕获 → FAILED。
具体判空逻辑见 helpers 总览。