]> git.lizzy.rs Git - BoundingBoxOutlineReloaded.git/blob - src/main/java/com/irtimaled/bbor/client/commands/ConfigCommand.java
0cb9a1be36d2d9f564ea3165386aac9f72bc8b76
[BoundingBoxOutlineReloaded.git] / src / main / java / com / irtimaled / bbor / client / commands / ConfigCommand.java
1 package com.irtimaled.bbor.client.commands;
2
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;
13
14 import java.util.function.Function;
15
16 public class ConfigCommand {
17     private static final String COMMAND = "bbor:config";
18     private static final String GET = "get";
19     private static final String SAVE = "save";
20     private static final String SHOW_GUI = "showGui";
21     private static final String VALUE = "value";
22
23     public static void register(CommandDispatcher<ISuggestionProvider> commandDispatcher) {
24         LiteralArgumentBuilder command = Commands.literal(COMMAND)
25                 .then(buildCommands(GET, ConfigCommand::getCommandForSetting))
26                 .then(buildCommands(ArgumentNames.SET, ConfigCommand::setCommandForSetting))
27                 .then(Commands.literal(SAVE)
28                         .executes(context -> {
29                             ConfigManager.saveConfig();
30                             return 0;
31                         }))
32                 .then(Commands.literal(SHOW_GUI)
33                         .executes(context -> {
34                             SettingsScreen.show();
35                             return 0;
36                         }));
37
38         commandDispatcher.register(command);
39     }
40
41     private interface CommandBuilder extends Function<Setting<?>, LiteralArgumentBuilder<CommandSource>> {
42     }
43
44     private static LiteralArgumentBuilder<CommandSource> buildCommands(String commandName,
45                                                                        CommandBuilder commandBuilder) {
46         LiteralArgumentBuilder<CommandSource> command = Commands.literal(commandName);
47         for (Setting<?> setting : ConfigManager.getSettings()) {
48             command.then(commandBuilder.apply(setting));
49         }
50         return command;
51     }
52
53     private static LiteralArgumentBuilder<CommandSource> getCommandForSetting(Setting<?> setting) {
54         return Commands.literal(setting.getName())
55                 .executes(context -> {
56                     CommandHelper.feedback(context, "%s: %s", setting.getName(), setting.get());
57                     return 0;
58                 });
59     }
60
61     private static LiteralArgumentBuilder<CommandSource> setCommandForSetting(Setting<?> setting) {
62         LiteralArgumentBuilder<CommandSource> command = Commands.literal(setting.getName());
63         switch (setting.getType()) {
64             case 'B':
65                 return command.then(Commands.argument(VALUE, BoolArgumentType.bool())
66                         .executes(context -> {
67                             boolean value = BoolArgumentType.getBool(context, VALUE);
68                             ((Setting<Boolean>) setting).set(value);
69                             return 0;
70                         }));
71             case 'I':
72                 return command.then(Commands.argument(VALUE, IntegerArgumentType.integer())
73                         .executes(context -> {
74                             int value = IntegerArgumentType.getInteger(context, VALUE);
75                             ((Setting<Integer>) setting).set(value);
76                             return 0;
77                         }));
78         }
79         return command;
80     }
81 }