From ff740a417946abb003426734645f823458eee9f3 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Fri, 8 May 2015 13:31:03 -0400 Subject: [PATCH] Ensure that Map::findNodesWithMetadata() reports nodes strictly within the node-granular area --- src/map.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/map.cpp b/src/map.cpp index 7f8059cc4..47c66055d 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -1898,6 +1898,8 @@ std::vector Map::findNodesWithMetadata(v3s16 p1, v3s16 p2) v3s16 bpmin = getNodeBlockPos(p1); v3s16 bpmax = getNodeBlockPos(p2); + VoxelArea area(p1, p2); + for (s16 z = bpmin.Z; z <= bpmax.Z; z++) for (s16 y = bpmin.Y; y <= bpmax.Y; y++) for (s16 x = bpmin.X; x <= bpmax.X; x++) { @@ -1917,8 +1919,13 @@ std::vector Map::findNodesWithMetadata(v3s16 p1, v3s16 p2) v3s16 p_base = blockpos * MAP_BLOCKSIZE; std::vector keys = block->m_node_metadata.getAllKeys(); - for (size_t i = 0; i != keys.size(); i++) - positions_with_meta.push_back(keys[i] + p_base); + for (size_t i = 0; i != keys.size(); i++) { + v3s16 p(keys[i] + p_base); + if (!area.contains(p)) + continue; + + positions_with_meta.push_back(p); + } } return positions_with_meta; -- 2.25.1