From 3bfb8284b868c580b5ec15e732c1d6b379168c2f Mon Sep 17 00:00:00 2001 From: Vitaliy Date: Wed, 12 Dec 2018 02:02:09 +0300 Subject: [PATCH] =?UTF-8?q?Make=20MapNode=20handle=20paramtype2=E2=89=A0le?= =?UTF-8?q?veled=20properly=20(#7958)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/mapnode.cpp | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/src/mapnode.cpp b/src/mapnode.cpp index ffba2f59..4cc9985c 100644 --- a/src/mapnode.cpp +++ b/src/mapnode.cpp @@ -611,41 +611,44 @@ u8 MapNode::getLevel(const NodeDefManager *nodemgr) const return getParam2() & LIQUID_LEVEL_MASK; if(f.liquid_type == LIQUID_FLOWING) // can remove if all param_type_2 setted return getParam2() & LIQUID_LEVEL_MASK; - if(f.leveled || f.param_type_2 == CPT2_LEVELED) { - u8 level = getParam2() & LEVELED_MASK; - if(level) + if (f.param_type_2 == CPT2_LEVELED) { + u8 level = getParam2() & LEVELED_MASK; + if (level) return level; - if(f.leveled > LEVELED_MAX) - return LEVELED_MAX; - return f.leveled; //default } - return 0; + if (f.leveled > LEVELED_MAX) + return LEVELED_MAX; + return f.leveled; } u8 MapNode::setLevel(const NodeDefManager *nodemgr, s8 level) { u8 rest = 0; - if (level < 1) { - setContent(CONTENT_AIR); - return 0; - } const ContentFeatures &f = nodemgr->get(*this); if (f.param_type_2 == CPT2_FLOWINGLIQUID - || f.liquid_type == LIQUID_FLOWING - || f.liquid_type == LIQUID_SOURCE) { + || f.liquid_type == LIQUID_FLOWING + || f.liquid_type == LIQUID_SOURCE) { + if (level <= 0) { // liquid can’t exist with zero level + setContent(CONTENT_AIR); + return 0; + } if (level >= LIQUID_LEVEL_SOURCE) { rest = level - LIQUID_LEVEL_SOURCE; setContent(nodemgr->getId(f.liquid_alternative_source)); + setParam2(0); } else { setContent(nodemgr->getId(f.liquid_alternative_flowing)); - setParam2(level & LIQUID_LEVEL_MASK); + setParam2((level & LIQUID_LEVEL_MASK) | (getParam2() & ~LIQUID_LEVEL_MASK)); } - } else if (f.leveled || f.param_type_2 == CPT2_LEVELED) { - if (level > LEVELED_MAX) { + } else if (f.param_type_2 == CPT2_LEVELED) { + if (level < 0) { // zero means default for a leveled nodebox + rest = level; + level = 0; + } else if (level > LEVELED_MAX) { rest = level - LEVELED_MAX; level = LEVELED_MAX; } - setParam2(level & LEVELED_MASK); + setParam2((level & LEVELED_MASK) | (getParam2() & ~LEVELED_MASK)); } return rest; } @@ -653,7 +656,6 @@ u8 MapNode::setLevel(const NodeDefManager *nodemgr, s8 level) u8 MapNode::addLevel(const NodeDefManager *nodemgr, s8 add) { s8 level = getLevel(nodemgr); - if (add == 0) level = 1; level += add; return setLevel(nodemgr, level); }