diff --git a/src/main/java/eu/crushedpixel/replaymod/mixin/MixinRenderManager.java b/src/main/java/eu/crushedpixel/replaymod/mixin/MixinRenderManager.java index 49b4e525..d6a2de3e 100644 --- a/src/main/java/eu/crushedpixel/replaymod/mixin/MixinRenderManager.java +++ b/src/main/java/eu/crushedpixel/replaymod/mixin/MixinRenderManager.java @@ -3,12 +3,17 @@ package eu.crushedpixel.replaymod.mixin; import eu.crushedpixel.replaymod.video.EntityRendererHandler; import eu.crushedpixel.replaymod.video.capturer.CubicOpenGlFrameCapturer; import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.settings.GameSettings; import net.minecraft.entity.Entity; +import net.minecraft.entity.passive.EntityAnimal; +import net.minecraft.world.World; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(RenderManager.class) @@ -29,4 +34,12 @@ public class MixinRenderManager { playerViewY = (float) Math.toDegrees(yaw); } } + + @Inject(method = "cacheActiveRenderInfo", at = @At("RETURN")) + public void fixHeadRotationForAnimals(World world, FontRenderer font, Entity view, Entity target, GameSettings settings, float partialRenderTick, CallbackInfo ci) { + if (view instanceof EntityAnimal && !((EntityAnimal) view).isPlayerSleeping()) { + EntityAnimal e = (EntityAnimal) view; + this.playerViewY = e.prevRotationYawHead + (e.rotationYawHead - e.prevRotationYawHead) * partialRenderTick; + } + } }