2525
2626package org .visuals .legacy .animatium .mixins .v1 .entity .cape_movement ;
2727
28- import com .llamalad7 .mixinextras .injector .v2 .WrapWithCondition ;
2928import com .llamalad7 .mixinextras .injector .wrapoperation .Operation ;
3029import com .llamalad7 .mixinextras .injector .wrapoperation .WrapOperation ;
3130import net .minecraft .client .entity .ClientAvatarEntity ;
3736import net .minecraft .client .renderer .entity .state .AvatarRenderState ;
3837import net .minecraft .util .Mth ;
3938import net .minecraft .world .entity .Avatar ;
40- import org .jetbrains .annotations .Nullable ;
41- import org .objectweb .asm .Opcodes ;
4239import org .spongepowered .asm .mixin .Mixin ;
43- import org .spongepowered .asm .mixin .Unique ;
4440import org .spongepowered .asm .mixin .injection .At ;
45- import org .spongepowered .asm .mixin .injection .Inject ;
4641import org .spongepowered .asm .mixin .injection .ModifyArg ;
47- import org .spongepowered .asm .mixin .injection .callback .CallbackInfo ;
4842import org .visuals .legacy .animatium .Animatium ;
4943import org .visuals .legacy .animatium .config .AnimatiumConfig ;
5044
5145@ Mixin (AvatarRenderer .class )
5246public abstract class MixinAvatarRenderer <AvatarLikeEntity extends Avatar & ClientAvatarEntity > extends LivingEntityRenderer <AvatarLikeEntity , AvatarRenderState , PlayerModel > {
53- // TODO/MOVE
54- @ Unique
55- private final ThreadLocal <@ Nullable AvatarRenderState > animatium$renderState = ThreadLocal .withInitial (() -> null );
56-
5747 public MixinAvatarRenderer (EntityRendererProvider .Context context , boolean slim ) {
5848 super (context , new PlayerModel (context .bakeLayer (slim ? ModelLayers .PLAYER_SLIM : ModelLayers .PLAYER ), slim ), 0.5F );
5949 }
@@ -76,42 +66,21 @@ public MixinAvatarRenderer(EntityRendererProvider.Context context, boolean slim)
7666 }
7767 }
7868
79- @ WrapWithCondition (method = "extractCapeState" , at = @ At (value = "FIELD" , opcode = Opcodes .PUTFIELD , target = "Lnet/minecraft/client/renderer/entity/state/AvatarRenderState;capeLean:F" , ordinal = 1 ))
80- private static boolean animatium$dontAssignLeanField (AvatarRenderState instance , float value ) {
81- return !Animatium .isEnabled () || !AnimatiumConfig .instance ().movement .capeMovement ;
82- }
83-
84- @ WrapWithCondition (method = "extractCapeState" , at = @ At (value = "FIELD" , opcode = Opcodes .PUTFIELD , target = "Lnet/minecraft/client/renderer/entity/state/AvatarRenderState;capeLean2:F" , ordinal = 1 ))
85- private static boolean animatium$dontAssignLean2Field (AvatarRenderState instance , float value ) {
86- return !Animatium .isEnabled () || !AnimatiumConfig .instance ().movement .capeMovement ;
87- }
88-
89- // TODO/MOVE
90- @ WrapOperation (method = "getRenderOffset(Lnet/minecraft/client/renderer/entity/state/AvatarRenderState;)Lnet/minecraft/world/phys/Vec3;" , at = @ At (value = "FIELD" , target = "Lnet/minecraft/client/renderer/entity/state/AvatarRenderState;isCrouching:Z" ))
91- private boolean animatium$fixSneakingFeetPosition (AvatarRenderState instance , Operation <Boolean > original ) {
92- if (Animatium .isEnabled () && AnimatiumConfig .instance ().fixes .fixSneakingFeetPosition ) {
93- return false ;
69+ @ WrapOperation (method = "extractCapeState" , at = @ At (value = "INVOKE" , target = "Lnet/minecraft/util/Mth;clamp(FFF)F" , ordinal = 1 ))
70+ private static float animatium$dontAssignLeanField (final float value , final float min , final float max , final Operation <Float > original ) {
71+ if (Animatium .isEnabled () && AnimatiumConfig .instance ().movement .capeMovement ) {
72+ return value ;
9473 } else {
95- return original .call (instance );
74+ return original .call (value , min , max );
9675 }
9776 }
9877
99- @ Inject (method = "extractRenderState(Lnet/minecraft/world/entity/Avatar;Lnet/minecraft/client/renderer/entity/state/AvatarRenderState;F)V" , at = @ At ("TAIL" ))
100- private void animatium$storeAvatarState (AvatarLikeEntity avatar , AvatarRenderState avatarRenderState , float f , CallbackInfo ci ) {
101- animatium$renderState .set (avatarRenderState );
78+ @ WrapOperation (method = "extractCapeState" , at = @ At (value = "INVOKE" , target = "Lnet/minecraft/util/Mth;clamp(FFF)F" , ordinal = 2 ))
79+ private static float animatium$dontAssignLean2Field (final float value , final float min , final float max , final Operation <Float > original ) {
80+ if (Animatium .isEnabled () && AnimatiumConfig .instance ().movement .capeMovement ) {
81+ return value ;
82+ } else {
83+ return original .call (value , min , max );
84+ }
10285 }
103-
104- // TODO/FIX @Mixces
105- /*@Inject(method = "renderHand", at = @At(value = "FIELD", opcode = Opcodes.PUTFIELD, target = "Lnet/minecraft/client/model/geom/ModelPart;visible:Z", ordinal = 2))
106- private void animatium$heldItemArmLogic(PoseStack poseStack, SubmitNodeCollector submitNodeCollector, int i, ResourceLocation resourceLocation, ModelPart modelPart, boolean bl, CallbackInfo ci, @Local PlayerModel playerModel) {
107- if (Animatium.isEnabled() && AnimatiumConfig.instance().other.heldItemArmLogic) {
108- final HumanoidArm arm = modelPart == model.rightArm ? HumanoidArm.RIGHT : HumanoidArm.LEFT;
109- final AvatarRenderState avatarRenderState = animatium$renderState.get();
110- // if (avatarRenderState != null && (avatarRenderState.mainArm == arm ? avatarRenderState.rightArmPose : avatarRenderState.leftArmPose) == HumanoidModel.ArmPose.ITEM) {
111- // // Adapted from the ITEM arm pose rotations in HumanoidModel#poseRightArm/poseLeftArm
112- // modelPart.xRot = modelPart.xRot * 0.5F - (float) (Math.PI / 10);
113- // modelPart.yRot = 0.0F;
114- // }
115- }
116- }*/
11786}
0 commit comments