diff --git a/README.md b/README.md
index 4b7a810..97f9bc6 100644
--- a/README.md
+++ b/README.md
@@ -1,16 +1,13 @@
-# Dust
+# Cave Dust
-## What...what is "Dust"?
+## What...what is "Cave Dust"?
I'm glad you asked! It's just a mod that adds the white ash particle from the Basalt Deltas biome to the underground to simulate dust! After all, the air wouldn't be 100% clear in a real mineshaft :p
Now to the nitty gritty:
-It works by checking if the player has the sky above them and by scaling the amount of particles based on depth.
-
--64y lots of particles!
-
-64y: less particles :(
+It works by checking if the player has the sky above them while being below sea level and then scales the amount of particles based on depth.
+
It has a config system that you can access using Mod Menu, most things you can change in-game, but to change the particle you'll need to open the config file manually :)
## Dependencies
-Dust requires the [Fabric API](https://www.curseforge.com/minecraft/mc-mods/fabric-api) but everything else Dust *needs* is included.
+Cave Dust requires the [Fabric API](https://www.curseforge.com/minecraft/mc-mods/fabric-api) but everything else Cave Dust *needs* is included.
***HOWEVER***, I recommend [Mod Menu](https://www.curseforge.com/minecraft/mc-mods/modmenu) to be able to use the config screen :p
diff --git a/build.gradle b/build.gradle
index 0575fec..0318321 100644
--- a/build.gradle
+++ b/build.gradle
@@ -18,9 +18,6 @@ repositories {
includeGroup "maven.modrinth"
}
}
- maven {
- url = "https://maven.shedaniel.me/"
- }
maven {
url = "https://maven.terraformersmc.com"
}
@@ -47,14 +44,10 @@ dependencies {
// Fabric API. This is technically optional, but you probably want it anyway.
modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"
- modApi("me.shedaniel.cloth:cloth-config-fabric:${project.clothconfig_version}") {
- exclude(group: "net.fabricmc.fabric-api")
- }
modImplementation "com.terraformersmc:modmenu:${project.modmenu_version}"
modApi "com.minelittlepony:kirin:${project.kirin_version}"
include "com.minelittlepony:kirin:${project.kirin_version}"
- //modImplementation "com.minelittlepony:minelittlepony:${project.minelp_version}"
modCompileOnly("com.terraformersmc:modmenu:${project.modmenu_version}")
}
diff --git a/gradle.properties b/gradle.properties
index 8c7fc94..ff74d47 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -8,9 +8,9 @@ org.gradle.jvmargs=-Xmx1G
loader_version=0.13.3
# Mod Properties
- mod_version = 1.0.1
+ mod_version = 1.1.0
maven_group = com.lizistired
- archives_base_name = dust
+ archives_base_name = cave_dust
# Dependencies
fabric_version=0.47.8+1.18.2
diff --git a/src/main/java/net/fabricmc/example/Dust.java b/src/main/java/net/fabricmc/example/Dust.java
deleted file mode 100644
index 42f6aff..0000000
--- a/src/main/java/net/fabricmc/example/Dust.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package net.fabricmc.example;
-
-import com.minelittlepony.common.util.GamePaths;
-import net.fabricmc.api.ClientModInitializer;
-import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
-import net.minecraft.client.MinecraftClient;
-import net.minecraft.particle.ParticleTypes;
-import net.minecraft.world.World;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.IOException;
-import java.nio.file.Path;
-import java.util.Random;
-
-public class Dust implements ClientModInitializer {
- public static final Logger LOGGER = LoggerFactory.getLogger("dust");
-
- private static Dust instance;
-
- public static Dust getInstance() {
- return instance;
- }
-
- public Dust() {
- instance = this;
- }
-
- private DustConfig config;
-
- public DustConfig getConfig() {
- return config;
- }
-
- @Override
- public void onInitializeClient() {
- Path dustFolder = GamePaths.getConfigDirectory().resolve("dust");
- config = new DustConfig(dustFolder.resolve("userconfig.json"), this);
- config.load();
-
- ClientTickEvents.END_CLIENT_TICK.register(this::createDust);
- }
-
- public int getRandomNumberUsingInts(int min, int max) {
- Random random = new Random();
- return random.ints(min, max)
- .findFirst()
- .getAsInt();
- }
-
- public static double lerp(double min, double max, double val) {
- return 1 - ((val - min) / (max - min));
- }
-
- private void createDust(MinecraftClient client) {
- if (getConfig().getDustEnabled()) {
- if (!client.isPaused()) {
- if (client.world != null) {
- World world = client.world;
- if (!client.player.clientWorld.isSkyVisible(client.player.getBlockPos())) {
- double x;
- double y;
- double z;
- double probabilityNormalized = lerp(64, -64, client.player.getBlockY());
- for (int i = 0; i < probabilityNormalized; i++) {
- x = client.player.getPos().getX() + getRandomNumberUsingInts(-5, 5);
- y = client.player.getPos().getY() + getRandomNumberUsingInts(-20, 20);
- z = client.player.getPos().getZ() + getRandomNumberUsingInts(-5, 5);
- world.addParticle(ParticleTypes.WHITE_ASH, x, y, z, getRandomNumberUsingInts(-5, 20), getRandomNumberUsingInts(-5, 20), getRandomNumberUsingInts(-5, 20));
- }
- }
- }
- }
- }
- }
-}
diff --git a/src/main/java/net/fabricmc/example/DustConfig.java b/src/main/java/net/fabricmc/example/DustConfig.java
deleted file mode 100644
index b02ff87..0000000
--- a/src/main/java/net/fabricmc/example/DustConfig.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package net.fabricmc.example;
-
-import net.fabricmc.example.utils.JsonFile;
-
-import java.nio.file.Path;
-import java.util.Vector;
-
-public class DustConfig extends JsonFile {
- private transient final Dust dust;
- private Vector dimensions;
- private boolean dustEnabled = true;
-
- public DustConfig(Path file, Dust dust) {
- super(file);
-
- this.dust = dust;
- }
-
- public Vector setDimensions(){
-
- return null;
- }
-
- public Vector getDimensions(){
-
- return null;
- }
-
- public boolean toggleDust(){
- dustEnabled = !dustEnabled;
- save();
- return dustEnabled;
- }
-
- public boolean getDustEnabled(){
- return dustEnabled;
- }
-}
diff --git a/src/main/java/net/fabricmc/example/ModMenuScreen.java b/src/main/java/net/fabricmc/example/ModMenuScreen.java
deleted file mode 100644
index dde36d2..0000000
--- a/src/main/java/net/fabricmc/example/ModMenuScreen.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package net.fabricmc.example;
-
-import com.minelittlepony.common.client.gui.GameGui;
-import com.minelittlepony.common.client.gui.element.*;
-import net.minecraft.client.gui.screen.Screen;
-import net.minecraft.client.util.math.MatrixStack;
-import net.minecraft.text.TranslatableText;
-
-import javax.annotation.Nullable;
-
-public class ModMenuScreen extends GameGui {
- public ModMenuScreen(@Nullable Screen parent) {
- super(new TranslatableText("menu.dust.title"), parent);
- }
-
- @Override
- public void init() {
- int left = width / 2 - 100;
- int row = height / 4 + 14;
-
- DustConfig config = Dust.getInstance().getConfig();
-
- addButton(new Label(width / 2, 30)).setCentered().getStyle()
- .setText(getTitle());
-
- addButton(new Button(left, row += 24).onClick(sender -> {
- sender.getStyle().setText("menu.dust.global." + config.toggleDust());
- })).getStyle()
- .setText("menu.dust.global." + config.getDustEnabled());
-
- addButton(new Button(left, row += 34)
- .onClick(sender -> finish())).getStyle()
- .setText("gui.done");
- }
-
- @Override
- public void render(MatrixStack matrices, int mouseX, int mouseY, float partialTicks) {
- renderBackground(matrices);
- super.render(matrices, mouseX, mouseY, partialTicks);
- }
-}
diff --git a/src/main/java/net/lizistired/cavedust/CaveDust.java b/src/main/java/net/lizistired/cavedust/CaveDust.java
new file mode 100644
index 0000000..5e52ed4
--- /dev/null
+++ b/src/main/java/net/lizistired/cavedust/CaveDust.java
@@ -0,0 +1,68 @@
+package net.lizistired.cavedust;
+
+//minecraft imports
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.world.World;
+//other imports
+import com.minelittlepony.common.util.GamePaths;
+import net.fabricmc.api.ClientModInitializer;
+import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+//java imports
+import java.nio.file.Path;
+//static imports
+import static net.lizistired.cavedust.utils.MathHelper.*;
+
+
+public class CaveDust implements ClientModInitializer {
+ //logger
+ public static final Logger LOGGER = LoggerFactory.getLogger("caveDust");
+ //make class static
+ private static CaveDust instance;
+ public static CaveDust getInstance() {
+ return instance;
+ }
+ public CaveDust() {
+ instance = this;
+ }
+ //config assignment
+ private static CaveDustConfig config;
+ public CaveDustConfig getConfig() {
+ return config;
+ }
+
+ @Override
+ public void onInitializeClient() {
+ //config path and loading
+ Path CaveDustFolder = GamePaths.getConfigDirectory().resolve("cavedust");
+ config = new CaveDustConfig(CaveDustFolder.getParent().resolve("cavedust.json"), this);
+ config.load();
+ //register end client tick to create cave dust function, using end client tick for async
+ ClientTickEvents.END_CLIENT_TICK.register(this::createCaveDust);
+ }
+
+ private void createCaveDust(MinecraftClient client) {
+
+ if (client.world == null) return;
+ World world = client.world;
+
+ if (shouldParticlesSpawn(client, config)) {
+ double probabilityNormalized = normalize(config.getLowerLimit(), config.getUpperLimit(), client.player.getBlockY());
+
+ for (int i = 0; i < probabilityNormalized * config.getParticleMultiplier(); i++) {
+ try {
+ double x = client.player.getPos().getX() + generateRandomDouble(config.getDimensionsMinX(), config.getDimensionsMaxX());
+ double y = client.player.getPos().getY() + generateRandomDouble(config.getDimensionsMinX(), config.getDimensionsMaxY());
+ double z = client.player.getPos().getZ() + generateRandomDouble(config.getDimensionsMinX(), config.getDimensionsMaxZ());
+
+ world.addParticle(config.getParticle(), x, y, z, 0, 0, 0);}
+
+ catch (NullPointerException e) {
+ LOGGER.error(String.valueOf(e));
+ getConfig().setParticle("minecraft:white_ash");
+ }
+ }
+ }
+ }
+}
diff --git a/src/main/java/net/lizistired/cavedust/CaveDustConfig.java b/src/main/java/net/lizistired/cavedust/CaveDustConfig.java
new file mode 100644
index 0000000..8380e0b
--- /dev/null
+++ b/src/main/java/net/lizistired/cavedust/CaveDustConfig.java
@@ -0,0 +1,205 @@
+package net.lizistired.cavedust;
+
+import net.lizistired.cavedust.utils.JsonFile;
+import net.minecraft.particle.ParticleEffect;
+import net.minecraft.particle.ParticleTypes;
+import net.minecraft.util.Identifier;
+import net.minecraft.util.registry.Registry;
+import static net.lizistired.cavedust.CaveDust.*;
+
+import java.nio.file.Path;
+
+public class CaveDustConfig extends JsonFile {
+ private transient final CaveDust CaveDust;
+
+
+ private int dimensionMaxX = 5;
+ private int dimensionMaxY = 5;
+ private int dimensionMaxZ = 5;
+ private int dimensionMinX = -5;
+ private int dimensionMinY = -5;
+ private int dimensionMinZ = -5;
+
+ private boolean caveDustEnabled = true;
+ private String particleName = "white_ash";
+ private boolean seaLevelCheck = true;
+ private float upperLimit = 64;
+ private float lowerLimit = -64;
+ private float particleMultiplier = 1;
+
+ public CaveDustConfig(Path file, CaveDust caveDust) {
+ super(file);
+ this.CaveDust = caveDust;
+ }
+
+ public float setDimensionsMinX(float size){
+ if (this.dimensionMinX != size) {
+ this.dimensionMinX = (int)size;
+ save();
+ }
+ return getDimensionsMinX();
+ }
+
+ public float setDimensionsMinY(float size){
+ if (this.dimensionMinY != size) {
+ this.dimensionMinY = (int)size;
+ save();
+ }
+ return getDimensionsMinY();
+ }
+
+ public float setDimensionsMinZ(float size){
+ if (this.dimensionMinZ != size) {
+ this.dimensionMinZ = (int)size;
+ save();
+ }
+ return getDimensionsMinZ();
+ }
+
+ public float getDimensionsMinX(){
+ return dimensionMinX;
+ }
+
+ public float getDimensionsMinY(){
+ return dimensionMinY;
+ }
+
+ public float getDimensionsMinZ(){
+ return dimensionMinZ;
+ }
+
+ public float setDimensionsMaxX(float size){
+ if (this.dimensionMaxX != size) {
+ this.dimensionMaxX = (int)size;
+ save();
+ }
+ return getDimensionsMaxX();
+ }
+
+ public float setDimensionsMaxY(float size){
+ if (this.dimensionMaxY != size) {
+ this.dimensionMaxY = (int)size;
+ save();
+ }
+ return getDimensionsMaxY();
+ }
+
+ public float setDimensionsMaxZ(float size){
+ if (this.dimensionMaxZ != size) {
+ this.dimensionMaxZ = (int)size;
+ save();
+ }
+ return getDimensionsMaxZ();
+ }
+
+ public float getDimensionsMaxX(){
+ return dimensionMaxX;
+ }
+
+ public float getDimensionsMaxY(){
+ return dimensionMaxY;
+ }
+
+ public float getDimensionsMaxZ(){
+ return dimensionMaxZ;
+ }
+
+ public float setUpperLimit(float upperLimit){
+ if (this.upperLimit - 1 < getLowerLimit())
+ {
+ return getUpperLimit();
+ }
+ if (this.upperLimit != upperLimit) {
+ this.upperLimit = (int)upperLimit;
+ save();
+ }
+ return getUpperLimit();
+ }
+
+ public float getUpperLimit(){
+ return upperLimit;
+ }
+
+ public float setLowerLimit(float lowerLimit){
+ if (this.lowerLimit + 1 > getUpperLimit())
+ {
+ return getLowerLimit();
+ }
+ if (this.lowerLimit != lowerLimit) {
+ this.lowerLimit = (int)lowerLimit;
+ save();
+ }
+ return getLowerLimit();
+ }
+
+ public float getLowerLimit(){
+ return lowerLimit;
+ }
+
+ public float getParticleMultiplier(){
+ return particleMultiplier;
+ }
+
+ public float setParticleMultiplier(float particleMultiplier){
+ this.particleMultiplier = particleMultiplier;
+ save();
+ return getParticleMultiplier();
+ }
+
+ public boolean toggleCaveDust(){
+ caveDustEnabled = !caveDustEnabled;
+ save();
+ return caveDustEnabled;
+ }
+
+ public boolean getCaveDustEnabled(){
+ return caveDustEnabled;
+ }
+
+ public ParticleEffect setParticle(String particleType){
+ particleName = particleType;
+ save();
+ return getParticle();
+ }
+
+ public ParticleEffect getParticle(){
+ try {
+ return (ParticleEffect) Registry.PARTICLE_TYPE.get(Identifier.tryParse(particleName.toLowerCase()));
+ } catch (ClassCastException e) {
+ LOGGER.error(e + "\nThere was an error loading the specified particle from the config, make sure a valid particle name is specified. Falling back to \"minecraft:white_ash\".");
+ particleName = "minecraft:white_ash";
+ save();
+ return ParticleTypes.WHITE_ASH;
+ }
+ }
+
+ public boolean getSeaLevelCheck() {
+ return seaLevelCheck;
+ }
+
+ public boolean setSeaLevelCheck() {
+ seaLevelCheck = !seaLevelCheck;
+ save();
+ return getSeaLevelCheck();
+ }
+
+ public void resetConfig(){
+ dimensionMinX = -5;
+ dimensionMinY = -5;
+ dimensionMinZ = -5;
+
+ dimensionMaxX = 5;
+ dimensionMaxY = 5;
+ dimensionMaxZ = 5;
+
+ upperLimit = 64;
+ lowerLimit = -64;
+
+ particleMultiplier = 1;
+
+ seaLevelCheck = true;
+ caveDustEnabled = true;
+ particleName = "minecraft:white_ash";
+ save();
+ }
+}
diff --git a/src/main/java/net/fabricmc/example/DustModMenuFactory.java b/src/main/java/net/lizistired/cavedust/CaveDustModMenuFactory.java
similarity index 56%
rename from src/main/java/net/fabricmc/example/DustModMenuFactory.java
rename to src/main/java/net/lizistired/cavedust/CaveDustModMenuFactory.java
index 0de1f4a..1fac9b0 100644
--- a/src/main/java/net/fabricmc/example/DustModMenuFactory.java
+++ b/src/main/java/net/lizistired/cavedust/CaveDustModMenuFactory.java
@@ -1,11 +1,11 @@
-package net.fabricmc.example;
+package net.lizistired.cavedust;
import com.terraformersmc.modmenu.api.ConfigScreenFactory;
import com.terraformersmc.modmenu.api.ModMenuApi;
-public class DustModMenuFactory implements ModMenuApi {
+public class CaveDustModMenuFactory implements ModMenuApi {
@Override
public ConfigScreenFactory> getModConfigScreenFactory() {
- return ModMenuScreen::new;
+ return net.lizistired.cavedust.ModMenuScreen::new;
}
}
diff --git a/src/main/java/net/lizistired/cavedust/ModMenuScreen.java b/src/main/java/net/lizistired/cavedust/ModMenuScreen.java
new file mode 100644
index 0000000..0618b4d
--- /dev/null
+++ b/src/main/java/net/lizistired/cavedust/ModMenuScreen.java
@@ -0,0 +1,97 @@
+package net.lizistired.cavedust;
+
+import com.minelittlepony.common.client.gui.GameGui;
+import com.minelittlepony.common.client.gui.element.*;
+import net.lizistired.cavedust.utils.TranslatableTextHelper;
+import net.minecraft.client.gui.screen.Screen;
+import net.minecraft.client.util.math.MatrixStack;
+import net.minecraft.text.TranslatableText;
+
+import javax.annotation.Nullable;
+
+public class ModMenuScreen extends GameGui {
+ public ModMenuScreen(@Nullable Screen parent) {
+ super(new TranslatableText("menu.cavedust.title"), parent);
+ }
+
+ @Override
+ public void init() {
+ int left = width / 2 - 100;
+ int row = height / 4 + 14;
+
+ CaveDustConfig config = CaveDust.getInstance().getConfig();
+ TranslatableTextHelper transText = new TranslatableTextHelper();
+ config.load();
+
+ addButton(new Label(width / 2, 30)).setCentered().getStyle()
+ .setText(getTitle());
+
+ addButton(new Button(left, row += -60).onClick(sender -> {
+ sender.getStyle().setText("menu.cavedust.global." + config.toggleCaveDust()).setTooltip(new TranslatableText("menu.cavedust.global.tooltip." + config.getCaveDustEnabled()));
+ })).getStyle()
+ .setText("menu.cavedust.global." + config.getCaveDustEnabled())
+ .setTooltip(new TranslatableText("menu.cavedust.global.tooltip." + config.getCaveDustEnabled()));
+
+ addButton(new Slider(left += -110, row += 24, -50, 0, config.getDimensionsMinX()))
+ .onChange(config::setDimensionsMinX)
+ .setTextFormat(transText::formatMinX)
+ .getStyle().setTooltip(new TranslatableText("menu.cavedust.minX.tooltip"));
+
+ addButton(new Slider(left, row += 24, -50, 0, config.getDimensionsMinY()))
+ .onChange(config::setDimensionsMinY)
+ .setTextFormat(transText::formatMinY)
+ .getStyle().setTooltip(new TranslatableText("menu.cavedust.minY.tooltip"));
+
+ addButton(new Slider(left, row += 24, -50, 0, config.getDimensionsMinZ()))
+ .onChange(config::setDimensionsMinZ)
+ .setTextFormat(transText::formatMinZ)
+ .getStyle().setTooltip(new TranslatableText("menu.cavedust.minZ.tooltip"));
+
+ addButton(new Slider(left += 220, row += -48, 0, 50, config.getDimensionsMaxX()))
+ .onChange(config::setDimensionsMaxX)
+ .setTextFormat(transText::formatMaxX)
+ .getStyle().setTooltip(new TranslatableText("menu.cavedust.maxX.tooltip"));
+
+ addButton(new Slider(left, row += 24, 0, 50, config.getDimensionsMaxY()))
+ .onChange(config::setDimensionsMaxY)
+ .setTextFormat(transText::formatMaxY)
+ .getStyle().setTooltip(new TranslatableText("menu.cavedust.maxY.tooltip"));
+
+ addButton(new Slider(left, row += 24, 0, 50, config.getDimensionsMaxZ()))
+ .onChange(config::setDimensionsMaxZ)
+ .setTextFormat(transText::formatMaxZ)
+ .getStyle().setTooltip(new TranslatableText("menu.cavedust.maxZ.tooltip"));
+
+ addButton(new Slider(left += -110, row += 24, -64, 319, config.getUpperLimit()))
+ .onChange(config::setUpperLimit)
+ .setTextFormat(transText::formatUpperLimit)
+ .getStyle().setTooltip(new TranslatableText("menu.cavedust.upperlimit.tooltip"));
+
+ addButton(new Slider(left, row += 24, -64, 319, config.getLowerLimit()))
+ .onChange(config::setLowerLimit)
+ .setTextFormat(transText::formatLowerLimit)
+ .getStyle().setTooltip(new TranslatableText("menu.cavedust.lowerlimit.tooltip"));
+
+ addButton(new Slider(left, row += 24, 0, 10, config.getParticleMultiplier()))
+ .onChange(config::setParticleMultiplier)
+ .setTextFormat(transText::formatParticleMultiplier)
+ .getStyle().setTooltip(new TranslatableText("menu.cavedust.particlemultiplier.tooltip"));
+
+
+ addButton(new Button(left, row += 24).onClick(sender -> {
+ config.resetConfig();
+ finish();
+ })).getStyle().setText(new TranslatableText("menu.cavedust.reset")).setTooltip(new TranslatableText("menu.cavedust.reset.tooltip"));
+
+ addButton(new Button(left, row += 180)
+ .onClick(sender -> finish())).getStyle()
+ .setText("gui.done");
+ }
+
+
+ @Override
+ public void render(MatrixStack matrices, int mouseX, int mouseY, float partialTicks) {
+ renderBackground(matrices);
+ super.render(matrices, mouseX, mouseY, partialTicks);
+ }
+}
diff --git a/src/main/java/net/lizistired/cavedust/mixin/MixinDebugScreenOverlay.java b/src/main/java/net/lizistired/cavedust/mixin/MixinDebugScreenOverlay.java
new file mode 100644
index 0000000..eabaa8c
--- /dev/null
+++ b/src/main/java/net/lizistired/cavedust/mixin/MixinDebugScreenOverlay.java
@@ -0,0 +1,45 @@
+package net.lizistired.cavedust.mixin;
+
+
+import net.minecraft.client.gui.hud.DebugHud;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.Unique;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Inject;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
+
+import java.lang.management.BufferPoolMXBean;
+import java.lang.management.ManagementFactory;
+import java.util.List;
+import java.util.Objects;
+import static net.lizistired.cavedust.utils.MathHelper.*;
+
+@Mixin(DebugHud.class)
+public abstract class MixinDebugScreenOverlay {
+ @Unique
+ private static final List pools = ManagementFactory.getPlatformMXBeans(BufferPoolMXBean.class);
+
+ @Unique
+ private static final BufferPoolMXBean directPool;
+
+ static {
+ BufferPoolMXBean found = null;
+
+ for (BufferPoolMXBean pool : pools) {
+ if (pool.getName().equals("direct")) {
+ found = pool;
+ break;
+ }
+ }
+
+ directPool = Objects.requireNonNull(found);
+ }
+ @Inject(method = "getRightText", at = @At("RETURN"))
+ private void appendShaderPackText(CallbackInfoReturnable> cir) {
+ List messages = cir.getReturnValue();
+
+ messages.add("");
+ messages.add("Should particles spawn: " + shouldParticlesSpawn);
+ messages.add("");
+ }
+}
diff --git a/src/main/java/net/fabricmc/example/utils/JsonFile.java b/src/main/java/net/lizistired/cavedust/utils/JsonFile.java
similarity index 89%
rename from src/main/java/net/fabricmc/example/utils/JsonFile.java
rename to src/main/java/net/lizistired/cavedust/utils/JsonFile.java
index 179d229..afb0c34 100644
--- a/src/main/java/net/fabricmc/example/utils/JsonFile.java
+++ b/src/main/java/net/lizistired/cavedust/utils/JsonFile.java
@@ -1,4 +1,4 @@
-package net.fabricmc.example.utils;
+package net.lizistired.cavedust.utils;
import java.io.BufferedWriter;
import java.io.IOException;
@@ -9,7 +9,7 @@ import java.nio.file.Path;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.InstanceCreator;
-import net.fabricmc.example.Dust;
+import net.lizistired.cavedust.CaveDust;
public class JsonFile {
protected transient final Gson gson = new GsonBuilder()
@@ -30,7 +30,7 @@ public class JsonFile {
try (Reader reader = Files.newBufferedReader(file)) {
load(reader);
} catch (Exception e) {
- Dust.LOGGER.error("Invalid config", e);
+ CaveDust.LOGGER.error("Invalid config", e);
}
}
diff --git a/src/main/java/net/lizistired/cavedust/utils/MathHelper.java b/src/main/java/net/lizistired/cavedust/utils/MathHelper.java
new file mode 100644
index 0000000..1a31c19
--- /dev/null
+++ b/src/main/java/net/lizistired/cavedust/utils/MathHelper.java
@@ -0,0 +1,73 @@
+package net.lizistired.cavedust.utils;
+
+import net.lizistired.cavedust.CaveDustConfig;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.render.DimensionEffects;
+import net.minecraft.entity.player.PlayerEntity;
+import net.minecraft.util.Identifier;
+import net.minecraft.util.registry.Registry;
+import net.minecraft.world.World;
+import net.minecraft.world.biome.Biome;
+import net.minecraft.world.biome.OverworldBiomeCreator;
+import net.minecraft.world.dimension.DimensionType;
+import net.minecraft.world.gen.feature.OceanRuinFeature;
+
+import java.util.Objects;
+import java.util.Optional;
+import java.util.Random;
+import java.util.concurrent.ThreadLocalRandom;
+
+import static net.minecraft.world.biome.BiomeKeys.LUSH_CAVES;
+
+public class MathHelper {
+ private static float timer;
+ public static boolean shouldParticlesSpawn;
+
+ public static double normalize(double min, double max, double val) {
+ return 1 - ((val - min) / (max - min));
+ }
+
+ public static int getRandomNumberUsingInts(int min, int max) {
+ Random random = new Random();
+
+ return random.ints(min, max)
+ .findFirst()
+ .getAsInt();
+ }
+
+
+ public static double generateRandomDouble(double min, double max) {
+ return ThreadLocalRandom.current().nextDouble(min, max);
+ }
+
+ public static boolean shouldParticlesSpawn(MinecraftClient client, CaveDustConfig config) {
+
+ //checks if the config is enabled, if the game isn't paused, if the world is valid, if the particle is valid and if the player isn't in a lush caves biome
+ if (!config.getCaveDustEnabled()
+ || client.isPaused()
+ || client.world == null
+ || !client.world.getDimension().isBedWorking()
+ || Objects.equals(client.world.getBiomeKey(Objects.requireNonNull(client.player).getBlockPos()), Optional.of(LUSH_CAVES)))
+ {
+ timer = 0;
+ shouldParticlesSpawn = false;
+ return false;
+ }
+
+ World world = client.world;
+ int seaLevel = world.getSeaLevel();
+
+ if (!client.player.clientWorld.isSkyVisible(client.player.getBlockPos())) {
+ if (client.player.getBlockPos().getY() < seaLevel){
+ timer = timer + 1;
+ if (timer > 10){
+ timer = 10;
+ shouldParticlesSpawn = true;
+ return true;
+ }
+ }
+ }
+ shouldParticlesSpawn = false;
+ return false;
+ }
+}
diff --git a/src/main/java/net/lizistired/cavedust/utils/TranslatableTextHelper.java b/src/main/java/net/lizistired/cavedust/utils/TranslatableTextHelper.java
new file mode 100644
index 0000000..81f0f95
--- /dev/null
+++ b/src/main/java/net/lizistired/cavedust/utils/TranslatableTextHelper.java
@@ -0,0 +1,35 @@
+package net.lizistired.cavedust.utils;
+
+import com.minelittlepony.common.client.gui.element.AbstractSlider;
+import net.minecraft.text.Text;
+import net.minecraft.text.TranslatableText;
+
+public class TranslatableTextHelper {
+ public Text formatMinX(AbstractSlider slider) {
+ return new TranslatableText("menu.cavedust.minX", (int)Math.floor(slider.getValue()));
+ }
+ public Text formatMinY(AbstractSlider slider) {
+ return new TranslatableText("menu.cavedust.minY", (int)Math.floor(slider.getValue()));
+ }
+ public Text formatMinZ(AbstractSlider slider) {
+ return new TranslatableText("menu.cavedust.minZ", (int)Math.floor(slider.getValue()));
+ }
+ public Text formatMaxX(AbstractSlider slider) {
+ return new TranslatableText("menu.cavedust.maxX", (int)Math.floor(slider.getValue()));
+ }
+ public Text formatMaxY(AbstractSlider slider) {
+ return new TranslatableText("menu.cavedust.maxY", (int)Math.floor(slider.getValue()));
+ }
+ public Text formatMaxZ(AbstractSlider slider) {
+ return new TranslatableText("menu.cavedust.maxZ", (int)Math.floor(slider.getValue()));
+ }
+ public Text formatUpperLimit(AbstractSlider slider) {
+ return new TranslatableText("menu.cavedust.upperlimit", (int)Math.floor(slider.getValue()));
+ }
+ public Text formatLowerLimit(AbstractSlider slider) {
+ return new TranslatableText("menu.cavedust.lowerlimit", (int)Math.floor(slider.getValue()));
+ }
+ public Text formatParticleMultiplier(AbstractSlider slider) {
+ return new TranslatableText("menu.cavedust.particlemultiplier", (int)Math.floor(slider.getValue()));
+ }
+}
diff --git a/src/main/java/net/lizistired/cavedust/utils/WindowFocusHelper.java b/src/main/java/net/lizistired/cavedust/utils/WindowFocusHelper.java
new file mode 100644
index 0000000..7509746
--- /dev/null
+++ b/src/main/java/net/lizistired/cavedust/utils/WindowFocusHelper.java
@@ -0,0 +1,10 @@
+package net.lizistired.caveDust.utils;
+
+import net.minecraft.client.MinecraftClient;
+
+public class WindowFocusHelper {
+ private static boolean unpaused;
+ public boolean unpausedMenu(MinecraftClient client){
+ return unpaused;
+ }
+}
diff --git a/src/main/resources/assets/modid/lang/en_us.json b/src/main/resources/assets/modid/lang/en_us.json
index a8b0c57..49f7e50 100644
--- a/src/main/resources/assets/modid/lang/en_us.json
+++ b/src/main/resources/assets/modid/lang/en_us.json
@@ -1,5 +1,27 @@
{
- "menu.dust.title": "Dust",
- "menu.dust.global.false": "Dust: disabled",
- "menu.dust.global.true": "Dust: enabled"
+ "menu.cavedust.title": "Cave Dust",
+ "menu.cavedust.global.false": "Cave Dust: Disabled",
+ "menu.cavedust.global.true": "Cave Dust: Enabled",
+ "menu.cavedust.global.tooltip.false": "Enable cave dust particles?",
+ "menu.cavedust.global.tooltip.true": "Disable cave dust particles?",
+ "menu.cavedust.minX": "Minimum X: %s",
+ "menu.cavedust.minY": "Minimum Y: %s",
+ "menu.cavedust.minZ": "Minimum Z: %s",
+ "menu.cavedust.maxX": "Maximum X: %s",
+ "menu.cavedust.maxY": "Maximum Y: %s",
+ "menu.cavedust.maxZ": "Maximum Z: %s",
+ "menu.cavedust.minX.tooltip": "Minimum X: %s",
+ "menu.cavedust.minY.tooltip": "Minimum Y: %s",
+ "menu.cavedust.minZ.tooltip": "Minimum Z: %s",
+ "menu.cavedust.maxX.tooltip": "Maximum X: %s",
+ "menu.cavedust.maxY.tooltip": "Maximum Y: %s",
+ "menu.cavedust.maxZ.tooltip": "Maximum Z: %s",
+ "menu.cavedust.upperlimit": "Upper limit: %s",
+ "menu.cavedust.lowerlimit": "Lower limit: %s",
+ "menu.cavedust.upperlimit.tooltip": "The height where particles will fade out and stop spawning (uses player y).",
+ "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."
}
\ No newline at end of file
diff --git a/src/main/resources/dust.mixins.json b/src/main/resources/dust.mixins.json
new file mode 100644
index 0000000..da8d793
--- /dev/null
+++ b/src/main/resources/dust.mixins.json
@@ -0,0 +1,16 @@
+{
+ "required": true,
+ "minVersion": "0.8",
+ "package": "net.lizistired.cavedust.mixin",
+ "compatibilityLevel": "JAVA_16",
+ "mixins": [
+ ],
+ "client": [
+ "MixinDebugScreenOverlay"
+ ],
+ "server": [
+ ],
+ "injectors": {
+ "defaultRequire": 1
+ }
+}
diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json
index e9163c7..3ed2f8c 100644
--- a/src/main/resources/fabric.mod.json
+++ b/src/main/resources/fabric.mod.json
@@ -1,9 +1,8 @@
{
"schemaVersion": 1,
- "id": "dust",
+ "id": "cavedust",
"version": "${version}",
-
- "name": "Dust",
+ "name": "Cave Dust",
"description": "Makes dust underground that scales with depth!",
"authors": [
"LizIsTired"
@@ -12,20 +11,20 @@
"issues": "https://github.com/LizIsTired/dust/issues",
"sources": "https://github.com/LizIsTired/dust"
},
-
"license": "CC0-1.0",
"icon": "assets/modid/icon.png",
-
"environment": "*",
"entrypoints": {
"client": [
- "net.fabricmc.example.Dust"
+ "net.lizistired.cavedust.CaveDust"
],
"modmenu": [
- "net.fabricmc.example.DustModMenuFactory"
+ "net.lizistired.cavedust.CaveDustModMenuFactory"
]
},
-
+ "mixins": [
+ "dust.mixins.json"
+ ],
"depends": {
"fabricloader": ">=0.12.11",
"fabric": "*",
@@ -33,7 +32,6 @@
"java": ">=17"
},
"suggests": {
- "clothconfig": ">=6.1.48",
"modmenu": ">=3.0.1"
},
"custom": {