网络封包

本 mod 注册 14 条 SimpleNetworkWrapper 封包,用于把「按键开关」的状态从客户端同步到服务端。全部在 preInit 阶段一次性注册完毕。

通道

public static final SimpleNetworkWrapper INSTANCE =
    NetworkRegistry.INSTANCE.newSimpleChannel(VersionInfo.ModID.toLowerCase());

PacketHandler.java:12-13。通道名 "thaumicboots"。

封包清单

PacketHandler.initPackets()(PacketHandler.java:15-30)注册 14 条,严格「请求 + 回执」成对交替:

ID 类 方向 用途
1 PacketJumpInc Side.SERVER 跳跃加成 +1
2 PacketJumpIncAck Side.CLIENT 跳跃确认
3 PacketSpeedInc Side.SERVER 移速加成 +1
4 PacketSpeedIncAck Side.CLIENT 移速确认
5 PacketOmniToggle Side.SERVER 全方位移动开关
6 PacketOmniToggleAck Side.CLIENT 全方位确认
7 PacketInertiaToggle Side.SERVER 惯性抵消开关
8 PacketInertiaToggleAck Side.CLIENT 惯性抵消确认
9 PacketSpeedIncMod Side.SERVER 移速微调 +1
10 PacketSpeedIncModAck Side.CLIENT 移速微调确认
11 PacketJumpIncMod Side.SERVER 跳跃微调 +1
12 PacketJumpIncModAck Side.CLIENT 跳跃微调确认
13 PacketStepToggle Side.SERVER 台阶辅助开关
14 PacketStepToggleAck Side.CLIENT 台阶辅助确认

Side.SERVER 表示「客户端发往服务端」(registerMessage(handler, handler, id, Side.SERVER) 的语义是发往该 side),Side.CLIENT 表示服务端回应。

与键位的对应

6 个键位(BootKeys)与 7 组封包几乎一一对应,只有「按键开关」类(1–8、13–14)走封包,而「微调」类(9–12)直接改玩家 NBT:

键位 封包 作用对象
跳跃开关 1 / 2 切换 jumpBonus 生效与否
移速开关 3 / 4 切换 speedBonus 生效与否
全方位开关 5 / 6 切换 omni 模式
惯性抵消开关 7 / 8 切换惯性抵消
微调键 9–12 提升跳跃 / 移速的微调倍率
台阶辅助 13 / 14 切换 stepHeight = 1.0F

已知缺陷

  • 14 个类中 12 个是空壳。api/serverfiles 目录下除 PacketHandler.java 外的 13 个文件里,绝大多数只有一个 SimpleNetworkWrapper 的 IMessage 默认空实现。真正的状态切换逻辑散落在 ItemBoots 的 isJumpEnabled / isSpeedEnabled / isOmniEnabled / isInertiaCanceled / isStepEnabled 方法里,靠读玩家靴子 NBT 实现,封包本身不携带状态。
  • 没有版本号协商。newSimpleChannel 之后未调用任何 setFMLChannel 兼容处理,1.7.10 的 SimpleImpl 会按注册顺序硬匹配。
  • 7 组封包的「Ack」回执是单向发回客户端,源码中未发现客户端消费 Ack 的代码。

相关条目

  • 配置 - Change-Rate-Modifier 等项决定微调步长
  • 研究页 - 研究系统与网络无关