0

首先,非常感谢任何愿意提供帮助的人!

如果你愿意,你可以跳过下面的文字墙。

背景

我正在尝试为我自己的 minecraft 服务器网络制作代理程序。我希望使用多台服务器让人们在不同的服务器上发挥创造力和生存(以减少服务器负载并增加我的容量)。我计划将传输器插件用于服务器端,但我想避免安装clientpatch

我发现了bungeecord,但它没有做我需要的事情(即,为我计划添加的改装服务器提供支持。)用于 mc 1.4.7 (由于我计划添加的服务器,我需要使用它) .

目前系统正在使用bungeecord 代理运行。但是,md_5 告诉我,我需要编写自己的代理(或修改他的)以使其按我想要的方式工作。但是,我真的无法理解java(我只是不明白)。所以我决定自己写。

问题

经过一番研究,我发现这是可行的。最难的部分是解析数据包。所以我四处寻找一个图书馆来为我做这件事。我遇到了libmcnet,这似乎是我想要的,但它产生的所有数据都是乱码。

查看一些数据包转储,并使用wiki.vg引用它,我发现libmcnet给了我big-endian。但是,我的代码和计算机假定为 little-endian

我做了什么

经过一番思考和查看代码后,我认为使用 libmcnet 中的一些定义(即 include/mcnet/packets.h)编写自己的解析器会更容易。所以我复制了 packet.h 和 read.h/read.c (两者都被大量修改)并开始重新编码。我认为我做得很好,因为我的系统可以在服务器 ping 期间成功解析服务器的 0xff (kick) 数据包。

新问题

下一个障碍被证明是解密客户的数据。它似乎没有使用与服务器相同的数据标准。例如,服务器传输的数据包 ID 是 16 位,而客户端的似乎是 8 位。

所以我想知道:

为什么我的代码在来自服务器的数据上运行良好,但在客户端发送数据时却惨遭失败?我很确定 libmcnet 的代码(我基于它)也是错误的。

任何人都可以帮助我使这段代码工作吗?

代码:http : //pastebin.com/jg26yity(我认为这会更干净)

谢谢大家的帮助!

*如果有人要求更多信息,我会添加信息...

PS。这里问的第一个问题,所以我的帖子有点乱......

4

1 回答 1

0

我想通了,显然我不能假设一个为解析 minecraft 协议而编写的库实际上有正确的代码来读取协议......我正在四处挖掘并验证读取的内容与手动读取的内容......显然是一个字节不是我的世界的一个字节,我认为图书馆已经涵盖了它。

于 2013-07-24T15:51:14.857 回答