diff --git a/src/main/java/me/juancarloscp52/bedrockify/client/features/bedrockShading/BedrockSunGlareShading.java b/src/main/java/me/juancarloscp52/bedrockify/client/features/bedrockShading/BedrockSunGlareShading.java index f3595b3..9856c5c 100644 --- a/src/main/java/me/juancarloscp52/bedrockify/client/features/bedrockShading/BedrockSunGlareShading.java +++ b/src/main/java/me/juancarloscp52/bedrockify/client/features/bedrockShading/BedrockSunGlareShading.java @@ -36,6 +36,7 @@ public final class BedrockSunGlareShading { private ShaderState shaderState = ShaderState.UNSPECIFIED; private float skyAttenuation; private float sunAngleDiff; + private float sunRadiusDelta; private final Vector3f sunVector3f; private final MinecraftClient client; @@ -241,6 +242,24 @@ public void updateAngleDiff() { this.sunAngleDiff = Math.clamp(clampMin, clampMax, (Math.safeAcos(cameraVec3f.dot(this.sunVector3f)) - 0.15f) * 2.f + sunSetRiseFactor); } + public void updateSunRadiusDelta(float tickDelta){ + if(MinecraftClient.getInstance().world == null) + return; + + final float rainGradient = MinecraftClient.getInstance().world.getRainGradient(tickDelta); + if (MathHelper.approximatelyEquals(rainGradient, 1f) || !this.shouldApplyShading()) { + this.sunRadiusDelta = 1f; + return; + } + + this.updateAngleDiff(); + this.sunRadiusDelta = this.getSunAngleDiff() + rainGradient; + } + + public float getSunRadiusDelta() { + return this.sunRadiusDelta; + } + public float getSunAngleDiff() { return this.sunAngleDiff; } diff --git a/src/main/java/me/juancarloscp52/bedrockify/mixin/client/features/bedrockShading/sunGlare/ClientWorldMixin.java b/src/main/java/me/juancarloscp52/bedrockify/mixin/client/features/bedrockShading/sunGlare/ClientWorldMixin.java index 79654ff..dad3b66 100644 --- a/src/main/java/me/juancarloscp52/bedrockify/mixin/client/features/bedrockShading/sunGlare/ClientWorldMixin.java +++ b/src/main/java/me/juancarloscp52/bedrockify/mixin/client/features/bedrockShading/sunGlare/ClientWorldMixin.java @@ -44,4 +44,11 @@ public abstract class ClientWorldMixin { return original.multiply(multiplierRed, multiplierGreen, multiplierBlue); } + + @ModifyReturnValue(method = "getCloudsColor", at = @At("RETURN")) + private Vec3d bedrockify$modifyCloudsColor(Vec3d original) { + BedrockSunGlareShading sunGlareShading = BedrockifyClient.getInstance().bedrockSunGlareShading; + return original.multiply(MathHelper.clampedLerp(0.8d, 1.0d, sunGlareShading.getSunRadiusDelta())); + } + } diff --git a/src/main/java/me/juancarloscp52/bedrockify/mixin/client/features/bedrockShading/sunGlare/WorldRendererMixin.java b/src/main/java/me/juancarloscp52/bedrockify/mixin/client/features/bedrockShading/sunGlare/WorldRendererMixin.java index 0b4eb33..194140c 100644 --- a/src/main/java/me/juancarloscp52/bedrockify/mixin/client/features/bedrockShading/sunGlare/WorldRendererMixin.java +++ b/src/main/java/me/juancarloscp52/bedrockify/mixin/client/features/bedrockShading/sunGlare/WorldRendererMixin.java @@ -1,13 +1,11 @@ package me.juancarloscp52.bedrockify.mixin.client.features.bedrockShading.sunGlare; -import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import me.juancarloscp52.bedrockify.client.BedrockifyClient; import me.juancarloscp52.bedrockify.client.features.bedrockShading.BedrockSunGlareShading; import net.minecraft.client.MinecraftClient; import net.minecraft.client.render.Camera; import net.minecraft.client.render.WorldRenderer; import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.Vec3d; import org.joml.Matrix4f; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -22,8 +20,6 @@ public abstract class WorldRendererMixin { @Shadow private @Final MinecraftClient client; - @Unique - private float sunRadiusDelta = 1f; @Unique private static final String RENDER_SKY_METHOD_SIGNATURE = "renderSky(Lorg/joml/Matrix4f;Lorg/joml/Matrix4f;FLnet/minecraft/client/render/Camera;ZLjava/lang/Runnable;)V"; @@ -43,16 +39,8 @@ public abstract class WorldRendererMixin { if (this.client.world == null) { return; } - final BedrockSunGlareShading sunGlareShading = BedrockifyClient.getInstance().bedrockSunGlareShading; - final float rainGradient = this.client.world.getRainGradient(tickDelta); - if (MathHelper.approximatelyEquals(rainGradient, 1f) || !sunGlareShading.shouldApplyShading()) { - this.sunRadiusDelta = 1f; - return; - } - - sunGlareShading.updateAngleDiff(); - this.sunRadiusDelta = sunGlareShading.getSunAngleDiff() + rainGradient; + sunGlareShading.updateSunRadiusDelta(tickDelta); } /** @@ -61,24 +49,21 @@ public abstract class WorldRendererMixin { */ @ModifyConstant(method = RENDER_SKY_METHOD_SIGNATURE, constant = @Constant(floatValue = 30.0f, ordinal = 0)) private float bedrockify$modifySunRadius(float original) { - if (!BedrockifyClient.getInstance().bedrockSunGlareShading.shouldApplyShading() || this.sunRadiusDelta >= 1f) { + BedrockSunGlareShading sunGlareShading = BedrockifyClient.getInstance().bedrockSunGlareShading; + if (!sunGlareShading.shouldApplyShading() || sunGlareShading.getSunRadiusDelta() >= 1f) { return original; } - return MathHelper.clampedLerp(original * 1.3f, original, this.sunRadiusDelta); + return MathHelper.clampedLerp(original * 1.3f, original, sunGlareShading.getSunRadiusDelta()); } - @ModifyArgs(method = "renderSky", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/systems/RenderSystem;setShaderColor(FFFF)V", ordinal = 2)) private void bedrockify$modifySunIntensity(Args args){ - float value = MathHelper.clampedLerp(2.0f, 1.0f, this.sunRadiusDelta); + BedrockSunGlareShading sunGlareShading = BedrockifyClient.getInstance().bedrockSunGlareShading; + float value = MathHelper.clampedLerp(2.0f, 1.0f, sunGlareShading.getSunRadiusDelta()); args.set(0,value); args.set(1,value); args.set(2,value); } - @ModifyExpressionValue(method = "renderClouds", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/world/ClientWorld;getCloudsColor(F)Lnet/minecraft/util/math/Vec3d;")) - private Vec3d bedrockify$darkenClouds(Vec3d original){ - return original.multiply(MathHelper.clampedLerp(0.8d, 1.0d, this.sunRadiusDelta)); - } }