package net.minecraft.client.particle; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.core.particles.SimpleParticleType; import net.minecraft.util.Mth; import net.minecraft.util.RandomSource; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; @OnlyIn(Dist.CLIENT) public class GlowParticle extends TextureSheetParticle { static final RandomSource RANDOM = RandomSource.create(); private final SpriteSet sprites; GlowParticle( ClientLevel p_172136_, double p_172137_, double p_172138_, double p_172139_, double p_172140_, double p_172141_, double p_172142_, SpriteSet p_172143_ ) { super(p_172136_, p_172137_, p_172138_, p_172139_, p_172140_, p_172141_, p_172142_); this.friction = 0.96F; this.speedUpWhenYMotionIsBlocked = true; this.sprites = p_172143_; this.quadSize *= 0.75F; this.hasPhysics = false; this.setSpriteFromAge(p_172143_); } @Override public ParticleRenderType getRenderType() { return ParticleRenderType.PARTICLE_SHEET_TRANSLUCENT; } @Override public int getLightColor(float p_172146_) { float f = (this.age + p_172146_) / this.lifetime; f = Mth.clamp(f, 0.0F, 1.0F); int i = super.getLightColor(p_172146_); int j = i & 0xFF; int k = i >> 16 & 0xFF; j += (int)(f * 15.0F * 16.0F); if (j > 240) { j = 240; } return j | k << 16; } @Override public void tick() { super.tick(); this.setSpriteFromAge(this.sprites); } @OnlyIn(Dist.CLIENT) public static class ElectricSparkProvider implements ParticleProvider { private final double SPEED_FACTOR = 0.25; private final SpriteSet sprite; public ElectricSparkProvider(SpriteSet p_172151_) { this.sprite = p_172151_; } public Particle createParticle( SimpleParticleType p_172162_, ClientLevel p_172163_, double p_172164_, double p_172165_, double p_172166_, double p_172167_, double p_172168_, double p_172169_ ) { GlowParticle glowparticle = new GlowParticle(p_172163_, p_172164_, p_172165_, p_172166_, 0.0, 0.0, 0.0, this.sprite); glowparticle.setColor(1.0F, 0.9F, 1.0F); glowparticle.setParticleSpeed(p_172167_ * 0.25, p_172168_ * 0.25, p_172169_ * 0.25); int i = 2; int j = 4; glowparticle.setLifetime(p_172163_.random.nextInt(2) + 2); return glowparticle; } } @OnlyIn(Dist.CLIENT) public static class GlowSquidProvider implements ParticleProvider { private final SpriteSet sprite; public GlowSquidProvider(SpriteSet p_172172_) { this.sprite = p_172172_; } public Particle createParticle( SimpleParticleType p_172183_, ClientLevel p_172184_, double p_172185_, double p_172186_, double p_172187_, double p_172188_, double p_172189_, double p_172190_ ) { GlowParticle glowparticle = new GlowParticle( p_172184_, p_172185_, p_172186_, p_172187_, 0.5 - GlowParticle.RANDOM.nextDouble(), p_172189_, 0.5 - GlowParticle.RANDOM.nextDouble(), this.sprite ); if (p_172184_.random.nextBoolean()) { glowparticle.setColor(0.6F, 1.0F, 0.8F); } else { glowparticle.setColor(0.08F, 0.4F, 0.4F); } glowparticle.yd *= 0.2F; if (p_172188_ == 0.0 && p_172190_ == 0.0) { glowparticle.xd *= 0.1F; glowparticle.zd *= 0.1F; } glowparticle.setLifetime((int)(8.0 / (p_172184_.random.nextDouble() * 0.8 + 0.2))); return glowparticle; } } @OnlyIn(Dist.CLIENT) public static class ScrapeProvider implements ParticleProvider { private final double SPEED_FACTOR = 0.01; private final SpriteSet sprite; public ScrapeProvider(SpriteSet p_172194_) { this.sprite = p_172194_; } public Particle createParticle( SimpleParticleType p_172205_, ClientLevel p_172206_, double p_172207_, double p_172208_, double p_172209_, double p_172210_, double p_172211_, double p_172212_ ) { GlowParticle glowparticle = new GlowParticle(p_172206_, p_172207_, p_172208_, p_172209_, 0.0, 0.0, 0.0, this.sprite); if (p_172206_.random.nextBoolean()) { glowparticle.setColor(0.29F, 0.58F, 0.51F); } else { glowparticle.setColor(0.43F, 0.77F, 0.62F); } glowparticle.setParticleSpeed(p_172210_ * 0.01, p_172211_ * 0.01, p_172212_ * 0.01); int i = 10; int j = 40; glowparticle.setLifetime(p_172206_.random.nextInt(30) + 10); return glowparticle; } } @OnlyIn(Dist.CLIENT) public static class WaxOffProvider implements ParticleProvider { private final double SPEED_FACTOR = 0.01; private final SpriteSet sprite; public WaxOffProvider(SpriteSet p_172216_) { this.sprite = p_172216_; } public Particle createParticle( SimpleParticleType p_172227_, ClientLevel p_172228_, double p_172229_, double p_172230_, double p_172231_, double p_172232_, double p_172233_, double p_172234_ ) { GlowParticle glowparticle = new GlowParticle(p_172228_, p_172229_, p_172230_, p_172231_, 0.0, 0.0, 0.0, this.sprite); glowparticle.setColor(1.0F, 0.9F, 1.0F); glowparticle.setParticleSpeed(p_172232_ * 0.01 / 2.0, p_172233_ * 0.01, p_172234_ * 0.01 / 2.0); int i = 10; int j = 40; glowparticle.setLifetime(p_172228_.random.nextInt(30) + 10); return glowparticle; } } @OnlyIn(Dist.CLIENT) public static class WaxOnProvider implements ParticleProvider { private final double SPEED_FACTOR = 0.01; private final SpriteSet sprite; public WaxOnProvider(SpriteSet p_172238_) { this.sprite = p_172238_; } public Particle createParticle( SimpleParticleType p_172249_, ClientLevel p_172250_, double p_172251_, double p_172252_, double p_172253_, double p_172254_, double p_172255_, double p_172256_ ) { GlowParticle glowparticle = new GlowParticle(p_172250_, p_172251_, p_172252_, p_172253_, 0.0, 0.0, 0.0, this.sprite); glowparticle.setColor(0.91F, 0.55F, 0.08F); glowparticle.setParticleSpeed(p_172254_ * 0.01 / 2.0, p_172255_ * 0.01, p_172256_ * 0.01 / 2.0); int i = 10; int j = 40; glowparticle.setLifetime(p_172250_.random.nextInt(30) + 10); return glowparticle; } } }