|
32 | 32 | import net.minecraft.client.model.EntityModel; |
33 | 33 | import net.minecraft.client.model.HumanoidModel; |
34 | 34 | import net.minecraft.client.model.geom.ModelPart; |
35 | | -import net.minecraft.client.renderer.RenderType; |
36 | 35 | import net.minecraft.client.renderer.entity.state.HumanoidRenderState; |
37 | | -import net.minecraft.resources.ResourceLocation; |
| 36 | +import net.minecraft.client.renderer.rendertype.RenderType; |
| 37 | +import net.minecraft.resources.Identifier; |
38 | 38 | import net.minecraft.world.entity.HumanoidArm; |
39 | 39 | import net.minecraft.world.item.ItemStack; |
40 | 40 | import net.minecraft.world.item.ShieldItem; |
|
55 | 55 |
|
56 | 56 | @Mixin(HumanoidModel.class) |
57 | 57 | public abstract class MixinHumanoidModel<T extends HumanoidRenderState> extends EntityModel<T> { |
58 | | - @Shadow |
59 | | - @Final |
60 | | - public ModelPart rightArm; |
61 | | - |
62 | | - @Shadow |
63 | | - @Final |
64 | | - public ModelPart leftArm; |
65 | | - |
66 | | - @Shadow |
67 | | - @Final |
68 | | - public ModelPart head; |
69 | | - |
70 | | - @Shadow |
71 | | - @Final |
72 | | - public ModelPart body; |
73 | | - |
74 | | - @Shadow |
75 | | - @Final |
76 | | - public ModelPart rightLeg; |
77 | | - |
78 | | - @Shadow |
79 | | - @Final |
80 | | - public ModelPart leftLeg; |
81 | | - |
82 | | - protected MixinHumanoidModel(ModelPart modelPart, Function<ResourceLocation, RenderType> function) { |
83 | | - super(modelPart, function); |
84 | | - } |
85 | | - |
86 | | - // TODO/MOVE |
87 | | - @WrapOperation(method = "setupAnim(Lnet/minecraft/client/renderer/entity/state/HumanoidRenderState;)V", at = @At(value = "FIELD", opcode = Opcodes.GETFIELD, target = "Lnet/minecraft/client/renderer/entity/state/HumanoidRenderState;isCrouching:Z")) |
88 | | - private boolean animatium$sneakingFeetPosition(HumanoidRenderState instance, Operation<Boolean> original) { |
89 | | - if (Animatium.isEnabled() && AnimatiumConfig.instance().movement.sneakAnimation == SneakAnimationSetting.V1_7 && instance.isCrouching) { |
90 | | - // Values sourced from older versions |
91 | | - body.xRot = 0.5F; |
92 | | - rightArm.xRot += 0.4F; |
93 | | - leftArm.xRot += 0.4F; |
94 | | - rightLeg.z = 4.0F; |
95 | | - leftLeg.z = 4.0F; |
96 | | - rightLeg.y = 9.0F; |
97 | | - leftLeg.y = 9.0F; |
98 | | - head.y = 1.0F; |
99 | | - return false; |
100 | | - } else { |
101 | | - return original.call(instance); |
102 | | - } |
103 | | - } |
104 | | - |
105 | | - @WrapOperation(method = "setupAttackAnimation", at = @At(value = "FIELD", opcode = Opcodes.PUTFIELD, target = "Lnet/minecraft/client/model/geom/ModelPart;xRot:F", ordinal = 0)) |
106 | | - public void animatium$fixMirrorArmSwing$field(ModelPart instance, float value, Operation<Void> original, @Local HumanoidArm arm) { |
107 | | - if (AnimatiumConfig.instance().fixes.fixMirrorArmSwing && arm == HumanoidArm.LEFT) { |
108 | | - this.rightArm.xRot -= this.body.yRot; |
109 | | - } else { |
110 | | - original.call(instance, value); |
111 | | - } |
112 | | - } |
113 | | - |
114 | | - @ModifyExpressionValue(method = "setupAttackAnimation", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Mth;sin(F)F", ordinal = 5)) |
115 | | - public float animatium$fixMirrorArmSwing$sin(float original, @Local HumanoidArm arm) { |
116 | | - if (AnimatiumConfig.instance().fixes.fixMirrorArmSwing) { |
117 | | - original *= Utils.getArmMultiplier(arm); |
118 | | - } |
119 | | - |
120 | | - return original; |
121 | | - } |
122 | | - |
123 | | - @WrapOperation(method = "poseBlockingArm", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Mth;clamp(FFF)F")) |
124 | | - private float animatium$lockBlockingArmRotation(float value, float min, float max, Operation<Float> original) { |
125 | | - if (Animatium.isEnabled() && AnimatiumConfig.instance().other.lockBlockingArmRotation) { |
126 | | - return 0.0F; |
127 | | - } else { |
128 | | - return original.call(value, min, max); |
129 | | - } |
130 | | - } |
131 | | - |
132 | | - @Inject(method = "setupAnim(Lnet/minecraft/client/renderer/entity/state/HumanoidRenderState;)V", at = @At(value = "CONSTANT", args = "floatValue=0.0", ordinal = 1)) |
133 | | - private void animatium$bowArmMovement(T humanoidRenderState, CallbackInfo ci) { |
134 | | - if (Animatium.isEnabled() && AnimatiumConfig.instance().movement.bowArmMovement) { |
135 | | - final boolean isLeftArmPose = humanoidRenderState.leftArmPose == HumanoidModel.ArmPose.BOW_AND_ARROW; |
136 | | - final boolean isRightArmPose = humanoidRenderState.rightArmPose == HumanoidModel.ArmPose.BOW_AND_ARROW; |
137 | | - if (isLeftArmPose || isRightArmPose) { |
138 | | - if (isLeftArmPose) { |
139 | | - leftArm.zRot = 0.0F; |
140 | | - rightArm.yRot = -0.1F + head.yRot - 0.4F; |
141 | | - leftArm.yRot = 0.1F + head.yRot; |
142 | | - } |
143 | | - |
144 | | - if (isRightArmPose) { |
145 | | - rightArm.zRot = 0.0F; |
146 | | - rightArm.yRot = -0.1F + head.yRot; |
147 | | - leftArm.yRot = 0.1F + head.yRot + 0.4F; |
148 | | - } |
149 | | - |
150 | | - rightArm.xRot = (float) (-Math.PI / 2) + head.xRot; |
151 | | - leftArm.xRot = (float) (-Math.PI / 2) + head.xRot; |
152 | | - } |
153 | | - } |
154 | | - } |
155 | | - |
156 | | - @WrapOperation(method = {"poseLeftArm", "poseRightArm"}, at = @At(value = "INVOKE", target = "Lnet/minecraft/client/model/HumanoidModel;poseBlockingArm(Lnet/minecraft/client/model/geom/ModelPart;Z)V")) |
157 | | - private void animatium$oldSwordBlockArm(HumanoidModel<?> instance, ModelPart arm, boolean isRightArm, Operation<Void> original, @Local(argsOnly = true) T humanoidRenderState) { |
158 | | - original.call(instance, arm, isRightArm); |
159 | | - if (Animatium.isEnabled() && AnimatiumConfig.instance().other.thirdPersonSwordBlockingPosition) { |
160 | | - final ItemStack stack = ((UtilityRenderState) humanoidRenderState).animatium$getItemHeldByArm(isRightArm ? HumanoidArm.RIGHT : HumanoidArm.LEFT); |
161 | | - if (!(stack.getItem() instanceof ShieldItem)) { |
162 | | - arm.xRot = arm.xRot * 0.5F - ((float) Math.PI / 10.0F) * 2.0F; |
163 | | - arm.yRot = 0; |
164 | | - } |
165 | | - } |
166 | | - } |
167 | | - |
168 | | - @ModifyExpressionValue(method = "setupAnim(Lnet/minecraft/client/renderer/entity/state/HumanoidRenderState;)V", at = @At(value = "FIELD", opcode = Opcodes.GETFIELD, target = "Lnet/minecraft/client/renderer/entity/state/HumanoidRenderState;isUsingItem:Z", ordinal = 0)) |
169 | | - private boolean animatium$fixOffHandUsingPose(boolean original) { |
170 | | - return (!Animatium.isEnabled() || !AnimatiumConfig.instance().fixes.fixOffHandUsingPose) && original; |
171 | | - } |
| 58 | + @Shadow |
| 59 | + @Final |
| 60 | + public ModelPart rightArm; |
| 61 | + |
| 62 | + @Shadow |
| 63 | + @Final |
| 64 | + public ModelPart leftArm; |
| 65 | + |
| 66 | + @Shadow |
| 67 | + @Final |
| 68 | + public ModelPart head; |
| 69 | + |
| 70 | + @Shadow |
| 71 | + @Final |
| 72 | + public ModelPart body; |
| 73 | + |
| 74 | + @Shadow |
| 75 | + @Final |
| 76 | + public ModelPart rightLeg; |
| 77 | + |
| 78 | + @Shadow |
| 79 | + @Final |
| 80 | + public ModelPart leftLeg; |
| 81 | + |
| 82 | + protected MixinHumanoidModel(ModelPart modelPart, Function<Identifier, RenderType> function) { |
| 83 | + super(modelPart, function); |
| 84 | + } |
| 85 | + |
| 86 | + // TODO/MOVE |
| 87 | + @WrapOperation(method = "setupAnim(Lnet/minecraft/client/renderer/entity/state/HumanoidRenderState;)V", at = @At(value = "FIELD", opcode = Opcodes.GETFIELD, target = "Lnet/minecraft/client/renderer/entity/state/HumanoidRenderState;isCrouching:Z")) |
| 88 | + private boolean animatium$sneakingFeetPosition(HumanoidRenderState instance, Operation<Boolean> original) { |
| 89 | + if (Animatium.isEnabled() && AnimatiumConfig.instance().movement.sneakAnimation == SneakAnimationSetting.V1_7 && instance.isCrouching) { |
| 90 | + // Values sourced from older versions |
| 91 | + body.xRot = 0.5F; |
| 92 | + rightArm.xRot += 0.4F; |
| 93 | + leftArm.xRot += 0.4F; |
| 94 | + rightLeg.z = 4.0F; |
| 95 | + leftLeg.z = 4.0F; |
| 96 | + rightLeg.y = 9.0F; |
| 97 | + leftLeg.y = 9.0F; |
| 98 | + head.y = 1.0F; |
| 99 | + return false; |
| 100 | + } else { |
| 101 | + return original.call(instance); |
| 102 | + } |
| 103 | + } |
| 104 | + |
| 105 | + @WrapOperation(method = "setupAttackAnimation", at = @At(value = "FIELD", target = "Lnet/minecraft/client/model/geom/ModelPart;xRot:F", opcode = Opcodes.PUTFIELD, ordinal = 0)) |
| 106 | + public void animatium$fixMirrorArmSwing$field(ModelPart instance, float value, Operation<Void> original, @Local(argsOnly = true) T humanoidRenderState) { |
| 107 | + if (AnimatiumConfig.instance().fixes.fixMirrorArmSwing && humanoidRenderState.attackArm == HumanoidArm.LEFT) { |
| 108 | + this.rightArm.xRot -= this.body.yRot; |
| 109 | + } else { |
| 110 | + original.call(instance, value); |
| 111 | + } |
| 112 | + } |
| 113 | + |
| 114 | + @ModifyExpressionValue(method = "setupAttackAnimation", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Mth;sin(D)F", ordinal = 5)) |
| 115 | + public float animatium$fixMirrorArmSwing$sin(float original, @Local(argsOnly = true) T humanoidRenderState) { |
| 116 | + if (AnimatiumConfig.instance().fixes.fixMirrorArmSwing) { |
| 117 | + original *= Utils.getArmMultiplier(humanoidRenderState.attackArm); |
| 118 | + } |
| 119 | + |
| 120 | + return original; |
| 121 | + } |
| 122 | + |
| 123 | + @WrapOperation(method = "poseBlockingArm", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Mth;clamp(FFF)F")) |
| 124 | + private float animatium$lockBlockingArmRotation(float value, float min, float max, Operation<Float> original) { |
| 125 | + if (Animatium.isEnabled() && AnimatiumConfig.instance().other.lockBlockingArmRotation) { |
| 126 | + return 0.0F; |
| 127 | + } else { |
| 128 | + return original.call(value, min, max); |
| 129 | + } |
| 130 | + } |
| 131 | + |
| 132 | + @Inject(method = "setupAnim(Lnet/minecraft/client/renderer/entity/state/HumanoidRenderState;)V", at = @At(value = "CONSTANT", args = "floatValue=0.0", ordinal = 1)) |
| 133 | + private void animatium$bowArmMovement(T humanoidRenderState, CallbackInfo ci) { |
| 134 | + if (Animatium.isEnabled() && AnimatiumConfig.instance().movement.bowArmMovement) { |
| 135 | + final boolean isLeftArmPose = humanoidRenderState.leftArmPose == HumanoidModel.ArmPose.BOW_AND_ARROW; |
| 136 | + final boolean isRightArmPose = humanoidRenderState.rightArmPose == HumanoidModel.ArmPose.BOW_AND_ARROW; |
| 137 | + if (isLeftArmPose || isRightArmPose) { |
| 138 | + if (isLeftArmPose) { |
| 139 | + leftArm.zRot = 0.0F; |
| 140 | + rightArm.yRot = -0.1F + head.yRot - 0.4F; |
| 141 | + leftArm.yRot = 0.1F + head.yRot; |
| 142 | + } |
| 143 | + |
| 144 | + if (isRightArmPose) { |
| 145 | + rightArm.zRot = 0.0F; |
| 146 | + rightArm.yRot = -0.1F + head.yRot; |
| 147 | + leftArm.yRot = 0.1F + head.yRot + 0.4F; |
| 148 | + } |
| 149 | + |
| 150 | + rightArm.xRot = (float) (-Math.PI / 2) + head.xRot; |
| 151 | + leftArm.xRot = (float) (-Math.PI / 2) + head.xRot; |
| 152 | + } |
| 153 | + } |
| 154 | + } |
| 155 | + |
| 156 | + @WrapOperation(method = {"poseLeftArm", "poseRightArm"}, at = @At(value = "INVOKE", target = "Lnet/minecraft/client/model/HumanoidModel;poseBlockingArm(Lnet/minecraft/client/model/geom/ModelPart;Z)V")) |
| 157 | + private void animatium$oldSwordBlockArm(HumanoidModel<?> instance, ModelPart arm, boolean isRightArm, Operation<Void> original, @Local(argsOnly = true) T humanoidRenderState) { |
| 158 | + original.call(instance, arm, isRightArm); |
| 159 | + if (Animatium.isEnabled() && AnimatiumConfig.instance().other.thirdPersonSwordBlockingPosition) { |
| 160 | + final ItemStack stack = ((UtilityRenderState) humanoidRenderState).animatium$getItemHeldByArm(isRightArm ? HumanoidArm.RIGHT : HumanoidArm.LEFT); |
| 161 | + if (!(stack.getItem() instanceof ShieldItem)) { |
| 162 | + arm.xRot = arm.xRot * 0.5F - ((float) Math.PI / 10.0F) * 2.0F; |
| 163 | + arm.yRot = 0; |
| 164 | + } |
| 165 | + } |
| 166 | + } |
| 167 | + |
| 168 | + @ModifyExpressionValue(method = "setupAnim(Lnet/minecraft/client/renderer/entity/state/HumanoidRenderState;)V", at = @At(value = "FIELD", opcode = Opcodes.GETFIELD, target = "Lnet/minecraft/client/renderer/entity/state/HumanoidRenderState;isUsingItem:Z", ordinal = 0)) |
| 169 | + private boolean animatium$fixOffHandUsingPose(boolean original) { |
| 170 | + return (!Animatium.isEnabled() || !AnimatiumConfig.instance().fixes.fixOffHandUsingPose) && original; |
| 171 | + } |
172 | 172 | } |
0 commit comments