From 57beb45385f2974dc3f77a8b6b31dcbbdc29b42b Mon Sep 17 00:00:00 2001 From: Micle Date: Thu, 5 Jun 2025 23:59:28 +0100 Subject: [PATCH] Implemented firefly provider. --- .../particle/FireflyParticle.java | 46 ++++++++++++++++++- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/src/main/java/dev/micle/firefly_bush_backport/particle/FireflyParticle.java b/src/main/java/dev/micle/firefly_bush_backport/particle/FireflyParticle.java index 5e2b126..703326a 100644 --- a/src/main/java/dev/micle/firefly_bush_backport/particle/FireflyParticle.java +++ b/src/main/java/dev/micle/firefly_bush_backport/particle/FireflyParticle.java @@ -1,12 +1,17 @@ package dev.micle.firefly_bush_backport.particle; import net.minecraft.client.multiplayer.ClientLevel; -import net.minecraft.client.particle.ParticleRenderType; -import net.minecraft.client.particle.TextureSheetParticle; +import net.minecraft.client.particle.*; import net.minecraft.core.BlockPos; +import net.minecraft.core.particles.SimpleParticleType; import net.minecraft.util.Mth; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; import org.jetbrains.annotations.NotNull; +import javax.annotation.ParametersAreNonnullByDefault; + +@OnlyIn(Dist.CLIENT) public class FireflyParticle extends TextureSheetParticle { private static final float PARTICLE_FADE_OUT_LIGHT_TIME = 0.3F; private static final float PARTICLE_FADE_IN_LIGHT_TIME = 0.1F; @@ -59,4 +64,41 @@ public class FireflyParticle extends TextureSheetParticle { } } } + + @OnlyIn(Dist.CLIENT) + public static class FireflyProvider implements ParticleProvider { + private final SpriteSet sprite; + + public FireflyProvider(SpriteSet spriteSet) { + this.sprite = spriteSet; + } + + @ParametersAreNonnullByDefault + public Particle createParticle( + SimpleParticleType simpleParticleType, + ClientLevel clientLevel, + double x, + double y, + double z, + double xSpeed, + double ySpeed, + double zSpeed + ) { + FireflyParticle fireflyParticle = new FireflyParticle( + clientLevel, + x, + y, + z, + 0.5 - clientLevel.random.nextDouble(), + clientLevel.random.nextBoolean() ? ySpeed : -ySpeed, + 0.5 - clientLevel.random.nextDouble() + ); + fireflyParticle.setLifetime(clientLevel.random.nextIntBetweenInclusive(PARTICLE_MIN_LIFETIME, PARTICLE_MAX_LIFETIME)); + fireflyParticle.scale(1.5F); + fireflyParticle.pickSprite(this.sprite); + fireflyParticle.setAlpha(0.0F); + + return fireflyParticle; + } + } }