diff --git a/Essentials/src/main/java/com/earth2me/essentials/ISettings.java b/Essentials/src/main/java/com/earth2me/essentials/ISettings.java index c734719df..67be6b14d 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/ISettings.java +++ b/Essentials/src/main/java/com/earth2me/essentials/ISettings.java @@ -424,6 +424,8 @@ public interface ISettings extends IConf { boolean showZeroBaltop(); + String getNickRegex(); + BigDecimal getMultiplier(final User user); int getMaxItemLore(); diff --git a/Essentials/src/main/java/com/earth2me/essentials/Settings.java b/Essentials/src/main/java/com/earth2me/essentials/Settings.java index f04347ae4..8980aa97b 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Settings.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Settings.java @@ -2120,6 +2120,11 @@ public class Settings implements net.ess3.api.ISettings { return config.getBoolean("show-zero-baltop", true); } + @Override + public String getNickRegex() { + return config.getString("allowed-nicks-regex", "^[a-zA-Z_0-9§]+$"); + } + @Override public BigDecimal getMultiplier(final User user) { BigDecimal multiplier = defaultMultiplier; diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandnick.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandnick.java index 8b47afb02..7648cbc74 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandnick.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandnick.java @@ -63,7 +63,7 @@ public class Commandnick extends EssentialsLoopCommand { private String formatNickname(final User user, final String nick) throws Exception { final String newNick = user == null ? FormatUtil.replaceFormat(nick) : FormatUtil.formatString(user, "essentials.nick", nick); - if (!newNick.matches("^[a-zA-Z_0-9" + ChatColor.COLOR_CHAR + "]+$") && user != null && !user.isAuthorized("essentials.nick.allowunsafe")) { + if (!newNick.matches(ess.getSettings().getNickRegex()) && user != null && !user.isAuthorized("essentials.nick.allowunsafe")) { throw new TranslatableException("nickNamesAlpha"); } else if (getNickLength(newNick) > ess.getSettings().getMaxNickLength()) { throw new TranslatableException("nickTooLong"); diff --git a/Essentials/src/main/resources/config.yml b/Essentials/src/main/resources/config.yml index 168dafa51..c158f46e8 100644 --- a/Essentials/src/main/resources/config.yml +++ b/Essentials/src/main/resources/config.yml @@ -33,6 +33,11 @@ nickname-prefix: '~' # The maximum length allowed in nicknames. The nickname prefix is not included in this. max-nick-length: 15 +# The regex pattern used to determine if a requested nickname should be allowed for use. +# If the a request nickname does not matched this pattern, the nickname will be rejected. +# Users with essentials.nick.allowunsafe will be able to bypass this check. +allowed-nicks-regex: '^[a-zA-Z_0-9§]+$' + # A list of phrases that cannot be used in nicknames. You can include regular expressions here. # Users with essentials.nick.blacklist.bypass will be able to bypass this filter. nick-blacklist: