From 98556c7b934a23f17dc7b226947f013f0b7794e3 Mon Sep 17 00:00:00 2001 From: JFronny Date: Sat, 29 Jan 2022 12:06:02 +0100 Subject: [PATCH] Add command to reload config --- libjf-config-v0/build.gradle | 1 + .../jfronny/libjf/config/impl/Config.java | 6 ++- .../libjf/config/impl/ConfigCommand.java | 30 ++++++++++++ .../src/main/resources/fabric.mod.json | 3 ++ .../gitlab/jfronny/libjf/web/impl/JfWeb.java | 46 +++++++++---------- 5 files changed, 60 insertions(+), 26 deletions(-) create mode 100644 libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/ConfigCommand.java diff --git a/libjf-config-v0/build.gradle b/libjf-config-v0/build.gradle index c6bde97..271a266 100644 --- a/libjf-config-v0/build.gradle +++ b/libjf-config-v0/build.gradle @@ -3,4 +3,5 @@ archivesBaseName = "libjf-config-v0" dependencies { moduleDependencies(project, ["libjf-base", "libjf-unsafe-v0"]) include(fabricApi.module("fabric-resource-loader-v0", "${project.fabric_version}")) + include modImplementation(fabricApi.module("fabric-command-api-v1", "${project.fabric_version}")) } diff --git a/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/Config.java b/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/Config.java index ad9a87b..670eafd 100644 --- a/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/Config.java +++ b/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/Config.java @@ -98,8 +98,12 @@ public class Config { } } }); + load(); + } + + public void load() { try { - LibJf.GSON.fromJson(Files.newBufferedReader(path), config); + LibJf.GSON.fromJson(Files.newBufferedReader(path), configClass); } catch (Exception e) { LibJf.LOGGER.error("Could not read config", e); diff --git a/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/ConfigCommand.java b/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/ConfigCommand.java new file mode 100644 index 0000000..5d2b2c2 --- /dev/null +++ b/libjf-config-v0/src/main/java/io/gitlab/jfronny/libjf/config/impl/ConfigCommand.java @@ -0,0 +1,30 @@ +package io.gitlab.jfronny.libjf.config.impl; + +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 ConfigCommand 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 305e298..fed9e94 100644 --- a/libjf-config-v0/src/main/resources/fabric.mod.json +++ b/libjf-config-v0/src/main/resources/fabric.mod.json @@ -24,6 +24,9 @@ ], "preLaunch": [ "io.gitlab.jfronny.libjf.config.impl.entry.JfConfigSafe" + ], + "main": [ + "io.gitlab.jfronny.libjf.config.impl.ConfigCommand" ] }, "depends": { diff --git a/libjf-web-v0/src/main/java/io/gitlab/jfronny/libjf/web/impl/JfWeb.java b/libjf-web-v0/src/main/java/io/gitlab/jfronny/libjf/web/impl/JfWeb.java index 274ce43..e5d84f2 100644 --- a/libjf-web-v0/src/main/java/io/gitlab/jfronny/libjf/web/impl/JfWeb.java +++ b/libjf-web-v0/src/main/java/io/gitlab/jfronny/libjf/web/impl/JfWeb.java @@ -11,9 +11,9 @@ import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents; import net.fabricmc.fabric.api.command.v1.CommandRegistrationCallback; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; -import net.minecraft.server.command.CommandManager; import net.minecraft.server.command.ServerCommandSource; import net.minecraft.text.LiteralText; +import static net.minecraft.server.command.CommandManager.literal; public class JfWeb implements ClientModInitializer, DedicatedServerModInitializer, ModInitializer { public static final WebServer SERVER; @@ -42,30 +42,26 @@ public class JfWeb implements ClientModInitializer, DedicatedServerModInitialize public void onInitialize() { if (isEnabled()) { CommandRegistrationCallback.EVENT.register((dispatcher, dedicated) -> { - LiteralArgumentBuilder base = CommandManager.literal(LibJf.MOD_ID).requires((serverCommandSource) -> serverCommandSource.hasPermissionLevel(4)); - LiteralArgumentBuilder web = CommandManager.literal("web"); - base.then(web); - web.executes(context -> { - if (SERVER.isActive()) { - context.getSource().sendFeedback(new LiteralText("LibWeb is active. Use libweb restart to reload"), false); - } - else { - context.getSource().sendFeedback(new LiteralText("LibWeb is not active. Use libweb restart to reload"), false); - } - return Command.SINGLE_SUCCESS; - }); - web.then(CommandManager.literal("restart").executes(context -> { - try { - context.getSource().sendFeedback(new LiteralText("Restarting LibWeb"), true); - SERVER.restart(); - } - catch (Exception e) { - LibJf.LOGGER.error("Failed to run restart command", e); - context.getSource().sendError(new LiteralText(e.getMessage())); - } - return Command.SINGLE_SUCCESS; - })); - dispatcher.register(base); + dispatcher.register(literal(LibJf.MOD_ID).requires((serverCommandSource) -> serverCommandSource.hasPermissionLevel(4)) + .then(literal("web").executes(context -> { + if (SERVER.isActive()) { + context.getSource().sendFeedback(new LiteralText("LibWeb is active. Use libweb restart to reload"), false); + } + else { + context.getSource().sendFeedback(new LiteralText("LibWeb is not active. Use libweb restart to reload"), false); + } + return Command.SINGLE_SUCCESS; + }).then(literal("restart").executes(context -> { + try { + context.getSource().sendFeedback(new LiteralText("Restarting LibWeb"), true); + SERVER.restart(); + } + catch (Exception e) { + LibJf.LOGGER.error("Failed to run restart command", e); + context.getSource().sendError(new LiteralText(e.getMessage())); + } + return Command.SINGLE_SUCCESS; + })))); }); } Runtime.getRuntime().addShutdownHook(new Thread(SERVER::stop));