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

CyclopsMC / IntegratedDynamics / 16552051255

27 Jul 2025 01:58PM UTC coverage: 53.206% (+8.0%) from 45.161%
16552051255

push

github

rubensworks
Resolve minor TODOs

2888 of 8740 branches covered (33.04%)

Branch coverage included in aggregate %.

17341 of 29280 relevant lines covered (59.22%)

3.08 hits per line

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

12.79
/src/main/java/org/cyclops/integrateddynamics/core/evaluate/variable/ValueTypeOperator.java
1
package org.cyclops.integrateddynamics.core.evaluate.variable;
2

3
import com.google.common.collect.Lists;
4
import lombok.ToString;
5
import net.minecraft.ChatFormatting;
6
import net.minecraft.network.chat.Component;
7
import net.minecraft.network.chat.MutableComponent;
8
import net.minecraft.world.level.storage.ValueInput;
9
import net.minecraft.world.level.storage.ValueOutput;
10
import org.cyclops.cyclopscore.helper.IModHelpers;
11
import org.cyclops.integrateddynamics.api.advancement.criterion.ValuePredicate;
12
import org.cyclops.integrateddynamics.api.evaluate.EvaluationException;
13
import org.cyclops.integrateddynamics.api.evaluate.operator.IOperator;
14
import org.cyclops.integrateddynamics.api.evaluate.variable.IValueType;
15
import org.cyclops.integrateddynamics.api.evaluate.variable.IValueTypeNamed;
16
import org.cyclops.integrateddynamics.api.evaluate.variable.IValueTypeUniquelyNamed;
17
import org.cyclops.integrateddynamics.core.evaluate.operator.Operators;
18
import org.cyclops.integrateddynamics.core.helper.L10NValues;
19
import org.cyclops.integrateddynamics.core.logicprogrammer.ValueTypeLPElementBase;
20
import org.cyclops.integrateddynamics.core.logicprogrammer.ValueTypeOperatorLPElement;
21

22
import javax.annotation.Nullable;
23
import java.util.List;
24
import java.util.Optional;
25
import java.util.function.Consumer;
26

27
/**
28
 * Value type with operator values.
29
 * @author rubensworks
30
 */
