ItemPickupParticleGroup.java

net.minecraft.client.particle.ItemPickupParticleGroup

信息

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

    TODO

字段/常量

内部类/嵌套类型

  • net.minecraft.client.particle.ItemPickupParticleGroup.ParticleInstance

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

      TODO

  • net.minecraft.client.particle.ItemPickupParticleGroup.State

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

      TODO

构造器

public ItemPickupParticleGroup(ParticleEngine engine) @ L20

  • 构造器名:ItemPickupParticleGroup
  • 源码定位:L20
  • 修饰符:public

参数:

  • engine: ParticleEngine

说明:

TODO

方法

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

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

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

参数:

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

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class ItemPickupParticleGroup extends ParticleGroup<ItemPickupParticle> {
    public ItemPickupParticleGroup(ParticleEngine engine) {
        super(engine);
    }
 
    @Override
    public ParticleGroupRenderState extractRenderState(Frustum frustum, Camera camera, float partialTickTime) {
        return new ItemPickupParticleGroup.State(
            this.particles.stream().map(particle -> ItemPickupParticleGroup.ParticleInstance.fromParticle(particle, camera, partialTickTime)).toList()
        );
    }
 
    @OnlyIn(Dist.CLIENT)
    private record ParticleInstance(EntityRenderState itemRenderState, double xOffset, double yOffset, double zOffset) {
        public static ItemPickupParticleGroup.ParticleInstance fromParticle(ItemPickupParticle particle, Camera camera, float partialTickTime) {
            float time = (particle.life + partialTickTime) / 3.0F;
            time *= time;
            double xt = Mth.lerp((double)partialTickTime, particle.targetXOld, particle.targetX);
            double yt = Mth.lerp((double)partialTickTime, particle.targetYOld, particle.targetY);
            double zt = Mth.lerp((double)partialTickTime, particle.targetZOld, particle.targetZ);
            double xx = Mth.lerp((double)time, particle.itemRenderState.x, xt);
            double yy = Mth.lerp((double)time, particle.itemRenderState.y, yt);
            double zz = Mth.lerp((double)time, particle.itemRenderState.z, zt);
            Vec3 pos = camera.position();
            return new ItemPickupParticleGroup.ParticleInstance(particle.itemRenderState, xx - pos.x(), yy - pos.y(), zz - pos.z());
        }
    }
 
    @OnlyIn(Dist.CLIENT)
    private record State(List<ItemPickupParticleGroup.ParticleInstance> instances) implements ParticleGroupRenderState {
        @Override
        public void submit(SubmitNodeCollector submitNodeCollector, CameraRenderState camera) {
            PoseStack poseStack = new PoseStack();
            EntityRenderDispatcher entityRenderDispatcher = Minecraft.getInstance().getEntityRenderDispatcher();
 
            for (ItemPickupParticleGroup.ParticleInstance instance : this.instances) {
                entityRenderDispatcher.submit(
                    instance.itemRenderState, camera, instance.xOffset, instance.yOffset, instance.zOffset, poseStack, submitNodeCollector
                );
            }
        }
    }
}

引用的其他类