• 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/client/render/blockentity/RenderBlockEntitySqueezer.java
1
package org.cyclops.integrateddynamics.client.render.blockentity;
2

3
import com.mojang.blaze3d.vertex.PoseStack;
4
import net.minecraft.client.Minecraft;
5
import net.minecraft.client.renderer.LevelRenderer;
6
import net.minecraft.client.renderer.RenderType;
7
import net.minecraft.client.renderer.SubmitNodeCollector;
8
import net.minecraft.client.renderer.blockentity.BlockEntityRenderer;
9
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
10
import net.minecraft.client.renderer.blockentity.state.BlockEntityRenderState;
11
import net.minecraft.client.renderer.feature.ModelFeatureRenderer;
12
import net.minecraft.client.renderer.item.ItemStackRenderState;
13
import net.minecraft.client.renderer.state.CameraRenderState;
14
import net.minecraft.client.renderer.texture.OverlayTexture;
15
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
16
import net.minecraft.core.Direction;
17
import net.minecraft.world.item.ItemDisplayContext;
18
import net.minecraft.world.item.ItemStack;
19
import net.minecraft.world.level.Level;
20
import net.minecraft.world.phys.Vec3;
21
import net.neoforged.neoforge.client.extensions.common.IClientFluidTypeExtensions;
22
import net.neoforged.neoforge.fluids.FluidStack;
23
import org.apache.commons.lang3.tuple.Triple;
24
import org.cyclops.cyclopscore.helper.DirectionHelpers;
25
import org.cyclops.cyclopscore.helper.IModHelpers;
26
import org.cyclops.cyclopscore.helper.IModHelpersNeoForge;
27
import org.cyclops.integrateddynamics.blockentity.BlockEntitySqueezer;
28
import org.jetbrains.annotations.Nullable;
29

30
/**
31
 * Renderer for the item inside the {@link org.cyclops.integrateddynamics.block.BlockDryingBasin}.
32
 *
33
 * @author rubensworks
34
 *
35
 */
