diff options
Diffstat (limited to '')
-rw-r--r-- | source/packets/cPacket_MapChunk.cpp | 5 | ||||
-rw-r--r-- | source/packets/cPacket_MultiBlock.cpp | 17 | ||||
-rw-r--r-- | source/packets/cPacket_MultiBlock.h | 21 |
3 files changed, 41 insertions, 2 deletions
diff --git a/source/packets/cPacket_MapChunk.cpp b/source/packets/cPacket_MapChunk.cpp index 99afd9a40..e9ebf8355 100644 --- a/source/packets/cPacket_MapChunk.cpp +++ b/source/packets/cPacket_MapChunk.cpp @@ -49,9 +49,10 @@ cPacket_MapChunk::cPacket_MapChunk(cChunk * a_Chunk) AllData[iterator] = a_Chunk->GetBlock( x, y+i*16, z );
++iterator;
}
-
- //iterator+=2048*2; // Ignore light and stuff
}
+ //TODO: Send block metadata
+ //TODO: Send block light
+ //TODO: Send sky light
uLongf CompressedSize = compressBound( DataSize );
char * CompressedBlockData = new char[CompressedSize];
diff --git a/source/packets/cPacket_MultiBlock.cpp b/source/packets/cPacket_MultiBlock.cpp index dbdc11c02..2c9165d0b 100644 --- a/source/packets/cPacket_MultiBlock.cpp +++ b/source/packets/cPacket_MultiBlock.cpp @@ -13,12 +13,20 @@ cPacket_MultiBlock::cPacket_MultiBlock( const cPacket_MultiBlock & a_Copy ) m_ChunkX = a_Copy.m_ChunkX;
m_ChunkZ = a_Copy.m_ChunkZ;
m_NumBlocks = a_Copy.m_NumBlocks;
+
+#if (MINECRAFT_1_2_2 == 1)
+ m_DataSize = a_Copy.m_DataSize;
+
+ m_Data = new sBlockChange[m_NumBlocks];
+ memcpy( m_Data, a_Copy.m_Data, sizeof(sBlockChange)*m_NumBlocks );
+#else
m_BlockCoordinates = new unsigned short[m_NumBlocks];
memcpy( m_BlockCoordinates, a_Copy.m_BlockCoordinates, sizeof(short)*m_NumBlocks );
m_BlockTypes = new char[m_NumBlocks];
memcpy( m_BlockTypes, a_Copy.m_BlockTypes, m_NumBlocks );
m_BlockMetas = new char[m_NumBlocks];
memcpy( m_BlockMetas, a_Copy.m_BlockMetas, m_NumBlocks );
+#endif
}
@@ -27,9 +35,13 @@ cPacket_MultiBlock::cPacket_MultiBlock( const cPacket_MultiBlock & a_Copy ) cPacket_MultiBlock::~cPacket_MultiBlock()
{
+#if (MINECRAFT_1_2_2 == 1)
+ delete [] m_Data;
+#else
if( m_BlockCoordinates ) delete [] m_BlockCoordinates;
if( m_BlockTypes ) delete [] m_BlockTypes;
if( m_BlockMetas ) delete [] m_BlockMetas;
+#endif
}
@@ -43,9 +55,14 @@ void cPacket_MultiBlock::Serialize(AString & a_Data) const AppendInteger(a_Data, m_ChunkZ);
AppendShort (a_Data, m_NumBlocks);
+#if (MINECRAFT_1_2_2 == 1)
+ AppendInteger(a_Data, m_DataSize);
+ AppendData (a_Data, (const char*)m_Data, m_DataSize);
+#else
AppendData (a_Data, (char *)m_BlockCoordinates, sizeof(short) * m_NumBlocks);
AppendData (a_Data, m_BlockTypes, m_NumBlocks);
AppendData (a_Data, m_BlockMetas, m_NumBlocks);
+#endif
}
diff --git a/source/packets/cPacket_MultiBlock.h b/source/packets/cPacket_MultiBlock.h index aeabbbfed..cd2e5b8f7 100644 --- a/source/packets/cPacket_MultiBlock.h +++ b/source/packets/cPacket_MultiBlock.h @@ -10,13 +10,28 @@ class cPacket_MultiBlock : public cPacket
{
public:
+ struct sBlockChange
+ {
+ sBlockChange()
+ : Data( 0 )
+ {}
+ unsigned int Data;
+// short Data; // 4bits metadata ... 12bits block ID
+// short Coords; // 8bits Y ... 4bits Z ... 4bits X
+ };
+
cPacket_MultiBlock()
: m_ChunkX( 0 )
, m_ChunkZ( 0 )
, m_NumBlocks( 0 )
+#if (MINECRAFT_1_2_2 == 1)
+ , m_DataSize( 0 )
+ , m_Data( 0 )
+#else
, m_BlockCoordinates( 0 )
, m_BlockTypes( 0 )
, m_BlockMetas( 0 )
+#endif
{ m_PacketID = E_MULTI_BLOCK; }
cPacket_MultiBlock( const cPacket_MultiBlock & a_Copy );
~cPacket_MultiBlock();
@@ -28,11 +43,17 @@ public: int m_ChunkZ;
short m_NumBlocks;
+#if (MINECRAFT_1_2_2 == 1)
+ int m_DataSize; // Should be 4*m_NumBlocks ??
+ sBlockChange* m_Data;
+ static const unsigned int cSize = 1 + 4 + 4 + 2 + 4; // Minimum size (when NumBlocks == 0)
+#else
static const unsigned int c_Size = 1 + 4 + 4 + 2; // Minimum size (when NumBlocks == 0)
unsigned short* m_BlockCoordinates; // x<<12 | z<<8 | y
char* m_BlockTypes;
char* m_BlockMetas;
+#endif
};
|