summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/Protocol/ChunkDataSerializer.cpp16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/Protocol/ChunkDataSerializer.cpp b/src/Protocol/ChunkDataSerializer.cpp
index 6b5553ee7..6f95fb472 100644
--- a/src/Protocol/ChunkDataSerializer.cpp
+++ b/src/Protocol/ChunkDataSerializer.cpp
@@ -502,7 +502,21 @@ inline void cChunkDataSerializer::Serialize477(const int a_ChunkX, const int a_C
// Write each chunk section...
ChunkDef_ForEachSection(a_BlockData, a_LightData,
{
- m_Packet.WriteBEInt16(ChunkBlockData::SectionBlockCount); // a temp fix to make sure sections don't disappear
+ // Count non-air blocks.
+ int BlockCount = 0;
+ if (Blocks != nullptr)
+ {
+ for (size_t i = 0; i != ChunkBlockData::SectionBlockCount; i++)
+ {
+ const BLOCKTYPE BlockType = (*Blocks)[i];
+ if (BlockType != E_BLOCK_AIR)
+ {
+ BlockCount++;
+ }
+ }
+ }
+
+ m_Packet.WriteBEInt16(BlockCount);
m_Packet.WriteBEUInt8(BitsPerEntry);
m_Packet.WriteVarInt32(static_cast<UInt32>(ChunkSectionDataArraySize));
WriteBlockSectionSeamless<&Palette477>(Blocks, Metas, BitsPerEntry);