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

CyclopsMC / IntegratedDynamics / 22186773560

19 Feb 2026 02:52PM UTC coverage: 52.603% (+0.2%) from 52.363%
22186773560

push

github

web-flow
Remove Lombok dependency (#1604)

2911 of 8664 branches covered (33.6%)

Branch coverage included in aggregate %.

17683 of 30486 relevant lines covered (58.0%)

3.01 hits per line

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

22.39
/src/main/java/org/cyclops/integrateddynamics/core/evaluate/variable/ValueObjectTypeItemStack.java
1
package org.cyclops.integrateddynamics.core.evaluate.variable;
2

3
import net.minecraft.advancements.criterion.ItemPredicate;
4
import net.minecraft.core.registries.BuiltInRegistries;
5
import net.minecraft.network.chat.Component;
6
import net.minecraft.network.chat.MutableComponent;
7
import net.minecraft.world.item.ItemStack;
8
import net.minecraft.world.level.storage.ValueInput;
9
import net.minecraft.world.level.storage.ValueOutput;
10
import org.cyclops.commoncapabilities.api.capability.itemhandler.ItemMatch;
11
import org.cyclops.cyclopscore.helper.IModHelpers;
12
import org.cyclops.integrateddynamics.api.advancement.criterion.ValuePredicate;
13
import org.cyclops.integrateddynamics.api.evaluate.EvaluationException;
14
import org.cyclops.integrateddynamics.api.evaluate.variable.IValueTypeNamed;
15
import org.cyclops.integrateddynamics.api.evaluate.variable.IValueTypeNullable;
16
import org.cyclops.integrateddynamics.api.evaluate.variable.IValueTypeUniquelyNamed;
17
import org.cyclops.integrateddynamics.core.logicprogrammer.ValueTypeItemStackLPElement;
18
import org.cyclops.integrateddynamics.core.logicprogrammer.ValueTypeLPElementBase;
19

20
import java.util.Objects;
21
import java.util.Optional;
22

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

32
    public ValueObjectTypeItemStack() {
33
        super("itemstack", ValueObjectTypeItemStack.ValueItemStack.class);
4✔
34
    }
1✔
35

36
    public static MutableComponent getItemStackDisplayNameUsSafe(ItemStack itemStack) throws NoSuchMethodException {
37
        return !itemStack.isEmpty()
×
38
                ? (itemStack.getHoverName().copy().append((itemStack.getCount() > 1 ? " (" + itemStack.getCount() + ")" : "")))
×
39
                : Component.literal("");
×
40
    }
41

42
    public static MutableComponent getItemStackDisplayNameSafe(ItemStack itemStack) {
43
        // Certain mods may call client-side only methods,
44
        // so call a server-side-safe fallback method if that fails.
45
        try {
46
            return getItemStackDisplayNameUsSafe(itemStack);
×
47
        } catch (NoSuchMethodException e) {
×
48
            return Component.translatable(itemStack.getItem().getDescriptionId());
×
49
        }
50
    }
51

52
    @Override
53
    public ValueItemStack getDefault() {
54
        return ValueItemStack.of(ItemStack.EMPTY);
×
55
    }
56

57
    @Override
58
    public MutableComponent toCompactString(ValueItemStack value) {
59
        return ValueObjectTypeItemStack.getItemStackDisplayNameSafe(value.getRawValue());
×
60
    }
61

62
    @Override
63
    public void serialize(ValueOutput valueOutput, ValueItemStack value) {
64
        valueOutput = valueOutput.child("v");
×
65
        ItemStack itemStack;
66
        itemStack = value.getRawValue();
×
67
        int count = itemStack.getCount();
×
68
        if (itemStack.getCount() > 99) {
×
69
            itemStack = itemStack.copy();
×
70
            itemStack.setCount(99);
×
71
        }
72
        if (count > 99) {
×
73
            valueOutput.putInt("ExtendedCount", count);
×
74
        }
75
        valueOutput.store("stack", ItemStack.OPTIONAL_CODEC, itemStack);
×
76
    }
×
77

78
    @Override
79
    public ValueItemStack deserialize(ValueInput valueInput) {
80
        valueInput = valueInput.child("v").orElseThrow();
×
81
        ItemStack itemStack = valueInput.read("stack", ItemStack.OPTIONAL_CODEC).orElseThrow();
×
82
        valueInput.getInt("ExtendedCount").ifPresent(itemStack::setCount);
×
83
        return ValueItemStack.of(itemStack);
×
84
    }
85

86
    @Override
87
    public String getName(ValueItemStack a) {
88
        return toCompactString(a).getString();
×
89
    }
90

91
    @Override
92
    public boolean isNull(ValueItemStack a) {
93
        return a.getRawValue().isEmpty();
×
94
    }
95

96
    @Override
97
    public ValueTypeLPElementBase createLogicProgrammerElement() {
98
        return new ValueTypeItemStackLPElement<>(this, new ValueTypeItemStackLPElement.IItemStackToValue<ValueObjectTypeItemStack.ValueItemStack>() {
×
99
            @Override
100
            public boolean isNullable() {
101
                return true;
×
102
            }
103

104
            @Override
105
            public Component validate(ItemStack itemStack) {
106
                return null;
×
107
            }
108

109
            @Override
110
            public ValueObjectTypeItemStack.ValueItemStack getValue(ItemStack itemStack) {
111
                return ValueObjectTypeItemStack.ValueItemStack.of(itemStack);
×
112
            }
113

114
            @Override
115
            public ItemStack getValueAsItemStack(ValueItemStack value) {
116
                return value.getRawValue();
×
117
            }
118
        });
119
    }
120

121
    @Override
122
    public ValueItemStack materialize(ValueItemStack value) throws EvaluationException {
123
        return ValueItemStack.of(value.getRawValue().copy());
×
124
    }
125

126
    @Override
127
    public String getUniqueName(ValueItemStack value) {
128
        ItemStack itemStack = value.getRawValue();
×
129
        return !itemStack.isEmpty() ? BuiltInRegistries.ITEM.getKey(itemStack.getItem()).toString() : "";
×
130
    }
131

132
    public static class ValueItemStack extends ValueBase {
133

134
        private final ItemStack itemStack;
135

136
        private ValueItemStack(ItemStack itemStack) {
137
            super(ValueTypes.OBJECT_ITEMSTACK);
3✔
138
            this.itemStack = Objects.requireNonNull(itemStack, "Attempted to create a ValueItemStack for a null ItemStack.");
6✔
139
        }
1✔
140

141
        public static ValueItemStack of(ItemStack itemStack) {
142
            return new ValueItemStack(itemStack);
5✔
143
        }
144

145
        public ItemStack getRawValue() {
146
            return itemStack;
3✔
147
        }
148

149
        @Override
150
        public boolean equals(Object o) {
151
            return o instanceof ValueItemStack && ItemMatch.areItemStacksEqual(((ValueItemStack) o).itemStack, this.itemStack, ItemMatch.EXACT);
15!
152
        }
153

154
        @Override
155
        public int hashCode() {
156
            return 37 + IModHelpers.get().getItemStackHelpers().getItemStackHashCode(itemStack);
×
157
        }
158

159
        @Override
160
        public String toString() {
161
            return "ValueItemStack(itemStack=" + this.itemStack + ")";
5✔
162
        }
163
    }
164

165
    public static class ValueItemStackPredicate extends ValuePredicate<ValueItemStack> {
166

167
        private final Optional<ItemPredicate> itemPredicate;
168

169
        public ValueItemStackPredicate(Optional<ItemPredicate> itemPredicate) {
170
            super(Optional.of(ValueTypes.OBJECT_ITEMSTACK), Optional.empty(), Optional.empty());
6✔
171
            this.itemPredicate = itemPredicate;
3✔
172
        }
1✔
173

174
        public Optional<ItemPredicate> getItemPredicate() {
175
            return itemPredicate;
×
176
        }
177

178
        @Override
179
        protected boolean testTyped(ValueItemStack value) {
180
            return super.testTyped(value) && (itemPredicate.isEmpty() || itemPredicate.get().test(value.getRawValue()));
×
181
        }
182
    }
183

184
}
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