From cc7c711bb74baa1967eeebcaf133e71144004387 Mon Sep 17 00:00:00 2001 From: Stachelbeere1248 Date: Wed, 28 May 2025 13:45:05 +0200 Subject: [PATCH 1/2] add yacl 3.6.6 to deps --- build.gradle | 11 +++++++++-- gradle.properties | 1 + src/main/resources/fabric.mod.json | 3 ++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 9af532f..afc746a 100644 --- a/build.gradle +++ b/build.gradle @@ -11,7 +11,11 @@ base { } repositories { - maven { url 'https://repo.hypixel.net/repository/Hypixel/' } + maven { url 'https://repo.hypixel.net/repository/Hypixel/' }, + maven { + name 'Xander Maven' + url 'https://maven.isxander.dev/releases' + } } loom { @@ -32,7 +36,10 @@ dependencies { // Fabric API. This is technically optional, but you probably want it anyway. modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" + + // other deps modImplementation 'net.hypixel:mod-api:1.0.1' + modImplementation "dev.isxander:yet-another-config-lib:${project.yacl_version}" } processResources { @@ -81,4 +88,4 @@ publishing { // The repositories here will be used for publishing your artifact, not for // retrieving dependencies. } -} \ No newline at end of file +} diff --git a/gradle.properties b/gradle.properties index 29518a5..aaf68a2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -16,3 +16,4 @@ archives_base_name=zombies-utils # Dependencies fabric_version=0.123.2+1.21.5 +yacl_version=3.6.6+1.21.5-fabric diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 332d8b0..5235bee 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -33,7 +33,8 @@ "minecraft": "~1.21.5", "java": ">=21", "fabric-api": "*", - "hypixel-mod-api": ">=1.0.1" + "hypixel-mod-api": ">=1.0.1", + "yet_another_config_lib_v3": ">=3.6.6" }, "suggests": {} } From 84a7a1cf66bf161021770a2303c24cc57295f56d Mon Sep 17 00:00:00 2001 From: Stachelbeere1248 Date: Thu, 29 May 2025 19:41:34 +0200 Subject: [PATCH 2/2] WIP: rewrite config system unfinished commit --- build.gradle | 2 +- .../zombiesutils/config/AbstractConfig.java | 45 -------------- .../stachel/zombiesutils/config/Config.java | 59 ------------------- .../stachel/zombiesutils/config/Configs.java | 5 -- .../zombiesutils/config/DoubleConfig.java | 39 ------------ .../zombiesutils/config/IntConfig.java | 39 ------------ .../config/PlayerVisibilityConfig.java | 30 ++++++++++ .../config/ZombiesUtilsConfig.java | 38 ++++++++++++ 8 files changed, 69 insertions(+), 188 deletions(-) delete mode 100644 src/main/java/xyz/stachel/zombiesutils/config/AbstractConfig.java delete mode 100644 src/main/java/xyz/stachel/zombiesutils/config/Config.java delete mode 100644 src/main/java/xyz/stachel/zombiesutils/config/Configs.java delete mode 100644 src/main/java/xyz/stachel/zombiesutils/config/DoubleConfig.java delete mode 100644 src/main/java/xyz/stachel/zombiesutils/config/IntConfig.java create mode 100644 src/main/java/xyz/stachel/zombiesutils/config/PlayerVisibilityConfig.java create mode 100644 src/main/java/xyz/stachel/zombiesutils/config/ZombiesUtilsConfig.java diff --git a/build.gradle b/build.gradle index afc746a..f8ec86a 100644 --- a/build.gradle +++ b/build.gradle @@ -11,7 +11,7 @@ base { } repositories { - maven { url 'https://repo.hypixel.net/repository/Hypixel/' }, + maven { url 'https://repo.hypixel.net/repository/Hypixel/' } maven { name 'Xander Maven' url 'https://maven.isxander.dev/releases' diff --git a/src/main/java/xyz/stachel/zombiesutils/config/AbstractConfig.java b/src/main/java/xyz/stachel/zombiesutils/config/AbstractConfig.java deleted file mode 100644 index 8d97cec..0000000 --- a/src/main/java/xyz/stachel/zombiesutils/config/AbstractConfig.java +++ /dev/null @@ -1,45 +0,0 @@ -package xyz.stachel.zombiesutils.config; - -import com.google.common.base.CaseFormat; -import net.minecraft.client.gui.tooltip.Tooltip; -import net.minecraft.client.gui.widget.ClickableWidget; -import net.minecraft.text.Text; - -public abstract class AbstractConfig { - private final Text message; - private final Tooltip tooltip; - private T value; - - public AbstractConfig(String key, T defaultValue) { - value = defaultValue; - message = Text.translatable(String.format("hardcover.config.%s", toSnakeCase(key))); - tooltip = Tooltip.of(Text.translatable(String.format("hardcover.config.tooltip.%s", toSnakeCase(key)))); - } - - private static String toSnakeCase(String text) { - return CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, text); - } - - public abstract ClickableWidget createWidget(Runnable callback); - - public ClickableWidget createWidget() { - return createWidget(() -> {}); - } - - public Text getMessage() { - return message; - } - - public Tooltip getTooltip() { - return tooltip; - } - - public T getValue() { - return value; - } - - public void setValue(T value) { - this.value = value; - Config.writeFile(); - } -} \ No newline at end of file diff --git a/src/main/java/xyz/stachel/zombiesutils/config/Config.java b/src/main/java/xyz/stachel/zombiesutils/config/Config.java deleted file mode 100644 index 2432c0b..0000000 --- a/src/main/java/xyz/stachel/zombiesutils/config/Config.java +++ /dev/null @@ -1,59 +0,0 @@ -package xyz.stachel.zombiesutils.config; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonParser; -import net.fabricmc.loader.api.FabricLoader; -import xyz.stachel.zombiesutils.ZombiesUtils; - -import java.lang.reflect.Modifier; -import java.nio.file.Files; -import java.nio.file.Path; - -public final class Config { - private static final Gson GSON = new GsonBuilder() - .registerTypeAdapter(IntConfig.class, new IntConfig.Serializer()) - .registerTypeAdapter(DoubleConfig.class, new DoubleConfig.Serializer()) - .excludeFieldsWithModifiers(Modifier.TRANSIENT) - .setPrettyPrinting() - .create(); - private static final Path PATH = FabricLoader.getInstance().getConfigDir().resolve(String.format("%s.json", ZombiesUtils.MOD_ID)); - - public static void readFile() { - if (Files.exists(PATH)) { - try (var reader = Files.newBufferedReader(PATH)) { - var jsonElement = JsonParser.parseReader(reader); - - for (var field : Configs.class.getDeclaredFields()) { - var value = jsonElement.getAsJsonObject().get(field.getName()); - - if (value != null) { - var fieldType = field.getType(); - - if (IntConfig.class.isAssignableFrom(fieldType)) { - var intValue = value.getAsInt(); - ((IntConfig) field.get(null)).setValue(intValue); - } - - if (DoubleConfig.class.isAssignableFrom(fieldType)) { - var doubleValue = value.getAsDouble(); - ((DoubleConfig) field.get(null)).setValue(doubleValue); - } - } - } - } catch (Exception exception) { - ZombiesUtils.LOGGER.error("Failed to load configs at '{}'. Using default values.", PATH, exception); - } - } else { - writeFile(); - } - } - - public static void writeFile() { - try (var writer = Files.newBufferedWriter(PATH)) { - GSON.toJson(new Configs(), writer); - } catch (Exception exception) { - ZombiesUtils.LOGGER.error("Failed to save configs to '{}'.", PATH, exception); - } - } -} \ No newline at end of file diff --git a/src/main/java/xyz/stachel/zombiesutils/config/Configs.java b/src/main/java/xyz/stachel/zombiesutils/config/Configs.java deleted file mode 100644 index 65d3856..0000000 --- a/src/main/java/xyz/stachel/zombiesutils/config/Configs.java +++ /dev/null @@ -1,5 +0,0 @@ -package xyz.stachel.zombiesutils.config; - -public class Configs { - public static final DoubleConfig playerVisibleDistance = DoubleConfig.of("playerInvisibilityDistance", 0.8D); -} diff --git a/src/main/java/xyz/stachel/zombiesutils/config/DoubleConfig.java b/src/main/java/xyz/stachel/zombiesutils/config/DoubleConfig.java deleted file mode 100644 index 74e6421..0000000 --- a/src/main/java/xyz/stachel/zombiesutils/config/DoubleConfig.java +++ /dev/null @@ -1,39 +0,0 @@ -package xyz.stachel.zombiesutils.config; - -import com.google.gson.JsonElement; -import com.google.gson.JsonPrimitive; -import com.google.gson.JsonSerializationContext; -import com.google.gson.JsonSerializer; -import net.minecraft.client.gui.widget.ClickableWidget; -import net.minecraft.client.gui.widget.CyclingButtonWidget; -import net.minecraft.text.Text; - -import java.lang.reflect.Type; - -public class DoubleConfig extends AbstractConfig { - - public DoubleConfig(String key, Double defaultValue) { - super(key, defaultValue); - } - - public static DoubleConfig of(String key, double defaultValue) { - return new DoubleConfig(key, defaultValue); - } - - @Override - public ClickableWidget createWidget(Runnable callback) { - return CyclingButtonWidget.builder((value) -> Text.of(getValue().toString())).initially(getValue()) - .tooltip(value -> getTooltip()) - .build(getMessage(), (button, value) -> { - setValue(value); - callback.run(); - }); - } - - public static class Serializer implements JsonSerializer { - @Override - public JsonElement serialize(DoubleConfig value, Type type, JsonSerializationContext context) { - return new JsonPrimitive(value.getValue()); - } - } -} diff --git a/src/main/java/xyz/stachel/zombiesutils/config/IntConfig.java b/src/main/java/xyz/stachel/zombiesutils/config/IntConfig.java deleted file mode 100644 index 60534a0..0000000 --- a/src/main/java/xyz/stachel/zombiesutils/config/IntConfig.java +++ /dev/null @@ -1,39 +0,0 @@ -package xyz.stachel.zombiesutils.config; - -import com.google.gson.JsonElement; -import com.google.gson.JsonPrimitive; -import com.google.gson.JsonSerializationContext; -import com.google.gson.JsonSerializer; -import net.minecraft.client.gui.widget.ClickableWidget; -import net.minecraft.client.gui.widget.CyclingButtonWidget; -import net.minecraft.text.Text; - -import java.lang.reflect.Type; - -public class IntConfig extends AbstractConfig { - - public IntConfig(String key, Integer defaultValue) { - super(key, defaultValue); - } - - public static IntConfig of(String key, int defaultValue) { - return new IntConfig(key, defaultValue); - } - - @Override - public ClickableWidget createWidget(Runnable callback) { - return CyclingButtonWidget.builder((value) -> Text.of(getValue().toString())).initially(getValue()) - .tooltip(value -> getTooltip()) - .build(getMessage(), (button, value) -> { - setValue(value); - callback.run(); - }); - } - - public static class Serializer implements JsonSerializer { - @Override - public JsonElement serialize(IntConfig value, Type type, JsonSerializationContext context) { - return new JsonPrimitive(value.getValue()); - } - } -} diff --git a/src/main/java/xyz/stachel/zombiesutils/config/PlayerVisibilityConfig.java b/src/main/java/xyz/stachel/zombiesutils/config/PlayerVisibilityConfig.java new file mode 100644 index 0000000..7a1ddb8 --- /dev/null +++ b/src/main/java/xyz/stachel/zombiesutils/config/PlayerVisibilityConfig.java @@ -0,0 +1,30 @@ +package xyz.stachel.zombiesutils.config; + +import dev.isxander.yacl3.api.ConfigCategory; +import dev.isxander.yacl3.api.Option; +import dev.isxander.yacl3.api.OptionDescription; +import dev.isxander.yacl3.api.controller.FloatSliderControllerBuilder; +import dev.isxander.yacl3.config.v2.api.SerialEntry; +import net.minecraft.text.Text; + +public class PlayerVisibilityConfig { + + + @SerialEntry + private float range; + + ConfigCategory category(PlayerVisibilityConfig defaults) { + return ConfigCategory.createBuilder() + .name(Text.translatable("zombies-utils.config.player-visibility.name")) + .tooltip(Text.translatable("zombies-utils.config.player-visibility.tooltip")) + + .option(Option.createBuilder() + .name(Text.translatable("zombies-utils.config.player-visibility.range.name")) + .description(OptionDescription.of(Text.translatable("zombies-utils.config.player-visibility.range.tooltip"))) + .binding(defaults.range, () -> this.range, n -> {this.range = n;}) + .controller( o -> FloatSliderControllerBuilder.create(o).range(0f, 10f).step(0.01f)) + .build() + + ).build(); + } +} diff --git a/src/main/java/xyz/stachel/zombiesutils/config/ZombiesUtilsConfig.java b/src/main/java/xyz/stachel/zombiesutils/config/ZombiesUtilsConfig.java new file mode 100644 index 0000000..5de3382 --- /dev/null +++ b/src/main/java/xyz/stachel/zombiesutils/config/ZombiesUtilsConfig.java @@ -0,0 +1,38 @@ +package xyz.stachel.zombiesutils.config; + +import dev.isxander.yacl3.api.YetAnotherConfigLib; +import dev.isxander.yacl3.config.v2.api.ConfigClassHandler; +import dev.isxander.yacl3.config.v2.api.SerialEntry; +import dev.isxander.yacl3.config.v2.api.serializer.GsonConfigSerializerBuilder; +import net.fabricmc.loader.api.FabricLoader; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.screen.Screen; +import xyz.stachel.zombiesutils.ZombiesUtils; + +public class ZombiesUtilsConfig { + private static final ConfigClassHandler configHandler = ConfigClassHandler + .createBuilder(ZombiesUtilsConfig.class) + .serializer(cfg -> GsonConfigSerializerBuilder.create(cfg).setPath(FabricLoader.getInstance().getConfigDir().resolve(ZombiesUtils.MOD_ID).resolve("config.json")).build()).build(); + + public ZombiesUtilsConfig() { + this.playerVis = new PlayerVisibilityConfig(); + } + + @SerialEntry + PlayerVisibilityConfig playerVis; + + public void display() { + Screen screen = YetAnotherConfigLib.create(configHandler, (defaults, current, b) -> b + .category(current.playerVis.category(defaults.playerVis))) + .generateScreen(null); + MinecraftClient.getInstance().setScreen(screen); + } + + public static void init() { + ZombiesUtilsConfig.configHandler.load(); + } + + public static ZombiesUtilsConfig getConfig() { + return ZombiesUtilsConfig.configHandler.instance(); + } +}