Skip to content

Commit

Permalink
add config and some particle improvements
Browse files Browse the repository at this point in the history
  • Loading branch information
Enchanted-Games committed Feb 6, 2024
1 parent b496568 commit 84f70ec
Show file tree
Hide file tree
Showing 14 changed files with 778 additions and 17 deletions.
12 changes: 12 additions & 0 deletions build.gradle
Expand Up @@ -16,6 +16,12 @@ repositories {
// Loom adds the essential maven repositories to download Minecraft and libraries from automatically.
// See https://docs.gradle.org/current/userguide/declaring_repositories.html
// for more information about repositories.

maven {
name 'Xander Maven'
url 'https://maven.isxander.dev/releases'
}
maven { url "https://maven.terraformersmc.com/releases/" }
}

dependencies {
Expand All @@ -31,6 +37,12 @@ dependencies {
// These are included in the Fabric API production distribution and allow you to update your mod to the latest modules at a later more convenient time.

// modImplementation "net.fabricmc.fabric-api:fabric-api-deprecated:${project.fabric_version}"

// Yet Another Config Lib
modImplementation("dev.isxander.yacl:yet-another-config-lib-fabric:${project.yacl_version}")

// Mod Menu
modApi "com.terraformersmc:modmenu:${project.mod_menu_version}"
}

processResources {
Expand Down
6 changes: 5 additions & 1 deletion gradle.properties
Expand Up @@ -14,4 +14,8 @@ fabric_version=0.95.4+1.20.4
# Mod Properties
mod_version=1.0.0
maven_group=games.enchanted.fallingBlockParticles
archives_base_name=falling-block-particles
archives_base_name=falling-block-particles

# Dependencies
yacl_version=3.3.2+1.20.4
mod_menu_version=9.0.0
Expand Up @@ -5,14 +5,18 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import games.enchanted.fallingBlockParticles.config.ConfigFileHandling;
import games.enchanted.fallingBlockParticles.particle.ParticleTypes;

public class FallingBlockParticlesClient implements ClientModInitializer {
public static final String MOD_ID = "falling-block-particles";
public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID);
public static final String CONFIG_FILE_NAME = "falling_block_particles.properties";
public static final Logger log = LoggerFactory.getLogger(MOD_ID);

@Override
public void onInitializeClient() {
ParticleTypes.registerParticles();
ConfigFileHandling.loadConfig();
ConfigFileHandling.saveConfig();
}
}
@@ -0,0 +1,88 @@
package games.enchanted.fallingBlockParticles.config;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import games.enchanted.fallingBlockParticles.libs.nu.studer.OrderedProperties;

import games.enchanted.fallingBlockParticles.FallingBlockParticlesClient;
import games.enchanted.fallingBlockParticles.util.Conversions;
import net.fabricmc.loader.api.FabricLoader;

public class ConfigFileHandling {
public static final String FBP_RARITY = "falling_block_particle__rarity";
public static final String FBP_MIN_TICK_AGE = "falling_block_particle__min_age_in_ticks";
public static final String FBP_MAX_TICK_AGE = "falling_block_particle__max_age_in_ticks";
public static final String FBP_SCALE_TIME = "falling_block_particle__scale_time_in_ticks";
public static final String FBP_SCALE_DELAY = "falling_block_particle__scale_delay_in_ticks";

private static void writeProperties(OrderedProperties p) {
p.setProperty(FBP_RARITY, Integer.toString(ConfigValues.falling_block_particle__rarity));
p.setProperty(FBP_MIN_TICK_AGE, Integer.toString(ConfigValues.falling_block_particle__minAgeInTicks));
p.setProperty(FBP_MAX_TICK_AGE, Integer.toString(ConfigValues.falling_block_particle__maxAgeInTicks));
p.setProperty(FBP_SCALE_TIME, Integer.toString(ConfigValues.falling_block_particle__scaleTimeInTicks));
p.setProperty(FBP_SCALE_DELAY, Integer.toString(ConfigValues.falling_block_particle__scaleDelayInTicks));
}

private static void setConfigFromProperties(OrderedProperties p) {
ConfigValues.falling_block_particle__rarity = Conversions.defaultedStringToInt(getProperty(p, FBP_RARITY), DefaultConfigValues.falling_block_particle__rarity);
ConfigValues.falling_block_particle__minAgeInTicks = Conversions.defaultedStringToInt(getProperty(p, FBP_MIN_TICK_AGE), ConfigValues.falling_block_particle__minAgeInTicks);
ConfigValues.falling_block_particle__maxAgeInTicks = Conversions.defaultedStringToInt(getProperty(p, FBP_MAX_TICK_AGE), ConfigValues.falling_block_particle__maxAgeInTicks);
ConfigValues.falling_block_particle__scaleTimeInTicks = Conversions.defaultedStringToInt(getProperty(p, FBP_SCALE_TIME), ConfigValues.falling_block_particle__scaleTimeInTicks);
ConfigValues.falling_block_particle__scaleDelayInTicks = Conversions.defaultedStringToInt(getProperty(p, FBP_SCALE_DELAY), ConfigValues.falling_block_particle__scaleDelayInTicks);
}


// Call loadConfig before saving in onInitialize!
public static void saveConfig() {
OrderedProperties configProperties = new OrderedProperties();
Path configFilePath = FabricLoader.getInstance().getConfigDir().resolve(FallingBlockParticlesClient.CONFIG_FILE_NAME);

writeProperties(configProperties);

// create file if it doesn't already exist
if(!Files.exists(configFilePath) ) {
try {
Files.createFile(configFilePath);
} catch ( IOException exception ) {
FallingBlockParticlesClient.log.error("Could not create config file \"" + FallingBlockParticlesClient.CONFIG_FILE_NAME + "\"");
exception.printStackTrace();
return;
}
}

// save properties to file
try {
configProperties.store(Files.newOutputStream(configFilePath), " -- Config file for " + FallingBlockParticlesClient.MOD_ID + " -- ");
} catch ( IOException exception ) {
FallingBlockParticlesClient.log.error("Could not write to config file \"" + FallingBlockParticlesClient.CONFIG_FILE_NAME + "\"");
exception.printStackTrace();
}
}

public static void loadConfig() {
OrderedProperties configProperties = new OrderedProperties();
Path configFilePath = FabricLoader.getInstance().getConfigDir().resolve(FallingBlockParticlesClient.CONFIG_FILE_NAME);

// save defaults if no config exists
if( !Files.exists(configFilePath) ) {
saveConfig();
}

// read properties from config file
try {
configProperties.load( Files.newInputStream(configFilePath) );
} catch ( IOException exception ) {
FallingBlockParticlesClient.log.error("Could not read config file \"" + FallingBlockParticlesClient.CONFIG_FILE_NAME + "\"");
exception.printStackTrace();
return;
}

setConfigFromProperties(configProperties);
}

private static String getProperty(OrderedProperties p, String property) {
String prop = p.getProperty(property);
return prop == null ? "" : prop;
}
}
@@ -0,0 +1,9 @@
package games.enchanted.fallingBlockParticles.config;

public class ConfigValues {
public static int falling_block_particle__rarity = DefaultConfigValues.falling_block_particle__rarity;
public static int falling_block_particle__minAgeInTicks = DefaultConfigValues.falling_block_particle__minAgeInTicks;
public static int falling_block_particle__maxAgeInTicks = DefaultConfigValues.falling_block_particle__maxAgeInTicks;
public static int falling_block_particle__scaleTimeInTicks = DefaultConfigValues.falling_block_particle__scaleTimeInTicks;
public static int falling_block_particle__scaleDelayInTicks = DefaultConfigValues.falling_block_particle__scaleDelayInTicks;
}
@@ -0,0 +1,9 @@
package games.enchanted.fallingBlockParticles.config;

public class DefaultConfigValues {
public static final int falling_block_particle__rarity = 11;
public static final int falling_block_particle__minAgeInTicks = 70;
public static final int falling_block_particle__maxAgeInTicks = 140;
public static final int falling_block_particle__scaleTimeInTicks = 6;
public static final int falling_block_particle__scaleDelayInTicks = 60;
}
@@ -0,0 +1,74 @@
package games.enchanted.fallingBlockParticles.config;

import dev.isxander.yacl3.api.ConfigCategory;
import dev.isxander.yacl3.api.Option;
import dev.isxander.yacl3.api.OptionDescription;
import dev.isxander.yacl3.api.OptionGroup;
import dev.isxander.yacl3.api.YetAnotherConfigLib;
import dev.isxander.yacl3.api.controller.IntegerSliderControllerBuilder;
import games.enchanted.fallingBlockParticles.FallingBlockParticlesClient;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.text.Text;

public class YACLConfigBuilder {
private final static String translationStart = FallingBlockParticlesClient.MOD_ID;
// https://github.com/isXander/Controlify/blob/update/1.20.3/src/main/java/dev/isxander/controlify/gui/screen/GlobalSettingsScreenFactory.java
public static Screen buildScreen(Screen parent) {
return YetAnotherConfigLib.createBuilder()
.title( Text.translatableWithFallback(translationStart + ".config.title", "Configurable Item Timers Config") )
// main category
.category( ConfigCategory.createBuilder()
.name( Text.translatableWithFallback(translationStart + ".config.category.particles", "particles") )

// general group
.group( OptionGroup.createBuilder()
.name( Text.translatableWithFallback(translationStart + ".config.group.falling_block_particle", "falling block dust particle") )
// particle rarity
.option( Option.<Integer>createBuilder()
.name( Text.translatableWithFallback(translationStart + ".config.group.falling_block_particle.option.rarity", "particle spawn chance") )
.description( OptionDescription.of( Text.translatableWithFallback(translationStart + ".config.group.falling_block_particle.option.rarity.desc", "higher values reduce the chance of particles spawning") ) )
.binding( DefaultConfigValues.falling_block_particle__rarity, () -> ConfigValues.falling_block_particle__rarity, (newVal) -> ConfigValues.falling_block_particle__rarity = newVal )
.controller( opt -> IntegerSliderControllerBuilder.create(opt).range(1, 64).step(1) )
.build())
// min age
.option( Option.<Integer>createBuilder()
.name( Text.translatableWithFallback(translationStart + ".config.group.falling_block_particle.option.minAgeInTicks", "min particle lifespan (ticks)") )
.description( OptionDescription.of( Text.translatableWithFallback(translationStart + ".config.group.falling_block_particle.option.minAgeInTicks.desc", "minimum amount of time particles can live for, in ticks") ) )
.binding( DefaultConfigValues.falling_block_particle__minAgeInTicks, () -> ConfigValues.falling_block_particle__minAgeInTicks, (newVal) -> ConfigValues.falling_block_particle__minAgeInTicks = newVal )
.controller( opt -> IntegerSliderControllerBuilder.create(opt).range(0, 512).step(1) )
.build())
// max age
.option( Option.<Integer>createBuilder()
.name( Text.translatableWithFallback(translationStart + ".config.group.falling_block_particle.option.maxAgeInTicks", "max particle lifespan (ticks)") )
.description( OptionDescription.of( Text.translatableWithFallback(translationStart + ".config.group.falling_block_particle.option.maxAgeInTicks.desc", "maximum amount of time particles can live for, in ticks") ) )
.binding( DefaultConfigValues.falling_block_particle__maxAgeInTicks, () -> ConfigValues.falling_block_particle__maxAgeInTicks, (newVal) -> ConfigValues.falling_block_particle__maxAgeInTicks = newVal )
.controller( opt -> IntegerSliderControllerBuilder.create(opt).range(0, 512).step(1) )
.build())
// scale time
.option( Option.<Integer>createBuilder()
.name( Text.translatableWithFallback(translationStart + ".config.group.falling_block_particle.option.scaleTimeInTicks", "scale time (ticks)") )
.description( OptionDescription.of( Text.translatableWithFallback(translationStart + ".config.group.falling_block_particle.option.scaleTimeInTicks.desc", "time it takes for particle to shrink and dissapear, in ticks") ) )
.binding( DefaultConfigValues.falling_block_particle__scaleTimeInTicks, () -> ConfigValues.falling_block_particle__scaleTimeInTicks, (newVal) -> ConfigValues.falling_block_particle__scaleTimeInTicks = newVal )
.controller( opt -> IntegerSliderControllerBuilder.create(opt).range(0, 512).step(1) )
.build())
// scale delay
.option( Option.<Integer>createBuilder()
.name( Text.translatableWithFallback(translationStart + ".config.group.falling_block_particle.option.scaleDelayInTicks", "scale Delay (ticks)") )
.description( OptionDescription.of( Text.translatableWithFallback(translationStart + ".config.group.falling_block_particle.option.scaleDelayInTicks.desc", "deblay before the particle starts to shrink and disapear, in ticks") ) )
.binding( DefaultConfigValues.falling_block_particle__scaleDelayInTicks, () -> ConfigValues.falling_block_particle__scaleDelayInTicks, (newVal) -> ConfigValues.falling_block_particle__scaleDelayInTicks = newVal )
.controller( opt -> IntegerSliderControllerBuilder.create(opt).range(0, 512).step(1) )
.build())

.build())

.build())

.save(new Runnable() {
@Override
public void run() {
ConfigFileHandling.saveConfig();
}
})
.build().generateScreen(parent);
}
}
@@ -0,0 +1,15 @@
package games.enchanted.fallingBlockParticles.integrations;

import com.terraformersmc.modmenu.api.ConfigScreenFactory;
import com.terraformersmc.modmenu.api.ModMenuApi;

import games.enchanted.fallingBlockParticles.config.YACLConfigBuilder;

public class ModMenuIntegration implements ModMenuApi {
@Override
public ConfigScreenFactory<?> getModConfigScreenFactory() {
return parent -> {
return YACLConfigBuilder.buildScreen(parent);
};
}
}

0 comments on commit 84f70ec

Please sign in to comment.