de.pewpewproject.lasertag.command.lasertag.game.settings.SettingsCommandBuilder   A
last analyzed

Complexity

Total Complexity 12

Size/Duplication

Total Lines 75
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 40
dl 0
loc 75
rs 10
c 0
b 0
f 0
wmc 12

5 Methods

Rating   Name   Duplication   Size   Complexity  
A buildBoolSetting(LiteralArgumentBuilder,SettingDescription) 0 8 1
A buildLongSetting(LiteralArgumentBuilder,SettingDescription) 0 22 4
A buildEnumSetting(LiteralArgumentBuilder,SettingDescription) 0 7 1
A addSetting(LiteralArgumentBuilder,SettingDescription) 0 17 4
A buildSettingsCommands(LiteralArgumentBuilder) 0 4 2
1
package de.pewpewproject.lasertag.command.lasertag.game.settings;
2
3
import com.mojang.brigadier.arguments.BoolArgumentType;
4
import com.mojang.brigadier.arguments.LongArgumentType;
5
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
6
import de.pewpewproject.lasertag.command.suggestions.EnumSettingSuggestionProvider;
7
import de.pewpewproject.lasertag.lasertaggame.settings.SettingDataType;
8
import de.pewpewproject.lasertag.lasertaggame.settings.SettingDescription;
9
import net.minecraft.server.command.ServerCommandSource;
10
11
import static com.mojang.brigadier.arguments.BoolArgumentType.bool;
12
import static com.mojang.brigadier.arguments.LongArgumentType.longArg;
13
import static com.mojang.brigadier.arguments.StringArgumentType.word;
14
import static net.minecraft.server.command.CommandManager.argument;
15
import static net.minecraft.server.command.CommandManager.literal;
16
17
/**
18
 * Builds the command for every lasertag setting
19
 *
20
 * @author Étienne Muser
21
 */
22
public class SettingsCommandBuilder {
23
24
    /**
25
     * Adds all lasertag setting commands to an existing LiteralArgumentBuilder
26
     *
27
     * @param cmd The LiteralArgumentBuilder to add to
28
     */
29
    public static void buildSettingsCommands(LiteralArgumentBuilder<ServerCommandSource> cmd) {
30
31
        for (var setting : SettingDescription.values()) {
32
            addSetting(cmd, setting);
33
        }
34
    }
35
36
    private static void addSetting(LiteralArgumentBuilder<ServerCommandSource> cmd, SettingDescription setting) {
37
38
        // Get the setting data type
39
        var dataType = setting.getDataType();
40
41
        if (dataType == SettingDataType.LONG) {
42
43
            buildLongSetting(cmd, setting);
44
        } else if (dataType == SettingDataType.BOOL) {
45
46
            buildBoolSetting(cmd, setting);
47
        } else if (dataType.isEnum()) {
48
49
            buildEnumSetting(cmd, setting);
50
        } else {
51
52
            throw new IllegalArgumentException("DataType " + setting.getDataType().getValueType().getName() + " is not supported by SettingsCommandBuilder.");
53
        }
54
    }
55
56
    private static void buildLongSetting(LiteralArgumentBuilder<ServerCommandSource> cmd, SettingDescription setting) {
57
58
        LongArgumentType argumentType;
59
        var settingMinValue = (Long)setting.getMinValue();
60
        var settingMaxValue = (Long)setting.getMaxValue();
61
62
        if (settingMinValue != null && settingMaxValue != null) {
63
64
            argumentType = longArg(settingMinValue, settingMaxValue);
65
        } else if (settingMinValue != null) {
66
67
            argumentType = longArg(settingMinValue);
68
        } else {
69
70
            argumentType = longArg();
71
        }
72
73
        var command = new LongSettingCommand(setting.getName(), setting.getSettingValueName());
74
75
        cmd.then(literal(setting.getName())
76
                .then(argument(setting.getSettingValueName(), argumentType)
77
                        .executes(command)));
78
    }
79
80
    private static void buildBoolSetting(LiteralArgumentBuilder<ServerCommandSource> cmd, SettingDescription setting) {
81
82
        BoolArgumentType argumentType = bool();
83
        var command = new BoolSettingCommand(setting.getName(), setting.getSettingValueName());
84
85
        cmd.then(literal(setting.getName())
86
                .then(argument(setting.getSettingValueName(), argumentType)
87
                        .executes(command)));
88
    }
89
90
    private static void buildEnumSetting(LiteralArgumentBuilder<ServerCommandSource> cmd, SettingDescription setting) {
91
        var command = new EnumSettingCommand(setting.getName(), setting.getSettingValueName());
92
93
        cmd.then(literal(setting.getName())
94
                .then(argument(setting.getSettingValueName(), word())
95
                        .suggests(new EnumSettingSuggestionProvider(setting.getDataType().getValueType()))
96
                        .executes(command)));
97
    }
98
}
99