diff --git a/src/cavegen.cpp b/src/cavegen.cpp index 51af50984..71f005d5b 100644 --- a/src/cavegen.cpp +++ b/src/cavegen.cpp @@ -236,6 +236,9 @@ void CaveV6::carveRoute(v3f vec, float f, bool randomize_xz) { continue; u32 i = vm->m_area.index(p); + content_t c = vm->m_data[i].getContent(); + if (!ndef->get(c).is_ground_content) + continue; if (large_cave) { int full_ymin = node_min.Y - MAP_BLOCKSIZE; @@ -250,7 +253,6 @@ void CaveV6::carveRoute(v3f vec, float f, bool randomize_xz) { } } else { // Don't replace air or water or lava or ignore - content_t c = vm->m_data[i].getContent(); if (c == CONTENT_IGNORE || c == CONTENT_AIR || c == c_water_source || c == c_lava_source) continue; @@ -530,8 +532,8 @@ void CaveV7::carveRoute(v3f vec, float f, bool randomize_xz, bool is_ravine) { // Don't replace air, water, lava, or ice content_t c = vm->m_data[i].getContent(); - if (c == CONTENT_AIR || c == c_water_source || - c == c_lava_source || c == c_ice) + if (!ndef->get(c).is_ground_content || c == CONTENT_AIR || + c == c_water_source || c == c_lava_source || c == c_ice) continue; if (large_cave) { diff --git a/src/mapnode.cpp b/src/mapnode.cpp index a47a48bc0..d52677be0 100644 --- a/src/mapnode.cpp +++ b/src/mapnode.cpp @@ -383,8 +383,10 @@ u8 MapNode::getLevel(INodeDefManager *nodemgr) const return getParam2() & LIQUID_LEVEL_MASK; if(f.leveled || f.param_type_2 == CPT2_LEVELED) { u8 level = getParam2() & LEVELED_MASK; - if(level) return level; - if(f.leveled > LEVELED_MAX) return LEVELED_MAX; + if(level) + return level; + if(f.leveled > LEVELED_MAX) + return LEVELED_MAX; return f.leveled; //default } return 0; @@ -398,7 +400,7 @@ u8 MapNode::setLevel(INodeDefManager *nodemgr, s8 level) return 0; } const ContentFeatures &f = nodemgr->get(*this); - if ( f.param_type_2 == CPT2_FLOWINGLIQUID + if (f.param_type_2 == CPT2_FLOWINGLIQUID || f.liquid_type == LIQUID_FLOWING || f.liquid_type == LIQUID_SOURCE) { if (level >= LIQUID_LEVEL_SOURCE) { @@ -487,8 +489,7 @@ void MapNode::deSerialize(u8 *source, u8 version) param0 = readU16(source+0); param1 = readU8(source+2); param2 = readU8(source+3); - } - else{ + }else{ param0 = readU8(source+0); param1 = readU8(source+1); param2 = readU8(source+2); diff --git a/src/nodedef.cpp b/src/nodedef.cpp index 41956ca2e..d13d0653d 100644 --- a/src/nodedef.cpp +++ b/src/nodedef.cpp @@ -396,15 +396,16 @@ public: // Set CONTENT_AIR { ContentFeatures f; - f.name = "air"; - f.drawtype = NDT_AIRLIKE; - f.param_type = CPT_LIGHT; - f.light_propagates = true; + f.name = "air"; + f.drawtype = NDT_AIRLIKE; + f.param_type = CPT_LIGHT; + f.light_propagates = true; f.sunlight_propagates = true; - f.walkable = false; - f.pointable = false; - f.diggable = false; - f.buildable_to = true; + f.walkable = false; + f.pointable = false; + f.diggable = false; + f.buildable_to = true; + f.is_ground_content = true; // Insert directly into containers content_t c = CONTENT_AIR; m_content_features[c] = f; @@ -414,16 +415,16 @@ public: // Set CONTENT_IGNORE { ContentFeatures f; - f.name = "ignore"; - f.drawtype = NDT_AIRLIKE; - f.param_type = CPT_NONE; - f.light_propagates = false; + f.name = "ignore"; + f.drawtype = NDT_AIRLIKE; + f.param_type = CPT_NONE; + f.light_propagates = false; f.sunlight_propagates = false; - f.walkable = false; - f.pointable = false; - f.diggable = false; - // A way to remove accidental CONTENT_IGNOREs - f.buildable_to = true; + f.walkable = false; + f.pointable = false; + f.diggable = false; + f.buildable_to = true; // A way to remove accidental CONTENT_IGNOREs + f.is_ground_content = true; // Insert directly into containers content_t c = CONTENT_IGNORE; m_content_features[c] = f;