integration/modules/waila 数据提供者(waila)

覆盖范围

appeng.integration.modules.waila 包 + .part 子包 + .tile 子包, 共 22 个 .java 文件 —— integration/ 下最大的子包。

实测:

  • find integration/modules/waila -maxdepth 1 -name '*.java' | wc -l = 3
  • find integration/modules/waila/part -name '*.java' | wc -l = 12
  • find integration/modules/waila/tile -name '*.java' | wc -l = 7
  • 合计 22

三层继承结构

Waila 侧由两个 final 聚合类并联驱动,各自持有一组子项 provider; 两套子项基类彼此独立,互不继承。

IWailaDataProvider                       mahaus.waila.api.IWailaDataProvider
│
├── BaseWailaDataProvider                waila/BaseWailaDataProvider.java:32   (abstract)
│   │
│   ├── TileWailaDataProvider            waila/TileWailaDataProvider.java:44   (final)
│   │   │  聚合 tile 侧 7 个(`:57-63` 构造,`:65` 起入列)
│   │   ├── ChargerWailaDataProvider          waila/tile/ChargerWailaDataProvider.java:33
│   │   ├── CraftingMonitorWailaDataProvider  waila/tile/CraftingMonitorWailaDataProvider.java:32
│   │   ├── InterfaceDataProvider             waila/tile/InterfaceDataProvider.java:22
│   │   ├── PowerStateWailaDataProvider       waila/tile/PowerStateWailaDataProvider.java:31
│   │   ├── PowerStorageWailaDataProvider     waila/tile/PowerStorageWailaDataProvider.java:36
│   │   ├── QuantumBridgeWailaDataProvider    waila/tile/QuantumBridgeWailaDataProvider.java:24
│   │   └── WirelessDataProvider              waila/tile/WirelessDataProvider.java:27
│   │
│   └── (part 侧走独立基类 ↓)
│
├── PartWailaDataProvider             waila/PartWailaDataProvider.java:50   (final)
│   │  聚合 part 侧 8 个(`:73-80` 构造,`:82-89` 入列)
│   ├── BasePartWailaDataProvider         waila/part/BasePartWailaDataProvider.java:33
│   │   │  implements IPartWailaDataProvider;**自身也被直接实例化**(见下方死代码说明)
│   │   ├── ChannelWailaDataProvider           waila/part/ChannelWailaDataProvider.java:33
│   │   ├── IOBusWailaDataProvider             waila/part/IOBusWailaDataProvider.java:19
│   │   ├── P2PStateWailaDataProvider          waila/part/P2PStateWailaDataProvider.java:33
│   │   ├── PartInterfaceDataProvider          waila/part/PartInterfaceDataProvider.java:21
│   │   ├── PartPatternRepeaterDataProvider    waila/part/PartPatternRepeaterDataProvider.java:20
│   │   ├── PowerStateWailaDataProvider        waila/part/PowerStateWailaDataProvider.java:28
│   │   └── StorageMonitorWailaDataProvider    waila/part/StorageMonitorWailaDataProvider.java:31
│
└── IPartWailaDataProvider             waila/part/IPartWailaDataProvider.java:33  (interface)

⚠️ 死代码:waila/part/PartStackWailaDataProvider.java:26 的 PartStackWailaDataProvider extends BasePartWailaDataProvider 全仓无任何实例化点。 PartWailaDataProvider.java:77 里名为 partStack 的变量实际是 new BasePartWailaDataProvider(),并非 PartStackWailaDataProvider。 按「死代码 ≠ 已注册内容」,该类不计入上面的 8 个子项。

关键点:part 侧与 tile 侧是两套独立基类

tile 侧 part 侧
聚合类 TileWailaDataProvider(:44,final) PartWailaDataProvider(:50,final)
单项基类 BaseWailaDataProvider(:32,abstract) BasePartWailaDataProvider(:33)
子项接口 无 IPartWailaDataProvider(:33,interface)
子项数 7 8
侧判定 instanceof AEBaseTile instanceof CableBusPart / part 宿主

⚠️ waila/part/PowerStateWailaDataProvider.java 与 waila/tile/PowerStateWailaDataProvider.java 同名不同包, 行号也不同(part 侧 :28 / tile 侧 :31)。写条目时必须带路径。

两个工具类

类 行号 职责
PartAccessor waila/part/PartAccessor.java:30 public final class。反射 / 内部访问取 part 实例
Tracer waila/part/Tracer.java:27 public final class。诊断追踪

聚合类的注册

注册在 Waila 模块 的静态 register(IWailaRegistrar):

注册动作 位置 目标
new PartWailaDataProvider() Waila.java:31 part 侧聚合
new TileWailaDataProvider() Waila.java:41 tile 侧聚合
registerBodyProvider(tile, AEBaseTile.class) Waila.java:43 挂在所有 AEBaseTile 上
registerNBTProvider(tile, AEBaseTile.class) Waila.java:44 同上
registerPartProvider(..., AEBaseTile.class) Waila.java:33 同上
FMP 启用时 registerPartProvider(..., TileMultipart.class) Waila.java:35-37 FMP multipart

即:只有 2 个 provider 实例被注册进 WAILA, 其余 20 个类是被这 2 个聚合类内部调用的。

子项 provider 对应到本 wiki 已有维度

provider 对应既有条目
ChargerWailaDataProvider 方块充电站
CraftingMonitorWailaDataProvider 方块加工监控
InterfaceDataProvider / PartInterfaceDataProvider 方块接口 · 接口 part
PowerStorageWailaDataProvider 方块能源方块 等
PowerStateWailaDataProvider(tile / part 两份) 线缆 part
QuantumBridgeWailaDataProvider 方块量子链接舱
WirelessDataProvider 方块无线端子
ChannelWailaDataProvider AEFeature.Channels
IOBusWailaDataProvider 导入总线 · 导出总线
P2PStateWailaDataProvider P2P 隧道(ME) 等
PartStackWailaDataProvider 配方终端
PartPatternRepeaterDataProvider 配方重复器
StorageMonitorWailaDataProvider 存储监控 part

mod 没装时是否安全跳过

是。Waila 未装 → FAILED → Waila.class 不加载 → 本目录 22 个类都不被加载。

⚠️ 本目录直接 import mahaus.waila.api.*(IWailaDataProvider、 IWailaRegistrar 等),是编译期硬依赖; 安全性完全来自 IntegrationNode 的延迟 loadClass (integration/IntegrationNode.java:82)。

WAILA 包名 mahaus.waila

1.7.10 的 WAILA 是 mahaus.waila(后来的 WTHIT 才是 mcp.mobius.waila)。 本移植版面向 1.7.10,用的是前者。

相关条目