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