diff --git a/core/src/main/java/co/aikar/commands/CommandContexts.java b/core/src/main/java/co/aikar/commands/CommandContexts.java index 03159299..156be685 100644 --- a/core/src/main/java/co/aikar/commands/CommandContexts.java +++ b/core/src/main/java/co/aikar/commands/CommandContexts.java @@ -31,6 +31,7 @@ import co.aikar.commands.contexts.IssuerAwareContextResolver; import co.aikar.commands.contexts.IssuerOnlyContextResolver; import co.aikar.commands.contexts.OptionalContextResolver; import com.google.common.collect.Maps; +import org.jetbrains.annotations.NotNull; import java.util.List; import java.util.Map; @@ -44,77 +45,77 @@ public class CommandContexts { try { - return ACFUtil.parseNumber(c.popFirstArg(), c.hasFlag("suffixes")).shortValue(); + return parseAndValudateNumber(c, Short.MAX_VALUE).shortValue(); } catch (NumberFormatException e) { throw new InvalidCommandArgument(MessageKeys.MUST_BE_A_NUMBER); } }); registerContext(short.class, (c) -> { try { - return ACFUtil.parseNumber(c.popFirstArg(), c.hasFlag("suffixes")).shortValue(); + return parseAndValudateNumber(c, Short.MAX_VALUE).shortValue(); } catch (NumberFormatException e) { throw new InvalidCommandArgument(MessageKeys.MUST_BE_A_NUMBER); } }); registerContext(Integer.class, (c) -> { try { - return ACFUtil.parseNumber(c.popFirstArg(), c.hasFlag("suffixes")).intValue(); + return parseAndValudateNumber(c, Integer.MAX_VALUE).intValue(); } catch (NumberFormatException e) { throw new InvalidCommandArgument(MessageKeys.MUST_BE_A_NUMBER); } }); registerContext(int.class, (c) -> { try { - return ACFUtil.parseNumber(c.popFirstArg(), c.hasFlag("suffixes")).intValue(); + return parseAndValudateNumber(c, Integer.MAX_VALUE).intValue(); } catch (NumberFormatException e) { throw new InvalidCommandArgument(MessageKeys.MUST_BE_A_NUMBER); } }); registerContext(Long.class, (c) -> { try { - return ACFUtil.parseNumber(c.popFirstArg(), c.hasFlag("suffixes")).longValue(); + return parseAndValudateNumber(c, Long.MAX_VALUE).longValue(); } catch (NumberFormatException e) { throw new InvalidCommandArgument(MessageKeys.MUST_BE_A_NUMBER); } }); registerContext(long.class, (c) -> { try { - return ACFUtil.parseNumber(c.popFirstArg(), c.hasFlag("suffixes")).longValue(); + return parseAndValudateNumber(c, Long.MAX_VALUE).longValue(); } catch (NumberFormatException e) { throw new InvalidCommandArgument(MessageKeys.MUST_BE_A_NUMBER); } }); registerContext(Float.class, (c) -> { try { - return ACFUtil.parseNumber(c.popFirstArg(), c.hasFlag("suffixes")).floatValue(); + return parseAndValudateNumber(c, Float.MAX_VALUE).floatValue(); } catch (NumberFormatException e) { throw new InvalidCommandArgument(MessageKeys.MUST_BE_A_NUMBER); } }); registerContext(float.class, (c) -> { try { - return ACFUtil.parseNumber(c.popFirstArg(), c.hasFlag("suffixes")).floatValue(); + return parseAndValudateNumber(c, Float.MAX_VALUE).floatValue(); } catch (NumberFormatException e) { throw new InvalidCommandArgument(MessageKeys.MUST_BE_A_NUMBER); } }); registerContext(Double.class, (c) -> { try { - return ACFUtil.parseNumber(c.popFirstArg(), c.hasFlag("suffixes")).doubleValue(); + return parseAndValudateNumber(c, Double.MAX_VALUE).doubleValue(); } catch (NumberFormatException e) { throw new InvalidCommandArgument(MessageKeys.MUST_BE_A_NUMBER); } }); registerContext(double.class, (c) -> { try { - return ACFUtil.parseNumber(c.popFirstArg(), c.hasFlag("suffixes")).doubleValue(); + return parseAndValudateNumber(c, Double.MAX_VALUE).doubleValue(); } catch (NumberFormatException e) { throw new InvalidCommandArgument(MessageKeys.MUST_BE_A_NUMBER); } }); registerContext(Number.class, (c) -> { try { - return ACFUtil.parseNumber(c.popFirstArg(), c.hasFlag("suffixes")); + return parseAndValudateNumber(c, Double.MAX_VALUE); } catch (NumberFormatException e) { throw new InvalidCommandArgument(MessageKeys.MUST_BE_A_NUMBER); } @@ -220,6 +221,15 @@ public class CommandContexts maxValue.doubleValue()) { + throw new InvalidCommandArgument(MessageKeys.PLEASE_SPECIFY_AT_MOST, "{max}", String.valueOf(maxValue)); + } + return val; + } + /** * @deprecated Please switch to {@link #registerIssuerAwareContext(Class, IssuerAwareContextResolver)} * as the core wants to use the platform agnostic term of "Issuer" instead of Sender diff --git a/core/src/main/java/co/aikar/commands/MessageKeys.java b/core/src/main/java/co/aikar/commands/MessageKeys.java index e0440135..fd7be9ba 100644 --- a/core/src/main/java/co/aikar/commands/MessageKeys.java +++ b/core/src/main/java/co/aikar/commands/MessageKeys.java @@ -42,6 +42,7 @@ public enum MessageKeys implements MessageKeyProvider { MUST_BE_A_NUMBER, MUST_BE_MIN_LENGTH, MUST_BE_MAX_LENGTH, + PLEASE_SPECIFY_AT_MOST, NOT_ALLOWED_ON_CONSOLE, COULD_NOT_FIND_PLAYER, HELP_FORMAT, diff --git a/languages/core/acf-core_en.properties b/languages/core/acf-core_en.properties index 930a623d..fb3a9a9e 100644 --- a/languages/core/acf-core_en.properties +++ b/languages/core/acf-core_en.properties @@ -31,6 +31,7 @@ acf-core.please_specify_one_of = Error: Please specify one of ({valid}) acf-core.must_be_a_number = Error: Must be a number. acf-core.must_be_min_length = Error: Must be at least {min} characters long. acf-core.must_be_max_length = Error: Must be at most {max} characters long. +acf-core.please_specify_at_most = Error: Please specify a value at most {max}. acf-core.not_allowed_on_console = Error: Console may not execute this command. acf-core.could_not_find_player = Error: Could not find a player by the name: {search} acf-core.help_format = {command} {parameters} {separator} {description}