package net.minecraft.client.particle; import java.util.Optional; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.core.particles.ParticleGroup; 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 SuspendedParticle extends TextureSheetParticle { SuspendedParticle(ClientLevel p_172403_, SpriteSet p_172404_, double p_172405_, double p_172406_, double p_172407_) { super(p_172403_, p_172405_, p_172406_ - 0.125, p_172407_); this.setSize(0.01F, 0.01F); this.pickSprite(p_172404_); this.quadSize = this.quadSize * (this.random.nextFloat() * 0.6F + 0.2F); this.lifetime = (int)(16.0 / (Math.random() * 0.8 + 0.2)); this.hasPhysics = false; this.friction = 1.0F; this.gravity = 0.0F; } SuspendedParticle( ClientLevel p_172409_, SpriteSet p_172410_, double p_172411_, double p_172412_, double p_172413_, double p_172414_, double p_172415_, double p_172416_ ) { super(p_172409_, p_172411_, p_172412_ - 0.125, p_172413_, p_172414_, p_172415_, p_172416_); this.setSize(0.01F, 0.01F); this.pickSprite(p_172410_); this.quadSize = this.quadSize * (this.random.nextFloat() * 0.6F + 0.6F); this.lifetime = (int)(16.0 / (Math.random() * 0.8 + 0.2)); this.hasPhysics = false; this.friction = 1.0F; this.gravity = 0.0F; } @Override public ParticleRenderType getRenderType() { return ParticleRenderType.PARTICLE_SHEET_OPAQUE; } @OnlyIn(Dist.CLIENT) public static class CrimsonSporeProvider implements ParticleProvider { private final SpriteSet sprite; public CrimsonSporeProvider(SpriteSet p_108042_) { this.sprite = p_108042_; } public Particle createParticle( SimpleParticleType p_108053_, ClientLevel p_108054_, double p_108055_, double p_108056_, double p_108057_, double p_108058_, double p_108059_, double p_108060_ ) { RandomSource randomsource = p_108054_.random; double d0 = randomsource.nextGaussian() * 1.0E-6F; double d1 = randomsource.nextGaussian() * 1.0E-4F; double d2 = randomsource.nextGaussian() * 1.0E-6F; SuspendedParticle suspendedparticle = new SuspendedParticle(p_108054_, this.sprite, p_108055_, p_108056_, p_108057_, d0, d1, d2); suspendedparticle.setColor(0.9F, 0.4F, 0.5F); return suspendedparticle; } } @OnlyIn(Dist.CLIENT) public static class SporeBlossomAirProvider implements ParticleProvider { private final SpriteSet sprite; public SporeBlossomAirProvider(SpriteSet p_172419_) { this.sprite = p_172419_; } public Particle createParticle( SimpleParticleType p_172430_, ClientLevel p_172431_, double p_172432_, double p_172433_, double p_172434_, double p_172435_, double p_172436_, double p_172437_ ) { SuspendedParticle suspendedparticle = new SuspendedParticle(p_172431_, this.sprite, p_172432_, p_172433_, p_172434_, 0.0, -0.8F, 0.0) { @Override public Optional getParticleGroup() { return Optional.of(ParticleGroup.SPORE_BLOSSOM); } }; suspendedparticle.lifetime = Mth.randomBetweenInclusive(p_172431_.random, 500, 1000); suspendedparticle.gravity = 0.01F; suspendedparticle.setColor(0.32F, 0.5F, 0.22F); return suspendedparticle; } } @OnlyIn(Dist.CLIENT) public static class UnderwaterProvider implements ParticleProvider { private final SpriteSet sprite; public UnderwaterProvider(SpriteSet p_108063_) { this.sprite = p_108063_; } public Particle createParticle( SimpleParticleType p_108074_, ClientLevel p_108075_, double p_108076_, double p_108077_, double p_108078_, double p_108079_, double p_108080_, double p_108081_ ) { SuspendedParticle suspendedparticle = new SuspendedParticle(p_108075_, this.sprite, p_108076_, p_108077_, p_108078_); suspendedparticle.setColor(0.4F, 0.4F, 0.7F); return suspendedparticle; } } @OnlyIn(Dist.CLIENT) public static class WarpedSporeProvider implements ParticleProvider { private final SpriteSet sprite; public WarpedSporeProvider(SpriteSet p_108084_) { this.sprite = p_108084_; } public Particle createParticle( SimpleParticleType p_108095_, ClientLevel p_108096_, double p_108097_, double p_108098_, double p_108099_, double p_108100_, double p_108101_, double p_108102_ ) { double d0 = p_108096_.random.nextFloat() * -1.9 * p_108096_.random.nextFloat() * 0.1; SuspendedParticle suspendedparticle = new SuspendedParticle(p_108096_, this.sprite, p_108097_, p_108098_, p_108099_, 0.0, d0, 0.0); suspendedparticle.setColor(0.1F, 0.1F, 0.3F); suspendedparticle.setSize(0.001F, 0.001F); return suspendedparticle; } } }