Skip to content

Commit 957f55e

Browse files
committed
Move some code to their own files from MixinAvatarRenderer
1 parent c5a275c commit 957f55e

File tree

4 files changed

+114
-43
lines changed

4 files changed

+114
-43
lines changed
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
/**
2+
* Animatium
3+
* The all-you-could-want legacy animations mod for modern minecraft versions.
4+
* Brings back animations from the 1.7/1.8 era and more.
5+
* <p>
6+
* Copyright (C) 2024-2025 lowercasebtw
7+
* Copyright (C) 2024-2025 mixces
8+
* Copyright (C) 2024-2025 Contributors to the project retain their copyright
9+
* <p>
10+
* This program is free software: you can redistribute it and/or modify
11+
* it under the terms of the GNU General Public License as published by
12+
* the Free Software Foundation, either version 3 of the License, or
13+
* (at your option) any later version.
14+
* <p>
15+
* This program is distributed in the hope that it will be useful,
16+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
17+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18+
* GNU General Public License for more details.
19+
* <p>
20+
* You should have received a copy of the GNU General Public License
21+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
22+
* <p>
23+
* "MINECRAFT" LINKING EXCEPTION TO THE GPL
24+
*/
25+
26+
package org.visuals.legacy.animatium.mixins.v1.entity;
27+
28+
import net.minecraft.client.entity.ClientAvatarEntity;
29+
import net.minecraft.client.model.PlayerModel;
30+
import net.minecraft.client.renderer.entity.EntityRendererProvider;
31+
import net.minecraft.client.renderer.entity.LivingEntityRenderer;
32+
import net.minecraft.client.renderer.entity.player.AvatarRenderer;
33+
import net.minecraft.client.renderer.entity.state.AvatarRenderState;
34+
import net.minecraft.world.entity.Avatar;
35+
import org.jetbrains.annotations.Nullable;
36+
import org.spongepowered.asm.mixin.Mixin;
37+
import org.spongepowered.asm.mixin.Unique;
38+
import org.spongepowered.asm.mixin.injection.At;
39+
import org.spongepowered.asm.mixin.injection.Inject;
40+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
41+
42+
@Mixin(AvatarRenderer.class)
43+
public abstract class MixinAvatarRenderer_HeldItemArmLogic<AvatarLikeEntity extends Avatar & ClientAvatarEntity> extends LivingEntityRenderer<AvatarLikeEntity, AvatarRenderState, PlayerModel> {
44+
@Unique
45+
private final ThreadLocal<@Nullable AvatarRenderState> animatium$renderState = ThreadLocal.withInitial(() -> null);
46+
47+
public MixinAvatarRenderer_HeldItemArmLogic(final EntityRendererProvider.Context context, final PlayerModel model, final float shadowRadius) {
48+
super(context, model, shadowRadius);
49+
}
50+
51+
@Inject(method = "extractRenderState(Lnet/minecraft/world/entity/Avatar;Lnet/minecraft/client/renderer/entity/state/AvatarRenderState;F)V", at = @At("TAIL"))
52+
private void animatium$storeAvatarState(AvatarLikeEntity avatar, AvatarRenderState avatarRenderState, float f, CallbackInfo ci) {
53+
animatium$renderState.set(avatarRenderState);
54+
}
55+
56+
// TODO/FIX @Mixces
57+
/*@Inject(method = "renderHand", at = @At(value = "FIELD", opcode = Opcodes.PUTFIELD, target = "Lnet/minecraft/client/model/geom/ModelPart;visible:Z", ordinal = 2))
58+
private void animatium$heldItemArmLogic(PoseStack poseStack, SubmitNodeCollector submitNodeCollector, int i, ResourceLocation resourceLocation, ModelPart modelPart, boolean bl, CallbackInfo ci, @Local PlayerModel playerModel) {
59+
if (Animatium.isEnabled() && AnimatiumConfig.instance().other.heldItemArmLogic) {
60+
final HumanoidArm arm = modelPart == model.rightArm ? HumanoidArm.RIGHT : HumanoidArm.LEFT;
61+
final AvatarRenderState avatarRenderState = animatium$renderState.get();
62+
// if (avatarRenderState != null && (avatarRenderState.mainArm == arm ? avatarRenderState.rightArmPose : avatarRenderState.leftArmPose) == HumanoidModel.ArmPose.ITEM) {
63+
// // Adapted from the ITEM arm pose rotations in HumanoidModel#poseRightArm/poseLeftArm
64+
// modelPart.xRot = modelPart.xRot * 0.5F - (float) (Math.PI / 10);
65+
// modelPart.yRot = 0.0F;
66+
// }
67+
}
68+
}*/
69+
}

