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

CyclopsMC / IntegratedDynamics / 13341940185

15 Feb 2025 04:28AM UTC coverage: 39.0% (-0.002%) from 39.002%
13341940185

push

github

rubensworks
Fix color overlays not showing

1950 of 8351 branches covered (23.35%)

Branch coverage included in aggregate %.

10280 of 23008 relevant lines covered (44.68%)

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

3
import com.google.common.collect.Lists;
4
import com.google.common.collect.Maps;
5
import com.mojang.blaze3d.vertex.PoseStack;
6
import net.minecraft.ChatFormatting;
7
import net.minecraft.client.gui.Font;
8
import net.minecraft.client.gui.GuiGraphics;
9
import net.minecraft.client.renderer.RenderType;
10
import net.minecraft.network.chat.Component;
11
import net.minecraft.resources.ResourceLocation;
12
import net.minecraft.util.ARGB;
13
import net.minecraft.world.entity.player.Inventory;
14
import org.apache.commons.lang3.tuple.Triple;
15
import org.cyclops.cyclopscore.client.gui.component.button.ButtonImage;
16
import org.cyclops.cyclopscore.client.gui.component.button.ButtonText;
17
import org.cyclops.cyclopscore.client.gui.container.ContainerScreenScrolling;
18
import org.cyclops.cyclopscore.client.gui.image.IImage;
19
import org.cyclops.cyclopscore.helper.IModHelpers;
20
import org.cyclops.integrateddynamics.Reference;
21
import org.cyclops.integrateddynamics.api.part.IPartState;
22
import org.cyclops.integrateddynamics.api.part.IPartType;
23
import org.cyclops.integrateddynamics.api.part.aspect.IAspect;
24
import org.cyclops.integrateddynamics.api.part.aspect.property.IAspectPropertyTypeInstance;
25
import org.cyclops.integrateddynamics.core.inventory.container.ContainerMultipartAspects;
26

27
import java.awt.*;
28
import java.util.List;
29
import java.util.Map;
30

31
/**
32
 * Gui for parts.
33
 * @author rubensworks
34
 */
