• 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/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.client.input.CharacterEvent;
7
import net.minecraft.client.input.KeyEvent;
8
import net.minecraft.client.input.MouseButtonEvent;
9
import net.minecraft.nbt.CompoundTag;
10
import net.minecraft.network.chat.Component;
11
import net.minecraft.network.chat.MutableComponent;
12
import net.minecraft.resources.ResourceLocation;
13
import net.minecraft.util.ARGB;
14
import net.minecraft.world.entity.player.Inventory;
15
import org.cyclops.cyclopscore.client.gui.component.button.ButtonText;
16
import org.cyclops.cyclopscore.client.gui.component.input.WidgetNumberField;
17
import org.cyclops.cyclopscore.client.gui.container.ContainerScreenExtended;
18
import org.cyclops.cyclopscore.client.gui.image.IImage;
19
import org.cyclops.cyclopscore.client.gui.image.Images;
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.inventory.container.ContainerPartOffset;
25
import org.lwjgl.glfw.GLFW;
26

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

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

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

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

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

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

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

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

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

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

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

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

96
    @Override
97
    public boolean charTyped(CharacterEvent evt) {
98
        if (!this.numberFieldX.charTyped(evt)
×
99
                && !this.numberFieldY.charTyped(evt)
×
100
                && !this.numberFieldZ.charTyped(evt)) {
×
101
            onSave();
×
102
            return super.charTyped(evt);
×
103
        }
104
        return true;
×
105
    }
106

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

122
    @Override
123
    public boolean mouseClicked(MouseButtonEvent evt, boolean isDoubleClick) {
124
        if (this.numberFieldX.mouseClicked(evt, isDoubleClick)
×
125
                || this.numberFieldY.mouseClicked(evt, isDoubleClick)
×
126
                || this.numberFieldZ.mouseClicked(evt, isDoubleClick)) {
×
127
            onSave();
×
128
            return true;
×
129
        }
130
        return super.mouseClicked(evt, isDoubleClick);
×
131
    }
132

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

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

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

143
        numberFieldX.render(guiGraphics, mouseX, mouseY, partialTicks);
×
144
        numberFieldY.render(guiGraphics, mouseX, mouseY, partialTicks);
×
145
        numberFieldZ.render(guiGraphics, mouseX, mouseY, partialTicks);
×
146

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

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

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

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

189
    @Override
190
    protected int getBaseXSize() {
191
        return 214;
×
192
    }
193

194
    @Override
195
    protected int getBaseYSize() {
196
        return 155;
×
197
    }
198

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

211
        numberFieldX.setEditable(!getMenu().isOffsetVariableFilled(0));
×
212
        numberFieldY.setEditable(!getMenu().isOffsetVariableFilled(1));
×
213
        numberFieldZ.setEditable(!getMenu().isOffsetVariableFilled(2));
×
214

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

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