From 5f48fec41a90683c7dcd921ae269ffb03b0b9330 Mon Sep 17 00:00:00 2001 From: Liz Graham Date: Mon, 22 May 2023 03:26:21 +0100 Subject: [PATCH] Fix bugs and fix #4 Particles can no longer spawn under the world. Particles no longer spawn in blocks, instead spawning in air. Fixed bug present since 1.2.0, which meant particle amount was dependant on blocks around player. New particle multiplier allowing greater control of particle amount. New F3 screen text, allows user to debug particle amount. Removed upper and lower limit buttons. --- .../java/net/lizistired/cavedust/CaveDust.java | 14 +++++++++----- .../net/lizistired/cavedust/CaveDustConfig.java | 13 +++++++++++++ .../cavedust/mixin/MixinDebugScreenOverlay.java | 4 +++- .../cavedust/utils/ParticleSpawnUtil.java | 2 +- .../cavedust/utils/TranslatableTextHelper.java | 4 ++++ src/main/resources/assets/modid/lang/en_us.json | 6 ++++-- src/main/resources/dust.mixins.json | 3 ++- 7 files changed, 36 insertions(+), 10 deletions(-) diff --git a/src/main/java/net/lizistired/cavedust/CaveDust.java b/src/main/java/net/lizistired/cavedust/CaveDust.java index 7e6110f..12f7cb1 100644 --- a/src/main/java/net/lizistired/cavedust/CaveDust.java +++ b/src/main/java/net/lizistired/cavedust/CaveDust.java @@ -1,6 +1,7 @@ package net.lizistired.cavedust; //minecraft imports +import net.minecraft.block.Blocks; import net.minecraft.client.MinecraftClient; import net.minecraft.particle.ParticleTypes; import net.minecraft.registry.Registries; @@ -40,6 +41,7 @@ public class CaveDust implements ClientModInitializer { } public static int WHITE_ASH_ID = Registries.PARTICLE_TYPE.getRawId(ParticleTypes.WHITE_ASH); + public static int PARTICLE_AMOUNT = 0; @Override @@ -72,18 +74,20 @@ public class CaveDust implements ClientModInitializer { //LOGGER.info(String.valueOf(((ClientWorldAccessor) client.world.getLevelProperties()).getFlatWorld())); // ) double probabilityNormalized = normalize(config.getLowerLimit(), config.getUpperLimit(), client.player.getBlockY()); + PARTICLE_AMOUNT = (int) (probabilityNormalized * config.getParticleMultiplier() * config.getParticleMultiplierMultiplier()); - for (int i = 0; i < probabilityNormalized * config.getParticleMultiplier() * 10; i++) { + for (int i = 0; i < PARTICLE_AMOUNT; i++) { try { double x = client.player.getPos().getX() + generateRandomDouble(config.getDimensionsX() * -1, config.getDimensionsX()); double y = client.player.getPos().getY() + generateRandomDouble(config.getDimensionsY() * -1, config.getDimensionsY()); double z = client.player.getPos().getZ() + generateRandomDouble(config.getDimensionsZ() * -1, config.getDimensionsZ()); BlockPos particlePos = new BlockPos(x, y, z); - if (!shouldParticlesSpawn(client, config, particlePos)){return;} - - - world.addParticle(config.getParticle(), x, y, z, config.getVelocityRandomnessRandom(), config.getVelocityRandomnessRandom(), config.getVelocityRandomnessRandom()); + if (shouldParticlesSpawn(client, config, particlePos)) { + if (client.world.getBlockState(particlePos).isAir()) { + world.addParticle(config.getParticle(), x, y, z, config.getVelocityRandomnessRandom(), config.getVelocityRandomnessRandom(), config.getVelocityRandomnessRandom()); + } + } } catch (NullPointerException e) { LOGGER.error(String.valueOf(e)); diff --git a/src/main/java/net/lizistired/cavedust/CaveDustConfig.java b/src/main/java/net/lizistired/cavedust/CaveDustConfig.java index 62b69ed..7178dd9 100644 --- a/src/main/java/net/lizistired/cavedust/CaveDustConfig.java +++ b/src/main/java/net/lizistired/cavedust/CaveDustConfig.java @@ -26,6 +26,8 @@ public class CaveDustConfig extends JsonFile { private float lowerLimit = -64; private int particleMultiplier = 1; + private int particleMultiplierMultiplier = 10; + private int particleID = WHITE_ASH_ID; public CaveDustConfig(Path file, net.lizistired.cavedust.CaveDust caveDust) { @@ -111,6 +113,16 @@ public class CaveDustConfig extends JsonFile { return getParticleMultiplier(); } + public int getParticleMultiplierMultiplier(){ + return particleMultiplierMultiplier; + } + + public float setParticleMultiplierMultiplier(float particleMultiplierMultiplier){ + this.particleMultiplierMultiplier = (int) particleMultiplierMultiplier; + save(); + return getParticleMultiplierMultiplier(); + } + public boolean toggleCaveDust(){ caveDustEnabled = !caveDustEnabled; save(); @@ -197,6 +209,7 @@ public class CaveDustConfig extends JsonFile { lowerLimit = -64; particleMultiplier = 1; + particleMultiplierMultiplier = 10; seaLevelCheck = true; caveDustEnabled = true; diff --git a/src/main/java/net/lizistired/cavedust/mixin/MixinDebugScreenOverlay.java b/src/main/java/net/lizistired/cavedust/mixin/MixinDebugScreenOverlay.java index b76ac76..30cedad 100644 --- a/src/main/java/net/lizistired/cavedust/mixin/MixinDebugScreenOverlay.java +++ b/src/main/java/net/lizistired/cavedust/mixin/MixinDebugScreenOverlay.java @@ -7,6 +7,8 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import java.util.List; + +import static net.lizistired.cavedust.CaveDust.PARTICLE_AMOUNT; import static net.lizistired.cavedust.utils.ParticleSpawnUtil.shouldParticlesSpawn; @Mixin(DebugHud.class) @@ -16,7 +18,7 @@ public abstract class MixinDebugScreenOverlay { List messages = cir.getReturnValue(); messages.add(""); - messages.add("Should particles spawn: " + shouldParticlesSpawn); + messages.add("Particle amount evaluated: " + PARTICLE_AMOUNT); messages.add(""); } } diff --git a/src/main/java/net/lizistired/cavedust/utils/ParticleSpawnUtil.java b/src/main/java/net/lizistired/cavedust/utils/ParticleSpawnUtil.java index 3528577..0b81484 100644 --- a/src/main/java/net/lizistired/cavedust/utils/ParticleSpawnUtil.java +++ b/src/main/java/net/lizistired/cavedust/utils/ParticleSpawnUtil.java @@ -66,7 +66,7 @@ public class ParticleSpawnUtil { || client.isPaused() || client.world == null || !client.world.getDimension().bedWorks() - || Objects.requireNonNull(client.player).isSubmergedInWater() + || (client.world.getBottomY() > pos.getY()) || client.world.getBiome(Objects.requireNonNull(pos)).matchesKey(LUSH_CAVES)) { diff --git a/src/main/java/net/lizistired/cavedust/utils/TranslatableTextHelper.java b/src/main/java/net/lizistired/cavedust/utils/TranslatableTextHelper.java index 0b8d814..c07ccd4 100644 --- a/src/main/java/net/lizistired/cavedust/utils/TranslatableTextHelper.java +++ b/src/main/java/net/lizistired/cavedust/utils/TranslatableTextHelper.java @@ -24,6 +24,10 @@ public class TranslatableTextHelper { public Text formatParticleMultiplier(AbstractSlider slider) { return Text.translatable("menu.cavedust.particlemultiplier", (int)Math.floor(slider.getValue())); } + + public Text formatParticleMultiplierMultiplier(AbstractSlider slider) { + return Text.translatable("menu.cavedust.particlemultipliermultiplier", (int)Math.floor(slider.getValue())); + } public Text formatVelocityRandomness(AbstractSlider slider) { return Text.translatable("menu.cavedust.velocityrandomness", (int) Math.floor(slider.getValue())); } diff --git a/src/main/resources/assets/modid/lang/en_us.json b/src/main/resources/assets/modid/lang/en_us.json index 2f70b48..e053ad4 100644 --- a/src/main/resources/assets/modid/lang/en_us.json +++ b/src/main/resources/assets/modid/lang/en_us.json @@ -16,8 +16,10 @@ "menu.cavedust.lowerlimit.tooltip": "The height where particles spawn the most (uses player y).", "menu.cavedust.reset": "Reset settings", "menu.cavedust.reset.tooltip": "Are you sure you want to reset all settings?", - "menu.cavedust.particlemultiplier": "Particle multiplier: %s", - "menu.cavedust.particlemultiplier.tooltip": "Multiplies the amount of particles at any given depth.", + "menu.cavedust.particlemultiplier": "Particle amount: %s", + "menu.cavedust.particlemultiplier.tooltip": "Amount of particles to spawn at any given depth.", + "menu.cavedust.particlemultipliermultiplier": "Particle multiplier: %s", + "menu.cavedust.particlemultipliermultiplier.tooltip": "Multiplies particle amount.", "menu.cavedust.velocityrandomness": "Velocity randomness: %s", "menu.cavedust.velocityrandomness.tooltip": "The randomness of the velocity of the particles.", "menu.cavedust.enhanceddetection.true": "Enhanced detection: Enabled", diff --git a/src/main/resources/dust.mixins.json b/src/main/resources/dust.mixins.json index 923f4b3..1cad7ce 100644 --- a/src/main/resources/dust.mixins.json +++ b/src/main/resources/dust.mixins.json @@ -4,7 +4,8 @@ "package": "net.lizistired.cavedust.mixin", "compatibilityLevel": "JAVA_16", "mixins": [ - "ClientWorldAccessor" + "ClientWorldAccessor", + "MixinDebugScreenOverlay" ], "client": [ ],