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

CyclopsMC / IntegratedDynamics / 18427727630

11 Oct 2025 09:39AM UTC coverage: 44.815% (-0.04%) from 44.856%
18427727630

push

github

rubensworks
Bump mod version

2579 of 8548 branches covered (30.17%)

Branch coverage included in aggregate %.

11774 of 23479 relevant lines covered (50.15%)

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

3
import com.google.common.collect.Lists;
4
import com.mojang.blaze3d.systems.RenderSystem;
5
import net.minecraft.ChatFormatting;
6
import net.minecraft.client.gui.Font;
7
import net.minecraft.client.gui.GuiGraphics;
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.world.entity.player.Inventory;
13
import org.cyclops.cyclopscore.client.gui.component.button.ButtonText;
14
import org.cyclops.cyclopscore.client.gui.component.input.WidgetNumberField;
15
import org.cyclops.cyclopscore.client.gui.container.ContainerScreenExtended;
16
import org.cyclops.cyclopscore.client.gui.image.IImage;
17
import org.cyclops.cyclopscore.client.gui.image.Images;
18
import org.cyclops.cyclopscore.helper.GuiHelpers;
19
import org.cyclops.cyclopscore.helper.Helpers;
20
import org.cyclops.cyclopscore.helper.ValueNotifierHelpers;
21
import org.cyclops.integrateddynamics.GeneralConfig;
22
import org.cyclops.integrateddynamics.Reference;
23
import org.cyclops.integrateddynamics.core.inventory.container.ContainerPartOffset;
24
import org.lwjgl.glfw.GLFW;
25

26
import java.util.Collections;
27
import java.util.List;
28
import java.util.Optional;
29

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

36
    private WidgetNumberField numberFieldX = null;
×
37
    private WidgetNumberField numberFieldY = null;
×
38
    private WidgetNumberField numberFieldZ = null;
×
39

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

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

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

57
    @Override
58
    public void init() {
59
        super.init();
×
60

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

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

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

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

92
        this.refreshValues();
×
93
    }
×
94

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

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

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

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

136
        font.drawInBatch(Component.translatable("gui.integrateddynamics.part_offsets"), leftPos + (float)this.titleLabelX, topPos + (float)this.titleLabelY, 4210752, false,
×
137
                guiGraphics.pose().last().pose(), guiGraphics.bufferSource(), Font.DisplayMode.NORMAL, 0, 15728880);
×
138

139
        font.drawInBatch("X", leftPos + 45 + 5, topPos + 19, Helpers.RGBToInt(0, 0, 0), false,
×
140
                guiGraphics.pose().last().pose(), guiGraphics.bufferSource(), Font.DisplayMode.NORMAL, 0, 15728880);
×
141
        font.drawInBatch("Y", leftPos + 99 + 5, topPos + 19, Helpers.RGBToInt(0, 0, 0), false,
×
142
                guiGraphics.pose().last().pose(), guiGraphics.bufferSource(), Font.DisplayMode.NORMAL, 0, 15728880);
×
143
        font.drawInBatch("Z", leftPos + 153 + 5, topPos + 19, Helpers.RGBToInt(0, 0, 0), false,
×
144
                guiGraphics.pose().last().pose(), guiGraphics.bufferSource(), Font.DisplayMode.NORMAL, 0, 15728880);
×
145
        numberFieldX.render(guiGraphics, mouseX, mouseY, partialTicks);
×
146
        numberFieldY.render(guiGraphics, mouseX, mouseY, partialTicks);
×
147
        numberFieldZ.render(guiGraphics, mouseX, mouseY, partialTicks);
×
148

149
        RenderSystem.setShaderColor(1, 1, 1, 1);
×
150
        for (int i = 0; i < 3; i++) {
×
151
            int x = leftPos + 64 + i * 54;
×
152
            if (getMenu().isOffsetVariableFilled(i)) {
×
153
                IImage image = container.getOffsetVariableError(i) == null ? Images.OK : Images.ERROR;
×
154
                image.draw(guiGraphics, x, topPos + 52);
×
155
            }
156
        }
157

158
        if (getMenu().getMaxOffset() == 0) {
×
159
            Images.ERROR.draw(guiGraphics, leftPos + 74, topPos + 3);
×
160
        }
161
    }
×
162

163
    @Override
164
    protected void renderLabels(GuiGraphics guiGraphics, int mouseX, int mouseY) {
165
        if (isHovering(0, 0, 90, 18, mouseX, mouseY)) {
×
166
            List<Component> lines = Lists.newArrayList(
×
167
                    Component.translatable("gui.integrateddynamics.partoffset.offsets"),
×
168
                    Component.translatable("gui.integrateddynamics.partoffset.offsets.max", getMenu().getMaxOffset())
×
169
                            .withStyle(ChatFormatting.GRAY)
×
170
            );
171
            if (getMenu().getMaxOffset() == 0) {
×
172
                lines.add(Component.translatable("gui.integrateddynamics.partoffset.offsets.max.howtoincrease", getMenu().getMaxOffset())
×
173
                        .withStyle(ChatFormatting.RED));
×
174
            }
175
            drawTooltip(lines, guiGraphics.pose(), mouseX - leftPos, mouseY - topPos);
×
176
        }
177

178
        for (int i = 0; i < 3; i++) {
×
179
            int x = 64 + i * 54;
×
180
            int slot = i;
×
181
            GuiHelpers.renderTooltipOptional(this, guiGraphics.pose(), x, 52, 14, 13, mouseX, mouseY,
×
182
                    () -> {
183
                        Component unlocalizedMessage = container.getOffsetVariableError(slot);
×
184
                        if (unlocalizedMessage != null) {
×
185
                            return Optional.of(Collections.singletonList(unlocalizedMessage));
×
186
                        }
187
                        return Optional.empty();
×
188
                    });
189
        }
190
    }
×
191

192
    @Override
193
    protected int getBaseXSize() {
194
        return 214;
×
195
    }
196

197
    @Override
198
    protected int getBaseYSize() {
199
        return 155;
×
200
    }
201

202
    @Override
203
    public void onUpdate(int valueId, CompoundTag value) {
204
        if (valueId == getMenu().getLastXValueId()) {
×
205
            numberFieldX.setValue(Integer.toString(getMenu().getLastXValue()));
×
206
        }
207
        if (valueId == getMenu().getLastYValueId()) {
×
208
            numberFieldY.setValue(Integer.toString(getMenu().getLastYValue()));
×
209
        }
210
        if (valueId == getMenu().getLastZValueId()) {
×
211
            numberFieldZ.setValue(Integer.toString(getMenu().getLastZValue()));
×
212
        }
213

214
        numberFieldX.setEditable(!getMenu().isOffsetVariableFilled(0));
×
215
        numberFieldY.setEditable(!getMenu().isOffsetVariableFilled(1));
×
216
        numberFieldZ.setEditable(!getMenu().isOffsetVariableFilled(2));
×
217

218
        if (valueId == getMenu().getMaxOffsetId()) {
×
219
            int max = getMenu().getMaxOffset();
×
220
            numberFieldX.setMaxValue(max);
×
221
            numberFieldX.setMinValue(-max);
×
222
            numberFieldY.setMaxValue(max);
×
223
            numberFieldY.setMinValue(-max);
×
224
            numberFieldZ.setMaxValue(max);
×
225
            numberFieldZ.setMinValue(-max);
×
226
        }
227
    }
×
228

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