Skip to content

Commit 78413c5

Browse files
authored
Limit nested barrel rendering to 4 levels (#1044)
1 parent 29af49f commit 78413c5

File tree

1 file changed

+39
-27
lines changed

1 file changed

+39
-27
lines changed

src/client/java/aztech/modern_industrialization/blocks/storage/barrel/BarrelRenderer.java

Lines changed: 39 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@
4040
import org.jetbrains.annotations.NotNull;
4141

4242
public class BarrelRenderer implements BlockEntityRenderer<BarrelBlockEntity> {
43+
private static final ThreadLocal<Integer> barrelNesting = ThreadLocal.withInitial(() -> 0);
44+
4345
private final int itemNameColor;
4446

4547
public BarrelRenderer(int itemNameColor) {
@@ -57,44 +59,54 @@ public void render(@NotNull BarrelBlockEntity entity, float tickDelta, @NotNull
5759
if (!MIConfig.getConfig().enableBarrelContentRendering) {
5860
return;
5961
}
62+
int nesting = barrelNesting.get();
63+
if (nesting >= 4) {
64+
return;
65+
}
6066

61-
var state = entity.getBlockState();
62-
var pos = entity.getBlockPos();
67+
barrelNesting.set(nesting + 1);
6368

64-
ItemVariant item = entity.getResource();
69+
try {
70+
var state = entity.getBlockState();
71+
var pos = entity.getBlockPos();
6572

66-
if (!item.isBlank()) {
67-
ItemStack toRender = item.toStack();
73+
ItemVariant item = entity.getResource();
6874

69-
int sideMask = 0;
75+
if (!item.isBlank()) {
76+
ItemStack toRender = item.toStack();
7077

71-
for (int i = 0; i < 4; i++) {
72-
var direction = Direction.from2DDataValue(i);
73-
// Note: level can be null from builtin item renderer
74-
if (entity.getLevel() != null
75-
&& !Block.shouldRenderFace(state, entity.getLevel(), pos, direction, pos.relative(direction))) {
76-
continue;
77-
}
78+
int sideMask = 0;
7879

79-
sideMask |= 1 << i;
80-
// Thanks TechReborn for rendering code
80+
for (int i = 0; i < 4; i++) {
81+
var direction = Direction.from2DDataValue(i);
82+
// Note: level can be null from builtin item renderer
83+
if (entity.getLevel() != null
84+
&& !Block.shouldRenderFace(state, entity.getLevel(), pos, direction, pos.relative(direction))) {
85+
continue;
86+
}
8187

82-
matrices.pushPose();
83-
matrices.translate(0.5, 0, 0.5);
84-
matrices.mulPose(Axis.YP.rotationDegrees(-i * 90F));
85-
matrices.scale(0.5F, 0.5F, 0.5F);
86-
matrices.translate(0, 1.125, 1.01);
88+
sideMask |= 1 << i;
89+
// Thanks TechReborn for rendering code
8790

88-
matrices.last().pose().scale(1, 1, 0.01f);
89-
matrices.last().normal().rotate(Mth.HALF_PI / 2, -1, 0, 0);
91+
matrices.pushPose();
92+
matrices.translate(0.5, 0, 0.5);
93+
matrices.mulPose(Axis.YP.rotationDegrees(-i * 90F));
94+
matrices.scale(0.5F, 0.5F, 0.5F);
95+
matrices.translate(0, 1.125, 1.01);
9096

91-
Minecraft.getInstance().getItemRenderer().renderStatic(toRender, ItemDisplayContext.GUI, RenderHelper.FULL_LIGHT,
92-
OverlayTexture.NO_OVERLAY, matrices, vertexConsumers, entity.getLevel(), 0);
97+
matrices.last().pose().scale(1, 1, 0.01f);
98+
matrices.last().normal().rotate(Mth.HALF_PI / 2, -1, 0, 0);
9399

94-
matrices.popPose();
95-
}
100+
Minecraft.getInstance().getItemRenderer().renderStatic(toRender, ItemDisplayContext.GUI, RenderHelper.FULL_LIGHT,
101+
OverlayTexture.NO_OVERLAY, matrices, vertexConsumers, entity.getLevel(), 0);
102+
103+
matrices.popPose();
104+
}
96105

97-
DeferredBarrelTextRenderer.enqueueBarrelForRendering(pos, sideMask, itemNameColor);
106+
DeferredBarrelTextRenderer.enqueueBarrelForRendering(pos, sideMask, itemNameColor);
107+
}
108+
} finally {
109+
barrelNesting.set(nesting);
98110
}
99111
}
100112
}

0 commit comments

Comments
 (0)