31
public class ValueTypeOperator extends ValueTypeBase<ValueTypeOperator.ValueOperator> implements
32
        IValueTypeNamed<ValueTypeOperator.ValueOperator>, IValueTypeUniquelyNamed<ValueTypeOperator.ValueOperator> {
33

34
    private static final String SIGNATURE_LINK = "->";
35

36
    public ValueTypeOperator() {
37
        super("operator", IModHelpers.get().getBaseHelpers().RGBToInt(43, 231, 47), ChatFormatting.DARK_GREEN, ValueTypeOperator.ValueOperator.class);
11✔
38
    }
1✔
39

40
    @Override
41
    public ValueOperator getDefault() {
42
        return ValueOperator.of(Operators.GENERAL_IDENTITY);
×
43
    }
44

45
    @Override
46
    public MutableComponent toCompactString(ValueOperator value) {
47
        return value.getRawValue().getLocalizedNameFull();
×
48
    }
49

50
    @Override
51
    public void serialize(ValueOutput valueOutput, ValueOperator value) {
52
        Operators.REGISTRY.serialize(valueOutput.child("v"), value.getRawValue());
×
53
    }
×
54

55
    @Override
56
    public ValueOperator deserialize(ValueInput valueInput) {
57
        IOperator operator;
58
        try {
59
            operator = Operators.REGISTRY.deserialize(valueInput.child("v").orElseThrow());
×
60
        } catch (EvaluationException e) {
×
61
            throw new IllegalArgumentException(e.getMessage());
×
62
        }
×
63
        if (operator != null) {
×
64
            return ValueOperator.of(operator);
×
65
        }
66
        throw new IllegalArgumentException(String.format("Value \"%s\" could not be parsed to an operator.", valueInput));
×
67
    }
68

69
    @Override
70
    public void loadTooltip(Consumer<Component> tooltipAdder, boolean appendOptionalInfo, @Nullable ValueOperator value) {
71
        super.loadTooltip(tooltipAdder, appendOptionalInfo, value);
×
72
        if (value != null) {
×
73
            tooltipAdder.accept(Component.translatable(L10NValues.VALUETYPEOPERATOR_TOOLTIP_SIGNATURE)
×
74
                    .append(getSignature(value.getRawValue())));
×
75
        }
76
    }
×
77

78
    @Override
79
    public ValueTypeLPElementBase createLogicProgrammerElement() {
80
        return new ValueTypeOperatorLPElement();
×
81
    }
82

83
    @Override
84
    public ValueOperator materialize(ValueOperator value) throws EvaluationException {
85
        return ValueOperator.of(value.getRawValue().materialize());
×
86
    }
87

88
    /**
89
     * Pretty formatted signature of an operator.
90
     * @param operator The operator.
91
     * @return The signature.
92
     */
93
    public static MutableComponent getSignature(IOperator operator) {
94
        return getSignatureLines(operator, false)
×
95
                .stream()
×
96
                .reduce(Component.literal(""), (a, b) -> a.append(" ").append(b));
×
97
    }
98

99
    /**
100
     * Pretty formatted signature of an operator.
101
     * @param inputTypes The input types.
102
     * @param outputType The output types.
103
     * @return The signature.
104
     */
105
    public static Component getSignature(IValueType[] inputTypes, IValueType outputType) {
106
        return getSignatureLines(inputTypes, outputType, false)
×
107
                .stream()
×
108
                .reduce((prev, next) -> prev.append(" ").append(next))
×
109
                .orElseGet(() -> Component.literal(""));
×
110
    }
111

112
    protected static MutableComponent switchSignatureLineContext(List<MutableComponent> lines, MutableComponent sb) {
113
        lines.add(sb);
×
114
        return Component.literal("");
×
115
    }
116

117
    /**
118
     * Pretty formatted signature of an operator.
119
     * @param inputTypes The input types.
120
     * @param outputType The output types.
121
     * @param indent If the lines should be indented.
122
     * @return The signature.
123
     */
124
    public static List<MutableComponent> getSignatureLines(IValueType[] inputTypes, IValueType outputType, boolean indent) {
125
        List<MutableComponent> lines = Lists.newArrayList();
×
126
        MutableComponent sb = Component.literal("");
×
127
        boolean first = true;
×
128
        for (IValueType inputType : inputTypes) {
×
129
            if (first) {
×
130
                first = false;
×
131
            } else {
132
                sb = switchSignatureLineContext(lines, sb);
×
133
                sb.append((indent ? "  " : "") + SIGNATURE_LINK + " ");
×
134
            }
135
            sb = sb.append(Component.translatable(inputType.getTranslationKey())
×
136
                    .withStyle(inputType.getDisplayColorFormat()));
×
137
        }
138

139
        sb = switchSignatureLineContext(lines, sb);
×
140
        sb = sb.append((indent ? "  " : "") + SIGNATURE_LINK + " ")
×
141
                .append(Component.translatable(outputType.getTranslationKey())
×
142
                        .withStyle(outputType.getDisplayColorFormat()));
×
143
        switchSignatureLineContext(lines, sb);
×
144
        return lines;
×
145
    }
146

147
    /**
148
     * Pretty formatted signature of an operator.
149
     * @param operator The operator.
150
     * @param indent If the lines should be indented.
151
     * @return The signature.
152
     */
153
    public static List<MutableComponent> getSignatureLines(IOperator operator, boolean indent) {
154
        return getSignatureLines(operator.getInputTypes(), operator.getOutputType(), indent);
×
155
    }
156

157
    @Override
158
    public String getName(ValueTypeOperator.ValueOperator a) {
159
        return a.getRawValue().getLocalizedNameFull().getString();
×
160
    }
161

162
    @Override
163
    public String getUniqueName(ValueOperator a) {
164
        return a.getRawValue().getUniqueName().toString();
×
165
    }
166

167
    @ToString
×
168
    public static class ValueOperator extends ValueBase {
169

170
        private final IOperator value;
171

172
        private ValueOperator(IOperator value) {
173
            super(ValueTypes.OPERATOR);
3✔
174
            this.value = value;
3✔
175
        }
1✔
176

177
        public static ValueOperator of(IOperator value) {
178
            return new ValueOperator(value);
5✔
179
        }
180

181
        public IOperator getRawValue() {
182
            return value;
3✔
183
        }
184

185
        @Override
186
        public boolean equals(Object o) {
187
            return o == this || (o instanceof ValueOperator && value.equals(((ValueOperator) o).value));
16!
188
        }
189

190
        @Override
191
        public int hashCode() {
192
            return 37 + value.hashCode();
×
193
        }
194
    }
195

196
    public static class ValueOperatorPredicate extends ValuePredicate<ValueOperator> {
197

198
        private final Optional<IOperator> operator;
199

200
        public ValueOperatorPredicate(Optional<IOperator> operator) {
201
            super(Optional.of(ValueTypes.OPERATOR), Optional.empty(), Optional.empty());
×
202
            this.operator = operator;
×
203
        }
×
204

205
        public Optional<IOperator> getOperator() {
206
            return operator;
×
207
        }
208

209
        @Override
210
        protected boolean testTyped(ValueOperator value) {
211
            return super.testTyped(value)
×
212
                    && (operator.isEmpty() || (value.getRawValue() == operator.get()));
×
213
        }
214
    }
215

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