From 264d64d221789d563a3526e924a3b86d43d524c6 Mon Sep 17 00:00:00 2001 From: tom lee Date: Fri, 14 Jan 2022 21:31:29 +0800 Subject: [PATCH] Add forge DisableVanillaFog. (And actually add the untracked file.) --- .../lod/forge/mixins/MixinFogRenderer.java | 51 +++++++++++++++++++ forge/src/main/resources/lod.mixins.json | 3 +- 2 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 forge/src/main/java/com/seibel/lod/forge/mixins/MixinFogRenderer.java diff --git a/forge/src/main/java/com/seibel/lod/forge/mixins/MixinFogRenderer.java b/forge/src/main/java/com/seibel/lod/forge/mixins/MixinFogRenderer.java new file mode 100644 index 000000000..e9533fe93 --- /dev/null +++ b/forge/src/main/java/com/seibel/lod/forge/mixins/MixinFogRenderer.java @@ -0,0 +1,51 @@ +package com.seibel.lod.forge.mixins; + +import org.spongepowered.asm.mixin.Mixin; +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 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 { + + // Using this instead of Float.MAX_VALUE because Sodium don't like it. (And keeping it for forge just in case) + 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;FZF)V", + remap = false) // Due to this being forge modified + private static final void disableSetupFog(Camera camera, FogMode fogMode, float f, boolean bl, float ticks, CallbackInfo callback) { + ILodConfigWrapperSingleton CONFIG; + try { + CONFIG = SingletonHandler.get(ILodConfigWrapperSingleton.class); + } catch (NullPointerException e) { + return; // Can happen due to forge calling this before setting up the mod + } + 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 diff --git a/forge/src/main/resources/lod.mixins.json b/forge/src/main/resources/lod.mixins.json index 588e1b6d2..a68b47314 100644 --- a/forge/src/main/resources/lod.mixins.json +++ b/forge/src/main/resources/lod.mixins.json @@ -7,7 +7,8 @@ ], "client": [ "MixinOptionsScreen", - "MixinWorldRenderer" + "MixinWorldRenderer", + "MixinFogRenderer" ], "server": [] } \ No newline at end of file