发送" MOTD"从自定义Netty服务器到Minecraft客户端

时间:2014-08-07 18:31:24

标签: java netty minecraft

我有一个基本的Netty服务器(来自教程)(http://netty.io/wiki/user-guide-for-4.x.html),它接收来自客户端的请求,但我如何将字符串发送到客户端?

例如,在正常的Minecraft服务器上,您指定" MOTD"在配置文件中,当客户端从服务器列表中ping它时,它将显示该字符串。我需要做同样的事情,但是从我的服务器代码。

2 个答案:

答案 0 :(得分:2)

如果您希望将MoTD发送到客户端,您必须弄清楚在协议和数据方面发送的内容。

例如,在最基本的形式中,发送的数据可以是1个字节用于操作(显示motd),然后是可变长度的字符串。

如果我必须了解如何发送此信息,我会查看open-source bukkit repositoriesMinecraft Decompiled Code Repository,了解如何自行完成此操作。

更新: 在查看代码时,似乎Minecraft也使用了Netty,因此在理解它方面起到了优势。不幸的是,代码是非正式反编译的,因此被混淆了。

更新2: 我相信你应该检查的课程是

  

net.minecraft.server.PacketStatusOutServerInfo

,发送的数据似乎是ServerPing类生成的JSON。

您还可以查看Minecraft Protocol(具体为Ping); modders可以找到协议和解释的地方。加密。

答案 1 :(得分:1)

此处理程序显示发送MOTD:

https://github.com/Bukkit/mc-dev/blob/c1627dc9cc7505581993eb0fa15597cb36e94244/net/minecraft/server/LegacyPingHandler.java

恰好是MOTD处理在第69行:https://github.com/Bukkit/mc-dev/blob/c1627dc9cc7505581993eb0fa15597cb36e94244/net/minecraft/server/LegacyPingHandler.java/#L69

当通道收到ping数据包时,它会将响应编码为ByteBuf并将其写回通道。

请注意,文件上存在一些反编译错误 - 忽略它们并修复它。