Minecraft as3的压缩包(ActionScript3)

时间:2015-02-08 17:57:36

标签: actionscript-3 sockets bytearray zlib minecraft

我正在尝试使用as3连接到minecraft服务器。 服务器返回一个我无法理解的ByteArray。 这是一个例子:

    «¢00
    *H÷
0[ÞJí"
nöí_Jí2Q»÷/½KW9ó`ä¦ËJ!ôàNÄÇgkÉÚY`*u\êRáåLøjTp9ÔÅڕQ̺ÐWÊýƶ[Ð5æsövxåIIæ>Z
u¾C­ӷ.C¹i΍PWûóM×

我尝试了以下解释数据:

bytes.uncompress();

但是我收到了这个错误:

Error: Error #2058: There was an error decompressing the data.

1 个答案:

答案 0 :(得分:1)

根据http://wiki.vg/Protocol#Packet_format,Minecraft的数据包格式如下所示。如下所示,您需要解释收到的数据位,然后将压缩数据发送到zlib(如果数据包已压缩)。

数据包格式

无压缩

  Field Name   Field Type   Notes
  ------------ ------------ -----------------------------------------------------------------------
  Length       VarInt       Length of packet data + length of the packet ID
  Packet ID    VarInt
  Data         Byte Array   Depends on the connection state and packet ID, see the sections below

使用压缩

发送Set Compression数据包后, zlib压缩 已启用所有后续数据包。数据包的格式会发生变化 稍微包括未压缩包的大小。

  Field Name    Field Type   Notes
  ------------  ------------ -----------------------------------------------------------------------
  Packet Length VarInt       Length of Data + length of Data Length
  Data Length   VarInt       Length of uncompressed Data or 0
  Data          Byte Array   zlib compressed packet, including packet ID (see the sections below)

您如何知道您的数据包已被压缩?根据相同的文档,在发送Set Compression之前,不会启用压缩。