From 62c55a62881f98f3571fd17096757d5823d7b249 Mon Sep 17 00:00:00 2001 From: ItsBlackGear Date: Sat, 23 Jul 2022 22:59:56 -0400 Subject: [PATCH] darkness! --- .../mixin/forge/client/FogRendererMixin.java | 80 ------------------- .../wildbackport/forge/WildBackportForge.java | 71 ++++++++++++++++ .../forge/WildBackportForgeClient.java | 55 ------------- .../main/resources/wildbackport.mixins.json | 1 - 4 files changed, 71 insertions(+), 136 deletions(-) delete mode 100644 forge/src/main/java/com/cursedcauldron/wildbackport/core/mixin/forge/client/FogRendererMixin.java delete mode 100644 forge/src/main/java/com/cursedcauldron/wildbackport/forge/WildBackportForgeClient.java diff --git a/forge/src/main/java/com/cursedcauldron/wildbackport/core/mixin/forge/client/FogRendererMixin.java b/forge/src/main/java/com/cursedcauldron/wildbackport/core/mixin/forge/client/FogRendererMixin.java deleted file mode 100644 index 35ff8a8..0000000 --- a/forge/src/main/java/com/cursedcauldron/wildbackport/core/mixin/forge/client/FogRendererMixin.java +++ /dev/null @@ -1,80 +0,0 @@ -package com.cursedcauldron.wildbackport.core.mixin.forge.client; - -import com.cursedcauldron.wildbackport.common.effects.EffectFactor; -import com.cursedcauldron.wildbackport.common.registry.WBMobEffects; -import com.mojang.blaze3d.systems.RenderSystem; -import net.minecraft.client.Camera; -import net.minecraft.client.multiplayer.ClientLevel; -import net.minecraft.client.renderer.FogRenderer; -import net.minecraft.util.Mth; -import net.minecraft.world.effect.MobEffectInstance; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.level.material.FogType; -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.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(FogRenderer.class) -public class FogRendererMixin { - @Shadow private static float fogRed; - @Shadow private static float fogGreen; - @Shadow private static float fogBlue; - - @Inject(method = "setupColor", at = @At("TAIL")) - private static void applyDarknessColor(Camera camera, float partialTicks, ClientLevel level, int viewDistance, float skyDarkness, CallbackInfo ci) { - FogType type = camera.getFluidInCamera(); - - double colorModifier = (camera.getPosition().y - (double)level.getMinBuildHeight()) * level.getLevelData().getClearColorScale(); - if (camera.getEntity() instanceof LivingEntity living && living.hasEffect(WBMobEffects.DARKNESS.get())) { - MobEffectInstance effect = living.getEffect(WBMobEffects.DARKNESS.get()); - - if (effect != null) { - EffectFactor.Instance instance = EffectFactor.Instance.of(effect); - colorModifier = instance.getFactorCalculationData().isPresent() ? 1.0F - instance.getFactorCalculationData().get().lerp(living, partialTicks) : 0.0D; - } - } - - if (colorModifier < 1.0D && type != FogType.LAVA) { - if (colorModifier < 0.0D) { - colorModifier = 0.0D; - } - - colorModifier *= colorModifier; - fogRed = (float)((double)fogRed * colorModifier); - fogGreen = (float)((double)fogGreen * colorModifier); - fogBlue = (float)((double)fogBlue * colorModifier); - } - - if (skyDarkness > 0.0F) { - fogRed = fogRed * (1.0F - skyDarkness) + fogRed * 0.7F * skyDarkness; - fogGreen = fogGreen * (1.0F - skyDarkness) + fogGreen * 0.6F * skyDarkness; - fogBlue = fogBlue * (1.0F - skyDarkness) + fogBlue * 0.6F * skyDarkness; - } - - RenderSystem.clearColor(fogRed, fogGreen, fogBlue, 0.0F); - } - - @Inject(method = "setupFog(Lnet/minecraft/client/Camera;Lnet/minecraft/client/renderer/FogRenderer$FogMode;FZF)V", at = @At("TAIL"), remap = false) - private static void applyDarknessFog(Camera camera, FogRenderer.FogMode mode, float viewDistance, boolean thickFog, float partialTicks, CallbackInfo ci) { - FogType fogtype = camera.getFluidInCamera(); - - if (fogtype != FogType.WATER) { - if (camera.getEntity() instanceof LivingEntity living && living.hasEffect(WBMobEffects.DARKNESS.get())) { - MobEffectInstance effect = living.getEffect(WBMobEffects.DARKNESS.get()); - - if (effect != null) { - EffectFactor.Instance instance = EffectFactor.Instance.of(effect); - if (instance.getFactorCalculationData().isPresent()) { - float modifier = Mth.lerp(instance.getFactorCalculationData().get().lerp(living, partialTicks), viewDistance, 15.0F); - float start = mode == FogRenderer.FogMode.FOG_SKY ? 0.0F : modifier * 0.75F; - - RenderSystem.setShaderFogStart(start); - RenderSystem.setShaderFogEnd(modifier); - } - } - } - } - } -} \ No newline at end of file diff --git a/forge/src/main/java/com/cursedcauldron/wildbackport/forge/WildBackportForge.java b/forge/src/main/java/com/cursedcauldron/wildbackport/forge/WildBackportForge.java index 063985a..81cfeb8 100644 --- a/forge/src/main/java/com/cursedcauldron/wildbackport/forge/WildBackportForge.java +++ b/forge/src/main/java/com/cursedcauldron/wildbackport/forge/WildBackportForge.java @@ -3,17 +3,29 @@ package com.cursedcauldron.wildbackport.forge; import com.cursedcauldron.wildbackport.WildBackport; import com.cursedcauldron.wildbackport.client.ClientSetup; import com.cursedcauldron.wildbackport.common.CommonSetup; +import com.cursedcauldron.wildbackport.common.effects.EffectFactor; import com.cursedcauldron.wildbackport.common.registry.WBBiomes; +import com.cursedcauldron.wildbackport.common.registry.WBMobEffects; import com.cursedcauldron.wildbackport.common.worldgen.MangroveSwampSurface; import com.cursedcauldron.wildbackport.core.api.forge.EventBuses; +import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.datafixers.util.Pair; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.renderer.FogRenderer; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.level.Level; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.biome.Biomes; import net.minecraft.world.level.biome.Climate; +import net.minecraft.world.level.material.FogType; import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.EntityViewRenderEvent; +import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.fml.common.Mod; @@ -39,6 +51,9 @@ public class WildBackportForge { bus.addListener(this::terrablenderSetup); + MinecraftForge.EVENT_BUS.addListener(this::darknessFog); + MinecraftForge.EVENT_BUS.addListener(this::darknessFogColor); + WildBackport.bootstrap(); CommonSetup.onCommon(); DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> ClientSetup::onClient); @@ -56,4 +71,60 @@ public class WildBackportForge { }); SurfaceRuleManager.addSurfaceRules(SurfaceRuleManager.RuleCategory.OVERWORLD, WildBackport.MOD_ID, MangroveSwampSurface.makeRules()); } + + private void darknessFogColor(EntityViewRenderEvent.FogColors event) { + FogType type = event.getCamera().getFluidInCamera(); + Level level = event.getCamera().getEntity().getLevel(); + + if (level.isClientSide() && level instanceof ClientLevel client) { + + double colorModifier = (event.getCamera().getPosition().y - (double)client.getMinBuildHeight()) * client.getLevelData().getClearColorScale(); + if (event.getCamera().getEntity() instanceof LivingEntity living && living.hasEffect(WBMobEffects.DARKNESS.get())) { + MobEffectInstance effect = living.getEffect(WBMobEffects.DARKNESS.get()); + + if (effect != null) { + EffectFactor.Instance instance = EffectFactor.Instance.of(effect); + if (instance.getFactorCalculationData().isPresent()) { + colorModifier = 1.0F - instance.getFactorCalculationData().get().lerp(living, (float)event.getPartialTicks()); + } else { + colorModifier = 0.0D; + } + } + } + + if (colorModifier < 1.0D && type != FogType.LAVA) { + if (colorModifier < 0.0D) { + colorModifier = 0.0D; + } + + colorModifier *= colorModifier; + event.setRed((float)((double)event.getRed() * colorModifier)); + event.setGreen((float)((double)event.getGreen() * colorModifier)); + event.setBlue((float)((double)event.getBlue() * colorModifier)); + } + } + +// RenderSystem.clearColor(event.getRed(), event.getGreen(), event.getBlue(), 0.0F); + } + + private void darknessFog(EntityViewRenderEvent.RenderFogEvent event) { + FogType type = event.getCamera().getFluidInCamera(); + + if (type != FogType.WATER) { + if (event.getCamera().getEntity() instanceof LivingEntity living && living.hasEffect(WBMobEffects.DARKNESS.get())) { + MobEffectInstance effect = living.getEffect(WBMobEffects.DARKNESS.get()); + + if (effect != null) { + EffectFactor.Instance instance = EffectFactor.Instance.of(effect); + if (instance.getFactorCalculationData().isPresent()) { + float modifier = Mth.lerp(instance.getFactorCalculationData().get().lerp(living, (float)event.getPartialTicks()), event.getFarPlaneDistance(), 15.0F); + float start = event.getMode() == FogRenderer.FogMode.FOG_SKY ? 0.0F : modifier * 0.75F; + + RenderSystem.setShaderFogStart(start); + RenderSystem.setShaderFogEnd(modifier); + } + } + } + } + } } \ No newline at end of file diff --git a/forge/src/main/java/com/cursedcauldron/wildbackport/forge/WildBackportForgeClient.java b/forge/src/main/java/com/cursedcauldron/wildbackport/forge/WildBackportForgeClient.java deleted file mode 100644 index b234c7e..0000000 --- a/forge/src/main/java/com/cursedcauldron/wildbackport/forge/WildBackportForgeClient.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.cursedcauldron.wildbackport.forge; - -import com.cursedcauldron.wildbackport.WildBackport; -import com.cursedcauldron.wildbackport.client.ClientSetup; -import com.cursedcauldron.wildbackport.common.effects.EffectFactor; -import com.cursedcauldron.wildbackport.common.registry.WBMobEffects; -import com.cursedcauldron.wildbackport.core.api.forge.EventBuses; -import com.mojang.blaze3d.systems.RenderSystem; -import net.minecraft.client.renderer.FogRenderer; -import net.minecraft.util.Mth; -import net.minecraft.world.effect.MobEffectInstance; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.level.material.FogType; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.client.event.EntityViewRenderEvent; -import net.minecraftforge.eventbus.api.IEventBus; -import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; -import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; - -@OnlyIn(Dist.CLIENT) -public class WildBackportForgeClient { - public WildBackportForgeClient() { - IEventBus bus = EventBuses.getModEventBusOrThrow(WildBackport.MOD_ID); - - bus.addListener(this::setup); - bus.addListener(this::darknessFog); - } - - public void setup(FMLClientSetupEvent event) { - ClientSetup.onClient(); - ClientSetup.onPostClient(); - } - - public void darknessFog(EntityViewRenderEvent.RenderFogEvent event) { - FogType type = event.getCamera().getFluidInCamera(); - - if (type != FogType.WATER) { - if (event.getCamera().getEntity() instanceof LivingEntity living && living.hasEffect(WBMobEffects.DARKNESS.get())) { - MobEffectInstance effect = living.getEffect(WBMobEffects.DARKNESS.get()); - - if (effect != null) { - EffectFactor.Instance instance = EffectFactor.Instance.of(effect); - if (instance.getFactorCalculationData().isPresent()) { - float modifier = Mth.lerp(instance.getFactorCalculationData().get().lerp(living, (float)event.getPartialTicks()), event.getFarPlaneDistance(), 15.0F); - float start = event.getMode() == FogRenderer.FogMode.FOG_SKY ? 0.0F : modifier * 0.75F; - - RenderSystem.setShaderFogStart(start); - RenderSystem.setShaderFogEnd(modifier); - } - } - } - } - } -} diff --git a/forge/src/main/resources/wildbackport.mixins.json b/forge/src/main/resources/wildbackport.mixins.json index 7893590..096db5b 100644 --- a/forge/src/main/resources/wildbackport.mixins.json +++ b/forge/src/main/resources/wildbackport.mixins.json @@ -6,7 +6,6 @@ "mixins": [ ], "client": [ - "client.FogRendererMixin" ], "injectors": { "defaultRequire": 1