网络与序列化(MCData / PacketCustom)

基本信息

属性 值
涉及包 codechicken.lib.data(5 类)、codechicken.lib.packet(2 类)
公开类型数 7
消费者 MCDataInput / MCDataOutput / PacketCustom 各被 ForgeMultipart import 1 次

功能

这是 CodeChicken 系列的网络层与二进制序列化层。核心思路是把「写一个值」抽象成接口,使同一份字段布局既能走自定义封包,也能落盘到 NBT。

MCDataOutput(codechicken.lib.data)

写出侧接口。实现类:

类 说明
MCDataOutput 写出接口
MCDataOutputStream 基于 DataOutputStream
MCDataOutputWrapper 包装/转发其他 MCDataOutput

MCDataInput(codechicken.lib.data)

读入侧接口,MCDataInput.java:11-45 声明的方法集:

方法 行
readLong() / readInt() / readShort() :11、:13、:15
readUShort() / readByte() / readUByte() :17、:19、:21
readDouble() / readFloat() :23、:25
readBoolean() / readChar() :27、:29
readVarShort() / readVarInt() :31、:33(变长编码)
readByteArray(int length) :35
readString() :37
readCoord() :39 —— 直接产出 BlockCoord
readNBTTagCompound() :41
readItemStack() / readFluidStack() :43、:45

实现类为 MCDataInputStream。

readCoord() 返回 BlockCoord,说明 几何库 与序列化层是强耦合的。

PacketCustom(codechicken.lib.packet)

类 说明
PacketCustom 自定义封包,同时实现 MCDataInput 与 MCDataOutput(PacketCustom.java:51)
ICustomPacketTile 需要自动收包的方块 / TileEntity 标记接口

PacketCustom 本身既是数据载体又是编解码器,因此字段写入与读取可以在同一对象上完成。

处理器层级

PacketCustom 内部定义的接口与 handler 类(PacketCustom.java:53-132):

嵌套类型 行 说明
ICustomPacketHandler :53 处理器根接口
IClientPacketHandler extends ICustomPacketHandler :56 客户端处理器
IServerPacketHandler extends ICustomPacketHandler :61 服务端处理器
CustomInboundHandler :69 基于 SimpleChannelInboundHandler<FMLProxyPacket>
CustomHandler :88 私有分发接口
ClientInboundHandler / ServerInboundHandler :93、:109 双端分发实现
IHandshakeHandler :127 握手接口
HandshakeInboundHandler :132 基于 ChannelInboundHandlerAdapter

ForgeMultipart 对 IClientPacketHandler 与 IServerPacketHandler 各 import 1 次,用于实现自己的处理器。

消费者实证

ForgeMultipart(独立仓库)在本条目涉及的类上的 import 计数:

类 import 次数
codechicken.lib.packet.PacketCustom 4
codechicken.lib.packet.PacketCustom.IServerPacketHandler 1
codechicken.lib.packet.PacketCustom.IClientPacketHandler 1
codechicken.lib.data.MCDataOutput 1
codechicken.lib.data.MCDataInput 1

相关条目