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

CyclopsMC / IntegratedDynamics / 18427741591

11 Oct 2025 09:40AM UTC coverage: 53.024% (+0.001%) from 53.023%
18427741591

push

github

rubensworks
Merge remote-tracking branch 'origin/master-1.21-lts' into master-1.21

2869 of 8770 branches covered (32.71%)

Branch coverage included in aggregate %.

17332 of 29328 relevant lines covered (59.1%)

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

3
import com.google.common.collect.Lists;
4
import net.minecraft.ChatFormatting;
5
import net.minecraft.client.gui.GuiGraphics;
6
import net.minecraft.nbt.CompoundTag;
7
import net.minecraft.network.chat.Component;
8
import net.minecraft.network.chat.MutableComponent;
9
import net.minecraft.resources.ResourceLocation;
10
import net.minecraft.util.ARGB;
11
import net.minecraft.world.entity.player.Inventory;
12
import org.cyclops.cyclopscore.client.gui.component.button.ButtonText;
13
import org.cyclops.cyclopscore.client.gui.component.input.WidgetNumberField;
14
import org.cyclops.cyclopscore.client.gui.container.ContainerScreenExtended;
15
import org.cyclops.cyclopscore.client.gui.image.IImage;
16
import org.cyclops.cyclopscore.client.gui.image.Images;
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.inventory.container.ContainerPartOffset;
22
import org.lwjgl.glfw.GLFW;
23

24
import java.util.Collections;
25
import java.util.List;
26
import java.util.Optional;
27

28
/**
29
 * Gui for part offsets.
30
 * @author rubensworks
31
 */
