ElderGuardianParticleGroup.java

net.minecraft.client.particle.ElderGuardianParticleGroup

信息

  • 全限定名:net.minecraft.client.particle.ElderGuardianParticleGroup
  • 类型:public class
  • 包:net.minecraft.client.particle
  • 源码路径:src/main/java/net/minecraft/client/particle/ElderGuardianParticleGroup.java
  • 起始行号:L21
  • 继承:ParticleGroup
  • 职责:

    TODO

字段/常量

内部类/嵌套类型

  • net.minecraft.client.particle.ElderGuardianParticleGroup.ElderGuardianParticleRenderState

    • 类型: record
    • 修饰符: private
    • 源码定位: L37
    • 说明:

      TODO

  • net.minecraft.client.particle.ElderGuardianParticleGroup.State

    • 类型: record
    • 修饰符: private
    • 源码定位: L56
    • 说明:

      TODO

构造器

public ElderGuardianParticleGroup(ParticleEngine engine) @ L22

  • 构造器名:ElderGuardianParticleGroup
  • 源码定位:L22
  • 修饰符:public

参数:

  • engine: ParticleEngine

说明:

TODO

方法

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

public ParticleGroupRenderState extractRenderState(Frustum frustum, Camera camera, float partialTickTime) @ L26

  • 方法名:extractRenderState
  • 源码定位:L26
  • 返回类型:ParticleGroupRenderState
  • 修饰符:public

参数:

  • frustum: Frustum
  • camera: Camera
  • partialTickTime: float

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class ElderGuardianParticleGroup extends ParticleGroup<ElderGuardianParticle> {
    public ElderGuardianParticleGroup(ParticleEngine engine) {
        super(engine);
    }
 
    @Override
    public ParticleGroupRenderState extractRenderState(Frustum frustum, Camera camera, float partialTickTime) {
        return new ElderGuardianParticleGroup.State(
            this.particles
                .stream()
                .map(particle -> ElderGuardianParticleGroup.ElderGuardianParticleRenderState.fromParticle(particle, camera, partialTickTime))
                .toList()
        );
    }
 
    @OnlyIn(Dist.CLIENT)
    private record ElderGuardianParticleRenderState(Model<Unit> model, PoseStack poseStack, RenderType renderType, int color) {
        public static ElderGuardianParticleGroup.ElderGuardianParticleRenderState fromParticle(
            ElderGuardianParticle particle, Camera camera, float partialTickTime
        ) {
            float ageScale = (particle.age + partialTickTime) / particle.lifetime;
            float alpha = 0.05F + 0.5F * Mth.sin(ageScale * (float) Math.PI);
            int color = ARGB.colorFromFloat(alpha, 1.0F, 1.0F, 1.0F);
            PoseStack poseStack = new PoseStack();
            poseStack.pushPose();
            poseStack.mulPose(camera.rotation());
            poseStack.mulPose(Axis.XP.rotationDegrees(60.0F - 150.0F * ageScale));
            float scale = 0.42553192F;
            poseStack.scale(0.42553192F, -0.42553192F, -0.42553192F);
            poseStack.translate(0.0F, -0.56F, 3.5F);
            return new ElderGuardianParticleGroup.ElderGuardianParticleRenderState(particle.model, poseStack, particle.renderType, color);
        }
    }
 
    @OnlyIn(Dist.CLIENT)
    private record State(List<ElderGuardianParticleGroup.ElderGuardianParticleRenderState> states) implements ParticleGroupRenderState {
        @Override
        public void submit(SubmitNodeCollector submitNodeCollector, CameraRenderState camera) {
            for (ElderGuardianParticleGroup.ElderGuardianParticleRenderState state : this.states) {
                submitNodeCollector.submitModel(
                    state.model, Unit.INSTANCE, state.poseStack, state.renderType, 15728880, OverlayTexture.NO_OVERLAY, state.color, null, 0, null
                );
            }
        }
    }
}

引用的其他类