4040import org .jetbrains .annotations .NotNull ;
4141
4242public 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