diff --git a/.idea/compiler.xml b/.idea/compiler.xml index b17569d1..a4433481 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -38,6 +38,7 @@ + diff --git a/bukkit/src/main/java/co/aikar/commands/ACFBukkitUtil.java b/bukkit/src/main/java/co/aikar/commands/ACFBukkitUtil.java index 9b1e119b..492a1708 100644 --- a/bukkit/src/main/java/co/aikar/commands/ACFBukkitUtil.java +++ b/bukkit/src/main/java/co/aikar/commands/ACFBukkitUtil.java @@ -282,7 +282,7 @@ public class ACFBukkitUtil { //noinspection Duplicates if (matches.isEmpty()) { - if (!isValidName(name)) { + if (!isValidName(name, issuer.getManager())) { issuer.sendError(MinecraftMessageKeys.IS_NOT_A_VALID_NAME, "{name}", name); return null; } @@ -319,8 +319,8 @@ public class ACFBukkitUtil { } - public static boolean isValidName(String name) { - return name != null && !name.isEmpty() && ACFPatterns.VALID_NAME_PATTERN.matcher(name).matches(); + public static boolean isValidName(String name, CommandManager manager) { + return name != null && !name.isEmpty() && (manager.isAllowInvalidName() || ACFPatterns.VALID_NAME_PATTERN.matcher(name).matches()); } static boolean isValidItem(ItemStack item) { diff --git a/bukkit/src/main/java/co/aikar/commands/BukkitCommandContexts.java b/bukkit/src/main/java/co/aikar/commands/BukkitCommandContexts.java index 062d979c..38a968f7 100644 --- a/bukkit/src/main/java/co/aikar/commands/BukkitCommandContexts.java +++ b/bukkit/src/main/java/co/aikar/commands/BukkitCommandContexts.java @@ -145,7 +145,7 @@ public class BukkitCommandContexts extends CommandContexts T validate(T object, String message, Object... values) { diff --git a/core/src/main/java/co/aikar/commands/CommandManager.java b/core/src/main/java/co/aikar/commands/CommandManager.java index 7c59ae2e..9458139e 100644 --- a/core/src/main/java/co/aikar/commands/CommandManager.java +++ b/core/src/main/java/co/aikar/commands/CommandManager.java @@ -75,6 +75,7 @@ public abstract class CommandManager< protected CommandHelpFormatter helpFormatter = new CommandHelpFormatter(this); protected boolean usePerIssuerLocale = false; + protected boolean allowInvalidName = false; protected List> localeChangedCallbacks = new ArrayList<>(); protected Set supportedLanguages = new HashSet<>(Arrays.asList(Locales.ENGLISH, Locales.DUTCH, Locales.GERMAN, Locales.SPANISH, Locales.FRENCH, Locales.CZECH, Locales.PORTUGUESE, Locales.SWEDISH, Locales.NORWEGIAN_BOKMAAL, Locales.NORWEGIAN_NYNORSK, Locales.RUSSIAN, Locales.BULGARIAN, Locales.HUNGARIAN, Locales.TURKISH, Locales.JAPANESE, Locales.CHINESE, Locales.SIMPLIFIED_CHINESE, Locales.TRADITIONAL_CHINESE, Locales.KOREAN)); protected Map formatters = new IdentityHashMap<>(); @@ -273,6 +274,16 @@ public abstract class CommandManager< return old; } + public boolean isAllowInvalidName() { + return allowInvalidName; + } + + public boolean allowInvalidName(boolean setting) { + boolean old = allowInvalidName; + allowInvalidName = setting; + return old; + } + public ConditionContext createConditionContext(CommandIssuer issuer, String config) { //noinspection unchecked return new ConditionContext(issuer, config); diff --git a/sponge/src/main/java/co/aikar/commands/ACFSpongeUtil.java b/sponge/src/main/java/co/aikar/commands/ACFSpongeUtil.java index 44ce0876..0cc70b9e 100644 --- a/sponge/src/main/java/co/aikar/commands/ACFSpongeUtil.java +++ b/sponge/src/main/java/co/aikar/commands/ACFSpongeUtil.java @@ -31,7 +31,7 @@ public class ACFSpongeUtil { } if (matches.isEmpty()) { - if (!isValidName(name)) { + if (!isValidName(name, issuer.getManager())) { issuer.sendError(MinecraftMessageKeys.IS_NOT_A_VALID_NAME, "{name}", name); return null; } @@ -89,8 +89,8 @@ public class ACFSpongeUtil { return matchedPlayers; } - public static boolean isValidName(String name) { - return name != null && !name.isEmpty() && ACFPatterns.VALID_NAME_PATTERN.matcher(name).matches(); + public static boolean isValidName(String name, CommandManager manager) { + return name != null && !name.isEmpty() && (manager.isAllowInvalidName() || ACFPatterns.VALID_NAME_PATTERN.matcher(name).matches()); } } diff --git a/velocity/src/main/java/co/aikar/commands/ACFVelocityUtil.java b/velocity/src/main/java/co/aikar/commands/ACFVelocityUtil.java index aa067b45..5abd1377 100644 --- a/velocity/src/main/java/co/aikar/commands/ACFVelocityUtil.java +++ b/velocity/src/main/java/co/aikar/commands/ACFVelocityUtil.java @@ -32,7 +32,7 @@ public class ACFVelocityUtil { } if (matches.isEmpty()) { - if (!isValidName(name)) { + if (!isValidName(name, issuer.getManager())) { issuer.sendError(MinecraftMessageKeys.IS_NOT_A_VALID_NAME, "{name}", name); return null; } @@ -64,8 +64,8 @@ public class ACFVelocityUtil { .collect(Collectors.toList()); } - public static boolean isValidName(String name) { - return name != null && !name.isEmpty() && ACFPatterns.VALID_NAME_PATTERN.matcher(name).matches(); + public static boolean isValidName(String name, CommandManager manager) { + return name != null && !name.isEmpty() && (manager.isAllowInvalidName() || ACFPatterns.VALID_NAME_PATTERN.matcher(name).matches()); } public static T validate(T object, String message, Object... values) {