Skip to content

Commit 786ac3a

Browse files
committed
Replace the ArgumentTypes class with MinecraftArgumentType enum for safety
1 parent 644262c commit 786ac3a

7 files changed

+407
-191
lines changed

bukkit/src/main/java/revxrsal/commands/bukkit/BukkitBrigadier.java

+8-10
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
import com.mojang.brigadier.arguments.StringArgumentType;
2828
import org.jetbrains.annotations.NotNull;
2929
import revxrsal.commands.bukkit.brigadier.ArgumentTypeResolver;
30-
import revxrsal.commands.bukkit.brigadier.ArgumentTypes;
30+
import revxrsal.commands.bukkit.brigadier.MinecraftArgumentType;
3131
import revxrsal.commands.command.CommandActor;
3232
import revxrsal.commands.command.CommandParameter;
3333

@@ -51,21 +51,19 @@ public interface BukkitBrigadier {
5151
*
5252
* @param type Type to register for
5353
* @param argumentType The argument type to register
54-
* @see ArgumentTypes
54+
* @see revxrsal.commands.bukkit.brigadier.MinecraftArgumentType
5555
*/
5656
void bind(@NotNull Class<?> type, @NotNull ArgumentType<?> argumentType);
5757

5858
/**
59-
* Registers a native Minecraft argument type for the given class.
60-
* This will include subclasses as well.
61-
* <p>
62-
* See <a href="https://wiki.vg/Command_Data#Parsers">Command Data</a>
59+
* Registers an argument type for the given class. This will
60+
* include subclasses as well.
6361
*
64-
* @param type Type to register for
65-
* @param argumentTypeKey The key of the argument type
66-
* @see ArgumentTypes
62+
* @param type Type to register for
63+
* @param argumentType The argument type to register
64+
* @see revxrsal.commands.bukkit.brigadier.MinecraftArgumentType
6765
*/
68-
void bind(@NotNull Class<?> type, @NotNull String argumentTypeKey);
66+
void bind(@NotNull Class<?> type, @NotNull MinecraftArgumentType argumentType);
6967

7068
/**
7169
* Returns the argument type corresponding to the given parameter. If

bukkit/src/main/java/revxrsal/commands/bukkit/brigadier/ArgumentTypes.java

-154
This file was deleted.

bukkit/src/main/java/revxrsal/commands/bukkit/brigadier/CommodoreBukkitBrigadier.java

+3-4
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
import com.mojang.brigadier.arguments.ArgumentType;
2727
import com.mojang.brigadier.arguments.StringArgumentType;
2828
import com.mojang.brigadier.tree.LiteralCommandNode;
29-
import org.bukkit.NamespacedKey;
3029
import org.bukkit.command.Command;
3130
import org.bukkit.entity.Player;
3231
import org.bukkit.plugin.java.JavaPlugin;
@@ -74,10 +73,10 @@ public CommodoreBukkitBrigadier(BukkitCommandHandler handler) {
7473
argumentTypes.add(type, parameter -> argumentType);
7574
}
7675

77-
@Override public void bind(@NotNull Class<?> type, @NotNull String argumentTypeKey) {
76+
@Override public void bind(@NotNull Class<?> type, @NotNull MinecraftArgumentType argumentType) {
7877
notNull(type, "type");
79-
notNull(argumentTypeKey, "argument type key");
80-
argumentTypes.add(type, parameter -> ArgumentTypes.getByKey(NamespacedKey.minecraft(argumentTypeKey)));
78+
notNull(argumentType, "argument type");
79+
argumentType.getIfPresent().ifPresent(c -> argumentTypes.add(type, parameter -> c));
8180
}
8281

8382
public @NotNull ArgumentType<?> getArgumentType(@NotNull CommandParameter parameter) {

bukkit/src/main/java/revxrsal/commands/bukkit/brigadier/CommodoreProvider.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ private static Throwable checkSupported() {
4444
try {
4545
Class.forName("com.mojang.brigadier.CommandDispatcher");
4646
Commodore.ensureSetup();
47-
ArgumentTypes.ensureSetup();
47+
MinecraftArgumentType.ensureSetup();
4848
return null;
4949
} catch (Throwable e) {
5050
return e;

bukkit/src/main/java/revxrsal/commands/bukkit/brigadier/DefaultArgTypeResolvers.java

+1-15
Original file line numberDiff line numberDiff line change
@@ -25,23 +25,19 @@
2525

2626
import com.mojang.brigadier.arguments.ArgumentType;
2727
import com.mojang.brigadier.arguments.BoolArgumentType;
28-
import org.bukkit.NamespacedKey;
2928
import org.bukkit.entity.Entity;
3029
import org.bukkit.entity.Player;
3130
import org.jetbrains.annotations.Nullable;
3231
import revxrsal.commands.annotation.Range;
3332
import revxrsal.commands.bukkit.core.BukkitHandler;
3433
import revxrsal.commands.util.Primitives;
3534

36-
import java.lang.reflect.Constructor;
37-
3835
import static com.mojang.brigadier.arguments.DoubleArgumentType.doubleArg;
3936
import static com.mojang.brigadier.arguments.FloatArgumentType.floatArg;
4037
import static com.mojang.brigadier.arguments.IntegerArgumentType.integer;
4138
import static com.mojang.brigadier.arguments.LongArgumentType.longArg;
4239
import static com.mojang.brigadier.arguments.StringArgumentType.greedyString;
4340
import static com.mojang.brigadier.arguments.StringArgumentType.string;
44-
import static revxrsal.commands.bukkit.brigadier.ArgumentTypes.getClassByKey;
4541
import static revxrsal.commands.util.Preconditions.coerceAtLeast;
4642
import static revxrsal.commands.util.Preconditions.coerceAtMost;
4743

@@ -105,16 +101,6 @@ private DefaultArgTypeResolvers() {}
105101
};
106102

107103
private static ArgumentType<?> entity(boolean single, boolean playerOnly) {
108-
return newEntityType(NamespacedKey.minecraft("entity"), single, playerOnly);
109-
}
110-
111-
private static ArgumentType<?> newEntityType(NamespacedKey key, Object... args) {
112-
try {
113-
final Constructor<? extends ArgumentType<?>> constructor = getClassByKey(key).getDeclaredConstructor(boolean.class, boolean.class);
114-
constructor.setAccessible(true);
115-
return constructor.newInstance(args);
116-
} catch (ReflectiveOperationException e) {
117-
throw new RuntimeException(e);
118-
}
104+
return MinecraftArgumentType.ENTITY.create(single, playerOnly);
119105
}
120106
}

0 commit comments

Comments
 (0)