package com.thebrokenrail.gulliverreloaded.mixin; import com.thebrokenrail.gulliverreloaded.ScaledEntity; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.render.Camera; import net.minecraft.entity.Entity; 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.Redirect; @SuppressWarnings("unused") @Environment(EnvType.CLIENT) @Mixin(Camera.class) public abstract class MixinCamera { @Shadow private Entity focusedEntity; @Shadow protected abstract double clipToSpace(double distance); @Shadow protected abstract void moveBy(double x, double y, double z); @Redirect(method = "update", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/Camera;clipToSpace(D)D")) public double onUpdateClipToSpaceProxy(Camera obj, double distance) { float scale = focusedEntity instanceof ScaledEntity ? ((ScaledEntity) focusedEntity).getScale() : 1f; return clipToSpace(distance * scale); } }