36
public class RenderBlockEntitySqueezer implements BlockEntityRenderer<BlockEntitySqueezer, RenderBlockEntitySqueezer.RenderState> {
37

38
    private static final float OFFSET = 0.01F;
39
    private static final float MINY = 0.0625F;
40
    private static final float MAXY = 0.125F - OFFSET;
41
    private static final float MIN = 0F + OFFSET;
42
    private static final float MAX = 1F - OFFSET;
43
    private static float[][][] coordinates = {
×
44
            { // DOWN
45
                    {MIN, MINY, MIN},
46
                    {MIN, MINY, MAX},
47
                    {MAX, MINY, MAX},
48
                    {MAX, MINY, MIN}
49
            },
50
            { // UP
51
                    {MIN, MAXY, MIN},
52
                    {MIN, MAXY, MAX},
53
                    {MAX, MAXY, MAX},
54
                    {MAX, MAXY, MIN}
55
            },
56
            { // NORTH
57
                    {MIN, MINY, MIN},
58
                    {MIN, MAXY, MIN},
59
                    {MAX, MAXY, MIN},
60
                    {MAX, MINY, MIN}
61
            },
62
            { // SOUTH
63
                    {MIN, MINY, MAX},
64
                    {MIN, MAXY, MAX},
65
                    {MAX, MAXY, MAX},
66
                    {MAX, MINY, MAX}
67
            },
68
            { // WEST
69
                    {MIN, MINY, MIN},
70
                    {MIN, MAXY, MIN},
71
                    {MIN, MAXY, MAX},
72
                    {MIN, MINY, MAX}
73
            },
74
            { // EAST
75
                    {MAX, MINY, MIN},
76
                    {MAX, MAXY, MIN},
77
                    {MAX, MAXY, MAX},
78
                    {MAX, MINY, MAX}
79
            }
80
    };
81

82
    public RenderBlockEntitySqueezer(BlockEntityRendererProvider.Context context) {
×
83

84
    }
×
85

86
    @Override
87
    public RenderState createRenderState() {
88
        return new RenderState();
×
89
    }
90

91
    @Override
92
    public void extractRenderState(BlockEntitySqueezer blockEntity, RenderState renderState, float partialTick, Vec3 cameraPosition, @Nullable ModelFeatureRenderer.CrumblingOverlay breakProgress) {
93
        BlockEntityRenderer.super.extractRenderState(blockEntity, renderState, partialTick, cameraPosition, breakProgress);
×
94
        renderState.itemStack = blockEntity.getInventory().getItem(0);
×
95
        renderState.fluidStack = blockEntity.getTank().getFluid();
×
96
        renderState.level = blockEntity.getLevel();
×
97
        renderState.itemHeight = blockEntity.getItemHeight();
×
98
    }
×
99

100
    @Override
101
    public void submit(RenderState renderState, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, CameraRenderState cameraRenderState) {
102
        if(!renderState.itemStack.isEmpty()) {
×
103
            poseStack.pushPose();
×
104
            poseStack.translate(-0.5F, -0.5F, -0.5F);
×
105
            renderItem(poseStack, submitNodeCollector, renderState);
×
106
            poseStack.popPose();
×
107
        }
108

109
        if(!renderState.fluidStack.isEmpty()) {
×
110
            FluidStack fluid = renderState.fluidStack;
×
111
            int combinedLightCorrected = LevelRenderer.getLightColor(renderState.level, renderState.blockPos.offset(Direction.UP.getUnitVec3i()));
×
112
            IModHelpersNeoForge.get().getRenderHelpers().renderFluidContext(fluid, poseStack, () -> {
×
113
                float height = Math.max(0.0625F - OFFSET, fluid.getAmount() * 0.0625F / IModHelpersNeoForge.get().getFluidHelpers().getBucketVolume() + 0.0625F - OFFSET);
×
114
                int brightness = Math.max(combinedLightCorrected, fluid.getFluid().getFluidType().getLightLevel(fluid));
×
115
                int l2 = brightness >> 0x10 & 0xFFFF;
×
116
                int i3 = brightness & 0xFFFF;
×
117

118
                for(Direction side : DirectionHelpers.DIRECTIONS) {
×
119
                    TextureAtlasSprite icon = IModHelpersNeoForge.get().getRenderHelpers().getFluidIcon(fluid, Direction.UP);
×
120
                    IClientFluidTypeExtensions renderProperties = IClientFluidTypeExtensions.of(fluid.getFluid());
×
121
                    Triple<Float, Float, Float> color = IModHelpers.get().getBaseHelpers().intToRGB(renderProperties.getTintColor(fluid));
×
122

123
                    submitNodeCollector.submitCustomGeometry(poseStack, RenderType.text(icon.atlasLocation()), (pose, vb) -> {
×
124
                        float[][] c = coordinates[side.ordinal()];
×
125
                        float replacedMaxV = (side == Direction.UP || side == Direction.DOWN) ?
×
126
                                icon.getV1() : ((icon.getV1() - icon.getV0()) * height + icon.getV0());
×
127
                        vb.addVertex(pose, c[0][0], getHeight(side, c[0][1], height), c[0][2]).setColor(color.getLeft(), color.getMiddle(), color.getRight(), 1).setUv(icon.getU0(), replacedMaxV).setUv2(l2, i3);
×
128
                        vb.addVertex(pose, c[1][0], getHeight(side, c[1][1], height), c[1][2]).setColor(color.getLeft(), color.getMiddle(), color.getRight(), 1).setUv(icon.getU0(), icon.getV0()).setUv2(l2, i3);
×
129
                        vb.addVertex(pose, c[2][0], getHeight(side, c[2][1], height), c[2][2]).setColor(color.getLeft(), color.getMiddle(), color.getRight(), 1).setUv(icon.getU1(), icon.getV0()).setUv2(l2, i3);
×
130
                        vb.addVertex(pose, c[3][0], getHeight(side, c[3][1], height), c[3][2]).setColor(color.getLeft(), color.getMiddle(), color.getRight(), 1).setUv(icon.getU1(), replacedMaxV).setUv2(l2, i3);
×
131
                    });
×
132
                }
×
133
            });
×
134
        }
135
    }
×
136

137
    private void renderItem(PoseStack poseStack, SubmitNodeCollector submitNodeCollector, RenderState renderStateSqueezer) {
138
        ItemStackRenderState renderState = new ItemStackRenderState();
×
139
        Minecraft.getInstance().getItemModelResolver().updateForTopItem(renderState, renderStateSqueezer.itemStack, ItemDisplayContext.FIXED, renderStateSqueezer.level, null, 0);
×
140

141
        poseStack.pushPose();
×
142
        float yTop = (9 - renderStateSqueezer.itemHeight) * 0.125F;
×
143
        poseStack.translate(1F, (yTop - 1F) / 2 + 1F, 1F);
×
144
        if (renderState.isOversizedInGui()) {
×
145
            poseStack.scale(1.7F, 1.7F, 1.7F);
×
146
        }
147
        poseStack.scale(1F, yTop - 0.125F, 1F);
×
148

149
        renderState.submit(poseStack, submitNodeCollector, 15728880, OverlayTexture.NO_OVERLAY, 0);
×
150
        poseStack.popPose();
×
151
    }
×
152

153
    private static float getHeight(Direction side, float height, float replaceHeight) {
154
        if(height == MAXY) {
×
155
            return replaceHeight;
×
156
        }
157
        return height;
×
158
    }
159

160
    public static class RenderState extends BlockEntityRenderState {
×
161
        public ItemStack itemStack;
162
        public FluidStack fluidStack;
163
        public Level level;
164
        public int itemHeight;
165
    }
166

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