网络协议

基本信息

属性 值
源码目录 src/main/java/mcp/mobius/waila/network/
封包类数 5(Message0x00 – Message0x04)
通道注册 WailaPacketHandler.INSTANCE(Waila.java:63)
事件注册 FMLCommonHandler.bus().register(new NetworkHandler())(Waila.java:73)
消息接口 mcp.mobius.waila.network.IWailaMessage
判别器 ID 范围 0–4(WailaPacketHandler.java:61-65)

Waila 用一条自定义 SimpleNetworkWrapper 通道在客户端与服务端之间传递 TileEntity / 实体的 NBT,供 HUD provider 在服务端生成 tip。

功能

5 个封包

判别器 类 通道名 方向 行
0 Message0x00ServerPing ServerPing C→S WailaPacketHandler.java:45、WailaPacketHandler.java:61
1 Message0x01TERequest TERequest C→S WailaPacketHandler.java:54、WailaPacketHandler.java:62
2 Message0x02TENBTData TENBTData S→C WailaPacketHandler.java:46、WailaPacketHandler.java:63
3 Message0x03EntRequest EntRequest C→S WailaPacketHandler.java:55、WailaPacketHandler.java:64
4 Message0x04EntNBTData EntNBTData S→C WailaPacketHandler.java:47、WailaPacketHandler.java:65

管道组装分两组(WailaPacketHandler.java:45-47 为 S→C 组,:54-55 为 C→S 组),每组都以 codec 为锚点用 addAfter 串联;随后统一 addDiscriminator 绑定 ID(WailaPacketHandler.java:61-65)。

请求-应答配对

TileEntity 与实体各构成一对「请求 → 数据」:

目标 请求 应答
TileEntity Message0x01TERequest Message0x02TENBTData
Entity Message0x03EntRequest Message0x04EntNBTData

Message0x00ServerPing 独立于这两对,用于客户端探测服务端是否存在 Waila。

与 provider 的关系

应答封包携带的 NBT 会经过 IWailaDataProvider 的 getNBTData(服务端,IWailaDataProvider.java:126-127)与 IWailaEntityProvider 的 getNBTData(服务端,IWailaEntityProvider.java:93)。这两个回调的 javadoc 都强调实现方须返回修改后的入参 tag,因为同一 tag 可能已被其他 provider 处理过(IWailaDataProvider.java:114-124、IWailaEntityProvider.java:87-92)。

因此本协议是 addon 实现跨端一致性的唯一通道——addon 注册的 NBT provider 若不在两侧都注册,客户端会缺少数据。

数值

项 值 来源
封包类数 5 src/main/java/mcp/mobius/waila/network/
判别器 ID 数 5(0–4) WailaPacketHandler.java:61-65
C→S 封包数 3 WailaPacketHandler.java:45、WailaPacketHandler.java:54-55
S→C 封包数 2 WailaPacketHandler.java:46-47
请求-应答配对数 2 见上表

判别器 ID 与类名的 0xNN 前缀一一对应(Message0x00 → 0,Message0x04 → 4),但这是命名约定,源码中判别器由 addDiscriminator(0..4, ...) 显式指定(WailaPacketHandler.java:61-65)。

交互

客户端版本门禁由 @NetworkCheckHandler checkModList 执行:若客户端带 Waila 且版本低于 1.7.3 则拒绝加入(Waila.java:55、Waila.java:130-137),注释说明这是为了保证原版 vanilla.show_invisible_players 属性被正确尊重(Waila.java:127-129)。服务端声明 acceptableRemoteVersions = "*"(Waila.java:43)。

HUD 消费 NBT 后的渲染见 HUD 渲染管线。vanilla.show_invisible_players 是少数通过 addConfigRemote 声明、因而受本协议版本门禁保护的配置项(HUDHandlerVanilla.java:238),见 模块配置项。

相关条目