• 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

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.core.Direction;
8
import net.minecraft.nbt.CompoundTag;
9
import net.minecraft.network.chat.Component;
10
import net.minecraft.network.chat.MutableComponent;
11
import net.minecraft.resources.ResourceLocation;
12
import net.minecraft.util.ARGB;
13
import net.minecraft.world.entity.player.Inventory;
14
import org.cyclops.cyclopscore.client.gui.component.button.ButtonText;
15
import org.cyclops.cyclopscore.client.gui.component.input.WidgetNumberField;
16
import org.cyclops.cyclopscore.client.gui.container.ContainerScreenExtended;
17
import org.cyclops.cyclopscore.helper.IModHelpers;
18
import org.cyclops.cyclopscore.helper.ValueNotifierHelpers;
19
import org.cyclops.integrateddynamics.GeneralConfig;
20
import org.cyclops.integrateddynamics.Reference;
21
import org.cyclops.integrateddynamics.core.client.gui.IDropdownEntry;
22
import org.cyclops.integrateddynamics.core.client.gui.WidgetTextFieldDropdown;
23
import org.cyclops.integrateddynamics.core.inventory.container.ContainerPartSettings;
24
import org.lwjgl.glfw.GLFW;
25

26
import java.util.Arrays;
27
import java.util.Collections;
28
import java.util.List;
29
import java.util.Locale;
30
import java.util.stream.Collectors;
31

32
/**
33
 * Gui for part settings.
34
 * @author rubensworks
35
 */
