diff --git a/src/com/massivecraft/massivecore/command/type/TypeNameAbstract.java b/src/com/massivecraft/massivecore/command/type/TypeNameAbstract.java index 173b9bba..d1a40b8e 100644 --- a/src/com/massivecraft/massivecore/command/type/TypeNameAbstract.java +++ b/src/com/massivecraft/massivecore/command/type/TypeNameAbstract.java @@ -2,10 +2,13 @@ package com.massivecraft.massivecore.command.type; import com.massivecraft.massivecore.MassiveException; import com.massivecraft.massivecore.Named; +import com.massivecraft.massivecore.collections.MassiveSet; +import com.massivecraft.massivecore.util.Txt; import org.bukkit.command.CommandSender; import java.util.Collection; import java.util.Collections; +import java.util.Set; public abstract class TypeNameAbstract extends TypeAbstract { @@ -62,6 +65,20 @@ public abstract class TypeNameAbstract extends TypeAbstract throw new MassiveException().addMsg("The name must be at most %d characters.", lengthMax); } + Set disallowed = new MassiveSet<>(); + for (char character : arg.toCharArray()) + { + if (!this.isCharacterAllowed(character)) disallowed.add(character); + } + + // We found some disallowed characters + if (!disallowed.isEmpty()) + { + String characterViolations = Txt.implode(disallowed, ""); + String pluralityResolution = disallowed.size() == 1 ? " is" : "s are"; + throw new MassiveException().addMsg("The following character%s not allowed: %s.", pluralityResolution, characterViolations); + } + return arg; } @@ -71,7 +88,6 @@ public abstract class TypeNameAbstract extends TypeAbstract return Collections.emptyList(); } - // -------------------------------------------- // // METHODS // -------------------------------------------- // @@ -83,6 +99,9 @@ public abstract class TypeNameAbstract extends TypeAbstract return named.getName(); } + // Override this if you want to specify what characters may be used + public boolean isCharacterAllowed(char character) { return true; } + // -------------------------------------------- // // ABSTRACT // -------------------------------------------- //