diff --git a/cloud-bukkit/src/main/java/org/incendo/cloud/bukkit/parser/location/LocationParser.java b/cloud-bukkit/src/main/java/org/incendo/cloud/bukkit/parser/location/LocationParser.java index f853de95..ab2353d0 100644 --- a/cloud-bukkit/src/main/java/org/incendo/cloud/bukkit/parser/location/LocationParser.java +++ b/cloud-bukkit/src/main/java/org/incendo/cloud/bukkit/parser/location/LocationParser.java @@ -99,7 +99,7 @@ public final class LocationParser implements ArgumentParser, Blo ) ); } - + final CommandInput originalInput = commandInput.copy(); final LocationCoordinate[] coordinates = new LocationCoordinate[3]; for (int i = 0; i < 3; i++) { if (commandInput.peekString().isEmpty()) { @@ -147,7 +147,7 @@ public final class LocationParser implements ArgumentParser, Blo new LocationParseException( commandContext, LocationParseException.FailureReason.MIXED_LOCAL_ABSOLUTE, - "" + originalInput.remainingInput() ) ); } @@ -252,10 +252,19 @@ private static float toRadians(final float degrees) { } - static class LocationParseException extends ParserException { + public static final class LocationParseException extends ParserException { + private final String input; + private final FailureReason reason; - protected LocationParseException( + /** + * Construct a new LocationParseException + * + * @param context Command context + * @param reason Failure reason + * @param input Input + */ + public LocationParseException( final @NonNull CommandContext context, final @NonNull FailureReason reason, final @NonNull String input @@ -266,6 +275,26 @@ protected LocationParseException( reason.caption(), CaptionVariable.of("input", input) ); + this.input = input; + this.reason = reason; + } + + /** + * Get the supplied input + * + * @return String value + */ + public @NonNull String input() { + return this.input; + } + + /** + * Get the failure reason + * + * @return Failure reason + */ + public @NonNull FailureReason reason() { + return this.reason; }