Minecraft支持使用一般的端口来查询MOTD、玩家数量、最大玩家数量和服务端版本。不像Query那样,服务器列表ping接口是一直启用的。
服务端ping的过程在1.7版本改变为一个非握手的兼容方式,但是1.7服务端两者都支持(看下面)
数据包有一个为VarIntJava示例长度前缀。这数据包含如下所示的length bytes 。
字段名 | 字段类型 | 备注 |
---|---|---|
Packet ID | VarInt | |
Data |
Data内容基于数据包来决定。
首先必须发送设置握手包状态为1的握手包。握手包的展示类型如下
包标识符 | 字段名 | 字段类型 | 备注 |
---|---|---|---|
0x00 | Protocol Version | VarInt | 4表示1.7.2 |
Server Address (hostname or IP) | String | A string is a VarInt length followed length bytes which make an UTF-8 string | |
Server Port | Unsigned Short | A short has 2 byte size. It should be read in Big-endian order | |
Next state | VarInt | 1 for status |
后面跟着一个状态请求包。请求包里没有字段。
包标识符 | 字段名 | 字段类型 | 备注 |
---|---|---|---|
服务器应该会回一个状态回复包
包标识符 | 字段名 | 字段类型 | 备注 |
---|---|---|---|
0x00 | JSON Response | String | A string is a VarInt length followed length bytes which make an UTF-8 string |
{
"version": {
"name": "1.7.9",
"protocol": 5
},
"players": {
"max": 100,
"online": 5,
"sample": [
{
"name": "thinkofdeath",
"id": "4566e69f-c907-48ee-8d71-d7ba5aa00d20"
}
]
},
"description": {
"text": "Hello world"
},
"favicon": "data:image/png;base64,<data>"
}
description字段和聊天的格式相同 sample和favicon部分可选 favicon的格式为Base64编码的png图像,而且需要在前面加上'data:image/png;base64,'
客户端会发送另一个包来帮助计算服务器延迟但是你想要的信息就是上面这些啦。 然后客户端将会发送一个包含之前的ping的Ping包
包标识符 | 字段名 | 字段类型 | 备注 |
---|---|---|---|
0x01 | Time | Long | 长度需为8字节,而且要以大端字节序读取 |
因为篇幅限制等原因故未翻译 详情请看原文 http://wiki.vg/Server_List_Ping