Compare commits

...

10 Commits

Author SHA1 Message Date
Liz Graham
c111cc7193 Update README.md 2023-06-21 02:49:11 +01:00
Liz Graham
deed3db2cd Update build-release.yml 2023-05-22 03:57:51 +01:00
Liz Graham
de0983047a Bump to 1.4.0 2023-05-22 03:30:29 +01:00
Liz Graham
f453148c35 Improve error handling for incompatible particles 2023-05-22 03:29:40 +01:00
Liz Graham
5f48fec41a 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.
2023-05-22 03:26:21 +01:00
Liz Graham
c345b7822c UI update 2023-05-22 03:23:13 +01:00
Liz Graham
0a49b2d459 Update build-release.yml 2023-05-21 23:27:16 +01:00
Liz Graham
282ce2e1af Bump to 1.3.0 2023-05-21 07:47:32 +01:00
Liz Graham
ec342b7506 Update README.md 2023-05-21 07:44:22 +01:00
Liz Graham
b8a45b3ed5 set default id to white ash's id 2023-05-21 07:30:04 +01:00
11 changed files with 87 additions and 62 deletions

View File

@@ -33,29 +33,10 @@ jobs:
run: ./gradlew build --stacktrace
- name: Upload artifacts to Modrinth, Curseforge and GitHub
uses: Kir-Antipov/mc-publish@v2.0
uses: Kir-Antipov/mc-publish@v3.3
with:
modrinth-id: jawg7zT1
modrinth-token: ${{ secrets.MODRINTH_TOKEN }}
curseforge-id: 594750
curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }}
github-token: ${{ secrets.GITHUB_TOKEN }}
files: build/libs/!(*-@(dev|sources|all)).jar
version-type: release
loaders: fabric
java: 17
dependencies: |
fabric | depends | 0.46.0
P7dR8mSH | depends | 0.46.0
kirin | includes | 1.10.0-beta.2
modmenu | recommends | *
mOgUt4GM | recommends | *
version-resolver: latest # Defaults to selecting the latest compatible version of Minecraft, using the tag from the fabric.mod.json
curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }}

View File

@@ -6,7 +6,7 @@ I'm glad you asked! It's just a mod that adds the white ash particle from the Ba
Now to the nitty gritty:
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.
<br><br>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 :)
<br><br>It has a config system that you can access using Mod Menu.
<br>
## Dependencies
Cave Dust requires the [Fabric API](https://www.curseforge.com/minecraft/mc-mods/fabric-api) but everything else Cave Dust *needs* is included.

View File

@@ -8,7 +8,7 @@ org.gradle.jvmargs=-Xmx1G
loader_version=0.14.13
# Mod Properties
mod_version = 1.2.0
mod_version = 1.4.0
maven_group = com.lizistired
archives_base_name = cave_dust

View File

@@ -1,7 +1,9 @@
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;
import net.minecraft.text.Text;
import net.minecraft.util.math.BlockPos;
@@ -38,6 +40,9 @@ public class CaveDust implements ClientModInitializer {
return config;
}
public static int WHITE_ASH_ID = Registries.PARTICLE_TYPE.getRawId(ParticleTypes.WHITE_ASH);
public static int PARTICLE_AMOUNT = 0;
@Override
public void onInitializeClient() {
@@ -69,22 +74,24 @@ 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));
getConfig().setParticleID(79);
getConfig().setParticleID(WHITE_ASH_ID);
}
}
}

View File

