@@ -611,49 +611,51 @@ u8 MapNode::getLevel(const NodeDefManager *nodemgr) const
611
611
return getParam2 () & LIQUID_LEVEL_MASK;
612
612
if (f.liquid_type == LIQUID_FLOWING) // can remove if all param_type_2 setted
613
613
return getParam2 () & LIQUID_LEVEL_MASK;
614
- if (f. leveled || f.param_type_2 == CPT2_LEVELED) {
615
- u8 level = getParam2 () & LEVELED_MASK;
616
- if (level)
614
+ if ( f.param_type_2 == CPT2_LEVELED) {
615
+ u8 level = getParam2 () & LEVELED_MASK;
616
+ if (level)
617
617
return level;
618
- if (f.leveled > LEVELED_MAX)
619
- return LEVELED_MAX;
620
- return f.leveled ; // default
621
618
}
622
- return 0 ;
619
+ if (f.leveled > LEVELED_MAX)
620
+ return LEVELED_MAX;
621
+ return f.leveled ;
623
622
}
624
623
625
624
u8 MapNode::setLevel (const NodeDefManager *nodemgr, s8 level)
626
625
{
627
626
u8 rest = 0 ;
628
- if (level < 1 ) {
629
- setContent (CONTENT_AIR);
630
- return 0 ;
631
- }
632
627
const ContentFeatures &f = nodemgr->get (*this );
633
628
if (f.param_type_2 == CPT2_FLOWINGLIQUID
634
- || f.liquid_type == LIQUID_FLOWING
635
- || f.liquid_type == LIQUID_SOURCE) {
629
+ || f.liquid_type == LIQUID_FLOWING
630
+ || f.liquid_type == LIQUID_SOURCE) {
631
+ if (level <= 0 ) { // liquid can’t exist with zero level
632
+ setContent (CONTENT_AIR);
633
+ return 0 ;
634
+ }
636
635
if (level >= LIQUID_LEVEL_SOURCE) {
637
636
rest = level - LIQUID_LEVEL_SOURCE;
638
637
setContent (nodemgr->getId (f.liquid_alternative_source ));
638
+ setParam2 (0 );
639
639
} else {
640
640
setContent (nodemgr->getId (f.liquid_alternative_flowing ));
641
- setParam2 (level & LIQUID_LEVEL_MASK);
641
+ setParam2 (( level & LIQUID_LEVEL_MASK) | ( getParam2 () & ~LIQUID_LEVEL_MASK) );
642
642
}
643
- } else if (f.leveled || f.param_type_2 == CPT2_LEVELED) {
644
- if (level > LEVELED_MAX) {
643
+ } else if (f.param_type_2 == CPT2_LEVELED) {
644
+ if (level < 0 ) { // zero means default for a leveled nodebox
645
+ rest = level;
646
+ level = 0 ;
647
+ } else if (level > LEVELED_MAX) {
645
648
rest = level - LEVELED_MAX;
646
649
level = LEVELED_MAX;
647
650
}
648
- setParam2 (level & LEVELED_MASK);
651
+ setParam2 (( level & LEVELED_MASK) | ( getParam2 () & ~LEVELED_MASK) );
649
652
}
650
653
return rest;
651
654
}
652
655
653
656
u8 MapNode::addLevel (const NodeDefManager *nodemgr, s8 add)
654
657
{
655
658
s8 level = getLevel (nodemgr);
656
- if (add == 0 ) level = 1 ;
657
659
level += add;
658
660
return setLevel (nodemgr, level);
659
661
}
0 commit comments