diff --git a/src/main/java/com/replaymod/render/mixin/Mixin_Omnidirectional_Camera.java b/src/main/java/com/replaymod/render/mixin/Mixin_Omnidirectional_Camera.java index 8fa79479..51e4f6d1 100644 --- a/src/main/java/com/replaymod/render/mixin/Mixin_Omnidirectional_Camera.java +++ b/src/main/java/com/replaymod/render/mixin/Mixin_Omnidirectional_Camera.java @@ -2,23 +2,30 @@ package com.replaymod.render.mixin; import com.replaymod.render.hooks.EntityRendererHandler; import net.minecraft.client.render.GameRenderer; -import net.minecraft.util.math.Matrix4f; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; +import org.spongepowered.asm.mixin.injection.ModifyArg; @Mixin(GameRenderer.class) public abstract class Mixin_Omnidirectional_Camera implements EntityRendererHandler.IEntityRenderer { - @Redirect(method = "getBasicProjectionMatrix", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/math/Matrix4f;viewboxMatrix(DFFF)Lnet/minecraft/util/math/Matrix4f;")) - private Matrix4f replayModRender_perspective$0(double fovY, float aspect, float zNear, float zFar) { - return replayModRender_perspective((float) fovY, aspect, zNear, zFar); + private static final String METHOD = "getBasicProjectionMatrix"; + private static final String TARGET = "Lnet/minecraft/util/math/Matrix4f;viewboxMatrix(DFFF)Lnet/minecraft/util/math/Matrix4f;"; + private static final boolean TARGET_REMAP = true; + private static final float OMNIDIRECTIONAL_FOV = 90; + + @ModifyArg(method = METHOD, at = @At(value = "INVOKE", target = TARGET, remap = TARGET_REMAP), index = 0) + private double replayModRender_perspective_fov(double fovY) { + return isOmnidirectional() ? OMNIDIRECTIONAL_FOV : fovY; } - private Matrix4f replayModRender_perspective(float fovY, float aspect, float zNear, float zFar) { - if (replayModRender_getHandler() != null && replayModRender_getHandler().omnidirectional) { - fovY = 90; - aspect = 1; - } - return Matrix4f.viewboxMatrix(fovY, aspect, zNear, zFar); + @ModifyArg(method = METHOD, at = @At(value = "INVOKE", target = TARGET, remap = TARGET_REMAP), index = 1) + private float replayModRender_perspective_aspect(float aspect) { + return isOmnidirectional() ? 1 : aspect; + } + + @Unique + private boolean isOmnidirectional() { + return replayModRender_getHandler() != null && replayModRender_getHandler().omnidirectional; } }