1
0

1.8: Added MultiBlockChange packet.

This commit is contained in:
Howaner
2014-09-09 18:27:31 +02:00
parent a880813f27
commit 71c3369e08
4 changed files with 86 additions and 54 deletions

View File

@@ -9,6 +9,7 @@
#include "ChunkDataSerializer.h"
#include "zlib/zlib.h"
#include "ByteBuffer.h"
#include "Protocol18x.h"
@@ -54,7 +55,10 @@ const AString & cChunkDataSerializer::Serialize(int a_Version, int a_ChunkX, int
break;
}
}
m_Serializations[a_Version] = data;
if (!data.empty())
{
m_Serializations[a_Version] = data;
}
return m_Serializations[a_Version];
}
@@ -219,40 +223,23 @@ void cChunkDataSerializer::Serialize80(AString & a_Data, int a_ChunkX, int a_Chu
Packet.ReadAll(PacketData);
Packet.CommitRead();
cByteBuffer NumberBuffer(20);
cByteBuffer Buffer(20);
if (PacketData.size() >= 256)
{
AString PostData;
NumberBuffer.WriteVarInt(PacketData.size());
NumberBuffer.ReadAll(PostData);
NumberBuffer.CommitRead();
// Compress the data:
const uLongf CompressedMaxSize = 200000;
char CompressedData[CompressedMaxSize];
uLongf CompressedSize = compressBound(PacketData.size());
// Run-time check that our compile-time guess about CompressedMaxSize was enough:
ASSERT(CompressedSize <= CompressedMaxSize);
compress2((Bytef*)CompressedData, &CompressedSize, (const Bytef*)PacketData.data(), PacketData.size(), Z_DEFAULT_COMPRESSION);
NumberBuffer.WriteVarInt(CompressedSize + PostData.size());
NumberBuffer.WriteVarInt(PacketData.size());
NumberBuffer.ReadAll(PostData);
NumberBuffer.CommitRead();
a_Data.clear();
a_Data.resize(PostData.size() + CompressedSize);
a_Data.append(PostData.data(), PostData.size());
a_Data.append(CompressedData, CompressedSize);
if (!cProtocol180::CompressPacket(PacketData, a_Data))
{
ASSERT(!"Packet compression failed.");
a_Data.clear();
return;
}
}
else
{
AString PostData;
NumberBuffer.WriteVarInt(Packet.GetUsedSpace() + 1);
NumberBuffer.WriteVarInt(0);
NumberBuffer.ReadAll(PostData);
NumberBuffer.CommitRead();
Buffer.WriteVarInt(Packet.GetUsedSpace() + 1);
Buffer.WriteVarInt(0);
Buffer.ReadAll(PostData);
Buffer.CommitRead();
a_Data.clear();
a_Data.resize(PostData.size() + PacketData.size());