summaryrefslogtreecommitdiffstats
path: root/src/Protocol
diff options
context:
space:
mode:
authorHowaner <franzi.moos@googlemail.com>2014-09-08 12:24:06 +0200
committerHowaner <franzi.moos@googlemail.com>2014-09-08 12:24:06 +0200
commit38124bcce3c5e8ed8e4dba904dc4f15f89a82c14 (patch)
tree7f28ca9ff1c9d024c67ca9cdd1b8e66d29a30640 /src/Protocol
parentAdded GetProtocolVersion() to cProtocol. (diff)
downloadcuberite-38124bcce3c5e8ed8e4dba904dc4f15f89a82c14.tar
cuberite-38124bcce3c5e8ed8e4dba904dc4f15f89a82c14.tar.gz
cuberite-38124bcce3c5e8ed8e4dba904dc4f15f89a82c14.tar.bz2
cuberite-38124bcce3c5e8ed8e4dba904dc4f15f89a82c14.tar.lz
cuberite-38124bcce3c5e8ed8e4dba904dc4f15f89a82c14.tar.xz
cuberite-38124bcce3c5e8ed8e4dba904dc4f15f89a82c14.tar.zst
cuberite-38124bcce3c5e8ed8e4dba904dc4f15f89a82c14.zip
Diffstat (limited to 'src/Protocol')
-rw-r--r--src/Protocol/ChunkDataSerializer.cpp17
-rw-r--r--src/Protocol/Protocol17x.cpp12
-rw-r--r--src/Protocol/Protocol18x.cpp17
-rw-r--r--src/Protocol/Protocol18x.h2
4 files changed, 22 insertions, 26 deletions
diff --git a/src/Protocol/ChunkDataSerializer.cpp b/src/Protocol/ChunkDataSerializer.cpp
index a2e0c9ef9..d4574954e 100644
--- a/src/Protocol/ChunkDataSerializer.cpp
+++ b/src/Protocol/ChunkDataSerializer.cpp
@@ -182,25 +182,26 @@ void cChunkDataSerializer::Serialize80(AString & a_Data, int a_ChunkX, int a_Chu
// TODO: Do not copy data and then compress it; rather, compress partial blocks of data (zlib *can* stream)
// Blocktypes converter (1.8 included the meta into the blocktype):
- /*unsigned short Blocks[ARRAYCOUNT(m_BlockTypes)];
+ unsigned char Blocks[cChunkDef::NumBlocks * 2];
+ size_t LastOffset = 0;
for (size_t Index = 0; Index < cChunkDef::NumBlocks; Index++)
{
- BLOCKTYPE BlockType = m_BlockTypes[Index];
+ BLOCKTYPE BlockType = m_BlockTypes[Index] & 0xFF;
NIBBLETYPE BlockMeta = m_BlockMetas[Index / 2] >> ((Index & 1) * 4) & 0x0f;
- Blocks[Index] = ((unsigned short)BlockType << 4) | ((unsigned short)BlockMeta);
- }*/
+ Blocks[LastOffset] = (BlockType << 4) | ((unsigned char)BlockMeta);
+ Blocks[LastOffset + 1] = (unsigned char)BlockType >> 4;
+ LastOffset += 2;
+ }
const int BiomeDataSize = cChunkDef::Width * cChunkDef::Width;
- const int MetadataOffset = sizeof(m_BlockTypes);
- const int BlockLightOffset = MetadataOffset + sizeof(m_BlockMetas);
+ const int BlockLightOffset = sizeof(Blocks);
const int SkyLightOffset = BlockLightOffset + sizeof(m_BlockLight);
const int BiomeOffset = SkyLightOffset + sizeof(m_BlockSkyLight);
const int DataSize = BiomeOffset + BiomeDataSize;
// Temporary buffer for the composed data:
char AllData [DataSize];
- memcpy(AllData, m_BlockTypes, sizeof(m_BlockTypes));
- memcpy(AllData + MetadataOffset, m_BlockMetas, sizeof(m_BlockMetas));
+ memcpy(AllData, Blocks, sizeof(Blocks));
memcpy(AllData + BlockLightOffset, m_BlockLight, sizeof(m_BlockLight));
memcpy(AllData + SkyLightOffset, m_BlockSkyLight, sizeof(m_BlockSkyLight));
memcpy(AllData + BiomeOffset, m_BiomeData, BiomeDataSize);
diff --git a/src/Protocol/Protocol17x.cpp b/src/Protocol/Protocol17x.cpp
index e34a61818..34bfbc82b 100644
--- a/src/Protocol/Protocol17x.cpp
+++ b/src/Protocol/Protocol17x.cpp
@@ -1503,14 +1503,14 @@ void cProtocol172::AddReceivedData(const char * a_Data, size_t a_Size)
);
m_CommLogFile.Flush();
}
-
+
if (!m_ReceivedData.Write(a_Data, a_Size))
{
// Too much data in the incoming queue, report to caller:
m_Client->PacketBufferFull();
return;
}
-
+
// Handle all complete packets:
for (;;)
{
@@ -1530,10 +1530,7 @@ void cProtocol172::AddReceivedData(const char * a_Data, size_t a_Size)
cByteBuffer bb(PacketLen + 1);
VERIFY(m_ReceivedData.ReadToByteBuffer(bb, (int)PacketLen));
m_ReceivedData.CommitRead();
-
- // Write one NUL extra, so that we can detect over-reads
- bb.Write("\0", 1);
-
+
// 1.8 - Compressed packets
if ((m_State == 3) && (GetProtocolVersion() == cProtocolRecognizer::PROTO_VERSION_1_8_0))
{
@@ -1544,6 +1541,9 @@ void cProtocol172::AddReceivedData(const char * a_Data, size_t a_Size)
break;
}
}
+
+ // Write one NUL extra, so that we can detect over-reads
+ bb.Write("\0", 1);
UInt32 PacketType;
if (!bb.ReadVarInt(PacketType))
diff --git a/src/Protocol/Protocol18x.cpp b/src/Protocol/Protocol18x.cpp
index 302fcc836..386e3dfb2 100644
--- a/src/Protocol/Protocol18x.cpp
+++ b/src/Protocol/Protocol18x.cpp
@@ -121,7 +121,7 @@ void cProtocol180::SendPlayerMoveLook(void)
{
ASSERT(m_State == 3); // In game mode?
- /*cPacketizer Pkt(*this, 0x08); // Player Position And Look packet
+ cPacketizer Pkt(*this, 0x08); // Player Position And Look packet
cPlayer * Player = m_Client->GetPlayer();
Pkt.WriteDouble(Player->GetPosX());
@@ -131,7 +131,7 @@ void cProtocol180::SendPlayerMoveLook(void)
Pkt.WriteDouble(Player->GetPosZ());
Pkt.WriteFloat((float)Player->GetYaw());
Pkt.WriteFloat((float)Player->GetPitch());
- Pkt.WriteByte(0);*/
+ Pkt.WriteByte(0);
}
@@ -168,12 +168,12 @@ void cProtocol180::SendEntityVelocity(const cEntity & a_Entity)
{
ASSERT(m_State == 3); // In game mode?
- /*cPacketizer Pkt(*this, 0x12); // Entity Velocity packet
+ cPacketizer Pkt(*this, 0x12); // Entity Velocity packet
Pkt.WriteVarInt(a_Entity.GetUniqueID());
// 400 = 8000 / 20 ... Conversion from our speed in m/s to 8000 m/tick
Pkt.WriteShort((short)(a_Entity.GetSpeedX() * 400));
Pkt.WriteShort((short)(a_Entity.GetSpeedY() * 400));
- Pkt.WriteShort((short)(a_Entity.GetSpeedZ() * 400));*/
+ Pkt.WriteShort((short)(a_Entity.GetSpeedZ() * 400));
}
@@ -395,9 +395,9 @@ void cProtocol180::SendPluginMessage(const AString & a_Channel, const AString &
{
ASSERT(m_State == 3); // In game mode?
- /*cPacketizer Pkt(*this, 0x3f);
+ cPacketizer Pkt(*this, 0x3f);
Pkt.WriteString(a_Channel);
- Pkt.WriteBuf(a_Message.data(), a_Message.size());*/
+ Pkt.WriteBuf(a_Message.data(), a_Message.size());
}
@@ -672,10 +672,7 @@ void cProtocol180::HandlePacketPluginMessage(cByteBuffer & a_ByteBuffer)
{
HANDLE_READ(a_ByteBuffer, ReadVarUTF8String, AString, Channel);
AString Data;
- if (!a_ByteBuffer.ReadString(Data, a_ByteBuffer.GetReadableSpace() - 1))
- {
- return;
- }
+ a_ByteBuffer.ReadAll(Data);
m_Client->HandlePluginMessage(Channel, Data);
}
diff --git a/src/Protocol/Protocol18x.h b/src/Protocol/Protocol18x.h
index d64742939..d9fd5d573 100644
--- a/src/Protocol/Protocol18x.h
+++ b/src/Protocol/Protocol18x.h
@@ -56,8 +56,6 @@ public:
virtual void SendSoundParticleEffect (int a_EffectID, int a_SrcX, int a_SrcY, int a_SrcZ, int a_Data) override;
virtual void SendLoginSuccess (void) override;
- virtual void SendPlayerAbilities (void) override {}
- virtual void SendWindowClose (const cWindow & a_Window) override {}
virtual void SendPickupSpawn (const cPickup & a_Pickup) override {}
virtual void SendSpawnObject (const cEntity & a_Entity, char a_ObjectType, int a_ObjectData, Byte a_Yaw, Byte a_Pitch) override {}
virtual void SendInventorySlot (char a_WindowID, short a_SlotNum, const cItem & a_Item) override {}