minecraft-src/net/minecraft/client/renderer/fog/environment/AtmosphericFogEnvironment.java
2025-09-18 12:27:44 +00:00

42 lines
1.9 KiB
Java

package net.minecraft.client.renderer.fog.environment;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.DeltaTracker;
import net.minecraft.client.Minecraft;
import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.client.renderer.fog.FogData;
import net.minecraft.core.BlockPos;
import net.minecraft.util.Mth;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.level.LightLayer;
import net.minecraft.world.level.biome.Biome;
import net.minecraft.world.level.material.FogType;
import org.jetbrains.annotations.Nullable;
@Environment(EnvType.CLIENT)
public class AtmosphericFogEnvironment extends AirBasedFogEnvironment {
private static final int MIN_RAIN_FOG_SKY_LIGHT = 8;
private static final float RAIN_FOG_START_OFFSET = -160.0F;
private static final float RAIN_FOG_END_OFFSET = -256.0F;
private float rainFogMultiplier;
@Override
public void setupFog(FogData fogData, Entity entity, BlockPos pos, ClientLevel level, float renderDistance, DeltaTracker deltaTracker) {
Biome biome = level.getBiome(pos).value();
float f = deltaTracker.getGameTimeDeltaTicks();
boolean bl = biome.hasPrecipitation();
float g = Mth.clamp((level.getLightEngine().getLayerListener(LightLayer.SKY).getLightValue(pos) - 8.0F) / 7.0F, 0.0F, 1.0F);
float h = level.getRainLevel(deltaTracker.getGameTimeDeltaPartialTick(false)) * g * (bl ? 1.0F : 0.5F);
this.rainFogMultiplier = this.rainFogMultiplier + (h - this.rainFogMultiplier) * f * 0.2F;
fogData.environmentalStart = this.rainFogMultiplier * -160.0F;
fogData.environmentalEnd = 1024.0F + -256.0F * this.rainFogMultiplier;
fogData.skyEnd = renderDistance;
fogData.cloudEnd = Minecraft.getInstance().options.cloudRange().get() * 16;
}
@Override
public boolean isApplicable(@Nullable FogType fogType, Entity entity) {
return fogType == FogType.ATMOSPHERIC;
}
}