@@ -1,9 +1,11 @@
package net.lizistired.cavedust;
import net.lizistired.cavedust.utils.JsonFile;
import net.minecraft.client.MinecraftClient;
import net.minecraft.particle.ParticleEffect;
import net.minecraft.particle.ParticleTypes;
import net.minecraft.registry.Registries;
import net.minecraft.text.Text;
import net.minecraft.util.Identifier;
import static net.lizistired.cavedust.CaveDust.*;
import static net.lizistired.cavedust.utils.MathHelper.*;
@@ -26,7 +28,9 @@ public class CaveDustConfig extends JsonFile {
private float lowerLimit = -64;
private int particleMultiplier = 1;
private int particleID = 79;
private int particleMultiplierMultiplier = 10;
private int particleID = WHITE_ASH_ID;
public CaveDustConfig(Path file, net.lizistired.cavedust.CaveDust caveDust) {
super(file);
@@ -111,6 +115,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();
@@ -128,7 +142,14 @@ public class CaveDustConfig extends JsonFile {
}
public ParticleEffect getParticle(){
return (ParticleEffect) Registries.PARTICLE_TYPE.get(new Identifier(Registries.PARTICLE_TYPE.getEntry(getParticleID()).get().getKey().get().getValue().toString().toLowerCase()));
try {
return (ParticleEffect) Registries.PARTICLE_TYPE.get(new Identifier(Registries.PARTICLE_TYPE.getEntry(getParticleID()).get().getKey().get().getValue().toString().toLowerCase()));
} catch (ClassCastException e) {
MinecraftClient.getInstance().player.sendMessage(Text.literal("Issue loading particle, defaulting to white ash particle!"), false);
setParticleID(WHITE_ASH_ID);
save();
return ParticleTypes.WHITE_ASH;
}
}
public boolean getSeaLevelCheck() {
@@ -183,7 +204,7 @@ public class CaveDustConfig extends JsonFile {
public int getParticleID(){
if ((!Registries.PARTICLE_TYPE.getEntry(particleID).isPresent())) {
setParticleID(79);
setParticleID(WHITE_ASH_ID);
}
return particleID;
}
@@ -197,10 +218,11 @@ public class CaveDustConfig extends JsonFile {
lowerLimit = -64;
particleMultiplier = 1;
particleMultiplierMultiplier = 10;
seaLevelCheck = true;
caveDustEnabled = true;
particleID = 79;
particleID = WHITE_ASH_ID;
save();
}
}

View File

@@ -27,7 +27,7 @@ public class ModMenuConfigScreen extends GameGui {
addButton(new Label(width / 2, 30)).setCentered().getStyle()
.setText(getTitle());
addButton(new Button(left, row += -60).onClick(sender -> {
addButton(new Button(left += -110, row += -60).onClick(sender -> {
sender.getStyle().setText("menu.cavedust.global." + config.toggleCaveDust()).setTooltip(Text.translatable("menu.cavedust.global.tooltip." + config.getCaveDustEnabled()));
})).getStyle()
.setText("menu.cavedust.global." + config.getCaveDustEnabled())
@@ -46,7 +46,33 @@ public class ModMenuConfigScreen extends GameGui {
.setTooltip(Text.translatable("menu.cavedust.superflatstatus.tooltip"));
addButton(new Slider(left, row += 48, 1, 50, config.getDimensionsX()))
/*addButton(new Slider(left, row += 48, -64, 319, config.getUpperLimit()))
.onChange(config::setUpperLimit)
.setTextFormat(transText::formatUpperLimit)
.getStyle().setTooltip(Text.translatable("menu.cavedust.upperlimit.tooltip"));
addButton(new Slider(left, row += 24, -64, 319, config.getLowerLimit()))
.onChange(config::setLowerLimit)
.setTextFormat(transText::formatLowerLimit)
.getStyle().setTooltip(Text.translatable("menu.cavedust.lowerlimit.tooltip"));*/
addButton(new Slider(left, row += 24, 1, 100, config.getParticleMultiplier()))
.onChange(config::setParticleMultiplier)
.setTextFormat(transText::formatParticleMultiplier)
.getStyle().setTooltip(Text.translatable("menu.cavedust.particlemultiplier.tooltip"));
addButton(new Slider(left, row += 24, 1, 100, config.getParticleMultiplierMultiplier()))
.onChange(config::setParticleMultiplierMultiplier)
.setTextFormat(transText::formatParticleMultiplierMultiplier)
.getStyle().setTooltip(Text.translatable("menu.cavedust.particlemultipliermultiplier.tooltip"));
addButton(new Button(left, row += 24).onClick(sender ->{
config.iterateParticle();
sender.getStyle().setText("Particle: " + (getNameOfParticle()));
})).getStyle().setText("Particle: " + (getNameOfParticle()))
.setTooltip(Text.translatable("menu.cavedust.particle.tooltip"));
addButton(new Slider(left += 220, row -= 96, 1, 50, config.getDimensionsX()))
.onChange(config::setDimensionsX)
.setTextFormat(transText::formatMaxX)
.getStyle().setTooltip(Text.translatable("menu.cavedust.X.tooltip"));
@@ -61,38 +87,18 @@ public class ModMenuConfigScreen extends GameGui {
.setTextFormat(transText::formatMaxZ)
.getStyle().setTooltip(Text.translatable("menu.cavedust.Z.tooltip"));
addButton(new Slider(left, row += 24, -64, 319, config.getUpperLimit()))
.onChange(config::setUpperLimit)
.setTextFormat(transText::formatUpperLimit)
.getStyle().setTooltip(Text.translatable("menu.cavedust.upperlimit.tooltip"));
addButton(new Slider(left, row += 24, -64, 319, config.getLowerLimit()))
.onChange(config::setLowerLimit)
.setTextFormat(transText::formatLowerLimit)
.getStyle().setTooltip(Text.translatable("menu.cavedust.lowerlimit.tooltip"));
addButton(new Slider(left, row += 24, 1, 100, config.getParticleMultiplier()))
.onChange(config::setParticleMultiplier)
.setTextFormat(transText::formatParticleMultiplier)
.getStyle().setTooltip(Text.translatable("menu.cavedust.particlemultiplier.tooltip"));
addButton(new Slider(left, row += 24, 0, 10, config.getVelocityRandomness()))
.onChange(config::setVelocityRandomness)
.setTextFormat(transText::formatVelocityRandomness)
.getStyle().setTooltip(Text.translatable("menu.cavedust.velocityrandomness.tooltip"));
addButton(new Button(left, row += 24).onClick(sender ->{
config.iterateParticle();
sender.getStyle().setText("Particle: " + (getNameOfParticle()));
})).getStyle().setText("Particle: " + (getNameOfParticle()))
.setTooltip(Text.translatable("menu.cavedust.particle.tooltip"));
addButton(new Button(left, row += 24).onClick(sender -> {
addButton(new Button(left -= 110, row += 60).onClick(sender -> {
config.resetConfig();
finish();
})).getStyle().setText(Text.translatable("menu.cavedust.reset")).setTooltip(Text.translatable("menu.cavedust.reset.tooltip"));
addButton(new Button(left, row += 60)
addButton(new Button(left, row += 24)
.onClick(sender -> finish())).getStyle()
.setText("gui.done");

View File

@@ -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<String> messages = cir.getReturnValue();
messages.add("");
messages.add("Should particles spawn: " + shouldParticlesSpawn);
messages.add("Particle amount evaluated: " + PARTICLE_AMOUNT);
messages.add("");
}
}

View File

@@ -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))
{

View File

@@ -24,6 +24,10 @@ public class TranslatableTextHelper {
public Text formatParticleMultiplier(AbstractSlider<Float> slider) {
return Text.translatable("menu.cavedust.particlemultiplier", (int)Math.floor(slider.getValue()));
}
public Text formatParticleMultiplierMultiplier(AbstractSlider<Float> slider) {
return Text.translatable("menu.cavedust.particlemultipliermultiplier", (int)Math.floor(slider.getValue()));
}
public Text formatVelocityRandomness(AbstractSlider<Float> slider) {
return Text.translatable("menu.cavedust.velocityrandomness", (int) Math.floor(slider.getValue()));
}

View File

@@ -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",

View File

@@ -4,7 +4,8 @@
"package": "net.lizistired.cavedust.mixin",
"compatibilityLevel": "JAVA_16",
"mixins": [
"ClientWorldAccessor"
"ClientWorldAccessor",
"MixinDebugScreenOverlay"
],
"client": [
],