diff options
author | peterbell10 <peterbell10@live.co.uk> | 2017-08-21 00:23:23 +0200 |
---|---|---|
committer | Lukas Pioch <lukas@zgow.de> | 2017-08-26 20:56:44 +0200 |
commit | 447d929da18b656227c77d9c00958bcf52afeeb2 (patch) | |
tree | 9614d84d6164f79be0061495a684d76b583f1f13 /src/WorldStorage/WSSAnvil.cpp | |
parent | Leashes work in 1.12.1 (diff) | |
download | cuberite-447d929da18b656227c77d9c00958bcf52afeeb2.tar cuberite-447d929da18b656227c77d9c00958bcf52afeeb2.tar.gz cuberite-447d929da18b656227c77d9c00958bcf52afeeb2.tar.bz2 cuberite-447d929da18b656227c77d9c00958bcf52afeeb2.tar.lz cuberite-447d929da18b656227c77d9c00958bcf52afeeb2.tar.xz cuberite-447d929da18b656227c77d9c00958bcf52afeeb2.tar.zst cuberite-447d929da18b656227c77d9c00958bcf52afeeb2.zip |
Diffstat (limited to '')
-rwxr-xr-x | src/WorldStorage/WSSAnvil.cpp | 32 |
1 files changed, 17 insertions, 15 deletions
diff --git a/src/WorldStorage/WSSAnvil.cpp b/src/WorldStorage/WSSAnvil.cpp index bbbffb07f..a3251481f 100755 --- a/src/WorldStorage/WSSAnvil.cpp +++ b/src/WorldStorage/WSSAnvil.cpp @@ -515,23 +515,25 @@ bool cWSSAnvil::SaveChunkToNBT(const cChunkCoords & a_Chunk, cFastNBTWriter & a_ // Save blockdata: a_Writer.BeginList("Sections", TAG_Compound); - size_t SliceSizeBlock = cChunkDef::Width * cChunkDef::Width * 16; - size_t SliceSizeNibble = SliceSizeBlock / 2; - const char * BlockTypes = reinterpret_cast<const char *>(Serializer.m_BlockTypes); - const char * BlockMetas = reinterpret_cast<const char *>(Serializer.m_BlockMetas); - #ifdef DEBUG_SKYLIGHT - const char * BlockLight = reinterpret_cast<const char *>(Serializer.m_BlockSkyLight); - #else - const char * BlockLight = reinterpret_cast<const char *>(Serializer.m_BlockLight); - #endif - const char * BlockSkyLight = reinterpret_cast<const char *>(Serializer.m_BlockSkyLight); - for (int Y = 0; Y < 16; Y++) + for (size_t Y = 0; Y != cChunkData::NumSections; ++Y) { + auto Section = Serializer.m_Data.GetSection(Y); + if (Section == nullptr) + { + continue; + } + a_Writer.BeginCompound(""); - a_Writer.AddByteArray("Blocks", BlockTypes + static_cast<unsigned int>(Y) * SliceSizeBlock, SliceSizeBlock); - a_Writer.AddByteArray("Data", BlockMetas + static_cast<unsigned int>(Y) * SliceSizeNibble, SliceSizeNibble); - a_Writer.AddByteArray("SkyLight", BlockSkyLight + static_cast<unsigned int>(Y) * SliceSizeNibble, SliceSizeNibble); - a_Writer.AddByteArray("BlockLight", BlockLight + static_cast<unsigned int>(Y) * SliceSizeNibble, SliceSizeNibble); + a_Writer.AddByteArray("Blocks", reinterpret_cast<const char *>(Section->m_BlockTypes), ARRAYCOUNT(Section->m_BlockTypes)); + a_Writer.AddByteArray("Data", reinterpret_cast<const char *>(Section->m_BlockMetas), ARRAYCOUNT(Section->m_BlockMetas)); + + #ifdef DEBUG_SKYLIGHT + a_Writer.AddByteArray("BlockLight", reinterpret_cast<const char *>(Section->m_BlockSkyLight), ARRAYCOUNT(Section->m_BlockSkyLight)); + #else + a_Writer.AddByteArray("BlockLight", reinterpret_cast<const char *>(Section->m_BlockLight), ARRAYCOUNT(Section->m_BlockLight)); + #endif + + a_Writer.AddByteArray("SkyLight", reinterpret_cast<const char *>(Section->m_BlockSkyLight), ARRAYCOUNT(Section->m_BlockSkyLight)); a_Writer.AddByte("Y", static_cast<unsigned char>(Y)); a_Writer.EndCompound(); } |