首先,非常感谢任何愿意提供帮助的人!
如果你愿意,你可以跳过下面的文字墙。
背景
我正在尝试为我自己的 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。这里问的第一个问题,所以我的帖子有点乱......