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
|
|
|
|