diff --git a/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/ConfigInstanceImpl.java b/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/ConfigInstanceImpl.java index b5e1837..a2bda1a 100644 --- a/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/ConfigInstanceImpl.java +++ b/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/ConfigInstanceImpl.java @@ -5,7 +5,6 @@ import io.gitlab.jfronny.libjf.config.api.ConfigInstance; import io.gitlab.jfronny.libjf.config.api.Entry; import io.gitlab.jfronny.libjf.config.api.Preset; import io.gitlab.jfronny.libjf.config.api.Verifier; -import io.gitlab.jfronny.libjf.config.impl.entrypoint.JfConfigWatchService; import net.fabricmc.loader.api.FabricLoader; import java.lang.reflect.Field; diff --git a/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/JfConfigCommand.java b/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/JfConfigCommand.java new file mode 100644 index 0000000..5034744 --- /dev/null +++ b/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/JfConfigCommand.java @@ -0,0 +1,82 @@ +package io.gitlab.jfronny.libjf.config.impl; + +import com.mojang.brigadier.Command; +import com.mojang.brigadier.arguments.*; +import com.mojang.brigadier.builder.LiteralArgumentBuilder; +import io.gitlab.jfronny.libjf.LibJf; +import io.gitlab.jfronny.libjf.config.api.ConfigHolder; +import net.fabricmc.api.ModInitializer; +import net.fabricmc.fabric.api.command.v1.CommandRegistrationCallback; +import net.minecraft.server.command.ServerCommandSource; +import net.minecraft.text.LiteralText; + +import static net.minecraft.server.command.CommandManager.argument; +import static net.minecraft.server.command.CommandManager.literal; + +public class JfConfigCommand implements ModInitializer { + @Override + public void onInitialize() { + CommandRegistrationCallback.EVENT.register((dispatcher, dedicated) -> { + LiteralArgumentBuilder c_libjf = literal(LibJf.MOD_ID).requires((serverCommandSource) -> serverCommandSource.hasPermissionLevel(4)); + LiteralArgumentBuilder c_config = literal("config").executes(context -> { + context.getSource().sendFeedback(new LiteralText("[libjf-config-v0] Loaded configs for:"), false); + ConfigHolder.getInstance().getRegistered().forEach((s, config) -> { + context.getSource().sendFeedback(new LiteralText("- " + s), false); + }); + return Command.SINGLE_SUCCESS; + }); + LiteralArgumentBuilder c_reload = literal("reload").executes(context -> { + ConfigHolder.getInstance().getRegistered().forEach((mod, config) -> config.load()); + context.getSource().sendFeedback(new LiteralText("[libjf-config-v0] Reloaded configs"), true); + return Command.SINGLE_SUCCESS; + }); + ConfigHolder.getInstance().getRegistered().forEach((id, config) -> { + LiteralArgumentBuilder c_instance = literal(id); + for (EntryInfo entry : config.getEntries()) { + LiteralArgumentBuilder c_entry = literal(entry.field.getName()).executes(context -> { + context.getSource().sendFeedback(new LiteralText("[libjf-config-v0] The value of " + entry.field.getName() + " is " + entry.value), false); + return Command.SINGLE_SUCCESS; + }); + ArgumentType type = getType(entry); + if (type != null) { + c_entry.then(argument("value", type).executes(context -> { + Object value = context.getArgument("value", entry.field.getType()); + entry.value = value; + config.syncToClass(); + context.getSource().sendFeedback(new LiteralText("[libjf-config-v0] Set " + entry.field.getName() + " to " + value), true); + return Command.SINGLE_SUCCESS; + })); + } + else if (entry.field.getType().isEnum()) { + for (Object enumConstant : entry.field.getType().getEnumConstants()) { + c_entry.then(literal(enumConstant.toString()).executes(context -> { + entry.value = enumConstant; + config.syncToClass(); + context.getSource().sendFeedback(new LiteralText("[libjf-config-v0] Set " + entry.field.getName() + " to " + enumConstant), true); + return Command.SINGLE_SUCCESS; + })); + } + } + c_instance.then(c_entry); + } + c_config.then(c_instance); + c_reload.then(literal(id).executes(context -> { + config.load(); + context.getSource().sendFeedback(new LiteralText("[libjf-config-v0] Reloaded config for " + id), true); + return Command.SINGLE_SUCCESS; + })); + }); + dispatcher.register(c_libjf.then(c_config.then(c_reload))); + }); + } + + private ArgumentType getType(EntryInfo info) { + Class type = info.field.getType(); + if (type == int.class || type == Integer.class) return IntegerArgumentType.integer((int) info.entry.min(), (int) info.entry.max()); + else if (type == float.class || type == Float.class) return FloatArgumentType.floatArg((float) info.entry.min(), (float) info.entry.max()); + else if (type == double.class || type == Double.class) return DoubleArgumentType.doubleArg(info.entry.min(), info.entry.max()); + else if (type == String.class) return StringArgumentType.greedyString(); + else if (type == boolean.class || type == Boolean.class) return BoolArgumentType.bool(); + else return null; + } +} diff --git a/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/entrypoint/JfConfigWatchService.java b/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/JfConfigWatchService.java similarity index 98% rename from libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/entrypoint/JfConfigWatchService.java rename to libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/JfConfigWatchService.java index 23eee83..f8afec2 100644 --- a/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/entrypoint/JfConfigWatchService.java +++ b/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/JfConfigWatchService.java @@ -1,4 +1,4 @@ -package io.gitlab.jfronny.libjf.config.impl.entrypoint; +package io.gitlab.jfronny.libjf.config.impl; import io.gitlab.jfronny.libjf.LibJf; import io.gitlab.jfronny.libjf.config.api.ConfigHolder; diff --git a/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/entrypoint/JfConfigClient.java b/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/client/JfConfigClient.java similarity index 80% rename from libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/entrypoint/JfConfigClient.java rename to libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/client/JfConfigClient.java index bc67eab..cace3b8 100644 --- a/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/entrypoint/JfConfigClient.java +++ b/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/client/JfConfigClient.java @@ -1,9 +1,9 @@ -package io.gitlab.jfronny.libjf.config.impl.entrypoint; +package io.gitlab.jfronny.libjf.config.impl.client; import io.gitlab.jfronny.libjf.LibJf; import io.gitlab.jfronny.libjf.config.api.ConfigHolder; import io.gitlab.jfronny.libjf.config.api.ConfigInstance; -import io.gitlab.jfronny.libjf.config.impl.gui.EntryInfoWidgetBuilder; +import io.gitlab.jfronny.libjf.config.impl.client.screen.EntryInfoWidgetBuilder; import net.fabricmc.api.ClientModInitializer; public class JfConfigClient implements ClientModInitializer { diff --git a/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/ModMenu.java b/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/client/ModMenu.java similarity index 88% rename from libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/ModMenu.java rename to libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/client/ModMenu.java index 7cc7dcb..e48a64c 100644 --- a/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/ModMenu.java +++ b/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/client/ModMenu.java @@ -1,10 +1,10 @@ -package io.gitlab.jfronny.libjf.config.impl; +package io.gitlab.jfronny.libjf.config.impl.client; import com.terraformersmc.modmenu.api.ConfigScreenFactory; import com.terraformersmc.modmenu.api.ModMenuApi; import io.gitlab.jfronny.libjf.config.api.ConfigHolder; import io.gitlab.jfronny.libjf.config.api.ConfigInstance; -import io.gitlab.jfronny.libjf.config.impl.gui.TinyConfigScreen; +import io.gitlab.jfronny.libjf.config.impl.client.screen.TinyConfigScreen; import io.gitlab.jfronny.libjf.LibJf; import java.util.HashMap; diff --git a/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/gui/ConfigScreenEntry.java b/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/client/screen/ConfigScreenEntry.java similarity index 97% rename from libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/gui/ConfigScreenEntry.java rename to libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/client/screen/ConfigScreenEntry.java index 1eb7547..306d1fa 100644 --- a/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/gui/ConfigScreenEntry.java +++ b/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/client/screen/ConfigScreenEntry.java @@ -1,4 +1,4 @@ -package io.gitlab.jfronny.libjf.config.impl.gui; +package io.gitlab.jfronny.libjf.config.impl.client.screen; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; diff --git a/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/gui/EntryInfoWidgetBuilder.java b/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/client/screen/EntryInfoWidgetBuilder.java similarity index 98% rename from libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/gui/EntryInfoWidgetBuilder.java rename to libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/client/screen/EntryInfoWidgetBuilder.java index a7ef4f6..4a9a4f3 100644 --- a/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/gui/EntryInfoWidgetBuilder.java +++ b/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/client/screen/EntryInfoWidgetBuilder.java @@ -1,4 +1,4 @@ -package io.gitlab.jfronny.libjf.config.impl.gui; +package io.gitlab.jfronny.libjf.config.impl.client.screen; import io.gitlab.jfronny.libjf.config.api.ConfigInstance; import io.gitlab.jfronny.libjf.config.api.Entry; diff --git a/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/gui/MidnightConfigListWidget.java b/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/client/screen/MidnightConfigListWidget.java similarity index 96% rename from libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/gui/MidnightConfigListWidget.java rename to libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/client/screen/MidnightConfigListWidget.java index e6b8241..7de4243 100644 --- a/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/gui/MidnightConfigListWidget.java +++ b/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/client/screen/MidnightConfigListWidget.java @@ -1,4 +1,4 @@ -package io.gitlab.jfronny.libjf.config.impl.gui; +package io.gitlab.jfronny.libjf.config.impl.client.screen; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; diff --git a/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/gui/TinyConfigScreen.java b/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/client/screen/TinyConfigScreen.java similarity index 96% rename from libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/gui/TinyConfigScreen.java rename to libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/client/screen/TinyConfigScreen.java index 28b15ba..2239bc1 100644 --- a/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/gui/TinyConfigScreen.java +++ b/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/client/screen/TinyConfigScreen.java @@ -1,10 +1,8 @@ -package io.gitlab.jfronny.libjf.config.impl.gui; +package io.gitlab.jfronny.libjf.config.impl.client.screen; -import io.gitlab.jfronny.libjf.LibJf; import io.gitlab.jfronny.libjf.config.api.ConfigInstance; -import io.gitlab.jfronny.libjf.config.api.Entry; import io.gitlab.jfronny.libjf.config.impl.EntryInfo; -import io.gitlab.jfronny.libjf.config.impl.gui.presets.PresetsScreen; +import io.gitlab.jfronny.libjf.config.impl.client.screen.presets.PresetsScreen; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.MinecraftClient; @@ -20,7 +18,6 @@ import net.minecraft.text.Text; import net.minecraft.text.TranslatableText; import net.minecraft.util.Formatting; -import java.nio.file.Files; import java.util.*; import java.util.function.BiFunction; import java.util.function.Function; diff --git a/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/gui/presets/PresetEntry.java b/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/client/screen/presets/PresetEntry.java similarity index 93% rename from libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/gui/presets/PresetEntry.java rename to libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/client/screen/presets/PresetEntry.java index 582b6c2..b5b64a2 100644 --- a/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/gui/presets/PresetEntry.java +++ b/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/client/screen/presets/PresetEntry.java @@ -1,4 +1,4 @@ -package io.gitlab.jfronny.libjf.config.impl.gui.presets; +package io.gitlab.jfronny.libjf.config.impl.client.screen.presets; import net.minecraft.client.gui.Element; import net.minecraft.client.gui.Selectable; diff --git a/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/gui/presets/PresetListWidget.java b/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/client/screen/presets/PresetListWidget.java similarity index 90% rename from libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/gui/presets/PresetListWidget.java rename to libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/client/screen/presets/PresetListWidget.java index 5adff9e..b45d6f1 100644 --- a/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/gui/presets/PresetListWidget.java +++ b/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/client/screen/presets/PresetListWidget.java @@ -1,4 +1,4 @@ -package io.gitlab.jfronny.libjf.config.impl.gui.presets; +package io.gitlab.jfronny.libjf.config.impl.client.screen.presets; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.widget.ClickableWidget; diff --git a/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/gui/presets/PresetsScreen.java b/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/client/screen/presets/PresetsScreen.java similarity index 96% rename from libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/gui/presets/PresetsScreen.java rename to libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/client/screen/presets/PresetsScreen.java index e487d4a..3236742 100644 --- a/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/gui/presets/PresetsScreen.java +++ b/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/client/screen/presets/PresetsScreen.java @@ -1,4 +1,4 @@ -package io.gitlab.jfronny.libjf.config.impl.gui.presets; +package io.gitlab.jfronny.libjf.config.impl.client.screen.presets; import io.gitlab.jfronny.libjf.LibJf; import io.gitlab.jfronny.libjf.config.api.ConfigInstance; diff --git a/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/entrypoint/JfConfigCommand.java b/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/entrypoint/JfConfigCommand.java deleted file mode 100644 index 5f3bb46..0000000 --- a/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/entrypoint/JfConfigCommand.java +++ /dev/null @@ -1,30 +0,0 @@ -package io.gitlab.jfronny.libjf.config.impl.entrypoint; - -import com.mojang.brigadier.Command; -import io.gitlab.jfronny.libjf.LibJf; -import io.gitlab.jfronny.libjf.config.api.ConfigHolder; -import net.fabricmc.api.ModInitializer; -import net.fabricmc.fabric.api.command.v1.CommandRegistrationCallback; -import net.minecraft.text.LiteralText; - -import static net.minecraft.server.command.CommandManager.literal; - -public class JfConfigCommand implements ModInitializer { - @Override - public void onInitialize() { - CommandRegistrationCallback.EVENT.register((dispatcher, dedicated) -> { - dispatcher.register(literal(LibJf.MOD_ID).requires((serverCommandSource) -> serverCommandSource.hasPermissionLevel(4)) - .then(literal("config").executes(context -> { - context.getSource().sendFeedback(new LiteralText("[libjf-config-v0] Loaded configs for:"), false); - ConfigHolder.getInstance().getRegistered().forEach((s, config) -> { - context.getSource().sendFeedback(new LiteralText("- " + s), false); - }); - return Command.SINGLE_SUCCESS; - }).then(literal("reload").executes(context -> { - ConfigHolder.getInstance().getRegistered().forEach((mod, config) -> config.load()); - context.getSource().sendFeedback(new LiteralText("[libjf-config-v0] Reloaded configs"), true); - return Command.SINGLE_SUCCESS; - })))); - }); - } -} diff --git a/libjf-config-v0/src/main/resources/fabric.mod.json b/libjf-config-v0/src/main/resources/fabric.mod.json index 91a02e1..72c1ad5 100644 --- a/libjf-config-v0/src/main/resources/fabric.mod.json +++ b/libjf-config-v0/src/main/resources/fabric.mod.json @@ -3,9 +3,7 @@ "id": "libjf-config-v0", "name": "LibJF Config", "version": "${version}", - "authors": [ - "JFronny" - ], + "authors": ["JFronny"], "contact": { "website": "https://jfronny.gitlab.io", "repo": "https://gitlab.com/jfmods/libjf" @@ -13,12 +11,12 @@ "license": "MIT", "environment": "*", "entrypoints": { - "modmenu": ["io.gitlab.jfronny.libjf.config.impl.ModMenu"], - "client": ["io.gitlab.jfronny.libjf.config.impl.entrypoint.JfConfigClient"], + "modmenu": ["io.gitlab.jfronny.libjf.config.impl.client.ModMenu"], + "client": ["io.gitlab.jfronny.libjf.config.impl.client.JfConfigClient"], "libjf:preEarly": ["io.gitlab.jfronny.libjf.config.impl.entrypoint.JfConfigUnsafe"], "preLaunch": ["io.gitlab.jfronny.libjf.config.impl.entrypoint.JfConfigSafe"], - "main": ["io.gitlab.jfronny.libjf.config.impl.entrypoint.JfConfigCommand"], - "libjf:coprocess": ["io.gitlab.jfronny.libjf.config.impl.entrypoint.JfConfigWatchService"] + "main": ["io.gitlab.jfronny.libjf.config.impl.JfConfigCommand"], + "libjf:coprocess": ["io.gitlab.jfronny.libjf.config.impl.JfConfigWatchService"] }, "depends": { "fabricloader": ">=0.12.0",