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

CyclopsMC / IntegratedDynamics / 15366166327

31 May 2025 05:58PM UTC coverage: 44.766% (-0.5%) from 45.303%
15366166327

push

github

rubensworks
Bump mod version

2565 of 8515 branches covered (30.12%)

Branch coverage included in aggregate %.

11734 of 23427 relevant lines covered (50.09%)

2.38 hits per line

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

0.0
/src/main/java/org/cyclops/integrateddynamics/core/logicprogrammer/ValueTypeOperatorLPElement.java
1
package org.cyclops.integrateddynamics.core.logicprogrammer;
2

3
import com.google.common.collect.Sets;
4
import lombok.Setter;
5
import net.minecraft.client.gui.Font;
6
import net.minecraft.client.gui.GuiGraphics;
7
import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
8
import net.minecraft.client.renderer.texture.TextureManager;
9
import net.minecraft.network.chat.Component;
10
import net.minecraft.network.chat.MutableComponent;
11
import net.minecraft.world.inventory.AbstractContainerMenu;
12
import net.neoforged.api.distmarker.Dist;
13
import net.neoforged.api.distmarker.OnlyIn;
14
import org.cyclops.cyclopscore.helper.Helpers;
15
import org.cyclops.cyclopscore.helper.MinecraftHelpers;
16
import org.cyclops.integrateddynamics.IntegratedDynamics;
17
import org.cyclops.integrateddynamics.api.client.gui.subgui.ISubGuiBox;
18
import org.cyclops.integrateddynamics.api.evaluate.operator.IOperator;
19
import org.cyclops.integrateddynamics.api.evaluate.variable.IValue;
20
import org.cyclops.integrateddynamics.api.evaluate.variable.ValueDeseralizationContext;
21
import org.cyclops.integrateddynamics.api.logicprogrammer.IConfigRenderPattern;
22
import org.cyclops.integrateddynamics.api.logicprogrammer.ILogicProgrammerElementType;
23
import org.cyclops.integrateddynamics.client.gui.container.ContainerScreenLogicProgrammerBase;
24
import org.cyclops.integrateddynamics.core.client.gui.IDropdownEntry;
25
import org.cyclops.integrateddynamics.core.client.gui.IDropdownEntryListener;
26
import org.cyclops.integrateddynamics.core.evaluate.operator.Operators;
27
import org.cyclops.integrateddynamics.core.evaluate.variable.ValueTypeOperator;
28
import org.cyclops.integrateddynamics.core.evaluate.variable.ValueTypes;
29
import org.cyclops.integrateddynamics.core.evaluate.variable.gui.GuiElementValueTypeDropdownList;
30
import org.cyclops.integrateddynamics.core.evaluate.variable.gui.GuiElementValueTypeDropdownListRenderPattern;
31
import org.cyclops.integrateddynamics.core.helper.L10NValues;
32
import org.cyclops.integrateddynamics.inventory.container.ContainerLogicProgrammerBase;
33
import org.cyclops.integrateddynamics.network.packet.LogicProgrammerValueTypeOperatorValueChangedPacket;
34

35
import java.util.List;
36
import java.util.Set;
37

38
/**
39
 * Element for the operator value type.
40
 * @author rubensworks
41
 */
42
public class ValueTypeOperatorLPElement extends ValueTypeLPElementBase implements IDropdownEntryListener {
43

44
    @Setter
×
45
    private IOperator selectedOperator = null;
46
    private GuiElementValueTypeDropdownList<IOperator, ContainerScreenLogicProgrammerBase, ContainerLogicProgrammerBase> innerGuiElement;
47

48
    public ValueTypeOperatorLPElement() {
49
        super(ValueTypes.OPERATOR);
×
50
        Set<IDropdownEntry<IOperator>> operatorEntries = Sets.newLinkedHashSet();
×
51
        for (IOperator operator : Operators.REGISTRY.getOperators()) {
×
52
            operatorEntries.add(new OperatorDropdownEntry(operator));
×
53
        }
×
54
        this.innerGuiElement = new GuiElementValueTypeDropdownList<>(getValueType(), getRenderPattern());
×
55
        getInnerGuiElement().setDropdownPossibilities(operatorEntries);
×
56
        getInnerGuiElement().setDropdownEntryListener(this);
×
57
    }
×
58

59
    @Override
60
    public GuiElementValueTypeDropdownList<IOperator, ContainerScreenLogicProgrammerBase, ContainerLogicProgrammerBase> getInnerGuiElement() {
61
        return innerGuiElement;
×
62
    }
63

64
    @Override
65
    public ILogicProgrammerElementType getType() {
66
        return LogicProgrammerElementTypes.VALUETYPE;
×
67
    }
68

69
    @Override
70
    public Component validate() {
71
        if (selectedOperator == null) {
×
72
            return Component.translatable(L10NValues.VALUETYPE_ERROR_INVALIDINPUT, getInnerGuiElement().getInputString());
×
73
        }
74
        return null;
×
75
    }
76

77
    @Override
78
    public IConfigRenderPattern getRenderPattern() {
79
        return IConfigRenderPattern.NONE_CANVAS;
×
80
    }
81

82
    @Override
83
    public boolean canWriteElementPre() {
84
        return selectedOperator != null;
×
85
    }
86

87
    @Override
88
    public IValue getValue() {
89
        return ValueTypeOperator.ValueOperator.of(selectedOperator);
×
90
    }
91

92
    @Override
93
    public void setValue(IValue value) {
94
        this.selectedOperator = ((ValueTypeOperator.ValueOperator) value).getRawValue();
×
95
    }
×
96

97
    @Override
98
    @OnlyIn(Dist.CLIENT)
99
    public void setValueInGui(ISubGuiBox subGui) {
100
        if (this.selectedOperator != null) {
×
101
            ((GuiElementValueTypeDropdownListRenderPattern) subGui).getSearchField().setValue(this.selectedOperator.getLocalizedNameFull().getString());
×
102
            ((GuiElementValueTypeDropdownListRenderPattern) subGui).onTyped();
×
103
            ((GuiElementValueTypeDropdownListRenderPattern) subGui).getSearchField().refreshDropdownList();
×
104
        }
105
    }
×
106

107
    @Override
108
    public void activate() {
109

110
    }
×
111

112
    @Override
113
    public void onSetDropdownPossiblity(IDropdownEntry dropdownEntry) {
114
        OperatorDropdownEntry operatorDropdownEntry = (OperatorDropdownEntry) dropdownEntry;
×
115
        selectedOperator = operatorDropdownEntry == null ? null : operatorDropdownEntry.getValue();
×
116
        if (MinecraftHelpers.isClientSideThread()) {
×
117
            IntegratedDynamics._instance.getPacketHandler().sendToServer(
×
118
                    new LogicProgrammerValueTypeOperatorValueChangedPacket(ValueDeseralizationContext.ofClient(),
×
119
                            ValueTypeOperator.ValueOperator.of(selectedOperator)));
×
120
        }
121
    }
×
122

123
    @Override
124
    @OnlyIn(Dist.CLIENT)
125
    public ISubGuiBox createSubGui(int baseX, int baseY, int maxWidth, int maxHeight, ContainerScreenLogicProgrammerBase gui, ContainerLogicProgrammerBase container) {
126
        return new RenderPatternOperator(this, baseX, baseY, maxWidth, maxHeight, gui, container);
×
127
    }
128

129
    public static class RenderPatternOperator<S extends ISubGuiBox, G extends AbstractContainerScreen, C extends AbstractContainerMenu> extends ValueTypeOperatorLPElementRenderPattern {
130

131
        private final ValueTypeOperatorLPElement element;
132

133
        public RenderPatternOperator(ValueTypeOperatorLPElement element, int baseX, int baseY, int maxWidth, int maxHeight, ContainerScreenLogicProgrammerBase gui, ContainerLogicProgrammerBase container) {
134
            super(element, baseX, baseY, maxWidth, maxHeight, gui, container);
×
135
            this.element = element;
×
136
        }
×
137

138
        @Override
139
        public void renderBg(GuiGraphics guiGraphics, int guiLeft, int guiTop, TextureManager textureManager, Font fontRenderer, float partialTicks, int mouseX, int mouseY) {
140
            super.renderBg(guiGraphics, guiLeft, guiTop, textureManager, fontRenderer, partialTicks, mouseX, mouseY);
×
141
            IOperator operator = element.selectedOperator;
×
142
            if (operator != null) {
×
143
                int offsetY = 0;
×
144
                for (Component line : ValueTypeOperator.getSignatureLines(operator, true)) {
×
145
                    fontRenderer.drawInBatch(line, getX() + guiLeft + 10, getY() + guiTop + 25 + offsetY, Helpers.RGBToInt(10, 10, 10), false,
×
146
                            guiGraphics.pose().last().pose(), guiGraphics.bufferSource(), Font.DisplayMode.NORMAL, 0, 15728880);
×
147
                    offsetY += fontRenderer.lineHeight;
×
148
                }
×
149
            }
150
        }
×
151
    }
152

153
    public static class OperatorDropdownEntry implements IDropdownEntry<IOperator> {
154

155
        private final IOperator operator;
156

157
        public OperatorDropdownEntry(IOperator operator) {
×
158
            this.operator = operator;
×
159
        }
×
160

161
        @Override
162
        public String getMatchString() {
163
            return operator.getLocalizedNameFull().getString();
×
164
        }
165

166
        @Override
167
        public MutableComponent getDisplayString() {
168
            return Component.literal(getMatchString());
×
169
        }
170

171
        @Override
172
        public List<MutableComponent> getTooltip() {
173
            return ValueTypeOperator.getSignatureLines(operator, true);
×
174
        }
175

176
        @Override
177
        public IOperator getValue() {
178
            return operator;
×
179
        }
180
    }
181

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