diff options
author | paramat <mat.gregory@virginmedia.com> | 2017-02-17 15:50:51 +0000 |
---|---|---|
committer | paramat <mat.gregory@virginmedia.com> | 2017-02-18 22:47:24 +0000 |
commit | 111e7e1cc8316e4812e85fddc579feaeedecbb58 (patch) | |
tree | 10aadaded479e5d705f64cfa199272c06ee87384 | |
parent | d0a6cacd51a25f75b0b2e9133514c7cf40a36805 (diff) | |
download | minetest-111e7e1cc8316e4812e85fddc579feaeedecbb58.tar.gz minetest-111e7e1cc8316e4812e85fddc579feaeedecbb58.tar.bz2 minetest-111e7e1cc8316e4812e85fddc579feaeedecbb58.zip |
Voxelmanip: Do not emerge or blit to blocks over map gen limit
Placing a structure that extends into mapblocks that extend past
map_gen_limit causes a crash. For example a sapling growing at the
world edge which adds leaves beyond the edge, or placing a structure
using the lua voxelmanip, or placing a schematic or l-system tree.
Do not run the 'load_if_inexistent' block of code if the mapblock
is over limit, this also marks the mapblock with the flag
VMANIP_BLOCK_DATA_INEXIST which later prevents blitting back those
mapblocks.
This fix therefore uses existing functionality by having the same
effect as the 'load_if_inexistent' bool being false.
-rw-r--r-- | src/map.cpp | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/map.cpp b/src/map.cpp index ffba77262..a415bda96 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -3161,7 +3161,7 @@ void MMVManip::initialEmerge(v3s16 blockpos_min, v3s16 blockpos_max, if(block_data_inexistent) { - if (load_if_inexistent) { + if (load_if_inexistent && !blockpos_over_limit(p)) { ServerMap *svrmap = (ServerMap *)m_map; block = svrmap->emergeBlock(p, false); if (block == NULL) |