LightmapRenderStateExtractor.java

net.minecraft.client.renderer.LightmapRenderStateExtractor

信息

  • 全限定名:net.minecraft.client.renderer.LightmapRenderStateExtractor
  • 类型:public class
  • 包:net.minecraft.client.renderer
  • 源码路径:src/main/java/net/minecraft/client/renderer/LightmapRenderStateExtractor.java
  • 起始行号:L22
  • 职责:

    TODO

字段/常量

  • WHITE

    • 类型: Vector3fc
    • 修饰符: public static final
    • 源码定位: L23
    • 说明:

      TODO

  • needsUpdate

    • 类型: boolean
    • 修饰符: private
    • 源码定位: L24
    • 说明:

      TODO

  • renderer

    • 类型: GameRenderer
    • 修饰符: private final
    • 源码定位: L25
    • 说明:

      TODO

  • minecraft

    • 类型: Minecraft
    • 修饰符: private final
    • 源码定位: L26
    • 说明:

      TODO

  • randomSource

    • 类型: RandomSource
    • 修饰符: private final
    • 源码定位: L27
    • 说明:

      TODO

  • blockLightFlicker

    • 类型: float
    • 修饰符: private
    • 源码定位: L28
    • 说明:

      TODO

内部类/嵌套类型

构造器

public LightmapRenderStateExtractor(GameRenderer renderer, Minecraft minecraft) @ L30

  • 构造器名:LightmapRenderStateExtractor
  • 源码定位:L30
  • 修饰符:public

参数:

  • renderer: GameRenderer
  • minecraft: Minecraft

说明:

TODO

方法

下面的方法块按源码顺序生成。

public void tick() @ L35

  • 方法名:tick
  • 源码定位:L35
  • 返回类型:void
  • 修饰符:public

参数:

说明:

TODO

private float calculateDarknessScale(LivingEntity camera, float darknessGamma, float partialTickTime) @ L42

  • 方法名:calculateDarknessScale
  • 源码定位:L42
  • 返回类型:float
  • 修饰符:private

参数:

  • camera: LivingEntity
  • darknessGamma: float
  • partialTickTime: float

说明:

TODO

public void extract(LightmapRenderState renderState, float partialTicks) @ L47

  • 方法名:extract
  • 源码定位:L47
  • 返回类型:void
  • 修饰符:public

参数:

  • renderState: LightmapRenderState
  • partialTicks: float

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class LightmapRenderStateExtractor {
    public static final Vector3fc WHITE = new Vector3f(1.0F, 1.0F, 1.0F);
    private boolean needsUpdate;
    private final GameRenderer renderer;
    private final Minecraft minecraft;
    private final RandomSource randomSource = RandomSource.create();
    private float blockLightFlicker;
 
    public LightmapRenderStateExtractor(GameRenderer renderer, Minecraft minecraft) {
        this.renderer = renderer;
        this.minecraft = minecraft;
    }
 
    public void tick() {
        this.blockLightFlicker = this.blockLightFlicker
            + (this.randomSource.nextFloat() - this.randomSource.nextFloat()) * this.randomSource.nextFloat() * this.randomSource.nextFloat() * 0.1F;
        this.blockLightFlicker *= 0.9F;
        this.needsUpdate = true;
    }
 
    private float calculateDarknessScale(LivingEntity camera, float darknessGamma, float partialTickTime) {
        float darkness = 0.45F * darknessGamma;
        return Math.max(0.0F, Mth.cos((camera.tickCount - partialTickTime) * (float) Math.PI * 0.025F) * darkness);
    }
 
    public void extract(LightmapRenderState renderState, float partialTicks) {
        renderState.needsUpdate = this.needsUpdate;
        if (this.needsUpdate) {
            ClientLevel level = this.minecraft.level;
            LocalPlayer player = this.minecraft.player;
            if (level != null && player != null) {
                ProfilerFiller profiler = Profiler.get();
                profiler.push("lightmap");
                Camera camera = this.renderer.getMainCamera();
                renderState.blockFactor = this.blockLightFlicker + 1.4F;
                renderState.blockLightTint = ARGB.vector3fFromRGB24(camera.attributeProbe().getValue(EnvironmentAttributes.BLOCK_LIGHT_TINT, partialTicks));
                renderState.skyFactor = camera.attributeProbe().getValue(EnvironmentAttributes.SKY_LIGHT_FACTOR, partialTicks);
                renderState.skyLightColor = ARGB.vector3fFromRGB24(camera.attributeProbe().getValue(EnvironmentAttributes.SKY_LIGHT_COLOR, partialTicks));
                EndFlashState endFlashState = level.endFlashState();
                if (endFlashState != null && !this.minecraft.options.hideLightningFlash().get()) {
                    float intensity = endFlashState.getIntensity(partialTicks);
                    if (this.minecraft.gui.getBossOverlay().shouldCreateWorldFog()) {
                        renderState.skyFactor += intensity / 3.0F;
                    } else {
                        renderState.skyFactor += intensity;
                    }
                }
 
                renderState.ambientColor = ARGB.vector3fFromRGB24(camera.attributeProbe().getValue(EnvironmentAttributes.AMBIENT_LIGHT_COLOR, partialTicks));
                float brightnessOption = this.minecraft.options.gamma().get().floatValue();
                float darknessEffectScaleOption = this.minecraft.options.darknessEffectScale().get().floatValue();
                float darknessEffectBrightnessModifier = player.getEffectBlendFactor(MobEffects.DARKNESS, partialTicks) * darknessEffectScaleOption;
                renderState.brightness = Math.max(0.0F, brightnessOption - darknessEffectBrightnessModifier);
                renderState.darknessEffectScale = this.calculateDarknessScale(player, darknessEffectBrightnessModifier, partialTicks)
                    * darknessEffectScaleOption;
                float waterVision = player.getWaterVision();
                if (player.hasEffect(MobEffects.NIGHT_VISION)) {
                    renderState.nightVisionEffectIntensity = GameRenderer.getNightVisionScale(player, partialTicks);
                } else if (waterVision > 0.0F && player.hasEffect(MobEffects.CONDUIT_POWER)) {
                    renderState.nightVisionEffectIntensity = waterVision;
                } else {
                    renderState.nightVisionEffectIntensity = 0.0F;
                }
 
                renderState.nightVisionColor = ARGB.vector3fFromRGB24(camera.attributeProbe().getValue(EnvironmentAttributes.NIGHT_VISION_COLOR, partialTicks));
                renderState.bossOverlayWorldDarkening = this.renderer.getBossOverlayWorldDarkening(partialTicks);
                profiler.pop();
                this.needsUpdate = false;
            }
        }
    }
}

引用的其他类

  • Minecraft

    • 引用位置: 参数/字段
  • GameRenderer

    • 引用位置: 参数/字段/方法调用
    • 关联成员: GameRenderer.getNightVisionScale()
  • LightmapRenderState

    • 引用位置: 参数
  • ARGB

    • 引用位置: 方法调用
    • 关联成员: ARGB.vector3fFromRGB24()
  • Mth

    • 引用位置: 方法调用
    • 关联成员: Mth.cos()
  • RandomSource

    • 引用位置: 字段/方法调用
    • 关联成员: RandomSource.create()
  • Profiler

    • 引用位置: 方法调用
    • 关联成员: Profiler.get()
  • LivingEntity

    • 引用位置: 参数