src/main/java/org/visuals/legacy/animatium/mixins/v1/entity/cape_movement/MixinAvatarRenderer.java

Lines changed: 12 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525

2626
package org.visuals.legacy.animatium.mixins.v1.entity.cape_movement;
2727

28-
import com.llamalad7.mixinextras.injector.v2.WrapWithCondition;
2928
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
3029
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
3130
import net.minecraft.client.entity.ClientAvatarEntity;
@@ -37,23 +36,14 @@
3736
import net.minecraft.client.renderer.entity.state.AvatarRenderState;
3837
import net.minecraft.util.Mth;
3938
import net.minecraft.world.entity.Avatar;
40-
import org.jetbrains.annotations.Nullable;
41-
import org.objectweb.asm.Opcodes;
4239
import org.spongepowered.asm.mixin.Mixin;
43-
import org.spongepowered.asm.mixin.Unique;
4440
import org.spongepowered.asm.mixin.injection.At;
45-
import org.spongepowered.asm.mixin.injection.Inject;
4641
import org.spongepowered.asm.mixin.injection.ModifyArg;
47-
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
4842
import org.visuals.legacy.animatium.Animatium;
4943
import org.visuals.legacy.animatium.config.AnimatiumConfig;
5044

5145
@Mixin(AvatarRenderer.class)
5246
public 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
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package org.visuals.legacy.animatium.mixins.v1.entity.sneaking;
2+
3+
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
4+
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
5+
import net.minecraft.client.entity.ClientAvatarEntity;
6+
import net.minecraft.client.model.PlayerModel;
7+
import net.minecraft.client.renderer.entity.EntityRendererProvider;
8+
import net.minecraft.client.renderer.entity.LivingEntityRenderer;
9+
import net.minecraft.client.renderer.entity.player.AvatarRenderer;
10+
import net.minecraft.client.renderer.entity.state.AvatarRenderState;
11+
import net.minecraft.world.entity.Avatar;
12+
import org.spongepowered.asm.mixin.Mixin;
13+
import org.spongepowered.asm.mixin.injection.At;
14+
import org.visuals.legacy.animatium.Animatium;
15+
import org.visuals.legacy.animatium.config.AnimatiumConfig;
16+
17+
@Mixin(AvatarRenderer.class)
18+
public abstract class MixinAvatarRenderer_FixSneakFeetPosition<AvatarLikeEntity extends Avatar & ClientAvatarEntity> extends LivingEntityRenderer<AvatarLikeEntity, AvatarRenderState, PlayerModel> {
19+
public MixinAvatarRenderer_FixSneakFeetPosition(final EntityRendererProvider.Context context, final PlayerModel model, final float shadowRadius) {
20+
super(context, model, shadowRadius);
21+
}
22+
23+
@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"))
24+
private boolean animatium$fixSneakingFeetPosition(AvatarRenderState instance, Operation<Boolean> original) {
25+
if (Animatium.isEnabled() && AnimatiumConfig.instance().fixes.fixSneakingFeetPosition) {
26+
return false;
27+
} else {
28+
return original.call(instance);
29+
}
30+
}
31+
}

src/main/resources/animatium.mixins.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
"accessor.GuiRendererAccessor",
1212
"accessor.LivingEntityAccessor",
1313
"accessor.PlayerAccessor",
14+
"v1.entity.MixinAvatarRenderer_HeldItemArmLogic",
1415
"v1.entity.MixinEntityRenderDispatcher_ForceSteveModel",
1516
"v1.entity.MixinHumanoidMobRenderer_FixDoubleUsage",
1617
"v1.entity.MixinHumanoidModel",
@@ -41,6 +42,7 @@
4142
"v1.entity.rotations.MixinLivingEntity",
4243
"v1.entity.rotations.MixinPlayer",
4344
"v1.entity.sneaking.MixinAvatar_OldSneakHeight",
45+
"v1.entity.sneaking.MixinAvatarRenderer_FixSneakFeetPosition",
4446
"v1.entity.sneaking.MixinElytraAnimationState_SneakAnimationWhileGliding",
4547
"v1.entity.sneaking.MixinElytraModel_SneakTranslation",
4648
"v1.entity.sneaking.MixinEntityRenderer_SneakAnimationWhileFlying",

0 commit comments

Comments
 (0)