|
28 | 28 | import com.llamalad7.mixinextras.injector.v2.WrapWithCondition; |
29 | 29 | import com.llamalad7.mixinextras.injector.wrapoperation.Operation; |
30 | 30 | import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; |
31 | | -import com.llamalad7.mixinextras.sugar.Local; |
32 | | -import com.mojang.blaze3d.vertex.PoseStack; |
33 | 31 | import net.minecraft.client.entity.ClientAvatarEntity; |
34 | 32 | import net.minecraft.client.model.PlayerModel; |
35 | 33 | import net.minecraft.client.model.geom.ModelLayers; |
36 | | -import net.minecraft.client.model.geom.ModelPart; |
37 | | -import net.minecraft.client.renderer.SubmitNodeCollector; |
38 | 34 | import net.minecraft.client.renderer.entity.EntityRendererProvider; |
39 | 35 | import net.minecraft.client.renderer.entity.LivingEntityRenderer; |
40 | 36 | import net.minecraft.client.renderer.entity.player.AvatarRenderer; |
41 | 37 | import net.minecraft.client.renderer.entity.state.AvatarRenderState; |
42 | | -import net.minecraft.resources.ResourceLocation; |
43 | 38 | import net.minecraft.util.Mth; |
44 | 39 | import net.minecraft.world.entity.Avatar; |
45 | | -import net.minecraft.world.entity.HumanoidArm; |
46 | 40 | import org.jetbrains.annotations.Nullable; |
47 | 41 | import org.objectweb.asm.Opcodes; |
48 | 42 | import org.spongepowered.asm.mixin.Mixin; |
|
56 | 50 |
|
57 | 51 | @Mixin(AvatarRenderer.class) |
58 | 52 | public abstract class MixinAvatarRenderer<AvatarLikeEntity extends Avatar & ClientAvatarEntity> extends LivingEntityRenderer<AvatarLikeEntity, AvatarRenderState, PlayerModel> { |
59 | | - // TODO/MOVE |
60 | | - @Unique |
61 | | - private final ThreadLocal<@Nullable AvatarRenderState> animatium$renderState = ThreadLocal.withInitial(() -> null); |
| 53 | + // TODO/MOVE |
| 54 | + @Unique |
| 55 | + private final ThreadLocal<@Nullable AvatarRenderState> animatium$renderState = ThreadLocal.withInitial(() -> null); |
62 | 56 |
|
63 | | - public MixinAvatarRenderer(EntityRendererProvider.Context context, boolean slim) { |
64 | | - super(context, new PlayerModel(context.bakeLayer(slim ? ModelLayers.PLAYER_SLIM : ModelLayers.PLAYER), slim), 0.5F); |
65 | | - } |
| 57 | + public MixinAvatarRenderer(EntityRendererProvider.Context context, boolean slim) { |
| 58 | + super(context, new PlayerModel(context.bakeLayer(slim ? ModelLayers.PLAYER_SLIM : ModelLayers.PLAYER), slim), 0.5F); |
| 59 | + } |
66 | 60 |
|
67 | | - @WrapOperation(method = "extractCapeState", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Mth;rotLerp(FFF)F")) |
68 | | - private static float animatium$changeLerpMethod(float delta, float start, float end, Operation<Float> original) { |
69 | | - if (Animatium.isEnabled() && AnimatiumConfig.instance().movement.capeMovement) { |
70 | | - return Mth.lerp(delta, start, end); |
71 | | - } else { |
72 | | - return original.call(delta, start, end); |
73 | | - } |
74 | | - } |
| 61 | + @WrapOperation(method = "extractCapeState", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Mth;rotLerp(FFF)F")) |
| 62 | + private static float animatium$changeLerpMethod(float delta, float start, float end, Operation<Float> original) { |
| 63 | + if (Animatium.isEnabled() && AnimatiumConfig.instance().movement.capeMovement) { |
| 64 | + return Mth.lerp(delta, start, end); |
| 65 | + } else { |
| 66 | + return original.call(delta, start, end); |
| 67 | + } |
| 68 | + } |
75 | 69 |
|
76 | | - @ModifyArg(method = "extractCapeState", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Mth;clamp(FFF)F", ordinal = 1), index = 2) |
77 | | - private static float animatium$uncapRotation(float original) { |
78 | | - if (Animatium.isEnabled() && AnimatiumConfig.instance().movement.disableCapeLean) { |
79 | | - return Float.MAX_VALUE; |
80 | | - } else { |
81 | | - return original; |
82 | | - } |
83 | | - } |
| 70 | + @ModifyArg(method = "extractCapeState", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Mth;clamp(FFF)F", ordinal = 1), index = 2) |
| 71 | + private static float animatium$uncapRotation(float original) { |
| 72 | + if (Animatium.isEnabled() && AnimatiumConfig.instance().movement.disableCapeLean) { |
| 73 | + return Float.MAX_VALUE; |
| 74 | + } else { |
| 75 | + return original; |
| 76 | + } |
| 77 | + } |
84 | 78 |
|
85 | | - @WrapWithCondition(method = "extractCapeState", at = @At(value = "FIELD", opcode = Opcodes.PUTFIELD, target = "Lnet/minecraft/client/renderer/entity/state/AvatarRenderState;capeLean:F", ordinal = 1)) |
86 | | - private static boolean animatium$dontAssignLeanField(AvatarRenderState instance, float value) { |
87 | | - return !Animatium.isEnabled() || !AnimatiumConfig.instance().movement.capeMovement; |
88 | | - } |
| 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 | + } |
89 | 83 |
|
90 | | - @WrapWithCondition(method = "extractCapeState", at = @At(value = "FIELD", opcode = Opcodes.PUTFIELD, target = "Lnet/minecraft/client/renderer/entity/state/AvatarRenderState;capeLean2:F", ordinal = 1)) |
91 | | - private static boolean animatium$dontAssignLean2Field(AvatarRenderState instance, float value) { |
92 | | - return !Animatium.isEnabled() || !AnimatiumConfig.instance().movement.capeMovement; |
93 | | - } |
| 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 | + } |
94 | 88 |
|
95 | | - // TODO/MOVE |
96 | | - @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")) |
97 | | - private boolean animatium$fixSneakingFeetPosition(AvatarRenderState instance, Operation<Boolean> original) { |
98 | | - if (Animatium.isEnabled() && AnimatiumConfig.instance().fixes.fixSneakingFeetPosition) { |
99 | | - return false; |
100 | | - } else { |
101 | | - return original.call(instance); |
102 | | - } |
103 | | - } |
| 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; |
| 94 | + } else { |
| 95 | + return original.call(instance); |
| 96 | + } |
| 97 | + } |
104 | 98 |
|
105 | | - @Inject(method = "extractRenderState(Lnet/minecraft/world/entity/Avatar;Lnet/minecraft/client/renderer/entity/state/AvatarRenderState;F)V", at = @At("TAIL")) |
106 | | - private void animatium$storeAvatarState(AvatarLikeEntity avatar, AvatarRenderState avatarRenderState, float f, CallbackInfo ci) { |
107 | | - animatium$renderState.set(avatarRenderState); |
108 | | - } |
| 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); |
| 102 | + } |
109 | 103 |
|
110 | | - @Inject(method = "renderHand", at = @At(value = "FIELD", opcode = Opcodes.PUTFIELD, target = "Lnet/minecraft/client/model/geom/ModelPart;visible:Z", ordinal = 2)) |
| 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)) |
111 | 106 | private void animatium$heldItemArmLogic(PoseStack poseStack, SubmitNodeCollector submitNodeCollector, int i, ResourceLocation resourceLocation, ModelPart modelPart, boolean bl, CallbackInfo ci, @Local PlayerModel playerModel) { |
112 | 107 | if (Animatium.isEnabled() && AnimatiumConfig.instance().other.heldItemArmLogic) { |
113 | 108 | final HumanoidArm arm = modelPart == model.rightArm ? HumanoidArm.RIGHT : HumanoidArm.LEFT; |
114 | 109 | final AvatarRenderState avatarRenderState = animatium$renderState.get(); |
115 | | - // TODO/FIX @Mixces |
116 | 110 | // if (avatarRenderState != null && (avatarRenderState.mainArm == arm ? avatarRenderState.rightArmPose : avatarRenderState.leftArmPose) == HumanoidModel.ArmPose.ITEM) { |
117 | 111 | // // Adapted from the ITEM arm pose rotations in HumanoidModel#poseRightArm/poseLeftArm |
118 | 112 | // modelPart.xRot = modelPart.xRot * 0.5F - (float) (Math.PI / 10); |
119 | 113 | // modelPart.yRot = 0.0F; |
120 | 114 | // } |
121 | 115 | } |
122 | | - } |
| 116 | + }*/ |
123 | 117 | } |
0 commit comments