MultiBlock packet is working partly.. I really don't understand what's wrong with this packet :/
git-svn-id: http://mc-server.googlecode.com/svn/trunk@351 0a769ca7-a7f5-676a-18bf-c427514a06d6
This commit is contained in:
parent
a2f6ab93b6
commit
4dda2a5c2b
@ -341,9 +341,14 @@ void cChunk::Tick(float a_Dt, MTRand & a_TickRandom)
|
|||||||
MultiBlock.m_ChunkX = m_PosX;
|
MultiBlock.m_ChunkX = m_PosX;
|
||||||
MultiBlock.m_ChunkZ = m_PosZ;
|
MultiBlock.m_ChunkZ = m_PosZ;
|
||||||
MultiBlock.m_NumBlocks = (short)PendingSendBlocks;
|
MultiBlock.m_NumBlocks = (short)PendingSendBlocks;
|
||||||
|
#if (MINECRAFT_1_2_2 == 1)
|
||||||
|
MultiBlock.m_Data = new cPacket_MultiBlock::sBlockChange[ PendingSendBlocks ];
|
||||||
|
MultiBlock.m_DataSize = PendingSendBlocks * sizeof( cPacket_MultiBlock::sBlockChange );
|
||||||
|
#else
|
||||||
MultiBlock.m_BlockCoordinates = new unsigned short[PendingSendBlocks];
|
MultiBlock.m_BlockCoordinates = new unsigned short[PendingSendBlocks];
|
||||||
MultiBlock.m_BlockTypes = new char[PendingSendBlocks];
|
MultiBlock.m_BlockTypes = new char[PendingSendBlocks];
|
||||||
MultiBlock.m_BlockMetas = new char[PendingSendBlocks];
|
MultiBlock.m_BlockMetas = new char[PendingSendBlocks];
|
||||||
|
#endif
|
||||||
//LOG("Sending multiblock packet for %i blocks", PendingSendBlocks );
|
//LOG("Sending multiblock packet for %i blocks", PendingSendBlocks );
|
||||||
for( unsigned int i = 0; i < PendingSendBlocks; i++)
|
for( unsigned int i = 0; i < PendingSendBlocks; i++)
|
||||||
{
|
{
|
||||||
@ -352,10 +357,18 @@ void cChunk::Tick(float a_Dt, MTRand & a_TickRandom)
|
|||||||
unsigned int Z = (index / 128) % 16;
|
unsigned int Z = (index / 128) % 16;
|
||||||
unsigned int X = (index / (128*16));
|
unsigned int X = (index / (128*16));
|
||||||
|
|
||||||
|
#if (MINECRAFT_1_2_2 == 1)
|
||||||
|
unsigned int Coords = Z | (X << 4) | (Y << 8);
|
||||||
|
unsigned int Blocks = E_BLOCK_DIRT;//E_BLOCK_STONE;
|
||||||
|
MultiBlock.m_Data[i].Data = Coords | (E_BLOCK_STONE) << 16;
|
||||||
|
// MultiBlock.m_Data[i].Coords = E_BLOCK_STONE;//(Z&0xf) | (X&0xf)<<4 | (Y&0xff)<<8;//(Y&0xff) | (Z&0xf) << 8 | (X&0xf) << 12;
|
||||||
|
|
||||||
|
#else
|
||||||
MultiBlock.m_BlockCoordinates[i] = (Z&0xf) | (X&0xf)<<4 | (Y&0xff)<<8;
|
MultiBlock.m_BlockCoordinates[i] = (Z&0xf) | (X&0xf)<<4 | (Y&0xff)<<8;
|
||||||
//LOG("X: %i Y: %i Z: %i Combo: 0x%04x", X, Y, Z, MultiBlock.m_BlockCoordinates[i] );
|
//LOG("X: %i Y: %i Z: %i Combo: 0x%04x", X, Y, Z, MultiBlock.m_BlockCoordinates[i] );
|
||||||
MultiBlock.m_BlockTypes[i] = m_BlockType[index];
|
MultiBlock.m_BlockTypes[i] = m_BlockType[index];
|
||||||
MultiBlock.m_BlockMetas[i] = GetLight( m_BlockMeta, index );
|
MultiBlock.m_BlockMetas[i] = GetLight( m_BlockMeta, index );
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
m_PendingSendBlocks.clear();
|
m_PendingSendBlocks.clear();
|
||||||
PendingSendBlocks = m_PendingSendBlocks.size();
|
PendingSendBlocks = m_PendingSendBlocks.size();
|
||||||
|
@ -49,9 +49,10 @@ cPacket_MapChunk::cPacket_MapChunk(cChunk * a_Chunk)
|
|||||||
AllData[iterator] = a_Chunk->GetBlock( x, y+i*16, z );
|
AllData[iterator] = a_Chunk->GetBlock( x, y+i*16, z );
|
||||||
++iterator;
|
++iterator;
|
||||||
}
|
}
|
||||||
|
|
||||||
//iterator+=2048*2; // Ignore light and stuff
|
|
||||||
}
|
}
|
||||||
|
//TODO: Send block metadata
|
||||||
|
//TODO: Send block light
|
||||||
|
//TODO: Send sky light
|
||||||
|
|
||||||
uLongf CompressedSize = compressBound( DataSize );
|
uLongf CompressedSize = compressBound( DataSize );
|
||||||
char * CompressedBlockData = new char[CompressedSize];
|
char * CompressedBlockData = new char[CompressedSize];
|
||||||
|
@ -13,12 +13,20 @@ cPacket_MultiBlock::cPacket_MultiBlock( const cPacket_MultiBlock & a_Copy )
|
|||||||
m_ChunkX = a_Copy.m_ChunkX;
|
m_ChunkX = a_Copy.m_ChunkX;
|
||||||
m_ChunkZ = a_Copy.m_ChunkZ;
|
m_ChunkZ = a_Copy.m_ChunkZ;
|
||||||
m_NumBlocks = a_Copy.m_NumBlocks;
|
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];
|
m_BlockCoordinates = new unsigned short[m_NumBlocks];
|
||||||
memcpy( m_BlockCoordinates, a_Copy.m_BlockCoordinates, sizeof(short)*m_NumBlocks );
|
memcpy( m_BlockCoordinates, a_Copy.m_BlockCoordinates, sizeof(short)*m_NumBlocks );
|
||||||
m_BlockTypes = new char[m_NumBlocks];
|
m_BlockTypes = new char[m_NumBlocks];
|
||||||
memcpy( m_BlockTypes, a_Copy.m_BlockTypes, m_NumBlocks );
|
memcpy( m_BlockTypes, a_Copy.m_BlockTypes, m_NumBlocks );
|
||||||
m_BlockMetas = new char[m_NumBlocks];
|
m_BlockMetas = new char[m_NumBlocks];
|
||||||
memcpy( m_BlockMetas, a_Copy.m_BlockMetas, 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()
|
cPacket_MultiBlock::~cPacket_MultiBlock()
|
||||||
{
|
{
|
||||||
|
#if (MINECRAFT_1_2_2 == 1)
|
||||||
|
delete [] m_Data;
|
||||||
|
#else
|
||||||
if( m_BlockCoordinates ) delete [] m_BlockCoordinates;
|
if( m_BlockCoordinates ) delete [] m_BlockCoordinates;
|
||||||
if( m_BlockTypes ) delete [] m_BlockTypes;
|
if( m_BlockTypes ) delete [] m_BlockTypes;
|
||||||
if( m_BlockMetas ) delete [] m_BlockMetas;
|
if( m_BlockMetas ) delete [] m_BlockMetas;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -43,9 +55,14 @@ void cPacket_MultiBlock::Serialize(AString & a_Data) const
|
|||||||
AppendInteger(a_Data, m_ChunkZ);
|
AppendInteger(a_Data, m_ChunkZ);
|
||||||
AppendShort (a_Data, m_NumBlocks);
|
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, (char *)m_BlockCoordinates, sizeof(short) * m_NumBlocks);
|
||||||
AppendData (a_Data, m_BlockTypes, m_NumBlocks);
|
AppendData (a_Data, m_BlockTypes, m_NumBlocks);
|
||||||
AppendData (a_Data, m_BlockMetas, m_NumBlocks);
|
AppendData (a_Data, m_BlockMetas, m_NumBlocks);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,13 +10,28 @@
|
|||||||
class cPacket_MultiBlock : public cPacket
|
class cPacket_MultiBlock : public cPacket
|
||||||
{
|
{
|
||||||
public:
|
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()
|
cPacket_MultiBlock()
|
||||||
: m_ChunkX( 0 )
|
: m_ChunkX( 0 )
|
||||||
, m_ChunkZ( 0 )
|
, m_ChunkZ( 0 )
|
||||||
, m_NumBlocks( 0 )
|
, m_NumBlocks( 0 )
|
||||||
|
#if (MINECRAFT_1_2_2 == 1)
|
||||||
|
, m_DataSize( 0 )
|
||||||
|
, m_Data( 0 )
|
||||||
|
#else
|
||||||
, m_BlockCoordinates( 0 )
|
, m_BlockCoordinates( 0 )
|
||||||
, m_BlockTypes( 0 )
|
, m_BlockTypes( 0 )
|
||||||
, m_BlockMetas( 0 )
|
, m_BlockMetas( 0 )
|
||||||
|
#endif
|
||||||
{ m_PacketID = E_MULTI_BLOCK; }
|
{ m_PacketID = E_MULTI_BLOCK; }
|
||||||
cPacket_MultiBlock( const cPacket_MultiBlock & a_Copy );
|
cPacket_MultiBlock( const cPacket_MultiBlock & a_Copy );
|
||||||
~cPacket_MultiBlock();
|
~cPacket_MultiBlock();
|
||||||
@ -28,11 +43,17 @@ public:
|
|||||||
int m_ChunkZ;
|
int m_ChunkZ;
|
||||||
short m_NumBlocks;
|
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)
|
static const unsigned int c_Size = 1 + 4 + 4 + 2; // Minimum size (when NumBlocks == 0)
|
||||||
|
|
||||||
unsigned short* m_BlockCoordinates; // x<<12 | z<<8 | y
|
unsigned short* m_BlockCoordinates; // x<<12 | z<<8 | y
|
||||||
char* m_BlockTypes;
|
char* m_BlockTypes;
|
||||||
char* m_BlockMetas;
|
char* m_BlockMetas;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user