1717 */
1818package net .raphimc .immediatelyfast .injection .mixins .hud_batching .compat ;
1919
20+ import com .llamalad7 .mixinextras .injector .v2 .WrapWithCondition ;
2021import net .minecraft .client .gui .DrawContext ;
22+ import net .minecraft .client .render .RenderLayer ;
2123import net .minecraft .client .render .VertexConsumerProvider ;
24+ import net .minecraft .client .util .math .MatrixStack ;
2225import net .raphimc .immediatelyfast .feature .core .BatchableBufferSource ;
26+ import org .spongepowered .asm .mixin .Final ;
2327import org .spongepowered .asm .mixin .Mixin ;
2428import org .spongepowered .asm .mixin .Shadow ;
2529import org .spongepowered .asm .mixin .injection .At ;
2630import org .spongepowered .asm .mixin .injection .Inject ;
31+ import org .spongepowered .asm .mixin .injection .Redirect ;
2732import org .spongepowered .asm .mixin .injection .Slice ;
2833import org .spongepowered .asm .mixin .injection .callback .CallbackInfo ;
2934
@@ -36,11 +41,36 @@ public abstract class MixinDrawContext {
3641 @ Shadow
3742 public VertexConsumerProvider .Immediate vertexConsumers ;
3843
44+ @ Shadow
45+ @ Final
46+ private MatrixStack matrices ;
47+
3948 @ Inject (method = "drawItemInSlot(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/item/ItemStack;IILjava/lang/String;)V" , slice = @ Slice (from = @ At (value = "INVOKE" , target = "Lnet/minecraft/entity/player/ItemCooldownManager;getCooldownProgress(Lnet/minecraft/item/Item;F)F" )), at = @ At (value = "INVOKE" , target = "Lnet/minecraft/client/gui/DrawContext;fill(Lnet/minecraft/client/render/RenderLayer;IIIII)V" ))
4049 private void forceDraw (CallbackInfo ci ) {
4150 if (this .vertexConsumers instanceof BatchableBufferSource ) {
4251 this .draw ();
4352 }
4453 }
4554
55+ @ Inject (method = "drawItemInSlot(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/item/ItemStack;IILjava/lang/String;)V" , at = @ At (value = "INVOKE" , target = "Lnet/minecraft/client/util/math/MatrixStack;push()V" , shift = At .Shift .AFTER ))
56+ private void translateZForAllItemOverlays (CallbackInfo ci ) {
57+ if (this .vertexConsumers instanceof BatchableBufferSource ) {
58+ this .matrices .translate (0F , 0F , 200F );
59+ }
60+ }
61+
62+ @ WrapWithCondition (method = "drawItemInSlot(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/item/ItemStack;IILjava/lang/String;)V" , at = @ At (value = "INVOKE" , target = "Lnet/minecraft/client/util/math/MatrixStack;translate(FFF)V" ))
63+ private boolean translateZEarlier (MatrixStack instance , float x , float y , float z ) {
64+ return !(this .vertexConsumers instanceof BatchableBufferSource );
65+ }
66+
67+ @ Redirect (method = "drawItemInSlot(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/item/ItemStack;IILjava/lang/String;)V" , at = @ At (value = "INVOKE" , target = "Lnet/minecraft/client/render/RenderLayer;getGuiOverlay()Lnet/minecraft/client/render/RenderLayer;" ))
68+ private RenderLayer useGuiRenderLayer () {
69+ if (this .vertexConsumers instanceof BatchableBufferSource ) {
70+ return RenderLayer .getGui ();
71+ } else {
72+ return RenderLayer .getGuiOverlay ();
73+ }
74+ }
75+
4676}
0 commit comments