@@ -123,8 +123,13 @@ public abstract class RenderBlocksUltraMixin implements IRenderBlocksMixin {
123123 private Vector3ic frontDir ;
124124 private boolean [] states ;
125125 private double [] bounds ;
126- @ Setter
127- private boolean reusePreviousStates ;
126+ private boolean [] reusePreviousStates ;
127+
128+ @ Override
129+ public void reusePreviousStates (boolean state ) {
130+ Arrays .fill (reusePreviousStates , state );
131+ }
132+
128133 @ Setter
129134 private boolean enableMultiRenderReuse ;
130135 private boolean disableCrackFix ;
@@ -586,9 +591,6 @@ public boolean renderWithAO(Block block, int x, int y, int z, float r, float g,
586591 drewSomething |= renderFace (Facing .XPOS );
587592
588593 this .enableAO = false ;
589- if (drewSomething && enableMultiRenderReuse ) {
590- reusePreviousStates = true ;
591- }
592594 return drewSomething ;
593595 }
594596
@@ -597,18 +599,23 @@ public boolean renderWithAO(Block block, int x, int y, int z, float r, float g,
597599 require = 2 )
598600 private void setupStates (CallbackInfo ci ) {
599601 states = new boolean [6 ];
602+ reusePreviousStates = new boolean [6 ];
600603 }
601604
602605 private void reuse (Facing .Direction dir ) {
603- if (reusePreviousStates ) {
604- ((ITriangulatorTessellator ) Compat .tessellator ()).alternativeTriangulation (states [dir .ordinal ()]);
606+ val ord = dir .ordinal ();
607+ if (reusePreviousStates [ord ]) {
608+ ((ITriangulatorTessellator ) Compat .tessellator ()).alternativeTriangulation (states [ord ]);
605609 } else {
606610 states [dir .ordinal ()] = ((ITriangulatorTessellator ) Compat .tessellator ()).alternativeTriangulation ();
607611 }
612+ if (enableMultiRenderReuse ) {
613+ reusePreviousStates [ord ] = true ;
614+ }
608615 }
609616
610- private void aoFix () {
611- if (reusePreviousStates ) {
617+ private void aoFix (Facing . Direction dir ) {
618+ if (reusePreviousStates [ dir . ordinal ()] ) {
612619 return ;
613620 }
614621 var avgTopLeft = avg (colorRedTopLeft , colorGreenTopLeft , colorBlueTopLeft );
@@ -643,7 +650,7 @@ private void aoFix() {
643650 at = @ At (value = "HEAD" ),
644651 require = 1 )
645652 private void reuseXNeg (Block p_147798_1_ , double p_147798_2_ , double p_147798_4_ , double p_147798_6_ , IIcon p_147798_8_ , CallbackInfo ci ) {
646- aoFix ();
653+ aoFix (Facing . Direction . FACE_XNEG );
647654 reuse (Facing .Direction .FACE_XNEG );
648655 }
649656
@@ -661,7 +668,7 @@ private double xNegBounds(RenderBlocks instance) {
661668 at = @ At (value = "HEAD" ),
662669 require = 1 )
663670 private void reuseXPos (Block p_147798_1_ , double p_147798_2_ , double p_147798_4_ , double p_147798_6_ , IIcon p_147798_8_ , CallbackInfo ci ) {
664- aoFix ();
671+ aoFix (Facing . Direction . FACE_XPOS );
665672 reuse (Facing .Direction .FACE_XPOS );
666673 }
667674
@@ -679,7 +686,7 @@ private double xPosBounds(RenderBlocks instance) {
679686 at = @ At (value = "HEAD" ),
680687 require = 1 )
681688 private void reuseYNeg (Block p_147798_1_ , double p_147798_2_ , double p_147798_4_ , double p_147798_6_ , IIcon p_147798_8_ , CallbackInfo ci ) {
682- aoFix ();
689+ aoFix (Facing . Direction . FACE_YNEG );
683690 reuse (Facing .Direction .FACE_YNEG );
684691 }
685692
@@ -698,7 +705,7 @@ private double yNegBounds(RenderBlocks instance) {
698705 at = @ At (value = "HEAD" ),
699706 require = 1 )
700707 private void reuseYPos (Block p_147798_1_ , double p_147798_2_ , double p_147798_4_ , double p_147798_6_ , IIcon p_147798_8_ , CallbackInfo ci ) {
701- aoFix ();
708+ aoFix (Facing . Direction . FACE_YPOS );
702709 reuse (Facing .Direction .FACE_YPOS );
703710 }
704711
@@ -717,7 +724,7 @@ private double yPosBounds(RenderBlocks instance) {
717724 at = @ At (value = "HEAD" ),
718725 require = 1 )
719726 private void reuseZNeg (Block p_147798_1_ , double p_147798_2_ , double p_147798_4_ , double p_147798_6_ , IIcon p_147798_8_ , CallbackInfo ci ) {
720- aoFix ();
727+ aoFix (Facing . Direction . FACE_ZNEG );
721728 reuse (Facing .Direction .FACE_ZNEG );
722729 }
723730
@@ -735,7 +742,7 @@ private double zNegBounds(RenderBlocks instance) {
735742 at = @ At (value = "HEAD" ),
736743 require = 1 )
737744 private void reuseZPos (Block p_147798_1_ , double p_147798_2_ , double p_147798_4_ , double p_147798_6_ , IIcon p_147798_8_ , CallbackInfo ci ) {
738- aoFix ();
745+ aoFix (Facing . Direction . FACE_ZPOS );
739746 reuse (Facing .Direction .FACE_ZPOS );
740747 }
741748
0 commit comments