36
public class ContainerScreenPartSettings<T extends ContainerPartSettings> extends ContainerScreenExtended<T> {
37

38
    private WidgetNumberField numberFieldUpdateInterval = null;
×
39
    private WidgetNumberField numberFieldPriority = null;
×
40
    private WidgetNumberField numberFieldChannel = null;
×
41
    private WidgetTextFieldDropdown<Direction> dropdownFieldSide = null;
×
42
    private List<SideDropdownEntry> dropdownEntries;
43

44
    public ContainerScreenPartSettings(T container, Inventory inventory, Component title) {
45
        super(container, inventory, title);
×
46
    }
×
47

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

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

75
    protected Direction getCurrentSide() {
76
        return getMenu().getTarget().getTarget().getSide();
×
77
    }
78

79
    protected Direction getDefaultSide() {
80
        return getMenu().getTarget().getCenter().getSide().getOpposite();
×
81
    }
82

83
    protected String getSideText(Direction side) {
84
        return side.getSerializedName().toLowerCase(Locale.ENGLISH);
×
85
    }
86

87
    @Override
88
    public void init() {
89
        super.init();
×
90

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

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

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

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

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

138
        this.refreshValues();
×
139
    }
×
140

141
    protected int getFieldSideY() {
142
        return 9;
×
143
    }
144

145
    protected int getFieldUpdateIntervalY() {
146
        return 34;
×
147
    }
148

149
    protected int getFieldPriorityY() {
150
        return 59;
×
151
    }
152

153
    protected int getFieldChannelY() {
154
        return 84;
×
155
    }
156

157
    protected boolean isFieldSideEnabled() {
158
        return true;
×
159
    }
160

161
    protected boolean isFieldUpdateIntervalEnabled() {
162
        return true;
×
163
    }
164

165
    protected boolean isFieldPriorityEnabled() {
166
        return true;
×
167
    }
168

169
    protected boolean isFieldChannelEnabled() {
170
        return true;
×
171
    }
172

173
    @Override
174
    public boolean charTyped(char typedChar, int keyCode) {
175
        if (!(isFieldUpdateIntervalEnabled() && this.numberFieldUpdateInterval.charTyped(typedChar, keyCode))
×
176
                && !(isFieldPriorityEnabled() && this.numberFieldPriority.charTyped(typedChar, keyCode))
×
177
                && !(isFieldChannelEnabled() && this.numberFieldChannel.charTyped(typedChar, keyCode))
×
178
                && !(isFieldSideEnabled() && this.dropdownFieldSide.charTyped(typedChar, keyCode))) {
×
179
            return super.charTyped(typedChar, keyCode);
×
180
        }
181
        return true;
×
182
    }
183

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

213
    @Override
214
    public boolean mouseClicked(double mouseX, double mouseY, int mouseButton) {
215
        if (isFieldSideEnabled()) {
×
216
            if (this.dropdownFieldSide.mouseClicked(mouseX, mouseY, mouseButton)) {
×
217
                return true;
×
218
            }
219
        }
220
        if (isFieldUpdateIntervalEnabled()) {
×
221
            if (this.numberFieldUpdateInterval.mouseClicked(mouseX, mouseY, mouseButton)) {
×
222
                return true;
×
223
            }
224
        }
225
        if (isFieldPriorityEnabled()) {
×
226
            if (this.numberFieldPriority.mouseClicked(mouseX, mouseY, mouseButton)) {
×
227
                return true;
×
228
            }
229
        }
230
        if (isFieldChannelEnabled()) {
×
231
            if (this.numberFieldChannel.mouseClicked(mouseX, mouseY, mouseButton)) {
×
232
                return true;
×
233
            }
234
        }
235
        return super.mouseClicked(mouseX, mouseY, mouseButton);
×
236
    }
237

238
    @Override
239
    protected void renderBg(GuiGraphics guiGraphics, float partialTicks, int mouseX, int mouseY) {
240
        super.renderBg(guiGraphics, partialTicks, mouseX, mouseY);
×
241
        if (isFieldUpdateIntervalEnabled()) {
×
242
            guiGraphics.drawString(font, IModHelpers.get().getL10NHelpers().localize("gui.integrateddynamics.partsettings.update_interval"), leftPos + 8, topPos + getFieldUpdateIntervalY() + 3, ARGB.opaque(0), false);
×
243
            numberFieldUpdateInterval.render(guiGraphics, mouseX, mouseY, partialTicks);
×
244
        }
245
        if (isFieldPriorityEnabled()) {
×
246
            guiGraphics.drawString(font, IModHelpers.get().getL10NHelpers().localize("gui.integrateddynamics.partsettings.priority"), leftPos + 8, topPos + getFieldPriorityY() + 3, ARGB.opaque(0), false);
×
247
            numberFieldPriority.render(guiGraphics, mouseX, mouseY, partialTicks);
×
248
        }
249
        if (isFieldChannelEnabled()) {
×
250
            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);
×
251
            numberFieldChannel.render(guiGraphics, mouseX, mouseY, partialTicks);
×
252
        }
253
        if (isFieldSideEnabled()) {
×
254
            guiGraphics.drawString(font, IModHelpers.get().getL10NHelpers().localize("gui.integrateddynamics.partsettings.side"), leftPos + 8, topPos + getFieldSideY() + 3, ARGB.opaque(0), false);
×
255
            dropdownFieldSide.render(guiGraphics, mouseX, mouseY, partialTicks);
×
256
        }
257
    }
×
258

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

268
    protected boolean isChannelEnabled() {
269
        return GeneralConfig.energyConsumptionMultiplier > 0;
×
270
    }
271

272
    @Override
273
    protected int getBaseXSize() {
274
        return 214;
×
275
    }
276

277
    @Override
278
    protected int getBaseYSize() {
279
        return 191;
×
280
    }
281

282
    protected void setSideInDropdownField(Direction side) {
283
        dropdownFieldSide.selectPossibility(dropdownEntries.get(side.ordinal()));
×
284
    }
×
285

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

306
    public class SideDropdownEntry implements IDropdownEntry<Direction> {
307

308
        private final Direction side;
309

310
        public SideDropdownEntry(Direction side) {
×
311
            this.side = side;
×
312
        }
×
313

314
        @Override
315
        public String getMatchString() {
316
            return getSideText(side);
×
317
        }
318

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

327
        @Override
328
        public List<MutableComponent> getTooltip() {
329
            return Collections.emptyList();
×
330
        }
331

332
        @Override
333
        public Direction getValue() {
334
            return this.side;
×
335
        }
336
    }
337

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