网络与序列化(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 |
相关条目
- 几何、颜色与数学库 -
readCoord()返回的BlockCoord - CodeChicken 生态契约 - 完整 import 频次表