[libjf-config-v0] extend /libjf config command to allow specific reloading, viewing and editing configs
This commit is contained in:
parent
558e6bd363
commit
71a382ee76
|
@ -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;
|
||||
|
|
|
@ -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<ServerCommandSource> c_libjf = literal(LibJf.MOD_ID).requires((serverCommandSource) -> serverCommandSource.hasPermissionLevel(4));
|
||||
LiteralArgumentBuilder<ServerCommandSource> 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<ServerCommandSource> 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<ServerCommandSource> c_instance = literal(id);
|
||||
for (EntryInfo entry : config.getEntries()) {
|
||||
LiteralArgumentBuilder<ServerCommandSource> 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;
|
||||
}
|
||||
}
|
|
@ -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;
|
|
@ -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 {
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
||||
}))));
|
||||
});
|
||||
}
|
||||
}
|
|
@ -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",
|
||||
|
|
Loading…
Reference in New Issue