diff --git a/src/map.cpp b/src/map.cpp index 9c06750b8..29bbbc0d9 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -2312,7 +2312,7 @@ void ServerMap::finishBlockMake(BlockMakeData *data, { // 70ms @cs=8 //TimeTaker timer("finishBlockMake() blitBackAll"); - data->vmanip->blitBackAll(&changed_blocks); + data->vmanip->blitBackAll(&changed_blocks, false); } EMERGE_DBG_OUT("finishBlockMake: changed_blocks.size()=" << changed_blocks.size()); @@ -3586,7 +3586,8 @@ void ManualMapVoxelManipulator::initialEmerge(v3s16 blockpos_min, } void ManualMapVoxelManipulator::blitBackAll( - std::map * modified_blocks) + std::map *modified_blocks, + bool overwrite_generated) { if(m_area.getExtent() == v3s16(0,0,0)) return; @@ -3601,10 +3602,9 @@ void ManualMapVoxelManipulator::blitBackAll( v3s16 p = i->first; MapBlock *block = m_map->getBlockNoCreateNoEx(p); bool existed = !(i->second & VMANIP_BLOCK_DATA_INEXIST); - if((existed == false) || (block == NULL)) - { + if ((existed == false) || (block == NULL) || + (overwrite_generated == false && block->isGenerated() == true)) continue; - } block->copyFrom(*this); diff --git a/src/map.h b/src/map.h index 4972046f5..f4c7bb2fc 100644 --- a/src/map.h +++ b/src/map.h @@ -543,10 +543,11 @@ public: {m_map = map;} void initialEmerge(v3s16 blockpos_min, v3s16 blockpos_max, - bool load_if_inexistent = true); + bool load_if_inexistent = true); // This is much faster with big chunks of generated data - void blitBackAll(std::map * modified_blocks); + void blitBackAll(std::map * modified_blocks, + bool overwrite_generated = true); protected: bool m_create_area;