11package net .lopymine .mtd .mixin .yacl .category ;
22
33import com .llamalad7 .mixinextras .injector .wrapoperation .*;
4+ import com .llamalad7 .mixinextras .sugar .Share ;
5+ import com .llamalad7 .mixinextras .sugar .ref .LocalBooleanRef ;
46import dev .isxander .yacl3 .gui .YACLScreen ;
57import java .util .function .*;
8+ import net .lopymine .mtd .client .MyTotemDollClient ;
69import net .minecraft .client .MinecraftClient ;
710import net .minecraft .client .gui .screen .Screen ;
811import net .minecraft .client .network .*;
9- import net .minecraft .client .render .VertexConsumerProvider ;
1012import net .minecraft .client .render .command .OrderedRenderCommandQueue ;
1113import net .minecraft .client .render .item .HeldItemRenderer ;
12- import net .minecraft .client .util .math .MatrixStack ;
13-
1414
15- import net .minecraft .entity .LivingEntity ;
15+ import net .minecraft .client .render .item .HeldItemRenderer .HandRenderType ;
16+ import net .minecraft .client .util .math .MatrixStack ;
1617import net .minecraft .item .*;
17- import net .minecraft .util .* ;
18+ import net .minecraft .util .Hand ;
1819import org .spongepowered .asm .mixin .*;
19- import org .spongepowered .asm .mixin .injection .At ;
2020import net .lopymine .mtd .yacl .YACLConfigurationScreen ;
2121import net .lopymine .mtd .yacl .custom .category .rendering .RenderingCategoryTab ;
2222
2323//? if >=1.20.5 {
2424import net .minecraft .component .DataComponentTypes ;
25+ import org .spongepowered .asm .mixin .injection .*;
26+ import org .spongepowered .asm .mixin .injection .callback .CallbackInfo ;
2527//?}
2628
2729@ Mixin (HeldItemRenderer .class )
2830public class HeldItemRendererMixin {
2931
30- //? if >=1.21.9 {
31- @ WrapOperation (at = @ At (value = "INVOKE" , target = "Lnet/minecraft/client/render/item/HeldItemRenderer;renderItem(Lnet/minecraft/entity/LivingEntity;Lnet/minecraft/item/ItemStack;Lnet/minecraft/item/ItemDisplayContext;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;I)V" ), method = "renderFirstPersonItem" )
32- private void renderDollPreview (HeldItemRenderer instance , LivingEntity livingEntity , ItemStack stack , ItemDisplayContext itemDisplayContext , MatrixStack matrixStack , OrderedRenderCommandQueue queue , int i , Operation <Void > original ) {
33- Consumer <ItemStack > draw = (item ) -> original .call (instance , livingEntity , stack , itemDisplayContext , matrixStack , queue , i );
34- renderDoll (stack , draw );
35- }
36- //?} else {
37- /*@WrapOperation(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/item/HeldItemRenderer;renderFirstPersonItem(Lnet/minecraft/client/network/AbstractClientPlayerEntity;FFLnet/minecraft/util/Hand;FLnet/minecraft/item/ItemStack;FLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;I)V"), method = "renderItem(FLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider$Immediate;Lnet/minecraft/client/network/ClientPlayerEntity;I)V")
38- private void renderDollPreview(HeldItemRenderer instance, AbstractClientPlayerEntity player, float tickDelta, float pitch, Hand hand, float swingProgress, ItemStack item, float equipProgress, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, Operation<Void> original) {
39- renderDoll(instance, player, tickDelta, pitch, hand, swingProgress, item, equipProgress, matrices, vertexConsumers, light, original);
40- }
41- */ //?}
42-
43- @ Unique
44- private static void renderDoll (ItemStack original , Consumer <ItemStack > draw ) {
32+ @ Inject (
33+ at = @ At ("HEAD" ),
34+ method = "renderItem(FLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/client/network/ClientPlayerEntity;I)V"
35+ )
36+ private void createBoolean (CallbackInfo ci , @ Share ("mtd_bl" ) LocalBooleanRef ref ) {
4537 MinecraftClient client = MinecraftClient .getInstance ();
4638 Screen currentScreen = client .currentScreen ;
4739
40+ ref .set (false );
4841 if (YACLConfigurationScreen .notOpen (currentScreen )) {
49- draw .accept (original );
5042 return ;
5143 }
5244 if (!(currentScreen instanceof YACLScreen yaclScreen )) {
53- draw .accept (original );
5445 return ;
5546 }
5647 if (!(yaclScreen .tabManager .getCurrentTab () instanceof RenderingCategoryTab )) {
57- draw .accept (original );
5848 return ;
5949 }
50+ ClientPlayerEntity player = MinecraftClient .getInstance ().player ;
51+ if (player == null ) {
52+ return ;
53+ }
54+ ref .set (true );
55+ }
56+
57+ @ WrapOperation (
58+ at = @ At (
59+ value = "FIELD" ,
60+ target = "Lnet/minecraft/client/render/item/HeldItemRenderer$HandRenderType;renderMainHand:Z"
61+ ),
62+ method = "renderItem(FLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/client/network/ClientPlayerEntity;I)V"
63+ )
64+ private boolean swapRenderValue1 (HandRenderType instance , Operation <Boolean > original , @ Share ("mtd_bl" ) LocalBooleanRef ref ) {
65+ if (ref .get ()) {
66+ return true ;
67+ }
68+ return original .call (instance );
69+ }
6070
71+ @ WrapOperation (
72+ at = @ At (
73+ value = "FIELD" ,
74+ target = "Lnet/minecraft/client/render/item/HeldItemRenderer$HandRenderType;renderOffHand:Z"
75+ ),
76+ method = "renderItem(FLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/client/network/ClientPlayerEntity;I)V"
77+ )
78+ private boolean swapRenderValue2 (HandRenderType instance , Operation <Boolean > original , @ Share ("mtd_bl" ) LocalBooleanRef ref ) {
79+ if (ref .get ()) {
80+ return true ;
81+ }
82+ return original .call (instance );
83+ }
84+
85+ @ WrapOperation (at = @ At (value = "INVOKE" , target = "Lnet/minecraft/client/render/item/HeldItemRenderer;renderFirstPersonItem(Lnet/minecraft/client/network/AbstractClientPlayerEntity;FFLnet/minecraft/util/Hand;FLnet/minecraft/item/ItemStack;FLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;I)V" ), method = "renderItem(FLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/client/network/ClientPlayerEntity;I)V" )
86+ private void swapRenderingStack (HeldItemRenderer instance , AbstractClientPlayerEntity playerEntity , float a , float b , Hand hand , float c , ItemStack stack , float d , MatrixStack matrixStack , OrderedRenderCommandQueue queue , int i , Operation <Void > original , @ Share ("mtd_bl" ) LocalBooleanRef ref ) {
87+ Consumer <ItemStack > consumer = (itemStack ) -> original .call (instance , playerEntity , a , b , hand , c , itemStack , d , matrixStack , queue , i );
88+ if (ref .get ()) {
89+ renderDoll (stack , consumer );
90+ } else {
91+ consumer .accept (stack );
92+ }
93+ }
94+
95+ @ Unique
96+ private static void renderDoll (ItemStack original , Consumer <ItemStack > draw ) {
6197 ClientPlayerEntity player = MinecraftClient .getInstance ().player ;
6298 if (player == null ) {
6399 draw .accept (original );
64100 return ;
65101 }
66-
67- if (original .isEmpty () || !original .isOf (Items .TOTEM_OF_UNDYING )) {
102+ if (original .isEmpty () || !MyTotemDollClient .canProcess (original )) {
68103 ItemStack totem = Items .TOTEM_OF_UNDYING .getDefaultStack ();
69104
70-
71105 //? if >=1.20.5 {
72106 totem .set (DataComponentTypes .CUSTOM_NAME , player .getName ());
73107 //?} else {
@@ -77,7 +111,6 @@ private static void renderDoll(ItemStack original, Consumer<ItemStack> draw) {
77111 draw .accept (totem );
78112 return ;
79113 }
80-
81114 draw .accept (original );
82115 }
83116}
0 commit comments