diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/minecraft/MinecraftRenderWrapper.java b/common/src/main/java/com/seibel/lod/common/wrappers/minecraft/MinecraftRenderWrapper.java index 596d2331a..d63bd96ec 100644 --- a/common/src/main/java/com/seibel/lod/common/wrappers/minecraft/MinecraftRenderWrapper.java +++ b/common/src/main/java/com/seibel/lod/common/wrappers/minecraft/MinecraftRenderWrapper.java @@ -264,4 +264,9 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper return glFormat; } + + @Override + public boolean tryDisableVanillaFog() { + return true; // Handled via the MixinFogRenderer at fabric. Forge... Yeah yeah yeah~~~ TODO! + } } diff --git a/core b/core index bb22ad58b..976874e7a 160000 --- a/core +++ b/core @@ -1 +1 @@ -Subproject commit bb22ad58bcfe095be21b5c74d820a744175db763 +Subproject commit 976874e7a3ad87c9eda7ec16c4058eebf9ba76ea diff --git a/fabric/src/main/java/com/seibel/lod/fabric/mixins/MixinFogRenderer.java b/fabric/src/main/java/com/seibel/lod/fabric/mixins/MixinFogRenderer.java index 58e223046..091048b80 100644 --- a/fabric/src/main/java/com/seibel/lod/fabric/mixins/MixinFogRenderer.java +++ b/fabric/src/main/java/com/seibel/lod/fabric/mixins/MixinFogRenderer.java @@ -6,20 +6,40 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import com.mojang.blaze3d.systems.RenderSystem; +import com.seibel.lod.core.api.ClientApi; import com.seibel.lod.core.util.SingletonHandler; import com.seibel.lod.core.wrapperInterfaces.config.ILodConfigWrapperSingleton; import net.minecraft.client.Camera; import net.minecraft.client.renderer.FogRenderer; import net.minecraft.client.renderer.FogRenderer.FogMode; +import net.minecraft.tags.FluidTags; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.level.material.FluidState; @Mixin(FogRenderer.class) public class MixinFogRenderer { private static final ILodConfigWrapperSingleton CONFIG = SingletonHandler.get(ILodConfigWrapperSingleton.class); - @Inject(at = @At("RETURN"), method = "setupFog(Lnet/minecraft/client/Camera;Lnet/minecraft/client/renderer/FogRenderer$FogMode;FZ)V") - private static final void disableSetupFog(Camera camera, FogMode fogMode, float f, boolean bl, CallbackInfo callback) { - if (CONFIG.client().graphics().fogQuality().getDisableVanillaFog()) - RenderSystem.disableFog(); - } + // Using this instead of Float.MAX_VALUE because Sodium don't like it. + private static final float A_REALLY_REALLY_BIG_VALUE = 4206942069.F; + private static final float A_EVEN_LARGER_VALUE = 420694206942069.F; + + @Inject(at = @At("RETURN"), method = "setupFog(Lnet/minecraft/client/Camera;Lnet/minecraft/client/renderer/FogRenderer$FogMode;FZ)V") + private static final void disableSetupFog(Camera camera, FogMode fogMode, float f, boolean bl, CallbackInfo callback) { + FluidState fluidState = camera.getFluidInCamera(); + Entity entity = camera.getEntity(); + boolean isUnderWater = (entity instanceof LivingEntity) && ((LivingEntity)entity).hasEffect(MobEffects.BLINDNESS); + isUnderWater |= fluidState.is(FluidTags.WATER); + isUnderWater |= fluidState.is(FluidTags.LAVA); + + if (!isUnderWater) { + if (fogMode == FogMode.FOG_TERRAIN && CONFIG.client().graphics().fogQuality().getDisableVanillaFog()) { + RenderSystem.fogStart(A_REALLY_REALLY_BIG_VALUE); + RenderSystem.fogEnd(A_EVEN_LARGER_VALUE); + } + } + } } \ No newline at end of file