32
public class ContainerScreenPartOffset<T extends ContainerPartOffset> extends ContainerScreenExtended<T> {
33

34
    private WidgetNumberField numberFieldX = null;
×
35
    private WidgetNumberField numberFieldY = null;
×
36
    private WidgetNumberField numberFieldZ = null;
×
37

38
    public ContainerScreenPartOffset(T container, Inventory inventory, Component title) {
39
        super(container, inventory, title);
×
40
    }
×
41

42
    protected void onSave() {
43
        try {
44
            ValueNotifierHelpers.setValue(getMenu(), getMenu().getLastXValueId(), numberFieldX.getInt());
×
45
            ValueNotifierHelpers.setValue(getMenu(), getMenu().getLastYValueId(), numberFieldY.getInt());
×
46
            ValueNotifierHelpers.setValue(getMenu(), getMenu().getLastZValueId(), numberFieldZ.getInt());
×
47
        } catch (NumberFormatException e) { }
×
48
    }
×
49

50
    @Override
51
    protected ResourceLocation constructGuiTexture() {
52
        return ResourceLocation.fromNamespaceAndPath(Reference.MOD_ID, "textures/gui/part_offsets.png");
×
53
    }
54

55
    @Override
56
    public void init() {
57
        super.init();
×
58

59
        numberFieldX = new WidgetNumberField(font, leftPos + 107 - 54 - 7 - 18, topPos + 33, 46, 14, true,
×
60
                Component.translatable("gui.integrateddynamics.partsettings.partoffset.x"), true);
×
61
        numberFieldX.setMaxLength(4);
×
62
        numberFieldX.setMaxValue(GeneralConfig.maxPartOffset);
×
63
        numberFieldX.setMinValue(-GeneralConfig.maxPartOffset);
×
64
        numberFieldX.setVisible(true);
×
65
        numberFieldX.setTextColor(ARGB.opaque(16777215));
×
66
        numberFieldX.setCanLoseFocus(true);
×
67

68
        numberFieldY = new WidgetNumberField(font, leftPos + 107 - 54 + 36 - 7, topPos + 33, 46, 14, true,
×
69
                Component.translatable("gui.integrateddynamics.partsettings.partoffset.x"), true);
×
70
        numberFieldY.setMaxLength(4);
×
71
        numberFieldY.setMaxValue(GeneralConfig.maxPartOffset);
×
72
        numberFieldY.setMinValue(-GeneralConfig.maxPartOffset);
×
73
        numberFieldY.setVisible(true);
×
74
        numberFieldY.setTextColor(ARGB.opaque(16777215));
×
75
        numberFieldY.setCanLoseFocus(true);
×
76

77
        numberFieldZ = new WidgetNumberField(font, leftPos + 107 - 54 + 72 - 7 + 18, topPos + 33, 46, 14, true,
×
78
                Component.translatable("gui.integrateddynamics.partsettings.partoffset.x"), true);
×
79
        numberFieldZ.setMaxLength(4);
×
80
        numberFieldZ.setMaxValue(GeneralConfig.maxPartOffset);
×
81
        numberFieldZ.setMinValue(-GeneralConfig.maxPartOffset);
×
82
        numberFieldZ.setVisible(true);
×
83
        numberFieldZ.setTextColor(ARGB.opaque(16777215));
×
84
        numberFieldZ.setCanLoseFocus(true);
×
85

86
        MutableComponent save = Component.translatable("gui.integrateddynamics.button.save");
×
87
        addRenderableWidget(new ButtonText(this.leftPos + 178, this.topPos + 6, font.width(save.getVisualOrderText()) + 6, 16, save, save,
×
88
                createServerPressable(ContainerPartOffset.BUTTON_SAVE, b -> onSave()), true));
×
89

90
        this.refreshValues();
×
91
    }
×
92

93
    @Override
94
    public boolean charTyped(char typedChar, int keyCode) {
95
        if (!this.numberFieldX.charTyped(typedChar, keyCode)
×
96
                && !this.numberFieldY.charTyped(typedChar, keyCode)
×
97
                && !this.numberFieldZ.charTyped(typedChar, keyCode)) {
×
98
            onSave();
×
99
            return super.charTyped(typedChar, keyCode);
×
100
        }
101
        return true;
×
102
    }
103

104
    @Override
105
    public boolean keyPressed(int typedChar, int keyCode, int modifiers) {
106
        if (typedChar != GLFW.GLFW_KEY_ESCAPE) {
×
107
            if (this.numberFieldX.keyPressed(typedChar, keyCode, modifiers)
×
108
                    || this.numberFieldY.keyPressed(typedChar, keyCode, modifiers)
×
109
                    || this.numberFieldZ.keyPressed(typedChar, keyCode, modifiers)) {
×
110
                onSave();
×
111
                return true;
×
112
            }
113
            return true;
×
114
        } else {
115
            return super.keyPressed(typedChar, keyCode, modifiers);
×
116
        }
117
    }
118

119
    @Override
120
    public boolean mouseClicked(double mouseX, double mouseY, int mouseButton) {
121
        if (this.numberFieldX.mouseClicked(mouseX, mouseY, mouseButton)
×
122
                || this.numberFieldY.mouseClicked(mouseX, mouseY, mouseButton)
×
123
                || this.numberFieldZ.mouseClicked(mouseX, mouseY, mouseButton)) {
×
124
            onSave();
×
125
            return true;
×
126
        }
127
        return super.mouseClicked(mouseX, mouseY, mouseButton);
×
128
    }
129

130
    @Override
131
    protected void renderBg(GuiGraphics guiGraphics, float partialTicks, int mouseX, int mouseY) {
132
        super.renderBg(guiGraphics, partialTicks, mouseX, mouseY);
×
133

134
        guiGraphics.drawString(font, Component.translatable("gui.integrateddynamics.part_offsets"), this.titleLabelX, this.titleLabelY, ARGB.opaque(4210752), false);
×
135

136
        guiGraphics.drawString(font, "X", leftPos + 45 + 5, topPos + 19, ARGB.opaque(0), false);
×
137
        guiGraphics.drawString(font, "Y", leftPos + 99 + 5, topPos + 19, ARGB.opaque(0), false);
×
138
        guiGraphics.drawString(font, "Z", leftPos + 153 + 5, topPos + 19, ARGB.opaque(0), false);
×
139

140
        numberFieldX.render(guiGraphics, mouseX, mouseY, partialTicks);
×
141
        numberFieldY.render(guiGraphics, mouseX, mouseY, partialTicks);
×
142
        numberFieldZ.render(guiGraphics, mouseX, mouseY, partialTicks);
×
143

144
        for (int i = 0; i < 3; i++) {
×
145
            int x = leftPos + 64 + i * 54;
×
146
            if (getMenu().isOffsetVariableFilled(i)) {
×
147
                IImage image = container.getOffsetVariableError(i) == null ? Images.OK : Images.ERROR;
×
148
                image.draw(guiGraphics, x, topPos + 52);
×
149
            }
150
        }
151

152
        if (getMenu().getMaxOffset() == 0) {
×
153
            Images.ERROR.draw(guiGraphics, leftPos + 74, topPos + 3);
×
154
        }
155
    }
×
156

157
    @Override
158
    protected void renderLabels(GuiGraphics guiGraphics, int mouseX, int mouseY) {
159
        if (isHovering(0, 0, 90, 18, mouseX, mouseY)) {
×
160
            List<Component> lines = Lists.newArrayList(
×
161
                    Component.translatable("gui.integrateddynamics.partoffset.offsets"),
×
162
                    Component.translatable("gui.integrateddynamics.partoffset.offsets.max", getMenu().getMaxOffset())
×
163
                            .withStyle(ChatFormatting.GRAY)
×
164
            );
165
            if (getMenu().getMaxOffset() == 0) {
×
166
                lines.add(Component.translatable("gui.integrateddynamics.partoffset.offsets.max.howtoincrease", getMenu().getMaxOffset())
×
167
                        .withStyle(ChatFormatting.RED));
×
168
            }
169
            drawTooltip(lines, guiGraphics, mouseX, mouseY);
×
170
        }
171

172
        for (int i = 0; i < 3; i++) {
×
173
            int x = 64 + i * 54;
×
174
            int slot = i;
×
175
            IModHelpers.get().getGuiHelpers().renderTooltipOptional(this, guiGraphics, x, 52, 14, 13, mouseX, mouseY,
×
176
                    () -> {
177
                        Component unlocalizedMessage = container.getOffsetVariableError(slot);
×
178
                        if (unlocalizedMessage != null) {
×
179
                            return Optional.of(Collections.singletonList(unlocalizedMessage));
×
180
                        }
181
                        return Optional.empty();
×
182
                    });
183
        }
184
    }
×
185

186
    @Override
187
    protected int getBaseXSize() {
188
        return 214;
×
189
    }
190

191
    @Override
192
    protected int getBaseYSize() {
193
        return 155;
×
194
    }
195

196
    @Override
197
    public void onUpdate(int valueId, CompoundTag value) {
198
        if (valueId == getMenu().getLastXValueId()) {
×
199
            numberFieldX.setValue(Integer.toString(getMenu().getLastXValue()));
×
200
        }
201
        if (valueId == getMenu().getLastYValueId()) {
×
202
            numberFieldY.setValue(Integer.toString(getMenu().getLastYValue()));
×
203
        }
204
        if (valueId == getMenu().getLastZValueId()) {
×
205
            numberFieldZ.setValue(Integer.toString(getMenu().getLastZValue()));
×
206
        }
207

208
        numberFieldX.setEditable(!getMenu().isOffsetVariableFilled(0));
×
209
        numberFieldY.setEditable(!getMenu().isOffsetVariableFilled(1));
×
210
        numberFieldZ.setEditable(!getMenu().isOffsetVariableFilled(2));
×
211

212
        if (valueId == getMenu().getMaxOffsetId()) {
×
213
            int max = getMenu().getMaxOffset();
×
214
            numberFieldX.setMaxValue(max);
×
215
            numberFieldX.setMinValue(-max);
×
216
            numberFieldY.setMaxValue(max);
×
217
            numberFieldY.setMinValue(-max);
×
218
            numberFieldZ.setMaxValue(max);
×
219
            numberFieldZ.setMinValue(-max);
×
220
        }
221
    }
×
222

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