From 6c24c58be09a6d446dc492233c4d4ebdac15a34a Mon Sep 17 00:00:00 2001 From: Micle Date: Fri, 6 Jun 2025 04:58:15 +0100 Subject: [PATCH 01/12] Replaced fields with config options. --- .../block/FireflyBushBlock.java | 19 ++++++---------- .../firefly_bush_backport/config/Config.java | 22 ++++++++++++++++++- 2 files changed, 28 insertions(+), 13 deletions(-) diff --git a/src/main/java/dev/micle/firefly_bush_backport/block/FireflyBushBlock.java b/src/main/java/dev/micle/firefly_bush_backport/block/FireflyBushBlock.java index 8a2cab3..cac2736 100644 --- a/src/main/java/dev/micle/firefly_bush_backport/block/FireflyBushBlock.java +++ b/src/main/java/dev/micle/firefly_bush_backport/block/FireflyBushBlock.java @@ -1,5 +1,6 @@ package dev.micle.firefly_bush_backport.block; +import dev.micle.firefly_bush_backport.config.Config; import dev.micle.firefly_bush_backport.particle.ModParticles; import dev.micle.firefly_bush_backport.sound.ModSounds; import net.minecraft.core.BlockPos; @@ -19,12 +20,6 @@ import java.util.List; import java.util.Optional; public class FireflyBushBlock extends BushBlock implements BonemealableBlock { - private static final double FIREFLY_CHANCE_PER_TICK = 0.7; - private static final double FIREFLY_HORIZONTAL_RANGE = 10.0; - private static final double FIREFLY_VERTICAL_RANGE = 5.0; - private static final int FIREFLY_SPAWN_MAX_BRIGHTNESS_LEVEL = 13; - private static final int FIREFLY_AMBIENT_SOUND_CHANCE_ONE_IN = 30; - public FireflyBushBlock(Properties properties) { super(properties); } @@ -32,17 +27,17 @@ public class FireflyBushBlock extends BushBlock implements BonemealableBlock { @Override @ParametersAreNonnullByDefault public void animateTick(BlockState blockState, Level level, BlockPos blockPos, RandomSource randomSource) { - if (randomSource.nextInt(FIREFLY_AMBIENT_SOUND_CHANCE_ONE_IN) == 0 + if (randomSource.nextInt(Config.Client.bushFireflyAmbientSoundChanceOneIn.get()) == 0 && isMoonVisible(level) && level.getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, blockPos.getX(), blockPos.getZ()) <= blockPos.getY()) { level.playLocalSound(blockPos, ModSounds.FIREFLY_BUSH_IDLE.get(), SoundSource.AMBIENT, 1.0F, 1.0F, false); } - if ((isMoonVisible(level) || level.getMaxLocalRawBrightness(blockPos) <= FIREFLY_SPAWN_MAX_BRIGHTNESS_LEVEL) && - randomSource.nextDouble() <= FIREFLY_CHANCE_PER_TICK) { - double d0 = blockPos.getX() + randomSource.nextDouble() * FIREFLY_HORIZONTAL_RANGE - FIREFLY_VERTICAL_RANGE; - double d1 = blockPos.getY() + randomSource.nextDouble() * FIREFLY_VERTICAL_RANGE; - double d2 = blockPos.getZ() + randomSource.nextDouble() * FIREFLY_HORIZONTAL_RANGE - FIREFLY_VERTICAL_RANGE; + if ((isMoonVisible(level) || level.getMaxLocalRawBrightness(blockPos) <= Config.Client.bushFireflySpawnMaxBrightnessLevel.get()) && + randomSource.nextDouble() <= Config.Client.bushFireflyChancePerTick.get()) { + double d0 = blockPos.getX() + randomSource.nextDouble() * Config.Client.bushFireflyHorizontalRange.get() - Config.Client.bushFireflyVerticalRange.get(); + double d1 = blockPos.getY() + randomSource.nextDouble() * Config.Client.bushFireflyVerticalRange.get(); + double d2 = blockPos.getZ() + randomSource.nextDouble() * Config.Client.bushFireflyHorizontalRange.get() - Config.Client.bushFireflyVerticalRange.get(); level.addParticle(ModParticles.FIREFLY.get(), d0, d1, d2, 0.0, 0.0, 0.0); } } diff --git a/src/main/java/dev/micle/firefly_bush_backport/config/Config.java b/src/main/java/dev/micle/firefly_bush_backport/config/Config.java index 025604a..13ace2c 100644 --- a/src/main/java/dev/micle/firefly_bush_backport/config/Config.java +++ b/src/main/java/dev/micle/firefly_bush_backport/config/Config.java @@ -1,6 +1,7 @@ package dev.micle.firefly_bush_backport.config; import dev.micle.firefly_bush_backport.FireflyBushBackport; +import net.minecraft.world.level.Level; import net.minecraftforge.common.ForgeConfigSpec; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; @@ -49,7 +50,26 @@ public final class Config { } public static class Client { - Client(ForgeConfigSpec.Builder builder) {} + public static ForgeConfigSpec.DoubleValue bushFireflyChancePerTick; + public static ForgeConfigSpec.DoubleValue bushFireflyHorizontalRange; + public static ForgeConfigSpec.DoubleValue bushFireflyVerticalRange; + public static ForgeConfigSpec.IntValue bushFireflySpawnMaxBrightnessLevel; + public static ForgeConfigSpec.IntValue bushFireflyAmbientSoundChanceOneIn; + + Client(ForgeConfigSpec.Builder builder) { + builder.comment("Official settings for the firefly bush.").push("bush"); + bushFireflyChancePerTick = builder + .defineInRange("bushFireflyChancePerTick", 0.7, 0, 1); + bushFireflyHorizontalRange = builder + .defineInRange("bushFireflyHorizontalRange", 10.0, 0, Double.MAX_VALUE); + bushFireflyVerticalRange = builder + .defineInRange("bushFireflyVerticalRange", 5.0, 0, Double.MAX_VALUE); + bushFireflySpawnMaxBrightnessLevel = builder + .defineInRange("bushFireflySpawnMaxBrightnessLevel", 13, 0, Level.MAX_BRIGHTNESS); + bushFireflyAmbientSoundChanceOneIn = builder + .defineInRange("bushFireflyAmbientSoundChanceOneIn", 30, 0, Integer.MAX_VALUE); + builder.pop(); + } private static void onConfigReload() {} } From 5add42d48796a6ea94326a8b3aba1995e480c287 Mon Sep 17 00:00:00 2001 From: Micle Date: Fri, 6 Jun 2025 05:03:32 +0100 Subject: [PATCH 02/12] Added config options for ambient sound volume and pitch. --- .../firefly_bush_backport/block/FireflyBushBlock.java | 9 ++++++++- .../dev/micle/firefly_bush_backport/config/Config.java | 6 ++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/main/java/dev/micle/firefly_bush_backport/block/FireflyBushBlock.java b/src/main/java/dev/micle/firefly_bush_backport/block/FireflyBushBlock.java index cac2736..459259e 100644 --- a/src/main/java/dev/micle/firefly_bush_backport/block/FireflyBushBlock.java +++ b/src/main/java/dev/micle/firefly_bush_backport/block/FireflyBushBlock.java @@ -30,7 +30,14 @@ public class FireflyBushBlock extends BushBlock implements BonemealableBlock { if (randomSource.nextInt(Config.Client.bushFireflyAmbientSoundChanceOneIn.get()) == 0 && isMoonVisible(level) && level.getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, blockPos.getX(), blockPos.getZ()) <= blockPos.getY()) { - level.playLocalSound(blockPos, ModSounds.FIREFLY_BUSH_IDLE.get(), SoundSource.AMBIENT, 1.0F, 1.0F, false); + level.playLocalSound( + blockPos, + ModSounds.FIREFLY_BUSH_IDLE.get(), + SoundSource.AMBIENT, + Config.Client.bushFireflyAmbientSoundVolume.get().floatValue(), + Config.Client.bushFireflyAmbientSoundPitch.get().floatValue(), + false + ); } if ((isMoonVisible(level) || level.getMaxLocalRawBrightness(blockPos) <= Config.Client.bushFireflySpawnMaxBrightnessLevel.get()) && diff --git a/src/main/java/dev/micle/firefly_bush_backport/config/Config.java b/src/main/java/dev/micle/firefly_bush_backport/config/Config.java index 13ace2c..4fd14ef 100644 --- a/src/main/java/dev/micle/firefly_bush_backport/config/Config.java +++ b/src/main/java/dev/micle/firefly_bush_backport/config/Config.java @@ -55,6 +55,8 @@ public final class Config { public static ForgeConfigSpec.DoubleValue bushFireflyVerticalRange; public static ForgeConfigSpec.IntValue bushFireflySpawnMaxBrightnessLevel; public static ForgeConfigSpec.IntValue bushFireflyAmbientSoundChanceOneIn; + public static ForgeConfigSpec.DoubleValue bushFireflyAmbientSoundVolume; + public static ForgeConfigSpec.DoubleValue bushFireflyAmbientSoundPitch; Client(ForgeConfigSpec.Builder builder) { builder.comment("Official settings for the firefly bush.").push("bush"); @@ -68,6 +70,10 @@ public final class Config { .defineInRange("bushFireflySpawnMaxBrightnessLevel", 13, 0, Level.MAX_BRIGHTNESS); bushFireflyAmbientSoundChanceOneIn = builder .defineInRange("bushFireflyAmbientSoundChanceOneIn", 30, 0, Integer.MAX_VALUE); + bushFireflyAmbientSoundVolume = builder + .defineInRange("bushFireflyAmbientSoundVolume", 1.0, 0, Double.MAX_VALUE); + bushFireflyAmbientSoundPitch = builder + .defineInRange("bushFireflyAmbientSoundPitch", 1.0, 0, Double.MAX_VALUE); builder.pop(); } From 66962632492c14f9e45fa12ac722cb0f670e55f1 Mon Sep 17 00:00:00 2001 From: Micle Date: Fri, 6 Jun 2025 05:05:34 +0100 Subject: [PATCH 03/12] Added config option for light level. --- .../java/dev/micle/firefly_bush_backport/block/ModBlocks.java | 3 ++- .../java/dev/micle/firefly_bush_backport/config/Config.java | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/dev/micle/firefly_bush_backport/block/ModBlocks.java b/src/main/java/dev/micle/firefly_bush_backport/block/ModBlocks.java index 2ab4c4b..b2beaab 100644 --- a/src/main/java/dev/micle/firefly_bush_backport/block/ModBlocks.java +++ b/src/main/java/dev/micle/firefly_bush_backport/block/ModBlocks.java @@ -1,6 +1,7 @@ package dev.micle.firefly_bush_backport.block; import dev.micle.firefly_bush_backport.FireflyBushBackport; +import dev.micle.firefly_bush_backport.config.Config; import dev.micle.firefly_bush_backport.item.ModItems; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.Item; @@ -23,7 +24,7 @@ public class ModBlocks { () -> new FireflyBushBlock(BlockBehaviour.Properties.of() .mapColor(MapColor.PLANT) .ignitedByLava() - .lightLevel(blockState -> 2) + .lightLevel(blockState -> Config.Client.bushFireflyLightLevel.get()) .noCollission() .instabreak() .sound(SoundType.SWEET_BERRY_BUSH) diff --git a/src/main/java/dev/micle/firefly_bush_backport/config/Config.java b/src/main/java/dev/micle/firefly_bush_backport/config/Config.java index 4fd14ef..70d41d2 100644 --- a/src/main/java/dev/micle/firefly_bush_backport/config/Config.java +++ b/src/main/java/dev/micle/firefly_bush_backport/config/Config.java @@ -57,6 +57,7 @@ public final class Config { public static ForgeConfigSpec.IntValue bushFireflyAmbientSoundChanceOneIn; public static ForgeConfigSpec.DoubleValue bushFireflyAmbientSoundVolume; public static ForgeConfigSpec.DoubleValue bushFireflyAmbientSoundPitch; + public static ForgeConfigSpec.IntValue bushFireflyLightLevel; Client(ForgeConfigSpec.Builder builder) { builder.comment("Official settings for the firefly bush.").push("bush"); @@ -74,6 +75,9 @@ public final class Config { .defineInRange("bushFireflyAmbientSoundVolume", 1.0, 0, Double.MAX_VALUE); bushFireflyAmbientSoundPitch = builder .defineInRange("bushFireflyAmbientSoundPitch", 1.0, 0, Double.MAX_VALUE); + bushFireflyLightLevel = builder + .comment("NOTE: This option requires a restart!") + .defineInRange("bushFireflyLightLevel", 2, 0, Level.MAX_BRIGHTNESS); builder.pop(); } From e7b45267e1e7c861889a3fd1ed866c77aa2eb930 Mon Sep 17 00:00:00 2001 From: Micle Date: Fri, 6 Jun 2025 05:15:54 +0100 Subject: [PATCH 04/12] Changed light level config to affect getLightEmission instead of registry since we can't use config options during registry. --- .../micle/firefly_bush_backport/block/FireflyBushBlock.java | 6 ++++++ .../dev/micle/firefly_bush_backport/block/ModBlocks.java | 3 +-- .../java/dev/micle/firefly_bush_backport/config/Config.java | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/main/java/dev/micle/firefly_bush_backport/block/FireflyBushBlock.java b/src/main/java/dev/micle/firefly_bush_backport/block/FireflyBushBlock.java index 459259e..1f0ddc3 100644 --- a/src/main/java/dev/micle/firefly_bush_backport/block/FireflyBushBlock.java +++ b/src/main/java/dev/micle/firefly_bush_backport/block/FireflyBushBlock.java @@ -8,6 +8,7 @@ import net.minecraft.core.Direction; import net.minecraft.server.level.ServerLevel; import net.minecraft.sounds.SoundSource; import net.minecraft.util.RandomSource; +import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.BonemealableBlock; @@ -24,6 +25,11 @@ public class FireflyBushBlock extends BushBlock implements BonemealableBlock { super(properties); } + @Override + public int getLightEmission(BlockState state, BlockGetter level, BlockPos pos) { + return Config.Client.bushFireflyLightLevel.get(); + } + @Override @ParametersAreNonnullByDefault public void animateTick(BlockState blockState, Level level, BlockPos blockPos, RandomSource randomSource) { diff --git a/src/main/java/dev/micle/firefly_bush_backport/block/ModBlocks.java b/src/main/java/dev/micle/firefly_bush_backport/block/ModBlocks.java index b2beaab..2ab4c4b 100644 --- a/src/main/java/dev/micle/firefly_bush_backport/block/ModBlocks.java +++ b/src/main/java/dev/micle/firefly_bush_backport/block/ModBlocks.java @@ -1,7 +1,6 @@ package dev.micle.firefly_bush_backport.block; import dev.micle.firefly_bush_backport.FireflyBushBackport; -import dev.micle.firefly_bush_backport.config.Config; import dev.micle.firefly_bush_backport.item.ModItems; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.Item; @@ -24,7 +23,7 @@ public class ModBlocks { () -> new FireflyBushBlock(BlockBehaviour.Properties.of() .mapColor(MapColor.PLANT) .ignitedByLava() - .lightLevel(blockState -> Config.Client.bushFireflyLightLevel.get()) + .lightLevel(blockState -> 2) .noCollission() .instabreak() .sound(SoundType.SWEET_BERRY_BUSH) diff --git a/src/main/java/dev/micle/firefly_bush_backport/config/Config.java b/src/main/java/dev/micle/firefly_bush_backport/config/Config.java index 70d41d2..82bb2d3 100644 --- a/src/main/java/dev/micle/firefly_bush_backport/config/Config.java +++ b/src/main/java/dev/micle/firefly_bush_backport/config/Config.java @@ -76,7 +76,7 @@ public final class Config { bushFireflyAmbientSoundPitch = builder .defineInRange("bushFireflyAmbientSoundPitch", 1.0, 0, Double.MAX_VALUE); bushFireflyLightLevel = builder - .comment("NOTE: This option requires a restart!") + .comment("NOTE: This option requires blocks to be replaced!") .defineInRange("bushFireflyLightLevel", 2, 0, Level.MAX_BRIGHTNESS); builder.pop(); } From 544d096e8d602edec281a20b8878c727d1da5095 Mon Sep 17 00:00:00 2001 From: Micle Date: Fri, 6 Jun 2025 19:56:44 +0100 Subject: [PATCH 05/12] Removed light level config. Out of scope. --- .../micle/firefly_bush_backport/block/FireflyBushBlock.java | 6 ------ .../java/dev/micle/firefly_bush_backport/config/Config.java | 4 ---- 2 files changed, 10 deletions(-) diff --git a/src/main/java/dev/micle/firefly_bush_backport/block/FireflyBushBlock.java b/src/main/java/dev/micle/firefly_bush_backport/block/FireflyBushBlock.java index 1f0ddc3..459259e 100644 --- a/src/main/java/dev/micle/firefly_bush_backport/block/FireflyBushBlock.java +++ b/src/main/java/dev/micle/firefly_bush_backport/block/FireflyBushBlock.java @@ -8,7 +8,6 @@ import net.minecraft.core.Direction; import net.minecraft.server.level.ServerLevel; import net.minecraft.sounds.SoundSource; import net.minecraft.util.RandomSource; -import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.BonemealableBlock; @@ -25,11 +24,6 @@ public class FireflyBushBlock extends BushBlock implements BonemealableBlock { super(properties); } - @Override - public int getLightEmission(BlockState state, BlockGetter level, BlockPos pos) { - return Config.Client.bushFireflyLightLevel.get(); - } - @Override @ParametersAreNonnullByDefault public void animateTick(BlockState blockState, Level level, BlockPos blockPos, RandomSource randomSource) { diff --git a/src/main/java/dev/micle/firefly_bush_backport/config/Config.java b/src/main/java/dev/micle/firefly_bush_backport/config/Config.java index 82bb2d3..4fd14ef 100644 --- a/src/main/java/dev/micle/firefly_bush_backport/config/Config.java +++ b/src/main/java/dev/micle/firefly_bush_backport/config/Config.java @@ -57,7 +57,6 @@ public final class Config { public static ForgeConfigSpec.IntValue bushFireflyAmbientSoundChanceOneIn; public static ForgeConfigSpec.DoubleValue bushFireflyAmbientSoundVolume; public static ForgeConfigSpec.DoubleValue bushFireflyAmbientSoundPitch; - public static ForgeConfigSpec.IntValue bushFireflyLightLevel; Client(ForgeConfigSpec.Builder builder) { builder.comment("Official settings for the firefly bush.").push("bush"); @@ -75,9 +74,6 @@ public final class Config { .defineInRange("bushFireflyAmbientSoundVolume", 1.0, 0, Double.MAX_VALUE); bushFireflyAmbientSoundPitch = builder .defineInRange("bushFireflyAmbientSoundPitch", 1.0, 0, Double.MAX_VALUE); - bushFireflyLightLevel = builder - .comment("NOTE: This option requires blocks to be replaced!") - .defineInRange("bushFireflyLightLevel", 2, 0, Level.MAX_BRIGHTNESS); builder.pop(); } From 1939719694d4ec351e42a55048d4126a520c6bc7 Mon Sep 17 00:00:00 2001 From: Micle Date: Fri, 6 Jun 2025 20:26:44 +0100 Subject: [PATCH 06/12] Replaced particle fields with config options. --- .../firefly_bush_backport/config/Config.java | 24 ++++++++++++++++++- .../particle/FireflyParticle.java | 23 ++++++++++-------- 2 files changed, 36 insertions(+), 11 deletions(-) diff --git a/src/main/java/dev/micle/firefly_bush_backport/config/Config.java b/src/main/java/dev/micle/firefly_bush_backport/config/Config.java index 4fd14ef..6e809a8 100644 --- a/src/main/java/dev/micle/firefly_bush_backport/config/Config.java +++ b/src/main/java/dev/micle/firefly_bush_backport/config/Config.java @@ -58,8 +58,15 @@ public final class Config { public static ForgeConfigSpec.DoubleValue bushFireflyAmbientSoundVolume; public static ForgeConfigSpec.DoubleValue bushFireflyAmbientSoundPitch; + public static ForgeConfigSpec.DoubleValue particleFadeOutLightTime; + public static ForgeConfigSpec.DoubleValue particleFadeInLightTime; + public static ForgeConfigSpec.DoubleValue particleFadeOutAlphaTime; + public static ForgeConfigSpec.DoubleValue particleFadeInAlphaTime; + public static ForgeConfigSpec.IntValue particleMinLifetime; + public static ForgeConfigSpec.IntValue particleMaxLifetime; + Client(ForgeConfigSpec.Builder builder) { - builder.comment("Official settings for the firefly bush.").push("bush"); + builder.comment("Settings for the firefly bush.").push("bush"); bushFireflyChancePerTick = builder .defineInRange("bushFireflyChancePerTick", 0.7, 0, 1); bushFireflyHorizontalRange = builder @@ -75,6 +82,21 @@ public final class Config { bushFireflyAmbientSoundPitch = builder .defineInRange("bushFireflyAmbientSoundPitch", 1.0, 0, Double.MAX_VALUE); builder.pop(); + + builder.comment("Settings for the firefly particle.").push("particle"); + particleFadeOutLightTime = builder + .defineInRange("particleFadeOutLightTime", 0.3, 0, 1.0); + particleFadeInLightTime = builder + .defineInRange("particleFadeInLightTime", 0.1, 0, 1.0); + particleFadeOutAlphaTime = builder + .defineInRange("particleFadeOutAlphaTime", 0.5, 0, 1.0); + particleFadeInAlphaTime = builder + .defineInRange("particleFadeInAlphaTime", 0.3, 0, 1.0); + particleMinLifetime = builder + .defineInRange("particleMinLifetime", 36, 0, Integer.MAX_VALUE); + particleMaxLifetime = builder + .defineInRange("particleMaxLifetime", 180, 0, Integer.MAX_VALUE); + builder.pop(); } private static void onConfigReload() {} 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 703326a..69be934 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,5 +1,6 @@ package dev.micle.firefly_bush_backport.particle; +import dev.micle.firefly_bush_backport.config.Config; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.particle.*; import net.minecraft.core.BlockPos; @@ -13,13 +14,6 @@ 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; - private static final float PARTICLE_FADE_OUT_ALPHA_TIME = 0.5F; - private static final float PARTICLE_FADE_IN_ALPHA_TIME = 0.3F; - private static final int PARTICLE_MIN_LIFETIME = 36; - private static final int PARTICLE_MAX_LIFETIME = 180; - protected FireflyParticle(ClientLevel clientLevel, double x, double y, double z, double xSpeed, double ySpeed, double zSpeed) { super(clientLevel, x, y, z, xSpeed, ySpeed, zSpeed); this.speedUpWhenYMotionIsBlocked = true; @@ -37,7 +31,11 @@ public class FireflyParticle extends TextureSheetParticle { @Override public int getLightColor(float partialTick) { - return (int) (255.0F * getFadeAmount(this.getLifetimeProgress(this.age + partialTick), PARTICLE_FADE_IN_LIGHT_TIME, PARTICLE_FADE_OUT_LIGHT_TIME)); + return (int) (255.0F * getFadeAmount( + this.getLifetimeProgress(this.age + partialTick), + Config.Client.particleFadeInLightTime.get().floatValue(), + Config.Client.particleFadeOutLightTime.get().floatValue()) + ); } private static float getFadeAmount(float lifetimeProgress, float fadeIn, float fadeOut) { @@ -58,7 +56,10 @@ public class FireflyParticle extends TextureSheetParticle { if (!this.level.getBlockState(BlockPos.containing(this.x, this.y, this.z)).isAir()) { this.remove(); } else { - this.setAlpha(getFadeAmount(this.getLifetimeProgress(this.age), PARTICLE_FADE_IN_ALPHA_TIME, PARTICLE_FADE_OUT_ALPHA_TIME)); + this.setAlpha(getFadeAmount(this.getLifetimeProgress(this.age), + Config.Client.particleFadeInAlphaTime.get().floatValue(), + Config.Client.particleFadeOutAlphaTime.get().floatValue()) + ); if (Math.random() > 0.95 || this.age == 1) { this.setParticleSpeed(-0.05F + 0.1F * Math.random(), -0.05F + 0.1F * Math.random(), -0.05F + 0.1F * Math.random()); } @@ -93,7 +94,9 @@ public class FireflyParticle extends TextureSheetParticle { clientLevel.random.nextBoolean() ? ySpeed : -ySpeed, 0.5 - clientLevel.random.nextDouble() ); - fireflyParticle.setLifetime(clientLevel.random.nextIntBetweenInclusive(PARTICLE_MIN_LIFETIME, PARTICLE_MAX_LIFETIME)); + fireflyParticle.setLifetime(clientLevel.random.nextIntBetweenInclusive( + Config.Client.particleMinLifetime.get(), Config.Client.particleMaxLifetime.get() + )); fireflyParticle.scale(1.5F); fireflyParticle.pickSprite(this.sprite); fireflyParticle.setAlpha(0.0F); From 1c2d0c0519ba983d2db60299cc144f9f74d461d9 Mon Sep 17 00:00:00 2001 From: Micle Date: Fri, 6 Jun 2025 20:27:52 +0100 Subject: [PATCH 07/12] Removed options for volume and pitch, they don't seem to do much? --- .../firefly_bush_backport/block/FireflyBushBlock.java | 7 +------ .../dev/micle/firefly_bush_backport/config/Config.java | 6 ------ 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/src/main/java/dev/micle/firefly_bush_backport/block/FireflyBushBlock.java b/src/main/java/dev/micle/firefly_bush_backport/block/FireflyBushBlock.java index 459259e..73ab596 100644 --- a/src/main/java/dev/micle/firefly_bush_backport/block/FireflyBushBlock.java +++ b/src/main/java/dev/micle/firefly_bush_backport/block/FireflyBushBlock.java @@ -31,12 +31,7 @@ public class FireflyBushBlock extends BushBlock implements BonemealableBlock { && isMoonVisible(level) && level.getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, blockPos.getX(), blockPos.getZ()) <= blockPos.getY()) { level.playLocalSound( - blockPos, - ModSounds.FIREFLY_BUSH_IDLE.get(), - SoundSource.AMBIENT, - Config.Client.bushFireflyAmbientSoundVolume.get().floatValue(), - Config.Client.bushFireflyAmbientSoundPitch.get().floatValue(), - false + blockPos, ModSounds.FIREFLY_BUSH_IDLE.get(), SoundSource.AMBIENT, 1.0F, 1.0F, false ); } diff --git a/src/main/java/dev/micle/firefly_bush_backport/config/Config.java b/src/main/java/dev/micle/firefly_bush_backport/config/Config.java index 6e809a8..0a11d7e 100644 --- a/src/main/java/dev/micle/firefly_bush_backport/config/Config.java +++ b/src/main/java/dev/micle/firefly_bush_backport/config/Config.java @@ -55,8 +55,6 @@ public final class Config { public static ForgeConfigSpec.DoubleValue bushFireflyVerticalRange; public static ForgeConfigSpec.IntValue bushFireflySpawnMaxBrightnessLevel; public static ForgeConfigSpec.IntValue bushFireflyAmbientSoundChanceOneIn; - public static ForgeConfigSpec.DoubleValue bushFireflyAmbientSoundVolume; - public static ForgeConfigSpec.DoubleValue bushFireflyAmbientSoundPitch; public static ForgeConfigSpec.DoubleValue particleFadeOutLightTime; public static ForgeConfigSpec.DoubleValue particleFadeInLightTime; @@ -77,10 +75,6 @@ public final class Config { .defineInRange("bushFireflySpawnMaxBrightnessLevel", 13, 0, Level.MAX_BRIGHTNESS); bushFireflyAmbientSoundChanceOneIn = builder .defineInRange("bushFireflyAmbientSoundChanceOneIn", 30, 0, Integer.MAX_VALUE); - bushFireflyAmbientSoundVolume = builder - .defineInRange("bushFireflyAmbientSoundVolume", 1.0, 0, Double.MAX_VALUE); - bushFireflyAmbientSoundPitch = builder - .defineInRange("bushFireflyAmbientSoundPitch", 1.0, 0, Double.MAX_VALUE); builder.pop(); builder.comment("Settings for the firefly particle.").push("particle"); From 1000fced607ccfa1c90ab0868f230452f7adb918 Mon Sep 17 00:00:00 2001 From: Micle Date: Fri, 6 Jun 2025 20:52:01 +0100 Subject: [PATCH 08/12] Created some inital extra settings. --- .../firefly_bush_backport/config/Config.java | 26 +++++++++++++++++++ .../particle/FireflyParticle.java | 14 +++++----- 2 files changed, 33 insertions(+), 7 deletions(-) diff --git a/src/main/java/dev/micle/firefly_bush_backport/config/Config.java b/src/main/java/dev/micle/firefly_bush_backport/config/Config.java index 0a11d7e..1ab96d6 100644 --- a/src/main/java/dev/micle/firefly_bush_backport/config/Config.java +++ b/src/main/java/dev/micle/firefly_bush_backport/config/Config.java @@ -2,6 +2,7 @@ package dev.micle.firefly_bush_backport.config; import dev.micle.firefly_bush_backport.FireflyBushBackport; import net.minecraft.world.level.Level; +import net.minecraft.world.phys.Vec3; import net.minecraftforge.common.ForgeConfigSpec; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; @@ -63,6 +64,14 @@ public final class Config { public static ForgeConfigSpec.IntValue particleMinLifetime; public static ForgeConfigSpec.IntValue particleMaxLifetime; + public static ForgeConfigSpec.DoubleValue particleExtraFriction; + public static ForgeConfigSpec.DoubleValue particleExtraQuadSize; + public static ForgeConfigSpec.DoubleValue particleExtraSpeedMultiplierX; + public static ForgeConfigSpec.DoubleValue particleExtraSpeedMultiplierY; + public static ForgeConfigSpec.DoubleValue particleExtraSpeedMultiplierZ; + public static ForgeConfigSpec.DoubleValue particleExtraLightColor; + public static ForgeConfigSpec.DoubleValue particleExtraScale; + Client(ForgeConfigSpec.Builder builder) { builder.comment("Settings for the firefly bush.").push("bush"); bushFireflyChancePerTick = builder @@ -90,6 +99,23 @@ public final class Config { .defineInRange("particleMinLifetime", 36, 0, Integer.MAX_VALUE); particleMaxLifetime = builder .defineInRange("particleMaxLifetime", 180, 0, Integer.MAX_VALUE); + + builder.comment("Extra settings for the firefly particle.").push("extra"); + particleExtraFriction = builder + .defineInRange("particleExtraFriction", 0.96, 0, Double.MAX_VALUE); + particleExtraQuadSize = builder + .defineInRange("particleExtraQuadSize", 0.75, 0, Double.MAX_VALUE); + particleExtraSpeedMultiplierX = builder + .defineInRange("particleExtraSpeedMultiplierX", 0.8, Double.MIN_VALUE, Double.MAX_VALUE); + particleExtraSpeedMultiplierY = builder + .defineInRange("particleExtraSpeedMultiplierY", 0.8, Double.MIN_VALUE, Double.MAX_VALUE); + particleExtraSpeedMultiplierZ = builder + .defineInRange("particleExtraSpeedMultiplierZ", 0.8, Double.MIN_VALUE, Double.MAX_VALUE); + particleExtraLightColor = builder + .defineInRange("particleExtraLightColor", 255.0, 0, 255); + particleExtraScale = builder + .defineInRange("particleExtraScale", 1.5, 0, Double.MAX_VALUE); + builder.pop(); builder.pop(); } 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 69be934..77c1fde 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 @@ -17,11 +17,11 @@ public class FireflyParticle extends TextureSheetParticle { protected FireflyParticle(ClientLevel clientLevel, double x, double y, double z, double xSpeed, double ySpeed, double zSpeed) { super(clientLevel, x, y, z, xSpeed, ySpeed, zSpeed); this.speedUpWhenYMotionIsBlocked = true; - this.friction = 0.96F; - this.quadSize *= 0.75F; - this.yd *= 0.8F; - this.xd *= 0.8F; - this.zd *= 0.8F; + this.friction = Config.Client.particleExtraFriction.get().floatValue(); + this.quadSize *= Config.Client.particleExtraQuadSize.get().floatValue(); + this.yd *= Config.Client.particleExtraSpeedMultiplierY.get(); + this.xd *= Config.Client.particleExtraSpeedMultiplierX.get(); + this.zd *= Config.Client.particleExtraSpeedMultiplierZ.get(); } @Override @@ -31,7 +31,7 @@ public class FireflyParticle extends TextureSheetParticle { @Override public int getLightColor(float partialTick) { - return (int) (255.0F * getFadeAmount( + return (int) (Config.Client.particleExtraLightColor.get().floatValue() * getFadeAmount( this.getLifetimeProgress(this.age + partialTick), Config.Client.particleFadeInLightTime.get().floatValue(), Config.Client.particleFadeOutLightTime.get().floatValue()) @@ -97,7 +97,7 @@ public class FireflyParticle extends TextureSheetParticle { fireflyParticle.setLifetime(clientLevel.random.nextIntBetweenInclusive( Config.Client.particleMinLifetime.get(), Config.Client.particleMaxLifetime.get() )); - fireflyParticle.scale(1.5F); + fireflyParticle.scale(Config.Client.particleExtraScale.get().floatValue()); fireflyParticle.pickSprite(this.sprite); fireflyParticle.setAlpha(0.0F); From d2340638f3655e6167d4c3111b3cdbad6774a81e Mon Sep 17 00:00:00 2001 From: Micle Date: Fri, 6 Jun 2025 21:07:07 +0100 Subject: [PATCH 09/12] Cleaned up extra config options. Added new option for color. --- .../firefly_bush_backport/config/Config.java | 23 ++++++------------- .../particle/FireflyParticle.java | 16 ++++++++----- 2 files changed, 17 insertions(+), 22 deletions(-) diff --git a/src/main/java/dev/micle/firefly_bush_backport/config/Config.java b/src/main/java/dev/micle/firefly_bush_backport/config/Config.java index 1ab96d6..44a0e4d 100644 --- a/src/main/java/dev/micle/firefly_bush_backport/config/Config.java +++ b/src/main/java/dev/micle/firefly_bush_backport/config/Config.java @@ -65,12 +65,9 @@ public final class Config { public static ForgeConfigSpec.IntValue particleMaxLifetime; public static ForgeConfigSpec.DoubleValue particleExtraFriction; - public static ForgeConfigSpec.DoubleValue particleExtraQuadSize; - public static ForgeConfigSpec.DoubleValue particleExtraSpeedMultiplierX; - public static ForgeConfigSpec.DoubleValue particleExtraSpeedMultiplierY; - public static ForgeConfigSpec.DoubleValue particleExtraSpeedMultiplierZ; - public static ForgeConfigSpec.DoubleValue particleExtraLightColor; public static ForgeConfigSpec.DoubleValue particleExtraScale; + public static ForgeConfigSpec.DoubleValue particleExtraBrightness; + public static ForgeConfigSpec.ConfigValue particleExtraColor; Client(ForgeConfigSpec.Builder builder) { builder.comment("Settings for the firefly bush.").push("bush"); @@ -103,18 +100,12 @@ public final class Config { builder.comment("Extra settings for the firefly particle.").push("extra"); particleExtraFriction = builder .defineInRange("particleExtraFriction", 0.96, 0, Double.MAX_VALUE); - particleExtraQuadSize = builder - .defineInRange("particleExtraQuadSize", 0.75, 0, Double.MAX_VALUE); - particleExtraSpeedMultiplierX = builder - .defineInRange("particleExtraSpeedMultiplierX", 0.8, Double.MIN_VALUE, Double.MAX_VALUE); - particleExtraSpeedMultiplierY = builder - .defineInRange("particleExtraSpeedMultiplierY", 0.8, Double.MIN_VALUE, Double.MAX_VALUE); - particleExtraSpeedMultiplierZ = builder - .defineInRange("particleExtraSpeedMultiplierZ", 0.8, Double.MIN_VALUE, Double.MAX_VALUE); - particleExtraLightColor = builder - .defineInRange("particleExtraLightColor", 255.0, 0, 255); particleExtraScale = builder - .defineInRange("particleExtraScale", 1.5, 0, Double.MAX_VALUE); + .defineInRange("particleExtraScale", 0.75, 0, Double.MAX_VALUE); + particleExtraBrightness = builder + .defineInRange("particleExtraBrightness", 255.0, 0, 255); + particleExtraColor = builder + .define("particleExtraColor", "#ffffff"); builder.pop(); builder.pop(); } 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 77c1fde..a0c9dd0 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 @@ -11,6 +11,7 @@ import net.minecraftforge.api.distmarker.OnlyIn; import org.jetbrains.annotations.NotNull; import javax.annotation.ParametersAreNonnullByDefault; +import java.awt.*; @OnlyIn(Dist.CLIENT) public class FireflyParticle extends TextureSheetParticle { @@ -18,10 +19,10 @@ public class FireflyParticle extends TextureSheetParticle { super(clientLevel, x, y, z, xSpeed, ySpeed, zSpeed); this.speedUpWhenYMotionIsBlocked = true; this.friction = Config.Client.particleExtraFriction.get().floatValue(); - this.quadSize *= Config.Client.particleExtraQuadSize.get().floatValue(); - this.yd *= Config.Client.particleExtraSpeedMultiplierY.get(); - this.xd *= Config.Client.particleExtraSpeedMultiplierX.get(); - this.zd *= Config.Client.particleExtraSpeedMultiplierZ.get(); + this.quadSize *= Config.Client.particleExtraScale.get().floatValue(); + this.yd *= 0.8F; + this.xd *= 0.8F; + this.zd *= 0.8F; } @Override @@ -31,7 +32,7 @@ public class FireflyParticle extends TextureSheetParticle { @Override public int getLightColor(float partialTick) { - return (int) (Config.Client.particleExtraLightColor.get().floatValue() * getFadeAmount( + return (int) (Config.Client.particleExtraBrightness.get().floatValue() * getFadeAmount( this.getLifetimeProgress(this.age + partialTick), Config.Client.particleFadeInLightTime.get().floatValue(), Config.Client.particleFadeOutLightTime.get().floatValue()) @@ -97,10 +98,13 @@ public class FireflyParticle extends TextureSheetParticle { fireflyParticle.setLifetime(clientLevel.random.nextIntBetweenInclusive( Config.Client.particleMinLifetime.get(), Config.Client.particleMaxLifetime.get() )); - fireflyParticle.scale(Config.Client.particleExtraScale.get().floatValue()); + fireflyParticle.scale(1.5F); fireflyParticle.pickSprite(this.sprite); fireflyParticle.setAlpha(0.0F); + Color color = Color.decode(Config.Client.particleExtraColor.get()); + fireflyParticle.setColor(color.getRed() / 255F, color.getGreen() / 255F, color.getBlue() / 255F); + return fireflyParticle; } } From d9571e65dd678b1ec7cef64dd7518bd25a3526a2 Mon Sep 17 00:00:00 2001 From: Micle Date: Fri, 6 Jun 2025 21:36:43 +0100 Subject: [PATCH 10/12] Made color config into a list. --- .../firefly_bush_backport/config/Config.java | 15 +++++++++++---- .../particle/FireflyParticle.java | 4 +++- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/main/java/dev/micle/firefly_bush_backport/config/Config.java b/src/main/java/dev/micle/firefly_bush_backport/config/Config.java index 44a0e4d..4fb5461 100644 --- a/src/main/java/dev/micle/firefly_bush_backport/config/Config.java +++ b/src/main/java/dev/micle/firefly_bush_backport/config/Config.java @@ -2,7 +2,6 @@ package dev.micle.firefly_bush_backport.config; import dev.micle.firefly_bush_backport.FireflyBushBackport; import net.minecraft.world.level.Level; -import net.minecraft.world.phys.Vec3; import net.minecraftforge.common.ForgeConfigSpec; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; @@ -10,6 +9,10 @@ import net.minecraftforge.fml.config.ModConfig; import net.minecraftforge.fml.event.config.ModConfigEvent; import org.apache.commons.lang3.tuple.Pair; +import java.awt.*; +import java.util.Arrays; +import java.util.List; + @Mod.EventBusSubscriber(modid = FireflyBushBackport.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD) public final class Config { public static final Client CLIENT; @@ -67,7 +70,7 @@ public final class Config { public static ForgeConfigSpec.DoubleValue particleExtraFriction; public static ForgeConfigSpec.DoubleValue particleExtraScale; public static ForgeConfigSpec.DoubleValue particleExtraBrightness; - public static ForgeConfigSpec.ConfigValue particleExtraColor; + public static ForgeConfigSpec.ConfigValue> particleExtraColors; Client(ForgeConfigSpec.Builder builder) { builder.comment("Settings for the firefly bush.").push("bush"); @@ -104,13 +107,17 @@ public final class Config { .defineInRange("particleExtraScale", 0.75, 0, Double.MAX_VALUE); particleExtraBrightness = builder .defineInRange("particleExtraBrightness", 255.0, 0, 255); - particleExtraColor = builder - .define("particleExtraColor", "#ffffff"); + particleExtraColors = builder + .defineList("particleExtraColors", List.of("#ffffff"), Client::isValidColorEntry); builder.pop(); builder.pop(); } private static void onConfigReload() {} + + private static boolean isValidColorEntry(Object entry) { + return entry instanceof String && ((String) entry).matches("#(\\w{6})$"); + } } public static class Common { 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 a0c9dd0..96a014c 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 @@ -12,6 +12,7 @@ import org.jetbrains.annotations.NotNull; import javax.annotation.ParametersAreNonnullByDefault; import java.awt.*; +import java.util.List; @OnlyIn(Dist.CLIENT) public class FireflyParticle extends TextureSheetParticle { @@ -102,7 +103,8 @@ public class FireflyParticle extends TextureSheetParticle { fireflyParticle.pickSprite(this.sprite); fireflyParticle.setAlpha(0.0F); - Color color = Color.decode(Config.Client.particleExtraColor.get()); + List possibleColors = Config.Client.particleExtraColors.get(); + Color color = Color.decode(possibleColors.get(clientLevel.random.nextIntBetweenInclusive(0, possibleColors.size() - 1))); fireflyParticle.setColor(color.getRed() / 255F, color.getGreen() / 255F, color.getBlue() / 255F); return fireflyParticle; From 19154628112fcea1370370f3d9c885879926692d Mon Sep 17 00:00:00 2001 From: Micle Date: Fri, 6 Jun 2025 21:54:55 +0100 Subject: [PATCH 11/12] Added weighted randomness to color list. --- .../firefly_bush_backport/config/Config.java | 19 ++++++++++++++----- .../particle/FireflyParticle.java | 9 +++++---- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/main/java/dev/micle/firefly_bush_backport/config/Config.java b/src/main/java/dev/micle/firefly_bush_backport/config/Config.java index 4fb5461..1283276 100644 --- a/src/main/java/dev/micle/firefly_bush_backport/config/Config.java +++ b/src/main/java/dev/micle/firefly_bush_backport/config/Config.java @@ -1,6 +1,7 @@ package dev.micle.firefly_bush_backport.config; import dev.micle.firefly_bush_backport.FireflyBushBackport; +import net.minecraft.util.random.SimpleWeightedRandomList; import net.minecraft.world.level.Level; import net.minecraftforge.common.ForgeConfigSpec; import net.minecraftforge.eventbus.api.SubscribeEvent; @@ -10,7 +11,6 @@ import net.minecraftforge.fml.event.config.ModConfigEvent; import org.apache.commons.lang3.tuple.Pair; import java.awt.*; -import java.util.Arrays; import java.util.List; @Mod.EventBusSubscriber(modid = FireflyBushBackport.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD) @@ -70,7 +70,8 @@ public final class Config { public static ForgeConfigSpec.DoubleValue particleExtraFriction; public static ForgeConfigSpec.DoubleValue particleExtraScale; public static ForgeConfigSpec.DoubleValue particleExtraBrightness; - public static ForgeConfigSpec.ConfigValue> particleExtraColors; + private static ForgeConfigSpec.ConfigValue> particleExtraColors; + public static SimpleWeightedRandomList particleExtraColorsWeightedList; Client(ForgeConfigSpec.Builder builder) { builder.comment("Settings for the firefly bush.").push("bush"); @@ -108,15 +109,23 @@ public final class Config { particleExtraBrightness = builder .defineInRange("particleExtraBrightness", 255.0, 0, 255); particleExtraColors = builder - .defineList("particleExtraColors", List.of("#ffffff"), Client::isValidColorEntry); + .comment("List of color hex values and their weight. Format: ','") + .defineList("particleExtraColors", List.of("#ffffff,1"), Client::isValidColorEntry); builder.pop(); builder.pop(); } - private static void onConfigReload() {} + private static void onConfigReload() { + SimpleWeightedRandomList.Builder particleExtraColorsWeightedListBuilder = SimpleWeightedRandomList.builder(); + for (String entry : particleExtraColors.get()) { + String[] splitEntry = entry.split(","); + particleExtraColorsWeightedListBuilder.add(Color.decode(splitEntry[0]), Integer.parseInt(splitEntry[1])); + } + particleExtraColorsWeightedList = particleExtraColorsWeightedListBuilder.build(); + } private static boolean isValidColorEntry(Object entry) { - return entry instanceof String && ((String) entry).matches("#(\\w{6})$"); + return entry instanceof String && ((String) entry).matches("#\\w{6},\\d+$"); } } 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 96a014c..d041953 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 @@ -12,7 +12,7 @@ import org.jetbrains.annotations.NotNull; import javax.annotation.ParametersAreNonnullByDefault; import java.awt.*; -import java.util.List; +import java.util.Optional; @OnlyIn(Dist.CLIENT) public class FireflyParticle extends TextureSheetParticle { @@ -103,9 +103,10 @@ public class FireflyParticle extends TextureSheetParticle { fireflyParticle.pickSprite(this.sprite); fireflyParticle.setAlpha(0.0F); - List possibleColors = Config.Client.particleExtraColors.get(); - Color color = Color.decode(possibleColors.get(clientLevel.random.nextIntBetweenInclusive(0, possibleColors.size() - 1))); - fireflyParticle.setColor(color.getRed() / 255F, color.getGreen() / 255F, color.getBlue() / 255F); + Optional optionalColor = Config.Client.particleExtraColorsWeightedList.getRandomValue(clientLevel.random); + optionalColor.ifPresent(color -> + fireflyParticle.setColor(color.getRed() / 255F, color.getGreen() / 255F, color.getBlue() / 255F) + ); return fireflyParticle; } From 7afeb2c82dab9121c8593202d627e156a8ec22d2 Mon Sep 17 00:00:00 2001 From: Micle Date: Fri, 6 Jun 2025 22:25:08 +0100 Subject: [PATCH 12/12] Added extra config options for always playing ambient sound and always spawning particles. --- .../block/FireflyBushBlock.java | 13 ++++++++----- .../micle/firefly_bush_backport/config/Config.java | 10 ++++++++++ 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/main/java/dev/micle/firefly_bush_backport/block/FireflyBushBlock.java b/src/main/java/dev/micle/firefly_bush_backport/block/FireflyBushBlock.java index 73ab596..4ba0ded 100644 --- a/src/main/java/dev/micle/firefly_bush_backport/block/FireflyBushBlock.java +++ b/src/main/java/dev/micle/firefly_bush_backport/block/FireflyBushBlock.java @@ -27,16 +27,19 @@ public class FireflyBushBlock extends BushBlock implements BonemealableBlock { @Override @ParametersAreNonnullByDefault public void animateTick(BlockState blockState, Level level, BlockPos blockPos, RandomSource randomSource) { - if (randomSource.nextInt(Config.Client.bushFireflyAmbientSoundChanceOneIn.get()) == 0 - && isMoonVisible(level) - && level.getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, blockPos.getX(), blockPos.getZ()) <= blockPos.getY()) { + if (randomSource.nextInt(Config.Client.bushFireflyAmbientSoundChanceOneIn.get()) == 0 && ( + Config.Client.bushExtraAlwaysPlayAmbientSound.get() || + (isMoonVisible(level) && level.getHeight(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, blockPos.getX(), blockPos.getZ()) <= blockPos.getY()) + )) { level.playLocalSound( blockPos, ModSounds.FIREFLY_BUSH_IDLE.get(), SoundSource.AMBIENT, 1.0F, 1.0F, false ); } - if ((isMoonVisible(level) || level.getMaxLocalRawBrightness(blockPos) <= Config.Client.bushFireflySpawnMaxBrightnessLevel.get()) && - randomSource.nextDouble() <= Config.Client.bushFireflyChancePerTick.get()) { + if (randomSource.nextDouble() <= Config.Client.bushFireflyChancePerTick.get() && ( + Config.Client.bushExtraAlwaysSpawnParticles.get() || + (isMoonVisible(level) || level.getMaxLocalRawBrightness(blockPos) <= Config.Client.bushFireflySpawnMaxBrightnessLevel.get()) + )) { double d0 = blockPos.getX() + randomSource.nextDouble() * Config.Client.bushFireflyHorizontalRange.get() - Config.Client.bushFireflyVerticalRange.get(); double d1 = blockPos.getY() + randomSource.nextDouble() * Config.Client.bushFireflyVerticalRange.get(); double d2 = blockPos.getZ() + randomSource.nextDouble() * Config.Client.bushFireflyHorizontalRange.get() - Config.Client.bushFireflyVerticalRange.get(); diff --git a/src/main/java/dev/micle/firefly_bush_backport/config/Config.java b/src/main/java/dev/micle/firefly_bush_backport/config/Config.java index 1283276..3ec34fa 100644 --- a/src/main/java/dev/micle/firefly_bush_backport/config/Config.java +++ b/src/main/java/dev/micle/firefly_bush_backport/config/Config.java @@ -60,6 +60,9 @@ public final class Config { public static ForgeConfigSpec.IntValue bushFireflySpawnMaxBrightnessLevel; public static ForgeConfigSpec.IntValue bushFireflyAmbientSoundChanceOneIn; + public static ForgeConfigSpec.BooleanValue bushExtraAlwaysPlayAmbientSound; + public static ForgeConfigSpec.BooleanValue bushExtraAlwaysSpawnParticles; + public static ForgeConfigSpec.DoubleValue particleFadeOutLightTime; public static ForgeConfigSpec.DoubleValue particleFadeInLightTime; public static ForgeConfigSpec.DoubleValue particleFadeOutAlphaTime; @@ -85,6 +88,13 @@ public final class Config { .defineInRange("bushFireflySpawnMaxBrightnessLevel", 13, 0, Level.MAX_BRIGHTNESS); bushFireflyAmbientSoundChanceOneIn = builder .defineInRange("bushFireflyAmbientSoundChanceOneIn", 30, 0, Integer.MAX_VALUE); + + builder.comment("Extra settings for the firefly bush.").push("extra"); + bushExtraAlwaysPlayAmbientSound = builder + .define("bushExtraAlwaysPlayAmbientSound", false); + bushExtraAlwaysSpawnParticles = builder + .define("bushExtraAlwaysSpawnParticles", false); + builder.pop(); builder.pop(); builder.comment("Settings for the firefly particle.").push("particle");