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
);
}
}
}
}引用的其他类
-
- 引用位置:
构造调用 - 关联成员:
PoseStack()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Minecraft.getInstance()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
继承
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
返回值
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Mth.lerp()
- 引用位置: