diff --git a/src/mapblock.cpp b/src/mapblock.cpp index d0fbe1c38..767919c56 100644 --- a/src/mapblock.cpp +++ b/src/mapblock.cpp @@ -104,9 +104,9 @@ MapBlock::MapBlock(v3s16 pos, IGameDef *gamedef): m_pos(pos), m_pos_relative(pos * MAP_BLOCKSIZE), m_gamedef(gamedef), - m_is_mono_block(true) + m_is_mono_block(false) { - reallocate(1, MapNode(CONTENT_IGNORE)); + reallocate(nodecount, MapNode(CONTENT_IGNORE)); } MapBlock::~MapBlock() diff --git a/src/unittest/test_mapblock.cpp b/src/unittest/test_mapblock.cpp index 98e184141..d81848580 100644 --- a/src/unittest/test_mapblock.cpp +++ b/src/unittest/test_mapblock.cpp @@ -57,21 +57,25 @@ void TestMapBlock::runTests(IGameDef *gamedef) void TestMapBlock::testMonoblock(IGameDef *gamedef) { MapBlock block({}, gamedef); - UASSERT(block.m_is_mono_block); - block.data[0] = MapNode(CONTENT_AIR); + UASSERT(!block.m_is_mono_block); // make the array is expanded block.expandNodesIfNeeded(); - UASSERT(std::all_of(block.data, block.data + MapBlock::nodecount, [](MapNode &n) { return n == MapNode(CONTENT_AIR); })); + UASSERT(std::all_of(block.data, block.data + MapBlock::nodecount, [](MapNode &n) { return n == MapNode(CONTENT_IGNORE); })); // covert to monoblock block.tryShrinkNodes(); UASSERT(block.m_is_mono_block); + UASSERT(block.data[0].param0 == CONTENT_IGNORE); + + block.data[0] = MapNode(CONTENT_AIR); + UASSERT(block.m_is_mono_block); UASSERT(block.data[0].param0 == CONTENT_AIR); // get the data(), should deconvert the block block.getData(); UASSERT(!block.m_is_mono_block); + UASSERT(std::all_of(block.data, block.data + MapBlock::nodecount, [](MapNode &n) { return n == MapNode(CONTENT_AIR); })); // covert back to mono block block.tryShrinkNodes();