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) {