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)。

安全性来自两点:

  1. modules/DSU.java:16 的 import 清单里 没有 minefactory.*(只有 appeng.* 与 cpw.mods.fml.*)
  2. 与 MFR 的耦合被推迟到 postInit(),且在 MFRDSUHandler / MinefactoryReloadedDeepStorageUnit 内部用反射处理

即:加载 DSU.class 本身不需要 MFR 存在。 但若 MFRDSUHandler 在 MFR 缺失时未妥善判空, postInit() 抛出的异常仍会被 IntegrationNode.java:102 捕获 → FAILED。 具体判空逻辑见 helpers 总览。

相关条目