Waila 协议通道

基本信息

属性 值
FML 通道名 Waila(NetworkRegistry.INSTANCE.newChannel("Waila", new WailaCodec()),WailaPacketHandler.java:45)
编解码器 WailaPacketHandler.WailaCodec,继承 FMLIndexedMessageToMessageCodec<IWailaMessage>(WailaPacketHandler.java:86)
封包数 5(discriminator 0–4)
消息接口 mcp.mobius.waila.network.IWailaMessage
注册类 WailaPacketHandler(enum 单例 INSTANCE)
触发时机 Waila.preInit 里以 WailaPacketHandler.INSTANCE.ordinal() 触发枚举构造(Waila.java:55)
发送方向 客户端→服务端(请求)与 服务端→客户端(数据)成对

功能

WDMla 的提示信息采用「客户端请求、服务端取数」模型:客户端只知道看到了哪个方块/实体,具体 NBT 要向服务端索取。

通道名故意保留为 Waila 而非 WDMla,源码注释写明「在我们决定破坏 Waila 兼容之前不要改这里的通道名」(WailaPacketHandler.java:42-43)。

封包

discriminator 类 方向 说明 源码
0 Message0x00ServerPing S→C 玩家登录时服务端发的 ping,同时用于探测服务端是否装了 Waila WailaPacketHandler.java:89
1 Message0x01TERequest C→S 客户端请求 TileEntity 数据 WailaPacketHandler.java:90
2 Message0x02TENBTData S→C TileEntity NBT 回包 WailaPacketHandler.java:91
3 Message0x03EntRequest C→S 客户端请求实体数据 WailaPacketHandler.java:92
4 Message0x04EntNBTData S→C 实体 NBT 回包 WailaPacketHandler.java:93

管线挂载是分侧的:

  • 客户端侧(addClientHandlers,WailaPacketHandler.java:54-76):ServerPing → TENBTData → EntNBTData
  • 服务端侧(addServerHandlers,WailaPacketHandler.java:78-84):TERequest → EntRequest

交互

触发 行为 发送点
玩家登录 服务端发 Message0x00ServerPing NetworkHandler.onPlayerLoggedIn,NetworkHandler.java:18-21
客户端需要方块数据 BlockAccessorClientHandler 发 Message0x01TERequest(accessor.getTileEntity(), keys) BlockAccessorClientHandler.java:65
服务端处理完请求 立即回 Message0x02TENBTData(tag) Message0x01TERequest.java:96
客户端需要实体数据 EntityAccessorClientHandler 发 Message0x03EntRequest(accessor.getEntity(), keys) EntityAccessorClientHandler.java:50
服务端处理完请求 立即回 Message0x04EntNBTData(tag) Message0x03EntRequest.java:75

请求包携带一个 key 列表,服务端只回这些 provider 需要的数据——两个 *Request 处理器在回包时都用 WailaPacketHandler.getPlayer(ctx) 定位目标玩家(WailaPacketHandler.java:151-153)。

NBT 的编解码走 WailaPacketHandler.writeNBT / readNBT:先写 2 字节压缩长度,-1 表示无数据,否则用 CompressedStreamTools.compress 压缩后写入(WailaPacketHandler.java:120-138)。字符串用 writeString / readString,UTF-8 编码(WailaPacketHandler.java:140-149)。

相关条目