【从0开始Minecraft服务端开发】0、一些基础知识
协议版本
本文基于Minecraft Java版1.19.4,协议版本762。
协议的具体内容请看wiki。
连接类型
Minecraft客户端与服务端之间使用TCP连接。
数据包结构
本文中数据包默认不进行压缩操作
数据包格式如下表
名称 | 类型 | 描述 |
---|---|---|
Length | VarInt | Packet ID和Data的总长度 |
Packet ID | VarInt | 数据包ID |
Data | Byte Array | 传输的数据 |
数据类型(更新中)
名称 | 长度(字节数) | 描述 |
---|---|---|
Boolean | 1 | 1为真,0为假 |
Byte | 1 | 有符号字节 |
Unsigned Byte | 1 | 无符号字节 |
Short | 2 | 有符号短整型 |
Unsigned Short | 2 | 无符号短整型 |
Int | 4 | 有符号整形 |
Long | 8 | 有符号长整形 |
Float | 4 | 单精度浮点数 |
Double | 8 | 双精度浮点数 |
String(n) | >=1, <=(n×4+3) | UTF-8编码的字符串,以VarInt类型的字符串长度起始。 |
Chat | ||
Identifier | ||
VarInt | >=1, <=5 | 可变长度的无符号整型,最大5个字节,最小1个字节。 |
VarLong | >=1, <=10 | 可变长度的无符号长整型,最大10个字节,最小1个字节。 |
Entity Metadata | ||
Slot | ||
NBT Tag | ||
Position | 8 | |
Angle | 1 | |
UUID | 16 | |
Optional X | ||
Array of X | ||
X Enum | ||
Byte Array |
连接状态
Handshaking:连接刚建立时的状态,在此状态下,客户端发送一个数据包后连接会转变成其他状态。
Status:此状态用于客户端中多人游戏界面的ping服务器。
Login:用于登录的相关处理。
Play:登录成功后将自动切换到此状态,用于游戏内容的相关处理。
名词解释
ClientBound:服务端发送给客户端的数据包
ServerBound:客户端发送给服务端的数据包