网络封包
本 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 的代码。