diff --git a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/classic/animation_jump/MixinLivingEntity.java b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/classic/animation_jump/MixinLivingEntity.java new file mode 100644 index 000000000..0b0b690fb --- /dev/null +++ b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/classic/animation_jump/MixinLivingEntity.java @@ -0,0 +1,35 @@ +package com.viaversion.viafabricplus.visuals.injection.mixin.classic.animation_jump; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +import com.viaversion.viafabricplus.visuals.settings.VisualSettings; + +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.WalkAnimationState; +import net.minecraft.world.level.Level; + +@Mixin(LivingEntity.class) +public abstract class MixinLivingEntity extends Entity { + + protected MixinLivingEntity(EntityType type, Level level) { + super(type, level); + } + + @Redirect( + method = "handleDamageEvent", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/world/entity/WalkAnimationState;setSpeed(F)V" + ) + ) + private void noAnimationDamageSpeed(WalkAnimationState animation, float speed) { + if(!VisualSettings.INSTANCE.disableDamageAnimationJump.isEnabled()) { + animation.setSpeed(speed); + } + // Prevent damage animation from affecting walk speed + } +} diff --git a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/classic/walking_animation/MixinLivingEntityRenderer.java b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/classic/walking_animation/MixinLivingEntityRenderer.java new file mode 100644 index 000000000..f16396a41 --- /dev/null +++ b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/injection/mixin/classic/walking_animation/MixinLivingEntityRenderer.java @@ -0,0 +1,41 @@ +package com.viaversion.viafabricplus.visuals.injection.mixin.classic.walking_animation; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import net.minecraft.client.renderer.SubmitNodeCollector; +import net.minecraft.client.renderer.entity.LivingEntityRenderer; +import net.minecraft.client.renderer.entity.state.LivingEntityRenderState; +import net.minecraft.client.renderer.state.level.CameraRenderState; +import com.mojang.blaze3d.vertex.PoseStack; + +@Mixin(LivingEntityRenderer.class) +// Nostalgic tweaks was a reference while making this code, i don't really don't do modern modding, so it was quite a good reference to help do this! +// check it out!: https://github.com/Nostalgica-Reverie/Nostalgic-Tweaks/blob/1.21/common/src/main/java/mod/adrenix/nostalgic/mixin/tweak/animation/player/LivingEntityRendererMixin.java +// https://github.com/Nostalgica-Reverie/Nostalgic-Tweaks/blob/1.21/common/src/main/java/mod/adrenix/nostalgic/helper/animation/ClassicWalkHelper.java +// this code also takes a bit from c0.30 and birevan's port they made for me, thx if i haven't said that before again +public class MixinLivingEntityRenderer { + + @Inject( + method = "Lnet/minecraft/client/renderer/entity/LivingEntityRenderer;submit(Lnet/minecraft/client/renderer/entity/state/LivingEntityRenderState;Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/SubmitNodeCollector;Lnet/minecraft/client/renderer/state/level/CameraRenderState;)V", // targets the render method + at = @At( + ordinal = 1, + value = "INVOKE", + target = "Lcom/mojang/blaze3d/vertex/PoseStack;translate(FFF)V" + ) + ) + public void oldBobbing(S livingEntityRenderState, PoseStack matrixStack, SubmitNodeCollector orderedRenderCommandQueue, CameraRenderState cameraRenderState, CallbackInfo callback) { + + float pos = livingEntityRenderState.walkAnimationPos; + float speed = livingEntityRenderState.walkAnimationSpeed; + + matrixStack.translate( + 0.0F, + -Math.abs(Math.cos(pos * 0.6662F)) * 0.3125F * speed, + 0.0F + ); + + } +} diff --git a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/settings/VisualSettings.java b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/settings/VisualSettings.java index ae4e1c6b4..0ee3b62df 100644 --- a/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/settings/VisualSettings.java +++ b/viafabricplus-visuals/src/main/java/com/viaversion/viafabricplus/visuals/settings/VisualSettings.java @@ -80,6 +80,7 @@ public final class VisualSettings extends SettingGroup { // a1.0.15 -> c0_28/c0_30 public final VersionedBooleanSetting replaceCreativeInventory = new VersionedBooleanSetting(this, Component.translatable("visual_settings.viafabricplus.replace_creative_inventory_with_classic_inventory"), ProtocolVersionRange.andOlder(LegacyProtocolVersion.c0_28toc0_30)); public final VersionedBooleanSetting oldWalkingAnimation = new VersionedBooleanSetting(this, Component.translatable("visual_settings.viafabricplus.old_walking_animation"), ProtocolVersionRange.andOlder(LegacyProtocolVersion.c0_28toc0_30)); + public final VersionedBooleanSetting disableDamageAnimationJump = new VersionedBooleanSetting(this, Component.translatable("visual_settings.viafabricplus.disable_damage_animation_jump"), ProtocolVersionRange.andOlder(LegacyProtocolVersion.c0_28toc0_30)); public VisualSettings() { super(Component.translatable("setting_group_name.viafabricplus.visual")); diff --git a/viafabricplus-visuals/src/main/resources/viafabricplus-visuals.mixins.json b/viafabricplus-visuals/src/main/resources/viafabricplus-visuals.mixins.json index a87fba3f3..2739117b9 100644 --- a/viafabricplus-visuals/src/main/resources/viafabricplus-visuals.mixins.json +++ b/viafabricplus-visuals/src/main/resources/viafabricplus-visuals.mixins.json @@ -6,6 +6,8 @@ "client": [ "classic.creative_menu.MixinCreativeModeInventoryScreen", "classic.walking_animation.MixinHumanoidModel", + "classic.walking_animation.MixinLivingEntityRenderer", + "classic.animation_jump.MixinLivingEntity", "filter_game_mode_selections.MixinGameModeSwitcherScreen", "filter_game_mode_selections.MixinGameModeSwitcherScreen_GameModeIcon", "force_unicode_font.MixinLanguageManager",