From a6b3a7ea5ac265aa122ab888b345a8edae113acd Mon Sep 17 00:00:00 2001 From: tom lee Date: Sat, 1 Jan 2022 13:51:35 +0800 Subject: [PATCH] Update core and fixed MixinFogs and added underwater fog --- .../minecraft/MinecraftRenderWrapper.java | 11 ++++++++++- core | 2 +- .../lod/fabric/mixins/MixinFogRenderer.java | 17 +++++++++++++++-- 3 files changed, 26 insertions(+), 4 deletions(-) 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 4afafe9ee..faaf22c27 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 @@ -30,11 +30,13 @@ import com.seibel.lod.common.wrappers.chunk.ChunkPosWrapper; import net.minecraft.client.Camera; import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.FogRenderer; import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.client.renderer.chunk.ChunkRenderDispatcher.CompiledChunk; import net.minecraft.core.BlockPos; import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.level.material.FogType; import net.minecraft.world.phys.Vec3; @@ -98,10 +100,12 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper } @Override - public Color getFogColor() { + public Color getFogColor(float partialTicks) { + FogRenderer.setupColor(GAME_RENDERER.getMainCamera(), partialTicks, MC.level, 1, GAME_RENDERER.getDarkenWorldAmount(partialTicks)); float[] colorValues = RenderSystem.getShaderFogColor(); return new Color(colorValues[0], colorValues[1], colorValues[2], colorValues[3]); } + // getUnderWaterFogColor() is the same as getFogColor() @Override public Color getSkyColor() { @@ -317,4 +321,9 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper return glFormat; } + + @Override + public boolean isFogStateInUnderWater() { + return GAME_RENDERER.getMainCamera().getFluidInCamera() == FogType.WATER; + } } diff --git a/core b/core index 0ce249ab1..4db3b7b72 160000 --- a/core +++ b/core @@ -1 +1 @@ -Subproject commit 0ce249ab17a98cd9b4b105c56392b6161545fadd +Subproject commit 4db3b7b72932b72d51f0bddb95451cbb6af417ee 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 4b3172176..4d2204fe0 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 @@ -5,12 +5,18 @@ 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.common.wrappers.minecraft.MinecraftRenderWrapper; 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.world.effect.MobEffects; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.level.material.FogType; @Mixin(FogRenderer.class) public class MixinFogRenderer { @@ -18,7 +24,14 @@ public class MixinFogRenderer { @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()) - FogRenderer.setupNoFog(); + FogType fogTypes = camera.getFluidInCamera(); + Entity entity = camera.getEntity(); + boolean isUnderWater = (entity instanceof LivingEntity) && ((LivingEntity)entity).hasEffect(MobEffects.BLINDNESS); + if (!isUnderWater) { + if (fogMode == FogMode.FOG_TERRAIN && fogTypes == FogType.NONE && CONFIG.client().graphics().fogQuality().getDisableVanillaFog()) { + RenderSystem.setShaderFogStart(Float.MAX_VALUE); + RenderSystem.setShaderFogEnd(Float.MAX_VALUE); + } + } } }