35
public abstract class ContainerScreenMultipartAspects<P extends IPartType<P, S>, S extends IPartState<P>, A extends IAspect, C extends ContainerMultipartAspects<P, S, A>>
36
        extends ContainerScreenScrolling<C> {
37

38
    private static final Rectangle ITEM_POSITION = new Rectangle(8, 17, 18, 18);
×
39

40
    protected final DisplayErrorsComponent displayErrors = new DisplayErrorsComponent();
×
41

42
    private Map<IAspect, ButtonText> aspectPropertyButtons = Maps.newHashMap();
×
43

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

48
    @Override
49
    protected Rectangle getScrollRegion() {
50
        return new Rectangle(this.leftPos + 9, this.topPos + 18, 160, 105);
×
51
    }
52

53
    @Override
54
    public void init() {
55
        clearWidgets();
×
56
        super.init();
×
57
        if(getMenu().getPartType().getContainerProviderSettings(null).isPresent()) {
×
58
            addRenderableWidget(new ButtonImage(this.leftPos - 20, this.topPos + 0, 18, 18,
×
59
                    Component.translatable("gui.integrateddynamics.partsettings"),
×
60
                    createServerPressable(ContainerMultipartAspects.BUTTON_SETTINGS, (button) -> {}),
×
61
                    new IImage[]{
62
                            org.cyclops.integrateddynamics.client.gui.image.Images.BUTTON_BACKGROUND_INACTIVE,
63
                            org.cyclops.integrateddynamics.client.gui.image.Images.BUTTON_MIDDLE_SETTINGS
64
                    },
65
                    false, 0, 0));
66
            if (getMenu().getPartType().supportsOffsets()) {
×
67
                addRenderableWidget(new ButtonImage(this.leftPos - 20, this.topPos + 20, 18, 18,
×
68
                        Component.translatable("gui.integrateddynamics.part_offsets"),
×
69
                        createServerPressable(ContainerMultipartAspects.BUTTON_OFFSETS, (button) -> {
×
70
                        }),
×
71
                        new IImage[]{
72
                                org.cyclops.integrateddynamics.client.gui.image.Images.BUTTON_BACKGROUND_INACTIVE,
73
                                org.cyclops.integrateddynamics.client.gui.image.Images.BUTTON_MIDDLE_OFFSET
74
                        },
75
                        false, 0, 0));
76
            }
77
        }
78
        for(Map.Entry<IAspect, String> entry : getMenu().getAspectPropertyButtons().entrySet()) {
×
79
            ButtonText button = new ButtonText(-20, -20, 10, 10,
×
80
                    Component.translatable("gui.integrateddynamics.aspect_settings"), Component.literal("+"),
×
81
                    createServerPressable(entry.getValue(), b -> {}), true);
×
82
            aspectPropertyButtons.put(entry.getKey(), button);
×
83
            addRenderableWidget(button);
×
84
        }
×
85
    }
×
86

87
    protected abstract String getNameId();
88

89
    @Override
90
    protected ResourceLocation constructGuiTexture() {
91
        return ResourceLocation.fromNamespaceAndPath(Reference.MOD_ID, "textures/gui/" + getNameId() + ".png");
×
92
    }
93

94
    protected float colorSmoothener(float color) {
95
        return 1F - ((1F - color) / 4F);
×
96
    }
97

98
    @SuppressWarnings("unchecked")
99
    @Override
100
    protected void renderBg(GuiGraphics guiGraphics, float partialTicks, int mouseX, int mouseY) {
101
        super.renderBg(guiGraphics, partialTicks, mouseX, mouseY);
×
102

103
        // Reset button positions
104
        for(Map.Entry<IAspect, ButtonText> entry : this.aspectPropertyButtons.entrySet()) {
×
105
            entry.getValue().setX(-20);
×
106
            entry.getValue().setY(-20);
×
107
        }
×
108

109
        // Draw part name
110
        IModHelpers.get().getRenderHelpers().drawScaledCenteredString(guiGraphics, font, title.getString(),
×
111
                this.leftPos + offsetX + 6, this.topPos + offsetY + 10, 70, 4210752, false, Font.DisplayMode.NORMAL);
112

113
        // Draw aspects
114
        C container = getMenu();
×
115
        int aspectBoxHeight = container.getAspectBoxHeight();
×
116
        for(int i = 0; i < container.getPageSize(); i++) {
×
117
            if(container.isElementVisible(i)) {
×
118
                A aspect = container.getVisibleElement(i);
×
119

120
                //GlStateManager._disableAlphaTest();
121
                Triple<Float, Float, Float> rgb = IModHelpers.get().getBaseHelpers().intToRGB(aspect.getValueType().getDisplayColor());
×
122
                int color = ARGB.colorFromFloat(
×
123
                        1F,
124
                        colorSmoothener(rgb.getLeft()),
×
125
                        colorSmoothener(rgb.getMiddle()),
×
126
                        colorSmoothener(rgb.getRight())
×
127
                );
128

129
                // Background
130
                guiGraphics.blit(RenderType::guiTextured, texture, leftPos + offsetX + 9,
×
131
                        topPos + offsetY + 18 + aspectBoxHeight * i, 0, getBaseYSize(), 160, aspectBoxHeight - 1, 256, 256, color);
×
132

133
                // Aspect type info
134
                String aspectName = IModHelpers.get().getL10NHelpers().localize(aspect.getTranslationKey());
×
135
                IModHelpers.get().getRenderHelpers().drawScaledCenteredString(guiGraphics, font, aspectName,
×
136
                        this.leftPos + offsetX + 26,
137
                        this.topPos + offsetY + 25 + aspectBoxHeight * i,
138
                        getMaxLabelWidth(), IModHelpers.get().getBaseHelpers().RGBToInt(40, 40, 40), false, Font.DisplayMode.NORMAL);
×
139

140
                drawAdditionalElementInfo(guiGraphics, container, i, aspect);
×
141

142
                if(aspectPropertyButtons.containsKey(aspect)) {
×
143
                    ButtonText button = aspectPropertyButtons.get(aspect);
×
144
                    button.setX(this.leftPos + offsetX + 116);
×
145
                    button.setY(this.topPos + offsetY + 20 + aspectBoxHeight * i);
×
146
                }
147
            }
148
        }
149
    }
×
150

151
    protected abstract void drawAdditionalElementInfo(GuiGraphics guiGraphics, C container, int index, A aspect);
152

153
    protected Rectangle getElementPosition(C container, int i, boolean absolute) {
154
        return new Rectangle(ITEM_POSITION.x + offsetX + (absolute ? this.leftPos : 0),
×
155
                             ITEM_POSITION.y + container.getAspectBoxHeight() * i + offsetY + (absolute ? this.topPos : 0),
×
156
                             ITEM_POSITION.width, ITEM_POSITION.height
157
        );
158
    }
159

160
    @Override
161
    protected void renderLabels(GuiGraphics guiGraphics, int mouseX, int mouseY) {
162
        // super.drawGuiContainerForegroundLayer(matrixStack, mouseX, mouseY);
163
        C container = getMenu();
×
164
        for(int i = 0; i < container.getPageSize(); i++) {
×
165
            if(container.isElementVisible(i)) {
×
166
                // Item icon tooltip
167
                if(isPointInRegion(getElementPosition(container, i, false), new Point(mouseX, mouseY))) {
×
168
                    List<Component> lines = Lists.newLinkedList();
×
169
                    container.getVisibleElement(i).loadTooltip(lines, true);
×
170
                    drawTooltip(lines, guiGraphics.pose(), mouseX - this.leftPos, mouseY - this.topPos);
×
171
                }
172
                drawAdditionalElementInfoForeground(guiGraphics.pose(), container, i, container.getVisibleElement(i), mouseX, mouseY);
×
173

174
                // Optional aspect properties tooltip
175
                IAspect aspect = container.getVisibleElement(i);
×
176
                if(aspectPropertyButtons.containsKey(aspect)) {
×
177
                    ButtonText button = aspectPropertyButtons.get(aspect);
×
178
                    int x = button.getX() - leftPos;
×
179
                    int y = button.getY() - topPos;
×
180
                    if(isHovering(x, y, button.getWidth(), button.getHeight(), mouseX, mouseY)) {
×
181
                        List<Component> lines = Lists.newLinkedList();
×
182
                        lines.add(Component.translatable("gui.integrateddynamics.part.properties")
×
183
                                .withStyle(ChatFormatting.WHITE));
×
184
                        for(IAspectPropertyTypeInstance property : ((IAspect<?, ?>) aspect).getPropertyTypes()) {
×
185
                            lines.add(Component.literal("-")
×
186
                                    .withStyle(ChatFormatting.YELLOW)
×
187
                                    .append(Component.translatable(property.getTranslationKey())));
×
188
                        }
×
189
                        drawTooltip(lines, guiGraphics.pose(), mouseX - this.leftPos, mouseY - this.topPos);
×
190
                    }
191
                }
192
            }
193
        }
194

195
        if (isHovering(-20, 0, 18, 18, mouseX, mouseY)) {
×
196
            drawTooltip(Lists.newArrayList(Component.translatable("gui.integrateddynamics.part_settings")), guiGraphics.pose(), mouseX - leftPos, mouseY - topPos);
×
197
        }
198
        if (isHovering(-20, 20, 18, 18, mouseX, mouseY)) {
×
199
            drawTooltip(Lists.newArrayList(Component.translatable("gui.integrateddynamics.part_offsets")), guiGraphics.pose(), mouseX - leftPos, mouseY - topPos);
×
200
        }
201
    }
×
202

203
    protected abstract void drawAdditionalElementInfoForeground(PoseStack matrixStack, C container, int index,
204
                                                                A aspect, int mouseX, int mouseY);
205

206
    public int getMaxLabelWidth() {
207
        return 63;
×
208
    }
209
}
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