diff --git a/cloud-core/src/main/java/cloud/commandframework/arguments/parser/StandardParserRegistry.java b/cloud-core/src/main/java/cloud/commandframework/arguments/parser/StandardParserRegistry.java index 5056fb4c..de1bf08a 100644 --- a/cloud-core/src/main/java/cloud/commandframework/arguments/parser/StandardParserRegistry.java +++ b/cloud-core/src/main/java/cloud/commandframework/arguments/parser/StandardParserRegistry.java @@ -23,6 +23,9 @@ // package cloud.commandframework.arguments.parser; +import cloud.commandframework.arguments.standard.UUIDArgument; +import com.google.common.collect.ImmutableMap; +import com.google.common.reflect.TypeToken; import cloud.commandframework.annotations.specifier.Completions; import cloud.commandframework.annotations.specifier.Range; import cloud.commandframework.arguments.standard.BooleanArgument; @@ -44,6 +47,7 @@ import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Optional; +import java.util.UUID; import java.util.function.BiFunction; import java.util.function.Function; @@ -103,7 +107,8 @@ public final class StandardParserRegistry implements ParserRegistry { StringArgument.StringMode.SINGLE, (context, s) -> Arrays.asList(options.get(StandardParameters.COMPLETIONS, new String[0])))); /* Add options to this */ - this.registerParserSupplier(TypeToken.get(Boolean.class), options -> new BooleanArgument.BooleanParser<>(false)); + this.registerParserSupplier(TypeToken.of(Boolean.class), options -> new BooleanArgument.BooleanParser<>(false)); + this.registerParserSupplier(TypeToken.of(UUID.class), options -> new UUIDArgument.UUIDParser<>()); } @Override diff --git a/cloud-core/src/main/java/cloud/commandframework/arguments/standard/BooleanArgument.java b/cloud-core/src/main/java/cloud/commandframework/arguments/standard/BooleanArgument.java index f0601fd0..810f89e8 100644 --- a/cloud-core/src/main/java/cloud/commandframework/arguments/standard/BooleanArgument.java +++ b/cloud-core/src/main/java/cloud/commandframework/arguments/standard/BooleanArgument.java @@ -241,5 +241,10 @@ public final class BooleanArgument extends CommandArgument { public boolean isLiberal() { return liberal; } + + @Override + public String getMessage() { + return String.format("Could not parse boolean from '%s'.", input); + } } } diff --git a/cloud-core/src/main/java/cloud/commandframework/arguments/standard/CharArgument.java b/cloud-core/src/main/java/cloud/commandframework/arguments/standard/CharArgument.java index f4907080..171b7727 100644 --- a/cloud-core/src/main/java/cloud/commandframework/arguments/standard/CharArgument.java +++ b/cloud-core/src/main/java/cloud/commandframework/arguments/standard/CharArgument.java @@ -145,7 +145,7 @@ public final class CharArgument extends CommandArgument { private final String input; /** - * Construct a new boolean parse exception + * Construct a new Char parse exception * * @param input String input */ @@ -161,5 +161,10 @@ public final class CharArgument extends CommandArgument { public @NonNull String getInput() { return input; } + + @Override + public String getMessage() { + return String.format("'%s' is not a valid character.", input); + } } } diff --git a/cloud-core/src/main/java/cloud/commandframework/arguments/standard/UUIDArgument.java b/cloud-core/src/main/java/cloud/commandframework/arguments/standard/UUIDArgument.java index 46c24a8e..3a068e76 100644 --- a/cloud-core/src/main/java/cloud/commandframework/arguments/standard/UUIDArgument.java +++ b/cloud-core/src/main/java/cloud/commandframework/arguments/standard/UUIDArgument.java @@ -112,7 +112,7 @@ public final class UUIDArgument extends CommandArgument { } - private static final class UUIDParser implements ArgumentParser { + public static final class UUIDParser implements ArgumentParser { @Override public @NonNull ArgumentParseResult parse( @@ -141,14 +141,20 @@ public final class UUIDArgument extends CommandArgument { public static final class UUIDParseException extends IllegalArgumentException { + private final String input; + /** - * Construct a new example parse exception + * Construct a new UUID parse exception * * @param input String input */ public UUIDParseException(@NonNull final String input) { - super(input); + this.input = input; } + @Override + public String getMessage() { + return String.format("Could not parse UUID from '%s'.", input); + } } } diff --git a/cloud-minecraft/cloud-bukkit/src/main/java/cloud/commandframework/bukkit/BukkitCommandManager.java b/cloud-minecraft/cloud-bukkit/src/main/java/cloud/commandframework/bukkit/BukkitCommandManager.java index b964edbc..d3fd7b86 100644 --- a/cloud-minecraft/cloud-bukkit/src/main/java/cloud/commandframework/bukkit/BukkitCommandManager.java +++ b/cloud-minecraft/cloud-bukkit/src/main/java/cloud/commandframework/bukkit/BukkitCommandManager.java @@ -26,13 +26,17 @@ package cloud.commandframework.bukkit; import cloud.commandframework.CommandManager; import cloud.commandframework.CommandTree; import cloud.commandframework.bukkit.parsers.MaterialArgument; +import cloud.commandframework.bukkit.parsers.OfflinePlayerArgument; +import cloud.commandframework.bukkit.parsers.PlayerArgument; import cloud.commandframework.bukkit.parsers.WorldArgument; import cloud.commandframework.execution.CommandExecutionCoordinator; import io.leangen.geantyref.TypeToken; import org.bukkit.Bukkit; import org.bukkit.Material; +import org.bukkit.OfflinePlayer; import org.bukkit.World; import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; import org.checkerframework.checker.nullness.qual.NonNull; @@ -87,6 +91,11 @@ public class BukkitCommandManager extends CommandManager { this.getParserRegistry().registerParserSupplier(TypeToken.get(World.class), params -> new WorldArgument.WorldParser<>()); this.getParserRegistry().registerParserSupplier(TypeToken.get(Material.class), params -> new MaterialArgument.MaterialParser<>()); + this.getParserRegistry() + .registerParserSupplier(TypeToken.of(Player.class), params -> new PlayerArgument.PlayerParser<>()); + this.getParserRegistry() + .registerParserSupplier(TypeToken.of(OfflinePlayer.class), + params -> new OfflinePlayerArgument.OfflinePlayerParser<>()); /* Try to determine the Minecraft version */ int version = -1; diff --git a/cloud-minecraft/cloud-bukkit/src/main/java/cloud/commandframework/bukkit/parsers/OfflinePlayerArgument.java b/cloud-minecraft/cloud-bukkit/src/main/java/cloud/commandframework/bukkit/parsers/OfflinePlayerArgument.java index fd7dd99a..6befed74 100644 --- a/cloud-minecraft/cloud-bukkit/src/main/java/cloud/commandframework/bukkit/parsers/OfflinePlayerArgument.java +++ b/cloud-minecraft/cloud-bukkit/src/main/java/cloud/commandframework/bukkit/parsers/OfflinePlayerArgument.java @@ -124,7 +124,7 @@ public final class OfflinePlayerArgument extends CommandArgument implements ArgumentParser { + public static final class OfflinePlayerParser implements ArgumentParser { @Override public @NonNull ArgumentParseResult parse(@NonNull final CommandContext commandContext, @@ -160,14 +160,14 @@ public final class OfflinePlayerArgument extends CommandArgument extends CommandArgument extends CommandArgument { } - private static final class PlayerParser implements ArgumentParser { + public static final class PlayerParser implements ArgumentParser { @Override public @NonNull ArgumentParseResult parse(@NonNull final CommandContext commandContext, @@ -162,7 +162,7 @@ public final class PlayerArgument extends CommandArgument { private final String input; /** - * Construct a new boolean parse exception + * Construct a new Player parse exception * * @param input String input */ @@ -179,5 +179,9 @@ public final class PlayerArgument extends CommandArgument { return input; } + @Override + public String getMessage() { + return String.format("No player found for input '%s'.", input); + } } }