✨ Improve the exception message for LocationArgument
This commit is contained in:
parent
cfac2639ad
commit
e26d01388d
3 changed files with 53 additions and 14 deletions
|
|
@ -83,7 +83,13 @@ public final class BukkitCaptionKeys {
|
|||
/**
|
||||
* Variables: {input}
|
||||
*/
|
||||
public static final Caption ARGUMENT_PARSE_FAILURE_LOCATION = of("argument.parse.failure.location");
|
||||
public static final Caption ARGUMENT_PARSE_FAILURE_LOCATION_INVALID_FORMAT = of(
|
||||
"argument.parse.failure.location.invalid_format");
|
||||
/**
|
||||
* Variables: None
|
||||
*/
|
||||
public static final Caption ARGUMENT_PARSE_FAILURE_LOCATION_MIXED_LOCAL_ABSOLUTE = of(
|
||||
"argument.parse.failure.location.mixed_local_absolute");
|
||||
|
||||
private BukkitCaptionKeys() {
|
||||
}
|
||||
|
|
|
|||
|
|
@ -74,10 +74,15 @@ public class BukkitCaptionRegistry<C> extends SimpleCaptionRegistry<C> {
|
|||
*/
|
||||
public static final String ARGUMENT_PARSE_FAILURE_SELECTOR_NON_PLAYER = "Non-player(s) selected in player selector.";
|
||||
/**
|
||||
* Default caption for {@link BukkitCaptionKeys#ARGUMENT_PARSE_FAILURE_LOCATION}
|
||||
* Default caption for {@link BukkitCaptionKeys#ARGUMENT_PARSE_FAILURE_LOCATION_INVALID_FORMAT}
|
||||
*/
|
||||
public static final String ARGUMENT_PARSE_FAILURE_LOCATION =
|
||||
public static final String ARGUMENT_PARSE_FAILURE_LOCATION_INVALID_FORMAT =
|
||||
"'{input}' is not a valid location. Required format is '<x> <y> <z>'";
|
||||
/**
|
||||
* Default caption for {@link BukkitCaptionKeys#ARGUMENT_PARSE_FAILURE_LOCATION_MIXED_LOCAL_ABSOLUTE}
|
||||
*/
|
||||
public static final String ARGUMENT_PARSE_FAILURE_LOCATION_MIXED_LOCAL_ABSOLUTE =
|
||||
"Cannot mix local and absolute coordinates. (either all coordinates use '^' or none do)";
|
||||
|
||||
protected BukkitCaptionRegistry() {
|
||||
super();
|
||||
|
|
@ -122,8 +127,12 @@ public class BukkitCaptionRegistry<C> extends SimpleCaptionRegistry<C> {
|
|||
(caption, sender) -> ARGUMENT_PARSE_FAILURE_SELECTOR_NON_PLAYER
|
||||
);
|
||||
this.registerMessageFactory(
|
||||
BukkitCaptionKeys.ARGUMENT_PARSE_FAILURE_LOCATION,
|
||||
(caption, sender) -> ARGUMENT_PARSE_FAILURE_LOCATION
|
||||
BukkitCaptionKeys.ARGUMENT_PARSE_FAILURE_LOCATION_INVALID_FORMAT,
|
||||
(caption, sender) -> ARGUMENT_PARSE_FAILURE_LOCATION_INVALID_FORMAT
|
||||
);
|
||||
this.registerMessageFactory(
|
||||
BukkitCaptionKeys.ARGUMENT_PARSE_FAILURE_LOCATION_MIXED_LOCAL_ABSOLUTE,
|
||||
(caption, sender) -> ARGUMENT_PARSE_FAILURE_LOCATION_MIXED_LOCAL_ABSOLUTE
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ import cloud.commandframework.arguments.parser.ArgumentParseResult;
|
|||
import cloud.commandframework.arguments.parser.ArgumentParser;
|
||||
import cloud.commandframework.arguments.standard.IntegerArgument;
|
||||
import cloud.commandframework.bukkit.BukkitCaptionKeys;
|
||||
import cloud.commandframework.captions.Caption;
|
||||
import cloud.commandframework.captions.CaptionVariable;
|
||||
import cloud.commandframework.context.CommandContext;
|
||||
import cloud.commandframework.exceptions.parsing.ParserException;
|
||||
|
|
@ -167,6 +168,7 @@ public final class LocationArgument<C> extends CommandArgument<C, Location> {
|
|||
return ArgumentParseResult.failure(
|
||||
new LocationParseException(
|
||||
commandContext,
|
||||
LocationParseException.FailureReason.WRONG_FORMAT,
|
||||
input.toString()
|
||||
)
|
||||
);
|
||||
|
|
@ -200,17 +202,11 @@ public final class LocationArgument<C> extends CommandArgument<C, Location> {
|
|||
|| ((coordinates[0].getType() == LocationCoordinateType.LOCAL)
|
||||
!= (coordinates[2].getType() == LocationCoordinateType.LOCAL))
|
||||
) {
|
||||
final StringBuilder input = new StringBuilder();
|
||||
for (int i = 0; i < inputQueue.size(); i++) {
|
||||
input.append(((LinkedList<String>) inputQueue).get(i));
|
||||
if ((i + 1) < inputQueue.size()) {
|
||||
input.append(" ");
|
||||
}
|
||||
}
|
||||
return ArgumentParseResult.failure(
|
||||
new LocationParseException(
|
||||
commandContext,
|
||||
input.toString()
|
||||
LocationParseException.FailureReason.MIXED_LOCAL_ABSOLUTE,
|
||||
""
|
||||
)
|
||||
);
|
||||
}
|
||||
|
|
@ -293,16 +289,44 @@ public final class LocationArgument<C> extends CommandArgument<C, Location> {
|
|||
|
||||
protected LocationParseException(
|
||||
final @NonNull CommandContext<?> context,
|
||||
final @NonNull FailureReason reason,
|
||||
final @NonNull String input
|
||||
) {
|
||||
super(
|
||||
LocationParser.class,
|
||||
context,
|
||||
BukkitCaptionKeys.ARGUMENT_PARSE_FAILURE_LOCATION,
|
||||
reason.getCaption(),
|
||||
CaptionVariable.of("input", input)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Reasons for which location parsing may fail
|
||||
*/
|
||||
public enum FailureReason {
|
||||
|
||||
WRONG_FORMAT(BukkitCaptionKeys.ARGUMENT_PARSE_FAILURE_LOCATION_INVALID_FORMAT),
|
||||
MIXED_LOCAL_ABSOLUTE(BukkitCaptionKeys.ARGUMENT_PARSE_FAILURE_LOCATION_MIXED_LOCAL_ABSOLUTE);
|
||||
|
||||
|
||||
private final Caption caption;
|
||||
|
||||
FailureReason(final @NonNull Caption caption) {
|
||||
this.caption = caption;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the caption used for this failure reason
|
||||
*
|
||||
* @return The caption
|
||||
*/
|
||||
public @NonNull Caption getCaption() {
|
||||
return this.caption;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue