🎨 Add captions for Bukkit entity selector arguments
This commit is contained in:
parent
366c4f2ce5
commit
c67cc35cf6
7 changed files with 178 additions and 24 deletions
|
|
@ -57,6 +57,29 @@ public final class BukkitCaptionKeys {
|
||||||
* Variables: {input}
|
* Variables: {input}
|
||||||
*/
|
*/
|
||||||
public static final Caption ARGUMENT_PARSE_FAILURE_WORLD = of("argument.parse.failure.world");
|
public static final Caption ARGUMENT_PARSE_FAILURE_WORLD = of("argument.parse.failure.world");
|
||||||
|
/**
|
||||||
|
* Variables: {input}
|
||||||
|
*/
|
||||||
|
public static final Caption ARGUMENT_PARSE_FAILURE_SELECTOR_MALFORMED = of("argument.parse.failure.selector.malformed");
|
||||||
|
/**
|
||||||
|
* Variables: None
|
||||||
|
*/
|
||||||
|
public static final Caption ARGUMENT_PARSE_FAILURE_SELECTOR_UNSUPPORTED = of("argument.parse.failure.selector.unsupported");
|
||||||
|
/**
|
||||||
|
* Variables: None
|
||||||
|
*/
|
||||||
|
public static final Caption ARGUMENT_PARSE_FAILURE_SELECTOR_TOO_MANY_PLAYERS = of(
|
||||||
|
"argument.parse.failure.selector.too_many_players");
|
||||||
|
/**
|
||||||
|
* Variables: None
|
||||||
|
*/
|
||||||
|
public static final Caption ARGUMENT_PARSE_FAILURE_SELECTOR_TOO_MANY_ENTITIES = of(
|
||||||
|
"argument.parse.failure.selector.too_many_entities");
|
||||||
|
/**
|
||||||
|
* Variables: None
|
||||||
|
*/
|
||||||
|
public static final Caption ARGUMENT_PARSE_FAILURE_SELECTOR_NON_PLAYER = of(
|
||||||
|
"argument.parse.failure.selector.non_player_in_player_selector");
|
||||||
|
|
||||||
private BukkitCaptionKeys() {
|
private BukkitCaptionKeys() {
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -37,21 +37,43 @@ public class BukkitCaptionRegistry<C> extends SimpleCaptionRegistry<C> {
|
||||||
*/
|
*/
|
||||||
public static final String ARGUMENT_PARSE_FAILURE_ENCHANTMENT = "'{input}' is not a valid enchantment";
|
public static final String ARGUMENT_PARSE_FAILURE_ENCHANTMENT = "'{input}' is not a valid enchantment";
|
||||||
/**
|
/**
|
||||||
* Default caption for {@link BukkitCaptionKeys#ARGUMENT_PARSE_FAILURE_ENCHANTMENT}
|
* Default caption for {@link BukkitCaptionKeys#ARGUMENT_PARSE_FAILURE_MATERIAL}
|
||||||
*/
|
*/
|
||||||
public static final String ARGUMENT_PARSE_FAILURE_MATERIAL = "'{input}' is not a valid material name";
|
public static final String ARGUMENT_PARSE_FAILURE_MATERIAL = "'{input}' is not a valid material name";
|
||||||
/**
|
/**
|
||||||
* Default caption for {@link BukkitCaptionKeys#ARGUMENT_PARSE_FAILURE_ENCHANTMENT}
|
* Default caption for {@link BukkitCaptionKeys#ARGUMENT_PARSE_FAILURE_OFFLINEPLAYER}
|
||||||
*/
|
*/
|
||||||
public static final String ARGUMENT_PARSE_FAILURE_OFFLINEPLAYER = "No player found for input '{input}'";
|
public static final String ARGUMENT_PARSE_FAILURE_OFFLINEPLAYER = "No player found for input '{input}'";
|
||||||
/**
|
/**
|
||||||
* Default caption for {@link BukkitCaptionKeys#ARGUMENT_PARSE_FAILURE_ENCHANTMENT}
|
* Default caption for {@link BukkitCaptionKeys#ARGUMENT_PARSE_FAILURE_PLAYER}
|
||||||
*/
|
*/
|
||||||
public static final String ARGUMENT_PARSE_FAILURE_PLAYER = "No player found for input '{input}'";
|
public static final String ARGUMENT_PARSE_FAILURE_PLAYER = "No player found for input '{input}'";
|
||||||
/**
|
/**
|
||||||
* Default caption for {@link BukkitCaptionKeys#ARGUMENT_PARSE_FAILURE_ENCHANTMENT}
|
* Default caption for {@link BukkitCaptionKeys#ARGUMENT_PARSE_FAILURE_WORLD}
|
||||||
*/
|
*/
|
||||||
public static final String ARGUMENT_PARSE_FAILURE_WORLD = "'{input}' is not a valid Minecraft world";
|
public static final String ARGUMENT_PARSE_FAILURE_WORLD = "'{input}' is not a valid Minecraft world";
|
||||||
|
/**
|
||||||
|
* Default caption for {@link BukkitCaptionKeys#ARGUMENT_PARSE_FAILURE_SELECTOR_MALFORMED}
|
||||||
|
*/
|
||||||
|
public static final String ARGUMENT_PARSE_FAILURE_SELECTOR_MALFORMED = "Selector '{input}' is malformed.";
|
||||||
|
/**
|
||||||
|
* Default caption for {@link BukkitCaptionKeys#ARGUMENT_PARSE_FAILURE_SELECTOR_UNSUPPORTED}
|
||||||
|
*/
|
||||||
|
public static final String ARGUMENT_PARSE_FAILURE_SELECTOR_UNSUPPORTED =
|
||||||
|
"Entity selector argument type not supported below Minecraft 1.13.";
|
||||||
|
/**
|
||||||
|
* Default caption for {@link BukkitCaptionKeys#ARGUMENT_PARSE_FAILURE_SELECTOR_TOO_MANY_PLAYERS}
|
||||||
|
*/
|
||||||
|
public static final String ARGUMENT_PARSE_FAILURE_SELECTOR_TOO_MANY_PLAYERS = "More than 1 player selected in single player selector";
|
||||||
|
/**
|
||||||
|
* Default caption for {@link BukkitCaptionKeys#ARGUMENT_PARSE_FAILURE_SELECTOR_TOO_MANY_ENTITIES}
|
||||||
|
*/
|
||||||
|
public static final String ARGUMENT_PARSE_FAILURE_SELECTOR_TOO_MANY_ENTITIES = "More than 1 entity selected in single entity selector.";
|
||||||
|
/**
|
||||||
|
* Default caption for {@link BukkitCaptionKeys#ARGUMENT_PARSE_FAILURE_SELECTOR_NON_PLAYER}
|
||||||
|
*/
|
||||||
|
public static final String ARGUMENT_PARSE_FAILURE_SELECTOR_NON_PLAYER = "Non-player(s) selected in player selector.";
|
||||||
|
|
||||||
|
|
||||||
protected BukkitCaptionRegistry() {
|
protected BukkitCaptionRegistry() {
|
||||||
super();
|
super();
|
||||||
|
|
@ -75,6 +97,26 @@ public class BukkitCaptionRegistry<C> extends SimpleCaptionRegistry<C> {
|
||||||
BukkitCaptionKeys.ARGUMENT_PARSE_FAILURE_WORLD,
|
BukkitCaptionKeys.ARGUMENT_PARSE_FAILURE_WORLD,
|
||||||
(caption, sender) -> ARGUMENT_PARSE_FAILURE_WORLD
|
(caption, sender) -> ARGUMENT_PARSE_FAILURE_WORLD
|
||||||
);
|
);
|
||||||
|
this.registerMessageFactory(
|
||||||
|
BukkitCaptionKeys.ARGUMENT_PARSE_FAILURE_SELECTOR_MALFORMED,
|
||||||
|
(caption, sender) -> ARGUMENT_PARSE_FAILURE_SELECTOR_MALFORMED
|
||||||
|
);
|
||||||
|
this.registerMessageFactory(
|
||||||
|
BukkitCaptionKeys.ARGUMENT_PARSE_FAILURE_SELECTOR_UNSUPPORTED,
|
||||||
|
(caption, sender) -> ARGUMENT_PARSE_FAILURE_SELECTOR_UNSUPPORTED
|
||||||
|
);
|
||||||
|
this.registerMessageFactory(
|
||||||
|
BukkitCaptionKeys.ARGUMENT_PARSE_FAILURE_SELECTOR_TOO_MANY_PLAYERS,
|
||||||
|
(caption, sender) -> ARGUMENT_PARSE_FAILURE_SELECTOR_TOO_MANY_PLAYERS
|
||||||
|
);
|
||||||
|
this.registerMessageFactory(
|
||||||
|
BukkitCaptionKeys.ARGUMENT_PARSE_FAILURE_SELECTOR_TOO_MANY_ENTITIES,
|
||||||
|
(caption, sender) -> ARGUMENT_PARSE_FAILURE_SELECTOR_TOO_MANY_ENTITIES
|
||||||
|
);
|
||||||
|
this.registerMessageFactory(
|
||||||
|
BukkitCaptionKeys.ARGUMENT_PARSE_FAILURE_SELECTOR_NON_PLAYER,
|
||||||
|
(caption, sender) -> ARGUMENT_PARSE_FAILURE_SELECTOR_NON_PLAYER
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -132,8 +132,12 @@ public final class MultipleEntitySelectorArgument<C> extends CommandArgument<C,
|
||||||
) {
|
) {
|
||||||
if (!commandContext.<Set<CloudBukkitCapabilities>>get("CloudBukkitCapabilities").contains(
|
if (!commandContext.<Set<CloudBukkitCapabilities>>get("CloudBukkitCapabilities").contains(
|
||||||
CloudBukkitCapabilities.BRIGADIER)) {
|
CloudBukkitCapabilities.BRIGADIER)) {
|
||||||
return ArgumentParseResult.failure(
|
return ArgumentParseResult.failure(new SelectorParseException(
|
||||||
new IllegalArgumentException("Entity selector argument type not supported below Minecraft 1.13."));
|
"",
|
||||||
|
commandContext,
|
||||||
|
SelectorParseException.FailureReason.UNSUPPORTED_VERSION,
|
||||||
|
MultipleEntitySelectorParser.class
|
||||||
|
));
|
||||||
}
|
}
|
||||||
final String input = inputQueue.peek();
|
final String input = inputQueue.peek();
|
||||||
if (input == null) {
|
if (input == null) {
|
||||||
|
|
@ -145,7 +149,12 @@ public final class MultipleEntitySelectorArgument<C> extends CommandArgument<C,
|
||||||
try {
|
try {
|
||||||
entities = Bukkit.selectEntities(commandContext.get("BukkitCommandSender"), input);
|
entities = Bukkit.selectEntities(commandContext.get("BukkitCommandSender"), input);
|
||||||
} catch (IllegalArgumentException e) {
|
} catch (IllegalArgumentException e) {
|
||||||
return ArgumentParseResult.failure(new SelectorParseException(input));
|
return ArgumentParseResult.failure(new SelectorParseException(
|
||||||
|
input,
|
||||||
|
commandContext,
|
||||||
|
SelectorParseException.FailureReason.MALFORMED_SELECTOR,
|
||||||
|
MultipleEntitySelectorParser.class
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
return ArgumentParseResult.success(new MultipleEntitySelector(input, entities));
|
return ArgumentParseResult.success(new MultipleEntitySelector(input, entities));
|
||||||
|
|
|
||||||
|
|
@ -155,12 +155,22 @@ public final class MultiplePlayerSelectorArgument<C> extends CommandArgument<C,
|
||||||
try {
|
try {
|
||||||
entities = Bukkit.selectEntities(commandContext.get("BukkitCommandSender"), input);
|
entities = Bukkit.selectEntities(commandContext.get("BukkitCommandSender"), input);
|
||||||
} catch (IllegalArgumentException e) {
|
} catch (IllegalArgumentException e) {
|
||||||
return ArgumentParseResult.failure(new SelectorParseException(input));
|
return ArgumentParseResult.failure(new SelectorParseException(
|
||||||
|
input,
|
||||||
|
commandContext,
|
||||||
|
SelectorParseException.FailureReason.MALFORMED_SELECTOR,
|
||||||
|
MultiplePlayerSelectorParser.class
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Entity e : entities) {
|
for (Entity e : entities) {
|
||||||
if (!(e instanceof Player)) {
|
if (!(e instanceof Player)) {
|
||||||
return ArgumentParseResult.failure(new IllegalArgumentException("Non-players selected in player selector."));
|
return ArgumentParseResult.failure(new SelectorParseException(
|
||||||
|
input,
|
||||||
|
commandContext,
|
||||||
|
SelectorParseException.FailureReason.NON_PLAYER_IN_PLAYER_SELECTOR,
|
||||||
|
MultiplePlayerSelectorParser.class
|
||||||
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,12 +23,17 @@
|
||||||
//
|
//
|
||||||
package cloud.commandframework.bukkit.parsers.selector;
|
package cloud.commandframework.bukkit.parsers.selector;
|
||||||
|
|
||||||
|
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;
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* EntitySelector parse exception
|
* EntitySelector parse exception
|
||||||
*/
|
*/
|
||||||
public final class SelectorParseException extends IllegalArgumentException {
|
public final class SelectorParseException extends ParserException {
|
||||||
|
|
||||||
private final String input;
|
private final String input;
|
||||||
|
|
||||||
|
|
@ -36,8 +41,22 @@ public final class SelectorParseException extends IllegalArgumentException {
|
||||||
* Construct a new EntitySelector parse exception
|
* Construct a new EntitySelector parse exception
|
||||||
*
|
*
|
||||||
* @param input String input
|
* @param input String input
|
||||||
|
* @param context Command context
|
||||||
|
* @param reason Reason for parse failure
|
||||||
|
* @param parser The parser class
|
||||||
*/
|
*/
|
||||||
public SelectorParseException(final @NonNull String input) {
|
public SelectorParseException(
|
||||||
|
final @NonNull String input,
|
||||||
|
final @NonNull CommandContext<?> context,
|
||||||
|
final @NonNull FailureReason reason,
|
||||||
|
final @NonNull Class<?> parser
|
||||||
|
) {
|
||||||
|
super(
|
||||||
|
parser,
|
||||||
|
context,
|
||||||
|
reason.getCaption(),
|
||||||
|
CaptionVariable.of("input", input)
|
||||||
|
);
|
||||||
this.input = input;
|
this.input = input;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -50,9 +69,33 @@ public final class SelectorParseException extends IllegalArgumentException {
|
||||||
return input;
|
return input;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
/**
|
||||||
public String getMessage() {
|
* Reasons for which selector parsing may fail
|
||||||
return String.format("Selector '%s' is malformed.", input);
|
*/
|
||||||
|
public enum FailureReason {
|
||||||
|
|
||||||
|
UNSUPPORTED_VERSION(BukkitCaptionKeys.ARGUMENT_PARSE_FAILURE_SELECTOR_UNSUPPORTED),
|
||||||
|
MALFORMED_SELECTOR(BukkitCaptionKeys.ARGUMENT_PARSE_FAILURE_SELECTOR_MALFORMED),
|
||||||
|
TOO_MANY_PLAYERS(BukkitCaptionKeys.ARGUMENT_PARSE_FAILURE_SELECTOR_TOO_MANY_PLAYERS),
|
||||||
|
TOO_MANY_ENTITIES(BukkitCaptionKeys.ARGUMENT_PARSE_FAILURE_SELECTOR_TOO_MANY_ENTITIES),
|
||||||
|
NON_PLAYER_IN_PLAYER_SELECTOR(BukkitCaptionKeys.ARGUMENT_PARSE_FAILURE_SELECTOR_NON_PLAYER);
|
||||||
|
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -130,8 +130,12 @@ public final class SingleEntitySelectorArgument<C> extends CommandArgument<C, Si
|
||||||
) {
|
) {
|
||||||
if (!commandContext.<Set<CloudBukkitCapabilities>>get("CloudBukkitCapabilities").contains(
|
if (!commandContext.<Set<CloudBukkitCapabilities>>get("CloudBukkitCapabilities").contains(
|
||||||
CloudBukkitCapabilities.BRIGADIER)) {
|
CloudBukkitCapabilities.BRIGADIER)) {
|
||||||
return ArgumentParseResult.failure(
|
return ArgumentParseResult.failure(new SelectorParseException(
|
||||||
new IllegalArgumentException("Entity selector argument type not supported below Minecraft 1.13."));
|
"",
|
||||||
|
commandContext,
|
||||||
|
SelectorParseException.FailureReason.UNSUPPORTED_VERSION,
|
||||||
|
SingleEntitySelectorParser.class
|
||||||
|
));
|
||||||
}
|
}
|
||||||
final String input = inputQueue.peek();
|
final String input = inputQueue.peek();
|
||||||
if (input == null) {
|
if (input == null) {
|
||||||
|
|
@ -143,12 +147,21 @@ public final class SingleEntitySelectorArgument<C> extends CommandArgument<C, Si
|
||||||
try {
|
try {
|
||||||
entities = Bukkit.selectEntities(commandContext.get("BukkitCommandSender"), input);
|
entities = Bukkit.selectEntities(commandContext.get("BukkitCommandSender"), input);
|
||||||
} catch (IllegalArgumentException e) {
|
} catch (IllegalArgumentException e) {
|
||||||
return ArgumentParseResult.failure(new SelectorParseException(input));
|
return ArgumentParseResult.failure(new SelectorParseException(
|
||||||
|
input,
|
||||||
|
commandContext,
|
||||||
|
SelectorParseException.FailureReason.MALFORMED_SELECTOR,
|
||||||
|
SingleEntitySelectorParser.class
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (entities.size() > 1) {
|
if (entities.size() > 1) {
|
||||||
return ArgumentParseResult.failure(
|
return ArgumentParseResult.failure(new SelectorParseException(
|
||||||
new IllegalArgumentException("More than 1 entity selected in single entity selector."));
|
input,
|
||||||
|
commandContext,
|
||||||
|
SelectorParseException.FailureReason.TOO_MANY_ENTITIES,
|
||||||
|
SingleEntitySelectorParser.class
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
return ArgumentParseResult.success(new SingleEntitySelector(input, entities));
|
return ArgumentParseResult.success(new SingleEntitySelector(input, entities));
|
||||||
|
|
|
||||||
|
|
@ -153,17 +153,31 @@ public final class SinglePlayerSelectorArgument<C> extends CommandArgument<C, Si
|
||||||
try {
|
try {
|
||||||
entities = Bukkit.selectEntities(commandContext.get("BukkitCommandSender"), input);
|
entities = Bukkit.selectEntities(commandContext.get("BukkitCommandSender"), input);
|
||||||
} catch (IllegalArgumentException e) {
|
} catch (IllegalArgumentException e) {
|
||||||
return ArgumentParseResult.failure(new SelectorParseException(input));
|
return ArgumentParseResult.failure(new SelectorParseException(
|
||||||
|
input,
|
||||||
|
commandContext,
|
||||||
|
SelectorParseException.FailureReason.MALFORMED_SELECTOR,
|
||||||
|
SinglePlayerSelectorParser.class
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Entity e : entities) {
|
for (Entity e : entities) {
|
||||||
if (!(e instanceof Player)) {
|
if (!(e instanceof Player)) {
|
||||||
return ArgumentParseResult.failure(new IllegalArgumentException("Non-players selected in player selector."));
|
return ArgumentParseResult.failure(new SelectorParseException(
|
||||||
|
input,
|
||||||
|
commandContext,
|
||||||
|
SelectorParseException.FailureReason.NON_PLAYER_IN_PLAYER_SELECTOR,
|
||||||
|
SinglePlayerSelectorParser.class
|
||||||
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (entities.size() > 1) {
|
if (entities.size() > 1) {
|
||||||
return ArgumentParseResult.failure(
|
return ArgumentParseResult.failure(new SelectorParseException(
|
||||||
new IllegalArgumentException("More than 1 player selected in single player selector"));
|
input,
|
||||||
|
commandContext,
|
||||||
|
SelectorParseException.FailureReason.TOO_MANY_PLAYERS,
|
||||||
|
SinglePlayerSelectorParser.class
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
return ArgumentParseResult.success(new SinglePlayerSelector(input, entities));
|
return ArgumentParseResult.success(new SinglePlayerSelector(input, entities));
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue