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

CyclopsMC / IntegratedDynamics / 20210191346

14 Dec 2025 03:32PM UTC coverage: 19.514% (-33.5%) from 53.061%
20210191346

push

github

rubensworks
Remove deprecations

663 of 8728 branches covered (7.6%)

Branch coverage included in aggregate %.

6786 of 29445 relevant lines covered (23.05%)

1.09 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/client/gui/container/ContainerScreenPartSettings.java
1
package org.cyclops.integrateddynamics.core.client.gui.container;
2

3
import com.google.common.collect.Lists;
4
import com.google.common.collect.Sets;
5
import net.minecraft.ChatFormatting;
6
import net.minecraft.client.gui.GuiGraphics;
7
import net.minecraft.client.input.CharacterEvent;
8
import net.minecraft.client.input.KeyEvent;
9
import net.minecraft.client.input.MouseButtonEvent;
10
import net.minecraft.core.Direction;
11
import net.minecraft.nbt.CompoundTag;
12
import net.minecraft.network.chat.Component;
13
import net.minecraft.network.chat.MutableComponent;
14
import net.minecraft.resources.ResourceLocation;
15
import net.minecraft.util.ARGB;
16
import net.minecraft.world.entity.player.Inventory;
17
import org.cyclops.cyclopscore.client.gui.component.button.ButtonText;
18
import org.cyclops.cyclopscore.client.gui.component.input.WidgetNumberField;
19
import org.cyclops.cyclopscore.client.gui.container.ContainerScreenExtended;
20
import org.cyclops.cyclopscore.helper.IModHelpers;
21
import org.cyclops.cyclopscore.helper.ValueNotifierHelpers;
22
import org.cyclops.integrateddynamics.GeneralConfig;
23
import org.cyclops.integrateddynamics.Reference;
24
import org.cyclops.integrateddynamics.core.client.gui.IDropdownEntry;
25
import org.cyclops.integrateddynamics.core.client.gui.WidgetTextFieldDropdown;
26
import org.cyclops.integrateddynamics.core.inventory.container.ContainerPartSettings;
27
import org.lwjgl.glfw.GLFW;
28

29
import java.util.Arrays;
30
import java.util.Collections;
31
import java.util.List;
32
import java.util.Locale;
33
import java.util.stream.Collectors;
34

35
/**
36
 * Gui for part settings.
37
 * @author rubensworks
38
 */
39
public class ContainerScreenPartSettings<T extends ContainerPartSettings> extends ContainerScreenExtended<T> {
40

41
    private WidgetNumberField numberFieldUpdateInterval = null;
×
42
    private WidgetNumberField numberFieldPriority = null;
×
43
    private WidgetNumberField numberFieldChannel = null;
×
44
    private WidgetTextFieldDropdown<Direction> dropdownFieldSide = null;
×
45
    private List<SideDropdownEntry> dropdownEntries;
46

47
    public ContainerScreenPartSettings(T container, Inventory inventory, Component title) {
48
        super(container, inventory, title);
×
49
    }
×
50

51
    protected void onSave() {
52
        try {
53
            if (isFieldSideEnabled()) {
×
54
                Direction selectedSide = dropdownFieldSide.getSelectedDropdownPossibility() == null ? null : dropdownFieldSide.getSelectedDropdownPossibility().getValue();
×
55
                int side = selectedSide != null && selectedSide != getDefaultSide() ? selectedSide.ordinal() : -1;
×
56
                ValueNotifierHelpers.setValue(getMenu(), getMenu().getLastSideValueId(), side);
×
57
            }
58
            if (isFieldUpdateIntervalEnabled()) {
×
59
                int updateInterval = numberFieldUpdateInterval.getInt();
×
60
                ValueNotifierHelpers.setValue(getMenu(), getMenu().getLastUpdateValueId(), updateInterval);
×
61
            }
62
            if (isFieldPriorityEnabled()) {
×
63
                int priority = numberFieldPriority.getInt();
×
64
                ValueNotifierHelpers.setValue(getMenu(), getMenu().getLastPriorityValueId(), priority);
×
65
            }
66
            if (isFieldChannelEnabled()) {
×
67
                int channel = numberFieldChannel.getInt();
×
68
                ValueNotifierHelpers.setValue(getMenu(), getMenu().getLastChannelValueId(), channel);
×
69
            }
70
        } catch (NumberFormatException e) { }
×
71
    }
×
72

73
    @Override
74
    protected ResourceLocation constructGuiTexture() {
75
        return ResourceLocation.fromNamespaceAndPath(Reference.MOD_ID, "textures/gui/part_settings.png");
×
76
    }
77

78
    protected Direction getCurrentSide() {
79
        return getMenu().getTarget().getTarget().getSide();
×
80
    }
81

82
    protected Direction getDefaultSide() {
83
        return getMenu().getTarget().getCenter().getSide().getOpposite();
×
84
    }
85

86
    protected String getSideText(Direction side) {
87
        return side.getSerializedName().toLowerCase(Locale.ENGLISH);
×
88
    }
89

90
    @Override
91
    public void init() {
92
        super.init();
×
93

94
        if (isFieldSideEnabled()) {
×
95
            dropdownEntries = Arrays.stream(Direction.values()).map(SideDropdownEntry::new).collect(Collectors.toList());
×
96
            dropdownFieldSide = new WidgetTextFieldDropdown(font, leftPos + 106, topPos + getFieldSideY(),
×
97
                    70, 14, Component.translatable("gui.integrateddynamics.partsettings.side"), true,
×
98
                    Sets.newHashSet(dropdownEntries));
×
99
            setSideInDropdownField(getCurrentSide());
×
100
            dropdownFieldSide.setMaxLength(15);
×
101
            dropdownFieldSide.setVisible(true);
×
102
            dropdownFieldSide.setTextColor(ARGB.opaque(16777215));
×
103
            dropdownFieldSide.setCanLoseFocus(true);
×
104
        }
105

106
        if (isFieldUpdateIntervalEnabled()) {
×
107
            numberFieldUpdateInterval = new WidgetNumberField(font, leftPos + 106, topPos + getFieldUpdateIntervalY(), 70, 14, true,
×
108
                    Component.translatable("gui.integrateddynamics.partsettings.update_interval"), true);
×
109
            numberFieldUpdateInterval.setMaxLength(15);
×
110
            numberFieldUpdateInterval.setVisible(true);
×
111
            numberFieldUpdateInterval.setTextColor(ARGB.opaque(16777215));
×
112
            numberFieldUpdateInterval.setCanLoseFocus(true);
×
113
            numberFieldUpdateInterval.setMinValue(container.getLastMinUpdateValue());
×
114
        }
115

116
        if (isFieldPriorityEnabled()) {
×
117
            numberFieldPriority = new WidgetNumberField(font, leftPos + 106, topPos + getFieldPriorityY(), 70, 14, true,
×
118
                    Component.translatable("gui.integrateddynamics.partsettings.priority"), true);
×
119
            numberFieldPriority.setPositiveOnly(false);
×
120
            numberFieldPriority.setMaxLength(15);
×
121
            numberFieldPriority.setVisible(true);
×
122
            numberFieldPriority.setTextColor(ARGB.opaque(16777215));
×
123
            numberFieldPriority.setCanLoseFocus(true);
×
124
        }
125

126
        if (isFieldChannelEnabled()) {
×
127
            numberFieldChannel = new WidgetNumberField(font, leftPos + 106, topPos + getFieldChannelY(), 70, 14, true,
×
128
                    Component.translatable("gui.integrateddynamics.partsettings.channel"), true);
×
129
            numberFieldChannel.setPositiveOnly(false);
×
130
            numberFieldChannel.setMaxLength(15);
×
131
            numberFieldChannel.setVisible(true);
×
132
            numberFieldChannel.setTextColor(ARGB.opaque(16777215));
×
133
            numberFieldChannel.setCanLoseFocus(true);
×
134
            numberFieldChannel.setEditable(isChannelEnabled());
×
135
        }
136

137
        MutableComponent save = Component.translatable("gui.integrateddynamics.button.save");
×
138
        addRenderableWidget(new ButtonText(this.leftPos + 178, this.topPos + 8, font.width(save.getVisualOrderText()) + 6, 16, save, save,
×
139
                createServerPressable(ContainerPartSettings.BUTTON_SAVE, b -> onSave()), true));
×
140

141
        this.refreshValues();
×
142
    }
×
143

144
    protected int getFieldSideY() {
145
        return 9;
×
146
    }
147

148
    protected int getFieldUpdateIntervalY() {
149
        return 34;
×
150
    }
151

152
    protected int getFieldPriorityY() {
153
        return 59;
×
154
    }
155

156
    protected int getFieldChannelY() {
157
        return 84;
×
158
    }
159

160
    protected boolean isFieldSideEnabled() {
161
        return true;
×
162
    }
163

164
    protected boolean isFieldUpdateIntervalEnabled() {
165
        return true;
×
166
    }
167

168
    protected boolean isFieldPriorityEnabled() {
169
        return true;
×
170
    }
171

172
    protected boolean isFieldChannelEnabled() {
173
        return true;
×
174
    }
175

176
    @Override
177
    public boolean charTyped(CharacterEvent evt) {
178
        if (!(isFieldUpdateIntervalEnabled() && this.numberFieldUpdateInterval.charTyped(evt))
×
179
                && !(isFieldPriorityEnabled() && this.numberFieldPriority.charTyped(evt))
×
180
                && !(isFieldChannelEnabled() && this.numberFieldChannel.charTyped(evt))
×
181
                && !(isFieldSideEnabled() && this.dropdownFieldSide.charTyped(evt))) {
×
182
            return super.charTyped(evt);
×
183
        }
184
        return true;
×
185
    }
186

187
    @Override
188
    public boolean keyPressed(KeyEvent evt) {
189
        if (evt.key() != GLFW.GLFW_KEY_ESCAPE) {
×
190
            if (isFieldSideEnabled()) {
×
191
                if (this.dropdownFieldSide.keyPressed(evt)) {
×
192
                    return true;
×
193
                }
194
            }
195
            if (isFieldUpdateIntervalEnabled()) {
×
196
                if (this.numberFieldUpdateInterval.keyPressed(evt)) {
×
197
                    return true;
×
198
                }
199
            }
200
            if (isFieldPriorityEnabled()) {
×
201
                if (this.numberFieldPriority.keyPressed(evt)) {
×
202
                    return true;
×
203
                }
204
            }
205
            if (isFieldChannelEnabled()) {
×
206
                if (this.numberFieldChannel.keyPressed(evt)) {
×
207
                    return true;
×
208
                }
209
            }
210
            return true;
×
211
        } else {
212
            return super.keyPressed(evt);
×
213
        }
214
    }
215

216
    @Override
217
    public boolean mouseClicked(MouseButtonEvent evt, boolean isDoubleClick) {
218
        if (isFieldSideEnabled()) {
×
219
            if (this.dropdownFieldSide.mouseClicked(evt, isDoubleClick)) {
×
220
                return true;
×
221
            }
222
        }
223
        if (isFieldUpdateIntervalEnabled()) {
×
224
            if (this.numberFieldUpdateInterval.mouseClicked(evt, isDoubleClick)) {
×
225
                return true;
×
226
            }
227
        }
228
        if (isFieldPriorityEnabled()) {
×
229
            if (this.numberFieldPriority.mouseClicked(evt, isDoubleClick)) {
×
230
                return true;
×
231
            }
232
        }
233
        if (isFieldChannelEnabled()) {
×
234
            if (this.numberFieldChannel.mouseClicked(evt, isDoubleClick)) {
×
235
                return true;
×
236
            }
237
        }
238
        return super.mouseClicked(evt, isDoubleClick);
×
239
    }
240

241
    @Override
242
    protected void renderBg(GuiGraphics guiGraphics, float partialTicks, int mouseX, int mouseY) {
243
        super.renderBg(guiGraphics, partialTicks, mouseX, mouseY);
×
244
        if (isFieldUpdateIntervalEnabled()) {
×
245
            guiGraphics.drawString(font, IModHelpers.get().getL10NHelpers().localize("gui.integrateddynamics.partsettings.update_interval"), leftPos + 8, topPos + getFieldUpdateIntervalY() + 3, ARGB.opaque(0), false);
×
246
            numberFieldUpdateInterval.render(guiGraphics, mouseX, mouseY, partialTicks);
×
247
        }
248
        if (isFieldPriorityEnabled()) {
×
249
            guiGraphics.drawString(font, IModHelpers.get().getL10NHelpers().localize("gui.integrateddynamics.partsettings.priority"), leftPos + 8, topPos + getFieldPriorityY() + 3, ARGB.opaque(0), false);
×
250
            numberFieldPriority.render(guiGraphics, mouseX, mouseY, partialTicks);
×
251
        }
252
        if (isFieldChannelEnabled()) {
×
253
            guiGraphics.drawString(font, IModHelpers.get().getL10NHelpers().localize("gui.integrateddynamics.partsettings.channel"), leftPos + 8, topPos + getFieldChannelY() + 3, isChannelEnabled() ? ARGB.opaque(0) : IModHelpers.get().getBaseHelpers().RGBAToInt(100, 100, 100, 255), false);
×
254
            numberFieldChannel.render(guiGraphics, mouseX, mouseY, partialTicks);
×
255
        }
256
        if (isFieldSideEnabled()) {
×
257
            guiGraphics.drawString(font, IModHelpers.get().getL10NHelpers().localize("gui.integrateddynamics.partsettings.side"), leftPos + 8, topPos + getFieldSideY() + 3, ARGB.opaque(0), false);
×
258
            dropdownFieldSide.render(guiGraphics, mouseX, mouseY, partialTicks);
×
259
        }
260
    }
×
261

262
    @Override
263
    protected void renderLabels(GuiGraphics guiGraphics, int mouseX, int mouseY) {
264
        // super.drawGuiContainerForegroundLayer(matrixStack, mouseX, mouseY);
265
        if (!isChannelEnabled()) {
×
266
            IModHelpers.get().getGuiHelpers().renderTooltip(this, guiGraphics, 8, 87, 100, 20, mouseX, mouseY,
×
267
                    () -> Lists.<Component>newArrayList(Component.translatable("gui.integrateddynamics.partsettings.channel.disabledinfo")));
×
268
        }
269
    }
×
270

271
    protected boolean isChannelEnabled() {
272
        return GeneralConfig.energyConsumptionMultiplier > 0;
×
273
    }
274

275
    @Override
276
    protected int getBaseXSize() {
277
        return 214;
×
278
    }
279

280
    @Override
281
    protected int getBaseYSize() {
282
        return 191;
×
283
    }
284

285
    protected void setSideInDropdownField(Direction side) {
286
        dropdownFieldSide.selectPossibility(dropdownEntries.get(side.ordinal()));
×
287
    }
×
288

289
    @Override
290
    public void onUpdate(int valueId, CompoundTag value) {
291
        if (isFieldSideEnabled() && valueId == getMenu().getLastSideValueId()) {
×
292
            int side = getMenu().getLastSideValue();
×
293
            setSideInDropdownField(side == -1 ? getDefaultSide() : Direction.values()[side]);
×
294
        }
295
        if (isFieldUpdateIntervalEnabled() && valueId == getMenu().getLastUpdateValueId()) {
×
296
            numberFieldUpdateInterval.setValue(Integer.toString(getMenu().getLastUpdateValue()));
×
297
        }
298
        if (isFieldUpdateIntervalEnabled() && valueId == getMenu().getLastMinUpdateValueId()) {
×
299
            numberFieldUpdateInterval.setMinValue(getMenu().getLastMinUpdateValue());
×
300
        }
301
        if (isFieldPriorityEnabled() && valueId == getMenu().getLastPriorityValueId()) {
×
302
            numberFieldPriority.setValue(Integer.toString(getMenu().getLastPriorityValue()));
×
303
        }
304
        if (isFieldChannelEnabled() && valueId == getMenu().getLastChannelValueId()) {
×
305
            numberFieldChannel.setValue(Integer.toString(getMenu().getLastChannelValue()));
×
306
        }
307
    }
×
308

309
    public class SideDropdownEntry implements IDropdownEntry<Direction> {
310

311
        private final Direction side;
312

313
        public SideDropdownEntry(Direction side) {
×
314
            this.side = side;
×
315
        }
×
316

317
        @Override
318
        public String getMatchString() {
319
            return getSideText(side);
×
320
        }
321

322
        @Override
323
        public MutableComponent getDisplayString() {
324
            if (getDefaultSide() == this.side) {
×
325
                return Component.literal(getMatchString()).withStyle(ChatFormatting.YELLOW);
×
326
            }
327
            return Component.literal(getMatchString());
×
328
        }
329

330
        @Override
331
        public List<MutableComponent> getTooltip() {
332
            return Collections.emptyList();
×
333
        }
334

335
        @Override
336
        public Direction getValue() {
337
            return this.side;
×
338
        }
339
    }
340

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