integration/modules/waila 数据提供者(waila)
覆盖范围
appeng.integration.modules.waila 包 + .part 子包 + .tile 子包,
共 22 个 .java 文件 —— integration/ 下最大的子包。
实测:
find integration/modules/waila -maxdepth 1 -name '*.java' | wc -l= 3find integration/modules/waila/part -name '*.java' | wc -l= 12find 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,用的是前者。