1 package com.irtimaled.bbor.client.commands;
3 import com.irtimaled.bbor.client.config.ConfigManager;
4 import com.irtimaled.bbor.client.config.Setting;
5 import com.irtimaled.bbor.client.gui.SettingsScreen;
6 import com.mojang.brigadier.CommandDispatcher;
7 import com.mojang.brigadier.arguments.BoolArgumentType;
8 import com.mojang.brigadier.arguments.IntegerArgumentType;
9 import com.mojang.brigadier.builder.LiteralArgumentBuilder;
10 import net.minecraft.command.CommandSource;
11 import net.minecraft.command.Commands;
12 import net.minecraft.command.ISuggestionProvider;
14 import java.util.function.Function;
16 public class ConfigCommand {
17 private static final String COMMAND = "bbor:config";
18 private static final String GET = "get";
19 private static final String SET = "set";
20 private static final String SAVE = "save";
21 private static final String SHOW_GUI = "showGui";
22 private static final String VALUE = "value";
24 public static void register(CommandDispatcher<ISuggestionProvider> commandDispatcher) {
25 LiteralArgumentBuilder command = Commands.literal(COMMAND)
26 .then(buildCommands(GET, ConfigCommand::getCommandForSetting))
27 .then(buildCommands(SET, ConfigCommand::setCommandForSetting))
28 .then(Commands.literal(SAVE)
29 .executes(context -> {
30 ConfigManager.saveConfig();
33 .then(Commands.literal(SHOW_GUI)
34 .executes(context -> {
35 SettingsScreen.show();
39 commandDispatcher.register(command);
42 private interface CommandBuilder extends Function<Setting<?>, LiteralArgumentBuilder<CommandSource>> {
45 private static LiteralArgumentBuilder<CommandSource> buildCommands(String commandName,
46 CommandBuilder commandBuilder) {
47 LiteralArgumentBuilder<CommandSource> command = Commands.literal(commandName);
48 for (Setting<?> setting : ConfigManager.getSettings()) {
49 command.then(commandBuilder.apply(setting));
54 private static LiteralArgumentBuilder<CommandSource> getCommandForSetting(Setting<?> setting) {
55 return Commands.literal(setting.getName())
56 .executes(context -> {
57 CommandHelper.feedback(context, "%s: %s", setting.getName(), setting.get());
62 private static LiteralArgumentBuilder<CommandSource> setCommandForSetting(Setting<?> setting) {
63 LiteralArgumentBuilder<CommandSource> command = Commands.literal(setting.getName());
64 switch (setting.getType()) {
66 return command.then(Commands.argument(VALUE, BoolArgumentType.bool())
67 .executes(context -> {
68 boolean value = BoolArgumentType.getBool(context, VALUE);
69 ((Setting<Boolean>) setting).set(value);
73 return command.then(Commands.argument(VALUE, IntegerArgumentType.integer())
74 .executes(context -> {
75 int value = IntegerArgumentType.getInteger(context, VALUE);
76 ((Setting<Integer>) setting).set(value);