minecraft-src/net/minecraft/client/particle/TrackingEmitter.java
2025-07-04 03:15:13 +03:00

52 lines
1.7 KiB
Java

package net.minecraft.client.particle;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.core.particles.ParticleOptions;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.phys.Vec3;
@Environment(EnvType.CLIENT)
public class TrackingEmitter extends NoRenderParticle {
private final Entity entity;
private int life;
private final int lifeTime;
private final ParticleOptions particleType;
public TrackingEmitter(ClientLevel level, Entity entity, ParticleOptions particleType) {
this(level, entity, particleType, 3);
}
public TrackingEmitter(ClientLevel level, Entity entity, ParticleOptions particleType, int lifetime) {
this(level, entity, particleType, lifetime, entity.getDeltaMovement());
}
private TrackingEmitter(ClientLevel level, Entity entity, ParticleOptions particleType, int lifetime, Vec3 speedVector) {
super(level, entity.getX(), entity.getY(0.5), entity.getZ(), speedVector.x, speedVector.y, speedVector.z);
this.entity = entity;
this.lifeTime = lifetime;
this.particleType = particleType;
this.tick();
}
@Override
public void tick() {
for (int i = 0; i < 16; i++) {
double d = this.random.nextFloat() * 2.0F - 1.0F;
double e = this.random.nextFloat() * 2.0F - 1.0F;
double f = this.random.nextFloat() * 2.0F - 1.0F;
if (!(d * d + e * e + f * f > 1.0)) {
double g = this.entity.getX(d / 4.0);
double h = this.entity.getY(0.5 + e / 4.0);
double j = this.entity.getZ(f / 4.0);
this.level.addParticle(this.particleType, g, h, j, d, e + 0.2, f);
}
}
this.life++;
if (this.life >= this.lifeTime) {
this.remove();
}
}
}