update fog mixin
This commit is contained in:
+63
-11
@@ -19,6 +19,7 @@
|
||||
|
||||
package com.seibel.distanthorizons.fabric.mixins.client;
|
||||
|
||||
import com.llamalad7.mixinextras.injector.ModifyReturnValue;
|
||||
import com.seibel.distanthorizons.core.config.Config;
|
||||
import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector;
|
||||
import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftRenderWrapper;
|
||||
@@ -31,22 +32,31 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
import com.mojang.blaze3d.systems.RenderSystem;
|
||||
|
||||
import net.minecraft.client.Camera;
|
||||
import net.minecraft.client.renderer.FogRenderer;
|
||||
import net.minecraft.client.renderer.FogRenderer.FogMode;
|
||||
import net.minecraft.world.effect.MobEffects;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.entity.LivingEntity;
|
||||
|
||||
#if MC_VER < MC_1_17_1
|
||||
import net.minecraft.world.level.material.FluidState;
|
||||
import net.minecraft.client.renderer.FogRenderer;
|
||||
import net.minecraft.client.renderer.FogRenderer.FogMode;
|
||||
#elif MC_VER < MC_1_21_3
|
||||
import net.minecraft.world.level.material.FogType;
|
||||
#else
|
||||
import net.minecraft.client.renderer.FogRenderer;
|
||||
import net.minecraft.client.renderer.FogRenderer.FogMode;
|
||||
#elif MC_VER < MC_1_21_6
|
||||
import net.minecraft.world.level.material.FogType;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
import com.mojang.blaze3d.shaders.FogShape;
|
||||
import net.minecraft.client.renderer.FogRenderer;
|
||||
import net.minecraft.client.renderer.FogRenderer.FogMode;
|
||||
import net.minecraft.client.renderer.FogParameters;
|
||||
import org.joml.Vector4f;
|
||||
#else
|
||||
import net.minecraft.world.level.material.FogType;
|
||||
import net.minecraft.client.renderer.fog.FogRenderer;
|
||||
import net.minecraft.client.multiplayer.ClientLevel;
|
||||
import org.joml.Vector4f;
|
||||
#endif
|
||||
|
||||
@Mixin(FogRenderer.class)
|
||||
@@ -66,18 +76,21 @@ public class MixinFogRenderer
|
||||
#elif MC_VER < MC_1_21_3
|
||||
@Inject(at = @At("RETURN"), method = "setupFog")
|
||||
private static void disableSetupFog(Camera camera, FogMode fogMode, float f, boolean bl, float g, CallbackInfo callback)
|
||||
#else
|
||||
#elif MC_VER < MC_1_21_6
|
||||
@Inject(at = @At("RETURN"), method = "setupFog", cancellable = true)
|
||||
private static void disableSetupFog(Camera camera, FogMode fogMode, Vector4f vector4f, float f, boolean bl, float g, CallbackInfoReturnable<FogParameters> callback)
|
||||
#else
|
||||
@ModifyReturnValue(at = @At("RETURN"), method = "computeFogColor")
|
||||
private static Vector4f disableSetupFog(Vector4f fogReturnValue, Camera camera, float f, ClientLevel clientLevel, int i, float g, boolean bl)
|
||||
#endif
|
||||
{
|
||||
boolean cameraNotInFluid = cameraNotInFluid(camera);
|
||||
#if MC_VER < MC_1_21_6
|
||||
boolean cancelFog = cancelFog(camera, fogMode);
|
||||
#else
|
||||
boolean cancelFog = cancelFog(camera);
|
||||
#endif
|
||||
|
||||
Entity entity = camera.getEntity();
|
||||
boolean isSpecialFog = (entity instanceof LivingEntity) && ((LivingEntity) entity).hasEffect(MobEffects.BLINDNESS);
|
||||
if (!isSpecialFog && cameraNotInFluid && fogMode == FogMode.FOG_TERRAIN
|
||||
&& !SingletonInjector.INSTANCE.get(IMinecraftRenderWrapper.class).isFogStateSpecial()
|
||||
&& !Config.Client.Advanced.Graphics.Fog.enableVanillaFog.get())
|
||||
if (cancelFog)
|
||||
{
|
||||
#if MC_VER < MC_1_17_1
|
||||
RenderSystem.fogStart(A_REALLY_REALLY_BIG_VALUE);
|
||||
@@ -85,10 +98,47 @@ public class MixinFogRenderer
|
||||
#elif MC_VER < MC_1_21_3
|
||||
RenderSystem.setShaderFogStart(A_REALLY_REALLY_BIG_VALUE);
|
||||
RenderSystem.setShaderFogEnd(A_EVEN_LARGER_VALUE);
|
||||
#else
|
||||
#elif MC_VER < MC_1_21_6
|
||||
callback.setReturnValue(FogParameters.NO_FOG);
|
||||
#else
|
||||
// set the fog color to invisible
|
||||
fogReturnValue.x = 0;
|
||||
fogReturnValue.y = 0;
|
||||
fogReturnValue.z = 0;
|
||||
fogReturnValue.w = 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
#if MC_VER < MC_1_21_6
|
||||
// no return value needed
|
||||
#else
|
||||
return fogReturnValue;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Unique
|
||||
#if MC_VER < MC_1_21_6
|
||||
private static boolean cancelFog(Camera camera, FogMode fogMode)
|
||||
#else
|
||||
private static boolean cancelFog(Camera camera)
|
||||
#endif
|
||||
{
|
||||
boolean cameraNotInFluid = cameraNotInFluid(camera);
|
||||
|
||||
Entity entity = camera.getEntity();
|
||||
boolean isSpecialFog = (entity instanceof LivingEntity) && ((LivingEntity) entity).hasEffect(MobEffects.BLINDNESS);
|
||||
|
||||
boolean cancelFog = !isSpecialFog;
|
||||
cancelFog = cancelFog && cameraNotInFluid;
|
||||
#if MC_VER < MC_1_21_6
|
||||
cancelFog = cancelFog && (fogMode == FogMode.FOG_TERRAIN);
|
||||
#endif
|
||||
cancelFog = cancelFog && !SingletonInjector.INSTANCE.get(IMinecraftRenderWrapper.class).isFogStateSpecial();
|
||||
cancelFog = cancelFog && !Config.Client.Advanced.Graphics.Fog.enableVanillaFog.get();
|
||||
|
||||
return cancelFog;
|
||||
}
|
||||
|
||||
@Unique
|
||||
@@ -105,4 +155,6 @@ public class MixinFogRenderer
|
||||
return cameraNotInFluid;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
+76
-29
@@ -19,70 +19,78 @@
|
||||
|
||||
package com.seibel.distanthorizons.neoforge.mixins.client;
|
||||
|
||||
import com.llamalad7.mixinextras.injector.ModifyReturnValue;
|
||||
import com.seibel.distanthorizons.core.config.Config;
|
||||
import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector;
|
||||
import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftRenderWrapper;
|
||||
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.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
import com.mojang.blaze3d.systems.RenderSystem;
|
||||
|
||||
import net.minecraft.client.Camera;
|
||||
import net.minecraft.client.renderer.FogRenderer;
|
||||
import net.minecraft.client.renderer.FogRenderer.FogMode;
|
||||
import net.minecraft.world.effect.MobEffects;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.entity.LivingEntity;
|
||||
|
||||
#if MC_VER < MC_1_17_1
|
||||
import net.minecraft.world.level.material.FluidState;
|
||||
org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
import net.minecraft.client.renderer.FogRenderer;
|
||||
import net.minecraft.client.renderer.FogRenderer.FogMode;
|
||||
#elif MC_VER < MC_1_21_3
|
||||
import net.minecraft.world.level.material.FogType;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
#else
|
||||
import net.minecraft.client.renderer.FogParameters;
|
||||
import net.minecraft.client.renderer.FogRenderer;
|
||||
import net.minecraft.client.renderer.FogRenderer.FogMode;
|
||||
#elif MC_VER < MC_1_21_6
|
||||
import net.minecraft.world.level.material.FogType;
|
||||
import org.joml.Vector4f;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
import com.mojang.blaze3d.shaders.FogShape;
|
||||
import net.minecraft.client.renderer.FogRenderer;
|
||||
import net.minecraft.client.renderer.FogRenderer.FogMode;
|
||||
import net.minecraft.client.renderer.FogParameters;
|
||||
import org.joml.Vector4f;
|
||||
#else
|
||||
import net.minecraft.world.level.material.FogType;
|
||||
import net.minecraft.client.renderer.fog.FogRenderer;
|
||||
import net.minecraft.client.multiplayer.ClientLevel;
|
||||
import org.joml.Vector4f;
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
@Mixin(FogRenderer.class)
|
||||
public class MixinFogRenderer
|
||||
{
|
||||
// Using this instead of Float.MAX_VALUE because Sodium don't like it.
|
||||
@Unique
|
||||
private static final float A_REALLY_REALLY_BIG_VALUE = 420694206942069.F;
|
||||
@Unique
|
||||
private static final float A_EVEN_LARGER_VALUE = 42069420694206942069.F;
|
||||
|
||||
|
||||
|
||||
#if MC_VER == MC_1_17_1 || MC_VER == MC_1_18_2
|
||||
@Inject(at = @At("RETURN"),
|
||||
method = "setupFog(Lnet/minecraft/client/Camera;Lnet/minecraft/client/renderer/FogRenderer$FogMode;FZF)V",
|
||||
remap = false)
|
||||
private static void disableSetupFog(Camera camera, FogMode fogMode, float f, boolean bl, float partTick, CallbackInfo callback)
|
||||
#if MC_VER < MC_1_19_2
|
||||
@Inject(at = @At("RETURN"), method = "setupFog")
|
||||
private static void disableSetupFog(Camera camera, FogMode fogMode, float f, boolean bl, CallbackInfo callback)
|
||||
#elif MC_VER < MC_1_21_3
|
||||
@Inject(at = @At("RETURN"),
|
||||
method = "setupFog(Lnet/minecraft/client/Camera;Lnet/minecraft/client/renderer/FogRenderer$FogMode;FZF)V",
|
||||
remap = true)
|
||||
private static void disableSetupFog(Camera camera, FogMode fogMode, float f, boolean bl, float partTick, CallbackInfo callback)
|
||||
@Inject(at = @At("RETURN"), method = "setupFog")
|
||||
private static void disableSetupFog(Camera camera, FogMode fogMode, float f, boolean bl, float g, CallbackInfo callback)
|
||||
#elif MC_VER < MC_1_21_6
|
||||
@Inject(at = @At("RETURN"), method = "setupFog", cancellable = true)
|
||||
private static void disableSetupFog(Camera camera, FogMode fogMode, Vector4f vector4f, float f, boolean bl, float g, CallbackInfoReturnable<FogParameters> callback)
|
||||
#else
|
||||
@Inject(at = @At("RETURN"),
|
||||
method = "setupFog(Lnet/minecraft/client/Camera;Lnet/minecraft/client/renderer/FogRenderer$FogMode;Lorg/joml/Vector4f;FZF)Lnet/minecraft/client/renderer/FogParameters;",
|
||||
remap = true, cancellable = true)
|
||||
private static void disableSetupFog(Camera camera, FogMode fogMode, Vector4f vector4f, float f, boolean bl, float partTick, CallbackInfoReturnable<FogParameters> callback)
|
||||
@ModifyReturnValue(at = @At("RETURN"), method = "computeFogColor")
|
||||
private static Vector4f disableSetupFog(Vector4f fogReturnValue, Camera camera, float f, ClientLevel clientLevel, int i, float g, boolean bl)
|
||||
#endif
|
||||
{
|
||||
boolean cameraNotInFluid = cameraNotInFluid(camera);
|
||||
#if MC_VER < MC_1_21_6
|
||||
boolean cancelFog = cancelFog(camera, fogMode);
|
||||
#else
|
||||
boolean cancelFog = cancelFog(camera);
|
||||
#endif
|
||||
|
||||
Entity entity = camera.getEntity();
|
||||
boolean isSpecialFog = (entity instanceof LivingEntity) && ((LivingEntity) entity).hasEffect(MobEffects.BLINDNESS);
|
||||
if (!isSpecialFog && cameraNotInFluid && fogMode == FogMode.FOG_TERRAIN
|
||||
&& !SingletonInjector.INSTANCE.get(IMinecraftRenderWrapper.class).isFogStateSpecial()
|
||||
&& !Config.Client.Advanced.Graphics.Fog.enableVanillaFog.get())
|
||||
if (cancelFog)
|
||||
{
|
||||
#if MC_VER < MC_1_17_1
|
||||
RenderSystem.fogStart(A_REALLY_REALLY_BIG_VALUE);
|
||||
@@ -90,12 +98,50 @@ public class MixinFogRenderer
|
||||
#elif MC_VER < MC_1_21_3
|
||||
RenderSystem.setShaderFogStart(A_REALLY_REALLY_BIG_VALUE);
|
||||
RenderSystem.setShaderFogEnd(A_EVEN_LARGER_VALUE);
|
||||
#else
|
||||
#elif MC_VER < MC_1_21_6
|
||||
callback.setReturnValue(FogParameters.NO_FOG);
|
||||
#else
|
||||
// set the fog color to invisible
|
||||
fogReturnValue.x = 0;
|
||||
fogReturnValue.y = 0;
|
||||
fogReturnValue.z = 0;
|
||||
fogReturnValue.w = 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
#if MC_VER < MC_1_21_6
|
||||
// no return value needed
|
||||
#else
|
||||
return fogReturnValue;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Unique
|
||||
#if MC_VER < MC_1_21_6
|
||||
private static boolean cancelFog(Camera camera, FogMode fogMode)
|
||||
#else
|
||||
private static boolean cancelFog(Camera camera)
|
||||
#endif
|
||||
{
|
||||
boolean cameraNotInFluid = cameraNotInFluid(camera);
|
||||
|
||||
Entity entity = camera.getEntity();
|
||||
boolean isSpecialFog = (entity instanceof LivingEntity) && ((LivingEntity) entity).hasEffect(MobEffects.BLINDNESS);
|
||||
|
||||
boolean cancelFog = !isSpecialFog;
|
||||
cancelFog = cancelFog && cameraNotInFluid;
|
||||
#if MC_VER < MC_1_21_6
|
||||
cancelFog = cancelFog && (fogMode == FogMode.FOG_TERRAIN);
|
||||
#endif
|
||||
cancelFog = cancelFog && !SingletonInjector.INSTANCE.get(IMinecraftRenderWrapper.class).isFogStateSpecial();
|
||||
cancelFog = cancelFog && !Config.Client.Advanced.Graphics.Fog.enableVanillaFog.get();
|
||||
|
||||
return cancelFog;
|
||||
}
|
||||
|
||||
@Unique
|
||||
private static boolean cameraNotInFluid(Camera camera)
|
||||
{
|
||||
#if MC_VER < MC_1_17_1
|
||||
@@ -110,4 +156,5 @@ public class MixinFogRenderer
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user