• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

CyclopsMC / IntegratedDynamics / 14811801504

03 May 2025 02:32PM UTC coverage: 45.26% (+0.09%) from 45.171%
14811801504

push

github

rubensworks
Bump mod version

2561 of 8411 branches covered (30.45%)

Branch coverage included in aggregate %.

11722 of 23147 relevant lines covered (50.64%)

2.4 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

24.44
/src/main/java/org/cyclops/integrateddynamics/core/evaluate/variable/ValueObjectTypeFluidStack.java
1
package org.cyclops.integrateddynamics.core.evaluate.variable;
2

3
import lombok.ToString;
4
import net.minecraft.core.registries.BuiltInRegistries;
5
import net.minecraft.nbt.CompoundTag;
6
import net.minecraft.nbt.NbtOps;
7
import net.minecraft.nbt.Tag;
8
import net.minecraft.network.chat.Component;
9
import net.minecraft.network.chat.MutableComponent;
10
import net.minecraft.world.item.ItemStack;
11
import net.neoforged.neoforge.fluids.FluidStack;
12
import net.neoforged.neoforge.fluids.FluidUtil;
13
import org.cyclops.integrateddynamics.api.evaluate.variable.IValueTypeNamed;
14
import org.cyclops.integrateddynamics.api.evaluate.variable.IValueTypeNullable;
15
import org.cyclops.integrateddynamics.api.evaluate.variable.IValueTypeUniquelyNamed;
16
import org.cyclops.integrateddynamics.api.evaluate.variable.ValueDeseralizationContext;
17
import org.cyclops.integrateddynamics.core.helper.Helpers;
18
import org.cyclops.integrateddynamics.core.helper.L10NValues;
19
import org.cyclops.integrateddynamics.core.logicprogrammer.ValueTypeItemStackLPElement;
20
import org.cyclops.integrateddynamics.core.logicprogrammer.ValueTypeLPElementBase;
21

22
import java.util.Objects;
23

24
/**
25
 * Value type with values that are fluidstacks.
26
 * @author rubensworks
27
 */
28
public class ValueObjectTypeFluidStack extends ValueObjectTypeBase<ValueObjectTypeFluidStack.ValueFluidStack> implements
29
        IValueTypeNamed<ValueObjectTypeFluidStack.ValueFluidStack>,
30
        IValueTypeUniquelyNamed<ValueObjectTypeFluidStack.ValueFluidStack>,
31
        IValueTypeNullable<ValueObjectTypeFluidStack.ValueFluidStack> {
32

33
    public ValueObjectTypeFluidStack() {
34
        super("fluidstack", ValueObjectTypeFluidStack.ValueFluidStack.class);
4✔
35
    }
1✔
36

37
    @Override
38
    public ValueFluidStack getDefault() {
39
        return ValueFluidStack.of(FluidStack.EMPTY);
×
40
    }
41

42
    @Override
43
    public MutableComponent toCompactString(ValueFluidStack value) {
44
        FluidStack fluidStack = value.getRawValue();
×
45
        return !fluidStack.isEmpty() ? fluidStack.getHoverName().copy().append(String.format(" (%s mB)", fluidStack.getAmount())) : Component.literal("");
×
46
    }
47

48
    @Override
49
    public Tag serialize(ValueDeseralizationContext valueDeseralizationContext, ValueFluidStack value) {
50
        return FluidStack.OPTIONAL_CODEC.encodeStart(valueDeseralizationContext.holderLookupProvider().createSerializationContext(NbtOps.INSTANCE), value.getRawValue()).getOrThrow();
×
51
    }
52

53
    @Override
54
    public ValueFluidStack deserialize(ValueDeseralizationContext valueDeseralizationContext, Tag value) {
55
        if (value instanceof CompoundTag) {
×
56
            FluidStack fluidStack = FluidStack.OPTIONAL_CODEC.decode(valueDeseralizationContext.holderLookupProvider().createSerializationContext(NbtOps.INSTANCE), value)
×
57
                    .getOrThrow().getFirst();
×
58
            return ValueFluidStack.of(fluidStack);
×
59
        } else {
60
            return null;
×
61
        }
62
    }
63

64
    @Override
65
    public String getName(ValueFluidStack a) {
66
        return toCompactString(a).getString();
×
67
    }
68

69
    @Override
70
    public boolean isNull(ValueFluidStack a) {
71
        return a.getRawValue().isEmpty();
×
72
    }
73

74
    @Override
75
    public ValueTypeLPElementBase createLogicProgrammerElement() {
76
        return new ValueTypeItemStackLPElement<>(this, new ValueTypeItemStackLPElement.IItemStackToValue<ValueObjectTypeFluidStack.ValueFluidStack>() {
×
77
            @Override
78
            public boolean isNullable() {
79
                return true;
×
80
            }
81

82
            @Override
83
            public Component validate(ItemStack itemStack) {
84
                return itemStack.isEmpty() ||
×
85
                        FluidUtil.getFluidHandler(itemStack).isPresent() ?
×
86
                        null :
×
87
                        Component.translatable(L10NValues.VALUETYPE_OBJECT_FLUID_ERROR_NOFLUID);
×
88
            }
89

90
            @Override
91
            public ValueObjectTypeFluidStack.ValueFluidStack getValue(ItemStack itemStack) {
92
                return ValueObjectTypeFluidStack.ValueFluidStack.of(Helpers.getFluidStack(itemStack));
×
93
            }
94
        });
95
    }
96

97
    @Override
98
    public String getUniqueName(ValueFluidStack value) {
99
        FluidStack fluidStack = value.getRawValue();
×
100
        return !fluidStack.isEmpty() ?
×
101
                String.format("%s %s", BuiltInRegistries.FLUID.getKey(fluidStack.getFluid()), fluidStack.getAmount()) : "";
×
102
    }
103

104
    @ToString
×
105
    public static class ValueFluidStack extends ValueBase {
106

107
        private final FluidStack fluidStack;
108

109
        private ValueFluidStack(FluidStack itemStack) {
110
            super(ValueTypes.OBJECT_FLUIDSTACK);
3✔
111
            this.fluidStack = Objects.requireNonNull(itemStack, "Attempted to create a ValueFluidStack for a null FluidStack.");
6✔
112
        }
1✔
113

114
        public static ValueFluidStack of(FluidStack itemStack) {
115
            return new ValueFluidStack(itemStack);
5✔
116
        }
117

118
        public FluidStack getRawValue() {
119
            return fluidStack;
3✔
120
        }
121

122
        @Override
123
        public boolean equals(Object o) {
124
            return o instanceof ValueFluidStack && FluidStack.matches(this.getRawValue(), ((ValueFluidStack) o).getRawValue());
14!
125
        }
126

127
        @Override
128
        public int hashCode() {
129
            return fluidStack.hashCode();
×
130
        }
131

132
    }
133

134
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc