diff --git a/src/main/java/me/glaremasters/guilds/utils/GuildInputValidator.java b/src/main/java/me/glaremasters/guilds/utils/GuildInputValidator.java index dbfb6e5a4..2ca00ff85 100644 --- a/src/main/java/me/glaremasters/guilds/utils/GuildInputValidator.java +++ b/src/main/java/me/glaremasters/guilds/utils/GuildInputValidator.java @@ -24,8 +24,11 @@ package me.glaremasters.guilds.utils; import ch.jalu.configme.SettingsManager; +import co.aikar.commands.ACFBukkitUtil; import me.glaremasters.guilds.configuration.sections.GuildSettings; +import me.glaremasters.guilds.guild.Guild; +import java.util.Collection; import java.util.regex.Pattern; /** @@ -72,6 +75,21 @@ public static boolean isValidPrefix(String input, SettingsManager settingsManage ); } + /** + * Check whether a guild name is already used, ignoring color formatting and case. + * + * @param input the raw proposed guild name + * @param guilds the existing guilds + * @return true when an existing guild has the same visible name + */ + public static boolean isNameTaken(String input, Collection guilds) { + final String normalizedInput = normalizeName(input); + return guilds.stream() + .map(Guild::getName) + .map(GuildInputValidator::normalizeName) + .anyMatch(normalizedInput::equalsIgnoreCase); + } + private static boolean matchesRequirements(String input, String regex, boolean includeColorCodes) { if (includeColorCodes) { return input.matches(regex); @@ -91,6 +109,10 @@ private static boolean matchesRequirements(String input, String regex, boolean i || regexAcceptsCharacter(visibleInput, regex, SECTION_SIGN); } + private static String normalizeName(String input) { + return ACFBukkitUtil.removeColors(StringUtils.color(input)); + } + private static boolean regexAcceptsCharacter(String validInput, String regex, char character) { if (validInput.isEmpty()) { return String.valueOf(character).matches(regex); diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandCreate.kt b/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandCreate.kt index b55f4c2dd..464b52b01 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandCreate.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandCreate.kt @@ -82,7 +82,7 @@ internal class CommandCreate : BaseCommand() { val cost = settingsManager.getProperty(CostSettings.CREATION) - if (guildHandler.checkGuildNames(name)) { + if (GuildInputValidator.isNameTaken(name, guildHandler.guilds.values)) { throw ExpectationNotMet(Messages.CREATE__GUILD_NAME_TAKEN) } diff --git a/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandRename.kt b/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandRename.kt index 092633464..a3c3b2d56 100644 --- a/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandRename.kt +++ b/src/main/kotlin/me/glaremasters/guilds/commands/management/CommandRename.kt @@ -63,7 +63,7 @@ internal class CommandRename : BaseCommand() { @CommandPermission(Constants.BASE_PERM + "rename") @Syntax("%name") fun rename(player: Player, @Conditions("perm:perm=RENAME") guild: Guild, name: String) { - if (guildHandler.checkGuildNames(name)) { + if (GuildInputValidator.isNameTaken(name, guildHandler.guilds.values)) { throw ExpectationNotMet(Messages.CREATE__GUILD_NAME_TAKEN) }