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

CyclopsMC / IntegratedDynamics / 24034486947

06 Apr 2026 01:51PM UTC coverage: 53.645% (-0.08%) from 53.721%
24034486947

push

github

rubensworks
Update to MC 26.1.1

3052 of 8931 branches covered (34.17%)

Branch coverage included in aggregate %.

18680 of 31580 relevant lines covered (59.15%)

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/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.SubmitNodeCollector;
7
import net.minecraft.client.renderer.blockentity.BlockEntityRenderer;
8
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
9
import net.minecraft.client.renderer.blockentity.state.BlockEntityRenderState;
10
import net.minecraft.client.renderer.feature.ModelFeatureRenderer;
11
import net.minecraft.client.renderer.item.ItemStackRenderState;
12
import net.minecraft.client.renderer.rendertype.RenderTypes;
13
import net.minecraft.client.renderer.state.level.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.fluids.FluidStack;
22
import org.apache.commons.lang3.tuple.Triple;
23
import org.cyclops.cyclopscore.helper.DirectionHelpers;
24
import org.cyclops.cyclopscore.helper.IModHelpers;
25
import org.cyclops.cyclopscore.helper.IModHelpersNeoForge;
26
import org.cyclops.integrateddynamics.blockentity.BlockEntitySqueezer;
27
import org.jetbrains.annotations.Nullable;
28

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

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

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

83
    }
×
84

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

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

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

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

117
                for(Direction side : DirectionHelpers.DIRECTIONS) {
×
118
                    TextureAtlasSprite icon = IModHelpersNeoForge.get().getRenderHelpers().getFluidIcon(fluid, Direction.UP);
×
119
                    Triple<Float, Float, Float> color = IModHelpers.get().getBaseHelpers().intToRGB(Minecraft.getInstance().getModelManager().getFluidStateModelSet().get(fluid.getFluid().defaultFluidState()).fluidTintSource().colorAsStack(fluid));
×
120

121
                    submitNodeCollector.submitCustomGeometry(poseStack, RenderTypes.text(icon.atlasLocation()), (pose, vb) -> {
×
122
                        float[][] c = coordinates[side.ordinal()];
×
123
                        float replacedMaxV = (side == Direction.UP || side == Direction.DOWN) ?
×
124
                                icon.getV1() : ((icon.getV1() - icon.getV0()) * height + icon.getV0());
×
125
                        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);
×
126
                        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);
×
127
                        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);
×
128
                        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);
×
129
                    });
×
130
                }
×
131
            });
×
132
        }
133
    }
×
134

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

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

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

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

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

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