From a2f6ab93b6140740ca2562d5f82022a64c79feb6 Mon Sep 17 00:00:00 2001 From: faketruth Date: Thu, 1 Mar 2012 18:56:56 +0000 Subject: Chunks are successfully streamed to clients (in a bad a slow way, but whatever) Fixed respawn packet for 1.2.2 git-svn-id: http://mc-server.googlecode.com/svn/trunk@350 0a769ca7-a7f5-676a-18bf-c427514a06d6 --- source/cPlayer.cpp | 2 ++ source/packets/cPacket_MapChunk.cpp | 18 +++++++++++++----- source/packets/cPacket_Respawn.cpp | 18 ++++++++++++++++++ source/packets/cPacket_Respawn.h | 16 ++++++++++++++++ 4 files changed, 49 insertions(+), 5 deletions(-) diff --git a/source/cPlayer.cpp b/source/cPlayer.cpp index c71f04d33..f013465de 100644 --- a/source/cPlayer.cpp +++ b/source/cPlayer.cpp @@ -364,10 +364,12 @@ void cPlayer::Respawn() //Packet.m_CreativeMode = (char)GetWorld()->GetGameMode(); Packet.m_CreativeMode = (char)m_GameMode; //Set GameMode packet based on Player's GameMode; +#if (MINECRAFT_1_2_2 != 1 ) //TODO Less hardcoded Packet.m_World = 0; Packet.m_MapSeed = GetWorld()->GetWorldSeed(); +#endif //Send Packet m_ClientHandle->Send( Packet ); diff --git a/source/packets/cPacket_MapChunk.cpp b/source/packets/cPacket_MapChunk.cpp index 859db47f3..99afd9a40 100644 --- a/source/packets/cPacket_MapChunk.cpp +++ b/source/packets/cPacket_MapChunk.cpp @@ -36,15 +36,23 @@ cPacket_MapChunk::cPacket_MapChunk(cChunk * a_Chunk) m_UnusedInt = 0; - for( int i = 0; i < 16; ++i ) - { - m_BitMap1 |= (1 << i); - } - unsigned int DataSize = 16 * (4096 + 2048 + 2048 + 2048); char* AllData = new char[ DataSize ]; memset( AllData, 0, DataSize ); + unsigned int iterator = 0; + for( int i = 0; i < 8; ++i ) // Old world is only 8 high + { + m_BitMap1 |= (1 << i); + for( int y = 0; y < 16; ++y ) for( int z = 0; z < 16; ++z ) for( int x = 0; x < 16; ++x ) + { + AllData[iterator] = a_Chunk->GetBlock( x, y+i*16, z ); + ++iterator; + } + + //iterator+=2048*2; // Ignore light and stuff + } + uLongf CompressedSize = compressBound( DataSize ); char * CompressedBlockData = new char[CompressedSize]; diff --git a/source/packets/cPacket_Respawn.cpp b/source/packets/cPacket_Respawn.cpp index f438e8bde..12c30deaa 100644 --- a/source/packets/cPacket_Respawn.cpp +++ b/source/packets/cPacket_Respawn.cpp @@ -10,12 +10,21 @@ void cPacket_Respawn::Serialize(AString & a_Data) const { AppendByte (a_Data, m_PacketID); + +#if (MINECRAFT_1_2_2 == 1) + AppendInteger (a_Data, m_Dimension); + AppendByte (a_Data, m_Difficulty); + AppendByte (a_Data, m_CreativeMode); + AppendShort (a_Data, m_WorldHeight); + AppendString16(a_Data, m_LevelType); +#else AppendByte (a_Data, m_World); AppendByte (a_Data, m_Difficulty); AppendByte (a_Data, m_CreativeMode); AppendShort (a_Data, m_WorldHeight); AppendLong (a_Data, m_MapSeed); AppendString16(a_Data, m_LevelType); +#endif } @@ -25,12 +34,21 @@ void cPacket_Respawn::Serialize(AString & a_Data) const int cPacket_Respawn::Parse(const char * a_Data, int a_Size) { int TotalBytes = 0; + +#if (MINECRAFT_1_2_2 == 1) + HANDLE_PACKET_READ(ReadInteger, m_Dimension, TotalBytes); + HANDLE_PACKET_READ(ReadByte, m_Difficulty, TotalBytes); + HANDLE_PACKET_READ(ReadByte, m_CreativeMode, TotalBytes); + HANDLE_PACKET_READ(ReadShort, m_WorldHeight, TotalBytes); + HANDLE_PACKET_READ(ReadString16, m_LevelType, TotalBytes); +#else HANDLE_PACKET_READ(ReadByte, m_World, TotalBytes); HANDLE_PACKET_READ(ReadByte, m_Difficulty, TotalBytes); HANDLE_PACKET_READ(ReadByte, m_CreativeMode, TotalBytes); HANDLE_PACKET_READ(ReadShort, m_WorldHeight, TotalBytes); HANDLE_PACKET_READ(ReadLong, m_MapSeed, TotalBytes); HANDLE_PACKET_READ(ReadString16, m_LevelType, TotalBytes); +#endif return TotalBytes; } diff --git a/source/packets/cPacket_Respawn.h b/source/packets/cPacket_Respawn.h index 7f5950945..dbb4957c5 100644 --- a/source/packets/cPacket_Respawn.h +++ b/source/packets/cPacket_Respawn.h @@ -13,24 +13,40 @@ class cPacket_Respawn : public cPacket { public: cPacket_Respawn() +#if (MINECRAFT_1_2_2 == 1) + : m_Dimension( 0 ) + , m_Difficulty( 0 ) + , m_CreativeMode( 0 ) + , m_WorldHeight( 0 ) + , m_LevelType( cPacket_Login::LEVEL_TYPE_DEFAULT ) +#else : m_World( 0 ) , m_Difficulty( 0 ) , m_CreativeMode( 0 ) , m_WorldHeight( 0 ) , m_MapSeed( 0 ) , m_LevelType( cPacket_Login::LEVEL_TYPE_DEFAULT ) +#endif { m_PacketID = E_RESPAWN; } virtual cPacket* Clone() const { return new cPacket_Respawn( *this ); } virtual int Parse(const char * a_Data, int a_Size) override; virtual void Serialize(AString & a_Data) const override; +#if (MINECRAFT_1_2_2 == 1) + int m_Dimension; + char m_Difficulty; + char m_CreativeMode; + short m_WorldHeight; + AString m_LevelType; +#else char m_World; char m_Difficulty; char m_CreativeMode; short m_WorldHeight; long long m_MapSeed; AString m_LevelType; +#endif static const unsigned int c_Size = 1 + 1 + 1 + 1 + 2 + 8 + 2; }; -- cgit v1.2.3