# UNDF: UNDF-2026-000000939 --- a/src/mapgen/mg_decoration.h +++ b/src/mapgen/mg_decoration.h @@ -50,9 +50,9 @@ class Decoration : public ObjDef, public NodeResolver { u32 flags = 0; int mapseed = 0; - std::vector c_place_on; + std::unordered_set c_place_on; int check_offset = 0; s16 sidelen = 2; s16 y_min; s16 y_max; @@ -58,7 +58,7 @@ class Decoration : public ObjDef, public NodeResolver { float fill_ratio = 0.0f; NoiseParams np; - std::vector c_spawnby; + std::unordered_set c_spawnby; s16 nspawnby = -1; s16 place_offset_y = 0; std::unordered_set biomes; --- a/src/mapgen/mg_decoration.cpp +++ b/src/mapgen/mg_decoration.cpp @@ -60,8 +60,14 @@ void Decoration::resolveNodeNames() { - getIdsFromNrBacklog(&c_place_on); - getIdsFromNrBacklog(&c_spawnby); + std::vector place_on_vec; + getIdsFromNrBacklog(&place_on_vec); + c_place_on.clear(); + c_place_on.insert(place_on_vec.begin(), place_on_vec.end()); + + std::vector spawnby_vec; + getIdsFromNrBacklog(&spawnby_vec); + c_spawnby.clear(); + c_spawnby.insert(spawnby_vec.begin(), spawnby_vec.end()); } bool Decoration::canPlaceDecoration(MMVManip *vm, v3s16 p) @@ -72,7 +78,7 @@ bool Decoration::canPlaceDecoration(MMVManip *vm, v3s16 p) // Check if the decoration can be placed on this node u32 vi = vm->m_area.index(p); - if (!CONTAINS(c_place_on, vm->m_data[vi].getContent())) + if (c_place_on.count(vm->m_data[vi].getContent()) == 0) return false; @@ -98,7 +104,7 @@ bool Decoration::canPlaceDecoration(MMVManip *vm, v3s16 p) if (!vm->m_area.contains(index)) continue; - if (CONTAINS(c_spawnby, vm->m_data[index].getContent())) + if (c_spawnby.count(vm->m_data[index].getContent()) > 0) nneighs++; } @@ -110,7 +116,7 @@ bool Decoration::canPlaceDecoration(MMVManip *vm, v3s16 p) if (!vm->m_area.contains(index)) continue; - if (CONTAINS(c_spawnby, vm->m_data[index].getContent())) + if (c_spawnby.count(vm->m_data[index].getContent()) > 0) nneighs++; }