mirror of
https://github.com/MCCTeam/Minecraft-Console-Client
synced 2025-10-14 21:22:49 +00:00
Add full support for terrain and movements on MC 1.7 Also fix #179 which was due to terrain and movements beign enabled although unsupported on MC 1.7
70 lines
3 KiB
C#
70 lines
3 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using Ionic.Zlib;
|
|
|
|
namespace MinecraftClient.Protocol.Handlers
|
|
{
|
|
/// <summary>
|
|
/// Quick Zlib compression handling for network packet compression.
|
|
/// Note: Underlying compression handling is taken from the DotNetZip Library.
|
|
/// This library is open source and provided under the Microsoft Public License.
|
|
/// More info about DotNetZip at dotnetzip.codeplex.com.
|
|
/// </summary>
|
|
public static class ZlibUtils
|
|
{
|
|
/// <summary>
|
|
/// Compress a byte array into another bytes array using Zlib compression
|
|
/// </summary>
|
|
/// <param name="to_compress">Data to compress</param>
|
|
/// <returns>Compressed data as a byte array</returns>
|
|
public static byte[] Compress(byte[] to_compress)
|
|
{
|
|
ZlibStream stream = new ZlibStream(new System.IO.MemoryStream(to_compress, false), CompressionMode.Compress);
|
|
List<byte> temp_compression_list = new List<byte>();
|
|
byte[] b = new byte[1];
|
|
while (true)
|
|
{
|
|
int read = stream.Read(b, 0, 1);
|
|
if (read > 0) { temp_compression_list.Add(b[0]); }
|
|
else break;
|
|
}
|
|
stream.Close();
|
|
return temp_compression_list.ToArray();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Decompress a byte array into another byte array of the specified size
|
|
/// </summary>
|
|
/// <param name="to_decompress">Data to decompress</param>
|
|
/// <param name="size_uncompressed">Size of the data once decompressed</param>
|
|
/// <returns>Decompressed data as a byte array</returns>
|
|
public static byte[] Decompress(byte[] to_decompress, int size_uncompressed)
|
|
{
|
|
ZlibStream stream = new ZlibStream(new System.IO.MemoryStream(to_decompress, false), CompressionMode.Decompress);
|
|
byte[] packetData_decompressed = new byte[size_uncompressed];
|
|
stream.Read(packetData_decompressed, 0, size_uncompressed);
|
|
stream.Close();
|
|
return packetData_decompressed;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Decompress a byte array into another byte array of a potentially unlimited size (!)
|
|
/// </summary>
|
|
/// <param name="to_decompress">Data to decompress</param>
|
|
/// <returns>Decompressed data as byte array</returns>
|
|
public static byte[] Decompress(byte[] to_decompress)
|
|
{
|
|
ZlibStream stream = new ZlibStream(new System.IO.MemoryStream(to_decompress, false), CompressionMode.Decompress);
|
|
byte[] buffer = new byte[16 * 1024];
|
|
using (System.IO.MemoryStream decompressedBuffer = new System.IO.MemoryStream())
|
|
{
|
|
int read;
|
|
while ((read = stream.Read(buffer, 0, buffer.Length)) > 0)
|
|
decompressedBuffer.Write(buffer, 0, read);
|
|
return decompressedBuffer.ToArray();
|
|
}
|
|
}
|
|
}
|
|
}
|