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.SimpleParticleType; import net.minecraft.util.LightCoordsUtil; import net.minecraft.util.RandomSource; @Environment(EnvType.CLIENT) public class SoulParticle extends RisingParticle { private final SpriteSet sprites; protected boolean isGlowing; private SoulParticle( final ClientLevel level, final double x, final double y, final double z, final double xd, final double yd, final double zd, final SpriteSet sprites ) { super(level, x, y, z, xd, yd, zd, sprites.first()); this.sprites = sprites; this.scale(1.5F); this.setSpriteFromAge(sprites); } @Override public int getLightCoords(final float a) { return this.isGlowing ? LightCoordsUtil.withBlock(super.getLightCoords(a), 15) : super.getLightCoords(a); } @Override public SingleQuadParticle.Layer getLayer() { return SingleQuadParticle.Layer.TRANSLUCENT; } @Override public void tick() { super.tick(); this.setSpriteFromAge(this.sprites); } @Environment(EnvType.CLIENT) public static class EmissiveProvider implements ParticleProvider { private final SpriteSet sprite; public EmissiveProvider(final SpriteSet sprite) { this.sprite = sprite; } public Particle createParticle( final SimpleParticleType options, final ClientLevel level, final double x, final double y, final double z, final double xAux, final double yAux, final double zAux, final RandomSource random ) { SoulParticle particle = new SoulParticle(level, x, y, z, xAux, yAux, zAux, this.sprite); particle.setAlpha(1.0F); particle.isGlowing = true; return particle; } } @Environment(EnvType.CLIENT) public static class Provider implements ParticleProvider { private final SpriteSet sprite; public Provider(final SpriteSet sprite) { this.sprite = sprite; } public Particle createParticle( final SimpleParticleType options, final ClientLevel level, final double x, final double y, final double z, final double xAux, final double yAux, final double zAux, final RandomSource random ) { SoulParticle particle = new SoulParticle(level, x, y, z, xAux, yAux, zAux, this.sprite); particle.setAlpha(1.0F); return particle; } } }