1
0

Anvil format: fixed loading with XZY ordering

git-svn-id: http://mc-server.googlecode.com/svn/trunk@398 0a769ca7-a7f5-676a-18bf-c427514a06d6
This commit is contained in:
madmaxoft@gmail.com 2012-03-11 10:47:37 +00:00
parent 219be8186c
commit dc8004d5e6

View File

@ -137,9 +137,9 @@ bool cWSSAnvil::LoadChunkFromData(const cChunkCoords & a_Chunk, const AString &
// Decompress the data: // Decompress the data:
char Uncompressed[CHUNK_INFLATE_MAX]; char Uncompressed[CHUNK_INFLATE_MAX];
z_stream strm; z_stream strm;
strm.zalloc = (alloc_func)NULL; strm.zalloc = (alloc_func)NULL;
strm.zfree = (free_func)NULL; strm.zfree = (free_func)NULL;
strm.opaque = NULL; strm.opaque = NULL;
inflateInit(&strm); inflateInit(&strm);
strm.next_out = (Bytef *)Uncompressed; strm.next_out = (Bytef *)Uncompressed;
strm.avail_out = sizeof(Uncompressed); strm.avail_out = sizeof(Uncompressed);
@ -170,15 +170,13 @@ bool cWSSAnvil::LoadChunkFromData(const cChunkCoords & a_Chunk, const AString &
bool cWSSAnvil::LoadChunkFromNBT(const cChunkCoords & a_Chunk, cNBTTag & a_NBT) bool cWSSAnvil::LoadChunkFromNBT(const cChunkCoords & a_Chunk, cNBTTag & a_NBT)
{ {
// The data arrays, in MCA-native y/z/x ordering (will be reordered for the final chunk data) // The data arrays, in MCA-native y/z/x ordering (will be reordered for the final chunk data)
char BlockData[cChunk::c_NumBlocks]; char BlockData[cChunk::c_BlockDataSize];
char MetaData[cChunk::c_NumBlocks / 2]; char * MetaData = BlockData + cChunk::c_NumBlocks;
char BlockLight[cChunk::c_NumBlocks / 2]; char * BlockLight = MetaData + cChunk::c_NumBlocks / 2;
char SkyLight[cChunk::c_NumBlocks / 2]; char * SkyLight = BlockLight + cChunk::c_NumBlocks / 2;
memset(BlockData, E_BLOCK_AIR, sizeof(BlockData)); memset(BlockData, E_BLOCK_AIR, sizeof(BlockData) - cChunk::c_NumBlocks / 2);
memset(MetaData, 0, sizeof(MetaData)); memset(SkyLight, 0xff, cChunk::c_NumBlocks / 2); // By default, data not present in the NBT means air, which means full skylight
memset(BlockLight, 0, sizeof(BlockLight));
memset(SkyLight, 0xff, sizeof(SkyLight)); // By default, data not present in the NBT means air, which means full skylight
// Load the blockdata, blocklight and skylight: // Load the blockdata, blocklight and skylight:
cNBTList * Sections = (cNBTList *)a_NBT.FindChildByPath("Level\\Sections"); cNBTList * Sections = (cNBTList *)a_NBT.FindChildByPath("Level\\Sections");