CubicChunks 网络通道

基本信息

属性 值
通道名 cubicchunks1(CubicChunks.MODID + "1")
通道类 com.cardinalstar.cubicchunks.network.NetworkChannel
编解码器 MessageToMessageCodec<FMLProxyPacket, CCPacket>
封包条目数 8(CCPacketEntry 枚举常量)
封包接口 CCPacketEncoder<CCPacket>
初始化时机 CubicChunks.init → NetworkChannel.init()(CubicChunks.java:181)

功能

NetworkChannel 是整个模组唯一的 FML 网络通道。它继承 MessageToMessageCodec<FMLProxyPacket, CCPacket>,在 init()(由 NetworkChannel.init() 强制类加载,CubicChunks.java:181 → NetworkChannel.java:65-67)时通过 NetworkRegistry.INSTANCE.newChannel(...) 建立双向通道(NetworkChannel.java:38)。

每帧编码时先写 1 字节封包 ID,再由对应 CCPacketEncoder 写入包体,最后包进 FMLProxyPacket(NetworkChannel.java:72-84);解码时先读 ID 再派发(:86-98)。构造器会用各 encoder 的 getPacketID() 最大值分配数组,并在 ID 冲突时抛 IllegalArgumentException("Duplicate Packet ID! ...")(NetworkChannel.java:41-59)。

发送方法共 5 个:发给单个玩家 sendToPlayer(:100)、以玩家为中心的 sendToAllAround(:117)、发给全部 sendToAll(:128)、发给服务器 sendToServer(:137)、以及按世界与水平范围发包 sendPacketToAllPlayersInRange(:146)。

数值

8 个封包(network/CCPacketEntry.java:5-12):

枚举常量 编码器 用途
Cube PacketEncoderCube 整块立方体方块数据
Column PacketEncoderColumn 整列数据
UnloadColumn PacketEncoderUnloadColumn 卸载一列
UnloadCube PacketEncoderUnloadCube 卸载一个立方体
CubeBlockChange PacketEncoderCubeBlockChange 单个方块变更
HeightMapUpdate PacketEncoderHeightMapUpdate 高度图更新
CubeSkyLightUpdates PacketEncoderCubeSkyLightUpdates 天空光照批量更新
WorldHeight PacketEncoderWorldHeight 世界高度同步
数值名 值 来源
封包总数 8 CCPacketEntry.java:5-12
通道名 cubicchunks1 NetworkChannel.java:38

配套的编解码辅助类位于 network/:CCPacket、CCPacketBuffer、CCPacketEncoder、PacketEncoderColumn、PacketEncoderCube、PacketEncoderCubeBlockChange、PacketEncoderCubeSkyLightUpdates、PacketEncoderHeightMapUpdate、PacketEncoderUnloadColumn、PacketEncoderUnloadCube、PacketEncoderWorldHeight、WorldEncoder;加入/重生同步接口为 ICubicJoinGamePacket 与 ICubicRespawnPacket。服务端侧的分发逻辑在 server/VanillaNetworkHandler.java,另有 server/WorldSyncStateMachine.java。

交互

触发 行为
客户端进入服务器 通过 WorldHeight 等封包同步世界高度与已加载立方体
立方体被加载 服务端发 Cube / Column 封包
立方体被卸载 服务端发 UnloadCube / UnloadColumn 封包
方块被放置或破坏 发 CubeBlockChange
高度图变化 发 HeightMapUpdate
AE2 区块段重发 经 MIXIN_AE2_PLATFORM_SEND_CHUNK 改走立方体同步协议(mixin/Mixins.java)

相关条目