From 8c2ee031f70e003765bdfc518da2e3bcd692576b Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Wed, 13 Mar 2019 11:54:49 +0000 Subject: [PATCH 01/23] Added fix for when invalid regex is provided in realname/username --- .../multichat/spigotbridge/NameManager.java | 33 +++++++++++++------ 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/spigotbridge/NameManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/spigotbridge/NameManager.java index e5a87a34..688372a8 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/spigotbridge/NameManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/spigotbridge/NameManager.java @@ -14,6 +14,7 @@ import java.util.Set; import java.util.UUID; import java.util.regex.Pattern; +import java.util.regex.PatternSyntaxException; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -211,7 +212,7 @@ public Optional getCurrentNameFromName(String username) { return Optional.of(getCurrentName(uuid)); } - + /** * Gets a player's formatted name from their username * @@ -409,12 +410,18 @@ public Optional> getPartialNicknameMatches(String nickname) { if (!uuidSet.isEmpty()) return Optional.of(uuidSet); - for (String nick : nickSet) { + try { + for (String nick : nickSet) { - if (nick.matches(nickname)) { - uuidSet.add(mapNickUUID.get(nick)); - } + if (nick.matches(nickname)) { + uuidSet.add(mapNickUUID.get(nick)); + } + } + } catch (PatternSyntaxException e) { + /* + * Its not a valid regex, so we will just say there are no matches! + */ } if (!uuidSet.isEmpty()) return Optional.of(uuidSet); @@ -422,7 +429,7 @@ public Optional> getPartialNicknameMatches(String nickname) { return Optional.empty(); } - + /** * Return the UUIDs of players who have names containing characters provided in the name argument * @param name The characters of the name to check @@ -454,12 +461,18 @@ public Optional> getPartialNameMatches(String name) { if (!uuidSet.isEmpty()) return Optional.of(uuidSet); - for (String n : nameSet) { + try { + for (String n : nameSet) { - if (n.matches(name)) { - uuidSet.add(mapNameUUID.get(n)); - } + if (n.matches(name)) { + uuidSet.add(mapNameUUID.get(n)); + } + } + } catch (PatternSyntaxException e) { + /* + * Its not a valid regex, so we will just say there are no matches! + */ } if (!uuidSet.isEmpty()) return Optional.of(uuidSet); From 5bdf126ac73a34f7759b7c3f1d6207fe22c1e07a Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Thu, 21 Mar 2019 20:52:24 +0000 Subject: [PATCH 02/23] Fixed a bug that prevented freezechat from working --- .../src/main/java/xyz/olivermartin/multichat/bungee/Events.java | 1 + 1 file changed, 1 insertion(+) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Events.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Events.java index 65f46770..e62a74eb 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Events.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Events.java @@ -362,6 +362,7 @@ public void onChat(ChatEvent event) { } else { MessageManager.sendMessage(player, "freezechat_frozen"); + event.setCancelled(true); } } From 305f4eef3d7a2bfa05b0749cb9601c1da48548a3 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Thu, 21 Mar 2019 21:16:52 +0000 Subject: [PATCH 03/23] Fixed a bug with path separators on unix systems (also 1.7.2) --- multichat/pom.xml | 2 +- .../java/xyz/olivermartin/multichat/bungee/MultiChat.java | 7 ++++--- multichat/src/main/resources/bungee.yml | 2 +- multichat/src/main/resources/chatcontrol.yml | 2 +- multichat/src/main/resources/config.yml | 2 +- multichat/src/main/resources/joinmessages.yml | 2 +- multichat/src/main/resources/joinmessages_fr.yml | 2 +- multichat/src/main/resources/messages.yml | 2 +- multichat/src/main/resources/messages_fr.yml | 2 +- multichat/src/main/resources/multichatsponge.yml | 2 +- multichat/src/main/resources/plugin.yml | 2 +- multichat/src/main/resources/spigotconfig.yml | 2 +- 12 files changed, 15 insertions(+), 14 deletions(-) diff --git a/multichat/pom.xml b/multichat/pom.xml index 36102a3d..41ae99b5 100644 --- a/multichat/pom.xml +++ b/multichat/pom.xml @@ -5,7 +5,7 @@ xyz.olivermartin.multichat multichat - 1.7.1 + 1.7.2 diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java index 1fbd9adf..b5612250 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java @@ -37,11 +37,12 @@ */ public class MultiChat extends Plugin implements Listener { - public static final String LATEST_VERSION = "1.7.1"; + public static final String LATEST_VERSION = "1.7.2"; public static final String[] ALLOWED_VERSIONS = new String[] { LATEST_VERSION, + "1.7.1", "1.7", "1.6.2", "1.6.1", @@ -234,8 +235,8 @@ public void onEnable() { System.out.println("[MultiChat] Creating plugin directory!"); getDataFolder().mkdirs(); } - - String translationsDir = configDir.toString() + "\\translations"; + + String translationsDir = configDir.toString() + File.separator + "translations"; if (!new File(translationsDir).exists()) { System.out.println("[MultiChat] Creating translations directory!"); new File(translationsDir).mkdirs(); diff --git a/multichat/src/main/resources/bungee.yml b/multichat/src/main/resources/bungee.yml index 5480082b..b99c1f77 100644 --- a/multichat/src/main/resources/bungee.yml +++ b/multichat/src/main/resources/bungee.yml @@ -1,5 +1,5 @@ name: MultiChat main: xyz.olivermartin.multichat.bungee.MultiChat -version: 1.7.1 +version: 1.7.2 author: Revilo410 api-version: 1.13 \ No newline at end of file diff --git a/multichat/src/main/resources/chatcontrol.yml b/multichat/src/main/resources/chatcontrol.yml index 814a5dcb..ecce6d5f 100644 --- a/multichat/src/main/resources/chatcontrol.yml +++ b/multichat/src/main/resources/chatcontrol.yml @@ -8,7 +8,7 @@ ################## # DON'T EDIT # -version: "1.7.1" # +version: "1.7.2" # ################## # 1. Chat Control Rules diff --git a/multichat/src/main/resources/config.yml b/multichat/src/main/resources/config.yml index 9ff8e807..c2b9a470 100644 --- a/multichat/src/main/resources/config.yml +++ b/multichat/src/main/resources/config.yml @@ -8,7 +8,7 @@ ################## # DON'T EDIT # -version: "1.7.1" # +version: "1.7.2" # ################## # 1. General diff --git a/multichat/src/main/resources/joinmessages.yml b/multichat/src/main/resources/joinmessages.yml index 452c06fa..96c10e16 100644 --- a/multichat/src/main/resources/joinmessages.yml +++ b/multichat/src/main/resources/joinmessages.yml @@ -8,7 +8,7 @@ ################## # DON'T EDIT # -version: "1.7.1" # +version: "1.7.2" # ################## ############################################################ diff --git a/multichat/src/main/resources/joinmessages_fr.yml b/multichat/src/main/resources/joinmessages_fr.yml index fa702124..382798c1 100644 --- a/multichat/src/main/resources/joinmessages_fr.yml +++ b/multichat/src/main/resources/joinmessages_fr.yml @@ -8,7 +8,7 @@ ################## # Ne pas éditer # -version: "1.7.1" # +version: "1.7.2" # ################## # French Translation by Nogapra - Thank you! diff --git a/multichat/src/main/resources/messages.yml b/multichat/src/main/resources/messages.yml index e65924bb..de69a490 100644 --- a/multichat/src/main/resources/messages.yml +++ b/multichat/src/main/resources/messages.yml @@ -8,7 +8,7 @@ ################## # DON'T EDIT # -version: "1.7.1" # +version: "1.7.2" # ################## ############################################################ diff --git a/multichat/src/main/resources/messages_fr.yml b/multichat/src/main/resources/messages_fr.yml index b665c493..758a68a3 100644 --- a/multichat/src/main/resources/messages_fr.yml +++ b/multichat/src/main/resources/messages_fr.yml @@ -8,7 +8,7 @@ ################## # DON'T EDIT # -version: "1.7.1" # +version: "1.7.2" # ################## # French Translation by Nogapra - Thank you! diff --git a/multichat/src/main/resources/multichatsponge.yml b/multichat/src/main/resources/multichatsponge.yml index a9fd2d90..3af53135 100644 --- a/multichat/src/main/resources/multichatsponge.yml +++ b/multichat/src/main/resources/multichatsponge.yml @@ -8,7 +8,7 @@ ################## # DON'T EDIT # -version: "1.7.1" # +version: "1.7.2" # ################## # Specify the name of this server here for the %SERVER% placeholder diff --git a/multichat/src/main/resources/plugin.yml b/multichat/src/main/resources/plugin.yml index 2ade7451..8e12e93d 100644 --- a/multichat/src/main/resources/plugin.yml +++ b/multichat/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ name: MultiChatSpigot -version: 1.7.1 +version: 1.7.2 author: Revilo410 main: xyz.olivermartin.multichat.spigotbridge.MultiChatSpigot softdepend: [Vault,PlaceholderAPI] diff --git a/multichat/src/main/resources/spigotconfig.yml b/multichat/src/main/resources/spigotconfig.yml index 009eb4b1..aaaebd90 100644 --- a/multichat/src/main/resources/spigotconfig.yml +++ b/multichat/src/main/resources/spigotconfig.yml @@ -8,7 +8,7 @@ ################## # DON'T EDIT # -version: "1.7.1" # +version: "1.7.2" # ################## ############################################################ From ba5920aa31fe469fd94cf6b480ecbdcd01480c1e Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Thu, 21 Mar 2019 21:36:25 +0000 Subject: [PATCH 04/23] Added a couple more debug messages --- .../xyz/olivermartin/multichat/bungee/BungeeComm.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/BungeeComm.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/BungeeComm.java index e5069059..18000a9e 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/BungeeComm.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/BungeeComm.java @@ -198,7 +198,7 @@ public static void onPluginMessage(PluginMessageEvent ev) { } if (ev.getTag().equals("multichat:chat")) { - + DebugManager.log("{multichat:chat} Got a plugin message"); ByteArrayInputStream stream = new ByteArrayInputStream(ev.getData()); @@ -212,14 +212,19 @@ public static void onPluginMessage(PluginMessageEvent ev) { DebugManager.log("{multichat:chat} Message = " + message); String format = in.readUTF(); + DebugManager.log("{multichat:chat} Format (before removal of double chars) = " + format); + format = format.replace("%%","%"); DebugManager.log("{multichat:chat} Format = " + format); ProxiedPlayer player = ProxyServer.getInstance().getPlayer(uuid); - if (player == null) return; - + if (player == null) { + DebugManager.log("{multichat:chat} Could not get player! Abandoning chat message..."); + return; + } + DebugManager.log("{multichat:chat} Got player successfully! Name = " + player.getName()); synchronized (player) { From 5709170716473e209a6646e5b5e84d0f47bf6bcf Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Tue, 26 Mar 2019 16:58:36 +0000 Subject: [PATCH 05/23] Implemented checks for nickname duplication and impersonation --- .../spigotbridge/commands/CommandHandler.java | 14 ++++++ .../spongebridge/MultiChatSponge.java | 45 ++++++++++++++++++- 2 files changed, 58 insertions(+), 1 deletion(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/spigotbridge/commands/CommandHandler.java b/multichat/src/main/java/xyz/olivermartin/multichat/spigotbridge/commands/CommandHandler.java index 0ff76223..06d33d76 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/spigotbridge/commands/CommandHandler.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/spigotbridge/commands/CommandHandler.java @@ -138,6 +138,20 @@ public boolean onCommand(CommandSender commandSender, Command cmd, String label, } + if (NameManager.getInstance().existsNickname(args[0]) && !sender.hasPermission("multichatspigot.nick.duplicate")) { + + sender.sendMessage(ChatColor.DARK_RED + "Sorry, this nickname is already in use!"); + return true; + + } + + if (NameManager.getInstance().existsPlayer(args[0]) && !sender.hasPermission("multichatspigot.nick.impersonate")) { + + sender.sendMessage(ChatColor.DARK_RED + "Sorry, a player already exists with this name!"); + return true; + + } + NameManager.getInstance().setNickname(targetUUID, args[0]); MetaManager.getInstance().updatePlayerMeta(sender.getName(), MultiChatSpigot.setDisplayNameLastVal, MultiChatSpigot.displayNameFormatLastVal); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/spongebridge/MultiChatSponge.java b/multichat/src/main/java/xyz/olivermartin/multichat/spongebridge/MultiChatSponge.java index 0d930b4b..ff8b714a 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/spongebridge/MultiChatSponge.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/spongebridge/MultiChatSponge.java @@ -7,6 +7,9 @@ import java.util.Optional; import java.util.Set; import java.util.UUID; +import java.util.concurrent.CompletableFuture; +import java.util.function.Consumer; +import java.util.regex.Pattern; import org.spongepowered.api.Platform; import org.spongepowered.api.Sponge; @@ -20,6 +23,7 @@ import org.spongepowered.api.config.DefaultConfig; import org.spongepowered.api.data.key.Keys; import org.spongepowered.api.entity.living.player.Player; +import org.spongepowered.api.entity.living.player.User; import org.spongepowered.api.event.Listener; import org.spongepowered.api.event.game.state.GameStartedServerEvent; import org.spongepowered.api.event.game.state.GameStoppingServerEvent; @@ -28,6 +32,9 @@ import org.spongepowered.api.network.ChannelRegistrar; import org.spongepowered.api.plugin.Dependency; import org.spongepowered.api.plugin.Plugin; +import org.spongepowered.api.profile.GameProfile; +import org.spongepowered.api.profile.GameProfileManager; +import org.spongepowered.api.service.user.UserStorageService; import org.spongepowered.api.text.Text; import org.spongepowered.api.text.channel.impl.SimpleMutableMessageChannel; @@ -91,7 +98,7 @@ public final class MultiChatSponge implements CommandExecutor { public static String overrideGlobalFormatFormat = "&f%DISPLAYNAME%&f: "; public static Optional papi; - + public static String serverName = "SPONGE"; public static Map playerChannels = new HashMap(); @@ -351,6 +358,28 @@ public CommandResult execute(CommandSource sender, CommandContext args) throws C return CommandResult.success(); } + String strippedNickname = stripAllFormattingCodes(nickname); + + UserStorageService uss = Sponge.getServiceManager().provideUnchecked(UserStorageService.class); + Optional lookedUpName = uss.get(strippedNickname); + + // Check if a player name exists already + if (lookedUpName.isPresent() && !sender.hasPermission("multichatsponge.nick.impersonate")) { + sender.sendMessage(Text.of("Sorry, a player already exists with this name!")); + return CommandResult.success(); + } + + // Check if a nickname exists already + if (nicknames.values().stream() + .map(nick -> stripAllFormattingCodes(nick)) + .anyMatch(nick -> nick.equalsIgnoreCase(nickname)) + && !sender.hasPermission("multichatsponge.nick.duplicate")) { + + sender.sendMessage(Text.of("Sorry, a player already has that nickname!")); + return CommandResult.success(); + + } + addNickname(targetUUID,nickname); updatePlayerMeta(target.getName(), setDisplayNameLastVal, displayNameFormatLastVal); @@ -365,4 +394,18 @@ private void addNickname(UUID uuid, String nickname) { private void removeNickname(UUID uuid) { nicknames.remove(uuid); } + + public String stripAllFormattingCodes(String input) { + + char COLOR_CHAR = '&'; + Pattern STRIP_COLOR_PATTERN = Pattern.compile("(?i)" + String.valueOf(COLOR_CHAR) + "[0-9A-FK-OR]"); + + if (input == null) { + return null; + } + + return STRIP_COLOR_PATTERN.matcher(input).replaceAll(""); + + } + } From 16f02727fa25cce5aec5f8d518ec1d9e7b2742ce Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Tue, 26 Mar 2019 17:07:00 +0000 Subject: [PATCH 06/23] Fixed issue with players being able to use same nick in dif. colours --- .../spongebridge/MultiChatSponge.java | 20 ++++++++----------- 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/spongebridge/MultiChatSponge.java b/multichat/src/main/java/xyz/olivermartin/multichat/spongebridge/MultiChatSponge.java index ff8b714a..58b32fe5 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/spongebridge/MultiChatSponge.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/spongebridge/MultiChatSponge.java @@ -7,8 +7,6 @@ import java.util.Optional; import java.util.Set; import java.util.UUID; -import java.util.concurrent.CompletableFuture; -import java.util.function.Consumer; import java.util.regex.Pattern; import org.spongepowered.api.Platform; @@ -32,8 +30,6 @@ import org.spongepowered.api.network.ChannelRegistrar; import org.spongepowered.api.plugin.Dependency; import org.spongepowered.api.plugin.Plugin; -import org.spongepowered.api.profile.GameProfile; -import org.spongepowered.api.profile.GameProfileManager; import org.spongepowered.api.service.user.UserStorageService; import org.spongepowered.api.text.Text; import org.spongepowered.api.text.channel.impl.SimpleMutableMessageChannel; @@ -359,25 +355,25 @@ public CommandResult execute(CommandSource sender, CommandContext args) throws C } String strippedNickname = stripAllFormattingCodes(nickname); - + UserStorageService uss = Sponge.getServiceManager().provideUnchecked(UserStorageService.class); Optional lookedUpName = uss.get(strippedNickname); - + // Check if a player name exists already if (lookedUpName.isPresent() && !sender.hasPermission("multichatsponge.nick.impersonate")) { sender.sendMessage(Text.of("Sorry, a player already exists with this name!")); return CommandResult.success(); } - + // Check if a nickname exists already if (nicknames.values().stream() .map(nick -> stripAllFormattingCodes(nick)) - .anyMatch(nick -> nick.equalsIgnoreCase(nickname)) + .anyMatch(nick -> nick.equalsIgnoreCase(strippedNickname)) && !sender.hasPermission("multichatsponge.nick.duplicate")) { - + sender.sendMessage(Text.of("Sorry, a player already has that nickname!")); return CommandResult.success(); - + } addNickname(targetUUID,nickname); @@ -394,7 +390,7 @@ private void addNickname(UUID uuid, String nickname) { private void removeNickname(UUID uuid) { nicknames.remove(uuid); } - + public String stripAllFormattingCodes(String input) { char COLOR_CHAR = '&'; @@ -407,5 +403,5 @@ public String stripAllFormattingCodes(String input) { return STRIP_COLOR_PATTERN.matcher(input).replaceAll(""); } - + } From c519c4be7d87948c05f6461db2d527d530ff8bea Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Tue, 26 Mar 2019 17:22:07 +0000 Subject: [PATCH 07/23] Added QOL checks if it is YOUR duplicated nickname or real name --- .../spigotbridge/commands/CommandHandler.java | 23 ++++++++++++++++--- .../spongebridge/MultiChatSponge.java | 12 ++++++++-- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/spigotbridge/commands/CommandHandler.java b/multichat/src/main/java/xyz/olivermartin/multichat/spigotbridge/commands/CommandHandler.java index 06d33d76..6978b9cb 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/spigotbridge/commands/CommandHandler.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/spigotbridge/commands/CommandHandler.java @@ -137,15 +137,18 @@ public boolean onCommand(CommandSender commandSender, Command cmd, String label, return true; } - - if (NameManager.getInstance().existsNickname(args[0]) && !sender.hasPermission("multichatspigot.nick.duplicate")) { + + String targetNickname = NameManager.getInstance().stripAllFormattingCodes(NameManager.getInstance().getCurrentName(targetUUID)); + String targetName = NameManager.getInstance().getName(targetUUID); + + if (NameManager.getInstance().existsNickname(args[0]) && !targetNickname.equalsIgnoreCase(NameManager.getInstance().stripAllFormattingCodes(args[0])) && !sender.hasPermission("multichatspigot.nick.duplicate")) { sender.sendMessage(ChatColor.DARK_RED + "Sorry, this nickname is already in use!"); return true; } - if (NameManager.getInstance().existsPlayer(args[0]) && !sender.hasPermission("multichatspigot.nick.impersonate")) { + if (NameManager.getInstance().existsPlayer(args[0]) && !targetName.equalsIgnoreCase(NameManager.getInstance().stripAllFormattingCodes(args[0])) && !sender.hasPermission("multichatspigot.nick.impersonate")) { sender.sendMessage(ChatColor.DARK_RED + "Sorry, a player already exists with this name!"); return true; @@ -206,6 +209,20 @@ public boolean onCommand(CommandSender commandSender, Command cmd, String label, return true; } + + if (NameManager.getInstance().existsNickname(args[1]) && !sender.hasPermission("multichatspigot.nick.duplicate")) { + + sender.sendMessage(ChatColor.DARK_RED + "Sorry, this nickname is already in use!"); + return true; + + } + + if (NameManager.getInstance().existsPlayer(args[1]) && !sender.hasPermission("multichatspigot.nick.impersonate")) { + + sender.sendMessage(ChatColor.DARK_RED + "Sorry, a player already exists with this name!"); + return true; + + } NameManager.getInstance().setNickname(targetUUID, args[1]); MetaManager.getInstance().updatePlayerMeta(target.getName(), MultiChatSpigot.setDisplayNameLastVal, MultiChatSpigot.displayNameFormatLastVal); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/spongebridge/MultiChatSponge.java b/multichat/src/main/java/xyz/olivermartin/multichat/spongebridge/MultiChatSponge.java index 58b32fe5..4d2a1de3 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/spongebridge/MultiChatSponge.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/spongebridge/MultiChatSponge.java @@ -359,16 +359,24 @@ public CommandResult execute(CommandSource sender, CommandContext args) throws C UserStorageService uss = Sponge.getServiceManager().provideUnchecked(UserStorageService.class); Optional lookedUpName = uss.get(strippedNickname); - // Check if a player name exists already - if (lookedUpName.isPresent() && !sender.hasPermission("multichatsponge.nick.impersonate")) { + // Check if a player name exists already (but not the name of this player) + if (lookedUpName.isPresent() && !strippedNickname.equalsIgnoreCase(target.getName()) && !sender.hasPermission("multichatsponge.nick.impersonate")) { sender.sendMessage(Text.of("Sorry, a player already exists with this name!")); return CommandResult.success(); } + + String targetNickname; + if (nicknames.containsKey(targetUUID)) { + targetNickname = stripAllFormattingCodes(nicknames.get(targetUUID)); + } else { + targetNickname = target.getName(); + } // Check if a nickname exists already if (nicknames.values().stream() .map(nick -> stripAllFormattingCodes(nick)) .anyMatch(nick -> nick.equalsIgnoreCase(strippedNickname)) + && !targetNickname.equalsIgnoreCase(strippedNickname) && !sender.hasPermission("multichatsponge.nick.duplicate")) { sender.sendMessage(Text.of("Sorry, a player already has that nickname!")); From 0c2d6483685be434a5421d6fea2ed001a746bca8 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Tue, 26 Mar 2019 17:35:01 +0000 Subject: [PATCH 08/23] Revoked duplicate ignore perm from nicknames as this is just bad --- .../multichat/spigotbridge/commands/CommandHandler.java | 9 ++++++--- .../multichat/spongebridge/MultiChatSponge.java | 4 ++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/spigotbridge/commands/CommandHandler.java b/multichat/src/main/java/xyz/olivermartin/multichat/spigotbridge/commands/CommandHandler.java index 6978b9cb..ca7f27eb 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/spigotbridge/commands/CommandHandler.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/spigotbridge/commands/CommandHandler.java @@ -141,7 +141,7 @@ public boolean onCommand(CommandSender commandSender, Command cmd, String label, String targetNickname = NameManager.getInstance().stripAllFormattingCodes(NameManager.getInstance().getCurrentName(targetUUID)); String targetName = NameManager.getInstance().getName(targetUUID); - if (NameManager.getInstance().existsNickname(args[0]) && !targetNickname.equalsIgnoreCase(NameManager.getInstance().stripAllFormattingCodes(args[0])) && !sender.hasPermission("multichatspigot.nick.duplicate")) { + if (NameManager.getInstance().existsNickname(args[0]) && !targetNickname.equalsIgnoreCase(NameManager.getInstance().stripAllFormattingCodes(args[0])) ) { //&& !sender.hasPermission("multichatspigot.nick.duplicate")) { sender.sendMessage(ChatColor.DARK_RED + "Sorry, this nickname is already in use!"); return true; @@ -210,14 +210,17 @@ public boolean onCommand(CommandSender commandSender, Command cmd, String label, } - if (NameManager.getInstance().existsNickname(args[1]) && !sender.hasPermission("multichatspigot.nick.duplicate")) { + String targetNickname = NameManager.getInstance().stripAllFormattingCodes(NameManager.getInstance().getCurrentName(targetUUID)); + String targetName = NameManager.getInstance().getName(targetUUID); + + if (NameManager.getInstance().existsNickname(args[1]) && !targetNickname.equalsIgnoreCase(NameManager.getInstance().stripAllFormattingCodes(args[0])) ) { //&& !sender.hasPermission("multichatspigot.nick.duplicate")) { sender.sendMessage(ChatColor.DARK_RED + "Sorry, this nickname is already in use!"); return true; } - if (NameManager.getInstance().existsPlayer(args[1]) && !sender.hasPermission("multichatspigot.nick.impersonate")) { + if (NameManager.getInstance().existsPlayer(args[1]) && !targetName.equalsIgnoreCase(NameManager.getInstance().stripAllFormattingCodes(args[0])) && !sender.hasPermission("multichatspigot.nick.impersonate")) { sender.sendMessage(ChatColor.DARK_RED + "Sorry, a player already exists with this name!"); return true; diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/spongebridge/MultiChatSponge.java b/multichat/src/main/java/xyz/olivermartin/multichat/spongebridge/MultiChatSponge.java index 4d2a1de3..e62b12f1 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/spongebridge/MultiChatSponge.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/spongebridge/MultiChatSponge.java @@ -376,8 +376,8 @@ public CommandResult execute(CommandSource sender, CommandContext args) throws C if (nicknames.values().stream() .map(nick -> stripAllFormattingCodes(nick)) .anyMatch(nick -> nick.equalsIgnoreCase(strippedNickname)) - && !targetNickname.equalsIgnoreCase(strippedNickname) - && !sender.hasPermission("multichatsponge.nick.duplicate")) { + && !targetNickname.equalsIgnoreCase(strippedNickname) ) { + //&& !sender.hasPermission("multichatsponge.nick.duplicate")) { sender.sendMessage(Text.of("Sorry, a player already has that nickname!")); return CommandResult.success(); From efae74ce33a99af29054e1e7c487e527513a36e7 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Tue, 2 Apr 2019 13:18:43 +0100 Subject: [PATCH 09/23] Updated config files to contain new nickname options --- .../src/main/resources/multichatsponge.yml | 19 +++++++++++++++++++ multichat/src/main/resources/spigotconfig.yml | 19 +++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/multichat/src/main/resources/multichatsponge.yml b/multichat/src/main/resources/multichatsponge.yml index 3af53135..5377670a 100644 --- a/multichat/src/main/resources/multichatsponge.yml +++ b/multichat/src/main/resources/multichatsponge.yml @@ -58,3 +58,22 @@ override_global_format_format: "&5[&dG&5] &f%DISPLAYNAME%&f: " # # Will display as [FORMAT] [MESSAGE] local_chat_format: "&3[&bL&3] &f%DISPLAYNAME%&f: &7" + +############################################################ +# +------------------------------------------------------+ # +# | MultiChat Nicknames | # +# +------------------------------------------------------+ # +############################################################ + +# Players will be blocked from using any nicknames on this list! +# Regular expressions can be used +nickname_blacklist: +- "Notch" +- "Jeb" +#- "[1234567890]+.*" # <-- Example to block any nicknames starting with a number! + +# Should a prefix be displayed before nicknames to differentiate them from real names? +show_nickname_prefix: false + +# What should the prefix before nicknames be? +nickname_prefix: "~" diff --git a/multichat/src/main/resources/spigotconfig.yml b/multichat/src/main/resources/spigotconfig.yml index aaaebd90..d42ebc5e 100644 --- a/multichat/src/main/resources/spigotconfig.yml +++ b/multichat/src/main/resources/spigotconfig.yml @@ -83,3 +83,22 @@ local_chat_format: "&3[&bL&3] &f%DISPLAYNAME%&f: &7" multichat_placeholders: nickname: "%NICK%" papi_displayname: "%player_displayname%" + +############################################################ +# +------------------------------------------------------+ # +# | MultiChat Nicknames | # +# +------------------------------------------------------+ # +############################################################ + +# Players will be blocked from using any nicknames on this list! +# Regular expressions can be used +nickname_blacklist: +- "Notch" +- "Jeb" +#- "[1234567890]+.*" # <-- Example to block any nicknames starting with a number! + +# Should a prefix be displayed before nicknames to differentiate them from real names? +show_nickname_prefix: false + +# What should the prefix before nicknames be? +nickname_prefix: "~" From 5df65126a2d2ae4d3ed5ba6f72994b80b2f41c3d Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Tue, 2 Apr 2019 13:24:22 +0100 Subject: [PATCH 10/23] MultiChatSpigot now reads the nickname stuff from config --- .../multichat/spigotbridge/MultiChatSpigot.java | 12 ++++++++++++ .../spigotbridge/commands/CommandHandler.java | 6 ++++++ 2 files changed, 18 insertions(+) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/spigotbridge/MultiChatSpigot.java b/multichat/src/main/java/xyz/olivermartin/multichat/spigotbridge/MultiChatSpigot.java index 2a884829..c17be521 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/spigotbridge/MultiChatSpigot.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/spigotbridge/MultiChatSpigot.java @@ -6,7 +6,9 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; @@ -80,6 +82,10 @@ public static boolean hookedPAPI() { public static String localChatFormat = "&7&lLOCAL &f> &f%DISPLAYNAME%&f: "; public static boolean setLocalFormat = false; public static boolean forceMultiChatFormat = false; + + public static boolean showNicknamePrefix = false; + public static String nicknamePrefix = "~"; + public static List nicknameBlacklist = new ArrayList(); @SuppressWarnings("unchecked") public void onEnable() { @@ -114,6 +120,12 @@ public void onEnable() { } } + + if (config.contains("show_nickname_prefix")) { + showNicknamePrefix = config.getBoolean("show_nickname_prefix"); + nicknamePrefix = config.getString("nickname_prefix"); + nicknameBlacklist = config.getStringList("nickname_blacklist"); + } File f = new File(configDir, nameDataFile); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/spigotbridge/commands/CommandHandler.java b/multichat/src/main/java/xyz/olivermartin/multichat/spigotbridge/commands/CommandHandler.java index ca7f27eb..36729067 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/spigotbridge/commands/CommandHandler.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/spigotbridge/commands/CommandHandler.java @@ -72,6 +72,12 @@ public boolean onCommand(CommandSender commandSender, Command cmd, String label, } } + + if (config.contains("show_nickname_prefix")) { + MultiChatSpigot.showNicknamePrefix = config.getBoolean("show_nickname_prefix"); + MultiChatSpigot.nicknamePrefix = config.getString("nickname_prefix"); + MultiChatSpigot.nicknameBlacklist = config.getStringList("nickname_blacklist"); + } commandSender.sendMessage(ChatColor.GREEN + "The plugin has been reloaded!"); From d5c730e98ef81356267a4d7770d7fd36443846f7 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Tue, 2 Apr 2019 13:30:58 +0100 Subject: [PATCH 11/23] First attempt to read values on sponge --- .../multichat/spongebridge/MultiChatSponge.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/spongebridge/MultiChatSponge.java b/multichat/src/main/java/xyz/olivermartin/multichat/spongebridge/MultiChatSponge.java index e62b12f1..09460d0b 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/spongebridge/MultiChatSponge.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/spongebridge/MultiChatSponge.java @@ -2,7 +2,9 @@ import java.io.File; import java.io.IOException; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; @@ -60,7 +62,7 @@ * @author Oliver Martin (Revilo410) * */ -@Plugin(id = "multichat", name = "MultiChatSponge", version = "1.7.1", dependencies = { @Dependency(id = "placeholderapi", optional = true) }) +@Plugin(id = "multichat", name = "MultiChatSponge", version = "1.7.2", dependencies = { @Dependency(id = "placeholderapi", optional = true) }) public final class MultiChatSponge implements CommandExecutor { public static SimpleMutableMessageChannel multichatChannel; @@ -96,6 +98,10 @@ public final class MultiChatSponge implements CommandExecutor { public static Optional papi; public static String serverName = "SPONGE"; + + public static boolean showNicknamePrefix = false; + public static String nicknamePrefix = "~"; + public static List nicknameBlacklist = new ArrayList(); public static Map playerChannels = new HashMap(); public static Map channelObjects = new HashMap(); @@ -116,6 +122,12 @@ public void onServerStart(GameStartedServerEvent event) { overrideGlobalFormatFormat = config.getNode("override_global_format_format").getString(); localChatFormat = config.getNode("local_chat_format").getString(); serverName = config.getNode("server_name").getString(); + + if (!config.getNode("show_nickname_prefix").isVirtual()) { + showNicknamePrefix = config.getNode("show_nickname_prefix").getBoolean(); + nicknamePrefix = config.getNode("nickname_prefix").getString(); + nicknameBlacklist = config.getNode("nickname_blacklist").getList(value -> value.toString()); + } configLoader = HoconConfigurationLoader.builder().setFile(new File("nicknames")).build(); ConfigurationNode rootNode; From c6f261f2d39ed3b64f84f456de44fc33d3031bec Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Tue, 2 Apr 2019 13:31:36 +0100 Subject: [PATCH 12/23] Added a debug message for the read nicknames. --- .../olivermartin/multichat/spongebridge/MultiChatSponge.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/spongebridge/MultiChatSponge.java b/multichat/src/main/java/xyz/olivermartin/multichat/spongebridge/MultiChatSponge.java index 09460d0b..ed0c92c1 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/spongebridge/MultiChatSponge.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/spongebridge/MultiChatSponge.java @@ -127,6 +127,9 @@ public void onServerStart(GameStartedServerEvent event) { showNicknamePrefix = config.getNode("show_nickname_prefix").getBoolean(); nicknamePrefix = config.getNode("nickname_prefix").getString(); nicknameBlacklist = config.getNode("nickname_blacklist").getList(value -> value.toString()); + for (String n : nicknameBlacklist) { + System.out.println(n); + } } configLoader = HoconConfigurationLoader.builder().setFile(new File("nicknames")).build(); From 5777e8c2dc9af62b06df80340a8b6484c7afac31 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Tue, 2 Apr 2019 13:35:03 +0100 Subject: [PATCH 13/23] Removed sponge debug message as blacklist does load correctly! --- .../olivermartin/multichat/spongebridge/MultiChatSponge.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/spongebridge/MultiChatSponge.java b/multichat/src/main/java/xyz/olivermartin/multichat/spongebridge/MultiChatSponge.java index ed0c92c1..09460d0b 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/spongebridge/MultiChatSponge.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/spongebridge/MultiChatSponge.java @@ -127,9 +127,6 @@ public void onServerStart(GameStartedServerEvent event) { showNicknamePrefix = config.getNode("show_nickname_prefix").getBoolean(); nicknamePrefix = config.getNode("nickname_prefix").getString(); nicknameBlacklist = config.getNode("nickname_blacklist").getList(value -> value.toString()); - for (String n : nicknameBlacklist) { - System.out.println(n); - } } configLoader = HoconConfigurationLoader.builder().setFile(new File("nicknames")).build(); From a08ca447d5d6a3793db81715896c275e6f0c4ec1 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Tue, 2 Apr 2019 13:39:42 +0100 Subject: [PATCH 14/23] Potentially added the nickname prefix character on spigot --- .../olivermartin/multichat/spigotbridge/NameManager.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/spigotbridge/NameManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/spigotbridge/NameManager.java index 688372a8..43651a52 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/spigotbridge/NameManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/spigotbridge/NameManager.java @@ -23,6 +23,8 @@ import org.bukkit.event.player.PlayerLoginEvent; import org.bukkit.event.player.PlayerQuitEvent; +import xyz.olivermartin.multichat.spongebridge.MultiChatSponge; + /** * Player Name Manager *

Manages players names, uuids and nicknames

@@ -84,7 +86,11 @@ public String getCurrentName(UUID uuid) { synchronized (mapUUIDNick) { if (mapUUIDNick.containsKey(uuid)) { - return mapNickFormatted.get(mapUUIDNick.get(uuid)); + if (MultiChatSponge.showNicknamePrefix) { + return MultiChatSponge.nicknamePrefix + mapNickFormatted.get(mapUUIDNick.get(uuid)); + } else { + return mapNickFormatted.get(mapUUIDNick.get(uuid)); + } } } From fcec7087a5d0aa6f8045fb0f6b7f59bfefd52aad Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Tue, 2 Apr 2019 13:43:46 +0100 Subject: [PATCH 15/23] Fixed a bug where spigot tried to refer to sponge class --- .../olivermartin/multichat/spigotbridge/NameManager.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/spigotbridge/NameManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/spigotbridge/NameManager.java index 43651a52..44838bda 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/spigotbridge/NameManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/spigotbridge/NameManager.java @@ -23,8 +23,6 @@ import org.bukkit.event.player.PlayerLoginEvent; import org.bukkit.event.player.PlayerQuitEvent; -import xyz.olivermartin.multichat.spongebridge.MultiChatSponge; - /** * Player Name Manager *

Manages players names, uuids and nicknames

@@ -86,8 +84,8 @@ public String getCurrentName(UUID uuid) { synchronized (mapUUIDNick) { if (mapUUIDNick.containsKey(uuid)) { - if (MultiChatSponge.showNicknamePrefix) { - return MultiChatSponge.nicknamePrefix + mapNickFormatted.get(mapUUIDNick.get(uuid)); + if (MultiChatSpigot.showNicknamePrefix) { + return MultiChatSpigot.nicknamePrefix + mapNickFormatted.get(mapUUIDNick.get(uuid)); } else { return mapNickFormatted.get(mapUUIDNick.get(uuid)); } From b473484c3e0921dc7f58941a5f102eb63847dfb2 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Tue, 2 Apr 2019 13:51:28 +0100 Subject: [PATCH 16/23] Fixed the nickname prefix showing in /realname --- .../multichat/spigotbridge/NameManager.java | 15 +++++++++++++-- .../spigotbridge/commands/CommandHandler.java | 2 +- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/spigotbridge/NameManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/spigotbridge/NameManager.java index 44838bda..bff56e6c 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/spigotbridge/NameManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/spigotbridge/NameManager.java @@ -73,7 +73,7 @@ private void setDefaultData() { mapNameFormatted = new HashMap(); } - + /** * Returns the FORMATTED NICKNAME of a player if they have one set, otherwise returns their username * @@ -81,10 +81,21 @@ private void setDefaultData() { * @return The NICKNAME of the player if it is set, otherwise their username */ public String getCurrentName(UUID uuid) { + return getCurrentName(uuid, true); + } + + /** + * Returns the FORMATTED NICKNAME of a player if they have one set, otherwise returns their username + * + * @param uuid The Unique ID of the player to lookup + * @param withPrefix Should the nickname prefix also be returned if it is set? + * @return The NICKNAME of the player if it is set, otherwise their username + */ + public String getCurrentName(UUID uuid, boolean withPrefix) { synchronized (mapUUIDNick) { if (mapUUIDNick.containsKey(uuid)) { - if (MultiChatSpigot.showNicknamePrefix) { + if (MultiChatSpigot.showNicknamePrefix && withPrefix) { return MultiChatSpigot.nicknamePrefix + mapNickFormatted.get(mapUUIDNick.get(uuid)); } else { return mapNickFormatted.get(mapUUIDNick.get(uuid)); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/spigotbridge/commands/CommandHandler.java b/multichat/src/main/java/xyz/olivermartin/multichat/spigotbridge/commands/CommandHandler.java index 36729067..5927f09d 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/spigotbridge/commands/CommandHandler.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/spigotbridge/commands/CommandHandler.java @@ -287,7 +287,7 @@ public boolean onCommand(CommandSender commandSender, Command cmd, String label, for (UUID uuid : matches.get()) { if (limit > 0 || sender.hasPermission("multichatspigot.realname.nolimit")) { - sender.sendMessage(ChatColor.GREEN + "Nickname: '" + NameManager.getInstance().getCurrentName(uuid) + "' Belongs to player: '" + NameManager.getInstance().getName(uuid) + "'"); + sender.sendMessage(ChatColor.GREEN + "Nickname: '" + NameManager.getInstance().getCurrentName(uuid, false) + "' Belongs to player: '" + NameManager.getInstance().getName(uuid) + "'"); limit--; } else { sender.sendMessage(ChatColor.DARK_GREEN + "Only the first 10 results have been shown, please try a more specific query!"); From b0516fada6dca8affec25c11d971bef4ecbc3d9f Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Tue, 2 Apr 2019 13:54:21 +0100 Subject: [PATCH 17/23] Implemented nickname prefix char on sponge --- .../multichat/spongebridge/SpongePlaceholderManager.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/spongebridge/SpongePlaceholderManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/spongebridge/SpongePlaceholderManager.java index 2c2f7895..6b7993ce 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/spongebridge/SpongePlaceholderManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/spongebridge/SpongePlaceholderManager.java @@ -30,7 +30,11 @@ public static String buildChatFormat(Player player, String format) { format = format.replace("%NAME%", player.getName()); format = format.replace("%PREFIX%", prefix); format = format.replace("%SUFFIX%", suffix); - format = format.replace("%NICK%", nickname); + if (MultiChatSponge.showNicknamePrefix) { + format = format.replace("%NICK%", MultiChatSponge.nicknamePrefix + nickname); + } else { + format = format.replace("%NICK%", nickname); + } format = format.replace("%WORLD%", player.getWorld().getName()); format = format.replace("%SERVER%", MultiChatSponge.serverName); format = format.replace("%SERVER%", MultiChatSponge.serverName); From 897aa723414884436ce38e13ffe576b8ceb8548d Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Tue, 2 Apr 2019 13:58:01 +0100 Subject: [PATCH 18/23] Fixed bug that made nickname prefix appear before real names on sponge --- .../spongebridge/SpongePlaceholderManager.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/spongebridge/SpongePlaceholderManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/spongebridge/SpongePlaceholderManager.java index 6b7993ce..5cebafe6 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/spongebridge/SpongePlaceholderManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/spongebridge/SpongePlaceholderManager.java @@ -11,7 +11,11 @@ public static String buildChatFormat(Player player, String format) { String suffix = ""; if (MultiChatSponge.nicknames.containsKey(player.getUniqueId())) { - nickname = MultiChatSponge.nicknames.get(player.getUniqueId()); + if (MultiChatSponge.showNicknamePrefix) { + nickname = MultiChatSponge.nicknamePrefix + MultiChatSponge.nicknames.get(player.getUniqueId()); + } else { + nickname = MultiChatSponge.nicknames.get(player.getUniqueId()); + } } else { nickname = player.getName(); } @@ -23,18 +27,14 @@ public static String buildChatFormat(Player player, String format) { if (player.getOption("suffix").isPresent()) { suffix = player.getOption("suffix").get(); } - + // Replace the displayname placeholder with the displayname format format = format.replace("%DISPLAYNAME%", MultiChatSponge.displayNameFormatLastVal); format = format.replace("%NAME%", player.getName()); format = format.replace("%PREFIX%", prefix); format = format.replace("%SUFFIX%", suffix); - if (MultiChatSponge.showNicknamePrefix) { - format = format.replace("%NICK%", MultiChatSponge.nicknamePrefix + nickname); - } else { - format = format.replace("%NICK%", nickname); - } + format = format.replace("%NICK%", nickname); format = format.replace("%WORLD%", player.getWorld().getName()); format = format.replace("%SERVER%", MultiChatSponge.serverName); format = format.replace("%SERVER%", MultiChatSponge.serverName); From 5aafc2359813632b9267d28d3ad8df40aca03c08 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Tue, 2 Apr 2019 14:09:45 +0100 Subject: [PATCH 19/23] Attempt to implement blacklist on spigot AND sponge --- .../spigotbridge/commands/CommandHandler.java | 34 ++++++++++++++++--- .../spongebridge/MultiChatSponge.java | 20 ++++++++--- 2 files changed, 45 insertions(+), 9 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/spigotbridge/commands/CommandHandler.java b/multichat/src/main/java/xyz/olivermartin/multichat/spigotbridge/commands/CommandHandler.java index 5927f09d..30e4591e 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/spigotbridge/commands/CommandHandler.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/spigotbridge/commands/CommandHandler.java @@ -72,7 +72,7 @@ public boolean onCommand(CommandSender commandSender, Command cmd, String label, } } - + if (config.contains("show_nickname_prefix")) { MultiChatSpigot.showNicknamePrefix = config.getBoolean("show_nickname_prefix"); MultiChatSpigot.nicknamePrefix = config.getString("nickname_prefix"); @@ -143,10 +143,10 @@ public boolean onCommand(CommandSender commandSender, Command cmd, String label, return true; } - + String targetNickname = NameManager.getInstance().stripAllFormattingCodes(NameManager.getInstance().getCurrentName(targetUUID)); String targetName = NameManager.getInstance().getName(targetUUID); - + if (NameManager.getInstance().existsNickname(args[0]) && !targetNickname.equalsIgnoreCase(NameManager.getInstance().stripAllFormattingCodes(args[0])) ) { //&& !sender.hasPermission("multichatspigot.nick.duplicate")) { sender.sendMessage(ChatColor.DARK_RED + "Sorry, this nickname is already in use!"); @@ -161,6 +161,18 @@ public boolean onCommand(CommandSender commandSender, Command cmd, String label, } + boolean blacklisted = false; + for (String bl : MultiChatSpigot.nicknameBlacklist) { + if (NameManager.getInstance().stripAllFormattingCodes(args[0]).matches(bl)) blacklisted = true; + } + + if (blacklisted) { + + sender.sendMessage(ChatColor.DARK_RED + "Sorry, this name is not allowed!"); + return true; + + } + NameManager.getInstance().setNickname(targetUUID, args[0]); MetaManager.getInstance().updatePlayerMeta(sender.getName(), MultiChatSpigot.setDisplayNameLastVal, MultiChatSpigot.displayNameFormatLastVal); @@ -215,10 +227,10 @@ public boolean onCommand(CommandSender commandSender, Command cmd, String label, return true; } - + String targetNickname = NameManager.getInstance().stripAllFormattingCodes(NameManager.getInstance().getCurrentName(targetUUID)); String targetName = NameManager.getInstance().getName(targetUUID); - + if (NameManager.getInstance().existsNickname(args[1]) && !targetNickname.equalsIgnoreCase(NameManager.getInstance().stripAllFormattingCodes(args[0])) ) { //&& !sender.hasPermission("multichatspigot.nick.duplicate")) { sender.sendMessage(ChatColor.DARK_RED + "Sorry, this nickname is already in use!"); @@ -233,6 +245,18 @@ public boolean onCommand(CommandSender commandSender, Command cmd, String label, } + boolean blacklisted = false; + for (String bl : MultiChatSpigot.nicknameBlacklist) { + if (NameManager.getInstance().stripAllFormattingCodes(args[1]).matches(bl)) blacklisted = true; + } + + if (blacklisted) { + + sender.sendMessage(ChatColor.DARK_RED + "Sorry, this name is not allowed!"); + return true; + + } + NameManager.getInstance().setNickname(targetUUID, args[1]); MetaManager.getInstance().updatePlayerMeta(target.getName(), MultiChatSpigot.setDisplayNameLastVal, MultiChatSpigot.displayNameFormatLastVal); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/spongebridge/MultiChatSponge.java b/multichat/src/main/java/xyz/olivermartin/multichat/spongebridge/MultiChatSponge.java index 09460d0b..b9d4784a 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/spongebridge/MultiChatSponge.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/spongebridge/MultiChatSponge.java @@ -98,7 +98,7 @@ public final class MultiChatSponge implements CommandExecutor { public static Optional papi; public static String serverName = "SPONGE"; - + public static boolean showNicknamePrefix = false; public static String nicknamePrefix = "~"; public static List nicknameBlacklist = new ArrayList(); @@ -122,7 +122,7 @@ public void onServerStart(GameStartedServerEvent event) { overrideGlobalFormatFormat = config.getNode("override_global_format_format").getString(); localChatFormat = config.getNode("local_chat_format").getString(); serverName = config.getNode("server_name").getString(); - + if (!config.getNode("show_nickname_prefix").isVirtual()) { showNicknamePrefix = config.getNode("show_nickname_prefix").getBoolean(); nicknamePrefix = config.getNode("nickname_prefix").getString(); @@ -376,7 +376,7 @@ public CommandResult execute(CommandSource sender, CommandContext args) throws C sender.sendMessage(Text.of("Sorry, a player already exists with this name!")); return CommandResult.success(); } - + String targetNickname; if (nicknames.containsKey(targetUUID)) { targetNickname = stripAllFormattingCodes(nicknames.get(targetUUID)); @@ -389,13 +389,25 @@ public CommandResult execute(CommandSource sender, CommandContext args) throws C .map(nick -> stripAllFormattingCodes(nick)) .anyMatch(nick -> nick.equalsIgnoreCase(strippedNickname)) && !targetNickname.equalsIgnoreCase(strippedNickname) ) { - //&& !sender.hasPermission("multichatsponge.nick.duplicate")) { + //&& !sender.hasPermission("multichatsponge.nick.duplicate")) { sender.sendMessage(Text.of("Sorry, a player already has that nickname!")); return CommandResult.success(); } + boolean blacklisted = false; + for (String bl : MultiChatSponge.nicknameBlacklist) { + if (strippedNickname.matches(bl)) blacklisted = true; + } + + if (blacklisted) { + + sender.sendMessage(Text.of("Sorry, this name is not allowed!")); + return CommandResult.success(); + + } + addNickname(targetUUID,nickname); updatePlayerMeta(target.getName(), setDisplayNameLastVal, displayNameFormatLastVal); From a230f32ae5ad6ff6d12cb90079b31e514a1d63a6 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Tue, 2 Apr 2019 14:15:36 +0100 Subject: [PATCH 20/23] Updated default configs for spigot and sponge --- multichat/src/main/resources/multichatsponge.yml | 5 +++-- multichat/src/main/resources/spigotconfig.yml | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/multichat/src/main/resources/multichatsponge.yml b/multichat/src/main/resources/multichatsponge.yml index 5377670a..56dfe401 100644 --- a/multichat/src/main/resources/multichatsponge.yml +++ b/multichat/src/main/resources/multichatsponge.yml @@ -67,9 +67,10 @@ local_chat_format: "&3[&bL&3] &f%DISPLAYNAME%&f: &7" # Players will be blocked from using any nicknames on this list! # Regular expressions can be used +# (?i) is the regular expression term to ignore case nickname_blacklist: -- "Notch" -- "Jeb" +- "(?i)Notch" +- "(?i)Jeb" #- "[1234567890]+.*" # <-- Example to block any nicknames starting with a number! # Should a prefix be displayed before nicknames to differentiate them from real names? diff --git a/multichat/src/main/resources/spigotconfig.yml b/multichat/src/main/resources/spigotconfig.yml index d42ebc5e..099e5219 100644 --- a/multichat/src/main/resources/spigotconfig.yml +++ b/multichat/src/main/resources/spigotconfig.yml @@ -92,9 +92,10 @@ multichat_placeholders: # Players will be blocked from using any nicknames on this list! # Regular expressions can be used +# (?i) is the regular expression term to ignore case nickname_blacklist: -- "Notch" -- "Jeb" +- "(?i)Notch" +- "(?i)Jeb" #- "[1234567890]+.*" # <-- Example to block any nicknames starting with a number! # Should a prefix be displayed before nicknames to differentiate them from real names? From af47c3c256b9c4d0c225aa16bff73a2604e49b08 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Tue, 2 Apr 2019 14:28:42 +0100 Subject: [PATCH 21/23] Added barebones link replacement in chat --- .../java/xyz/olivermartin/multichat/bungee/ChatControl.java | 4 ++++ .../main/java/xyz/olivermartin/multichat/bungee/Events.java | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatControl.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatControl.java index 68464a32..f99a45ee 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatControl.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatControl.java @@ -280,6 +280,10 @@ public static void reload() { } } + + public static String replaceLinks(String message) { + return message.replaceAll("((https|http):\\/\\/)?(www\\.)?([-a-zA-Z0-9@:%._\\+~#=]{2,256}\\.)+[a-zA-Z]{2,4}\\b([-a-zA-Z0-9@:%_\\+.~#?&//=]*)", "[LINK REMOVED]"); + } public static void spamPardonPlayer(UUID uuid) { spamMap.remove(uuid); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Events.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Events.java index e62a74eb..545ec341 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Events.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Events.java @@ -350,6 +350,11 @@ public void onChat(ChatEvent event) { event.setCancelled(true); return; } + + if (!player.hasPermission("multichat.chat.link")) { + message = ChatControl.replaceLinks(message); + event.setMessage(message); + } // Let server know players channel preference BungeeComm.sendPlayerChannelMessage(player.getName(), Channel.getChannel(player.getUniqueId()).getName(), Channel.getChannel(player.getUniqueId()), player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color"))); From 2ec6598b7770f221ee98c248c7cd410e2dfd7426 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Tue, 2 Apr 2019 14:45:13 +0100 Subject: [PATCH 22/23] Added link setting to chatcontrol config --- multichat/src/main/resources/chatcontrol.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/multichat/src/main/resources/chatcontrol.yml b/multichat/src/main/resources/chatcontrol.yml index ecce6d5f..63a20932 100644 --- a/multichat/src/main/resources/chatcontrol.yml +++ b/multichat/src/main/resources/chatcontrol.yml @@ -175,3 +175,16 @@ apply_ignore_to: ignorecommand: - blockchat + +############################################################ +# +------------------------------------------------------+ # +# | Link / URL Controls | # +# +------------------------------------------------------+ # +############################################################ + +# Should MultiChat control which players can send links to chat? +# If set to true, then only players with multichat.chat.link will be able to send links +link_control: false + +# Message to replace links in chat with +link_removal_message: "[LINK REMOVED]" From d1435f89bbfe6c0907f7a539c08a28f334eb438d Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Tue, 2 Apr 2019 14:51:14 +0100 Subject: [PATCH 23/23] Plugin should now read and use the chat control config info for links --- .../java/xyz/olivermartin/multichat/bungee/ChatControl.java | 6 +++++- .../java/xyz/olivermartin/multichat/bungee/MultiChat.java | 6 ++++++ .../multichat/bungee/commands/MultiChatCommand.java | 6 ++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatControl.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatControl.java index f99a45ee..fae7f453 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatControl.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatControl.java @@ -25,6 +25,9 @@ public class ChatControl { private static Set mutedPlayers; private static Map> ignoreMap; private static Map spamMap; + + public static boolean controlLinks = false; + public static String linkMessage = "[LINK REMOVED]"; public static Set getMutedPlayers() { return mutedPlayers; @@ -282,7 +285,8 @@ public static void reload() { } public static String replaceLinks(String message) { - return message.replaceAll("((https|http):\\/\\/)?(www\\.)?([-a-zA-Z0-9@:%._\\+~#=]{2,256}\\.)+[a-zA-Z]{2,4}\\b([-a-zA-Z0-9@:%_\\+.~#?&//=]*)", "[LINK REMOVED]"); + if (!controlLinks) return message; + return message.replaceAll("((https|http):\\/\\/)?(www\\.)?([-a-zA-Z0-9@:%._\\+~#=]{2,256}\\.)+[a-zA-Z]{2,4}\\b([-a-zA-Z0-9@:%_\\+.~#?&//=]*)", linkMessage); } public static void spamPardonPlayer(UUID uuid) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java index b5612250..e11eeadd 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java @@ -293,6 +293,12 @@ public void onEnable() { // Run start-up routines Startup(); UUIDNameManager.Startup(); + + // Set up chat control stuff + if (chatcontrolYML.contains("link_control")) { + ChatControl.controlLinks = chatcontrolYML.getBoolean("link_control"); + ChatControl.linkMessage = chatcontrolYML.getString("link_removal_message"); + } // Set default channel defaultChannel = configYML.getString("default_channel"); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MultiChatCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MultiChatCommand.java index 34823c6a..9637f8d0 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MultiChatCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MultiChatCommand.java @@ -115,6 +115,12 @@ public void execute(CommandSender sender, String[] args) { ChatControl.reload(); System.out.println("VERSION LOADED: " + MultiChat.configversion); + + // Set up chat control stuff + if (ConfigManager.getInstance().getHandler("chatcontrol.yml").getConfig().contains("link_control")) { + ChatControl.controlLinks = ConfigManager.getInstance().getHandler("chatcontrol.yml").getConfig().getBoolean("link_control"); + ChatControl.linkMessage = ConfigManager.getInstance().getHandler("chatcontrol.yml").getConfig().getString("link_removal_message"); + } // Set default channel MultiChat.defaultChannel = ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("default_channel");