-
-
Notifications
You must be signed in to change notification settings - Fork 65
/
MixinBackgroundRenderer.java
45 lines (42 loc) · 2.43 KB
/
MixinBackgroundRenderer.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package me.flashyreese.mods.sodiumextra.mixin.fog;
import com.mojang.blaze3d.systems.RenderSystem;
import me.flashyreese.mods.sodiumextra.client.SodiumExtraClientMod;
import net.minecraft.client.render.BackgroundRenderer;
import net.minecraft.client.render.Camera;
import net.minecraft.client.render.CameraSubmersionType;
import net.minecraft.entity.Entity;
import org.jetbrains.annotations.Nullable;
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(BackgroundRenderer.class)
public abstract class MixinBackgroundRenderer {
@Shadow
@Nullable
private static BackgroundRenderer.@Nullable StatusEffectFogModifier getFogModifier(Entity entity, float tickDelta) {
return null;
}
@Inject(method = "applyFog", at = @At(value = "TAIL"))
private static void applyFog(Camera camera, BackgroundRenderer.FogType fogType, float viewDistance, boolean thickFog, float tickDelta, CallbackInfo ci) {
Entity entity = camera.getFocusedEntity();
SodiumExtraClientMod.options().renderSettings.dimensionFogDistanceMap.putIfAbsent(entity.getWorld().getDimension().effects(), 0);
int fogDistance = SodiumExtraClientMod.options().renderSettings.multiDimensionFogControl ? SodiumExtraClientMod.options().renderSettings.dimensionFogDistanceMap.get(entity.getWorld().getDimension().effects()) : SodiumExtraClientMod.options().renderSettings.fogDistance;
BackgroundRenderer.StatusEffectFogModifier statusEffectFogModifier = getFogModifier(entity, tickDelta);
if (fogDistance == 0 || statusEffectFogModifier != null) {
return;
}
if (camera.getSubmersionType() == CameraSubmersionType.NONE && (thickFog || fogType == BackgroundRenderer.FogType.FOG_TERRAIN)) {
float fogStart = (float) SodiumExtraClientMod.options().renderSettings.fogStart / 100;
if (fogDistance == 33) {
RenderSystem.setShaderFogColor(1f, 1f, 1f, 0f);
//RenderSystem.setShaderFogStart(Short.MAX_VALUE - 1 * fogStart);
//RenderSystem.setShaderFogEnd(Short.MAX_VALUE);
} else {
RenderSystem.setShaderFogStart(fogDistance * 16 * fogStart);
RenderSystem.setShaderFogEnd((fogDistance + 1) * 16);
}
}
}
}