From e1a8240817507318cdf9467e304ff54d75f719d4 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Wed, 15 Jul 2020 21:01:04 +0100 Subject: [PATCH 001/188] Created the ProxyDataStore --- .../olivermartin/multichat/bungee/Events.java | 9 ++++---- .../multichat/bungee/MultiChat.java | 11 +++++---- .../bungee/commands/FreezeChatCommand.java | 12 ++++++---- .../bungee/commands/GlobalCommand.java | 6 ++--- .../bungee/commands/LocalCommand.java | 4 ++-- .../proxy/common/MultiChatProxy.java | 10 +++++++- .../proxy/common/ProxyDataStore.java | 23 +++++++++++++++++++ 7 files changed, 57 insertions(+), 18 deletions(-) create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyDataStore.java 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 f88aa543..20e9bf16 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Events.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Events.java @@ -28,6 +28,7 @@ import net.md_5.bungee.event.EventHandler; import net.md_5.bungee.event.EventPriority; import xyz.olivermartin.multichat.bungee.commands.GCCommand; +import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; /** * Events Manager @@ -350,7 +351,7 @@ public void onChat(ChatEvent event) { } }*/ - if ((!MultiChat.frozen) || (player.hasPermission("multichat.chat.always"))) { + if ((!MultiChatProxy.getInstance().getDataStore().isChatFrozen()) || (player.hasPermission("multichat.chat.always"))) { String message = event.getMessage(); @@ -494,12 +495,12 @@ public void onLogin(PostLoginEvent event) { ConsoleManager.log("Refreshed UUID-Name lookup: " + uuid.toString()); if ( ConfigManager.getInstance().getHandler("joinmessages.yml").getConfig().getBoolean("showjoin") == true ) { - + // PremiumVanish support, return as early as possible to avoid loading unnecessary resources if (MultiChat.premiumVanish && MultiChat.hideVanishedStaffInJoin && BungeeVanishAPI.isInvisible(player)) { return; } - + String joinformat = ConfigManager.getInstance().getHandler("joinmessages.yml").getConfig().getString("serverjoin"); String silentformat = ConfigManager.getInstance().getHandler("joinmessages.yml").getConfig().getString("silentjoin"); String welcomeMessage = ConfigManager.getInstance().getHandler("joinmessages.yml").getConfig().getString("welcome_message"); @@ -521,7 +522,7 @@ public void onLogin(PostLoginEvent event) { if (ConfigManager.getInstance().getHandler("joinmessages.yml").getConfig().contains("private_welcome")) { privateWelcome = ConfigManager.getInstance().getHandler("joinmessages.yml").getConfig().getBoolean("private_welcome"); } - + boolean broadcastJoin = !player.hasPermission("multichat.staff.silentjoin"); for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { 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 a01aae8e..4d46b1e3 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java @@ -26,6 +26,8 @@ import net.md_5.bungee.api.plugin.Plugin; import net.md_5.bungee.config.Configuration; import net.md_5.bungee.event.EventHandler; +import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; /** @@ -83,8 +85,6 @@ public class MultiChat extends Plugin implements Listener { public static File configDir; public static String configversion; - public static boolean frozen; - public static String defaultChannel = ""; public static boolean forceChannelOnJoin = false; @@ -98,7 +98,7 @@ public class MultiChat extends Plugin implements Listener { public static boolean hideVanishedStaffInMsg = true; public static boolean hideVanishedStaffInStaffList = true; public static boolean hideVanishedStaffInJoin = true; - + public static List legacyServers = new ArrayList(); public static MultiChat getInstance() { @@ -263,6 +263,9 @@ public void onEnable() { @SuppressWarnings("unused") Metrics metrics = new Metrics(this); + ProxyDataStore dataStore = new ProxyDataStore(); + MultiChatProxy.getInstance().registerDataStore(dataStore); + configDir = getDataFolder(); if (!getDataFolder().exists()) { System.out.println("[MultiChat] Creating plugin directory!"); @@ -346,7 +349,7 @@ public void onEnable() { logStaffChat = configYML.getSection("privacy_settings").getBoolean("log_staffchat"); logGroupChat = configYML.getSection("privacy_settings").getBoolean("log_groupchat"); } - + // Legacy servers for RGB approximation if (configYML.contains("legacy_servers")) { legacyServers = configYML.getStringList("legacy_servers"); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/FreezeChatCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/FreezeChatCommand.java index 357d1c8e..0c772eb3 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/FreezeChatCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/FreezeChatCommand.java @@ -5,7 +5,8 @@ import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.plugin.Command; import xyz.olivermartin.multichat.bungee.MessageManager; -import xyz.olivermartin.multichat.bungee.MultiChat; +import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; /** * Freeze Chat Command @@ -24,13 +25,15 @@ public FreezeChatCommand() { public void execute(CommandSender sender, String[] args) { - if (MultiChat.frozen == true) { + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + + if (ds.isChatFrozen()) { for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { MessageManager.sendSpecialMessage(onlineplayer, "command_freezechat_thawed", sender.getName()); } - MultiChat.frozen = false; + ds.setChatFrozen(false); } else { @@ -38,7 +41,8 @@ public void execute(CommandSender sender, String[] args) { MessageManager.sendSpecialMessage(onlineplayer, "command_freezechat_frozen", sender.getName()); } - MultiChat.frozen = true; + ds.setChatFrozen(true); + } } } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java index 274b3156..4f6c17d0 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java @@ -13,8 +13,8 @@ import xyz.olivermartin.multichat.bungee.DebugManager; import xyz.olivermartin.multichat.bungee.Events; import xyz.olivermartin.multichat.bungee.MessageManager; -import xyz.olivermartin.multichat.bungee.MultiChat; import xyz.olivermartin.multichat.bungee.MultiChatUtil; +import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; /** * Global Command @@ -53,7 +53,7 @@ public void execute(CommandSender sender, String[] args) { BungeeComm.sendMessage(player.getName(), player.getServer().getInfo()); } - if ((!MultiChat.frozen) || (player.hasPermission("multichat.chat.always"))) { + if ((!MultiChatProxy.getInstance().getDataStore().isChatFrozen()) || (player.hasPermission("multichat.chat.always"))) { if (ChatControl.isMuted(player.getUniqueId(), "global_chat")) { MessageManager.sendMessage(player, "mute_cannot_send_message"); @@ -80,7 +80,7 @@ public void execute(CommandSender sender, String[] args) { if (!player.hasPermission("multichat.chat.link")) { message = ChatControl.replaceLinks(message); } - + // If they had this channel hidden, then unhide it... Channel global = Channel.getGlobalChannel(); if (!global.isMember(player.getUniqueId())) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java index 62a2c9f7..72888f0c 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java @@ -13,8 +13,8 @@ import xyz.olivermartin.multichat.bungee.DebugManager; import xyz.olivermartin.multichat.bungee.Events; import xyz.olivermartin.multichat.bungee.MessageManager; -import xyz.olivermartin.multichat.bungee.MultiChat; import xyz.olivermartin.multichat.bungee.MultiChatUtil; +import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; /** * Local Chat Command @@ -49,7 +49,7 @@ public void execute(CommandSender sender, String[] args) { BungeeComm.sendMessage(player.getName(), player.getServer().getInfo()); } - if ((!MultiChat.frozen) || (player.hasPermission("multichat.chat.always"))) { + if ((!MultiChatProxy.getInstance().getDataStore().isChatFrozen()) || (player.hasPermission("multichat.chat.always"))) { if (ChatControl.isMuted(player.getUniqueId(), "global_chat")) { MessageManager.sendMessage(player, "mute_cannot_send_message"); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/MultiChatProxy.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/MultiChatProxy.java index d8fc39f5..080f07a0 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/MultiChatProxy.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/MultiChatProxy.java @@ -20,10 +20,18 @@ public static MultiChatProxy getInstance() { /* END STATIC */ - // TODO Add attributes + private ProxyDataStore dataStore; /* END ATTRIBUTES */ private MultiChatProxy() { /* EMPTY */ } + public ProxyDataStore getDataStore() { + return this.dataStore; + } + + public void registerDataStore(ProxyDataStore dataStore) { + this.dataStore = dataStore; + } + } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyDataStore.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyDataStore.java new file mode 100644 index 00000000..4d957a4d --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyDataStore.java @@ -0,0 +1,23 @@ +package xyz.olivermartin.multichat.proxy.common; + +/** + * A proxy data store of settings and other things for MultiChatProxy + * + *

These may be updated due to messages received from the local servers

+ * + * @author Oliver Martin (Revilo410) + * + */ +public class ProxyDataStore { + + private boolean chatFrozen; + + public synchronized boolean isChatFrozen() { + return this.chatFrozen; + } + + public synchronized void setChatFrozen(boolean frozen) { + this.chatFrozen = frozen; + } + +} From 9ce67dd59f7d4e74ff59d0b9560f335aae9fb329 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Wed, 15 Jul 2020 21:32:47 +0100 Subject: [PATCH 002/188] Relocated more fields to the ProxyDataStore --- .../multichat/bungee/ChatManipulation.java | 32 +++-- .../olivermartin/multichat/bungee/Events.java | 30 +++-- .../multichat/bungee/GroupManager.java | 44 ++++--- .../multichat/bungee/MultiChat.java | 39 +++--- .../bungee/PrivateMessageManager.java | 50 ++++---- .../multichat/bungee/StaffChatManager.java | 14 ++- .../multichat/bungee/commands/ACCCommand.java | 9 +- .../multichat/bungee/commands/GCCommand.java | 16 ++- .../bungee/commands/GroupCommand.java | 113 +++++++++-------- .../bungee/commands/GroupListCommand.java | 7 +- .../multichat/bungee/commands/MCCCommand.java | 9 +- .../bungee/commands/ReplyCommand.java | 19 +-- .../bungee/commands/SocialSpyCommand.java | 11 +- .../proxy/common/ProxyDataStore.java | 118 +++++++++++++++++- 14 files changed, 345 insertions(+), 166 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatManipulation.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatManipulation.java index 17540d89..2fa7814e 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatManipulation.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatManipulation.java @@ -6,6 +6,8 @@ import com.olivermartin410.plugins.TGroupChatInfo; import net.md_5.bungee.api.connection.ProxiedPlayer; +import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; /** * LEGACY ** TO BE REMOVED ** Chat Manipulation Class @@ -43,10 +45,10 @@ public String replaceMsgVars(String messageFormat, String message, ProxiedPlayer messageFormat = messageFormat.replace("%SERVER%", sender.getServer().getInfo().getName()); messageFormat = messageFormat.replace("%SERVERT%", target.getServer().getInfo().getName()); - + messageFormat = messageFormat.replace("%WORLD%", opm.get().world); messageFormat = messageFormat.replace("%WORLDT%", opmt.get().world); - + return messageFormat; } @@ -73,10 +75,10 @@ public String replaceMsgConsoleTargetVars(String messageFormat, String message, messageFormat = messageFormat.replace("%SERVER%", sender.getServer().getInfo().getName()); messageFormat = messageFormat.replace("%SERVERT%", "CONSOLE"); - + messageFormat = messageFormat.replace("%WORLD%", opm.get().world); messageFormat = messageFormat.replace("%WORLDT%", "CONSOLE"); - + return messageFormat; } @@ -103,44 +105,50 @@ public String replaceMsgConsoleSenderVars(String messageFormat, String message, messageFormat = messageFormat.replace("%SERVER%", "CONSOLE"); messageFormat = messageFormat.replace("%SERVERT%", target.getServer().getInfo().getName()); - + messageFormat = messageFormat.replace("%WORLD%", "CONSOLE"); messageFormat = messageFormat.replace("%WORLDT%", opmt.get().world); - + return messageFormat; } public String replaceModChatVars(String messageFormat, String playername, String displayname, String server, String message, ProxiedPlayer target) { + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + messageFormat = messageFormat.replace("%DISPLAYNAME%", displayname); messageFormat = messageFormat.replace("%NAME%", playername); messageFormat = messageFormat.replace("%SERVER%", server); messageFormat = messageFormat.replace("%MESSAGE%", message); - messageFormat = messageFormat.replace("%CC%", "&" + ((TChatInfo)MultiChat.modchatpreferences.get(target.getUniqueId())).getChatColor()); - messageFormat = messageFormat.replace("%NC%", "&" + ((TChatInfo)MultiChat.modchatpreferences.get(target.getUniqueId())).getNameColor()); + messageFormat = messageFormat.replace("%CC%", "&" + ((TChatInfo)ds.getModChatPreferences().get(target.getUniqueId())).getChatColor()); + messageFormat = messageFormat.replace("%NC%", "&" + ((TChatInfo)ds.getModChatPreferences().get(target.getUniqueId())).getNameColor()); return messageFormat; } public String replaceAdminChatVars(String messageFormat, String playername, String displayname, String server, String message, ProxiedPlayer target) { + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + messageFormat = messageFormat.replace("%DISPLAYNAME%",displayname); messageFormat = messageFormat.replace("%NAME%", playername); messageFormat = messageFormat.replace("%SERVER%", server); messageFormat = messageFormat.replace("%MESSAGE%", message); - messageFormat = messageFormat.replace("%CC%", "&" + ((TChatInfo)MultiChat.adminchatpreferences.get(target.getUniqueId())).getChatColor()); - messageFormat = messageFormat.replace("%NC%", "&" + ((TChatInfo)MultiChat.adminchatpreferences.get(target.getUniqueId())).getNameColor()); + messageFormat = messageFormat.replace("%CC%", "&" + ((TChatInfo)ds.getAdminChatPreferences().get(target.getUniqueId())).getChatColor()); + messageFormat = messageFormat.replace("%NC%", "&" + ((TChatInfo)ds.getAdminChatPreferences().get(target.getUniqueId())).getNameColor()); return messageFormat; } public String replaceGroupChatVars(String messageFormat, String sendername, String message, String groupName) { + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + messageFormat = messageFormat.replace("%NAME%", sendername); messageFormat = messageFormat.replace("%MESSAGE%", message); - messageFormat = messageFormat.replace("%CC%", "&" + ((TGroupChatInfo)MultiChat.groupchats.get(groupName)).getChatColor()); - messageFormat = messageFormat.replace("%NC%", "&" + ((TGroupChatInfo)MultiChat.groupchats.get(groupName)).getNameColor()); + messageFormat = messageFormat.replace("%CC%", "&" + ((TGroupChatInfo)ds.getGroupChats().get(groupName)).getChatColor()); + messageFormat = messageFormat.replace("%NC%", "&" + ((TGroupChatInfo)ds.getGroupChats().get(groupName)).getNameColor()); messageFormat = messageFormat.replace("%GROUPNAME%", groupName.toUpperCase()); return messageFormat; 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 20e9bf16..7b8955ba 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Events.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Events.java @@ -29,6 +29,7 @@ import net.md_5.bungee.event.EventPriority; import xyz.olivermartin.multichat.bungee.commands.GCCommand; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; /** * Events Manager @@ -139,6 +140,7 @@ public static boolean togglePM(UUID uuid, UUID uuidt) { @EventHandler(priority=64) public void onChat(ChatEvent event) { + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); ProxiedPlayer player = (ProxiedPlayer) event.getSender(); // New null pointer checks @@ -203,13 +205,13 @@ public void onChat(ChatEvent event) { event.setCancelled(true); - if (MultiChat.viewedchats.get(player.getUniqueId()) != null) { + if (ds.getViewedChats().get(player.getUniqueId()) != null) { - String chatName = ((String)MultiChat.viewedchats.get(player.getUniqueId())).toLowerCase(); + String chatName = ((String)ds.getViewedChats().get(player.getUniqueId())).toLowerCase(); - if (MultiChat.groupchats.containsKey(chatName)) { + if (ds.getGroupChats().containsKey(chatName)) { - TGroupChatInfo chatInfo = (TGroupChatInfo)MultiChat.groupchats.get(chatName); + TGroupChatInfo chatInfo = (TGroupChatInfo)ds.getGroupChats().get(chatName); String playerName = player.getName(); if ((chatInfo.getFormal() == true) @@ -414,39 +416,41 @@ public void onChat(ChatEvent event) { @EventHandler(priority = EventPriority.HIGHEST) public void onLogin(PostLoginEvent event) { + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + ProxiedPlayer player = event.getPlayer(); UUID uuid = player.getUniqueId(); boolean firstJoin = false; if (player.hasPermission("multichat.staff.mod")) { - if (!MultiChat.modchatpreferences.containsKey(uuid)) { + if (!ds.getModChatPreferences().containsKey(uuid)) { TChatInfo chatinfo = new TChatInfo(); chatinfo.setChatColor(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("modchat.ccdefault").toCharArray()[0]); chatinfo.setNameColor(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("modchat.ncdefault").toCharArray()[0]); - MultiChat.modchatpreferences.put(uuid, chatinfo); + ds.getModChatPreferences().put(uuid, chatinfo); } } if (player.hasPermission("multichat.staff.admin")) { - if (!MultiChat.adminchatpreferences.containsKey(uuid)) { + if (!ds.getAdminChatPreferences().containsKey(uuid)) { TChatInfo chatinfo = new TChatInfo(); chatinfo.setChatColor(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("adminchat.ccdefault").toCharArray()[0]); chatinfo.setNameColor(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("adminchat.ncdefault").toCharArray()[0]); - MultiChat.adminchatpreferences.put(uuid, chatinfo); + ds.getAdminChatPreferences().put(uuid, chatinfo); } } PlayerMetaManager.getInstance().registerPlayer(uuid, event.getPlayer().getName()); - if (!MultiChat.viewedchats.containsKey(uuid)) { + if (!ds.getViewedChats().containsKey(uuid)) { - MultiChat.viewedchats.put(uuid, null); + ds.getViewedChats().put(uuid, null); ConsoleManager.log("Registered player " + player.getName()); } @@ -554,6 +558,8 @@ public void onLogin(PostLoginEvent event) { @EventHandler(priority = EventPriority.LOWEST) public void onLogout(PlayerDisconnectEvent event) { + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + ProxiedPlayer player = event.getPlayer(); UUID uuid = event.getPlayer().getUniqueId(); @@ -588,8 +594,8 @@ public void onLogout(PlayerDisconnectEvent event) { Channel.removePlayer(player.getUniqueId()); /// - if (MultiChat.viewedchats.containsKey(uuid)) { - MultiChat.viewedchats.remove(uuid); + if (ds.getViewedChats().containsKey(uuid)) { + ds.getViewedChats().remove(uuid); } PlayerMetaManager.getInstance().unregisterPlayer(uuid); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/GroupManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/GroupManager.java index e15c5b08..c9ea8aee 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/GroupManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/GroupManager.java @@ -7,6 +7,8 @@ import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.connection.ProxiedPlayer; import xyz.olivermartin.multichat.bungee.commands.GCCommand; +import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; /** * Group Chat Management Class @@ -24,6 +26,7 @@ public class GroupManager { public void createGroup(String groupname, UUID owneruuid, boolean secret, String password) { TGroupChatInfo newgroup = new TGroupChatInfo(); + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); newgroup.addMember(owneruuid); newgroup.addViewer(owneruuid); @@ -35,7 +38,7 @@ public void createGroup(String groupname, UUID owneruuid, boolean secret, String newgroup.setPassword(password); newgroup.setFormal(false); - MultiChat.groupchats.put(groupname.toLowerCase(), newgroup); + ds.getGroupChats().put(groupname.toLowerCase(), newgroup); } @@ -49,8 +52,9 @@ public boolean joinGroup(String groupname, ProxiedPlayer player, String password boolean success = false; + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); TGroupChatInfo groupchat = new TGroupChatInfo(); - groupchat = (TGroupChatInfo)MultiChat.groupchats.get(groupname.toLowerCase()); + groupchat = (TGroupChatInfo)ds.getGroupChats().get(groupname.toLowerCase()); if (!groupchat.existsBanned(player.getUniqueId())) { @@ -76,8 +80,8 @@ public boolean joinGroup(String groupname, ProxiedPlayer player, String password groupchat.addMember(player.getUniqueId()); groupchat.addViewer(player.getUniqueId()); - MultiChat.groupchats.remove(groupname.toLowerCase()); - MultiChat.groupchats.put(groupname.toLowerCase(), groupchat); + ds.getGroupChats().remove(groupname.toLowerCase()); + ds.getGroupChats().put(groupname.toLowerCase(), groupchat); success = true; @@ -107,8 +111,8 @@ public boolean joinGroup(String groupname, ProxiedPlayer player, String password groupchat.addMember(player.getUniqueId()); groupchat.addViewer(player.getUniqueId()); - MultiChat.groupchats.remove(groupname.toLowerCase()); - MultiChat.groupchats.put(groupname.toLowerCase(), groupchat); + ds.getGroupChats().remove(groupname.toLowerCase()); + ds.getGroupChats().put(groupname.toLowerCase(), groupchat); success = true; @@ -139,11 +143,12 @@ public boolean joinGroup(String groupname, ProxiedPlayer player, String password */ public void setViewedChat(UUID playeruuid, String groupname) { - String viewedchat = (String)MultiChat.viewedchats.get(playeruuid); + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + String viewedchat = (String)ds.getViewedChats().get(playeruuid); viewedchat = groupname.toLowerCase(); - MultiChat.viewedchats.remove(playeruuid); - MultiChat.viewedchats.put(playeruuid, viewedchat); + ds.getViewedChats().remove(playeruuid); + ds.getViewedChats().put(playeruuid, viewedchat); } @@ -152,7 +157,9 @@ public void setViewedChat(UUID playeruuid, String groupname) { */ public void announceJoinGroup(String playername, String groupname) { - GCCommand.sendMessage(playername + MessageManager.getMessage("groups_info_joined"), "&lINFO", MultiChat.groupchats.get(groupname.toLowerCase())); + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + + GCCommand.sendMessage(playername + MessageManager.getMessage("groups_info_joined"), "&lINFO", ds.getGroupChats().get(groupname.toLowerCase())); } @@ -161,7 +168,9 @@ public void announceJoinGroup(String playername, String groupname) { */ public void announceQuitGroup(String playername, String groupname) { - GCCommand.sendMessage(playername + MessageManager.getMessage("groups_info_quit"), "&lINFO", MultiChat.groupchats.get(groupname.toLowerCase())); + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + + GCCommand.sendMessage(playername + MessageManager.getMessage("groups_info_quit"), "&lINFO", ds.getGroupChats().get(groupname.toLowerCase())); } @@ -170,10 +179,11 @@ public void announceQuitGroup(String playername, String groupname) { */ public void quitGroup(String groupname, UUID player, ProxiedPlayer pinstance) { + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); TGroupChatInfo groupchatinfo = new TGroupChatInfo(); - String viewedchat = (String)MultiChat.viewedchats.get(player); + String viewedchat = (String)ds.getViewedChats().get(player); - groupchatinfo = (TGroupChatInfo)MultiChat.groupchats.get(groupname.toLowerCase()); + groupchatinfo = (TGroupChatInfo)ds.getGroupChats().get(groupname.toLowerCase()); if (groupchatinfo.existsMember(player)) { @@ -188,10 +198,10 @@ public void quitGroup(String groupname, UUID player, ProxiedPlayer pinstance) { viewedchat = null; - MultiChat.viewedchats.remove(player); - MultiChat.viewedchats.put(player, viewedchat); - MultiChat.groupchats.remove(groupname.toLowerCase()); - MultiChat.groupchats.put(groupname.toLowerCase(), groupchatinfo); + ds.getViewedChats().remove(player); + ds.getViewedChats().put(player, viewedchat); + ds.getGroupChats().remove(groupname.toLowerCase()); + ds.getGroupChats().put(groupname.toLowerCase(), groupchatinfo); MessageManager.sendSpecialMessage(pinstance, "groups_quit", groupname.toUpperCase()); announceQuitGroup(pinstance.getName(), groupname); 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 4d46b1e3..ecb04aad 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java @@ -73,15 +73,6 @@ public class MultiChat extends Plugin implements Listener { }; - public static Map modchatpreferences = new HashMap(); - public static Map adminchatpreferences = new HashMap(); - public static Map groupchats = new HashMap(); - - public static Map viewedchats = new HashMap(); - public static Map lastmsg = new HashMap(); - public static List allspy = new ArrayList(); - public static List socialspy = new ArrayList(); - public static File configDir; public static String configversion; @@ -550,11 +541,13 @@ public static void saveBulletins() { public static void saveChatInfo() { + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + try { File file = new File(configDir, "StaffChatInfo.dat"); FileOutputStream saveFile = new FileOutputStream(file); ObjectOutputStream out = new ObjectOutputStream(saveFile); - out.writeObject(modchatpreferences); + out.writeObject(ds.getModChatPreferences()); out.close(); } catch (IOException e) { System.out.println("[MultiChat] [Save Error] An error has occured writing the mod chat info file!"); @@ -565,7 +558,7 @@ public static void saveChatInfo() { File file = new File(configDir, "AdminChatInfo.dat"); FileOutputStream saveFile = new FileOutputStream(file); ObjectOutputStream out = new ObjectOutputStream(saveFile); - out.writeObject(adminchatpreferences); + out.writeObject(ds.getAdminChatPreferences()); out.close(); } catch (IOException e) { System.out.println("[MultiChat] [Save Error] An error has occured writing the admin chat info file!"); @@ -576,11 +569,13 @@ public static void saveChatInfo() { public static void saveGroupChatInfo() { + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + try { File file = new File(configDir, "GroupChatInfo.dat"); FileOutputStream saveFile = new FileOutputStream(file); ObjectOutputStream out = new ObjectOutputStream(saveFile); - out.writeObject(groupchats); + out.writeObject(ds.getGroupChats()); out.close(); } catch (IOException e) { System.out.println("[MultiChat] [Save Error] An error has occured writing the group chat info file!"); @@ -606,11 +601,13 @@ public static void saveCasts() { public static void saveGroupSpyInfo() { + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + try { File file = new File(configDir, "GroupSpyInfo.dat"); FileOutputStream saveFile = new FileOutputStream(file); ObjectOutputStream out = new ObjectOutputStream(saveFile); - out.writeObject(allspy); + out.writeObject(ds.getAllSpy()); out.close(); } catch (IOException e) { System.out.println("[MultiChat] [Save Error] An error has occured writing the group spy info file!"); @@ -621,11 +618,13 @@ public static void saveGroupSpyInfo() { public static void saveSocialSpyInfo() { + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + try { File file = new File(configDir, "SocialSpyInfo.dat"); FileOutputStream saveFile = new FileOutputStream(file); ObjectOutputStream out = new ObjectOutputStream(saveFile); - out.writeObject(socialspy); + out.writeObject(ds.getSocialSpy()); out.close(); } catch (IOException e) { System.out.println("[MultiChat] [Save Error] An error has occured writing the social spy info file!"); @@ -915,6 +914,8 @@ public static Map> loadIgnore() { public static void Startup() { + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + System.out.println("[MultiChat] Starting load routine for data files"); File f = new File(configDir, "StaffChatInfo.dat"); @@ -922,8 +923,8 @@ public static void Startup() { if ((f.exists()) && (!f.isDirectory()) && (f2.exists()) && (!f2.isDirectory())) { - modchatpreferences.putAll(loadModChatInfo()); - adminchatpreferences.putAll(loadAdminChatInfo()); + ds.setModChatPreferences(loadModChatInfo()); + ds.setAdminChatPreferences(loadAdminChatInfo()); } else { @@ -939,7 +940,7 @@ public static void Startup() { if ((f3.exists()) && (!f3.isDirectory())) { - groupchats.putAll(loadGroupChatInfo()); + ds.setGroupChats(loadGroupChatInfo()); } else { @@ -955,7 +956,7 @@ public static void Startup() { if ((f4.exists()) && (!f4.isDirectory())) { - allspy = loadGroupSpyInfo(); + ds.setAllSpy(loadGroupSpyInfo()); } else { @@ -987,7 +988,7 @@ public static void Startup() { if ((f6.exists()) && (!f6.isDirectory())) { - socialspy = loadSocialSpyInfo(); + ds.setSocialSpy(loadSocialSpyInfo()); } else { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PrivateMessageManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PrivateMessageManager.java index 94fdf011..ea5d734e 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PrivateMessageManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PrivateMessageManager.java @@ -7,6 +7,8 @@ import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.connection.ProxiedPlayer; +import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; public class PrivateMessageManager { @@ -30,6 +32,8 @@ private PrivateMessageManager() { public void sendMessage(String message, ProxiedPlayer sender, ProxiedPlayer target) { + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + message = MultiChatUtil.reformatRGB(message); String messageoutformat = ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("pmout"); @@ -54,7 +58,7 @@ public void sendMessage(String message, ProxiedPlayer sender, ProxiedPlayer targ for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { if ((onlineplayer.hasPermission("multichat.staff.spy")) - && (MultiChat.socialspy.contains(onlineplayer.getUniqueId())) + && (ds.getSocialSpy().contains(onlineplayer.getUniqueId())) && (onlineplayer.getUniqueId() != sender.getUniqueId()) && (onlineplayer.getUniqueId() != target.getUniqueId()) && (!(sender.hasPermission("multichat.staff.spy.bypass") @@ -70,17 +74,17 @@ public void sendMessage(String message, ProxiedPlayer sender, ProxiedPlayer targ } - if (MultiChat.lastmsg.containsKey(sender.getUniqueId())) { - MultiChat.lastmsg.remove(sender.getUniqueId()); + if (ds.getLastMsg().containsKey(sender.getUniqueId())) { + ds.getLastMsg().remove(sender.getUniqueId()); } - MultiChat.lastmsg.put(sender.getUniqueId(), target.getUniqueId()); + ds.getLastMsg().put(sender.getUniqueId(), target.getUniqueId()); - if (MultiChat.lastmsg.containsKey(target.getUniqueId())) { - MultiChat.lastmsg.remove(target.getUniqueId()); + if (ds.getLastMsg().containsKey(target.getUniqueId())) { + ds.getLastMsg().remove(target.getUniqueId()); } - MultiChat.lastmsg.put(target.getUniqueId(), sender.getUniqueId()); + ds.getLastMsg().put(target.getUniqueId(), sender.getUniqueId()); ConsoleManager.logSocialSpy(sender.getName(), target.getName(), message); @@ -88,6 +92,8 @@ public void sendMessage(String message, ProxiedPlayer sender, ProxiedPlayer targ public void sendMessageConsoleTarget(String message, ProxiedPlayer sender) { + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + message = MultiChatUtil.reformatRGB(message); String messageoutformat = ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("pmout"); @@ -108,7 +114,7 @@ public void sendMessageConsoleTarget(String message, ProxiedPlayer sender) { for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { if ((onlineplayer.hasPermission("multichat.staff.spy")) - && (MultiChat.socialspy.contains(onlineplayer.getUniqueId())) + && (ds.getSocialSpy().contains(onlineplayer.getUniqueId())) && (onlineplayer.getUniqueId() != ((ProxiedPlayer)sender).getUniqueId()) && (!(sender.hasPermission("multichat.staff.spy.bypass")))) { @@ -121,22 +127,24 @@ public void sendMessageConsoleTarget(String message, ProxiedPlayer sender) { } - if (MultiChat.lastmsg.containsKey(((ProxiedPlayer)sender).getUniqueId())) { - MultiChat.lastmsg.remove(((ProxiedPlayer)sender).getUniqueId()); + if (ds.getLastMsg().containsKey(((ProxiedPlayer)sender).getUniqueId())) { + ds.getLastMsg().remove(((ProxiedPlayer)sender).getUniqueId()); } - MultiChat.lastmsg.put(((ProxiedPlayer)sender).getUniqueId(), new UUID(0L, 0L)); + ds.getLastMsg().put(((ProxiedPlayer)sender).getUniqueId(), new UUID(0L, 0L)); - if (MultiChat.lastmsg.containsKey(new UUID(0L, 0L))) { - MultiChat.lastmsg.remove(new UUID(0L, 0L)); + if (ds.getLastMsg().containsKey(new UUID(0L, 0L))) { + ds.getLastMsg().remove(new UUID(0L, 0L)); } - MultiChat.lastmsg.put(new UUID(0L, 0L), ((ProxiedPlayer)sender).getUniqueId()); + ds.getLastMsg().put(new UUID(0L, 0L), ((ProxiedPlayer)sender).getUniqueId()); } public void sendMessageConsoleSender(String message, ProxiedPlayer target) { + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + message = MultiChatUtil.reformatRGB(message); CommandSender sender = ProxyServer.getInstance().getConsole(); @@ -159,7 +167,7 @@ public void sendMessageConsoleSender(String message, ProxiedPlayer target) { for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { if ((onlineplayer.hasPermission("multichat.staff.spy")) - && (MultiChat.socialspy.contains(onlineplayer.getUniqueId())) + && (ds.getSocialSpy().contains(onlineplayer.getUniqueId())) && (onlineplayer.getUniqueId() != target.getUniqueId()) && (!(target.hasPermission("multichat.staff.spy.bypass")))) { @@ -172,17 +180,17 @@ public void sendMessageConsoleSender(String message, ProxiedPlayer target) { } - if (MultiChat.lastmsg.containsKey(new UUID(0L, 0L))) { - MultiChat.lastmsg.remove(new UUID(0L, 0L)); + if (ds.getLastMsg().containsKey(new UUID(0L, 0L))) { + ds.getLastMsg().remove(new UUID(0L, 0L)); } - MultiChat.lastmsg.put(new UUID(0L, 0L), target.getUniqueId()); + ds.getLastMsg().put(new UUID(0L, 0L), target.getUniqueId()); - if (MultiChat.lastmsg.containsKey(target.getUniqueId())) { - MultiChat.lastmsg.remove(target.getUniqueId()); + if (ds.getLastMsg().containsKey(target.getUniqueId())) { + ds.getLastMsg().remove(target.getUniqueId()); } - MultiChat.lastmsg.put(target.getUniqueId(), new UUID(0L, 0L)); + ds.getLastMsg().put(target.getUniqueId(), new UUID(0L, 0L)); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/StaffChatManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/StaffChatManager.java index 30bdf710..7f9dfc2e 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/StaffChatManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/StaffChatManager.java @@ -9,6 +9,8 @@ import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.connection.ProxiedPlayer; import xyz.olivermartin.multichat.bungee.events.PostStaffChatEvent; +import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; /** * Staff Chat Manager @@ -20,6 +22,8 @@ public class StaffChatManager { public void sendModMessage(String username, String displayname, String server, String message) { + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + message = MultiChatUtil.reformatRGB(message); ChatManipulation chatfix = new ChatManipulation(); @@ -40,13 +44,13 @@ public void sendModMessage(String username, String displayname, String server, S if (onlineplayer.hasPermission("multichat.staff.mod")) { - if (!MultiChat.modchatpreferences.containsKey(onlineplayer.getUniqueId())) { + if (!ds.getModChatPreferences().containsKey(onlineplayer.getUniqueId())) { TChatInfo chatinfo = new TChatInfo(); chatinfo.setChatColor(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("modchat.ccdefault").toCharArray()[0]); chatinfo.setNameColor(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("modchat.ncdefault").toCharArray()[0]); - MultiChat.modchatpreferences.put(onlineplayer.getUniqueId(), chatinfo); + ds.getModChatPreferences().put(onlineplayer.getUniqueId(), chatinfo); } @@ -75,6 +79,8 @@ public void sendModMessage(String username, String displayname, String server, S public void sendAdminMessage(String username, String displayname, String server, String message) { + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + message = MultiChatUtil.reformatRGB(message); String original = message; @@ -95,13 +101,13 @@ public void sendAdminMessage(String username, String displayname, String server, if (onlineplayer.hasPermission("multichat.staff.admin")) { - if (!MultiChat.adminchatpreferences.containsKey(onlineplayer.getUniqueId())) { + if (!ds.getAdminChatPreferences().containsKey(onlineplayer.getUniqueId())) { TChatInfo chatinfo = new TChatInfo(); chatinfo.setChatColor(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("adminchat.ccdefault").toCharArray()[0]); chatinfo.setNameColor(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("adminchat.ncdefault").toCharArray()[0]); - MultiChat.adminchatpreferences.put(onlineplayer.getUniqueId(), chatinfo); + ds.getAdminChatPreferences().put(onlineplayer.getUniqueId(), chatinfo); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ACCCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ACCCommand.java index fdae1eb9..d1e4fb18 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ACCCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ACCCommand.java @@ -7,7 +7,8 @@ import net.md_5.bungee.api.plugin.Command; import xyz.olivermartin.multichat.bungee.DebugManager; import xyz.olivermartin.multichat.bungee.MessageManager; -import xyz.olivermartin.multichat.bungee.MultiChat; +import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; /** * Admin-Chat colour command @@ -27,6 +28,8 @@ public ACCCommand() { public void execute(CommandSender sender, String[] args) { + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + // Check correct arguments if (args.length != 2) { @@ -62,8 +65,8 @@ public void execute(CommandSender sender, String[] args) { chatinfo.setChatColor(args[0].charAt(0)); chatinfo.setNameColor(args[1].charAt(0)); - MultiChat.adminchatpreferences.remove(player.getUniqueId()); - MultiChat.adminchatpreferences.put(player.getUniqueId(), chatinfo); + ds.getAdminChatPreferences().remove(player.getUniqueId()); + ds.getAdminChatPreferences().put(player.getUniqueId(), chatinfo); DebugManager.log("[ACCCommand] Preferences updated"); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GCCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GCCommand.java index a221d090..cda81c0b 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GCCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GCCommand.java @@ -18,6 +18,8 @@ import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.bungee.MultiChat; import xyz.olivermartin.multichat.bungee.MultiChatUtil; +import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; /** * Group Chat Messaging Command @@ -36,6 +38,8 @@ public GCCommand() { public void execute(CommandSender sender, String[] args) { + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + if (args.length < 1) { if ((sender instanceof ProxiedPlayer)) { @@ -58,13 +62,13 @@ public void execute(CommandSender sender, String[] args) { ProxiedPlayer player = (ProxiedPlayer)sender; - if (MultiChat.viewedchats.get(player.getUniqueId()) != null) { + if (ds.getViewedChats().get(player.getUniqueId()) != null) { - String groupName = (String)MultiChat.viewedchats.get(player.getUniqueId()); + String groupName = (String)ds.getViewedChats().get(player.getUniqueId()); - if (MultiChat.groupchats.containsKey(groupName)) { + if (ds.getGroupChats().containsKey(groupName)) { - TGroupChatInfo groupInfo = (TGroupChatInfo) MultiChat.groupchats.get(groupName); + TGroupChatInfo groupInfo = (TGroupChatInfo) ds.getGroupChats().get(groupName); String message = MultiChatUtil.getMessageFromArgs(args); @@ -93,6 +97,8 @@ public void execute(CommandSender sender, String[] args) { public static void sendMessage(String message, String playerName, TGroupChatInfo groupInfo) { + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + ChatManipulation chatfix = new ChatManipulation(); message = MultiChatUtil.reformatRGB(message); @@ -124,7 +130,7 @@ public static void sendMessage(String message, String playerName, TGroupChatInfo for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { - if (((groupInfo.existsViewer(onlineplayer.getUniqueId())) && (onlineplayer.hasPermission("multichat.group"))) || ((MultiChat.allspy.contains(onlineplayer.getUniqueId())) && (onlineplayer.hasPermission("multichat.staff.spy")))) { + if (((groupInfo.existsViewer(onlineplayer.getUniqueId())) && (onlineplayer.hasPermission("multichat.group"))) || ((ds.getAllSpy().contains(onlineplayer.getUniqueId())) && (onlineplayer.hasPermission("multichat.staff.spy")))) { if (potentialPlayer != null) { if (!ChatControl.ignores(potentialPlayer.getUniqueId(), onlineplayer.getUniqueId(), "group_chats")) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GroupCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GroupCommand.java index 839ed41a..d200edab 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GroupCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GroupCommand.java @@ -15,8 +15,9 @@ import net.md_5.bungee.api.plugin.TabExecutor; import xyz.olivermartin.multichat.bungee.GroupManager; import xyz.olivermartin.multichat.bungee.MessageManager; -import xyz.olivermartin.multichat.bungee.MultiChat; import xyz.olivermartin.multichat.bungee.UUIDNameManager; +import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; /** * The Group Command @@ -35,6 +36,8 @@ public GroupCommand() { public void execute(CommandSender sender, String[] args) { + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + if ((args.length < 1) || ((args.length == 1) && (args[0].toLowerCase().equals("help")))) { GroupManager groupman = new GroupManager(); @@ -49,17 +52,17 @@ public void execute(CommandSender sender, String[] args) { if ((sender instanceof ProxiedPlayer)) { - if (MultiChat.groupchats.containsKey(args[0].toLowerCase())) { + if (ds.getGroupChats().containsKey(args[0].toLowerCase())) { - TGroupChatInfo groupInfo = (TGroupChatInfo) MultiChat.groupchats.get(args[0].toLowerCase()); + TGroupChatInfo groupInfo = (TGroupChatInfo) ds.getGroupChats().get(args[0].toLowerCase()); ProxiedPlayer player = (ProxiedPlayer) sender; if (groupInfo.existsMember(player.getUniqueId())) { - String viewedchat = (String)MultiChat.viewedchats.get(player.getUniqueId()); + String viewedchat = (String)ds.getViewedChats().get(player.getUniqueId()); viewedchat = args[0].toLowerCase(); - MultiChat.viewedchats.remove(player.getUniqueId()); - MultiChat.viewedchats.put(player.getUniqueId(), viewedchat); + ds.getViewedChats().remove(player.getUniqueId()); + ds.getViewedChats().put(player.getUniqueId(), viewedchat); MessageManager.sendSpecialMessage(sender, "command_group_selected", args[0].toUpperCase()); @@ -92,12 +95,12 @@ public void execute(CommandSender sender, String[] args) { if ((args[0].toLowerCase().equals("list")) || (args[0].toLowerCase().equals("members"))) { - if (MultiChat.groupchats.containsKey(args[1].toLowerCase())) { + if (ds.getGroupChats().containsKey(args[1].toLowerCase())) { TGroupChatInfo groupChatInfo = new TGroupChatInfo(); ProxiedPlayer player = (ProxiedPlayer) sender; - groupChatInfo = (TGroupChatInfo)MultiChat.groupchats.get(args[1].toLowerCase()); + groupChatInfo = (TGroupChatInfo)ds.getGroupChats().get(args[1].toLowerCase()); if ((groupChatInfo.existsMember(player.getUniqueId())) || (sender.hasPermission("multichat.staff.spy"))) { @@ -134,16 +137,16 @@ public void execute(CommandSender sender, String[] args) { if (player.hasPermission("multichat.staff.spy")) { - if (MultiChat.allspy.contains(player.getUniqueId())) { + if (ds.getAllSpy().contains(player.getUniqueId())) { - MultiChat.allspy.remove(player.getUniqueId()); + ds.getAllSpy().remove(player.getUniqueId()); MessageManager.sendMessage(sender, "command_group_spy_all_disabled_1"); MessageManager.sendMessage(sender, "command_group_spy_all_disabled_2"); MessageManager.sendMessage(sender, "command_group_spy_all_disabled_3"); } else { - MultiChat.allspy.add(player.getUniqueId()); + ds.getAllSpy().add(player.getUniqueId()); MessageManager.sendMessage(sender, "command_group_spy_all_enabled"); } @@ -153,24 +156,24 @@ public void execute(CommandSender sender, String[] args) { } else if (player.hasPermission("multichat.staff.spy")) { - if (MultiChat.groupchats.containsKey(args[1].toLowerCase())) { + if (ds.getGroupChats().containsKey(args[1].toLowerCase())) { - TGroupChatInfo groupChatInfo = (TGroupChatInfo)MultiChat.groupchats.get(args[1].toLowerCase()); + TGroupChatInfo groupChatInfo = (TGroupChatInfo)ds.getGroupChats().get(args[1].toLowerCase()); if (!groupChatInfo.existsMember(player.getUniqueId())) { if (groupChatInfo.existsViewer(player.getUniqueId())) { groupChatInfo.delViewer(player.getUniqueId()); - MultiChat.groupchats.remove(groupChatInfo.getName().toLowerCase()); - MultiChat.groupchats.put(groupChatInfo.getName().toLowerCase(), groupChatInfo); + ds.getGroupChats().remove(groupChatInfo.getName().toLowerCase()); + ds.getGroupChats().put(groupChatInfo.getName().toLowerCase(), groupChatInfo); MessageManager.sendSpecialMessage(sender, "command_group_spy_off", groupChatInfo.getName().toUpperCase()); } else { groupChatInfo.addViewer(player.getUniqueId()); - MultiChat.groupchats.remove(groupChatInfo.getName().toLowerCase()); - MultiChat.groupchats.put(groupChatInfo.getName().toLowerCase(), groupChatInfo); + ds.getGroupChats().remove(groupChatInfo.getName().toLowerCase()); + ds.getGroupChats().put(groupChatInfo.getName().toLowerCase(), groupChatInfo); MessageManager.sendSpecialMessage(sender, "command_group_spy_on", groupChatInfo.getName().toUpperCase()); } @@ -213,7 +216,7 @@ public void execute(CommandSender sender, String[] args) { if (args[1].length() <= 20) { - if (!MultiChat.groupchats.containsKey(args[1].toLowerCase())) { + if (!ds.getGroupChats().containsKey(args[1].toLowerCase())) { GroupManager groupman = new GroupManager(); @@ -242,7 +245,7 @@ public void execute(CommandSender sender, String[] args) { if (args[0].toLowerCase().equals("join")) { - if (MultiChat.groupchats.containsKey(args[1].toLowerCase())) { + if (ds.getGroupChats().containsKey(args[1].toLowerCase())) { GroupManager groupman = new GroupManager(); ProxiedPlayer player = (ProxiedPlayer)sender; @@ -264,7 +267,7 @@ public void execute(CommandSender sender, String[] args) { if ((args[0].toLowerCase().equals("quit")) || (args[0].toLowerCase().equals("leave"))) { - if (MultiChat.groupchats.containsKey(args[1].toLowerCase())) { + if (ds.getGroupChats().containsKey(args[1].toLowerCase())) { GroupManager groupman = new GroupManager(); @@ -279,9 +282,9 @@ public void execute(CommandSender sender, String[] args) { if (args[0].toLowerCase().equals("formal")) { - if (MultiChat.groupchats.containsKey(args[1].toLowerCase())) { + if (ds.getGroupChats().containsKey(args[1].toLowerCase())) { - TGroupChatInfo groupChatInfo = (TGroupChatInfo)MultiChat.groupchats.get(args[1].toLowerCase()); + TGroupChatInfo groupChatInfo = (TGroupChatInfo)ds.getGroupChats().get(args[1].toLowerCase()); if (!groupChatInfo.getFormal()) { @@ -290,8 +293,8 @@ public void execute(CommandSender sender, String[] args) { if (groupChatInfo.getAdmins().contains(player.getUniqueId())) { groupChatInfo.setFormal(true); - MultiChat.groupchats.remove(groupChatInfo.getName()); - MultiChat.groupchats.put(groupChatInfo.getName(), groupChatInfo); + ds.getGroupChats().remove(groupChatInfo.getName()); + ds.getGroupChats().put(groupChatInfo.getName(), groupChatInfo); GCCommand.sendMessage(sender.getName() + MessageManager.getMessage("groups_info_formal"), "&lINFO", groupChatInfo); } else { @@ -311,20 +314,20 @@ public void execute(CommandSender sender, String[] args) { if (args[0].toLowerCase().equals("delete")) { - if (MultiChat.groupchats.containsKey(args[1].toLowerCase())) { + if (ds.getGroupChats().containsKey(args[1].toLowerCase())) { - TGroupChatInfo groupChatInfo = (TGroupChatInfo) MultiChat.groupchats.get(args[1].toLowerCase()); + TGroupChatInfo groupChatInfo = (TGroupChatInfo) ds.getGroupChats().get(args[1].toLowerCase()); ProxiedPlayer player = (ProxiedPlayer) sender; if (groupChatInfo.getAdmins().contains(player.getUniqueId())) { for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { - if ((MultiChat.viewedchats.get(onlineplayer.getUniqueId()) != null) && - (((String)MultiChat.viewedchats.get(onlineplayer.getUniqueId())).toLowerCase().equals(groupChatInfo.getName().toLowerCase()))) { + if ((ds.getViewedChats().get(onlineplayer.getUniqueId()) != null) && + (((String)ds.getViewedChats().get(onlineplayer.getUniqueId())).toLowerCase().equals(groupChatInfo.getName().toLowerCase()))) { - MultiChat.viewedchats.remove(onlineplayer.getUniqueId()); - MultiChat.viewedchats.put(onlineplayer.getUniqueId(), null); + ds.getViewedChats().remove(onlineplayer.getUniqueId()); + ds.getViewedChats().put(onlineplayer.getUniqueId(), null); } } @@ -332,7 +335,7 @@ public void execute(CommandSender sender, String[] args) { GCCommand.sendMessage(sender.getName() + MessageManager.getMessage("groups_info_deleted"), "&lINFO", groupChatInfo); GCCommand.sendMessage(MessageManager.getMessage("groups_info_goodbye"), "&lINFO", groupChatInfo); - MultiChat.groupchats.remove(groupChatInfo.getName().toLowerCase()); + ds.getGroupChats().remove(groupChatInfo.getName().toLowerCase()); groupChatInfo = null; @@ -366,7 +369,7 @@ public void execute(CommandSender sender, String[] args) { if ((args[1].length() <= 20) && (args[2].length() <= 20)) { - if (!MultiChat.groupchats.containsKey(args[1].toLowerCase())) { + if (!ds.getGroupChats().containsKey(args[1].toLowerCase())) { GroupManager groupman = new GroupManager(); @@ -394,7 +397,7 @@ public void execute(CommandSender sender, String[] args) { } if (args[0].toLowerCase().equals("join")) { - if (MultiChat.groupchats.containsKey(args[1].toLowerCase())) { + if (ds.getGroupChats().containsKey(args[1].toLowerCase())) { GroupManager groupman = new GroupManager(); ProxiedPlayer player = (ProxiedPlayer)sender; @@ -418,12 +421,12 @@ public void execute(CommandSender sender, String[] args) { ProxiedPlayer player = (ProxiedPlayer) sender; - if (MultiChat.groupchats.containsKey(args[1].toLowerCase())) { + if (ds.getGroupChats().containsKey(args[1].toLowerCase())) { if (ProxyServer.getInstance().getPlayer(args[2].toLowerCase()) != null) { ProxiedPlayer newplayer = ProxyServer.getInstance().getPlayer(args[2].toLowerCase()); - TGroupChatInfo groupChatInfo = (TGroupChatInfo)MultiChat.groupchats.get(args[1].toLowerCase()); + TGroupChatInfo groupChatInfo = (TGroupChatInfo)ds.getGroupChats().get(args[1].toLowerCase()); if (!groupChatInfo.getFormal()) { @@ -434,8 +437,8 @@ public void execute(CommandSender sender, String[] args) { groupChatInfo.addAdmin(newplayer.getUniqueId()); groupChatInfo.delAdmin(player.getUniqueId()); - MultiChat.groupchats.remove(groupChatInfo.getName()); - MultiChat.groupchats.put(groupChatInfo.getName(), groupChatInfo); + ds.getGroupChats().remove(groupChatInfo.getName()); + ds.getGroupChats().put(groupChatInfo.getName(), groupChatInfo); GCCommand.sendMessage(sender.getName() + MessageManager.getMessage("groups_info_transfer") + newplayer.getName(), "&lINFO", groupChatInfo); @@ -465,13 +468,13 @@ public void execute(CommandSender sender, String[] args) { ProxiedPlayer player = (ProxiedPlayer)sender; - if (MultiChat.groupchats.containsKey(args[1].toLowerCase())) { + if (ds.getGroupChats().containsKey(args[1].toLowerCase())) { if (ProxyServer.getInstance().getPlayer(args[2].toLowerCase()) != null) { ProxiedPlayer newplayer = ProxyServer.getInstance().getPlayer(args[2].toLowerCase()); - TGroupChatInfo groupChatInfo = (TGroupChatInfo)MultiChat.groupchats.get(args[1].toLowerCase()); + TGroupChatInfo groupChatInfo = (TGroupChatInfo)ds.getGroupChats().get(args[1].toLowerCase()); if (groupChatInfo.getFormal() == true) { @@ -483,8 +486,8 @@ public void execute(CommandSender sender, String[] args) { groupChatInfo.addAdmin(newplayer.getUniqueId()); - MultiChat.groupchats.remove(groupChatInfo.getName()); - MultiChat.groupchats.put(groupChatInfo.getName(), groupChatInfo); + ds.getGroupChats().remove(groupChatInfo.getName()); + ds.getGroupChats().put(groupChatInfo.getName(), groupChatInfo); GCCommand.sendMessage(sender.getName() + MessageManager.getMessage("groups_info_promoted") + newplayer.getName(), "&lINFO", groupChatInfo); @@ -494,8 +497,8 @@ public void execute(CommandSender sender, String[] args) { groupChatInfo.delAdmin(player.getUniqueId()); - MultiChat.groupchats.remove(groupChatInfo.getName()); - MultiChat.groupchats.put(groupChatInfo.getName(), groupChatInfo); + ds.getGroupChats().remove(groupChatInfo.getName()); + ds.getGroupChats().put(groupChatInfo.getName(), groupChatInfo); GCCommand.sendMessage(sender.getName() + MessageManager.getMessage("groups_info_step_down"), "&lINFO", groupChatInfo); @@ -535,12 +538,12 @@ public void execute(CommandSender sender, String[] args) { ProxiedPlayer player = (ProxiedPlayer) sender; - if (MultiChat.groupchats.containsKey(args[1].toLowerCase())) { + if (ds.getGroupChats().containsKey(args[1].toLowerCase())) { if (ProxyServer.getInstance().getPlayer(args[2].toLowerCase()) != null) { ProxiedPlayer newPlayer = ProxyServer.getInstance().getPlayer(args[2].toLowerCase()); - TGroupChatInfo groupChatInfo = (TGroupChatInfo)MultiChat.groupchats.get(args[1].toLowerCase()); + TGroupChatInfo groupChatInfo = (TGroupChatInfo)ds.getGroupChats().get(args[1].toLowerCase()); if (groupChatInfo.getFormal() == true) { @@ -557,14 +560,14 @@ public void execute(CommandSender sender, String[] args) { groupChatInfo.delMember(newPlayer.getUniqueId()); groupChatInfo.delViewer(newPlayer.getUniqueId()); - MultiChat.viewedchats.remove(newPlayer.getUniqueId()); - MultiChat.viewedchats.put(newPlayer.getUniqueId(), null); + ds.getViewedChats().remove(newPlayer.getUniqueId()); + ds.getViewedChats().put(newPlayer.getUniqueId(), null); GCCommand.sendMessage(sender.getName() + MessageManager.getMessage("groups_info_kick") + newPlayer.getName(), "&lINFO", groupChatInfo); } - MultiChat.groupchats.remove(groupChatInfo.getName()); - MultiChat.groupchats.put(groupChatInfo.getName(), groupChatInfo); + ds.getGroupChats().remove(groupChatInfo.getName()); + ds.getGroupChats().put(groupChatInfo.getName(), groupChatInfo); GCCommand.sendMessage(sender.getName() + MessageManager.getMessage("groups_info_ban") + newPlayer.getName(), "&lINFO", groupChatInfo); @@ -575,8 +578,8 @@ public void execute(CommandSender sender, String[] args) { groupChatInfo.delBanned(newPlayer.getUniqueId()); - MultiChat.groupchats.remove(groupChatInfo.getName()); - MultiChat.groupchats.put(groupChatInfo.getName(), groupChatInfo); + ds.getGroupChats().remove(groupChatInfo.getName()); + ds.getGroupChats().put(groupChatInfo.getName(), groupChatInfo); GCCommand.sendMessage(sender.getName() + MessageManager.getMessage("groups_info_unban") + newPlayer.getName(), "&lINFO", groupChatInfo); @@ -612,12 +615,12 @@ public void execute(CommandSender sender, String[] args) { if ((args[0].toLowerCase().equals("color")) || (args[0].toLowerCase().equals("colour"))) { - if (MultiChat.groupchats.containsKey(args[1].toLowerCase())) { + if (ds.getGroupChats().containsKey(args[1].toLowerCase())) { TGroupChatInfo groupChatInfo = new TGroupChatInfo(); ProxiedPlayer player = (ProxiedPlayer) sender; - groupChatInfo = (TGroupChatInfo)MultiChat.groupchats.get(args[1].toLowerCase()); + groupChatInfo = (TGroupChatInfo)ds.getGroupChats().get(args[1].toLowerCase()); if (((groupChatInfo.existsMember(player.getUniqueId())) && (!groupChatInfo.getFormal())) || (groupChatInfo.existsAdmin(player.getUniqueId()))) { @@ -635,12 +638,12 @@ public void execute(CommandSender sender, String[] args) { || (args[3].equals("2")) || (args[3].equals("3")) || (args[3].equals("4")) || (args[3].equals("5")) || (args[3].equals("6")) || (args[3].equals("7")) || (args[3].equals("8")) || (args[3].equals("9"))) { - MultiChat.groupchats.remove(groupChatInfo.getName()); + ds.getGroupChats().remove(groupChatInfo.getName()); groupChatInfo.setChatColor(args[2].charAt(0)); groupChatInfo.setNameColor(args[3].charAt(0)); - MultiChat.groupchats.put(groupChatInfo.getName(), groupChatInfo); + ds.getGroupChats().put(groupChatInfo.getName(), groupChatInfo); GCCommand.sendMessage(MessageManager.getMessage("groups_info_colors") + sender.getName(), "&lINFO", groupChatInfo); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GroupListCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GroupListCommand.java index ab8afc08..a623ff63 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GroupListCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GroupListCommand.java @@ -3,7 +3,8 @@ import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.plugin.Command; import xyz.olivermartin.multichat.bungee.MessageManager; -import xyz.olivermartin.multichat.bungee.MultiChat; +import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; /** * Group List Command @@ -22,9 +23,11 @@ public GroupListCommand() { public void execute(CommandSender sender, String[] args) { + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + MessageManager.sendMessage(sender, "command_grouplist_list"); - for (String groupname : MultiChat.groupchats.keySet()) { + for (String groupname : ds.getGroupChats().keySet()) { MessageManager.sendSpecialMessage(sender, "command_grouplist_list_item", groupname); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MCCCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MCCCommand.java index 0535cef9..b2305446 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MCCCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MCCCommand.java @@ -6,7 +6,8 @@ import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.plugin.Command; import xyz.olivermartin.multichat.bungee.MessageManager; -import xyz.olivermartin.multichat.bungee.MultiChat; +import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; /** * Mod-Chat Colour Command @@ -25,6 +26,8 @@ public MCCCommand() { public void execute(CommandSender sender, String[] args) { + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + if (args.length != 2) { if ((sender instanceof ProxiedPlayer)) { @@ -51,12 +54,12 @@ public void execute(CommandSender sender, String[] args) { || (args[1].equals("2")) || (args[1].equals("3")) || (args[1].equals("4")) || (args[1].equals("5")) || (args[1].equals("6")) || (args[1].equals("7")) || (args[1].equals("8")) || (args[1].equals("9"))) { - MultiChat.modchatpreferences.remove(player.getUniqueId()); + ds.getModChatPreferences().remove(player.getUniqueId()); chatinfo.setChatColor(args[0].charAt(0)); chatinfo.setNameColor(args[1].charAt(0)); - MultiChat.modchatpreferences.put(player.getUniqueId(), chatinfo); + ds.getModChatPreferences().put(player.getUniqueId(), chatinfo); MessageManager.sendMessage(sender, "command_mcc_updated"); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ReplyCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ReplyCommand.java index 96f09581..20f2c6fd 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ReplyCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ReplyCommand.java @@ -10,9 +10,10 @@ import xyz.olivermartin.multichat.bungee.ChatControl; import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.MessageManager; -import xyz.olivermartin.multichat.bungee.MultiChat; import xyz.olivermartin.multichat.bungee.MultiChatUtil; import xyz.olivermartin.multichat.bungee.PrivateMessageManager; +import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; /** * Reply Command @@ -29,6 +30,8 @@ public ReplyCommand() { public void execute(CommandSender sender, String[] args) { + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + if (args.length < 1) { MessageManager.sendMessage(sender, "command_reply_usage"); @@ -57,11 +60,11 @@ public void execute(CommandSender sender, String[] args) { return; } - if (MultiChat.lastmsg.containsKey(((ProxiedPlayer)sender).getUniqueId())) { + if (ds.getLastMsg().containsKey(((ProxiedPlayer)sender).getUniqueId())) { - if (ProxyServer.getInstance().getPlayer((UUID)MultiChat.lastmsg.get(((ProxiedPlayer)sender).getUniqueId())) != null) { + if (ProxyServer.getInstance().getPlayer((UUID)ds.getLastMsg().get(((ProxiedPlayer)sender).getUniqueId())) != null) { - ProxiedPlayer target = ProxyServer.getInstance().getPlayer((UUID)MultiChat.lastmsg.get(((ProxiedPlayer)sender).getUniqueId())); + ProxiedPlayer target = ProxyServer.getInstance().getPlayer((UUID)ds.getLastMsg().get(((ProxiedPlayer)sender).getUniqueId())); if (!ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList("no_pm").contains(((ProxiedPlayer)sender).getServer().getInfo().getName())) { @@ -82,7 +85,7 @@ public void execute(CommandSender sender, String[] args) { MessageManager.sendMessage(sender, "command_msg_disabled_sender"); } - } else if ( MultiChat.lastmsg.get( ((ProxiedPlayer)sender ).getUniqueId()).equals(new UUID(0L, 0L)) ) { + } else if ( ds.getLastMsg().get( ((ProxiedPlayer)sender ).getUniqueId()).equals(new UUID(0L, 0L)) ) { // Console target stuff @@ -110,11 +113,11 @@ public void execute(CommandSender sender, String[] args) { String message = MultiChatUtil.getMessageFromArgs(args); - if (MultiChat.lastmsg.containsKey(new UUID(0L,0L))) { + if (ds.getLastMsg().containsKey(new UUID(0L,0L))) { - if (ProxyServer.getInstance().getPlayer((UUID)MultiChat.lastmsg.get((new UUID(0L,0L)))) != null) { + if (ProxyServer.getInstance().getPlayer((UUID)ds.getLastMsg().get((new UUID(0L,0L)))) != null) { - ProxiedPlayer target = ProxyServer.getInstance().getPlayer((UUID)MultiChat.lastmsg.get((new UUID(0L,0L)))); + ProxiedPlayer target = ProxyServer.getInstance().getPlayer((UUID)ds.getLastMsg().get((new UUID(0L,0L)))); if (!ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList("no_pm").contains(target.getServer().getInfo().getName())) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/SocialSpyCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/SocialSpyCommand.java index 0c8e4a55..c9228764 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/SocialSpyCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/SocialSpyCommand.java @@ -5,7 +5,8 @@ import net.md_5.bungee.api.plugin.Command; import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.MessageManager; -import xyz.olivermartin.multichat.bungee.MultiChat; +import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; /** * SocialSpy Command @@ -22,15 +23,17 @@ public SocialSpyCommand() { public void execute(CommandSender sender, String[] args) { + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + if ((sender instanceof ProxiedPlayer)) { if (args.length < 1) { - if (MultiChat.socialspy.contains(((ProxiedPlayer)sender).getUniqueId())) { - MultiChat.socialspy.remove(((ProxiedPlayer)sender).getUniqueId()); + if (ds.getSocialSpy().contains(((ProxiedPlayer)sender).getUniqueId())) { + ds.getSocialSpy().remove(((ProxiedPlayer)sender).getUniqueId()); MessageManager.sendMessage(sender, "command_socialspy_disabled"); } else { - MultiChat.socialspy.add(((ProxiedPlayer)sender).getUniqueId()); + ds.getSocialSpy().add(((ProxiedPlayer)sender).getUniqueId()); MessageManager.sendMessage(sender, "command_socialspy_enabled"); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyDataStore.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyDataStore.java index 4d957a4d..226a8fbd 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyDataStore.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyDataStore.java @@ -1,5 +1,14 @@ package xyz.olivermartin.multichat.proxy.common; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import com.olivermartin410.plugins.TChatInfo; +import com.olivermartin410.plugins.TGroupChatInfo; + /** * A proxy data store of settings and other things for MultiChatProxy * @@ -10,14 +19,121 @@ */ public class ProxyDataStore { - private boolean chatFrozen; + private boolean chatFrozen = false; + + private Map modChatPreferences = new HashMap(); + private Map adminChatPreferences = new HashMap(); + private Map groupChats = new HashMap(); + + private Map viewedChats = new HashMap(); + private Map lastMsg = new HashMap(); + private List allSpy = new ArrayList(); + private List socialSpy = new ArrayList(); public synchronized boolean isChatFrozen() { return this.chatFrozen; } + /** + * @return the modchatpreferences + */ + public Map getModChatPreferences() { + return modChatPreferences; + } + + /** + * @return the adminchatpreferences + */ + public Map getAdminChatPreferences() { + return adminChatPreferences; + } + + /** + * @return the groupchats + */ + public Map getGroupChats() { + return groupChats; + } + + /** + * @return the viewedchats + */ + public Map getViewedChats() { + return viewedChats; + } + + /** + * @return the lastmsg + */ + public Map getLastMsg() { + return lastMsg; + } + + /** + * @return the allspy + */ + public List getAllSpy() { + return allSpy; + } + + /** + * @return the socialspy + */ + public List getSocialSpy() { + return socialSpy; + } + public synchronized void setChatFrozen(boolean frozen) { this.chatFrozen = frozen; } + /** + * @param modChatPreferences the modchatpreferences to set + */ + public void setModChatPreferences(Map modChatPreferences) { + this.modChatPreferences = modChatPreferences; + } + + /** + * @param adminChatPreferences the adminchatpreferences to set + */ + public void setAdminChatPreferences(Map adminChatPreferences) { + this.adminChatPreferences = adminChatPreferences; + } + + /** + * @param groupChats the groupchats to set + */ + public void setGroupChats(Map groupChats) { + this.groupChats = groupChats; + } + + /** + * @param viewedChats the viewedchats to set + */ + public void setViewedChats(Map viewedChats) { + this.viewedChats = viewedChats; + } + + /** + * @param lastMsg the lastmsg to set + */ + public void setLastMsg(Map lastMsg) { + this.lastMsg = lastMsg; + } + + /** + * @param allSpy the allspy to set + */ + public void setAllSpy(List allSpy) { + this.allSpy = allSpy; + } + + /** + * @param socialSpy the socialspy to set + */ + public void setSocialSpy(List socialSpy) { + this.socialSpy = socialSpy; + } + } From 8ac177fdf3ec1fc59a8a827079977d50ca6d3f72 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Wed, 15 Jul 2020 21:34:56 +0100 Subject: [PATCH 003/188] Commented the proxy data store fields --- .../multichat/proxy/common/ProxyDataStore.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyDataStore.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyDataStore.java index 226a8fbd..4d4889ff 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyDataStore.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyDataStore.java @@ -19,15 +19,28 @@ */ public class ProxyDataStore { + // Is global chat frozen? private boolean chatFrozen = false; + // Mod chat colours private Map modChatPreferences = new HashMap(); + + // Admin chat colours private Map adminChatPreferences = new HashMap(); + + // Group chats private Map groupChats = new HashMap(); + // Which players are viewing which group chats private Map viewedChats = new HashMap(); + + // The last person a player has messaged private Map lastMsg = new HashMap(); + + // Who is spying on all groups? private List allSpy = new ArrayList(); + + // Who has social spy on? private List socialSpy = new ArrayList(); public synchronized boolean isChatFrozen() { From b12d0a3436f6681a18610d147cce7973751cbdc6 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Thu, 16 Jul 2020 17:14:46 +0100 Subject: [PATCH 004/188] Implemented a new CommChannels class for inter server communication --- .../common/communication/CommChannels.java | 209 ++++++++++++++++++ 1 file changed, 209 insertions(+) create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/common/communication/CommChannels.java diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/common/communication/CommChannels.java b/multichat/src/main/java/xyz/olivermartin/multichat/common/communication/CommChannels.java new file mode 100644 index 00000000..c1827aed --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/common/communication/CommChannels.java @@ -0,0 +1,209 @@ +package xyz.olivermartin.multichat.common.communication; + +public class CommChannels { + + /* + * The prefix used for multichat communication channels + */ + private static String prefix = "multichat:"; + + // Player meta communication (prefix, suffix, displayname etc.) + private static String playerMeta = "pmeta"; // NOT REGISTERED ANYWHERE + + // Chat messages sent by players + private static String playerChat = "pchat"; // NOT REGISTERED ANYWHERE + + // Chat messages sent by non-player objects (casts, announcements etc.) + private static String serverChat = "schat"; // NOT REGISTERED ANYWHERE + + // Data about specific players (colour permissions etc.) + private static String playerData = "pdata"; // NOT REGISTERED ANYWHERE + + // Data about the server as a whole (ignoremap, channel members, global chat servers, legacy servers etc.) + private static String serverData = "sdata"; // NOT REGISTERED ANYWHERE + + // Actions for the server console (mce/pxe) + private static String serverAction = "sact"; // NOT REGISTERED ANYWHERE + + // Actions for players (mce players, ppxe) + private static String playerAction = "pact"; // NOT REGISTERED ANYWHERE + + /** + * Gets the channel id used for: + * PLAYER META + * + *

Description: + *

+ * This channel communicates the following from PROXY -> LOCAL: + *

    + *
  • If the server should set the display name
  • + *
  • What the display name format is
  • + *
+ *

+ *

+ * This channel communicates the following from LOCAL -> PROXY: + *

    + *
  • Player prefix
  • + *
  • Player suffix
  • + *
  • Player world
  • + *
  • Player display name
  • + *
  • Player nickname
  • + *
+ *

+ *

+ * @return the channel id + */ + public static String getPlayerMeta() { + return prefix + playerMeta; + } + + /** + * Gets the channel id used for: + * PLAYER CHAT + * + *

Description: + *

+ * This channel communicates the following from PROXY -> LOCAL: + *

    + *
  • Direct chat messages through /local mymessagehere etc.
  • + *
+ *

+ *

+ * This channel communicates the following from LOCAL -> PROXY: + *

    + *
  • Player chat messages for distribution
  • + *
+ *

+ *

+ * @return the channel id + */ + public static String getPlayerChat() { + return prefix + playerChat; + } + + /** + * Gets the channel id used for: + * SERVER CHAT + * + *

Description: + *

+ * This channel communicates the following from PROXY -> LOCAL: + *

    + *
  • Cast messages
  • + *
+ *

+ *

+ * This channel communicates the following from LOCAL -> PROXY: + *

    + *
  • Nil.
  • + *
+ *

+ *

+ * @return the channel id + */ + public static String getServerChat() { + return prefix + serverChat; + } + + /** + * Gets the channel id used for: + * PLAYER DATA + * + *

Description: + *

+ * This channel communicates the following from PROXY -> LOCAL: + *

    + *
  • Player colour permissions
  • + *
  • Player currently selected channels
  • + *
+ *

+ *

+ * This channel communicates the following from LOCAL -> PROXY: + *

    + *
  • Nil.
  • + *
+ *

+ *

+ * @return the channel id + */ + public static String getPlayerData() { + return prefix + playerData; + } + + /** + * Gets the channel id used for: + * SERVER DATA + * + *

Description: + *

+ * This channel communicates the following from PROXY -> LOCAL: + *

    + *
  • Player ignore map
  • + *
  • Channel member lists
  • + *
  • Global chat format
  • + *
  • If this server is a 'global chat server'
  • + *
  • If this server is a legacy server
  • + *
+ *

+ *

+ * This channel communicates the following from LOCAL -> PROXY: + *

    + *
  • Nil.
  • + *
+ *

+ *

+ * @return the channel id + */ + public static String getServerData() { + return prefix + serverData; + } + + /** + * Gets the channel id used for: + * SERVER ACTIONS + * + *

Description: + *

+ * This channel communicates the following from PROXY -> LOCAL: + *

    + *
  • MCE commands
  • + *
+ *

+ *

+ * This channel communicates the following from LOCAL -> PROXY: + *

    + *
  • PXE commands
  • + *
+ *

+ *

+ * @return the channel id + */ + public static String getServerAction() { + return prefix + serverAction; + } + + /** + * Gets the channel id used for: + * PLAYER ACTIONS + * + *

Description: + *

+ * This channel communicates the following from PROXY -> LOCAL: + *

    + *
  • MCE player commands
  • + *
+ *

+ *

+ * This channel communicates the following from LOCAL -> PROXY: + *

    + *
  • PXE player commands
  • + *
+ *

+ *

+ * @return the channel id + */ + public static String getPlayerAction() { + return prefix + playerAction; + } + +} From a5f46476d15fef290af80dac084f85c44c6fee28 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Thu, 16 Jul 2020 17:46:01 +0100 Subject: [PATCH 005/188] Migrated player meta communication to new channel (local to proxy only) --- .../multichat/bungee/BungeeComm.java | 209 ------------------ .../multichat/bungee/MultiChat.java | 29 +-- .../multichat/bungee/PlayerMeta.java | 6 +- .../common/communication/CommChannels.java | 2 +- .../LocalBungeeCommunicationManager.java | 34 +-- .../LocalProxyCommunicationManager.java | 22 +- .../listeners/LocalWorldChangeListener.java | 2 +- .../spigot/MultiChatLocalSpigotPlugin.java | 16 +- .../sponge/MultiChatLocalSpongePlugin.java | 9 +- .../ProxyPlayerMetaListener.java | 108 +++++++++ 10 files changed, 157 insertions(+), 280 deletions(-) create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyPlayerMetaListener.java 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 7800dfc4..4e957082 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/BungeeComm.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/BungeeComm.java @@ -6,7 +6,6 @@ import java.io.DataOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; -import java.util.Optional; import java.util.UUID; import java.util.regex.PatternSyntaxException; @@ -245,214 +244,6 @@ public static void onPluginMessage(PluginMessageEvent ev) { } - if (ev.getTag().equals("multichat:nick")) { - - ev.setCancelled(true); - - ByteArrayInputStream stream = new ByteArrayInputStream(ev.getData()); - DataInputStream in = new DataInputStream(stream); - - try { - - UUID uuid = UUID.fromString(in.readUTF()); - String nick = in.readUTF(); - ProxiedPlayer player = ProxyServer.getInstance().getPlayer(uuid); - - if (player == null) return; - - synchronized (player) { - - /* - * Update the nickname stored somewhere and call for an update of the player - * display name in that location. (Pending the "true" value of fetch display names) - * and a new config option to decide if the display name should be set. - */ - - Optional opm = PlayerMetaManager.getInstance().getPlayer(uuid); - - if (opm.isPresent()) { - - opm.get().nick = nick; - PlayerMetaManager.getInstance().updateDisplayName(uuid); - - } - - } - - } catch (IOException e) { - e.printStackTrace(); - } - - } - - if (ev.getTag().equals("multichat:prefix")) { - - ev.setCancelled(true); - - ByteArrayInputStream stream = new ByteArrayInputStream(ev.getData()); - DataInputStream in = new DataInputStream(stream); - - try { - - UUID uuid = UUID.fromString(in.readUTF()); - String prefix = in.readUTF(); - ProxiedPlayer player = ProxyServer.getInstance().getPlayer(uuid); - - if (player == null) return; - - synchronized (player) { - - /* - * Update the prefix stored somewhere and call for an update of the player - * display name in that location. (Pending the "true" value of fetch display names) - * and a new config option to decide if the display name should be set. - */ - - Optional opm = PlayerMetaManager.getInstance().getPlayer(uuid); - - if (opm.isPresent()) { - - opm.get().prefix = prefix; - PlayerMetaManager.getInstance().updateDisplayName(uuid); - - } - - } - - } catch (IOException e) { - e.printStackTrace(); - } - - } - - if (ev.getTag().equals("multichat:suffix")) { - - ev.setCancelled(true); - - ByteArrayInputStream stream = new ByteArrayInputStream(ev.getData()); - DataInputStream in = new DataInputStream(stream); - - try { - - UUID uuid = UUID.fromString(in.readUTF()); - String suffix = in.readUTF(); - ProxiedPlayer player = ProxyServer.getInstance().getPlayer(uuid); - - if (player == null) return; - - synchronized (player) { - - /* - * Update the suffix stored somewhere and call for an update of the player - * display name in that location. (Pending the "true" value of fetch display names) - * and a new config option to decide if the display name should be set. - */ - - Optional opm = PlayerMetaManager.getInstance().getPlayer(uuid); - - if (opm.isPresent()) { - - opm.get().suffix = suffix; - PlayerMetaManager.getInstance().updateDisplayName(uuid); - - } - - } - - } catch (IOException e) { - e.printStackTrace(); - } - - } - - if (ev.getTag().equals("multichat:dn")) { - - ev.setCancelled(true); - - DebugManager.log("[multichat:dn] Got an incoming channel message!"); - - ByteArrayInputStream stream = new ByteArrayInputStream(ev.getData()); - DataInputStream in = new DataInputStream(stream); - - try { - - UUID uuid = UUID.fromString(in.readUTF()); - String spigotDisplayName = in.readUTF(); - ProxiedPlayer player = ProxyServer.getInstance().getPlayer(uuid); - - if (player == null) return; - - synchronized (player) { - - DebugManager.log("[multichat:dn] Player exists!"); - - Optional opm = PlayerMetaManager.getInstance().getPlayer(uuid); - - if (opm.isPresent()) { - - DebugManager.log("[multichat:dn] Player meta exists!"); - - DebugManager.log("[multichat:dn] The displayname received is: " + spigotDisplayName); - - opm.get().spigotDisplayName = spigotDisplayName; - PlayerMetaManager.getInstance().updateDisplayName(uuid); - - } - - } - - } catch (IOException e) { - e.printStackTrace(); - } - - } - - if (ev.getTag().equals("multichat:world")) { - - ev.setCancelled(true); - - ByteArrayInputStream stream = new ByteArrayInputStream(ev.getData()); - DataInputStream in = new DataInputStream(stream); - - DebugManager.log("[multichat:world] Got an incoming channel message!"); - - try { - - UUID uuid = UUID.fromString(in.readUTF()); - String world = in.readUTF(); - ProxiedPlayer player = ProxyServer.getInstance().getPlayer(uuid); - - if (player == null) return; - - DebugManager.log("[multichat:world] Player is online!"); - - synchronized (player) { - - /* - * Update the world stored somewhere - */ - - Optional opm = PlayerMetaManager.getInstance().getPlayer(uuid); - - if (opm.isPresent()) { - - DebugManager.log("[multichat:world] Got their meta data correctly"); - - opm.get().world = world; - - DebugManager.log("[multichat:world] Set their world to: " + world); - - } - - } - - } catch (IOException e) { - e.printStackTrace(); - } - - } - - if (ev.getTag().equals("multichat:pxe")) { ev.setCancelled(true); 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 ecb04aad..db706249 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java @@ -26,8 +26,10 @@ import net.md_5.bungee.api.plugin.Plugin; import net.md_5.bungee.config.Configuration; import net.md_5.bungee.event.EventHandler; +import xyz.olivermartin.multichat.common.communication.CommChannels; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; +import xyz.olivermartin.multichat.proxy.common.listeners.communication.ProxyPlayerMetaListener; /** @@ -302,20 +304,19 @@ public void onEnable() { getProxy().getPluginManager().registerListener(this, this); // Register communication channels and appropriate listeners - getProxy().registerChannel("multichat:comm"); - getProxy().registerChannel("multichat:prefix"); - getProxy().registerChannel("multichat:suffix"); - getProxy().registerChannel("multichat:dn"); - getProxy().registerChannel("multichat:nick"); - getProxy().registerChannel("multichat:world"); - getProxy().registerChannel("multichat:act"); - getProxy().registerChannel("multichat:pact"); - getProxy().registerChannel("multichat:chat"); - getProxy().registerChannel("multichat:ch"); - getProxy().registerChannel("multichat:ignore"); - getProxy().registerChannel("multichat:pxe"); - getProxy().registerChannel("multichat:ppxe"); - getProxy().getPluginManager().registerListener(this, new BungeeComm()); + getProxy().registerChannel("multichat:comm"); // TODO LEGACY + getProxy().registerChannel("multichat:act"); // TODO LEGACY + getProxy().registerChannel("multichat:pact"); // TODO LEGACY + getProxy().registerChannel("multichat:chat"); // TODO LEGACY + getProxy().registerChannel("multichat:ch"); // TODO LEGACY + getProxy().registerChannel("multichat:ignore"); // TODO LEGACY + getProxy().registerChannel("multichat:pxe"); // TODO LEGACY + getProxy().registerChannel("multichat:ppxe"); // TODO LEGACY + getProxy().getPluginManager().registerListener(this, new BungeeComm()); // TODO LEGACY + + // New communication channels + getProxy().registerChannel(CommChannels.getPlayerMeta()); + getProxy().getPluginManager().registerListener(this, new ProxyPlayerMetaListener()); // Register commands registerCommands(configYML, chatcontrolYML); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PlayerMeta.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PlayerMeta.java index 5b013937..b1b5c636 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PlayerMeta.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PlayerMeta.java @@ -7,7 +7,7 @@ public class PlayerMeta { public UUID uuid; public String name; public String nick; - public String spigotDisplayName; + public String localDisplayName; public String prefix; public String suffix; public String world; @@ -16,14 +16,14 @@ public PlayerMeta(UUID uuid, String name) { this.uuid = uuid; this.name = name; nick = name; - spigotDisplayName = nick; + localDisplayName = nick; prefix = ""; suffix = ""; world = ""; } public String getSpigotDisplayname() { - return this.spigotDisplayName; + return this.localDisplayName; } /*public String getDisplayName(String format) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/common/communication/CommChannels.java b/multichat/src/main/java/xyz/olivermartin/multichat/common/communication/CommChannels.java index c1827aed..fa8160d7 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/common/communication/CommChannels.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/common/communication/CommChannels.java @@ -8,7 +8,7 @@ public class CommChannels { private static String prefix = "multichat:"; // Player meta communication (prefix, suffix, displayname etc.) - private static String playerMeta = "pmeta"; // NOT REGISTERED ANYWHERE + private static String playerMeta = "pmeta"; // Bungee listener is implemented & registered // Chat messages sent by players private static String playerChat = "pchat"; // NOT REGISTERED ANYWHERE diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalBungeeCommunicationManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalBungeeCommunicationManager.java index 567698a8..6b63b313 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalBungeeCommunicationManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalBungeeCommunicationManager.java @@ -2,6 +2,7 @@ import java.util.UUID; +import xyz.olivermartin.multichat.common.communication.CommChannels; import xyz.olivermartin.multichat.proxy.common.MultiChatProxyPlatform; /** @@ -12,11 +13,6 @@ */ public abstract class LocalBungeeCommunicationManager extends LocalProxyCommunicationManager { - protected final String nicknameChannel = "multichat:nick"; - protected final String worldChannel = "multichat:world"; - protected final String prefixChannel = "multichat:prefix"; - protected final String suffixChannel = "multichat:suffix"; - protected final String displayNameChannel = "multichat:dn"; protected final String pxeChannel = "multichat:pxe"; protected final String ppxeChannel = "multichat:ppxe"; protected final String chatChannel = "multichat:chat"; @@ -26,7 +22,7 @@ protected LocalBungeeCommunicationManager(MultiChatLocalPlatform localPlatform) } protected abstract boolean sendUUIDAndString(String channel, UUID uuid, String value); - + protected abstract boolean sendUUIDAndStringAndString(String channel, UUID uuid, String value1, String value2); protected abstract boolean sendStringAndString(String channel, String string1, String string2); @@ -34,28 +30,8 @@ protected LocalBungeeCommunicationManager(MultiChatLocalPlatform localPlatform) protected abstract boolean sendString(String channel, String string); @Override - protected void sendNicknameUpdate(UUID uuid, String nickname) { - sendUUIDAndString(nicknameChannel, uuid, nickname); - } - - @Override - public void sendWorldUpdate(UUID uuid, String world) { - sendUUIDAndString(worldChannel, uuid, world); - } - - @Override - protected void sendPrefixUpdate(UUID uuid, String prefix) { - sendUUIDAndString(prefixChannel, uuid, prefix); - } - - @Override - protected void sendSuffixUpdate(UUID uuid, String suffix) { - sendUUIDAndString(suffixChannel, uuid, suffix); - } - - @Override - protected void sendDisplayNameUpdate(UUID uuid, String displayName) { - sendUUIDAndString(displayNameChannel, uuid, displayName); + public void sendMetaUpdate(UUID uuid, String metaId, String metaValue) { + sendUUIDAndStringAndString(CommChannels.getPlayerMeta(), uuid, metaId, metaValue); } @Override @@ -67,7 +43,7 @@ public void sendProxyExecuteMessage(String command) { public void sendProxyExecutePlayerMessage(String command, String player) { sendStringAndString(ppxeChannel, command, player); } - + @Override public void sendChatMessage(UUID uuid, String message, String format) { sendUUIDAndStringAndString(chatChannel, uuid, message, format); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalProxyCommunicationManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalProxyCommunicationManager.java index 105d5877..ef6a3808 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalProxyCommunicationManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalProxyCommunicationManager.java @@ -30,28 +30,20 @@ public MultiChatProxyPlatform getProxyPlatform() { public void updatePlayerMeta(UUID uuid) { - sendNicknameUpdate(uuid, MultiChatLocal.getInstance().getMetaManager().getNick(uuid)); - sendWorldUpdate(uuid, MultiChatLocal.getInstance().getMetaManager().getWorld(uuid)); - sendPrefixUpdate(uuid, MultiChatLocal.getInstance().getMetaManager().getPrefix(uuid)); - sendSuffixUpdate(uuid, MultiChatLocal.getInstance().getMetaManager().getSuffix(uuid)); - sendDisplayNameUpdate(uuid, MultiChatLocal.getInstance().getMetaManager().getDisplayName(uuid)); + sendMetaUpdate(uuid, "nick", MultiChatLocal.getInstance().getMetaManager().getNick(uuid)); + sendMetaUpdate(uuid, "world", MultiChatLocal.getInstance().getMetaManager().getWorld(uuid)); + sendMetaUpdate(uuid, "prefix", MultiChatLocal.getInstance().getMetaManager().getPrefix(uuid)); + sendMetaUpdate(uuid, "suffix", MultiChatLocal.getInstance().getMetaManager().getSuffix(uuid)); + sendMetaUpdate(uuid, "dn", MultiChatLocal.getInstance().getMetaManager().getDisplayName(uuid)); } - protected abstract void sendNicknameUpdate(UUID uuid, String nickname); - - public abstract void sendWorldUpdate(UUID uuid, String world); - - protected abstract void sendPrefixUpdate(UUID uuid, String prefix); - - protected abstract void sendSuffixUpdate(UUID uuid, String suffix); - - protected abstract void sendDisplayNameUpdate(UUID uuid, String displayName); + public abstract void sendMetaUpdate(UUID uuid, String metaId, String metaValue); public abstract void sendProxyExecuteMessage(String command); public abstract void sendProxyExecutePlayerMessage(String command, String player); - + public abstract void sendChatMessage(UUID uuid, String message, String format); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/LocalWorldChangeListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/LocalWorldChangeListener.java index ce791961..c9a0510d 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/LocalWorldChangeListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/LocalWorldChangeListener.java @@ -6,7 +6,7 @@ public abstract class LocalWorldChangeListener { protected void updatePlayerWorld(MultiChatLocalPlayer player, String world) { - MultiChatLocal.getInstance().getProxyCommunicationManager().sendWorldUpdate(player.getUniqueId(), world); + MultiChatLocal.getInstance().getProxyCommunicationManager().sendMetaUpdate(player.getUniqueId(), "world", world); } } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/MultiChatLocalSpigotPlugin.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/MultiChatLocalSpigotPlugin.java index 79899fa7..08811544 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/MultiChatLocalSpigotPlugin.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/MultiChatLocalSpigotPlugin.java @@ -7,6 +7,7 @@ import org.bukkit.plugin.java.JavaPlugin; import net.milkbowl.vault.chat.Chat; +import xyz.olivermartin.multichat.common.communication.CommChannels; import xyz.olivermartin.multichat.common.database.DatabaseManager; import xyz.olivermartin.multichat.local.common.LocalChatManager; import xyz.olivermartin.multichat.local.common.LocalConsoleLogger; @@ -169,12 +170,12 @@ private void registerCommunicationChannels() { getServer().getMessenger().registerOutgoingPluginChannel(this, "multichat:comm"); getServer().getMessenger().registerOutgoingPluginChannel(this, "multichat:chat"); - getServer().getMessenger().registerOutgoingPluginChannel(this, "multichat:prefix"); - getServer().getMessenger().registerOutgoingPluginChannel(this, "multichat:suffix"); - getServer().getMessenger().registerOutgoingPluginChannel(this, "multichat:dn"); - getServer().getMessenger().registerOutgoingPluginChannel(this, "multichat:world"); - getServer().getMessenger().registerOutgoingPluginChannel(this, "multichat:nick"); - getServer().getMessenger().registerOutgoingPluginChannel(this, "multichat:pxe"); + //getServer().getMessenger().registerOutgoingPluginChannel(this, "multichat:prefix"); // TODO LEGACY + //getServer().getMessenger().registerOutgoingPluginChannel(this, "multichat:suffix"); // TODO LEGACY + //getServer().getMessenger().registerOutgoingPluginChannel(this, "multichat:dn"); // TODO LEGACY + //getServer().getMessenger().registerOutgoingPluginChannel(this, "multichat:world"); // TODO LEGACY + //getServer().getMessenger().registerOutgoingPluginChannel(this, "multichat:nick"); // TODO LEGACY + getServer().getMessenger().registerOutgoingPluginChannel(this, "multichat:pxe"); getServer().getMessenger().registerOutgoingPluginChannel(this, "multichat:ppxe"); getServer().getMessenger().registerIncomingPluginChannel(this, "multichat:comm", new LocalSpigotPlayerMetaListener()); @@ -183,6 +184,9 @@ private void registerCommunicationChannels() { getServer().getMessenger().registerIncomingPluginChannel(this, "multichat:pact", new LocalSpigotPlayerActionListener()); getServer().getMessenger().registerIncomingPluginChannel(this, "multichat:ch", new LocalSpigotPlayerChannelListener()); getServer().getMessenger().registerIncomingPluginChannel(this, "multichat:ignore", new LocalSpigotIgnoreListener()); + + // New channels + getServer().getMessenger().registerOutgoingPluginChannel(this, CommChannels.getPlayerMeta()); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/MultiChatLocalSpongePlugin.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/MultiChatLocalSpongePlugin.java index 7295c175..83f01757 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/MultiChatLocalSpongePlugin.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/MultiChatLocalSpongePlugin.java @@ -22,6 +22,7 @@ import com.google.inject.Inject; import me.rojo8399.placeholderapi.PlaceholderService; +import xyz.olivermartin.multichat.common.communication.CommChannels; import xyz.olivermartin.multichat.common.database.DatabaseManager; import xyz.olivermartin.multichat.local.common.LocalChatManager; import xyz.olivermartin.multichat.local.common.LocalConsoleLogger; @@ -240,7 +241,7 @@ private void registerCommunicationChannels(SpongeBungeeCommunicationManager comm ChannelBinding.RawDataChannel playerActionChannel = channelRegistrar.createRawChannel(this, "multichat:pact"); commManager.registerChannel("multichat:pact", playerActionChannel); - ChannelBinding.RawDataChannel prefixChannel = channelRegistrar.createRawChannel(this, "multichat:prefix"); + /*ChannelBinding.RawDataChannel prefixChannel = channelRegistrar.createRawChannel(this, "multichat:prefix"); commManager.registerChannel("multichat:prefix", prefixChannel); ChannelBinding.RawDataChannel suffixChannel = channelRegistrar.createRawChannel(this, "multichat:suffix"); commManager.registerChannel("multichat:suffix", suffixChannel); @@ -249,7 +250,7 @@ private void registerCommunicationChannels(SpongeBungeeCommunicationManager comm ChannelBinding.RawDataChannel worldChannel = channelRegistrar.createRawChannel(this, "multichat:world"); commManager.registerChannel("multichat:world", worldChannel); ChannelBinding.RawDataChannel nickChannel = channelRegistrar.createRawChannel(this, "multichat:nick"); - commManager.registerChannel("multichat:nick", nickChannel); + commManager.registerChannel("multichat:nick", nickChannel);*/ // TODO LEGACY ChannelBinding.RawDataChannel channelChannel = channelRegistrar.createRawChannel(this, "multichat:ch"); commManager.registerChannel("multichat:ch", channelChannel); ChannelBinding.RawDataChannel ignoreChannel = channelRegistrar.createRawChannel(this, "multichat:ignore"); @@ -268,6 +269,10 @@ private void registerCommunicationChannels(SpongeBungeeCommunicationManager comm actionChannel.addListener(Platform.Type.SERVER, new LocalSpongeActionListener()); playerActionChannel.addListener(Platform.Type.SERVER, new LocalSpongePlayerActionListener()); + // New channels + ChannelBinding.RawDataChannel playerMetaChannel = channelRegistrar.createRawChannel(this, CommChannels.getPlayerMeta()); + commManager.registerChannel(CommChannels.getPlayerMeta(), playerMetaChannel); + } @Listener diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyPlayerMetaListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyPlayerMetaListener.java new file mode 100644 index 00000000..d6b5fecb --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyPlayerMetaListener.java @@ -0,0 +1,108 @@ +package xyz.olivermartin.multichat.proxy.common.listeners.communication; + +import java.io.ByteArrayInputStream; +import java.io.DataInputStream; +import java.io.IOException; +import java.util.Optional; +import java.util.UUID; + +import net.md_5.bungee.api.ProxyServer; +import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.md_5.bungee.api.event.PluginMessageEvent; +import net.md_5.bungee.api.plugin.Listener; +import net.md_5.bungee.event.EventHandler; +import xyz.olivermartin.multichat.bungee.PlayerMeta; +import xyz.olivermartin.multichat.bungee.PlayerMetaManager; +import xyz.olivermartin.multichat.common.communication.CommChannels; + +/** + * Listener for communication over the Player Meta communication channel + * + * @author Oliver Martin (Revilo410) + * + */ +public class ProxyPlayerMetaListener implements Listener { + + @EventHandler + public static void onPluginMessage(PluginMessageEvent event) { + + // Ignore if sent to a different channel + if (!event.getTag().equals(CommChannels.getPlayerMeta())) return; + + event.setCancelled(true); + + /* + * Possible meta IDs: + * - prefix + * - suffix + * - dn + * - world + * - nick + */ + + ByteArrayInputStream stream = new ByteArrayInputStream(event.getData()); + DataInputStream in = new DataInputStream(stream); + + UUID uuid; + String metaId; + String metaValue; + + try { + uuid = UUID.fromString(in.readUTF()); + metaId = in.readUTF(); + metaValue = in.readUTF(); + } catch (IOException e) { + e.printStackTrace(); + return; + } + + ProxiedPlayer player = ProxyServer.getInstance().getPlayer(uuid); + + // If the player UUID doesn't exist, then ignore it + if (player == null) return; + + synchronized (player) { + + Optional opm = PlayerMetaManager.getInstance().getPlayer(uuid); + + if (opm.isPresent()) { + + switch (metaId) { + + case "prefix": + opm.get().prefix = metaValue; + PlayerMetaManager.getInstance().updateDisplayName(uuid); // TODO Do we need this? + break; + + case "suffix": + opm.get().suffix = metaValue; + PlayerMetaManager.getInstance().updateDisplayName(uuid); // TODO Do we need this? + break; + + case "dn": + opm.get().localDisplayName = metaValue; + PlayerMetaManager.getInstance().updateDisplayName(uuid); // TODO Do we need this? + break; + + case "world": + opm.get().world = metaValue; + PlayerMetaManager.getInstance().updateDisplayName(uuid); // TODO Do we need this? + break; + + case "nick": + opm.get().nick = metaValue; + PlayerMetaManager.getInstance().updateDisplayName(uuid); // TODO Do we need this? + break; + + default: + return; + + } + + } + + } + + } + +} From cb3ef742b124cedb186aa6bc08b77b16103ffa16 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Thu, 16 Jul 2020 17:52:56 +0100 Subject: [PATCH 006/188] Incremented version number to 1.10 --- multichat/pom.xml | 2 +- .../main/java/xyz/olivermartin/multichat/bungee/MultiChat.java | 3 ++- .../multichat/local/sponge/MultiChatLocalSpongePlugin.java | 2 +- multichat/src/main/resources/bungee.yml | 2 +- multichat/src/main/resources/chatcontrol.yml | 2 +- multichat/src/main/resources/chatcontrol_fr.yml | 2 +- multichat/src/main/resources/config.yml | 2 +- multichat/src/main/resources/config_fr.yml | 2 +- multichat/src/main/resources/joinmessages.yml | 2 +- multichat/src/main/resources/joinmessages_fr.yml | 2 +- multichat/src/main/resources/localconfig.yml | 2 +- multichat/src/main/resources/localconfig_fr.yml | 2 +- multichat/src/main/resources/messages.yml | 2 +- multichat/src/main/resources/messages_fr.yml | 2 +- multichat/src/main/resources/plugin.yml | 2 +- 15 files changed, 16 insertions(+), 15 deletions(-) diff --git a/multichat/pom.xml b/multichat/pom.xml index 8a6b1b4b..2762ff49 100644 --- a/multichat/pom.xml +++ b/multichat/pom.xml @@ -5,7 +5,7 @@ xyz.olivermartin.multichat multichat - 1.9.3 + 1.10 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 db706249..3be4e83d 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java @@ -41,11 +41,12 @@ */ public class MultiChat extends Plugin implements Listener { - public static final String LATEST_VERSION = "1.9.3"; + public static final String LATEST_VERSION = "1.10"; public static final String[] ALLOWED_VERSIONS = new String[] { LATEST_VERSION, + "1.9.3", "1.9.2", "1.9.1", "1.9", diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/MultiChatLocalSpongePlugin.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/MultiChatLocalSpongePlugin.java index 83f01757..fe42d2de 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/MultiChatLocalSpongePlugin.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/MultiChatLocalSpongePlugin.java @@ -57,7 +57,7 @@ import xyz.olivermartin.multichat.local.sponge.listeners.communication.LocalSpongePlayerChannelListener; import xyz.olivermartin.multichat.local.sponge.listeners.communication.LocalSpongePlayerMetaListener; -@Plugin(id = "multichat", name = "MultiChat", version = "1.9.3", dependencies = { @Dependency(id = "placeholderapi", optional = true) }) +@Plugin(id = "multichat", name = "MultiChat", version = "1.10", dependencies = { @Dependency(id = "placeholderapi", optional = true) }) public class MultiChatLocalSpongePlugin { @Inject diff --git a/multichat/src/main/resources/bungee.yml b/multichat/src/main/resources/bungee.yml index 8b8e363e..28be88f3 100644 --- a/multichat/src/main/resources/bungee.yml +++ b/multichat/src/main/resources/bungee.yml @@ -1,6 +1,6 @@ name: MultiChat main: xyz.olivermartin.multichat.bungee.MultiChat -version: 1.9.3 +version: 1.10 author: Revilo410 api-version: 1.16 softdepends: [PremiumVanish] diff --git a/multichat/src/main/resources/chatcontrol.yml b/multichat/src/main/resources/chatcontrol.yml index 534f1d17..b798d277 100644 --- a/multichat/src/main/resources/chatcontrol.yml +++ b/multichat/src/main/resources/chatcontrol.yml @@ -8,7 +8,7 @@ ################## # DON'T EDIT # -version: "1.9.3" # +version: "1.10" # ################## # 1. Chat Control Rules diff --git a/multichat/src/main/resources/chatcontrol_fr.yml b/multichat/src/main/resources/chatcontrol_fr.yml index 1033664d..e9701fe1 100644 --- a/multichat/src/main/resources/chatcontrol_fr.yml +++ b/multichat/src/main/resources/chatcontrol_fr.yml @@ -8,7 +8,7 @@ ################## # NE PAS EDITER # -version: "1.9.3" # +version: "1.10" # ################## # French Translation by Nogapra - Thank you ! diff --git a/multichat/src/main/resources/config.yml b/multichat/src/main/resources/config.yml index 8dd017b6..a4fd88e7 100644 --- a/multichat/src/main/resources/config.yml +++ b/multichat/src/main/resources/config.yml @@ -8,7 +8,7 @@ ################## # DON'T EDIT # -version: "1.9.3" # +version: "1.10" # ################## # 1. General diff --git a/multichat/src/main/resources/config_fr.yml b/multichat/src/main/resources/config_fr.yml index f2bc874a..eca5b17d 100644 --- a/multichat/src/main/resources/config_fr.yml +++ b/multichat/src/main/resources/config_fr.yml @@ -8,7 +8,7 @@ ################## # NE PAS EDITER # -version: "1.9.3" # +version: "1.10" # ################## # French Translation by Nogapra - Thank you ! diff --git a/multichat/src/main/resources/joinmessages.yml b/multichat/src/main/resources/joinmessages.yml index 88e554b9..6710e4f6 100644 --- a/multichat/src/main/resources/joinmessages.yml +++ b/multichat/src/main/resources/joinmessages.yml @@ -8,7 +8,7 @@ ################## # DON'T EDIT # -version: "1.9.3" # +version: "1.10" # ################## ############################################################ diff --git a/multichat/src/main/resources/joinmessages_fr.yml b/multichat/src/main/resources/joinmessages_fr.yml index b15f95bc..04a4c5f0 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.9.3" # +version: "1.10" # ################## # French Translation by Nogapra - Thank you! diff --git a/multichat/src/main/resources/localconfig.yml b/multichat/src/main/resources/localconfig.yml index 9974ffec..c8d2e9bc 100644 --- a/multichat/src/main/resources/localconfig.yml +++ b/multichat/src/main/resources/localconfig.yml @@ -8,7 +8,7 @@ ################## # DON'T EDIT # -version: "1.9.3" # +version: "1.10" # ################## # 1. Global Chat Settings diff --git a/multichat/src/main/resources/localconfig_fr.yml b/multichat/src/main/resources/localconfig_fr.yml index c9aefb1e..63944894 100644 --- a/multichat/src/main/resources/localconfig_fr.yml +++ b/multichat/src/main/resources/localconfig_fr.yml @@ -8,7 +8,7 @@ ################## # NE PAS EDITER # -version: "1.9.3" # +version: "1.10" # ################## # French Translation by Nogapra - Thank you ! diff --git a/multichat/src/main/resources/messages.yml b/multichat/src/main/resources/messages.yml index ced63ba0..19d0b1fb 100644 --- a/multichat/src/main/resources/messages.yml +++ b/multichat/src/main/resources/messages.yml @@ -8,7 +8,7 @@ ################## # DON'T EDIT # -version: "1.9.3" # +version: "1.10" # ################## ############################################################ diff --git a/multichat/src/main/resources/messages_fr.yml b/multichat/src/main/resources/messages_fr.yml index 3889b6b4..c0309dce 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.9.3" # +version: "1.10" # ################## # French Translation by Nogapra - Thank you! diff --git a/multichat/src/main/resources/plugin.yml b/multichat/src/main/resources/plugin.yml index 8dd7f454..169f336c 100644 --- a/multichat/src/main/resources/plugin.yml +++ b/multichat/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ name: MultiChat -version: 1.9.3 +version: 1.10 author: Revilo410 main: xyz.olivermartin.multichat.local.spigot.MultiChatLocalSpigotPlugin softdepend: [Vault,PlaceholderAPI] From 6b5dc2a180ef5cd44b6ec007261c82d6ddc41630 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Thu, 16 Jul 2020 19:24:52 +0100 Subject: [PATCH 007/188] Relocated chat comm channel to pchat and schat --- multichat/dependency-reduced-pom.xml | 2 +- .../multichat/bungee/BungeeComm.java | 58 +--------- .../multichat/bungee/LocalChannel.java | 8 +- .../multichat/bungee/MultiChat.java | 5 +- .../common/communication/CommChannels.java | 2 +- .../LocalBungeeCommunicationManager.java | 7 +- .../LocalProxyCommunicationManager.java | 2 +- .../chat/LocalChatListenerMonitor.java | 2 +- ...ener.java => LocalServerChatListener.java} | 6 +- .../spigot/MultiChatLocalSpigotPlugin.java | 13 +-- .../SpigotBungeeCommunicationManager.java | 28 +++++ ...ava => LocalSpigotServerChatListener.java} | 7 +- .../sponge/MultiChatLocalSpongePlugin.java | 45 ++++---- .../SpongeBungeeCommunicationManager.java | 14 +++ ...ava => LocalSpongeServerChatListener.java} | 4 +- .../ProxyPlayerChatListener.java | 104 ++++++++++++++++++ 16 files changed, 201 insertions(+), 106 deletions(-) rename multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/{LocalCastListener.java => LocalServerChatListener.java} (76%) rename multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/{LocalSpigotCastListener.java => LocalSpigotServerChatListener.java} (72%) rename multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/listeners/communication/{LocalSpongeCastListener.java => LocalSpongeServerChatListener.java} (85%) create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyPlayerChatListener.java diff --git a/multichat/dependency-reduced-pom.xml b/multichat/dependency-reduced-pom.xml index 717be448..95006abf 100644 --- a/multichat/dependency-reduced-pom.xml +++ b/multichat/dependency-reduced-pom.xml @@ -3,7 +3,7 @@ 4.0.0 xyz.olivermartin.multichat multichat - 1.9.3 + 1.10 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 4e957082..1cf181ce 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/BungeeComm.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/BungeeComm.java @@ -6,7 +6,6 @@ import java.io.DataOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; -import java.util.UUID; import java.util.regex.PatternSyntaxException; import net.md_5.bungee.api.ProxyServer; @@ -17,6 +16,7 @@ import net.md_5.bungee.api.plugin.Listener; import net.md_5.bungee.config.Configuration; import net.md_5.bungee.event.EventHandler; +import xyz.olivermartin.multichat.common.communication.CommChannels; /** * Bungee Communication Manager @@ -111,7 +111,7 @@ public static void sendPlayerCommandMessage(String command, String playerRegex, } - public static void sendChatMessage(String message, ServerInfo server) { + public static void sendServerChatMessage(String channel, String message, ServerInfo server) { // This has been repurposed to send casts to local chat streams! @@ -121,6 +121,7 @@ public static void sendChatMessage(String message, ServerInfo server) { try { // message part + out.writeUTF(channel); out.writeUTF(message); @@ -128,7 +129,7 @@ public static void sendChatMessage(String message, ServerInfo server) { e.printStackTrace(); } - server.sendData("multichat:chat", stream.toByteArray()); + server.sendData(CommChannels.getServerChat(), stream.toByteArray()); } @@ -180,7 +181,7 @@ public static void sendPlayerChannelMessage(String playerName, String channel, C @EventHandler public static void onPluginMessage(PluginMessageEvent ev) { - if (! (ev.getTag().equals("multichat:comm") || ev.getTag().equals("multichat:chat") || ev.getTag().equals("multichat:prefix") || ev.getTag().equals("multichat:suffix") || ev.getTag().equals("multichat:dn") || ev.getTag().equals("multichat:world") || ev.getTag().equals("multichat:nick") || ev.getTag().equals("multichat:pxe") || ev.getTag().equals("multichat:ppxe")) ) { + if (! (ev.getTag().equals("multichat:comm") || ev.getTag().equals("multichat:pxe") || ev.getTag().equals("multichat:ppxe")) ) { return; } @@ -195,55 +196,6 @@ public static void onPluginMessage(PluginMessageEvent ev) { } - if (ev.getTag().equals("multichat:chat")) { - - ev.setCancelled(true); - - DebugManager.log("{multichat:chat} Got a plugin message"); - - ByteArrayInputStream stream = new ByteArrayInputStream(ev.getData()); - DataInputStream in = new DataInputStream(stream); - - try { - - UUID uuid = UUID.fromString(in.readUTF()); - DebugManager.log("{multichat:chat} UUID = " + uuid); - String message = in.readUTF(); - 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) { - DebugManager.log("{multichat:chat} Could not get player! Abandoning chat message... (Is IP-Forwarding on?)"); - return; - } - - DebugManager.log("{multichat:chat} Got player successfully! Name = " + player.getName()); - - //synchronized (player) { - - DebugManager.log("{multichat:chat} Global Channel Available? = " + (Channel.getGlobalChannel() != null)); - Channel.getGlobalChannel().sendMessage(player, message, format); - - //} - - } catch (IOException e) { - DebugManager.log("{multichat:chat} ERROR READING PLUGIN MESSAGE"); - e.printStackTrace(); - } - - - return; - - } - if (ev.getTag().equals("multichat:pxe")) { ev.setCancelled(true); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/LocalChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/LocalChannel.java index 512b948e..7f40aa78 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/LocalChannel.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/LocalChannel.java @@ -19,14 +19,14 @@ public void sendMessage(ProxiedPlayer sender, String message, String format) { @Override public void sendMessage(String message, CommandSender sender) { - + DebugManager.log("LocalChannel wants to send a cast message!"); - + // Use this to relay CASTS to local chat! if (sender instanceof ProxiedPlayer) { - BungeeComm.sendChatMessage(message, ((ProxiedPlayer)sender).getServer().getInfo()); + BungeeComm.sendServerChatMessage("local", message, ((ProxiedPlayer)sender).getServer().getInfo()); } - + } } 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 3be4e83d..2c3ca894 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java @@ -29,6 +29,7 @@ import xyz.olivermartin.multichat.common.communication.CommChannels; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; +import xyz.olivermartin.multichat.proxy.common.listeners.communication.ProxyPlayerChatListener; import xyz.olivermartin.multichat.proxy.common.listeners.communication.ProxyPlayerMetaListener; @@ -308,7 +309,6 @@ public void onEnable() { getProxy().registerChannel("multichat:comm"); // TODO LEGACY getProxy().registerChannel("multichat:act"); // TODO LEGACY getProxy().registerChannel("multichat:pact"); // TODO LEGACY - getProxy().registerChannel("multichat:chat"); // TODO LEGACY getProxy().registerChannel("multichat:ch"); // TODO LEGACY getProxy().registerChannel("multichat:ignore"); // TODO LEGACY getProxy().registerChannel("multichat:pxe"); // TODO LEGACY @@ -317,7 +317,10 @@ public void onEnable() { // New communication channels getProxy().registerChannel(CommChannels.getPlayerMeta()); + getProxy().registerChannel(CommChannels.getPlayerChat()); + getProxy().registerChannel(CommChannels.getServerChat()); getProxy().getPluginManager().registerListener(this, new ProxyPlayerMetaListener()); + getProxy().getPluginManager().registerListener(this, new ProxyPlayerChatListener()); // Register commands registerCommands(configYML, chatcontrolYML); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/common/communication/CommChannels.java b/multichat/src/main/java/xyz/olivermartin/multichat/common/communication/CommChannels.java index fa8160d7..67ba54b1 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/common/communication/CommChannels.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/common/communication/CommChannels.java @@ -11,7 +11,7 @@ public class CommChannels { private static String playerMeta = "pmeta"; // Bungee listener is implemented & registered // Chat messages sent by players - private static String playerChat = "pchat"; // NOT REGISTERED ANYWHERE + private static String playerChat = "pchat"; // Bungee listener is implemented & registered // Chat messages sent by non-player objects (casts, announcements etc.) private static String serverChat = "schat"; // NOT REGISTERED ANYWHERE diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalBungeeCommunicationManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalBungeeCommunicationManager.java index 6b63b313..0e58e289 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalBungeeCommunicationManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalBungeeCommunicationManager.java @@ -15,7 +15,6 @@ public abstract class LocalBungeeCommunicationManager extends LocalProxyCommunic protected final String pxeChannel = "multichat:pxe"; protected final String ppxeChannel = "multichat:ppxe"; - protected final String chatChannel = "multichat:chat"; protected LocalBungeeCommunicationManager(MultiChatLocalPlatform localPlatform) { super(localPlatform, MultiChatProxyPlatform.BUNGEE); @@ -25,6 +24,8 @@ protected LocalBungeeCommunicationManager(MultiChatLocalPlatform localPlatform) protected abstract boolean sendUUIDAndStringAndString(String channel, UUID uuid, String value1, String value2); + protected abstract boolean sendUUIDAndStringAndStringAndString(String channel, UUID uuid, String value1, String value2, String value3); + protected abstract boolean sendStringAndString(String channel, String string1, String string2); protected abstract boolean sendString(String channel, String string); @@ -45,8 +46,8 @@ public void sendProxyExecutePlayerMessage(String command, String player) { } @Override - public void sendChatMessage(UUID uuid, String message, String format) { - sendUUIDAndStringAndString(chatChannel, uuid, message, format); + public void sendPlayerChatMessage(UUID uuid, String channel, String message, String format) { + sendUUIDAndStringAndStringAndString(CommChannels.getPlayerChat(), uuid, channel, message, format); } } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalProxyCommunicationManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalProxyCommunicationManager.java index ef6a3808..a3013a0f 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalProxyCommunicationManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalProxyCommunicationManager.java @@ -44,6 +44,6 @@ public void updatePlayerMeta(UUID uuid) { public abstract void sendProxyExecutePlayerMessage(String command, String player); - public abstract void sendChatMessage(UUID uuid, String message, String format); + public abstract void sendPlayerChatMessage(UUID uuid, String channel, String message, String format); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/LocalChatListenerMonitor.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/LocalChatListenerMonitor.java index 355ad0d6..dea81504 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/LocalChatListenerMonitor.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/LocalChatListenerMonitor.java @@ -74,7 +74,7 @@ public void handleChat(MultiChatLocalPlayerChatEvent event) { } - MultiChatLocal.getInstance().getProxyCommunicationManager().sendChatMessage(event.getPlayer().getUniqueId(), proxyMessage, proxyFormat); + MultiChatLocal.getInstance().getProxyCommunicationManager().sendPlayerChatMessage(event.getPlayer().getUniqueId(), "global", proxyMessage, proxyFormat); MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@MONITOR - Aaaaand we sent it to the proxy! ALL DONE."); MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@MONITOR - UUID: " + event.getPlayer().getUniqueId()); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalCastListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalServerChatListener.java similarity index 76% rename from multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalCastListener.java rename to multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalServerChatListener.java index 2f6793db..79c61fe1 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalCastListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalServerChatListener.java @@ -5,12 +5,16 @@ import xyz.olivermartin.multichat.local.common.MultiChatLocal; import xyz.olivermartin.multichat.local.common.listeners.LocalBungeeMessage; -public abstract class LocalCastListener { +public abstract class LocalServerChatListener { protected boolean handleMessage(LocalBungeeMessage message) { try { + // This is currently only used for casts + + @SuppressWarnings("unused") + String channel = message.readUTF(); // TODO THIS NEEDS WORK String castMessage = message.readUTF(); broadcastRawMessageToChat(castMessage); return true; diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/MultiChatLocalSpigotPlugin.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/MultiChatLocalSpigotPlugin.java index 08811544..393bf220 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/MultiChatLocalSpigotPlugin.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/MultiChatLocalSpigotPlugin.java @@ -37,11 +37,11 @@ import xyz.olivermartin.multichat.local.spigot.listeners.chat.LocalSpigotChatListenerLowest; import xyz.olivermartin.multichat.local.spigot.listeners.chat.LocalSpigotChatListenerMonitor; import xyz.olivermartin.multichat.local.spigot.listeners.communication.LocalSpigotActionListener; -import xyz.olivermartin.multichat.local.spigot.listeners.communication.LocalSpigotCastListener; import xyz.olivermartin.multichat.local.spigot.listeners.communication.LocalSpigotIgnoreListener; import xyz.olivermartin.multichat.local.spigot.listeners.communication.LocalSpigotPlayerActionListener; import xyz.olivermartin.multichat.local.spigot.listeners.communication.LocalSpigotPlayerChannelListener; import xyz.olivermartin.multichat.local.spigot.listeners.communication.LocalSpigotPlayerMetaListener; +import xyz.olivermartin.multichat.local.spigot.listeners.communication.LocalSpigotServerChatListener; public class MultiChatLocalSpigotPlugin extends JavaPlugin { @@ -169,24 +169,19 @@ public void onEnable() { private void registerCommunicationChannels() { getServer().getMessenger().registerOutgoingPluginChannel(this, "multichat:comm"); - getServer().getMessenger().registerOutgoingPluginChannel(this, "multichat:chat"); - //getServer().getMessenger().registerOutgoingPluginChannel(this, "multichat:prefix"); // TODO LEGACY - //getServer().getMessenger().registerOutgoingPluginChannel(this, "multichat:suffix"); // TODO LEGACY - //getServer().getMessenger().registerOutgoingPluginChannel(this, "multichat:dn"); // TODO LEGACY - //getServer().getMessenger().registerOutgoingPluginChannel(this, "multichat:world"); // TODO LEGACY - //getServer().getMessenger().registerOutgoingPluginChannel(this, "multichat:nick"); // TODO LEGACY getServer().getMessenger().registerOutgoingPluginChannel(this, "multichat:pxe"); getServer().getMessenger().registerOutgoingPluginChannel(this, "multichat:ppxe"); getServer().getMessenger().registerIncomingPluginChannel(this, "multichat:comm", new LocalSpigotPlayerMetaListener()); - getServer().getMessenger().registerIncomingPluginChannel(this, "multichat:chat", new LocalSpigotCastListener()); getServer().getMessenger().registerIncomingPluginChannel(this, "multichat:act", new LocalSpigotActionListener()); getServer().getMessenger().registerIncomingPluginChannel(this, "multichat:pact", new LocalSpigotPlayerActionListener()); getServer().getMessenger().registerIncomingPluginChannel(this, "multichat:ch", new LocalSpigotPlayerChannelListener()); getServer().getMessenger().registerIncomingPluginChannel(this, "multichat:ignore", new LocalSpigotIgnoreListener()); - + // New channels getServer().getMessenger().registerOutgoingPluginChannel(this, CommChannels.getPlayerMeta()); + getServer().getMessenger().registerOutgoingPluginChannel(this, CommChannels.getPlayerChat()); + getServer().getMessenger().registerIncomingPluginChannel(this, CommChannels.getServerChat(), new LocalSpigotServerChatListener()); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/SpigotBungeeCommunicationManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/SpigotBungeeCommunicationManager.java index 0876fac6..04c631db 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/SpigotBungeeCommunicationManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/SpigotBungeeCommunicationManager.java @@ -122,4 +122,32 @@ protected boolean sendUUIDAndStringAndString(String channel, UUID uuid, String v } + @Override + protected boolean sendUUIDAndStringAndStringAndString(String channel, UUID uuid, String value1, String value2, + String value3) { + + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + DataOutputStream out = new DataOutputStream(stream); + + try { + + out.writeUTF(uuid.toString()); + out.writeUTF(value1); + out.writeUTF(value2); + out.writeUTF(value3); + + } catch (IOException e) { + + return false; + + } + + if (Bukkit.getServer().getOnlinePlayers().size() < 1) return false; + + ((PluginMessageRecipient)Bukkit.getServer().getOnlinePlayers().toArray()[0]).sendPluginMessage(Bukkit.getPluginManager().getPlugin(MultiChatLocal.getInstance().getPluginName()), channel, stream.toByteArray()); + + return true; + + } + } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotCastListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotServerChatListener.java similarity index 72% rename from multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotCastListener.java rename to multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotServerChatListener.java index 072d2c79..907c053f 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotCastListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotServerChatListener.java @@ -5,16 +5,17 @@ import org.bukkit.entity.Player; import org.bukkit.plugin.messaging.PluginMessageListener; +import xyz.olivermartin.multichat.common.communication.CommChannels; import xyz.olivermartin.multichat.local.common.listeners.LocalBungeeMessage; -import xyz.olivermartin.multichat.local.common.listeners.communication.LocalCastListener; +import xyz.olivermartin.multichat.local.common.listeners.communication.LocalServerChatListener; import xyz.olivermartin.multichat.local.spigot.listeners.SpigotBungeeMessage; -public class LocalSpigotCastListener extends LocalCastListener implements PluginMessageListener { +public class LocalSpigotServerChatListener extends LocalServerChatListener implements PluginMessageListener { @Override public void onPluginMessageReceived(String channel, Player player, byte[] message) { - if (!channel.equals("multichat:chat")) return; + if (!channel.equals(CommChannels.getServerChat())) return; LocalBungeeMessage lbm = new SpigotBungeeMessage(message); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/MultiChatLocalSpongePlugin.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/MultiChatLocalSpongePlugin.java index fe42d2de..6f1a49f7 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/MultiChatLocalSpongePlugin.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/MultiChatLocalSpongePlugin.java @@ -51,11 +51,11 @@ import xyz.olivermartin.multichat.local.sponge.listeners.chat.LocalSpongeChatListenerLowest; import xyz.olivermartin.multichat.local.sponge.listeners.chat.LocalSpongeChatListenerMonitor; import xyz.olivermartin.multichat.local.sponge.listeners.communication.LocalSpongeActionListener; -import xyz.olivermartin.multichat.local.sponge.listeners.communication.LocalSpongeCastListener; import xyz.olivermartin.multichat.local.sponge.listeners.communication.LocalSpongeIgnoreListener; import xyz.olivermartin.multichat.local.sponge.listeners.communication.LocalSpongePlayerActionListener; import xyz.olivermartin.multichat.local.sponge.listeners.communication.LocalSpongePlayerChannelListener; import xyz.olivermartin.multichat.local.sponge.listeners.communication.LocalSpongePlayerMetaListener; +import xyz.olivermartin.multichat.local.sponge.listeners.communication.LocalSpongeServerChatListener; @Plugin(id = "multichat", name = "MultiChat", version = "1.10", dependencies = { @Dependency(id = "placeholderapi", optional = true) }) public class MultiChatLocalSpongePlugin { @@ -233,24 +233,12 @@ private void registerCommunicationChannels(SpongeBungeeCommunicationManager comm ChannelBinding.RawDataChannel commChannel = channelRegistrar.createRawChannel(this, "multichat:comm"); commManager.registerChannel("multichat:comm", commChannel); - ChannelBinding.RawDataChannel chatChannel = channelRegistrar.createRawChannel(this, "multichat:chat"); - commManager.registerChannel("multichat:chat", chatChannel); ChannelBinding.RawDataChannel actionChannel = channelRegistrar.createRawChannel(this, "multichat:act"); commManager.registerChannel("multichat:act", actionChannel); ChannelBinding.RawDataChannel playerActionChannel = channelRegistrar.createRawChannel(this, "multichat:pact"); commManager.registerChannel("multichat:pact", playerActionChannel); - /*ChannelBinding.RawDataChannel prefixChannel = channelRegistrar.createRawChannel(this, "multichat:prefix"); - commManager.registerChannel("multichat:prefix", prefixChannel); - ChannelBinding.RawDataChannel suffixChannel = channelRegistrar.createRawChannel(this, "multichat:suffix"); - commManager.registerChannel("multichat:suffix", suffixChannel); - ChannelBinding.RawDataChannel displayNameChannel = channelRegistrar.createRawChannel(this, "multichat:dn"); - commManager.registerChannel("multichat:dn", displayNameChannel); - ChannelBinding.RawDataChannel worldChannel = channelRegistrar.createRawChannel(this, "multichat:world"); - commManager.registerChannel("multichat:world", worldChannel); - ChannelBinding.RawDataChannel nickChannel = channelRegistrar.createRawChannel(this, "multichat:nick"); - commManager.registerChannel("multichat:nick", nickChannel);*/ // TODO LEGACY ChannelBinding.RawDataChannel channelChannel = channelRegistrar.createRawChannel(this, "multichat:ch"); commManager.registerChannel("multichat:ch", channelChannel); ChannelBinding.RawDataChannel ignoreChannel = channelRegistrar.createRawChannel(this, "multichat:ignore"); @@ -262,7 +250,6 @@ private void registerCommunicationChannels(SpongeBungeeCommunicationManager comm commManager.registerChannel("multichat:ppxe", ppexecuteChannel); commChannel.addListener(Platform.Type.SERVER, new LocalSpongePlayerMetaListener()); - chatChannel.addListener(Platform.Type.SERVER, new LocalSpongeCastListener()); channelChannel.addListener(Platform.Type.SERVER, new LocalSpongePlayerChannelListener()); ignoreChannel.addListener(Platform.Type.SERVER, new LocalSpongeIgnoreListener()); @@ -273,6 +260,14 @@ private void registerCommunicationChannels(SpongeBungeeCommunicationManager comm ChannelBinding.RawDataChannel playerMetaChannel = channelRegistrar.createRawChannel(this, CommChannels.getPlayerMeta()); commManager.registerChannel(CommChannels.getPlayerMeta(), playerMetaChannel); + ChannelBinding.RawDataChannel playerChatChannel = channelRegistrar.createRawChannel(this, CommChannels.getPlayerChat()); + commManager.registerChannel(CommChannels.getPlayerChat(), playerChatChannel); + + ChannelBinding.RawDataChannel serverChatChannel = channelRegistrar.createRawChannel(this, CommChannels.getServerChat()); + commManager.registerChannel(CommChannels.getServerChat(), serverChatChannel); + + serverChatChannel.addListener(Platform.Type.SERVER, new LocalSpongeServerChatListener()); + } @Listener @@ -282,22 +277,10 @@ public void onServerStop(GameStoppingServerEvent event) { Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel("multichat:comm")); commManager.unregisterChannel("multichat:comm"); - Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel("multichat:chat")); - commManager.unregisterChannel("multichat:chat"); Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel("multichat:act")); commManager.unregisterChannel("multichat:act"); Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel("multichat:pact")); commManager.unregisterChannel("multichat:pact"); - Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel("multichat:prefix")); - commManager.unregisterChannel("multichat:prefix"); - Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel("multichat:suffix")); - commManager.unregisterChannel("multichat:suffix"); - Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel("multichat:dn")); - commManager.unregisterChannel("multichat:dn"); - Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel("multichat:nick")); - commManager.unregisterChannel("multichat:nick"); - Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel("multichat:world")); - commManager.unregisterChannel("multichat:world"); Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel("multichat:ch")); commManager.unregisterChannel("multichat:ch"); Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel("multichat:ignore")); @@ -307,6 +290,16 @@ public void onServerStop(GameStoppingServerEvent event) { Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel("multichat:ppxe")); commManager.unregisterChannel("multichat:ppxe"); + // New channels + Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel(CommChannels.getPlayerMeta())); + commManager.unregisterChannel(CommChannels.getPlayerMeta()); + + Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel(CommChannels.getPlayerChat())); + commManager.unregisterChannel(CommChannels.getPlayerChat()); + + Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel(CommChannels.getServerChat())); + commManager.unregisterChannel(CommChannels.getServerChat()); + if (MultiChatLocal.getInstance().getNameManager().getMode() == LocalNameManagerMode.SQL) { try { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/SpongeBungeeCommunicationManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/SpongeBungeeCommunicationManager.java index bd56151b..787bacf7 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/SpongeBungeeCommunicationManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/SpongeBungeeCommunicationManager.java @@ -97,4 +97,18 @@ protected boolean sendUUIDAndStringAndString(String channel, UUID uuid, String v return true; } + @Override + protected boolean sendUUIDAndStringAndStringAndString(String channel, UUID uuid, String value1, String value2, + String value3) { + if (!this.channels.containsKey(channel)) throw new IllegalStateException("Sponge Raw Data Channels must first be registered with MultiChat's SpongeBungeeCommunicationManager!"); + + if (Sponge.getServer().getOnlinePlayers().size() < 1) return false; + + Player facilitatingPlayer = (Player) Sponge.getServer().getOnlinePlayers().toArray()[0]; + + this.channels.get(channel).sendTo(facilitatingPlayer, buffer -> buffer.writeUTF(uuid.toString()).writeUTF(value1).writeUTF(value2).writeUTF(value3)); + + return true; + } + } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/listeners/communication/LocalSpongeCastListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/listeners/communication/LocalSpongeServerChatListener.java similarity index 85% rename from multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/listeners/communication/LocalSpongeCastListener.java rename to multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/listeners/communication/LocalSpongeServerChatListener.java index 05be7543..0f62bb8e 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/listeners/communication/LocalSpongeCastListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/listeners/communication/LocalSpongeServerChatListener.java @@ -8,10 +8,10 @@ import org.spongepowered.api.text.serializer.TextSerializers; import xyz.olivermartin.multichat.local.common.listeners.LocalBungeeMessage; -import xyz.olivermartin.multichat.local.common.listeners.communication.LocalCastListener; +import xyz.olivermartin.multichat.local.common.listeners.communication.LocalServerChatListener; import xyz.olivermartin.multichat.local.sponge.listeners.SpongeBungeeMessage; -public class LocalSpongeCastListener extends LocalCastListener implements RawDataListener { +public class LocalSpongeServerChatListener extends LocalServerChatListener implements RawDataListener { @Override public void handlePayload(ChannelBuf data, RemoteConnection connection, Type side) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyPlayerChatListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyPlayerChatListener.java new file mode 100644 index 00000000..36ed0fb8 --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyPlayerChatListener.java @@ -0,0 +1,104 @@ +package xyz.olivermartin.multichat.proxy.common.listeners.communication; + +import java.io.ByteArrayInputStream; +import java.io.DataInputStream; +import java.io.IOException; +import java.util.Optional; +import java.util.UUID; + +import net.md_5.bungee.api.ProxyServer; +import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.md_5.bungee.api.event.PluginMessageEvent; +import net.md_5.bungee.api.plugin.Listener; +import net.md_5.bungee.event.EventHandler; +import xyz.olivermartin.multichat.bungee.Channel; +import xyz.olivermartin.multichat.bungee.DebugManager; +import xyz.olivermartin.multichat.bungee.PlayerMeta; +import xyz.olivermartin.multichat.bungee.PlayerMetaManager; +import xyz.olivermartin.multichat.common.communication.CommChannels; + +/** + * Listener for communication over the Player Chat communication channel + * + * @author Oliver Martin (Revilo410) + * + */ +public class ProxyPlayerChatListener implements Listener { + + @EventHandler + public static void onPluginMessage(PluginMessageEvent event) { + + // Ignore if sent to a different channel + if (!event.getTag().equals(CommChannels.getPlayerChat())) return; + + event.setCancelled(true); + + /* + * Possible channels: + * - global + * - local (spy) + * + * This range will expand in the future + */ + + ByteArrayInputStream stream = new ByteArrayInputStream(event.getData()); + DataInputStream in = new DataInputStream(stream); + + UUID uuid; + String channel; + String message; + String format; + + try { + uuid = UUID.fromString(in.readUTF()); + DebugManager.log("{multichat:pchat} UUID = " + uuid); + channel = in.readUTF(); + DebugManager.log("{multichat:pchat} Channel = " + channel); + message = in.readUTF(); + DebugManager.log("{multichat:pchat} Message = " + message); + format = in.readUTF(); + } catch (IOException e) { + e.printStackTrace(); + return; + } + + DebugManager.log("{multichat:pchat} Format (before removal of double chars) = " + format); + format = format.replace("%%","%"); + DebugManager.log("{multichat:pchat} Format = " + format); + + ProxiedPlayer player = ProxyServer.getInstance().getPlayer(uuid); + + // If the player UUID doesn't exist, then ignore it + if (player == null) { + DebugManager.log("{multichat:pchat} Could not get player! Abandoning chat message... (Is IP-Forwarding on?)"); + return; + } + + DebugManager.log("{multichat:pchat} Got player successfully! Name = " + player.getName()); + + Optional opm = PlayerMetaManager.getInstance().getPlayer(uuid); + + if (opm.isPresent()) { + + switch (channel) { + + case "global": + DebugManager.log("{multichat:pchat} Global Channel Available? = " + (Channel.getGlobalChannel() != null)); + Channel.getGlobalChannel().sendMessage(player, message, format); + break; + + case "local": + DebugManager.log("{multichat:pchat} LOCAL SPY MESSAGE - Not yet implemented...?"); + break; + + default: + DebugManager.log("{multichat:pchat} Channel: " + channel + ", is not recognised"); + return; + + } + + } + + } + +} From 25003299c33b60916ef47e81adc79779c3b09d48 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Thu, 16 Jul 2020 21:11:05 +0100 Subject: [PATCH 008/188] Relocated the MCE, PMCE, PXE and PPXE to pact and sact channels --- .../multichat/bungee/BungeeComm.java | 67 +------------------ .../multichat/bungee/MultiChat.java | 10 +-- .../common/communication/CommChannels.java | 2 +- ...er.java => LocalServerActionListener.java} | 2 +- .../spigot/MultiChatLocalSpigotPlugin.java | 10 +-- .../LocalSpigotPlayerActionListener.java | 3 +- ...a => LocalSpigotServerActionListener.java} | 7 +- .../sponge/MultiChatLocalSpongePlugin.java | 37 +++++----- ...a => LocalSpongeServerActionListener.java} | 4 +- .../ProxyPlayerActionListener.java | 62 +++++++++++++++++ .../ProxyServerActionListener.java | 45 +++++++++++++ 11 files changed, 146 insertions(+), 103 deletions(-) rename multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/{LocalActionListener.java => LocalServerActionListener.java} (92%) rename multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/{LocalSpigotActionListener.java => LocalSpigotServerActionListener.java} (71%) rename multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/listeners/communication/{LocalSpongeActionListener.java => LocalSpongeServerActionListener.java} (83%) create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyPlayerActionListener.java create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyServerActionListener.java 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 1cf181ce..17c4e286 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/BungeeComm.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/BungeeComm.java @@ -1,16 +1,11 @@ package xyz.olivermartin.multichat.bungee; -import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; -import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; -import java.util.regex.PatternSyntaxException; -import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.config.ServerInfo; -import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.connection.Server; import net.md_5.bungee.api.event.PluginMessageEvent; import net.md_5.bungee.api.plugin.Listener; @@ -88,7 +83,7 @@ public static void sendCommandMessage(String command, ServerInfo server) { e.printStackTrace(); } - server.sendData("multichat:act", stream.toByteArray()); + server.sendData(CommChannels.getServerAction(), stream.toByteArray()); } @@ -107,7 +102,7 @@ public static void sendPlayerCommandMessage(String command, String playerRegex, e.printStackTrace(); } - server.sendData("multichat:pact", stream.toByteArray()); + server.sendData(CommChannels.getPlayerAction(), stream.toByteArray()); } @@ -181,7 +176,7 @@ public static void sendPlayerChannelMessage(String playerName, String channel, C @EventHandler public static void onPluginMessage(PluginMessageEvent ev) { - if (! (ev.getTag().equals("multichat:comm") || ev.getTag().equals("multichat:pxe") || ev.getTag().equals("multichat:ppxe")) ) { + if (! (ev.getTag().equals("multichat:comm") )) { return; } @@ -196,61 +191,5 @@ public static void onPluginMessage(PluginMessageEvent ev) { } - if (ev.getTag().equals("multichat:pxe")) { - - ev.setCancelled(true); - - DebugManager.log("[multichat:pxe] Got an incoming pexecute message!"); - - ByteArrayInputStream stream = new ByteArrayInputStream(ev.getData()); - DataInputStream in = new DataInputStream(stream); - - try { - - String command = in.readUTF(); - DebugManager.log("[multichat:pxe] Command is: " + command); - ProxyServer.getInstance().getPluginManager().dispatchCommand(ProxyServer.getInstance().getConsole(), command); - - } catch (IOException e) { - e.printStackTrace(); - } - - } - - if (ev.getTag().equals("multichat:ppxe")) { - - ev.setCancelled(true); - - DebugManager.log("[multichat:ppxe] Got an incoming pexecute message (for a player)!"); - - ByteArrayInputStream stream = new ByteArrayInputStream(ev.getData()); - DataInputStream in = new DataInputStream(stream); - - try { - - String command = in.readUTF(); - String playerRegex = in.readUTF(); - - DebugManager.log("[multichat:ppxe] Command is: " + command); - DebugManager.log("[multichat:ppxe] Player regex is: " + playerRegex); - - for (ProxiedPlayer p : ProxyServer.getInstance().getPlayers()) { - - if (p.getName().matches(playerRegex)) { - - ProxyServer.getInstance().getPluginManager().dispatchCommand(p, command); - - } - - } - - } catch (IOException e) { - e.printStackTrace(); - } catch (PatternSyntaxException e2) { - MessageManager.sendMessage(ProxyServer.getInstance().getConsole(), "command_execute_regex"); - } - - } - } } 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 2c3ca894..736ce8ab 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java @@ -29,8 +29,10 @@ import xyz.olivermartin.multichat.common.communication.CommChannels; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; +import xyz.olivermartin.multichat.proxy.common.listeners.communication.ProxyPlayerActionListener; import xyz.olivermartin.multichat.proxy.common.listeners.communication.ProxyPlayerChatListener; import xyz.olivermartin.multichat.proxy.common.listeners.communication.ProxyPlayerMetaListener; +import xyz.olivermartin.multichat.proxy.common.listeners.communication.ProxyServerActionListener; /** @@ -307,20 +309,20 @@ public void onEnable() { // Register communication channels and appropriate listeners getProxy().registerChannel("multichat:comm"); // TODO LEGACY - getProxy().registerChannel("multichat:act"); // TODO LEGACY - getProxy().registerChannel("multichat:pact"); // TODO LEGACY getProxy().registerChannel("multichat:ch"); // TODO LEGACY getProxy().registerChannel("multichat:ignore"); // TODO LEGACY - getProxy().registerChannel("multichat:pxe"); // TODO LEGACY - getProxy().registerChannel("multichat:ppxe"); // TODO LEGACY getProxy().getPluginManager().registerListener(this, new BungeeComm()); // TODO LEGACY // New communication channels getProxy().registerChannel(CommChannels.getPlayerMeta()); getProxy().registerChannel(CommChannels.getPlayerChat()); getProxy().registerChannel(CommChannels.getServerChat()); + getProxy().registerChannel(CommChannels.getPlayerAction()); + getProxy().registerChannel(CommChannels.getServerAction()); getProxy().getPluginManager().registerListener(this, new ProxyPlayerMetaListener()); getProxy().getPluginManager().registerListener(this, new ProxyPlayerChatListener()); + getProxy().getPluginManager().registerListener(this, new ProxyPlayerActionListener()); + getProxy().getPluginManager().registerListener(this, new ProxyServerActionListener()); // Register commands registerCommands(configYML, chatcontrolYML); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/common/communication/CommChannels.java b/multichat/src/main/java/xyz/olivermartin/multichat/common/communication/CommChannels.java index 67ba54b1..1a7d97b5 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/common/communication/CommChannels.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/common/communication/CommChannels.java @@ -14,7 +14,7 @@ public class CommChannels { private static String playerChat = "pchat"; // Bungee listener is implemented & registered // Chat messages sent by non-player objects (casts, announcements etc.) - private static String serverChat = "schat"; // NOT REGISTERED ANYWHERE + private static String serverChat = "schat"; // Bungee listener is implemented & registered // Data about specific players (colour permissions etc.) private static String playerData = "pdata"; // NOT REGISTERED ANYWHERE diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalActionListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalServerActionListener.java similarity index 92% rename from multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalActionListener.java rename to multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalServerActionListener.java index 9a7d3f08..1b17a326 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalActionListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalServerActionListener.java @@ -5,7 +5,7 @@ import xyz.olivermartin.multichat.local.common.MultiChatLocal; import xyz.olivermartin.multichat.local.common.listeners.LocalBungeeMessage; -public abstract class LocalActionListener { +public abstract class LocalServerActionListener { protected abstract void executeCommandAsConsole(String command); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/MultiChatLocalSpigotPlugin.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/MultiChatLocalSpigotPlugin.java index 393bf220..3b6e9e40 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/MultiChatLocalSpigotPlugin.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/MultiChatLocalSpigotPlugin.java @@ -36,11 +36,11 @@ import xyz.olivermartin.multichat.local.spigot.listeners.chat.LocalSpigotChatListenerHighest; import xyz.olivermartin.multichat.local.spigot.listeners.chat.LocalSpigotChatListenerLowest; import xyz.olivermartin.multichat.local.spigot.listeners.chat.LocalSpigotChatListenerMonitor; -import xyz.olivermartin.multichat.local.spigot.listeners.communication.LocalSpigotActionListener; import xyz.olivermartin.multichat.local.spigot.listeners.communication.LocalSpigotIgnoreListener; import xyz.olivermartin.multichat.local.spigot.listeners.communication.LocalSpigotPlayerActionListener; import xyz.olivermartin.multichat.local.spigot.listeners.communication.LocalSpigotPlayerChannelListener; import xyz.olivermartin.multichat.local.spigot.listeners.communication.LocalSpigotPlayerMetaListener; +import xyz.olivermartin.multichat.local.spigot.listeners.communication.LocalSpigotServerActionListener; import xyz.olivermartin.multichat.local.spigot.listeners.communication.LocalSpigotServerChatListener; public class MultiChatLocalSpigotPlugin extends JavaPlugin { @@ -169,19 +169,19 @@ public void onEnable() { private void registerCommunicationChannels() { getServer().getMessenger().registerOutgoingPluginChannel(this, "multichat:comm"); - getServer().getMessenger().registerOutgoingPluginChannel(this, "multichat:pxe"); - getServer().getMessenger().registerOutgoingPluginChannel(this, "multichat:ppxe"); getServer().getMessenger().registerIncomingPluginChannel(this, "multichat:comm", new LocalSpigotPlayerMetaListener()); - getServer().getMessenger().registerIncomingPluginChannel(this, "multichat:act", new LocalSpigotActionListener()); - getServer().getMessenger().registerIncomingPluginChannel(this, "multichat:pact", new LocalSpigotPlayerActionListener()); getServer().getMessenger().registerIncomingPluginChannel(this, "multichat:ch", new LocalSpigotPlayerChannelListener()); getServer().getMessenger().registerIncomingPluginChannel(this, "multichat:ignore", new LocalSpigotIgnoreListener()); // New channels getServer().getMessenger().registerOutgoingPluginChannel(this, CommChannels.getPlayerMeta()); getServer().getMessenger().registerOutgoingPluginChannel(this, CommChannels.getPlayerChat()); + getServer().getMessenger().registerOutgoingPluginChannel(this, CommChannels.getPlayerAction()); + getServer().getMessenger().registerOutgoingPluginChannel(this, CommChannels.getServerAction()); getServer().getMessenger().registerIncomingPluginChannel(this, CommChannels.getServerChat(), new LocalSpigotServerChatListener()); + getServer().getMessenger().registerIncomingPluginChannel(this, CommChannels.getServerAction(), new LocalSpigotServerActionListener()); + getServer().getMessenger().registerIncomingPluginChannel(this, CommChannels.getPlayerAction(), new LocalSpigotPlayerActionListener()); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotPlayerActionListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotPlayerActionListener.java index 36db3dc1..299cb98d 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotPlayerActionListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotPlayerActionListener.java @@ -4,6 +4,7 @@ import org.bukkit.entity.Player; import org.bukkit.plugin.messaging.PluginMessageListener; +import xyz.olivermartin.multichat.common.communication.CommChannels; import xyz.olivermartin.multichat.local.common.listeners.LocalBungeeMessage; import xyz.olivermartin.multichat.local.common.listeners.communication.LocalPlayerActionListener; import xyz.olivermartin.multichat.local.spigot.listeners.SpigotBungeeMessage; @@ -13,7 +14,7 @@ public class LocalSpigotPlayerActionListener extends LocalPlayerActionListener i @Override public void onPluginMessageReceived(String channel, Player player, byte[] message) { - if (!channel.equals("multichat:pact")) return; + if (!channel.equals(CommChannels.getPlayerAction())) return; LocalBungeeMessage lbm = new SpigotBungeeMessage(message); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotActionListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotServerActionListener.java similarity index 71% rename from multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotActionListener.java rename to multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotServerActionListener.java index b2f7b0f7..12d5614b 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotActionListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotServerActionListener.java @@ -4,16 +4,17 @@ import org.bukkit.entity.Player; import org.bukkit.plugin.messaging.PluginMessageListener; +import xyz.olivermartin.multichat.common.communication.CommChannels; import xyz.olivermartin.multichat.local.common.listeners.LocalBungeeMessage; -import xyz.olivermartin.multichat.local.common.listeners.communication.LocalActionListener; +import xyz.olivermartin.multichat.local.common.listeners.communication.LocalServerActionListener; import xyz.olivermartin.multichat.local.spigot.listeners.SpigotBungeeMessage; -public class LocalSpigotActionListener extends LocalActionListener implements PluginMessageListener { +public class LocalSpigotServerActionListener extends LocalServerActionListener implements PluginMessageListener { @Override public void onPluginMessageReceived(String channel, Player player, byte[] message) { - if (!channel.equals("multichat:act")) return; + if (!channel.equals(CommChannels.getServerAction())) return; LocalBungeeMessage lbm = new SpigotBungeeMessage(message); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/MultiChatLocalSpongePlugin.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/MultiChatLocalSpongePlugin.java index 6f1a49f7..756a22ad 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/MultiChatLocalSpongePlugin.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/MultiChatLocalSpongePlugin.java @@ -50,11 +50,11 @@ import xyz.olivermartin.multichat.local.sponge.listeners.chat.LocalSpongeChatListenerHighest; import xyz.olivermartin.multichat.local.sponge.listeners.chat.LocalSpongeChatListenerLowest; import xyz.olivermartin.multichat.local.sponge.listeners.chat.LocalSpongeChatListenerMonitor; -import xyz.olivermartin.multichat.local.sponge.listeners.communication.LocalSpongeActionListener; import xyz.olivermartin.multichat.local.sponge.listeners.communication.LocalSpongeIgnoreListener; import xyz.olivermartin.multichat.local.sponge.listeners.communication.LocalSpongePlayerActionListener; import xyz.olivermartin.multichat.local.sponge.listeners.communication.LocalSpongePlayerChannelListener; import xyz.olivermartin.multichat.local.sponge.listeners.communication.LocalSpongePlayerMetaListener; +import xyz.olivermartin.multichat.local.sponge.listeners.communication.LocalSpongeServerActionListener; import xyz.olivermartin.multichat.local.sponge.listeners.communication.LocalSpongeServerChatListener; @Plugin(id = "multichat", name = "MultiChat", version = "1.10", dependencies = { @Dependency(id = "placeholderapi", optional = true) }) @@ -234,28 +234,15 @@ private void registerCommunicationChannels(SpongeBungeeCommunicationManager comm ChannelBinding.RawDataChannel commChannel = channelRegistrar.createRawChannel(this, "multichat:comm"); commManager.registerChannel("multichat:comm", commChannel); - ChannelBinding.RawDataChannel actionChannel = channelRegistrar.createRawChannel(this, "multichat:act"); - commManager.registerChannel("multichat:act", actionChannel); - ChannelBinding.RawDataChannel playerActionChannel = channelRegistrar.createRawChannel(this, "multichat:pact"); - commManager.registerChannel("multichat:pact", playerActionChannel); - ChannelBinding.RawDataChannel channelChannel = channelRegistrar.createRawChannel(this, "multichat:ch"); commManager.registerChannel("multichat:ch", channelChannel); ChannelBinding.RawDataChannel ignoreChannel = channelRegistrar.createRawChannel(this, "multichat:ignore"); commManager.registerChannel("multichat:ignore", ignoreChannel); - ChannelBinding.RawDataChannel pexecuteChannel = channelRegistrar.createRawChannel(this, "multichat:pxe"); - commManager.registerChannel("multichat:pxe", pexecuteChannel); - ChannelBinding.RawDataChannel ppexecuteChannel = channelRegistrar.createRawChannel(this, "multichat:ppxe"); - commManager.registerChannel("multichat:ppxe", ppexecuteChannel); - commChannel.addListener(Platform.Type.SERVER, new LocalSpongePlayerMetaListener()); channelChannel.addListener(Platform.Type.SERVER, new LocalSpongePlayerChannelListener()); ignoreChannel.addListener(Platform.Type.SERVER, new LocalSpongeIgnoreListener()); - actionChannel.addListener(Platform.Type.SERVER, new LocalSpongeActionListener()); - playerActionChannel.addListener(Platform.Type.SERVER, new LocalSpongePlayerActionListener()); - // New channels ChannelBinding.RawDataChannel playerMetaChannel = channelRegistrar.createRawChannel(this, CommChannels.getPlayerMeta()); commManager.registerChannel(CommChannels.getPlayerMeta(), playerMetaChannel); @@ -266,7 +253,15 @@ private void registerCommunicationChannels(SpongeBungeeCommunicationManager comm ChannelBinding.RawDataChannel serverChatChannel = channelRegistrar.createRawChannel(this, CommChannels.getServerChat()); commManager.registerChannel(CommChannels.getServerChat(), serverChatChannel); + ChannelBinding.RawDataChannel serverActionChannel = channelRegistrar.createRawChannel(this, CommChannels.getServerAction()); + commManager.registerChannel(CommChannels.getServerAction(), serverActionChannel); + + ChannelBinding.RawDataChannel playerActionChannel = channelRegistrar.createRawChannel(this, CommChannels.getPlayerAction()); + commManager.registerChannel(CommChannels.getPlayerAction(), playerActionChannel); + serverChatChannel.addListener(Platform.Type.SERVER, new LocalSpongeServerChatListener()); + serverActionChannel.addListener(Platform.Type.SERVER, new LocalSpongeServerActionListener()); + playerActionChannel.addListener(Platform.Type.SERVER, new LocalSpongePlayerActionListener()); } @@ -277,18 +272,10 @@ public void onServerStop(GameStoppingServerEvent event) { Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel("multichat:comm")); commManager.unregisterChannel("multichat:comm"); - Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel("multichat:act")); - commManager.unregisterChannel("multichat:act"); - Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel("multichat:pact")); - commManager.unregisterChannel("multichat:pact"); Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel("multichat:ch")); commManager.unregisterChannel("multichat:ch"); Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel("multichat:ignore")); commManager.unregisterChannel("multichat:ignore"); - Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel("multichat:pxe")); - commManager.unregisterChannel("multichat:pxe"); - Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel("multichat:ppxe")); - commManager.unregisterChannel("multichat:ppxe"); // New channels Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel(CommChannels.getPlayerMeta())); @@ -300,6 +287,12 @@ public void onServerStop(GameStoppingServerEvent event) { Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel(CommChannels.getServerChat())); commManager.unregisterChannel(CommChannels.getServerChat()); + Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel(CommChannels.getPlayerAction())); + commManager.unregisterChannel(CommChannels.getPlayerAction()); + + Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel(CommChannels.getServerAction())); + commManager.unregisterChannel(CommChannels.getServerAction()); + if (MultiChatLocal.getInstance().getNameManager().getMode() == LocalNameManagerMode.SQL) { try { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/listeners/communication/LocalSpongeActionListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/listeners/communication/LocalSpongeServerActionListener.java similarity index 83% rename from multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/listeners/communication/LocalSpongeActionListener.java rename to multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/listeners/communication/LocalSpongeServerActionListener.java index 01d1c7f3..bf292ceb 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/listeners/communication/LocalSpongeActionListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/listeners/communication/LocalSpongeServerActionListener.java @@ -7,10 +7,10 @@ import org.spongepowered.api.network.RemoteConnection; import xyz.olivermartin.multichat.local.common.listeners.LocalBungeeMessage; -import xyz.olivermartin.multichat.local.common.listeners.communication.LocalActionListener; +import xyz.olivermartin.multichat.local.common.listeners.communication.LocalServerActionListener; import xyz.olivermartin.multichat.local.sponge.listeners.SpongeBungeeMessage; -public class LocalSpongeActionListener extends LocalActionListener implements RawDataListener { +public class LocalSpongeServerActionListener extends LocalServerActionListener implements RawDataListener { @Override public void handlePayload(ChannelBuf data, RemoteConnection connection, Type side) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyPlayerActionListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyPlayerActionListener.java new file mode 100644 index 00000000..b8818d57 --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyPlayerActionListener.java @@ -0,0 +1,62 @@ +package xyz.olivermartin.multichat.proxy.common.listeners.communication; + +import java.io.ByteArrayInputStream; +import java.io.DataInputStream; +import java.io.IOException; +import java.util.regex.PatternSyntaxException; + +import net.md_5.bungee.api.ProxyServer; +import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.md_5.bungee.api.event.PluginMessageEvent; +import net.md_5.bungee.api.plugin.Listener; +import net.md_5.bungee.event.EventHandler; +import xyz.olivermartin.multichat.bungee.MessageManager; +import xyz.olivermartin.multichat.common.communication.CommChannels; + +/** + * Listener for communication over the Player Action communication channel + * + * @author Oliver Martin (Revilo410) + * + */ +public class ProxyPlayerActionListener implements Listener { + + @EventHandler + public static void onPluginMessage(PluginMessageEvent event) { + + // Ignore if sent to a different channel + if (!event.getTag().equals(CommChannels.getPlayerAction())) return; + + event.setCancelled(true); + + ByteArrayInputStream stream = new ByteArrayInputStream(event.getData()); + DataInputStream in = new DataInputStream(stream); + + String command; + String playerRegex; + + try { + command = in.readUTF(); + playerRegex = in.readUTF(); + } catch (IOException e) { + e.printStackTrace(); + return; + } + + try { + + for (ProxiedPlayer p : ProxyServer.getInstance().getPlayers()) { + + if (p.getName().matches(playerRegex)) { + ProxyServer.getInstance().getPluginManager().dispatchCommand(p, command); + } + + } + + } catch (PatternSyntaxException e) { + MessageManager.sendMessage(ProxyServer.getInstance().getConsole(), "command_execute_regex"); + } + + } + +} diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyServerActionListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyServerActionListener.java new file mode 100644 index 00000000..aaaffb9f --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyServerActionListener.java @@ -0,0 +1,45 @@ +package xyz.olivermartin.multichat.proxy.common.listeners.communication; + +import java.io.ByteArrayInputStream; +import java.io.DataInputStream; +import java.io.IOException; + +import net.md_5.bungee.api.ProxyServer; +import net.md_5.bungee.api.event.PluginMessageEvent; +import net.md_5.bungee.api.plugin.Listener; +import net.md_5.bungee.event.EventHandler; +import xyz.olivermartin.multichat.common.communication.CommChannels; + +/** + * Listener for communication over the Server Action communication channel + * + * @author Oliver Martin (Revilo410) + * + */ +public class ProxyServerActionListener implements Listener { + + @EventHandler + public static void onPluginMessage(PluginMessageEvent event) { + + // Ignore if sent to a different channel + if (!event.getTag().equals(CommChannels.getServerAction())) return; + + event.setCancelled(true); + + ByteArrayInputStream stream = new ByteArrayInputStream(event.getData()); + DataInputStream in = new DataInputStream(stream); + + String command; + + try { + command = in.readUTF(); + } catch (IOException e) { + e.printStackTrace(); + return; + } + + ProxyServer.getInstance().getPluginManager().dispatchCommand(ProxyServer.getInstance().getConsole(), command); + + } + +} From b3beedf3369c4c55e0550991fefb644be5b52da3 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Thu, 16 Jul 2020 21:29:53 +0100 Subject: [PATCH 009/188] Fixed bug with pxe wrong channel being used --- .../multichat/common/communication/CommChannels.java | 4 ++-- .../local/common/LocalBungeeCommunicationManager.java | 7 ++----- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/common/communication/CommChannels.java b/multichat/src/main/java/xyz/olivermartin/multichat/common/communication/CommChannels.java index 1a7d97b5..a65ba6a1 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/common/communication/CommChannels.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/common/communication/CommChannels.java @@ -23,10 +23,10 @@ public class CommChannels { private static String serverData = "sdata"; // NOT REGISTERED ANYWHERE // Actions for the server console (mce/pxe) - private static String serverAction = "sact"; // NOT REGISTERED ANYWHERE + private static String serverAction = "sact"; // Bungee listener is implemented & registered // Actions for players (mce players, ppxe) - private static String playerAction = "pact"; // NOT REGISTERED ANYWHERE + private static String playerAction = "pact"; // Bungee listener is implemented & registered /** * Gets the channel id used for: diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalBungeeCommunicationManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalBungeeCommunicationManager.java index 0e58e289..3264d990 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalBungeeCommunicationManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalBungeeCommunicationManager.java @@ -13,9 +13,6 @@ */ public abstract class LocalBungeeCommunicationManager extends LocalProxyCommunicationManager { - protected final String pxeChannel = "multichat:pxe"; - protected final String ppxeChannel = "multichat:ppxe"; - protected LocalBungeeCommunicationManager(MultiChatLocalPlatform localPlatform) { super(localPlatform, MultiChatProxyPlatform.BUNGEE); } @@ -37,12 +34,12 @@ public void sendMetaUpdate(UUID uuid, String metaId, String metaValue) { @Override public void sendProxyExecuteMessage(String command) { - sendString(pxeChannel, command); + sendString(CommChannels.getServerAction(), command); } @Override public void sendProxyExecutePlayerMessage(String command, String player) { - sendStringAndString(ppxeChannel, command, player); + sendStringAndString(CommChannels.getPlayerAction(), command, player); } @Override From 9d4cdf0a780c7eaf59c0ff0658fbdbfff06554d6 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Sun, 19 Jul 2020 19:57:46 +0100 Subject: [PATCH 010/188] Unhacked the direct message hack using new pchat channel --- .../multichat/bungee/BungeeComm.java | 19 +++++++ .../bungee/commands/GlobalCommand.java | 3 +- .../bungee/commands/LocalCommand.java | 3 +- .../LocalPlayerActionListener.java | 26 ---------- .../LocalPlayerChatListener.java | 49 +++++++++++++++++++ .../spigot/MultiChatLocalSpigotPlugin.java | 2 + .../LocalSpigotPlayerActionListener.java | 5 -- .../LocalSpigotPlayerChatListener.java | 30 ++++++++++++ .../sponge/MultiChatLocalSpongePlugin.java | 2 + .../LocalSpongePlayerActionListener.java | 21 -------- .../LocalSpongePlayerChatListener.java | 46 +++++++++++++++++ 11 files changed, 150 insertions(+), 56 deletions(-) create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalPlayerChatListener.java create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotPlayerChatListener.java create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/listeners/communication/LocalSpongePlayerChatListener.java 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 17c4e286..ad7a3e51 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/BungeeComm.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/BungeeComm.java @@ -106,6 +106,25 @@ public static void sendPlayerCommandMessage(String command, String playerRegex, } + public static void sendPlayerDirectChatMessage(String channel, String player, String chatMessage, ServerInfo server) { + + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + DataOutputStream out = new DataOutputStream(stream); + + try { + + out.writeUTF(channel); + out.writeUTF(player); + out.writeUTF(chatMessage); + + } catch (IOException e) { + e.printStackTrace(); + } + + server.sendData(CommChannels.getPlayerChat(), stream.toByteArray()); + + } + public static void sendServerChatMessage(String channel, String message, ServerInfo server) { // This has been repurposed to send casts to local chat streams! diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java index 4f6c17d0..59750a18 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java @@ -94,8 +94,7 @@ public void execute(CommandSender sender, String[] args) { // Message passes through to spigot here // Send message directly to global chat... - - BungeeComm.sendPlayerCommandMessage("!SINGLE G MESSAGE!" + message, sender.getName(), ((ProxiedPlayer)sender).getServer().getInfo()); + BungeeComm.sendPlayerDirectChatMessage("global", sender.getName(), message, ((ProxiedPlayer)sender).getServer().getInfo()); if (Events.hiddenStaff.contains(player.getUniqueId())) { Events.hiddenStaff.remove(player.getUniqueId()); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java index 72888f0c..d6263e78 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java @@ -89,8 +89,7 @@ public void execute(CommandSender sender, String[] args) { // Message passes through to spigot here // Send message directly to local chat... - - BungeeComm.sendPlayerCommandMessage("!SINGLE L MESSAGE!" + message, sender.getName(), ((ProxiedPlayer)sender).getServer().getInfo()); + BungeeComm.sendPlayerDirectChatMessage("local", sender.getName(), message, ((ProxiedPlayer)sender).getServer().getInfo()); if (Events.hiddenStaff.contains(player.getUniqueId())) { Events.hiddenStaff.remove(player.getUniqueId()); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalPlayerActionListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalPlayerActionListener.java index 4ddf5a24..f89944cf 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalPlayerActionListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalPlayerActionListener.java @@ -9,8 +9,6 @@ public abstract class LocalPlayerActionListener { protected abstract void executeCommandForPlayersMatchingRegex(String playerRegex, String command); - protected abstract void sendChatAsPlayer(String playerName, String rawMessage); - protected boolean handleMessage(LocalBungeeMessage message) { try { @@ -18,12 +16,6 @@ protected boolean handleMessage(LocalBungeeMessage message) { String playerRegex = message.readUTF(); String command = message.readUTF(); - // Handle the local global direct message hack - if (isHackedMessage(command)) { - handleHackedMessage(command, playerRegex); - return true; - } - executeCommandForPlayersMatchingRegex(playerRegex, command); return true; @@ -37,22 +29,4 @@ protected boolean handleMessage(LocalBungeeMessage message) { } - private boolean isHackedMessage(String command) { - return (command.startsWith("!SINGLE L MESSAGE!") || command.startsWith("!SINGLE G MESSAGE!")); - } - - private void handleHackedMessage(String command, String player) { - - String message = command.substring("!SINGLE X MESSAGE!".length(), command.length()); - - if (command.startsWith("!SINGLE L MESSAGE!")) { - MultiChatLocal.getInstance().getChatManager().queueChatChannel(player, "local"); - } else { - MultiChatLocal.getInstance().getChatManager().queueChatChannel(player, "global"); - } - - sendChatAsPlayer(player, message); - - } - } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalPlayerChatListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalPlayerChatListener.java new file mode 100644 index 00000000..6a8872ce --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalPlayerChatListener.java @@ -0,0 +1,49 @@ +package xyz.olivermartin.multichat.local.common.listeners.communication; + +import java.io.IOException; + +import xyz.olivermartin.multichat.local.common.MultiChatLocal; +import xyz.olivermartin.multichat.local.common.listeners.LocalBungeeMessage; + +public abstract class LocalPlayerChatListener { + + protected abstract void sendChatAsPlayer(String playerName, String rawMessage); + + protected boolean handleMessage(LocalBungeeMessage message) { + + try { + + // This is used to handle the direct /local and /global messages + // Previously used the old "direct hack" in action listeners + + String channel = message.readUTF(); // TODO THIS NEEDS WORK + String player = message.readUTF(); + String chatMessage = message.readUTF(); + + switch (channel) { + + case "local": + MultiChatLocal.getInstance().getChatManager().queueChatChannel(player, "local"); + break; + case "global": + MultiChatLocal.getInstance().getChatManager().queueChatChannel(player, "global"); + break; + default: + // TODO No other channels exist at this point + break; + } + + sendChatAsPlayer(player, chatMessage); + + return true; + + } catch (IOException e) { + + MultiChatLocal.getInstance().getConsoleLogger().log("An error occurred trying to read local direct player chat message from Bungeecord, is the server lagging?"); + return false; + + } + + } + +} diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/MultiChatLocalSpigotPlugin.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/MultiChatLocalSpigotPlugin.java index 3b6e9e40..c538d7af 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/MultiChatLocalSpigotPlugin.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/MultiChatLocalSpigotPlugin.java @@ -39,6 +39,7 @@ import xyz.olivermartin.multichat.local.spigot.listeners.communication.LocalSpigotIgnoreListener; import xyz.olivermartin.multichat.local.spigot.listeners.communication.LocalSpigotPlayerActionListener; import xyz.olivermartin.multichat.local.spigot.listeners.communication.LocalSpigotPlayerChannelListener; +import xyz.olivermartin.multichat.local.spigot.listeners.communication.LocalSpigotPlayerChatListener; import xyz.olivermartin.multichat.local.spigot.listeners.communication.LocalSpigotPlayerMetaListener; import xyz.olivermartin.multichat.local.spigot.listeners.communication.LocalSpigotServerActionListener; import xyz.olivermartin.multichat.local.spigot.listeners.communication.LocalSpigotServerChatListener; @@ -182,6 +183,7 @@ private void registerCommunicationChannels() { getServer().getMessenger().registerIncomingPluginChannel(this, CommChannels.getServerChat(), new LocalSpigotServerChatListener()); getServer().getMessenger().registerIncomingPluginChannel(this, CommChannels.getServerAction(), new LocalSpigotServerActionListener()); getServer().getMessenger().registerIncomingPluginChannel(this, CommChannels.getPlayerAction(), new LocalSpigotPlayerActionListener()); + getServer().getMessenger().registerIncomingPluginChannel(this, CommChannels.getPlayerChat(), new LocalSpigotPlayerChatListener()); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotPlayerActionListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotPlayerActionListener.java index 299cb98d..e427a73f 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotPlayerActionListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotPlayerActionListener.java @@ -35,9 +35,4 @@ protected void executeCommandForPlayersMatchingRegex(String playerRegex, String } - @Override - protected void sendChatAsPlayer(String playerName, String rawMessage) { - Bukkit.getServer().getPlayer(playerName).chat(rawMessage); - } - } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotPlayerChatListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotPlayerChatListener.java new file mode 100644 index 00000000..36c6d0a2 --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotPlayerChatListener.java @@ -0,0 +1,30 @@ +package xyz.olivermartin.multichat.local.spigot.listeners.communication; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.plugin.messaging.PluginMessageListener; + +import xyz.olivermartin.multichat.common.communication.CommChannels; +import xyz.olivermartin.multichat.local.common.listeners.LocalBungeeMessage; +import xyz.olivermartin.multichat.local.common.listeners.communication.LocalPlayerChatListener; +import xyz.olivermartin.multichat.local.spigot.listeners.SpigotBungeeMessage; + +public class LocalSpigotPlayerChatListener extends LocalPlayerChatListener implements PluginMessageListener { + + @Override + public void onPluginMessageReceived(String channel, Player player, byte[] message) { + + if (!channel.equals(CommChannels.getPlayerChat())) return; + + LocalBungeeMessage lbm = new SpigotBungeeMessage(message); + + handleMessage(lbm); + + } + + @Override + protected void sendChatAsPlayer(String playerName, String rawMessage) { + Bukkit.getServer().getPlayer(playerName).chat(rawMessage); + } + +} diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/MultiChatLocalSpongePlugin.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/MultiChatLocalSpongePlugin.java index 756a22ad..88ca28c5 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/MultiChatLocalSpongePlugin.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/MultiChatLocalSpongePlugin.java @@ -53,6 +53,7 @@ import xyz.olivermartin.multichat.local.sponge.listeners.communication.LocalSpongeIgnoreListener; import xyz.olivermartin.multichat.local.sponge.listeners.communication.LocalSpongePlayerActionListener; import xyz.olivermartin.multichat.local.sponge.listeners.communication.LocalSpongePlayerChannelListener; +import xyz.olivermartin.multichat.local.sponge.listeners.communication.LocalSpongePlayerChatListener; import xyz.olivermartin.multichat.local.sponge.listeners.communication.LocalSpongePlayerMetaListener; import xyz.olivermartin.multichat.local.sponge.listeners.communication.LocalSpongeServerActionListener; import xyz.olivermartin.multichat.local.sponge.listeners.communication.LocalSpongeServerChatListener; @@ -262,6 +263,7 @@ private void registerCommunicationChannels(SpongeBungeeCommunicationManager comm serverChatChannel.addListener(Platform.Type.SERVER, new LocalSpongeServerChatListener()); serverActionChannel.addListener(Platform.Type.SERVER, new LocalSpongeServerActionListener()); playerActionChannel.addListener(Platform.Type.SERVER, new LocalSpongePlayerActionListener()); + playerChatChannel.addListener(Platform.Type.SERVER, new LocalSpongePlayerChatListener()); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/listeners/communication/LocalSpongePlayerActionListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/listeners/communication/LocalSpongePlayerActionListener.java index d90b4bd9..4ac938d6 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/listeners/communication/LocalSpongePlayerActionListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/listeners/communication/LocalSpongePlayerActionListener.java @@ -1,19 +1,12 @@ package xyz.olivermartin.multichat.local.sponge.listeners.communication; -import java.util.Optional; - import org.spongepowered.api.Platform.Type; import org.spongepowered.api.Sponge; import org.spongepowered.api.entity.living.player.Player; -import org.spongepowered.api.event.cause.Cause; -import org.spongepowered.api.event.cause.EventContext; -import org.spongepowered.api.event.cause.EventContextKeys; import org.spongepowered.api.network.ChannelBuf; import org.spongepowered.api.network.RawDataListener; import org.spongepowered.api.network.RemoteConnection; -import org.spongepowered.api.text.Text; -import xyz.olivermartin.multichat.local.common.MultiChatLocal; import xyz.olivermartin.multichat.local.common.listeners.LocalBungeeMessage; import xyz.olivermartin.multichat.local.common.listeners.communication.LocalPlayerActionListener; import xyz.olivermartin.multichat.local.sponge.listeners.SpongeBungeeMessage; @@ -44,18 +37,4 @@ protected void executeCommandForPlayersMatchingRegex(String playerRegex, String } - @Override - protected void sendChatAsPlayer(String playerName, String rawMessage) { - - Optional opPlayer = Sponge.getServer().getPlayer(playerName); - if (opPlayer.isPresent()) { - EventContext context = EventContext.builder() - .add(EventContextKeys.PLAYER_SIMULATED, opPlayer.get().getProfile()) - .add(EventContextKeys.PLUGIN, Sponge.getPluginManager().getPlugin(MultiChatLocal.getInstance().getPluginName()).get()) - .build(); - opPlayer.get().simulateChat(Text.of(rawMessage), Cause.builder().append(opPlayer.get()).append(Sponge.getPluginManager().getPlugin(MultiChatLocal.getInstance().getPluginName()).get()).build(context)); - } - - } - } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/listeners/communication/LocalSpongePlayerChatListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/listeners/communication/LocalSpongePlayerChatListener.java new file mode 100644 index 00000000..5a25488f --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/listeners/communication/LocalSpongePlayerChatListener.java @@ -0,0 +1,46 @@ +package xyz.olivermartin.multichat.local.sponge.listeners.communication; + +import java.util.Optional; + +import org.spongepowered.api.Platform.Type; +import org.spongepowered.api.Sponge; +import org.spongepowered.api.entity.living.player.Player; +import org.spongepowered.api.event.cause.Cause; +import org.spongepowered.api.event.cause.EventContext; +import org.spongepowered.api.event.cause.EventContextKeys; +import org.spongepowered.api.network.ChannelBuf; +import org.spongepowered.api.network.RawDataListener; +import org.spongepowered.api.network.RemoteConnection; +import org.spongepowered.api.text.Text; + +import xyz.olivermartin.multichat.local.common.MultiChatLocal; +import xyz.olivermartin.multichat.local.common.listeners.LocalBungeeMessage; +import xyz.olivermartin.multichat.local.common.listeners.communication.LocalPlayerChatListener; +import xyz.olivermartin.multichat.local.sponge.listeners.SpongeBungeeMessage; + +public class LocalSpongePlayerChatListener extends LocalPlayerChatListener implements RawDataListener { + + @Override + public void handlePayload(ChannelBuf data, RemoteConnection connection, Type side) { + + LocalBungeeMessage lbm = new SpongeBungeeMessage(data); + + handleMessage(lbm); + + } + + @Override + protected void sendChatAsPlayer(String playerName, String rawMessage) { + + Optional opPlayer = Sponge.getServer().getPlayer(playerName); + if (opPlayer.isPresent()) { + EventContext context = EventContext.builder() + .add(EventContextKeys.PLAYER_SIMULATED, opPlayer.get().getProfile()) + .add(EventContextKeys.PLUGIN, Sponge.getPluginManager().getPlugin(MultiChatLocal.getInstance().getPluginName()).get()) + .build(); + opPlayer.get().simulateChat(Text.of(rawMessage), Cause.builder().append(opPlayer.get()).append(Sponge.getPluginManager().getPlugin(MultiChatLocal.getInstance().getPluginName()).get()).build(context)); + } + + } + +} From d63b9e1f74c38c0859067a8af212d780c7f3f1c4 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Sun, 19 Jul 2020 20:11:21 +0100 Subject: [PATCH 011/188] Refactored BungeeComm to ProxyLocalCommunicationManager --- .../multichat/bungee/ChatControl.java | 5 +-- .../multichat/bungee/ChatModeManager.java | 5 +-- .../olivermartin/multichat/bungee/Events.java | 15 ++++---- .../multichat/bungee/LocalChannel.java | 3 +- .../multichat/bungee/MultiChat.java | 12 +++---- .../bungee/commands/ChannelCommand.java | 4 +-- .../bungee/commands/GlobalCommand.java | 8 ++--- .../bungee/commands/IgnoreCommand.java | 4 +-- .../bungee/commands/LocalCommand.java | 8 ++--- .../multichat/bungee/commands/MsgCommand.java | 10 +++--- .../commands/MultiChatExecuteCommand.java | 6 ++-- .../bungee/commands/StaffListCommand.java | 4 +-- .../ProxyLocalCommunicationManager.java} | 35 +++++-------------- 13 files changed, 52 insertions(+), 67 deletions(-) rename multichat/src/main/java/xyz/olivermartin/multichat/{bungee/BungeeComm.java => proxy/common/ProxyLocalCommunicationManager.java} (84%) 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 443e3e4d..2ff6afdf 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatControl.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatControl.java @@ -13,6 +13,7 @@ import net.md_5.bungee.api.config.ServerInfo; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.config.Configuration; +import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; public class ChatControl { @@ -118,7 +119,7 @@ public static void setIgnoreMap(Map> ignoreMap) { if ((Boolean) dictionary.get("spigot")) { ServerInfo server = ProxyServer.getInstance().getPlayer(playerName).getServer().getInfo(); - BungeeComm.sendCommandMessage(String.valueOf(dictionary.get("command")).replaceAll("%PLAYER%", playerName), server); + ProxyLocalCommunicationManager.sendCommandMessage(String.valueOf(dictionary.get("command")).replaceAll("%PLAYER%", playerName), server); } else { ProxyServer.getInstance().getPluginManager().dispatchCommand(ProxyServer.getInstance().getConsole(), String.valueOf(dictionary.get("command")).replaceAll("%PLAYER%", playerName)); @@ -371,7 +372,7 @@ public static boolean handleSpam(ProxiedPlayer player, String message, String ch if (config.getBoolean("anti_spam_spigot")) { ServerInfo server = player.getServer().getInfo(); - BungeeComm.sendCommandMessage(config.getString("anti_spam_command").replaceAll("%PLAYER%", player.getName()), server); + ProxyLocalCommunicationManager.sendCommandMessage(config.getString("anti_spam_command").replaceAll("%PLAYER%", player.getName()), server); } else { ProxyServer.getInstance().getPluginManager().dispatchCommand(ProxyServer.getInstance().getConsole(), config.getString("anti_spam_command").replaceAll("%PLAYER%", player.getName())); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatModeManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatModeManager.java index 90ab8072..347ce06d 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatModeManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatModeManager.java @@ -6,6 +6,7 @@ import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.connection.ProxiedPlayer; +import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; public class ChatModeManager { @@ -44,7 +45,7 @@ public void setLocal(UUID uuid) { MessageManager.sendSpecialMessage(player, "command_channel_show", "LOCAL"); } - BungeeComm.sendPlayerChannelMessage(player.getName(), Channel.getChannel(uuid).getName(), Channel.getChannel(uuid), player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); + ProxyLocalCommunicationManager.sendPlayerChannelMessage(player.getName(), Channel.getChannel(uuid).getName(), Channel.getChannel(uuid), player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); } @@ -65,7 +66,7 @@ public void setGlobal(UUID uuid) { MessageManager.sendSpecialMessage(player, "command_channel_show", "GLOBAL"); } - BungeeComm.sendPlayerChannelMessage(player.getName(), Channel.getChannel(uuid).getName(), Channel.getChannel(uuid), player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); + ProxyLocalCommunicationManager.sendPlayerChannelMessage(player.getName(), Channel.getChannel(uuid).getName(), Channel.getChannel(uuid), player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); } 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 7b8955ba..abc003aa 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Events.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Events.java @@ -30,6 +30,7 @@ import xyz.olivermartin.multichat.bungee.commands.GCCommand; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; +import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; /** * Events Manager @@ -162,7 +163,7 @@ public void onChat(ChatEvent event) { /// if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean("fetch_spigot_display_names") == true) { if (player.getServer() != null) { - BungeeComm.sendMessage(player.getName(), player.getServer().getInfo()); + ProxyLocalCommunicationManager.sendMessage(player.getName(), player.getServer().getInfo()); } } /// @@ -266,8 +267,8 @@ public void onChat(ChatEvent event) { ProxiedPlayer target = ProxyServer.getInstance().getPlayer((UUID)PMToggle.get(player.getUniqueId())); - BungeeComm.sendMessage(player.getName(), player.getServer().getInfo()); - BungeeComm.sendMessage(target.getName(), target.getServer().getInfo()); + ProxyLocalCommunicationManager.sendMessage(player.getName(), player.getServer().getInfo()); + ProxyLocalCommunicationManager.sendMessage(target.getName(), target.getServer().getInfo()); if (!ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList("no_pm").contains(player.getServer().getInfo().getName())) { @@ -395,7 +396,7 @@ public void onChat(ChatEvent event) { DebugManager.log("Does player have rgb colour permission? " + (player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); // 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")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); + ProxyLocalCommunicationManager.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")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); // Message passes through to spigot here @@ -645,14 +646,14 @@ public void onServerSwitch(ServerSwitchEvent event) { public void run() { try { - BungeeComm.sendPlayerChannelMessage(event.getPlayer().getName(), Channel.getChannel(event.getPlayer().getUniqueId()).getName(), Channel.getChannel(event.getPlayer().getUniqueId()), event.getPlayer().getServer().getInfo(), (event.getPlayer().hasPermission("multichat.chat.colour")||event.getPlayer().hasPermission("multichat.chat.color")||event.getPlayer().hasPermission("multichat.chat.colour.simple")||event.getPlayer().hasPermission("multichat.chat.color.simple")), (event.getPlayer().hasPermission("multichat.chat.colour")||event.getPlayer().hasPermission("multichat.chat.color")||event.getPlayer().hasPermission("multichat.chat.colour.rgb")||event.getPlayer().hasPermission("multichat.chat.color.rgb"))); + ProxyLocalCommunicationManager.sendPlayerChannelMessage(event.getPlayer().getName(), Channel.getChannel(event.getPlayer().getUniqueId()).getName(), Channel.getChannel(event.getPlayer().getUniqueId()), event.getPlayer().getServer().getInfo(), (event.getPlayer().hasPermission("multichat.chat.colour")||event.getPlayer().hasPermission("multichat.chat.color")||event.getPlayer().hasPermission("multichat.chat.colour.simple")||event.getPlayer().hasPermission("multichat.chat.color.simple")), (event.getPlayer().hasPermission("multichat.chat.colour")||event.getPlayer().hasPermission("multichat.chat.color")||event.getPlayer().hasPermission("multichat.chat.colour.rgb")||event.getPlayer().hasPermission("multichat.chat.color.rgb"))); // LEGACY SERVER HACK if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList("legacy_servers").contains(event.getPlayer().getServer().getInfo().getName())) { DebugManager.log("Player: " + event.getPlayer().getName() + ", switching to server: " + event.getPlayer().getServer().getInfo().getName() + ", is a LEGACY server!"); - BungeeComm.sendCommandMessage("!!!LEGACYSERVER!!!", event.getPlayer().getServer().getInfo()); + ProxyLocalCommunicationManager.sendCommandMessage("!!!LEGACYSERVER!!!", event.getPlayer().getServer().getInfo()); } else { - BungeeComm.sendCommandMessage("!!!NOTLEGACYSERVER!!!", event.getPlayer().getServer().getInfo()); + ProxyLocalCommunicationManager.sendCommandMessage("!!!NOTLEGACYSERVER!!!", event.getPlayer().getServer().getInfo()); } } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/LocalChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/LocalChannel.java index 7f40aa78..dc1f093a 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/LocalChannel.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/LocalChannel.java @@ -2,6 +2,7 @@ import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.connection.ProxiedPlayer; +import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; public class LocalChannel extends Channel { @@ -24,7 +25,7 @@ public void sendMessage(String message, CommandSender sender) { // Use this to relay CASTS to local chat! if (sender instanceof ProxiedPlayer) { - BungeeComm.sendServerChatMessage("local", message, ((ProxiedPlayer)sender).getServer().getInfo()); + ProxyLocalCommunicationManager.sendServerChatMessage("local", message, ((ProxiedPlayer)sender).getServer().getInfo()); } } 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 736ce8ab..18d21498 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java @@ -29,6 +29,7 @@ import xyz.olivermartin.multichat.common.communication.CommChannels; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; +import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; import xyz.olivermartin.multichat.proxy.common.listeners.communication.ProxyPlayerActionListener; import xyz.olivermartin.multichat.proxy.common.listeners.communication.ProxyPlayerChatListener; import xyz.olivermartin.multichat.proxy.common.listeners.communication.ProxyPlayerMetaListener; @@ -140,7 +141,7 @@ public void run() { for (ProxiedPlayer player : ProxyServer.getInstance().getPlayers()) { if (player.getServer() != null) { - BungeeComm.sendMessage(player.getName(), player.getServer().getInfo()); + ProxyLocalCommunicationManager.sendMessage(player.getName(), player.getServer().getInfo()); } } @@ -178,7 +179,7 @@ public void run() { ProxiedPlayer player = getProxy().getPlayer(playername); if (player.getServer() != null) { - BungeeComm.sendMessage(player.getName(), player.getServer().getInfo()); + ProxyLocalCommunicationManager.sendMessage(player.getName(), player.getServer().getInfo()); } } @@ -198,7 +199,7 @@ public void run() { ProxiedPlayer player = getProxy().getPlayer(playername); if (player.getServer() != null) { - BungeeComm.sendMessage(player.getName(), player.getServer().getInfo()); + ProxyLocalCommunicationManager.sendMessage(player.getName(), player.getServer().getInfo()); } } @@ -219,7 +220,7 @@ public void run() { ProxiedPlayer player = getProxy().getPlayer(playername); if (player.getServer() != null) { - BungeeComm.sendMessage(player.getName(), player.getServer().getInfo()); + ProxyLocalCommunicationManager.sendMessage(player.getName(), player.getServer().getInfo()); } } @@ -240,7 +241,7 @@ public void run() { ProxiedPlayer player = getProxy().getPlayer(playername); if (player.getServer() != null) { - BungeeComm.sendMessage(player.getName(), player.getServer().getInfo()); + ProxyLocalCommunicationManager.sendMessage(player.getName(), player.getServer().getInfo()); } } @@ -311,7 +312,6 @@ public void onEnable() { getProxy().registerChannel("multichat:comm"); // TODO LEGACY getProxy().registerChannel("multichat:ch"); // TODO LEGACY getProxy().registerChannel("multichat:ignore"); // TODO LEGACY - getProxy().getPluginManager().registerListener(this, new BungeeComm()); // TODO LEGACY // New communication channels getProxy().registerChannel(CommChannels.getPlayerMeta()); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ChannelCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ChannelCommand.java index 772eb377..b4948ecc 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ChannelCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ChannelCommand.java @@ -4,11 +4,11 @@ import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.plugin.Command; -import xyz.olivermartin.multichat.bungee.BungeeComm; import xyz.olivermartin.multichat.bungee.Channel; import xyz.olivermartin.multichat.bungee.ChatModeManager; import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.MessageManager; +import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; /** * Chat Channel Command @@ -142,7 +142,7 @@ public void execute(CommandSender sender, String[] args) { // Update local channel info for (ProxiedPlayer p : ProxyServer.getInstance().getPlayers()) { - BungeeComm.sendPlayerChannelMessage(p.getName(), Channel.getChannel(p.getUniqueId()).getName(), Channel.getChannel(p.getUniqueId()), p.getServer().getInfo(), (p.hasPermission("multichat.chat.colour")||p.hasPermission("multichat.chat.color")||p.hasPermission("multichat.chat.colour.simple")||p.hasPermission("multichat.chat.color.simple")), (p.hasPermission("multichat.chat.colour")||p.hasPermission("multichat.chat.color")||p.hasPermission("multichat.chat.colour.rgb")||p.hasPermission("multichat.chat.color.rgb"))); + ProxyLocalCommunicationManager.sendPlayerChannelMessage(p.getName(), Channel.getChannel(p.getUniqueId()).getName(), Channel.getChannel(p.getUniqueId()), p.getServer().getInfo(), (p.hasPermission("multichat.chat.colour")||p.hasPermission("multichat.chat.color")||p.hasPermission("multichat.chat.colour.simple")||p.hasPermission("multichat.chat.color.simple")), (p.hasPermission("multichat.chat.colour")||p.hasPermission("multichat.chat.color")||p.hasPermission("multichat.chat.colour.rgb")||p.hasPermission("multichat.chat.color.rgb"))); } } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java index 59750a18..4921df99 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java @@ -5,7 +5,6 @@ import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.plugin.Command; -import xyz.olivermartin.multichat.bungee.BungeeComm; import xyz.olivermartin.multichat.bungee.Channel; import xyz.olivermartin.multichat.bungee.ChatControl; import xyz.olivermartin.multichat.bungee.ChatModeManager; @@ -15,6 +14,7 @@ import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.bungee.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; /** * Global Command @@ -50,7 +50,7 @@ public void execute(CommandSender sender, String[] args) { if (!ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList("no_global").contains(player.getServer().getInfo().getName())) { if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean("fetch_spigot_display_names") == true) { - BungeeComm.sendMessage(player.getName(), player.getServer().getInfo()); + ProxyLocalCommunicationManager.sendMessage(player.getName(), player.getServer().getInfo()); } if ((!MultiChatProxy.getInstance().getDataStore().isChatFrozen()) || (player.hasPermission("multichat.chat.always"))) { @@ -89,12 +89,12 @@ public void execute(CommandSender sender, String[] args) { } // 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")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); + ProxyLocalCommunicationManager.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")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); // Message passes through to spigot here // Send message directly to global chat... - BungeeComm.sendPlayerDirectChatMessage("global", sender.getName(), message, ((ProxiedPlayer)sender).getServer().getInfo()); + ProxyLocalCommunicationManager.sendPlayerDirectChatMessage("global", sender.getName(), message, ((ProxiedPlayer)sender).getServer().getInfo()); if (Events.hiddenStaff.contains(player.getUniqueId())) { Events.hiddenStaff.remove(player.getUniqueId()); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/IgnoreCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/IgnoreCommand.java index c4f88496..6ba394ed 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/IgnoreCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/IgnoreCommand.java @@ -4,10 +4,10 @@ import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.plugin.Command; -import xyz.olivermartin.multichat.bungee.BungeeComm; import xyz.olivermartin.multichat.bungee.ChatControl; import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.MessageManager; +import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; public class IgnoreCommand extends Command { @@ -50,7 +50,7 @@ public void execute(CommandSender sender, String[] args) { MessageManager.sendSpecialMessage(sender, "ignore_unignored", target.getName()); } - BungeeComm.sendIgnoreMap(((ProxiedPlayer) sender).getServer().getInfo()); + ProxyLocalCommunicationManager.sendIgnoreMap(((ProxiedPlayer) sender).getServer().getInfo()); } else { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java index d6263e78..5f97b666 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java @@ -5,7 +5,6 @@ import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.plugin.Command; -import xyz.olivermartin.multichat.bungee.BungeeComm; import xyz.olivermartin.multichat.bungee.Channel; import xyz.olivermartin.multichat.bungee.ChatControl; import xyz.olivermartin.multichat.bungee.ChatModeManager; @@ -15,6 +14,7 @@ import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.bungee.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; /** * Local Chat Command @@ -46,7 +46,7 @@ public void execute(CommandSender sender, String[] args) { ProxiedPlayer player = (ProxiedPlayer)sender; if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean("fetch_spigot_display_names") == true) { - BungeeComm.sendMessage(player.getName(), player.getServer().getInfo()); + ProxyLocalCommunicationManager.sendMessage(player.getName(), player.getServer().getInfo()); } if ((!MultiChatProxy.getInstance().getDataStore().isChatFrozen()) || (player.hasPermission("multichat.chat.always"))) { @@ -85,11 +85,11 @@ public void execute(CommandSender sender, String[] args) { } // 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")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); + ProxyLocalCommunicationManager.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")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); // Message passes through to spigot here // Send message directly to local chat... - BungeeComm.sendPlayerDirectChatMessage("local", sender.getName(), message, ((ProxiedPlayer)sender).getServer().getInfo()); + ProxyLocalCommunicationManager.sendPlayerDirectChatMessage("local", sender.getName(), message, ((ProxiedPlayer)sender).getServer().getInfo()); if (Events.hiddenStaff.contains(player.getUniqueId())) { Events.hiddenStaff.remove(player.getUniqueId()); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MsgCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MsgCommand.java index 22fc963c..8df17089 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MsgCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MsgCommand.java @@ -11,7 +11,6 @@ import net.md_5.bungee.api.plugin.Command; import net.md_5.bungee.api.plugin.TabExecutor; import net.md_5.bungee.config.Configuration; -import xyz.olivermartin.multichat.bungee.BungeeComm; import xyz.olivermartin.multichat.bungee.ChatControl; import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.Events; @@ -19,6 +18,7 @@ import xyz.olivermartin.multichat.bungee.MultiChat; import xyz.olivermartin.multichat.bungee.MultiChatUtil; import xyz.olivermartin.multichat.bungee.PrivateMessageManager; +import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; /** * Message Command @@ -149,8 +149,8 @@ public void execute(CommandSender sender, String[] args) { if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean("fetch_spigot_display_names") == true) { - BungeeComm.sendMessage(sender.getName(), ((ProxiedPlayer)sender).getServer().getInfo()); - BungeeComm.sendMessage(target.getName(), target.getServer().getInfo()); + ProxyLocalCommunicationManager.sendMessage(sender.getName(), ((ProxiedPlayer)sender).getServer().getInfo()); + ProxyLocalCommunicationManager.sendMessage(target.getName(), target.getServer().getInfo()); } @@ -184,7 +184,7 @@ public void execute(CommandSender sender, String[] args) { if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean("fetch_spigot_display_names") == true) { - BungeeComm.sendMessage(sender.getName(), ((ProxiedPlayer)sender).getServer().getInfo()); + ProxyLocalCommunicationManager.sendMessage(sender.getName(), ((ProxiedPlayer)sender).getServer().getInfo()); } @@ -214,7 +214,7 @@ public void execute(CommandSender sender, String[] args) { if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean("fetch_spigot_display_names") == true) { - BungeeComm.sendMessage(target.getName(), target.getServer().getInfo()); + ProxyLocalCommunicationManager.sendMessage(target.getName(), target.getServer().getInfo()); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MultiChatExecuteCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MultiChatExecuteCommand.java index 7057521b..1def1691 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MultiChatExecuteCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MultiChatExecuteCommand.java @@ -7,9 +7,9 @@ import net.md_5.bungee.api.config.ServerInfo; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.plugin.Command; -import xyz.olivermartin.multichat.bungee.BungeeComm; import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.MessageManager; +import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; /** * Execute Command @@ -79,11 +79,11 @@ public void execute(CommandSender sender, String[] args) { if (playerFlag) { for (ProxiedPlayer p : ProxyServer.getInstance().getPlayers()) { if (p.getName().matches(player)) { - BungeeComm.sendPlayerCommandMessage(message, p.getName(), s); + ProxyLocalCommunicationManager.sendPlayerCommandMessage(message, p.getName(), s); } } } else { - BungeeComm.sendCommandMessage(message, s); + ProxyLocalCommunicationManager.sendCommandMessage(message, s); } } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/StaffListCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/StaffListCommand.java index 96e2bb7a..2dda033f 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/StaffListCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/StaffListCommand.java @@ -7,11 +7,11 @@ import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.plugin.Command; -import xyz.olivermartin.multichat.bungee.BungeeComm; import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.DebugManager; import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.bungee.MultiChat; +import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; /** * Staff List Command @@ -75,7 +75,7 @@ public void execute(CommandSender sender, String[] args) { if (onlineplayer2.getServer().getInfo().getName().equals(server)) { if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean("fetch_spigot_display_names") == true) { - BungeeComm.sendMessage(onlineplayer2.getName(), onlineplayer2.getServer().getInfo()); + ProxyLocalCommunicationManager.sendMessage(onlineplayer2.getName(), onlineplayer2.getServer().getInfo()); } staff = true; diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/BungeeComm.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyLocalCommunicationManager.java similarity index 84% rename from multichat/src/main/java/xyz/olivermartin/multichat/bungee/BungeeComm.java rename to multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyLocalCommunicationManager.java index ad7a3e51..99fef939 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/BungeeComm.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyLocalCommunicationManager.java @@ -1,4 +1,4 @@ -package xyz.olivermartin.multichat.bungee; +package xyz.olivermartin.multichat.proxy.common; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; @@ -6,21 +6,21 @@ import java.io.ObjectOutputStream; import net.md_5.bungee.api.config.ServerInfo; -import net.md_5.bungee.api.connection.Server; -import net.md_5.bungee.api.event.PluginMessageEvent; -import net.md_5.bungee.api.plugin.Listener; import net.md_5.bungee.config.Configuration; -import net.md_5.bungee.event.EventHandler; +import xyz.olivermartin.multichat.bungee.Channel; +import xyz.olivermartin.multichat.bungee.ChatControl; +import xyz.olivermartin.multichat.bungee.ConfigManager; +import xyz.olivermartin.multichat.bungee.DebugManager; import xyz.olivermartin.multichat.common.communication.CommChannels; /** - * Bungee Communication Manager - *

Manages all plug-in messaging channels on the BungeeCord side

+ * Proxy -> Local communication manager + *

Manages all plugin messaging channels on the BungeeCord side

* * @author Oliver Martin (Revilo410) * */ -public class BungeeComm implements Listener { +public class ProxyLocalCommunicationManager { public static void sendMessage(String message, ServerInfo server) { @@ -192,23 +192,4 @@ public static void sendPlayerChannelMessage(String playerName, String channel, C } - @EventHandler - public static void onPluginMessage(PluginMessageEvent ev) { - - if (! (ev.getTag().equals("multichat:comm") )) { - return; - } - - if (!(ev.getSender() instanceof Server)) { - return; - } - - if (ev.getTag().equals("multichat:comm")) { - - // TODO Remove - legacy - return; - - } - - } } From 17709557d402b482c4aec28749c2ad84a77728d6 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Sun, 19 Jul 2020 20:59:04 +0100 Subject: [PATCH 012/188] Refactored the multichat:channel channel to pdata channel --- .../multichat/bungee/ChatModeManager.java | 4 ++-- .../xyz/olivermartin/multichat/bungee/Events.java | 4 ++-- .../olivermartin/multichat/bungee/MultiChat.java | 2 +- .../multichat/bungee/commands/ChannelCommand.java | 2 +- .../multichat/bungee/commands/GlobalCommand.java | 2 +- .../multichat/bungee/commands/LocalCommand.java | 2 +- ...lListener.java => LocalPlayerDataListener.java} | 6 +++--- .../local/spigot/MultiChatLocalSpigotPlugin.java | 4 ++-- ...ner.java => LocalSpigotPlayerDataListener.java} | 9 +++++---- .../local/sponge/MultiChatLocalSpongePlugin.java | 14 ++++++++------ ...ner.java => LocalSpongePlayerDataListener.java} | 6 +++--- .../common/ProxyLocalCommunicationManager.java | 6 +++--- 12 files changed, 32 insertions(+), 29 deletions(-) rename multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/{LocalPlayerChannelListener.java => LocalPlayerDataListener.java} (89%) rename multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/{LocalSpigotPlayerChannelListener.java => LocalSpigotPlayerDataListener.java} (76%) rename multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/listeners/communication/{LocalSpongePlayerChannelListener.java => LocalSpongePlayerDataListener.java} (84%) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatModeManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatModeManager.java index 347ce06d..986942be 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatModeManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatModeManager.java @@ -45,7 +45,7 @@ public void setLocal(UUID uuid) { MessageManager.sendSpecialMessage(player, "command_channel_show", "LOCAL"); } - ProxyLocalCommunicationManager.sendPlayerChannelMessage(player.getName(), Channel.getChannel(uuid).getName(), Channel.getChannel(uuid), player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); + ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), Channel.getChannel(uuid).getName(), Channel.getChannel(uuid), player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); } @@ -66,7 +66,7 @@ public void setGlobal(UUID uuid) { MessageManager.sendSpecialMessage(player, "command_channel_show", "GLOBAL"); } - ProxyLocalCommunicationManager.sendPlayerChannelMessage(player.getName(), Channel.getChannel(uuid).getName(), Channel.getChannel(uuid), player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); + ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), Channel.getChannel(uuid).getName(), Channel.getChannel(uuid), player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); } 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 abc003aa..d2d0b8d0 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Events.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Events.java @@ -396,7 +396,7 @@ public void onChat(ChatEvent event) { DebugManager.log("Does player have rgb colour permission? " + (player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); // Let server know players channel preference - ProxyLocalCommunicationManager.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")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); + ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), Channel.getChannel(player.getUniqueId()).getName(), Channel.getChannel(player.getUniqueId()), player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); // Message passes through to spigot here @@ -646,7 +646,7 @@ public void onServerSwitch(ServerSwitchEvent event) { public void run() { try { - ProxyLocalCommunicationManager.sendPlayerChannelMessage(event.getPlayer().getName(), Channel.getChannel(event.getPlayer().getUniqueId()).getName(), Channel.getChannel(event.getPlayer().getUniqueId()), event.getPlayer().getServer().getInfo(), (event.getPlayer().hasPermission("multichat.chat.colour")||event.getPlayer().hasPermission("multichat.chat.color")||event.getPlayer().hasPermission("multichat.chat.colour.simple")||event.getPlayer().hasPermission("multichat.chat.color.simple")), (event.getPlayer().hasPermission("multichat.chat.colour")||event.getPlayer().hasPermission("multichat.chat.color")||event.getPlayer().hasPermission("multichat.chat.colour.rgb")||event.getPlayer().hasPermission("multichat.chat.color.rgb"))); + ProxyLocalCommunicationManager.sendPlayerDataMessage(event.getPlayer().getName(), Channel.getChannel(event.getPlayer().getUniqueId()).getName(), Channel.getChannel(event.getPlayer().getUniqueId()), event.getPlayer().getServer().getInfo(), (event.getPlayer().hasPermission("multichat.chat.colour")||event.getPlayer().hasPermission("multichat.chat.color")||event.getPlayer().hasPermission("multichat.chat.colour.simple")||event.getPlayer().hasPermission("multichat.chat.color.simple")), (event.getPlayer().hasPermission("multichat.chat.colour")||event.getPlayer().hasPermission("multichat.chat.color")||event.getPlayer().hasPermission("multichat.chat.colour.rgb")||event.getPlayer().hasPermission("multichat.chat.color.rgb"))); // LEGACY SERVER HACK if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList("legacy_servers").contains(event.getPlayer().getServer().getInfo().getName())) { 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 18d21498..8ca558fe 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java @@ -310,7 +310,6 @@ public void onEnable() { // Register communication channels and appropriate listeners getProxy().registerChannel("multichat:comm"); // TODO LEGACY - getProxy().registerChannel("multichat:ch"); // TODO LEGACY getProxy().registerChannel("multichat:ignore"); // TODO LEGACY // New communication channels @@ -319,6 +318,7 @@ public void onEnable() { getProxy().registerChannel(CommChannels.getServerChat()); getProxy().registerChannel(CommChannels.getPlayerAction()); getProxy().registerChannel(CommChannels.getServerAction()); + getProxy().registerChannel(CommChannels.getPlayerData()); getProxy().getPluginManager().registerListener(this, new ProxyPlayerMetaListener()); getProxy().getPluginManager().registerListener(this, new ProxyPlayerChatListener()); getProxy().getPluginManager().registerListener(this, new ProxyPlayerActionListener()); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ChannelCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ChannelCommand.java index b4948ecc..ddb48f97 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ChannelCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ChannelCommand.java @@ -142,7 +142,7 @@ public void execute(CommandSender sender, String[] args) { // Update local channel info for (ProxiedPlayer p : ProxyServer.getInstance().getPlayers()) { - ProxyLocalCommunicationManager.sendPlayerChannelMessage(p.getName(), Channel.getChannel(p.getUniqueId()).getName(), Channel.getChannel(p.getUniqueId()), p.getServer().getInfo(), (p.hasPermission("multichat.chat.colour")||p.hasPermission("multichat.chat.color")||p.hasPermission("multichat.chat.colour.simple")||p.hasPermission("multichat.chat.color.simple")), (p.hasPermission("multichat.chat.colour")||p.hasPermission("multichat.chat.color")||p.hasPermission("multichat.chat.colour.rgb")||p.hasPermission("multichat.chat.color.rgb"))); + ProxyLocalCommunicationManager.sendPlayerDataMessage(p.getName(), Channel.getChannel(p.getUniqueId()).getName(), Channel.getChannel(p.getUniqueId()), p.getServer().getInfo(), (p.hasPermission("multichat.chat.colour")||p.hasPermission("multichat.chat.color")||p.hasPermission("multichat.chat.colour.simple")||p.hasPermission("multichat.chat.color.simple")), (p.hasPermission("multichat.chat.colour")||p.hasPermission("multichat.chat.color")||p.hasPermission("multichat.chat.colour.rgb")||p.hasPermission("multichat.chat.color.rgb"))); } } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java index 4921df99..d51076cc 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java @@ -89,7 +89,7 @@ public void execute(CommandSender sender, String[] args) { } // Let server know players channel preference - ProxyLocalCommunicationManager.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")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); + ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), Channel.getChannel(player.getUniqueId()).getName(), Channel.getChannel(player.getUniqueId()), player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); // Message passes through to spigot here diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java index 5f97b666..dfc9c91e 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java @@ -85,7 +85,7 @@ public void execute(CommandSender sender, String[] args) { } // Let server know players channel preference - ProxyLocalCommunicationManager.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")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); + ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), Channel.getChannel(player.getUniqueId()).getName(), Channel.getChannel(player.getUniqueId()), player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); // Message passes through to spigot here // Send message directly to local chat... diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalPlayerChannelListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalPlayerDataListener.java similarity index 89% rename from multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalPlayerChannelListener.java rename to multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalPlayerDataListener.java index a6cc3223..eb205efa 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalPlayerChannelListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalPlayerDataListener.java @@ -11,7 +11,7 @@ import xyz.olivermartin.multichat.local.common.MultiChatLocalPlayer; import xyz.olivermartin.multichat.local.common.listeners.LocalBungeeObjectMessage; -public abstract class LocalPlayerChannelListener { +public abstract class LocalPlayerDataListener { protected abstract Optional getPlayerFromName(String playername); @@ -56,12 +56,12 @@ protected boolean handleMessage(LocalBungeeObjectMessage message) { } catch (IOException e) { - MultiChatLocal.getInstance().getConsoleLogger().log("An error occurred trying to read local channel message from Bungeecord, is the server lagging?"); + MultiChatLocal.getInstance().getConsoleLogger().log("An error occurred trying to read player data message from Bungeecord, is the server lagging?"); return false; } catch (ClassNotFoundException e) { - MultiChatLocal.getInstance().getConsoleLogger().log("Could not read List of UUIDs from local channel message..."); + MultiChatLocal.getInstance().getConsoleLogger().log("Could not read List of UUIDs from local player data message..."); return false; } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/MultiChatLocalSpigotPlugin.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/MultiChatLocalSpigotPlugin.java index c538d7af..83378f25 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/MultiChatLocalSpigotPlugin.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/MultiChatLocalSpigotPlugin.java @@ -38,8 +38,8 @@ import xyz.olivermartin.multichat.local.spigot.listeners.chat.LocalSpigotChatListenerMonitor; import xyz.olivermartin.multichat.local.spigot.listeners.communication.LocalSpigotIgnoreListener; import xyz.olivermartin.multichat.local.spigot.listeners.communication.LocalSpigotPlayerActionListener; -import xyz.olivermartin.multichat.local.spigot.listeners.communication.LocalSpigotPlayerChannelListener; import xyz.olivermartin.multichat.local.spigot.listeners.communication.LocalSpigotPlayerChatListener; +import xyz.olivermartin.multichat.local.spigot.listeners.communication.LocalSpigotPlayerDataListener; import xyz.olivermartin.multichat.local.spigot.listeners.communication.LocalSpigotPlayerMetaListener; import xyz.olivermartin.multichat.local.spigot.listeners.communication.LocalSpigotServerActionListener; import xyz.olivermartin.multichat.local.spigot.listeners.communication.LocalSpigotServerChatListener; @@ -172,7 +172,6 @@ private void registerCommunicationChannels() { getServer().getMessenger().registerOutgoingPluginChannel(this, "multichat:comm"); getServer().getMessenger().registerIncomingPluginChannel(this, "multichat:comm", new LocalSpigotPlayerMetaListener()); - getServer().getMessenger().registerIncomingPluginChannel(this, "multichat:ch", new LocalSpigotPlayerChannelListener()); getServer().getMessenger().registerIncomingPluginChannel(this, "multichat:ignore", new LocalSpigotIgnoreListener()); // New channels @@ -184,6 +183,7 @@ private void registerCommunicationChannels() { getServer().getMessenger().registerIncomingPluginChannel(this, CommChannels.getServerAction(), new LocalSpigotServerActionListener()); getServer().getMessenger().registerIncomingPluginChannel(this, CommChannels.getPlayerAction(), new LocalSpigotPlayerActionListener()); getServer().getMessenger().registerIncomingPluginChannel(this, CommChannels.getPlayerChat(), new LocalSpigotPlayerChatListener()); + getServer().getMessenger().registerIncomingPluginChannel(this, CommChannels.getPlayerData(), new LocalSpigotPlayerDataListener()); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotPlayerChannelListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotPlayerDataListener.java similarity index 76% rename from multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotPlayerChannelListener.java rename to multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotPlayerDataListener.java index 0d42a705..6cd807b0 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotPlayerChannelListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotPlayerDataListener.java @@ -7,19 +7,20 @@ import org.bukkit.entity.Player; import org.bukkit.plugin.messaging.PluginMessageListener; +import xyz.olivermartin.multichat.common.communication.CommChannels; import xyz.olivermartin.multichat.local.common.MultiChatLocal; import xyz.olivermartin.multichat.local.common.MultiChatLocalPlayer; import xyz.olivermartin.multichat.local.common.listeners.LocalBungeeObjectMessage; -import xyz.olivermartin.multichat.local.common.listeners.communication.LocalPlayerChannelListener; +import xyz.olivermartin.multichat.local.common.listeners.communication.LocalPlayerDataListener; import xyz.olivermartin.multichat.local.spigot.MultiChatLocalSpigotPlayer; import xyz.olivermartin.multichat.local.spigot.listeners.SpigotBungeeObjectMessage; -public class LocalSpigotPlayerChannelListener extends LocalPlayerChannelListener implements PluginMessageListener { +public class LocalSpigotPlayerDataListener extends LocalPlayerDataListener implements PluginMessageListener { @Override public void onPluginMessageReceived(String channel, Player player, byte[] message) { - if (!channel.equals("multichat:ch")) return; + if (!channel.equals(CommChannels.getPlayerData())) return; try { LocalBungeeObjectMessage lbm = new SpigotBungeeObjectMessage(message); @@ -27,7 +28,7 @@ public void onPluginMessageReceived(String channel, Player player, byte[] messag handleMessage(lbm); } catch (IOException e) { - MultiChatLocal.getInstance().getConsoleLogger().log("An error occurred reading the object stream in the local channel listener..."); + MultiChatLocal.getInstance().getConsoleLogger().log("An error occurred reading the object stream in the local player data listener..."); return; } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/MultiChatLocalSpongePlugin.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/MultiChatLocalSpongePlugin.java index 88ca28c5..0b6797a9 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/MultiChatLocalSpongePlugin.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/MultiChatLocalSpongePlugin.java @@ -52,8 +52,8 @@ import xyz.olivermartin.multichat.local.sponge.listeners.chat.LocalSpongeChatListenerMonitor; import xyz.olivermartin.multichat.local.sponge.listeners.communication.LocalSpongeIgnoreListener; import xyz.olivermartin.multichat.local.sponge.listeners.communication.LocalSpongePlayerActionListener; -import xyz.olivermartin.multichat.local.sponge.listeners.communication.LocalSpongePlayerChannelListener; import xyz.olivermartin.multichat.local.sponge.listeners.communication.LocalSpongePlayerChatListener; +import xyz.olivermartin.multichat.local.sponge.listeners.communication.LocalSpongePlayerDataListener; import xyz.olivermartin.multichat.local.sponge.listeners.communication.LocalSpongePlayerMetaListener; import xyz.olivermartin.multichat.local.sponge.listeners.communication.LocalSpongeServerActionListener; import xyz.olivermartin.multichat.local.sponge.listeners.communication.LocalSpongeServerChatListener; @@ -235,13 +235,10 @@ private void registerCommunicationChannels(SpongeBungeeCommunicationManager comm ChannelBinding.RawDataChannel commChannel = channelRegistrar.createRawChannel(this, "multichat:comm"); commManager.registerChannel("multichat:comm", commChannel); - ChannelBinding.RawDataChannel channelChannel = channelRegistrar.createRawChannel(this, "multichat:ch"); - commManager.registerChannel("multichat:ch", channelChannel); ChannelBinding.RawDataChannel ignoreChannel = channelRegistrar.createRawChannel(this, "multichat:ignore"); commManager.registerChannel("multichat:ignore", ignoreChannel); commChannel.addListener(Platform.Type.SERVER, new LocalSpongePlayerMetaListener()); - channelChannel.addListener(Platform.Type.SERVER, new LocalSpongePlayerChannelListener()); ignoreChannel.addListener(Platform.Type.SERVER, new LocalSpongeIgnoreListener()); // New channels @@ -260,10 +257,14 @@ private void registerCommunicationChannels(SpongeBungeeCommunicationManager comm ChannelBinding.RawDataChannel playerActionChannel = channelRegistrar.createRawChannel(this, CommChannels.getPlayerAction()); commManager.registerChannel(CommChannels.getPlayerAction(), playerActionChannel); + ChannelBinding.RawDataChannel playerDataChannel = channelRegistrar.createRawChannel(this, CommChannels.getPlayerData()); + commManager.registerChannel(CommChannels.getPlayerData(), playerDataChannel); + serverChatChannel.addListener(Platform.Type.SERVER, new LocalSpongeServerChatListener()); serverActionChannel.addListener(Platform.Type.SERVER, new LocalSpongeServerActionListener()); playerActionChannel.addListener(Platform.Type.SERVER, new LocalSpongePlayerActionListener()); playerChatChannel.addListener(Platform.Type.SERVER, new LocalSpongePlayerChatListener()); + playerDataChannel.addListener(Platform.Type.SERVER, new LocalSpongePlayerDataListener()); } @@ -274,8 +275,6 @@ public void onServerStop(GameStoppingServerEvent event) { Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel("multichat:comm")); commManager.unregisterChannel("multichat:comm"); - Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel("multichat:ch")); - commManager.unregisterChannel("multichat:ch"); Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel("multichat:ignore")); commManager.unregisterChannel("multichat:ignore"); @@ -295,6 +294,9 @@ public void onServerStop(GameStoppingServerEvent event) { Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel(CommChannels.getServerAction())); commManager.unregisterChannel(CommChannels.getServerAction()); + Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel(CommChannels.getPlayerData())); + commManager.unregisterChannel(CommChannels.getPlayerData()); + if (MultiChatLocal.getInstance().getNameManager().getMode() == LocalNameManagerMode.SQL) { try { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/listeners/communication/LocalSpongePlayerChannelListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/listeners/communication/LocalSpongePlayerDataListener.java similarity index 84% rename from multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/listeners/communication/LocalSpongePlayerChannelListener.java rename to multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/listeners/communication/LocalSpongePlayerDataListener.java index 7afed239..51a254c2 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/listeners/communication/LocalSpongePlayerChannelListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/listeners/communication/LocalSpongePlayerDataListener.java @@ -13,11 +13,11 @@ import xyz.olivermartin.multichat.local.common.MultiChatLocal; import xyz.olivermartin.multichat.local.common.MultiChatLocalPlayer; import xyz.olivermartin.multichat.local.common.listeners.LocalBungeeObjectMessage; -import xyz.olivermartin.multichat.local.common.listeners.communication.LocalPlayerChannelListener; +import xyz.olivermartin.multichat.local.common.listeners.communication.LocalPlayerDataListener; import xyz.olivermartin.multichat.local.sponge.MultiChatLocalSpongePlayer; import xyz.olivermartin.multichat.local.sponge.listeners.SpongeBungeeObjectMessage; -public class LocalSpongePlayerChannelListener extends LocalPlayerChannelListener implements RawDataListener { +public class LocalSpongePlayerDataListener extends LocalPlayerDataListener implements RawDataListener { @Override public void handlePayload(ChannelBuf data, RemoteConnection connection, Type side) { @@ -28,7 +28,7 @@ public void handlePayload(ChannelBuf data, RemoteConnection connection, Type sid handleMessage(lbm); } catch (IOException e) { - MultiChatLocal.getInstance().getConsoleLogger().log("An error occurred reading the object stream in the local channel listener..."); + MultiChatLocal.getInstance().getConsoleLogger().log("An error occurred reading the object stream in the local player data listener..."); return; } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyLocalCommunicationManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyLocalCommunicationManager.java index 99fef939..4de344be 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyLocalCommunicationManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyLocalCommunicationManager.java @@ -164,7 +164,7 @@ public static void sendIgnoreMap(ServerInfo server) { } - public static void sendPlayerChannelMessage(String playerName, String channel, Channel channelObject, ServerInfo server, boolean colour, boolean rgb) { + public static void sendPlayerDataMessage(String playerName, String channel, Channel channelObject, ServerInfo server, boolean colour, boolean rgb) { sendIgnoreMap(server); @@ -186,9 +186,9 @@ public static void sendPlayerChannelMessage(String playerName, String channel, C e.printStackTrace(); } - server.sendData("multichat:ch", stream.toByteArray()); + server.sendData(CommChannels.getPlayerData(), stream.toByteArray()); - DebugManager.log("Sent message on multichat:ch channel!"); + DebugManager.log("Sent message on multichat:pdata channel!"); } From 60711d569720fde35d502e60f1abb827b34acddb Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Sun, 19 Jul 2020 23:47:26 +0100 Subject: [PATCH 013/188] Updated the remaining plugin messaging channels --- .../olivermartin/multichat/bungee/Events.java | 23 +-- .../multichat/bungee/MultiChat.java | 37 ++-- .../bungee/commands/GlobalCommand.java | 2 +- .../bungee/commands/IgnoreCommand.java | 6 +- .../bungee/commands/LocalCommand.java | 2 +- .../multichat/bungee/commands/MsgCommand.java | 8 +- .../bungee/commands/StaffListCommand.java | 14 +- .../communication/LocalIgnoreListener.java | 36 ---- .../LocalPlayerMetaListener.java | 21 -- .../LocalServerActionListener.java | 21 -- .../LocalServerDataListener.java | 98 ++++++++++ .../spigot/MultiChatLocalSpigotPlugin.java | 10 +- .../LocalSpigotPlayerMetaListener.java | 3 +- ...ava => LocalSpigotServerDataListener.java} | 11 +- .../sponge/MultiChatLocalSpongePlugin.java | 24 +-- ...ava => LocalSpongeServerDataListener.java} | 8 +- .../ProxyLocalCommunicationManager.java | 185 +++++++++++++----- multichat/src/main/resources/config.yml | 3 + 18 files changed, 297 insertions(+), 215 deletions(-) delete mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalIgnoreListener.java create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalServerDataListener.java rename multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/{LocalSpigotIgnoreListener.java => LocalSpigotServerDataListener.java} (68%) rename multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/listeners/communication/{LocalSpongeIgnoreListener.java => LocalSpongeServerDataListener.java} (79%) 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 d2d0b8d0..dcee8ebb 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Events.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Events.java @@ -163,7 +163,7 @@ public void onChat(ChatEvent event) { /// if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean("fetch_spigot_display_names") == true) { if (player.getServer() != null) { - ProxyLocalCommunicationManager.sendMessage(player.getName(), player.getServer().getInfo()); + ProxyLocalCommunicationManager.sendUpdatePlayerMetaRequestMessage(player.getName(), player.getServer().getInfo()); } } /// @@ -267,8 +267,8 @@ public void onChat(ChatEvent event) { ProxiedPlayer target = ProxyServer.getInstance().getPlayer((UUID)PMToggle.get(player.getUniqueId())); - ProxyLocalCommunicationManager.sendMessage(player.getName(), player.getServer().getInfo()); - ProxyLocalCommunicationManager.sendMessage(target.getName(), target.getServer().getInfo()); + ProxyLocalCommunicationManager.sendUpdatePlayerMetaRequestMessage(player.getName(), player.getServer().getInfo()); + ProxyLocalCommunicationManager.sendUpdatePlayerMetaRequestMessage(target.getName(), target.getServer().getInfo()); if (!ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList("no_pm").contains(player.getServer().getInfo().getName())) { @@ -644,21 +644,8 @@ public void onServerSwitch(ServerSwitchEvent event) { ProxyServer.getInstance().getScheduler().schedule(MultiChat.getInstance(), new Runnable() { public void run() { - - try { - ProxyLocalCommunicationManager.sendPlayerDataMessage(event.getPlayer().getName(), Channel.getChannel(event.getPlayer().getUniqueId()).getName(), Channel.getChannel(event.getPlayer().getUniqueId()), event.getPlayer().getServer().getInfo(), (event.getPlayer().hasPermission("multichat.chat.colour")||event.getPlayer().hasPermission("multichat.chat.color")||event.getPlayer().hasPermission("multichat.chat.colour.simple")||event.getPlayer().hasPermission("multichat.chat.color.simple")), (event.getPlayer().hasPermission("multichat.chat.colour")||event.getPlayer().hasPermission("multichat.chat.color")||event.getPlayer().hasPermission("multichat.chat.colour.rgb")||event.getPlayer().hasPermission("multichat.chat.color.rgb"))); - - // LEGACY SERVER HACK - if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList("legacy_servers").contains(event.getPlayer().getServer().getInfo().getName())) { - DebugManager.log("Player: " + event.getPlayer().getName() + ", switching to server: " + event.getPlayer().getServer().getInfo().getName() + ", is a LEGACY server!"); - ProxyLocalCommunicationManager.sendCommandMessage("!!!LEGACYSERVER!!!", event.getPlayer().getServer().getInfo()); - } else { - ProxyLocalCommunicationManager.sendCommandMessage("!!!NOTLEGACYSERVER!!!", event.getPlayer().getServer().getInfo()); - } - - } - - catch (NullPointerException ex) { /* EMPTY */ } + ProxyLocalCommunicationManager.sendPlayerDataMessage(event.getPlayer().getName(), Channel.getChannel(event.getPlayer().getUniqueId()).getName(), Channel.getChannel(event.getPlayer().getUniqueId()), event.getPlayer().getServer().getInfo(), (event.getPlayer().hasPermission("multichat.chat.colour")||event.getPlayer().hasPermission("multichat.chat.color")||event.getPlayer().hasPermission("multichat.chat.colour.simple")||event.getPlayer().hasPermission("multichat.chat.color.simple")), (event.getPlayer().hasPermission("multichat.chat.colour")||event.getPlayer().hasPermission("multichat.chat.color")||event.getPlayer().hasPermission("multichat.chat.colour.rgb")||event.getPlayer().hasPermission("multichat.chat.color.rgb"))); + ProxyLocalCommunicationManager.sendLegacyServerData(event.getPlayer().getServer().getInfo()); } }, 500L, TimeUnit.MILLISECONDS); 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 8ca558fe..659185aa 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java @@ -141,7 +141,7 @@ public void run() { for (ProxiedPlayer player : ProxyServer.getInstance().getPlayers()) { if (player.getServer() != null) { - ProxyLocalCommunicationManager.sendMessage(player.getName(), player.getServer().getInfo()); + ProxyLocalCommunicationManager.sendUpdatePlayerMetaRequestMessage(player.getName(), player.getServer().getInfo()); } } @@ -179,7 +179,7 @@ public void run() { ProxiedPlayer player = getProxy().getPlayer(playername); if (player.getServer() != null) { - ProxyLocalCommunicationManager.sendMessage(player.getName(), player.getServer().getInfo()); + ProxyLocalCommunicationManager.sendUpdatePlayerMetaRequestMessage(player.getName(), player.getServer().getInfo()); } } @@ -199,7 +199,7 @@ public void run() { ProxiedPlayer player = getProxy().getPlayer(playername); if (player.getServer() != null) { - ProxyLocalCommunicationManager.sendMessage(player.getName(), player.getServer().getInfo()); + ProxyLocalCommunicationManager.sendUpdatePlayerMetaRequestMessage(player.getName(), player.getServer().getInfo()); } } @@ -220,7 +220,7 @@ public void run() { ProxiedPlayer player = getProxy().getPlayer(playername); if (player.getServer() != null) { - ProxyLocalCommunicationManager.sendMessage(player.getName(), player.getServer().getInfo()); + ProxyLocalCommunicationManager.sendUpdatePlayerMetaRequestMessage(player.getName(), player.getServer().getInfo()); } } @@ -241,7 +241,7 @@ public void run() { ProxiedPlayer player = getProxy().getPlayer(playername); if (player.getServer() != null) { - ProxyLocalCommunicationManager.sendMessage(player.getName(), player.getServer().getInfo()); + ProxyLocalCommunicationManager.sendUpdatePlayerMetaRequestMessage(player.getName(), player.getServer().getInfo()); } } @@ -308,21 +308,18 @@ public void onEnable() { getProxy().getPluginManager().registerListener(this, new Events()); getProxy().getPluginManager().registerListener(this, this); - // Register communication channels and appropriate listeners - getProxy().registerChannel("multichat:comm"); // TODO LEGACY - getProxy().registerChannel("multichat:ignore"); // TODO LEGACY - - // New communication channels - getProxy().registerChannel(CommChannels.getPlayerMeta()); - getProxy().registerChannel(CommChannels.getPlayerChat()); - getProxy().registerChannel(CommChannels.getServerChat()); - getProxy().registerChannel(CommChannels.getPlayerAction()); - getProxy().registerChannel(CommChannels.getServerAction()); - getProxy().registerChannel(CommChannels.getPlayerData()); - getProxy().getPluginManager().registerListener(this, new ProxyPlayerMetaListener()); - getProxy().getPluginManager().registerListener(this, new ProxyPlayerChatListener()); - getProxy().getPluginManager().registerListener(this, new ProxyPlayerActionListener()); - getProxy().getPluginManager().registerListener(this, new ProxyServerActionListener()); + // Communication Channels + getProxy().registerChannel(CommChannels.getPlayerMeta()); // pmeta + getProxy().registerChannel(CommChannels.getPlayerChat()); // pchat + getProxy().registerChannel(CommChannels.getServerChat()); // schat + getProxy().registerChannel(CommChannels.getPlayerAction()); // pact + getProxy().registerChannel(CommChannels.getServerAction()); // sact + getProxy().registerChannel(CommChannels.getPlayerData()); // pdata + getProxy().registerChannel(CommChannels.getServerData()); // sdata + getProxy().getPluginManager().registerListener(this, new ProxyPlayerMetaListener()); // list - pmeta + getProxy().getPluginManager().registerListener(this, new ProxyPlayerChatListener()); // list - pchat + getProxy().getPluginManager().registerListener(this, new ProxyPlayerActionListener()); // list - pact + getProxy().getPluginManager().registerListener(this, new ProxyServerActionListener()); // list - sact // Register commands registerCommands(configYML, chatcontrolYML); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java index d51076cc..c35d2011 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java @@ -50,7 +50,7 @@ public void execute(CommandSender sender, String[] args) { if (!ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList("no_global").contains(player.getServer().getInfo().getName())) { if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean("fetch_spigot_display_names") == true) { - ProxyLocalCommunicationManager.sendMessage(player.getName(), player.getServer().getInfo()); + ProxyLocalCommunicationManager.sendUpdatePlayerMetaRequestMessage(player.getName(), player.getServer().getInfo()); } if ((!MultiChatProxy.getInstance().getDataStore().isChatFrozen()) || (player.hasPermission("multichat.chat.always"))) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/IgnoreCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/IgnoreCommand.java index 6ba394ed..c7ad2d87 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/IgnoreCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/IgnoreCommand.java @@ -31,7 +31,7 @@ public void execute(CommandSender sender, String[] args) { ProxiedPlayer target = ProxyServer.getInstance().getPlayer(username); if (target != null) { - + if (target.getName().equals(sender.getName())) { MessageManager.sendMessage(sender, "ignore_cannot_ignore_yourself"); return; @@ -49,8 +49,8 @@ public void execute(CommandSender sender, String[] args) { ChatControl.unignore(((ProxiedPlayer) sender).getUniqueId(), target.getUniqueId()); MessageManager.sendSpecialMessage(sender, "ignore_unignored", target.getName()); } - - ProxyLocalCommunicationManager.sendIgnoreMap(((ProxiedPlayer) sender).getServer().getInfo()); + + ProxyLocalCommunicationManager.sendIgnoreServerData(((ProxiedPlayer) sender).getServer().getInfo()); } else { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java index dfc9c91e..d3c76c91 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java @@ -46,7 +46,7 @@ public void execute(CommandSender sender, String[] args) { ProxiedPlayer player = (ProxiedPlayer)sender; if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean("fetch_spigot_display_names") == true) { - ProxyLocalCommunicationManager.sendMessage(player.getName(), player.getServer().getInfo()); + ProxyLocalCommunicationManager.sendUpdatePlayerMetaRequestMessage(player.getName(), player.getServer().getInfo()); } if ((!MultiChatProxy.getInstance().getDataStore().isChatFrozen()) || (player.hasPermission("multichat.chat.always"))) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MsgCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MsgCommand.java index 8df17089..1029c00d 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MsgCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MsgCommand.java @@ -149,8 +149,8 @@ public void execute(CommandSender sender, String[] args) { if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean("fetch_spigot_display_names") == true) { - ProxyLocalCommunicationManager.sendMessage(sender.getName(), ((ProxiedPlayer)sender).getServer().getInfo()); - ProxyLocalCommunicationManager.sendMessage(target.getName(), target.getServer().getInfo()); + ProxyLocalCommunicationManager.sendUpdatePlayerMetaRequestMessage(sender.getName(), ((ProxiedPlayer)sender).getServer().getInfo()); + ProxyLocalCommunicationManager.sendUpdatePlayerMetaRequestMessage(target.getName(), target.getServer().getInfo()); } @@ -184,7 +184,7 @@ public void execute(CommandSender sender, String[] args) { if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean("fetch_spigot_display_names") == true) { - ProxyLocalCommunicationManager.sendMessage(sender.getName(), ((ProxiedPlayer)sender).getServer().getInfo()); + ProxyLocalCommunicationManager.sendUpdatePlayerMetaRequestMessage(sender.getName(), ((ProxiedPlayer)sender).getServer().getInfo()); } @@ -214,7 +214,7 @@ public void execute(CommandSender sender, String[] args) { if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean("fetch_spigot_display_names") == true) { - ProxyLocalCommunicationManager.sendMessage(target.getName(), target.getServer().getInfo()); + ProxyLocalCommunicationManager.sendUpdatePlayerMetaRequestMessage(target.getName(), target.getServer().getInfo()); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/StaffListCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/StaffListCommand.java index 2dda033f..da8c5566 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/StaffListCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/StaffListCommand.java @@ -35,13 +35,13 @@ public void execute(CommandSender sender, String[] args) { boolean onServer = false; MessageManager.sendMessage(sender, "command_stafflist_list"); - + DebugManager.log("[StaffList] Player: " + sender.getName() + " is the command sender!"); for (Iterator localIterator1 = ProxyServer.getInstance().getServers().keySet().iterator(); localIterator1.hasNext();) { server = (String)localIterator1.next(); - + DebugManager.log("[StaffList] First Server: " + server); if (!ProxyServer.getInstance().getServerInfo(server).getPlayers().isEmpty()) { @@ -51,19 +51,19 @@ public void execute(CommandSender sender, String[] args) { for (ProxiedPlayer onlineplayer2 : ProxyServer.getInstance().getPlayers()) { if ((onlineplayer2.hasPermission("multichat.staff"))) { - + DebugManager.log("[StaffList] Found a staff member: " + onlineplayer2.getName()); boolean showInList = true; - + DebugManager.log("[StaffList] Are we hooked to PremiumVanish: " + MultiChat.premiumVanish); DebugManager.log("[StaffList] Are we hiding vanished players as set in config?: " + MultiChat.hideVanishedStaffInStaffList); if (MultiChat.premiumVanish && MultiChat.hideVanishedStaffInStaffList) { - + DebugManager.log("[StaffList] Is staff invisible: " + BungeeVanishAPI.isInvisible(onlineplayer2)); DebugManager.log("[StaffList] Can player see vanished staff?: " + sender.hasPermission("multichat.staff.list.vanished")); - + if (BungeeVanishAPI.isInvisible(onlineplayer2) && !sender.hasPermission("multichat.staff.list.vanished")) { DebugManager.log("[StaffList] This staff member will be hidden from list!"); showInList = false; @@ -75,7 +75,7 @@ public void execute(CommandSender sender, String[] args) { if (onlineplayer2.getServer().getInfo().getName().equals(server)) { if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean("fetch_spigot_display_names") == true) { - ProxyLocalCommunicationManager.sendMessage(onlineplayer2.getName(), onlineplayer2.getServer().getInfo()); + ProxyLocalCommunicationManager.sendUpdatePlayerMetaRequestMessage(onlineplayer2.getName(), onlineplayer2.getServer().getInfo()); } staff = true; diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalIgnoreListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalIgnoreListener.java deleted file mode 100644 index f46dd36b..00000000 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalIgnoreListener.java +++ /dev/null @@ -1,36 +0,0 @@ -package xyz.olivermartin.multichat.local.common.listeners.communication; - -import java.io.IOException; -import java.util.Map; -import java.util.Set; -import java.util.UUID; - -import xyz.olivermartin.multichat.local.common.MultiChatLocal; -import xyz.olivermartin.multichat.local.common.listeners.LocalBungeeObjectMessage; - -public abstract class LocalIgnoreListener { - - @SuppressWarnings("unchecked") - protected boolean handleMessage(LocalBungeeObjectMessage message) { - - try { - - MultiChatLocal.getInstance().getConsoleLogger().debug("{multichat:ignore} Reading ignore map..."); - MultiChatLocal.getInstance().getDataStore().setIgnoreMap((Map>) message.readObject()); - MultiChatLocal.getInstance().getConsoleLogger().debug("{multichat:ignore} Successfully read ignore map!"); - return true; - - } catch (IOException e) { - - MultiChatLocal.getInstance().getConsoleLogger().log("An error occurred trying to read local ignore message from Bungeecord, is the server lagging?"); - return false; - - } catch (ClassNotFoundException e) { - - MultiChatLocal.getInstance().getConsoleLogger().log("Could not read the ignore Map from local ignore message..."); - return false; - } - - } - -} diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalPlayerMetaListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalPlayerMetaListener.java index 620ae4cf..e2bcb2a9 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalPlayerMetaListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalPlayerMetaListener.java @@ -15,35 +15,14 @@ protected boolean handleMessage(LocalBungeeMessage message) { try { - boolean setDisplayName = false; - boolean globalChat = false; - String displayNameFormat = ""; - Optional opPlayer = getPlayerFromName(message.readUTF()); if (!opPlayer.isPresent()) return true; MultiChatLocalPlayer player = opPlayer.get(); - if (message.readUTF().equals("T")) { - setDisplayName = true; - } - - displayNameFormat = message.readUTF(); - - MultiChatLocal.getInstance().getDataStore().setSetDisplayName(setDisplayName); - MultiChatLocal.getInstance().getDataStore().setDisplayNameFormatLastVal(displayNameFormat); - MultiChatLocal.getInstance().getProxyCommunicationManager().updatePlayerMeta(player.getUniqueId()); - if (message.readUTF().equals("T")) { - globalChat = true; - } - - MultiChatLocal.getInstance().getDataStore().setGlobalChatServer(globalChat); - - MultiChatLocal.getInstance().getDataStore().setGlobalChatFormat(message.readUTF()); - return true; } catch (IOException e) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalServerActionListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalServerActionListener.java index 1b17a326..297d4476 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalServerActionListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalServerActionListener.java @@ -14,13 +14,6 @@ protected boolean handleMessage(LocalBungeeMessage message) { try { String command = message.readUTF(); - - // HANDLE LEGACY SERVER HACK - if (isHackedMessage(command)) { - handleHackedMessage(command); - return true; - } - executeCommandAsConsole(command); return true; @@ -33,18 +26,4 @@ protected boolean handleMessage(LocalBungeeMessage message) { } - private boolean isHackedMessage(String command) { - return (command.equals("!!!LEGACYSERVER!!!") || command.equals("!!!NOTLEGACYSERVER!!!")); - } - - private void handleHackedMessage(String command) { - - if (command.equals("!!!LEGACYSERVER!!!")) { - MultiChatLocal.getInstance().getDataStore().setLegacy(true); - } else { - MultiChatLocal.getInstance().getDataStore().setLegacy(false); - } - - } - } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalServerDataListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalServerDataListener.java new file mode 100644 index 00000000..9aa7c96e --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalServerDataListener.java @@ -0,0 +1,98 @@ +package xyz.olivermartin.multichat.local.common.listeners.communication; + +import java.io.IOException; +import java.util.Map; +import java.util.Set; +import java.util.UUID; + +import xyz.olivermartin.multichat.local.common.MultiChatLocal; +import xyz.olivermartin.multichat.local.common.listeners.LocalBungeeObjectMessage; + +public class LocalServerDataListener { + + @SuppressWarnings("unchecked") + protected boolean handleMessage(LocalBungeeObjectMessage message) { + + try { + + /* + * This is for the sdata channel + * + * The ids are: + * - global = Global chat info + * - ignore = ignore map info + * - dn = display name info + * - legacy = legacy server info + */ + + String id = message.readUTF(); + + switch (id) { + + case "global": + + boolean globalServer; + String globalChatFormat; + + globalServer = message.readBoolean(); + globalChatFormat = message.readUTF(); + + MultiChatLocal.getInstance().getDataStore().setGlobalChatServer(globalServer); + MultiChatLocal.getInstance().getDataStore().setGlobalChatFormat(globalChatFormat); + + break; + + case "ignore": + + try { + MultiChatLocal.getInstance().getDataStore().setIgnoreMap((Map>) message.readObject()); + } catch (ClassNotFoundException e) { + MultiChatLocal.getInstance().getConsoleLogger().log("Could not read the ignore Map from local ignore message..."); + e.printStackTrace(); + } + + break; + + case "dn": + + boolean setDisplayName; + String displayNameFormat; + + setDisplayName = message.readBoolean(); + displayNameFormat = message.readUTF(); + + MultiChatLocal.getInstance().getDataStore().setSetDisplayName(setDisplayName); + MultiChatLocal.getInstance().getDataStore().setDisplayNameFormatLastVal(displayNameFormat); + + break; + + case "legacy": + + boolean isLegacy; + + isLegacy = message.readBoolean(); + + MultiChatLocal.getInstance().getDataStore().setLegacy(isLegacy); + + break; + + default: + + // TODO No other ids exist at this point + + break; + + } + + return true; + + } catch (IOException e) { + + MultiChatLocal.getInstance().getConsoleLogger().log("An error occurred trying to read local server data message from Bungeecord, is the server lagging?"); + return false; + + } + + } + +} diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/MultiChatLocalSpigotPlugin.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/MultiChatLocalSpigotPlugin.java index 83378f25..69967fd0 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/MultiChatLocalSpigotPlugin.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/MultiChatLocalSpigotPlugin.java @@ -36,13 +36,13 @@ import xyz.olivermartin.multichat.local.spigot.listeners.chat.LocalSpigotChatListenerHighest; import xyz.olivermartin.multichat.local.spigot.listeners.chat.LocalSpigotChatListenerLowest; import xyz.olivermartin.multichat.local.spigot.listeners.chat.LocalSpigotChatListenerMonitor; -import xyz.olivermartin.multichat.local.spigot.listeners.communication.LocalSpigotIgnoreListener; import xyz.olivermartin.multichat.local.spigot.listeners.communication.LocalSpigotPlayerActionListener; import xyz.olivermartin.multichat.local.spigot.listeners.communication.LocalSpigotPlayerChatListener; import xyz.olivermartin.multichat.local.spigot.listeners.communication.LocalSpigotPlayerDataListener; import xyz.olivermartin.multichat.local.spigot.listeners.communication.LocalSpigotPlayerMetaListener; import xyz.olivermartin.multichat.local.spigot.listeners.communication.LocalSpigotServerActionListener; import xyz.olivermartin.multichat.local.spigot.listeners.communication.LocalSpigotServerChatListener; +import xyz.olivermartin.multichat.local.spigot.listeners.communication.LocalSpigotServerDataListener; public class MultiChatLocalSpigotPlugin extends JavaPlugin { @@ -169,12 +169,6 @@ public void onEnable() { private void registerCommunicationChannels() { - getServer().getMessenger().registerOutgoingPluginChannel(this, "multichat:comm"); - - getServer().getMessenger().registerIncomingPluginChannel(this, "multichat:comm", new LocalSpigotPlayerMetaListener()); - getServer().getMessenger().registerIncomingPluginChannel(this, "multichat:ignore", new LocalSpigotIgnoreListener()); - - // New channels getServer().getMessenger().registerOutgoingPluginChannel(this, CommChannels.getPlayerMeta()); getServer().getMessenger().registerOutgoingPluginChannel(this, CommChannels.getPlayerChat()); getServer().getMessenger().registerOutgoingPluginChannel(this, CommChannels.getPlayerAction()); @@ -184,6 +178,8 @@ private void registerCommunicationChannels() { getServer().getMessenger().registerIncomingPluginChannel(this, CommChannels.getPlayerAction(), new LocalSpigotPlayerActionListener()); getServer().getMessenger().registerIncomingPluginChannel(this, CommChannels.getPlayerChat(), new LocalSpigotPlayerChatListener()); getServer().getMessenger().registerIncomingPluginChannel(this, CommChannels.getPlayerData(), new LocalSpigotPlayerDataListener()); + getServer().getMessenger().registerIncomingPluginChannel(this, CommChannels.getServerData(), new LocalSpigotServerDataListener()); + getServer().getMessenger().registerIncomingPluginChannel(this, CommChannels.getPlayerMeta(), new LocalSpigotPlayerMetaListener()); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotPlayerMetaListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotPlayerMetaListener.java index 37a8d934..b6d09079 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotPlayerMetaListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotPlayerMetaListener.java @@ -6,6 +6,7 @@ import org.bukkit.entity.Player; import org.bukkit.plugin.messaging.PluginMessageListener; +import xyz.olivermartin.multichat.common.communication.CommChannels; import xyz.olivermartin.multichat.local.common.MultiChatLocalPlayer; import xyz.olivermartin.multichat.local.common.listeners.LocalBungeeMessage; import xyz.olivermartin.multichat.local.common.listeners.communication.LocalPlayerMetaListener; @@ -17,7 +18,7 @@ public class LocalSpigotPlayerMetaListener extends LocalPlayerMetaListener imple @Override public void onPluginMessageReceived(String channel, Player player, byte[] message) { - if (!channel.equals("multichat:comm")) return; + if (!channel.equals(CommChannels.getPlayerMeta())) return; LocalBungeeMessage lbm = new SpigotBungeeMessage(message); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotIgnoreListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotServerDataListener.java similarity index 68% rename from multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotIgnoreListener.java rename to multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotServerDataListener.java index 6c0de6fe..063abcb0 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotIgnoreListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotServerDataListener.java @@ -5,25 +5,26 @@ import org.bukkit.entity.Player; import org.bukkit.plugin.messaging.PluginMessageListener; +import xyz.olivermartin.multichat.common.communication.CommChannels; import xyz.olivermartin.multichat.local.common.MultiChatLocal; import xyz.olivermartin.multichat.local.common.listeners.LocalBungeeObjectMessage; -import xyz.olivermartin.multichat.local.common.listeners.communication.LocalIgnoreListener; +import xyz.olivermartin.multichat.local.common.listeners.communication.LocalServerDataListener; import xyz.olivermartin.multichat.local.spigot.listeners.SpigotBungeeObjectMessage; -public class LocalSpigotIgnoreListener extends LocalIgnoreListener implements PluginMessageListener { +public class LocalSpigotServerDataListener extends LocalServerDataListener implements PluginMessageListener { @Override public void onPluginMessageReceived(String channel, Player player, byte[] message) { - if (!channel.equals("multichat:ignore")) return; + if (!channel.equals(CommChannels.getServerData())) return; try { - LocalBungeeObjectMessage lbm = new SpigotBungeeObjectMessage(message); + LocalBungeeObjectMessage lbm = new SpigotBungeeObjectMessage(message); handleMessage(lbm); } catch (IOException e) { - MultiChatLocal.getInstance().getConsoleLogger().log("An error occurred reading the object stream in the local ignore listener..."); + MultiChatLocal.getInstance().getConsoleLogger().log("An error occurred reading the object stream in the local server data listener..."); return; } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/MultiChatLocalSpongePlugin.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/MultiChatLocalSpongePlugin.java index 0b6797a9..4b84e58c 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/MultiChatLocalSpongePlugin.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/MultiChatLocalSpongePlugin.java @@ -50,13 +50,13 @@ import xyz.olivermartin.multichat.local.sponge.listeners.chat.LocalSpongeChatListenerHighest; import xyz.olivermartin.multichat.local.sponge.listeners.chat.LocalSpongeChatListenerLowest; import xyz.olivermartin.multichat.local.sponge.listeners.chat.LocalSpongeChatListenerMonitor; -import xyz.olivermartin.multichat.local.sponge.listeners.communication.LocalSpongeIgnoreListener; import xyz.olivermartin.multichat.local.sponge.listeners.communication.LocalSpongePlayerActionListener; import xyz.olivermartin.multichat.local.sponge.listeners.communication.LocalSpongePlayerChatListener; import xyz.olivermartin.multichat.local.sponge.listeners.communication.LocalSpongePlayerDataListener; import xyz.olivermartin.multichat.local.sponge.listeners.communication.LocalSpongePlayerMetaListener; import xyz.olivermartin.multichat.local.sponge.listeners.communication.LocalSpongeServerActionListener; import xyz.olivermartin.multichat.local.sponge.listeners.communication.LocalSpongeServerChatListener; +import xyz.olivermartin.multichat.local.sponge.listeners.communication.LocalSpongeServerDataListener; @Plugin(id = "multichat", name = "MultiChat", version = "1.10", dependencies = { @Dependency(id = "placeholderapi", optional = true) }) public class MultiChatLocalSpongePlugin { @@ -232,15 +232,6 @@ private void registerCommunicationChannels(SpongeBungeeCommunicationManager comm ChannelRegistrar channelRegistrar = Sponge.getGame().getChannelRegistrar(); - ChannelBinding.RawDataChannel commChannel = channelRegistrar.createRawChannel(this, "multichat:comm"); - commManager.registerChannel("multichat:comm", commChannel); - - ChannelBinding.RawDataChannel ignoreChannel = channelRegistrar.createRawChannel(this, "multichat:ignore"); - commManager.registerChannel("multichat:ignore", ignoreChannel); - - commChannel.addListener(Platform.Type.SERVER, new LocalSpongePlayerMetaListener()); - ignoreChannel.addListener(Platform.Type.SERVER, new LocalSpongeIgnoreListener()); - // New channels ChannelBinding.RawDataChannel playerMetaChannel = channelRegistrar.createRawChannel(this, CommChannels.getPlayerMeta()); commManager.registerChannel(CommChannels.getPlayerMeta(), playerMetaChannel); @@ -260,11 +251,16 @@ private void registerCommunicationChannels(SpongeBungeeCommunicationManager comm ChannelBinding.RawDataChannel playerDataChannel = channelRegistrar.createRawChannel(this, CommChannels.getPlayerData()); commManager.registerChannel(CommChannels.getPlayerData(), playerDataChannel); + ChannelBinding.RawDataChannel serverDataChannel = channelRegistrar.createRawChannel(this, CommChannels.getServerData()); + commManager.registerChannel(CommChannels.getServerData(), serverDataChannel); + serverChatChannel.addListener(Platform.Type.SERVER, new LocalSpongeServerChatListener()); serverActionChannel.addListener(Platform.Type.SERVER, new LocalSpongeServerActionListener()); playerActionChannel.addListener(Platform.Type.SERVER, new LocalSpongePlayerActionListener()); playerChatChannel.addListener(Platform.Type.SERVER, new LocalSpongePlayerChatListener()); playerDataChannel.addListener(Platform.Type.SERVER, new LocalSpongePlayerDataListener()); + serverDataChannel.addListener(Platform.Type.SERVER, new LocalSpongeServerDataListener()); + playerMetaChannel.addListener(Platform.Type.SERVER, new LocalSpongePlayerMetaListener()); } @@ -273,11 +269,6 @@ public void onServerStop(GameStoppingServerEvent event) { SpongeBungeeCommunicationManager commManager = (SpongeBungeeCommunicationManager)MultiChatLocal.getInstance().getProxyCommunicationManager(); - Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel("multichat:comm")); - commManager.unregisterChannel("multichat:comm"); - Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel("multichat:ignore")); - commManager.unregisterChannel("multichat:ignore"); - // New channels Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel(CommChannels.getPlayerMeta())); commManager.unregisterChannel(CommChannels.getPlayerMeta()); @@ -297,6 +288,9 @@ public void onServerStop(GameStoppingServerEvent event) { Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel(CommChannels.getPlayerData())); commManager.unregisterChannel(CommChannels.getPlayerData()); + Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel(CommChannels.getServerData())); + commManager.unregisterChannel(CommChannels.getServerData()); + if (MultiChatLocal.getInstance().getNameManager().getMode() == LocalNameManagerMode.SQL) { try { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/listeners/communication/LocalSpongeIgnoreListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/listeners/communication/LocalSpongeServerDataListener.java similarity index 79% rename from multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/listeners/communication/LocalSpongeIgnoreListener.java rename to multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/listeners/communication/LocalSpongeServerDataListener.java index d8503044..f3a912ad 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/listeners/communication/LocalSpongeIgnoreListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/listeners/communication/LocalSpongeServerDataListener.java @@ -9,21 +9,21 @@ import xyz.olivermartin.multichat.local.common.MultiChatLocal; import xyz.olivermartin.multichat.local.common.listeners.LocalBungeeObjectMessage; -import xyz.olivermartin.multichat.local.common.listeners.communication.LocalIgnoreListener; +import xyz.olivermartin.multichat.local.common.listeners.communication.LocalServerDataListener; import xyz.olivermartin.multichat.local.sponge.listeners.SpongeBungeeObjectMessage; -public class LocalSpongeIgnoreListener extends LocalIgnoreListener implements RawDataListener { +public class LocalSpongeServerDataListener extends LocalServerDataListener implements RawDataListener { @Override public void handlePayload(ChannelBuf data, RemoteConnection connection, Type side) { try { - LocalBungeeObjectMessage lbm = new SpongeBungeeObjectMessage(data); + LocalBungeeObjectMessage lbm = new SpongeBungeeObjectMessage(data); handleMessage(lbm); } catch (IOException e) { - MultiChatLocal.getInstance().getConsoleLogger().log("An error occurred reading the object stream in the local ignore listener..."); + MultiChatLocal.getInstance().getConsoleLogger().log("An error occurred reading the object stream in the local server data listener..."); return; } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyLocalCommunicationManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyLocalCommunicationManager.java index 4de344be..6e1217ea 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyLocalCommunicationManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyLocalCommunicationManager.java @@ -22,50 +22,150 @@ */ public class ProxyLocalCommunicationManager { - public static void sendMessage(String message, ServerInfo server) { + public static void sendGlobalServerData(ServerInfo server) { + + /* + * This is for the sdata channel id: global + * + * Other ids are: + * - global = Global chat info + * - ignore = ignore map info + * - dn = display name info + * - legacy = legacy server info + */ + + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + + try { + + ObjectOutputStream out = new ObjectOutputStream(stream); + + boolean globalChatServer = ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean("global") == true + && !ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList("no_global").contains(server.getName()); + String globalChatFormat = Channel.getGlobalChannel().getFormat(); + + out.writeUTF("global"); + out.writeBoolean(globalChatServer); + out.writeUTF(globalChatFormat); + + } catch (IOException e) { + e.printStackTrace(); + } + + server.sendData(CommChannels.getServerData(), stream.toByteArray()); + + } + + public static void sendDisplayNameServerData(ServerInfo server) { + + /* + * This is for the sdata channel id: dn + * + * Other ids are: + * - global = Global chat info + * - ignore = ignore map info + * - dn = display name info + * - legacy = legacy server info + */ + + Configuration configYML = ConfigManager.getInstance().getHandler("config.yml").getConfig(); + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + + try { + + ObjectOutputStream out = new ObjectOutputStream(stream); + + boolean setDisplayName = configYML.getBoolean("set_display_name", true); + String displayNameFormat = configYML.getString("display_name_format", "%PREFIX%%NICK%%SUFFIX%"); + + out.writeUTF("dn"); + out.writeBoolean(setDisplayName); + out.writeUTF(displayNameFormat); + + } catch (IOException e) { + e.printStackTrace(); + } + + server.sendData(CommChannels.getServerData(), stream.toByteArray()); + + } + + public static void sendIgnoreServerData(ServerInfo server) { + + /* + * This is for the sdata channel id: ignore + * + * Other ids are: + * - global = Global chat info + * - ignore = ignore map info + * - dn = display name info + * - legacy = legacy server info + */ + + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + + try { + + ObjectOutputStream oout = new ObjectOutputStream(stream); + oout.writeUTF("ignore"); + oout.writeObject(ChatControl.getIgnoreMap()); + + } catch (IOException e) { + e.printStackTrace(); + } + + server.sendData(CommChannels.getServerData(), stream.toByteArray()); + + } + + public static void sendLegacyServerData(ServerInfo server) { + + /* + * This is for the sdata channel id: legacy + * + * Other ids are: + * - global = Global chat info + * - ignore = ignore map info + * - dn = display name info + * - legacy = legacy server info + */ + + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + + try { + + boolean isLegacy = + ConfigManager.getInstance().getHandler("config.yml").getConfig() + .getStringList("legacy_servers") + .contains(server.getName()); + + ObjectOutputStream oout = new ObjectOutputStream(stream); + oout.writeUTF("legacy"); + oout.writeBoolean(isLegacy); + + } catch (IOException e) { + e.printStackTrace(); + } + + server.sendData(CommChannels.getServerData(), stream.toByteArray()); + + } + + public static void sendUpdatePlayerMetaRequestMessage(String playerName, ServerInfo server) { ByteArrayOutputStream stream = new ByteArrayOutputStream(); DataOutputStream out = new DataOutputStream(stream); try { - // Players name - out.writeUTF(message); - // Should display name be set? - Configuration configYML = ConfigManager.getInstance().getHandler("config.yml").getConfig(); - if (configYML.contains("set_display_name")) { - if (configYML.getBoolean("set_display_name")) { - out.writeUTF("T"); - } else { - out.writeUTF("F"); - } - } else { - out.writeUTF("T"); - } - - // Display name format - if (configYML.contains("display_name_format")) { - out.writeUTF(configYML.getString("display_name_format")); - } else { - out.writeUTF("%PREFIX%%NICK%%SUFFIX%"); - } - - // Is this server a global chat server? - if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean("global") == true - && !ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList("no_global").contains(server.getName())) { - out.writeUTF("T"); - } else { - out.writeUTF("F"); - } - - // Send the global format - out.writeUTF(Channel.getGlobalChannel().getFormat()); + // Command + out.writeUTF(playerName); } catch (IOException e) { e.printStackTrace(); } - server.sendData("multichat:comm", stream.toByteArray()); + server.sendData(CommChannels.getPlayerMeta(), stream.toByteArray()); } @@ -147,26 +247,9 @@ public static void sendServerChatMessage(String channel, String message, ServerI } - public static void sendIgnoreMap(ServerInfo server) { - - ByteArrayOutputStream stream = new ByteArrayOutputStream(); - //DataOutputStream out = new DataOutputStream(stream); - try { - ObjectOutputStream oout = new ObjectOutputStream(stream); - - oout.writeObject(ChatControl.getIgnoreMap()); - - } catch (IOException e) { - e.printStackTrace(); - } - - server.sendData("multichat:ignore", stream.toByteArray()); - - } - public static void sendPlayerDataMessage(String playerName, String channel, Channel channelObject, ServerInfo server, boolean colour, boolean rgb) { - sendIgnoreMap(server); + sendIgnoreServerData(server); ByteArrayOutputStream stream = new ByteArrayOutputStream(); //DataOutputStream out = new DataOutputStream(stream); diff --git a/multichat/src/main/resources/config.yml b/multichat/src/main/resources/config.yml index a4fd88e7..2f294903 100644 --- a/multichat/src/main/resources/config.yml +++ b/multichat/src/main/resources/config.yml @@ -273,6 +273,9 @@ premium_vanish: silence_join: true # Prevent vanished players sending a join message # Legacy (PRE-1.16) Servers +# +# Please note: If you use any Sponge servers then they will need to be listed here! +# # Listing servers here will mark them as 'LEGACY' servers # RGB colour codes will be approximated to their nearest value (i.e. &a, &b and so on) # This prevents them displaying in chat as &x... From a5c5ba26761fedff315dc67d49e0da02630cf094 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Mon, 20 Jul 2020 00:44:11 +0100 Subject: [PATCH 014/188] Fixed issue in last commit (needed to flush Object Streams) --- .../LocalServerDataListener.java | 3 +- .../ProxyLocalCommunicationManager.java | 36 +++++++++++++++++-- 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalServerDataListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalServerDataListener.java index 9aa7c96e..a4a475a4 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalServerDataListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalServerDataListener.java @@ -8,7 +8,7 @@ import xyz.olivermartin.multichat.local.common.MultiChatLocal; import xyz.olivermartin.multichat.local.common.listeners.LocalBungeeObjectMessage; -public class LocalServerDataListener { +public abstract class LocalServerDataListener { @SuppressWarnings("unchecked") protected boolean handleMessage(LocalBungeeObjectMessage message) { @@ -88,6 +88,7 @@ protected boolean handleMessage(LocalBungeeObjectMessage message) { } catch (IOException e) { + e.printStackTrace(); MultiChatLocal.getInstance().getConsoleLogger().log("An error occurred trying to read local server data message from Bungeecord, is the server lagging?"); return false; diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyLocalCommunicationManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyLocalCommunicationManager.java index 6e1217ea..fec13de0 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyLocalCommunicationManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyLocalCommunicationManager.java @@ -24,6 +24,8 @@ public class ProxyLocalCommunicationManager { public static void sendGlobalServerData(ServerInfo server) { + DebugManager.log("About to send to multichat:sdata on the global id"); + /* * This is for the sdata channel id: global * @@ -47,6 +49,7 @@ public static void sendGlobalServerData(ServerInfo server) { out.writeUTF("global"); out.writeBoolean(globalChatServer); out.writeUTF(globalChatFormat); + out.flush(); } catch (IOException e) { e.printStackTrace(); @@ -54,10 +57,14 @@ public static void sendGlobalServerData(ServerInfo server) { server.sendData(CommChannels.getServerData(), stream.toByteArray()); + DebugManager.log("Completed send on multichat:sdata on the global id"); + } public static void sendDisplayNameServerData(ServerInfo server) { + DebugManager.log("About to send to multichat:sdata on the dn id"); + /* * This is for the sdata channel id: dn * @@ -81,6 +88,9 @@ public static void sendDisplayNameServerData(ServerInfo server) { out.writeUTF("dn"); out.writeBoolean(setDisplayName); out.writeUTF(displayNameFormat); + out.flush(); + + DebugManager.log("setDisplayName = " + setDisplayName); } catch (IOException e) { e.printStackTrace(); @@ -88,10 +98,14 @@ public static void sendDisplayNameServerData(ServerInfo server) { server.sendData(CommChannels.getServerData(), stream.toByteArray()); + DebugManager.log("Completed send to multichat:sdata on the dn id"); + } public static void sendIgnoreServerData(ServerInfo server) { + DebugManager.log("About to send to multichat:sdata on the ignore id"); + /* * This is for the sdata channel id: ignore * @@ -109,6 +123,7 @@ public static void sendIgnoreServerData(ServerInfo server) { ObjectOutputStream oout = new ObjectOutputStream(stream); oout.writeUTF("ignore"); oout.writeObject(ChatControl.getIgnoreMap()); + oout.flush(); } catch (IOException e) { e.printStackTrace(); @@ -116,10 +131,14 @@ public static void sendIgnoreServerData(ServerInfo server) { server.sendData(CommChannels.getServerData(), stream.toByteArray()); + DebugManager.log("Completed send to multichat:sdata on the ignore id"); + } public static void sendLegacyServerData(ServerInfo server) { + DebugManager.log("About to send to multichat:sdata on the legacy id"); + /* * This is for the sdata channel id: legacy * @@ -134,14 +153,18 @@ public static void sendLegacyServerData(ServerInfo server) { try { + ObjectOutputStream out = new ObjectOutputStream(stream); + boolean isLegacy = ConfigManager.getInstance().getHandler("config.yml").getConfig() .getStringList("legacy_servers") .contains(server.getName()); - ObjectOutputStream oout = new ObjectOutputStream(stream); - oout.writeUTF("legacy"); - oout.writeBoolean(isLegacy); + DebugManager.log("isLegacy = " + isLegacy); + + out.writeUTF("legacy"); + out.writeBoolean(isLegacy); + out.flush(); } catch (IOException e) { e.printStackTrace(); @@ -149,10 +172,16 @@ public static void sendLegacyServerData(ServerInfo server) { server.sendData(CommChannels.getServerData(), stream.toByteArray()); + DebugManager.log("Completed send to multichat:sdata on the legacy id"); + } public static void sendUpdatePlayerMetaRequestMessage(String playerName, ServerInfo server) { + DebugManager.log("About to send update player meta request!"); + sendDisplayNameServerData(server); + sendGlobalServerData(server); + ByteArrayOutputStream stream = new ByteArrayOutputStream(); DataOutputStream out = new DataOutputStream(stream); @@ -166,6 +195,7 @@ public static void sendUpdatePlayerMetaRequestMessage(String playerName, ServerI } server.sendData(CommChannels.getPlayerMeta(), stream.toByteArray()); + DebugManager.log("Request sent!"); } From 90287243d137559a633a508d3527273717aa126e Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Mon, 20 Jul 2020 12:56:59 +0100 Subject: [PATCH 015/188] Updated descriptions for each of the new channels --- .../multichat/common/communication/CommChannels.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/common/communication/CommChannels.java b/multichat/src/main/java/xyz/olivermartin/multichat/common/communication/CommChannels.java index a65ba6a1..547eca91 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/common/communication/CommChannels.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/common/communication/CommChannels.java @@ -36,8 +36,7 @@ public class CommChannels { *

* This channel communicates the following from PROXY -> LOCAL: *

    - *
  • If the server should set the display name
  • - *
  • What the display name format is
  • + *
  • Requests for player meta to be updated on proxy
  • *
*

*

@@ -115,6 +114,7 @@ public static String getServerChat() { *

    *
  • Player colour permissions
  • *
  • Player currently selected channels
  • + *
  • Lists of channel members
  • *
*

*

@@ -139,10 +139,11 @@ public static String getPlayerData() { * This channel communicates the following from PROXY -> LOCAL: *

    *
  • Player ignore map
  • - *
  • Channel member lists
  • *
  • Global chat format
  • *
  • If this server is a 'global chat server'
  • *
  • If this server is a legacy server
  • + *
  • If the server should set the display name
  • + *
  • What the display name format is
  • *
*

*

From d6a6a529e60e34f542daf4a3152d35964a5ffb16 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Mon, 20 Jul 2020 12:58:02 +0100 Subject: [PATCH 016/188] Removed unnecessary comments --- .../common/communication/CommChannels.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/common/communication/CommChannels.java b/multichat/src/main/java/xyz/olivermartin/multichat/common/communication/CommChannels.java index 547eca91..13411ff0 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/common/communication/CommChannels.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/common/communication/CommChannels.java @@ -8,25 +8,25 @@ public class CommChannels { private static String prefix = "multichat:"; // Player meta communication (prefix, suffix, displayname etc.) - private static String playerMeta = "pmeta"; // Bungee listener is implemented & registered + private static String playerMeta = "pmeta"; // Chat messages sent by players - private static String playerChat = "pchat"; // Bungee listener is implemented & registered + private static String playerChat = "pchat"; // Chat messages sent by non-player objects (casts, announcements etc.) - private static String serverChat = "schat"; // Bungee listener is implemented & registered + private static String serverChat = "schat"; - // Data about specific players (colour permissions etc.) - private static String playerData = "pdata"; // NOT REGISTERED ANYWHERE + // Data about specific players (selected channels, colour permissions etc.) + private static String playerData = "pdata"; - // Data about the server as a whole (ignoremap, channel members, global chat servers, legacy servers etc.) - private static String serverData = "sdata"; // NOT REGISTERED ANYWHERE + // Data about the server as a whole (ignoremap, global chat servers, display name formats, legacy servers etc.) + private static String serverData = "sdata"; // Actions for the server console (mce/pxe) - private static String serverAction = "sact"; // Bungee listener is implemented & registered + private static String serverAction = "sact"; // Actions for players (mce players, ppxe) - private static String playerAction = "pact"; // Bungee listener is implemented & registered + private static String playerAction = "pact"; /** * Gets the channel id used for: From de4dc7d0eef4a26aaaec5727ebb55832fcd4628e Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Mon, 20 Jul 2020 13:05:05 +0100 Subject: [PATCH 017/188] Moved configDir to MultiChatProxy API --- .../multichat/bungee/MultiChat.java | 45 ++++++++++++++++--- .../multichat/bungee/UUIDNameManager.java | 12 +++-- .../proxy/common/MultiChatProxy.java | 20 +++++++++ 3 files changed, 67 insertions(+), 10 deletions(-) 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 659185aa..c9be6db0 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java @@ -28,6 +28,7 @@ import net.md_5.bungee.event.EventHandler; import xyz.olivermartin.multichat.common.communication.CommChannels; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.MultiChatProxyPlatform; import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; import xyz.olivermartin.multichat.proxy.common.listeners.communication.ProxyPlayerActionListener; @@ -80,7 +81,6 @@ public class MultiChat extends Plugin implements Listener { }; - public static File configDir; public static String configversion; public static String defaultChannel = ""; @@ -261,25 +261,29 @@ public void onEnable() { @SuppressWarnings("unused") Metrics metrics = new Metrics(this); + MultiChatProxyPlatform platform = MultiChatProxyPlatform.BUNGEE; + MultiChatProxy.getInstance().registerPlatform(platform); + ProxyDataStore dataStore = new ProxyDataStore(); MultiChatProxy.getInstance().registerDataStore(dataStore); - configDir = getDataFolder(); + File configDirectory = getDataFolder(); if (!getDataFolder().exists()) { System.out.println("[MultiChat] Creating plugin directory!"); getDataFolder().mkdirs(); } + MultiChatProxy.getInstance().registerConfigDirectory(configDirectory); - String translationsDir = configDir.toString() + File.separator + "translations"; + String translationsDir = configDirectory.toString() + File.separator + "translations"; if (!new File(translationsDir).exists()) { System.out.println("[MultiChat] Creating translations directory!"); new File(translationsDir).mkdirs(); } - ConfigManager.getInstance().registerHandler("config.yml", configDir); - ConfigManager.getInstance().registerHandler("joinmessages.yml", configDir); - ConfigManager.getInstance().registerHandler("messages.yml", configDir); - ConfigManager.getInstance().registerHandler("chatcontrol.yml", configDir); + ConfigManager.getInstance().registerHandler("config.yml", configDirectory); + ConfigManager.getInstance().registerHandler("joinmessages.yml", configDirectory); + ConfigManager.getInstance().registerHandler("messages.yml", configDirectory); + ConfigManager.getInstance().registerHandler("chatcontrol.yml", configDirectory); ConfigManager.getInstance().registerHandler("messages_fr.yml", new File(translationsDir)); ConfigManager.getInstance().registerHandler("joinmessages_fr.yml", new File(translationsDir)); @@ -513,6 +517,8 @@ public void unregisterCommands(Configuration configYML, Configuration chatcontro public static void saveAnnouncements() { + File configDir = MultiChatProxy.getInstance().getConfigDirectory(); + try { File file = new File(configDir, "Announcements.dat"); FileOutputStream saveFile = new FileOutputStream(file); @@ -528,6 +534,8 @@ public static void saveAnnouncements() { public static void saveBulletins() { + File configDir = MultiChatProxy.getInstance().getConfigDirectory(); + try { File file = new File(configDir, "Bulletins.dat"); FileOutputStream saveFile = new FileOutputStream(file); @@ -545,6 +553,7 @@ public static void saveBulletins() { public static void saveChatInfo() { + File configDir = MultiChatProxy.getInstance().getConfigDirectory(); ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); try { @@ -573,6 +582,7 @@ public static void saveChatInfo() { public static void saveGroupChatInfo() { + File configDir = MultiChatProxy.getInstance().getConfigDirectory(); ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); try { @@ -590,6 +600,8 @@ public static void saveGroupChatInfo() { public static void saveCasts() { + File configDir = MultiChatProxy.getInstance().getConfigDirectory(); + try { File file = new File(configDir, "Casts.dat"); FileOutputStream saveFile = new FileOutputStream(file); @@ -605,6 +617,7 @@ public static void saveCasts() { public static void saveGroupSpyInfo() { + File configDir = MultiChatProxy.getInstance().getConfigDirectory(); ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); try { @@ -622,6 +635,7 @@ public static void saveGroupSpyInfo() { public static void saveSocialSpyInfo() { + File configDir = MultiChatProxy.getInstance().getConfigDirectory(); ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); try { @@ -639,6 +653,8 @@ public static void saveSocialSpyInfo() { public static void saveGlobalChatInfo() { + File configDir = MultiChatProxy.getInstance().getConfigDirectory(); + try { File file = new File(configDir, "GlobalChatInfo.dat"); FileOutputStream saveFile = new FileOutputStream(file); @@ -654,6 +670,8 @@ public static void saveGlobalChatInfo() { public static void saveMute() { + File configDir = MultiChatProxy.getInstance().getConfigDirectory(); + try { File file = new File(configDir, "Mute.dat"); FileOutputStream saveFile = new FileOutputStream(file); @@ -669,6 +687,7 @@ public static void saveMute() { public static void saveIgnore() { + File configDir = MultiChatProxy.getInstance().getConfigDirectory(); Configuration config = ConfigManager.getInstance().getHandler("chatcontrol.yml").getConfig(); if (config.getBoolean("session_ignore")) return; @@ -689,6 +708,7 @@ public static void saveIgnore() { @SuppressWarnings("unchecked") public static HashMap loadModChatInfo() { + File configDir = MultiChatProxy.getInstance().getConfigDirectory(); HashMap result = null; try { @@ -709,6 +729,7 @@ public static HashMap loadModChatInfo() { @SuppressWarnings("unchecked") public static void loadBulletins() { + File configDir = MultiChatProxy.getInstance().getConfigDirectory(); ArrayList result = null; boolean enabled = false; int timeBetween = 0; @@ -735,6 +756,7 @@ public static void loadBulletins() { @SuppressWarnings("unchecked") public static HashMap loadAnnouncements() { + File configDir = MultiChatProxy.getInstance().getConfigDirectory(); HashMap result = null; try { @@ -755,6 +777,7 @@ public static HashMap loadAnnouncements() { @SuppressWarnings("unchecked") public static HashMap loadAdminChatInfo() { + File configDir = MultiChatProxy.getInstance().getConfigDirectory(); HashMap result = null; try { @@ -775,6 +798,7 @@ public static HashMap loadAdminChatInfo() { @SuppressWarnings("unchecked") public static HashMap loadCasts() { + File configDir = MultiChatProxy.getInstance().getConfigDirectory(); HashMap result = null; try { @@ -795,6 +819,7 @@ public static HashMap loadCasts() { @SuppressWarnings("unchecked") public static HashMap loadGroupChatInfo() { + File configDir = MultiChatProxy.getInstance().getConfigDirectory(); HashMap result = null; try { @@ -815,6 +840,7 @@ public static HashMap loadGroupChatInfo() { @SuppressWarnings("unchecked") public static List loadGroupSpyInfo() { + File configDir = MultiChatProxy.getInstance().getConfigDirectory(); List result = null; try { @@ -835,6 +861,7 @@ public static List loadGroupSpyInfo() { @SuppressWarnings("unchecked") public static List loadSocialSpyInfo() { + File configDir = MultiChatProxy.getInstance().getConfigDirectory(); List result = null; try { @@ -855,6 +882,7 @@ public static List loadSocialSpyInfo() { @SuppressWarnings("unchecked") public static Map loadGlobalChatInfo() { + File configDir = MultiChatProxy.getInstance().getConfigDirectory(); Map result = null; try { @@ -875,6 +903,7 @@ public static Map loadGlobalChatInfo() { @SuppressWarnings("unchecked") public static Set loadMute() { + File configDir = MultiChatProxy.getInstance().getConfigDirectory(); Set result = null; try { @@ -895,6 +924,7 @@ public static Set loadMute() { @SuppressWarnings("unchecked") public static Map> loadIgnore() { + File configDir = MultiChatProxy.getInstance().getConfigDirectory(); Configuration config = ConfigManager.getInstance().getHandler("chatcontrol.yml").getConfig(); if (config.getBoolean("session_ignore")) return new HashMap>(); @@ -918,6 +948,7 @@ public static Map> loadIgnore() { public static void Startup() { + File configDir = MultiChatProxy.getInstance().getConfigDirectory(); ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); System.out.println("[MultiChat] Starting load routine for data files"); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/UUIDNameManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/UUIDNameManager.java index 97283381..ec69f676 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/UUIDNameManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/UUIDNameManager.java @@ -10,6 +10,8 @@ import java.util.Map; import java.util.UUID; +import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; + /** * UUID - NAME Manager *

Manages storage of UUIDS with their currently associated username

@@ -35,8 +37,10 @@ public static String getName(UUID uuid) { public static void saveUUIDS() { + File configDir = MultiChatProxy.getInstance().getConfigDirectory(); + try { - File file = new File(MultiChat.configDir, "MultiChatUUIDName.dat"); + File file = new File(configDir, "MultiChatUUIDName.dat"); FileOutputStream saveFile = new FileOutputStream(file); ObjectOutputStream out = new ObjectOutputStream(saveFile); out.writeObject(uuidname); @@ -51,10 +55,11 @@ public static void saveUUIDS() { @SuppressWarnings("unchecked") public static HashMap loadUUIDS() { + File configDir = MultiChatProxy.getInstance().getConfigDirectory(); HashMap result = null; try { - File file = new File(MultiChat.configDir, "MultiChatUUIDName.dat"); + File file = new File(configDir, "MultiChatUUIDName.dat"); FileInputStream saveFile = new FileInputStream(file); ObjectInputStream in = new ObjectInputStream(saveFile); result = (HashMap)in.readObject(); @@ -70,7 +75,8 @@ public static HashMap loadUUIDS() { public static void Startup() { - File f = new File(MultiChat.configDir, "MultiChatUUIDName.dat"); + File configDir = MultiChatProxy.getInstance().getConfigDirectory(); + File f = new File(configDir, "MultiChatUUIDName.dat"); if ((f.exists()) && (!f.isDirectory())) { uuidname.putAll(loadUUIDS()); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/MultiChatProxy.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/MultiChatProxy.java index 080f07a0..0bdac7ac 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/MultiChatProxy.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/MultiChatProxy.java @@ -1,5 +1,7 @@ package xyz.olivermartin.multichat.proxy.common; +import java.io.File; + /** * This is MultiChat's API running on the network proxy server * @@ -20,12 +22,30 @@ public static MultiChatProxy getInstance() { /* END STATIC */ + private MultiChatProxyPlatform platform; + private File configDirectory; private ProxyDataStore dataStore; /* END ATTRIBUTES */ private MultiChatProxy() { /* EMPTY */ } + public MultiChatProxyPlatform getPlatform() { + return this.platform; + } + + public void registerPlatform(MultiChatProxyPlatform platform) { + this.platform = platform; + } + + public File getConfigDirectory() { + return this.configDirectory; + } + + public void registerConfigDirectory(File configDirectory) { + this.configDirectory = configDirectory; + } + public ProxyDataStore getDataStore() { return this.dataStore; } From 27e5fc88c5a002a44637bc798abc244330ed17be Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Mon, 20 Jul 2020 13:43:37 +0100 Subject: [PATCH 018/188] Moved Announcements data file to new ProxyFileStore system --- .../multichat/bungee/MultiChat.java | 75 ++++-------------- .../bungee/commands/MultiChatCommand.java | 5 +- .../proxy/common/MultiChatProxy.java | 11 +++ .../storage/ProxyAnnouncementsFileStore.java | 63 +++++++++++++++ .../proxy/common/storage/ProxyFileStore.java | 9 +++ .../common/storage/ProxyFileStoreManager.java | 40 ++++++++++ .../common/storage/ProxyGenericFileStore.java | 78 +++++++++++++++++++ 7 files changed, 222 insertions(+), 59 deletions(-) create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/ProxyAnnouncementsFileStore.java create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/ProxyFileStore.java create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/ProxyFileStoreManager.java create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/ProxyGenericFileStore.java 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 c9be6db0..5513a5b6 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java @@ -35,6 +35,8 @@ import xyz.olivermartin.multichat.proxy.common.listeners.communication.ProxyPlayerChatListener; import xyz.olivermartin.multichat.proxy.common.listeners.communication.ProxyPlayerMetaListener; import xyz.olivermartin.multichat.proxy.common.listeners.communication.ProxyServerActionListener; +import xyz.olivermartin.multichat.proxy.common.storage.ProxyAnnouncementsFileStore; +import xyz.olivermartin.multichat.proxy.common.storage.ProxyFileStoreManager; /** @@ -82,7 +84,9 @@ public class MultiChat extends Plugin implements Listener { }; public static String configversion; + private static MultiChat instance; + // Config values public static String defaultChannel = ""; public static boolean forceChannelOnJoin = false; @@ -90,8 +94,6 @@ public class MultiChat extends Plugin implements Listener { public static boolean logStaffChat = true; public static boolean logGroupChat = true; - private static MultiChat instance; - public static boolean premiumVanish = false; public static boolean hideVanishedStaffInMsg = true; public static boolean hideVanishedStaffInStaffList = true; @@ -111,12 +113,14 @@ public void run() { getLogger().info("Commencing backup!"); + MultiChatProxy.getInstance().getFileStoreManager().save(); + saveChatInfo(); saveGroupChatInfo(); saveGroupSpyInfo(); saveGlobalChatInfo(); saveSocialSpyInfo(); - saveAnnouncements(); + // TODO Legacy saveAnnouncements(); saveBulletins(); saveCasts(); saveMute(); @@ -331,6 +335,13 @@ public void onEnable() { System.out.println("[MultiChat] Config Version: " + configversion); // Run start-up routines + ProxyFileStoreManager fileStoreManager = new ProxyFileStoreManager(); + + fileStoreManager.registerFileStore("announcements.dat", + new ProxyAnnouncementsFileStore("Announcements.dat", configDirectory)); + + MultiChatProxy.getInstance().registerFileStoreManager(fileStoreManager); + Startup(); UUIDNameManager.Startup(); @@ -395,12 +406,14 @@ public void onDisable() { getLogger().info("Thankyou for using MultiChat. Disabling..."); + MultiChatProxy.getInstance().getFileStoreManager().save(); + saveChatInfo(); saveGroupChatInfo(); saveGroupSpyInfo(); saveGlobalChatInfo(); saveSocialSpyInfo(); - saveAnnouncements(); + // TODO Legacy saveAnnouncements(); saveBulletins(); saveCasts(); saveMute(); @@ -515,23 +528,6 @@ public void unregisterCommands(Configuration configYML, Configuration chatcontro } - public static void saveAnnouncements() { - - File configDir = MultiChatProxy.getInstance().getConfigDirectory(); - - try { - File file = new File(configDir, "Announcements.dat"); - FileOutputStream saveFile = new FileOutputStream(file); - ObjectOutputStream out = new ObjectOutputStream(saveFile); - out.writeObject(Announcements.getAnnouncementList()); - out.close(); - } catch (IOException e) { - System.out.println("[MultiChat] [Save Error] An error has occured writing the announcements file!"); - e.printStackTrace(); - } - - } - public static void saveBulletins() { File configDir = MultiChatProxy.getInstance().getConfigDirectory(); @@ -753,27 +749,6 @@ public static void loadBulletins() { } - @SuppressWarnings("unchecked") - public static HashMap loadAnnouncements() { - - File configDir = MultiChatProxy.getInstance().getConfigDirectory(); - HashMap result = null; - - try { - File file = new File(configDir, "Announcements.dat"); - FileInputStream saveFile = new FileInputStream(file); - ObjectInputStream in = new ObjectInputStream(saveFile); - result = (HashMap)in.readObject(); - in.close(); - } catch (IOException|ClassNotFoundException e) { - System.out.println("[MultiChat] [Load Error] An error has occured reading the announcements file!"); - e.printStackTrace(); - } - - return result; - - } - @SuppressWarnings("unchecked") public static HashMap loadAdminChatInfo() { @@ -1035,22 +1010,6 @@ public static void Startup() { } - File f7 = new File(configDir, "Announcements.dat"); - - if ((f7.exists()) && (!f7.isDirectory())) { - - Announcements.loadAnnouncementList((loadAnnouncements())); - - } else { - - System.out.println("[MultiChat] Some announcements files do not exist to load. Must be first startup!"); - System.out.println("[MultiChat] Welcome to MultiChat! :D"); - System.out.println("[MultiChat] Attempting to create hash files!"); - saveAnnouncements(); - System.out.println("[MultiChat] The files were created!"); - - } - File f8 = new File(configDir, "Bulletins.dat"); if ((f8.exists()) && (!f8.isDirectory())) { 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 f60fe8f3..4d1085e4 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 @@ -13,6 +13,7 @@ import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.bungee.MultiChat; import xyz.olivermartin.multichat.bungee.UUIDNameManager; +import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; /** * MultiChat (Admin) Command @@ -78,12 +79,14 @@ public void execute(CommandSender sender, String[] args) { MessageManager.sendMessage(sender, "command_multichat_save_prepare"); + MultiChatProxy.getInstance().getFileStoreManager().save(); + MultiChat.saveChatInfo(); MultiChat.saveGroupChatInfo(); MultiChat.saveGroupSpyInfo(); MultiChat.saveGlobalChatInfo(); MultiChat.saveSocialSpyInfo(); - MultiChat.saveAnnouncements(); + //TODO Legacy MultiChat.saveAnnouncements(); MultiChat.saveBulletins(); MultiChat.saveCasts(); MultiChat.saveMute(); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/MultiChatProxy.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/MultiChatProxy.java index 0bdac7ac..ece753c5 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/MultiChatProxy.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/MultiChatProxy.java @@ -2,6 +2,8 @@ import java.io.File; +import xyz.olivermartin.multichat.proxy.common.storage.ProxyFileStoreManager; + /** * This is MultiChat's API running on the network proxy server * @@ -25,6 +27,7 @@ public static MultiChatProxy getInstance() { private MultiChatProxyPlatform platform; private File configDirectory; private ProxyDataStore dataStore; + private ProxyFileStoreManager fileStoreManager; /* END ATTRIBUTES */ @@ -54,4 +57,12 @@ public void registerDataStore(ProxyDataStore dataStore) { this.dataStore = dataStore; } + public ProxyFileStoreManager getFileStoreManager() { + return this.fileStoreManager; + } + + public void registerFileStoreManager(ProxyFileStoreManager fileStoreManager) { + this.fileStoreManager = fileStoreManager; + } + } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/ProxyAnnouncementsFileStore.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/ProxyAnnouncementsFileStore.java new file mode 100644 index 00000000..61c56652 --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/ProxyAnnouncementsFileStore.java @@ -0,0 +1,63 @@ +package xyz.olivermartin.multichat.proxy.common.storage; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.util.HashMap; + +import xyz.olivermartin.multichat.bungee.Announcements; + +public class ProxyAnnouncementsFileStore extends ProxyGenericFileStore { + + public ProxyAnnouncementsFileStore(String fileName, File fileDirectory) { + super(fileName, fileDirectory); + } + + @SuppressWarnings("unchecked") + @Override + protected boolean loadFile(File file) { + + HashMap result = null; + + try { + + FileInputStream stream = new FileInputStream(file); + ObjectInputStream in = new ObjectInputStream(stream); + result = (HashMap)in.readObject(); + in.close(); + Announcements.loadAnnouncementList(result); + return true; + + } catch (IOException|ClassNotFoundException e) { + + e.printStackTrace(); + return false; + + } + + } + + @Override + protected boolean saveFile(File file) { + + try { + + FileOutputStream stream = new FileOutputStream(file); + ObjectOutputStream out = new ObjectOutputStream(stream); + out.writeObject(Announcements.getAnnouncementList()); + out.close(); + return true; + + } catch (IOException e) { + + e.printStackTrace(); + return false; + + } + + } + +} diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/ProxyFileStore.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/ProxyFileStore.java new file mode 100644 index 00000000..eb58dc28 --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/ProxyFileStore.java @@ -0,0 +1,9 @@ +package xyz.olivermartin.multichat.proxy.common.storage; + +public interface ProxyFileStore { + + public boolean reload(); + + public boolean save(); + +} diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/ProxyFileStoreManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/ProxyFileStoreManager.java new file mode 100644 index 00000000..0288b2e3 --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/ProxyFileStoreManager.java @@ -0,0 +1,40 @@ +package xyz.olivermartin.multichat.proxy.common.storage; + +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +public class ProxyFileStoreManager { + + Map fileStores; + + public ProxyFileStoreManager() { + this.fileStores = new HashMap(); + } + + public void registerFileStore(String id, ProxyFileStore fileStore) { + this.fileStores.put(id.toLowerCase(), fileStore); + } + + public void unregisterFileStore(String id) { + this.fileStores.remove(id.toLowerCase()); + } + + public Optional getFileStore(String id) { + if (!fileStores.containsKey(id.toLowerCase())) return Optional.empty(); + return Optional.of(fileStores.get(id.toLowerCase())); + } + + public void reload() { + for (ProxyFileStore fileStore : fileStores.values()) { + fileStore.reload(); + } + } + + public void save() { + for (ProxyFileStore fileStore : fileStores.values()) { + fileStore.save(); + } + } + +} diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/ProxyGenericFileStore.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/ProxyGenericFileStore.java new file mode 100644 index 00000000..492fcd5f --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/ProxyGenericFileStore.java @@ -0,0 +1,78 @@ +package xyz.olivermartin.multichat.proxy.common.storage; + +import java.io.File; + +import xyz.olivermartin.multichat.bungee.DebugManager; + +public abstract class ProxyGenericFileStore implements ProxyFileStore { + + private String fileName; + private File fileDirectory; + + public ProxyGenericFileStore(String fileName, File fileDirectory) { + this.fileName = fileName; + this.fileDirectory = fileDirectory; + startupFile(); + } + + public String getFileName() { + return fileName; + } + + public File getFileDirectory() { + return this.fileDirectory; + } + + public File getFile() { + return new File(fileDirectory, fileName); + } + + protected boolean startupFile() { + + File file = getFile(); + + boolean status; + + if (!file.exists()) { + status = saveFile(file); + DebugManager.log("[ProxyFileStore] [" + getFileName() + "] Created new file (was successful = " + status + ")"); + } + + status = loadFile(file); + DebugManager.log("[ProxyFileStore] [" + getFileName() + "] Loaded file (was successful = " + status + ")"); + + return status; + + } + + /** + * Save the data to file + * @return true if successful + */ + public boolean save() { + return saveFile(getFile()); + } + + /** + * Load the data from the file into the system (overwrites anything currently loaded) + * @return true if successful + */ + public boolean reload() { + return startupFile(); + } + + /** + * Load the file contents into the correct place + * @param file + * @return true if successful + */ + protected abstract boolean loadFile(File file); + + /** + * Save the file contents from the correct place + * @param file + * @return true if successful + */ + protected abstract boolean saveFile(File file); + +} From 9edd8cb488fa409eca78582f35e28a6798d60b27 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Mon, 20 Jul 2020 13:54:22 +0100 Subject: [PATCH 019/188] Moved the individual file data stores to their own package --- .../main/java/xyz/olivermartin/multichat/bungee/MultiChat.java | 2 +- .../storage/{ => files}/ProxyAnnouncementsFileStore.java | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) rename multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/{ => files}/ProxyAnnouncementsFileStore.java (86%) 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 5513a5b6..ecc05402 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java @@ -35,8 +35,8 @@ import xyz.olivermartin.multichat.proxy.common.listeners.communication.ProxyPlayerChatListener; import xyz.olivermartin.multichat.proxy.common.listeners.communication.ProxyPlayerMetaListener; import xyz.olivermartin.multichat.proxy.common.listeners.communication.ProxyServerActionListener; -import xyz.olivermartin.multichat.proxy.common.storage.ProxyAnnouncementsFileStore; import xyz.olivermartin.multichat.proxy.common.storage.ProxyFileStoreManager; +import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyAnnouncementsFileStore; /** diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/ProxyAnnouncementsFileStore.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyAnnouncementsFileStore.java similarity index 86% rename from multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/ProxyAnnouncementsFileStore.java rename to multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyAnnouncementsFileStore.java index 61c56652..0009fdc9 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/ProxyAnnouncementsFileStore.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyAnnouncementsFileStore.java @@ -1,4 +1,4 @@ -package xyz.olivermartin.multichat.proxy.common.storage; +package xyz.olivermartin.multichat.proxy.common.storage.files; import java.io.File; import java.io.FileInputStream; @@ -9,6 +9,7 @@ import java.util.HashMap; import xyz.olivermartin.multichat.bungee.Announcements; +import xyz.olivermartin.multichat.proxy.common.storage.ProxyGenericFileStore; public class ProxyAnnouncementsFileStore extends ProxyGenericFileStore { From a5f898ce968584539a7083a0f5c5fdd6e07da2c6 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Mon, 20 Jul 2020 14:02:55 +0100 Subject: [PATCH 020/188] Implemented new Bulletins file --- .../multichat/bungee/MultiChat.java | 70 ++---------------- .../bungee/commands/MultiChatCommand.java | 2 +- .../files/ProxyBulletinsFileStore.java | 71 +++++++++++++++++++ 3 files changed, 78 insertions(+), 65 deletions(-) create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyBulletinsFileStore.java 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 ecc05402..94c62c62 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java @@ -37,6 +37,7 @@ import xyz.olivermartin.multichat.proxy.common.listeners.communication.ProxyServerActionListener; import xyz.olivermartin.multichat.proxy.common.storage.ProxyFileStoreManager; import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyAnnouncementsFileStore; +import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyBulletinsFileStore; /** @@ -121,7 +122,7 @@ public void run() { saveGlobalChatInfo(); saveSocialSpyInfo(); // TODO Legacy saveAnnouncements(); - saveBulletins(); + // saveBulletins(); saveCasts(); saveMute(); saveIgnore(); @@ -340,6 +341,9 @@ public void onEnable() { fileStoreManager.registerFileStore("announcements.dat", new ProxyAnnouncementsFileStore("Announcements.dat", configDirectory)); + fileStoreManager.registerFileStore("bulletins.dat", + new ProxyBulletinsFileStore("Bulletins.dat", configDirectory)); + MultiChatProxy.getInstance().registerFileStoreManager(fileStoreManager); Startup(); @@ -414,7 +418,7 @@ public void onDisable() { saveGlobalChatInfo(); saveSocialSpyInfo(); // TODO Legacy saveAnnouncements(); - saveBulletins(); + // saveBulletins(); saveCasts(); saveMute(); saveIgnore(); @@ -528,25 +532,6 @@ public void unregisterCommands(Configuration configYML, Configuration chatcontro } - public static void saveBulletins() { - - File configDir = MultiChatProxy.getInstance().getConfigDirectory(); - - try { - File file = new File(configDir, "Bulletins.dat"); - FileOutputStream saveFile = new FileOutputStream(file); - ObjectOutputStream out = new ObjectOutputStream(saveFile); - out.writeBoolean(Bulletins.isEnabled()); - out.writeInt(Bulletins.getTimeBetween()); - out.writeObject(Bulletins.getArrayList()); - out.close(); - } catch (IOException e) { - System.out.println("[MultiChat] [Save Error] An error has occured writing the bulletins file!"); - e.printStackTrace(); - } - - } - public static void saveChatInfo() { File configDir = MultiChatProxy.getInstance().getConfigDirectory(); @@ -722,33 +707,6 @@ public static HashMap loadModChatInfo() { } - @SuppressWarnings("unchecked") - public static void loadBulletins() { - - File configDir = MultiChatProxy.getInstance().getConfigDirectory(); - ArrayList result = null; - boolean enabled = false; - int timeBetween = 0; - - try { - File file = new File(configDir, "Bulletins.dat"); - FileInputStream saveFile = new FileInputStream(file); - ObjectInputStream in = new ObjectInputStream(saveFile); - enabled = in.readBoolean(); - timeBetween = in.readInt(); - result = (ArrayList)in.readObject(); - in.close(); - Bulletins.setArrayList(result); - if (enabled) { - Bulletins.startBulletins(timeBetween); - } - } catch (IOException|ClassNotFoundException e) { - System.out.println("[MultiChat] [Load Error] An error has occured reading the bulletins file!"); - e.printStackTrace(); - } - - } - @SuppressWarnings("unchecked") public static HashMap loadAdminChatInfo() { @@ -1010,22 +968,6 @@ public static void Startup() { } - File f8 = new File(configDir, "Bulletins.dat"); - - if ((f8.exists()) && (!f8.isDirectory())) { - - loadBulletins(); - - } else { - - System.out.println("[MultiChat] Some bulletins files do not exist to load. Must be first startup!"); - System.out.println("[MultiChat] Welcome to MultiChat! :D"); - System.out.println("[MultiChat] Attempting to create hash files!"); - saveBulletins(); - System.out.println("[MultiChat] The files were created!"); - - } - File f9 = new File(configDir, "Casts.dat"); if ((f9.exists()) && (!f9.isDirectory())) { 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 4d1085e4..724bbcb6 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 @@ -87,7 +87,7 @@ public void execute(CommandSender sender, String[] args) { MultiChat.saveGlobalChatInfo(); MultiChat.saveSocialSpyInfo(); //TODO Legacy MultiChat.saveAnnouncements(); - MultiChat.saveBulletins(); + //MultiChat.saveBulletins(); MultiChat.saveCasts(); MultiChat.saveMute(); MultiChat.saveIgnore(); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyBulletinsFileStore.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyBulletinsFileStore.java new file mode 100644 index 00000000..22cdf627 --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyBulletinsFileStore.java @@ -0,0 +1,71 @@ +package xyz.olivermartin.multichat.proxy.common.storage.files; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.util.ArrayList; + +import xyz.olivermartin.multichat.bungee.Bulletins; +import xyz.olivermartin.multichat.proxy.common.storage.ProxyGenericFileStore; + +public class ProxyBulletinsFileStore extends ProxyGenericFileStore { + + public ProxyBulletinsFileStore(String fileName, File fileDirectory) { + super(fileName, fileDirectory); + } + + @SuppressWarnings("unchecked") + @Override + protected boolean loadFile(File file) { + + ArrayList result = null; + boolean enabled = false; + int timeBetween = 0; + + try { + + FileInputStream stream = new FileInputStream(file); + ObjectInputStream in = new ObjectInputStream(stream); + enabled = in.readBoolean(); + timeBetween = in.readInt(); + result = (ArrayList)in.readObject(); + in.close(); + Bulletins.setArrayList(result); + if (enabled) Bulletins.startBulletins(timeBetween); + return true; + + } catch (IOException|ClassNotFoundException e) { + + e.printStackTrace(); + return false; + + } + + } + + @Override + protected boolean saveFile(File file) { + + try { + + FileOutputStream stream = new FileOutputStream(file); + ObjectOutputStream out = new ObjectOutputStream(stream); + out.writeBoolean(Bulletins.isEnabled()); + out.writeInt(Bulletins.getTimeBetween()); + out.writeObject(Bulletins.getArrayList()); + out.close(); + return true; + + } catch (IOException e) { + + e.printStackTrace(); + return false; + + } + + } + +} From ccecf78ed5405d0272edf73c0c3099ed20b71770 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Tue, 21 Jul 2020 17:46:17 +0100 Subject: [PATCH 021/188] Moved StaffChatInfo and AdminChatInfo files to new file stores --- .../multichat/bungee/MultiChat.java | 106 ++---------------- .../bungee/commands/MultiChatCommand.java | 2 +- .../files/ProxyAdminChatFileStore.java | 71 ++++++++++++ .../files/ProxyStaffChatFileStore.java | 71 ++++++++++++ 4 files changed, 155 insertions(+), 95 deletions(-) create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyAdminChatFileStore.java create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyStaffChatFileStore.java 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 22ca0b7f..a17a814d 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java @@ -15,7 +15,6 @@ import java.util.UUID; import java.util.concurrent.TimeUnit; -import com.olivermartin410.plugins.TChatInfo; import com.olivermartin410.plugins.TGroupChatInfo; import net.md_5.bungee.api.ProxyServer; @@ -36,8 +35,10 @@ import xyz.olivermartin.multichat.proxy.common.listeners.communication.ProxyPlayerMetaListener; import xyz.olivermartin.multichat.proxy.common.listeners.communication.ProxyServerActionListener; import xyz.olivermartin.multichat.proxy.common.storage.ProxyFileStoreManager; +import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyAdminChatFileStore; import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyAnnouncementsFileStore; import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyBulletinsFileStore; +import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyStaffChatFileStore; /** @@ -54,8 +55,8 @@ public class MultiChat extends Plugin implements Listener { public static final String[] ALLOWED_VERSIONS = new String[] { LATEST_VERSION, - "1.9.5", - "1.9.4", + "1.9.5", + "1.9.4", "1.9.3", "1.9.2", "1.9.1", @@ -118,7 +119,7 @@ public void run() { MultiChatProxy.getInstance().getFileStoreManager().save(); - saveChatInfo(); + //saveChatInfo(); saveGroupChatInfo(); saveGroupSpyInfo(); saveGlobalChatInfo(); @@ -346,6 +347,12 @@ public void onEnable() { fileStoreManager.registerFileStore("bulletins.dat", new ProxyBulletinsFileStore("Bulletins.dat", configDirectory)); + fileStoreManager.registerFileStore("staffchatinfo.dat", + new ProxyStaffChatFileStore("StaffChatInfo.dat", configDirectory)); + + fileStoreManager.registerFileStore("adminchatinfo.dat", + new ProxyAdminChatFileStore("AdminChatInfo.dat", configDirectory)); + MultiChatProxy.getInstance().registerFileStoreManager(fileStoreManager); Startup(); @@ -414,7 +421,7 @@ public void onDisable() { MultiChatProxy.getInstance().getFileStoreManager().save(); - saveChatInfo(); + //saveChatInfo(); saveGroupChatInfo(); saveGroupSpyInfo(); saveGlobalChatInfo(); @@ -534,35 +541,6 @@ public void unregisterCommands(Configuration configYML, Configuration chatcontro } - public static void saveChatInfo() { - - File configDir = MultiChatProxy.getInstance().getConfigDirectory(); - ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); - - try { - File file = new File(configDir, "StaffChatInfo.dat"); - FileOutputStream saveFile = new FileOutputStream(file); - ObjectOutputStream out = new ObjectOutputStream(saveFile); - out.writeObject(ds.getModChatPreferences()); - out.close(); - } catch (IOException e) { - System.out.println("[MultiChat] [Save Error] An error has occured writing the mod chat info file!"); - e.printStackTrace(); - } - - try { - File file = new File(configDir, "AdminChatInfo.dat"); - FileOutputStream saveFile = new FileOutputStream(file); - ObjectOutputStream out = new ObjectOutputStream(saveFile); - out.writeObject(ds.getAdminChatPreferences()); - out.close(); - } catch (IOException e) { - System.out.println("[MultiChat] [Save Error] An error has occured writing the admin chat info file!"); - e.printStackTrace(); - } - - } - public static void saveGroupChatInfo() { File configDir = MultiChatProxy.getInstance().getConfigDirectory(); @@ -688,48 +666,6 @@ public static void saveIgnore() { } - @SuppressWarnings("unchecked") - public static HashMap loadModChatInfo() { - - File configDir = MultiChatProxy.getInstance().getConfigDirectory(); - HashMap result = null; - - try { - File file = new File(configDir, "StaffChatInfo.dat"); - FileInputStream saveFile = new FileInputStream(file); - ObjectInputStream in = new ObjectInputStream(saveFile); - result = (HashMap)in.readObject(); - in.close(); - } catch (IOException|ClassNotFoundException e) { - System.out.println("[MultiChat] [Load Error] An error has occured reading the mod chat info file!"); - e.printStackTrace(); - } - - return result; - - } - - @SuppressWarnings("unchecked") - public static HashMap loadAdminChatInfo() { - - File configDir = MultiChatProxy.getInstance().getConfigDirectory(); - HashMap result = null; - - try { - File file = new File(configDir, "AdminChatInfo.dat"); - FileInputStream saveFile = new FileInputStream(file); - ObjectInputStream in = new ObjectInputStream(saveFile); - result = (HashMap)in.readObject(); - in.close(); - } catch (IOException|ClassNotFoundException e) { - System.out.println("[MultiChat] [Load Error] An error has occured reading the admin chat info file!"); - e.printStackTrace(); - } - - return result; - - } - @SuppressWarnings("unchecked") public static HashMap loadCasts() { @@ -888,24 +824,6 @@ public static void Startup() { System.out.println("[MultiChat] Starting load routine for data files"); - File f = new File(configDir, "StaffChatInfo.dat"); - File f2 = new File(configDir, "AdminChatInfo.dat"); - - if ((f.exists()) && (!f.isDirectory()) && (f2.exists()) && (!f2.isDirectory())) { - - ds.setModChatPreferences(loadModChatInfo()); - ds.setAdminChatPreferences(loadAdminChatInfo()); - - } else { - - System.out.println("[MultiChat] Some staff chat files do not exist to load. Must be first startup!"); - System.out.println("[MultiChat] Welcome to MultiChat! :D"); - System.out.println("[MultiChat] Attempting to create hash files!"); - saveChatInfo(); - System.out.println("[MultiChat] The files were created!"); - - } - File f3 = new File(configDir, "GroupChatInfo.dat"); if ((f3.exists()) && (!f3.isDirectory())) { 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 724bbcb6..11ee8a56 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 @@ -81,7 +81,7 @@ public void execute(CommandSender sender, String[] args) { MultiChatProxy.getInstance().getFileStoreManager().save(); - MultiChat.saveChatInfo(); + //MultiChat.saveChatInfo(); MultiChat.saveGroupChatInfo(); MultiChat.saveGroupSpyInfo(); MultiChat.saveGlobalChatInfo(); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyAdminChatFileStore.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyAdminChatFileStore.java new file mode 100644 index 00000000..bf66fc92 --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyAdminChatFileStore.java @@ -0,0 +1,71 @@ +package xyz.olivermartin.multichat.proxy.common.storage.files; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.util.HashMap; +import java.util.UUID; + +import com.olivermartin410.plugins.TChatInfo; + +import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; +import xyz.olivermartin.multichat.proxy.common.storage.ProxyGenericFileStore; + +public class ProxyAdminChatFileStore extends ProxyGenericFileStore { + + public ProxyAdminChatFileStore(String fileName, File fileDirectory) { + super(fileName, fileDirectory); + } + + @SuppressWarnings("unchecked") + @Override + protected boolean loadFile(File file) { + + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + HashMap result = null; + + try { + + FileInputStream saveFile = new FileInputStream(file); + ObjectInputStream in = new ObjectInputStream(saveFile); + result = (HashMap)in.readObject(); + in.close(); + ds.setAdminChatPreferences(result); + return true; + + } catch (IOException|ClassNotFoundException e) { + + e.printStackTrace(); + return false; + + } + + } + + @Override + protected boolean saveFile(File file) { + + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + + try { + + FileOutputStream stream = new FileOutputStream(file); + ObjectOutputStream out = new ObjectOutputStream(stream); + out.writeObject(ds.getAdminChatPreferences()); + out.close(); + return true; + + } catch (IOException e) { + + e.printStackTrace(); + return false; + + } + + } + +} diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyStaffChatFileStore.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyStaffChatFileStore.java new file mode 100644 index 00000000..2b7a7aaf --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyStaffChatFileStore.java @@ -0,0 +1,71 @@ +package xyz.olivermartin.multichat.proxy.common.storage.files; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.util.HashMap; +import java.util.UUID; + +import com.olivermartin410.plugins.TChatInfo; + +import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; +import xyz.olivermartin.multichat.proxy.common.storage.ProxyGenericFileStore; + +public class ProxyStaffChatFileStore extends ProxyGenericFileStore { + + public ProxyStaffChatFileStore(String fileName, File fileDirectory) { + super(fileName, fileDirectory); + } + + @SuppressWarnings("unchecked") + @Override + protected boolean loadFile(File file) { + + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + HashMap result = null; + + try { + + FileInputStream stream = new FileInputStream(file); + ObjectInputStream in = new ObjectInputStream(stream); + result = (HashMap)in.readObject(); + in.close(); + ds.setModChatPreferences(result); + return true; + + } catch (IOException|ClassNotFoundException e) { + + e.printStackTrace(); + return false; + + } + + } + + @Override + protected boolean saveFile(File file) { + + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + + try { + + FileOutputStream stream = new FileOutputStream(file); + ObjectOutputStream out = new ObjectOutputStream(stream); + out.writeObject(ds.getModChatPreferences()); + out.close(); + return true; + + } catch (IOException e) { + + e.printStackTrace(); + return false; + + } + + } + +} From c606e3d78b0fc0932c7b98664ca032750fbd0b54 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Tue, 21 Jul 2020 18:01:43 +0100 Subject: [PATCH 022/188] Moved GroupChatInfo.dat file to the new File Stores --- .../multichat/bungee/MultiChat.java | 64 ++--------------- .../bungee/commands/MultiChatCommand.java | 2 +- .../files/ProxyGroupChatFileStore.java | 70 +++++++++++++++++++ 3 files changed, 76 insertions(+), 60 deletions(-) create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyGroupChatFileStore.java 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 a17a814d..30e83356 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java @@ -15,8 +15,6 @@ import java.util.UUID; import java.util.concurrent.TimeUnit; -import com.olivermartin410.plugins.TGroupChatInfo; - import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.event.PostLoginEvent; @@ -120,7 +118,7 @@ public void run() { MultiChatProxy.getInstance().getFileStoreManager().save(); //saveChatInfo(); - saveGroupChatInfo(); + //saveGroupChatInfo(); saveGroupSpyInfo(); saveGlobalChatInfo(); saveSocialSpyInfo(); @@ -353,6 +351,9 @@ public void onEnable() { fileStoreManager.registerFileStore("adminchatinfo.dat", new ProxyAdminChatFileStore("AdminChatInfo.dat", configDirectory)); + fileStoreManager.registerFileStore("groupchatinfo.dat", + new ProxyAdminChatFileStore("GroupChatInfo.dat", configDirectory)); + MultiChatProxy.getInstance().registerFileStoreManager(fileStoreManager); Startup(); @@ -422,7 +423,7 @@ public void onDisable() { MultiChatProxy.getInstance().getFileStoreManager().save(); //saveChatInfo(); - saveGroupChatInfo(); + //saveGroupChatInfo(); saveGroupSpyInfo(); saveGlobalChatInfo(); saveSocialSpyInfo(); @@ -541,24 +542,6 @@ public void unregisterCommands(Configuration configYML, Configuration chatcontro } - public static void saveGroupChatInfo() { - - File configDir = MultiChatProxy.getInstance().getConfigDirectory(); - ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); - - try { - File file = new File(configDir, "GroupChatInfo.dat"); - FileOutputStream saveFile = new FileOutputStream(file); - ObjectOutputStream out = new ObjectOutputStream(saveFile); - out.writeObject(ds.getGroupChats()); - out.close(); - } catch (IOException e) { - System.out.println("[MultiChat] [Save Error] An error has occured writing the group chat info file!"); - e.printStackTrace(); - } - - } - public static void saveCasts() { File configDir = MultiChatProxy.getInstance().getConfigDirectory(); @@ -687,27 +670,6 @@ public static HashMap loadCasts() { } - @SuppressWarnings("unchecked") - public static HashMap loadGroupChatInfo() { - - File configDir = MultiChatProxy.getInstance().getConfigDirectory(); - HashMap result = null; - - try { - File file = new File(configDir, "GroupChatInfo.dat"); - FileInputStream saveFile = new FileInputStream(file); - ObjectInputStream in = new ObjectInputStream(saveFile); - result = (HashMap)in.readObject(); - in.close(); - } catch (IOException|ClassNotFoundException e) { - System.out.println("[MultiChat] [Load Error] An error has occured reading the group chat info file!"); - e.printStackTrace(); - } - - return result; - - } - @SuppressWarnings("unchecked") public static List loadGroupSpyInfo() { @@ -824,22 +786,6 @@ public static void Startup() { System.out.println("[MultiChat] Starting load routine for data files"); - File f3 = new File(configDir, "GroupChatInfo.dat"); - - if ((f3.exists()) && (!f3.isDirectory())) { - - ds.setGroupChats(loadGroupChatInfo()); - - } else { - - System.out.println("[MultiChat] Some group chat files do not exist to load. Must be first startup!"); - System.out.println("[MultiChat] Enabling Group Chats! :D"); - System.out.println("[MultiChat] Attempting to create hash files!"); - saveGroupChatInfo(); - System.out.println("[MultiChat] The files were created!"); - - } - File f4 = new File(configDir, "GroupSpyInfo.dat"); if ((f4.exists()) && (!f4.isDirectory())) { 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 11ee8a56..0b547800 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 @@ -82,7 +82,7 @@ public void execute(CommandSender sender, String[] args) { MultiChatProxy.getInstance().getFileStoreManager().save(); //MultiChat.saveChatInfo(); - MultiChat.saveGroupChatInfo(); + //MultiChat.saveGroupChatInfo(); MultiChat.saveGroupSpyInfo(); MultiChat.saveGlobalChatInfo(); MultiChat.saveSocialSpyInfo(); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyGroupChatFileStore.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyGroupChatFileStore.java new file mode 100644 index 00000000..0bd359bf --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyGroupChatFileStore.java @@ -0,0 +1,70 @@ +package xyz.olivermartin.multichat.proxy.common.storage.files; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.util.HashMap; + +import com.olivermartin410.plugins.TGroupChatInfo; + +import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; +import xyz.olivermartin.multichat.proxy.common.storage.ProxyGenericFileStore; + +public class ProxyGroupChatFileStore extends ProxyGenericFileStore { + + public ProxyGroupChatFileStore(String fileName, File fileDirectory) { + super(fileName, fileDirectory); + } + + @SuppressWarnings("unchecked") + @Override + protected boolean loadFile(File file) { + + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + HashMap result = null; + + try { + + FileInputStream stream = new FileInputStream(file); + ObjectInputStream in = new ObjectInputStream(stream); + result = (HashMap)in.readObject(); + in.close(); + ds.setGroupChats(result); + return true; + + } catch (IOException|ClassNotFoundException e) { + + e.printStackTrace(); + return false; + + } + + } + + @Override + protected boolean saveFile(File file) { + + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + + try { + + FileOutputStream stream = new FileOutputStream(file); + ObjectOutputStream out = new ObjectOutputStream(stream); + out.writeObject(ds.getGroupChats()); + out.close(); + return true; + + } catch (IOException e) { + + e.printStackTrace(); + return false; + + } + + } + +} From 9872e285b9a15906d4bb962ed30f33452fd14b2c Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Tue, 21 Jul 2020 18:02:24 +0100 Subject: [PATCH 023/188] Fixed typo in last commit --- .../main/java/xyz/olivermartin/multichat/bungee/MultiChat.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 30e83356..2d5ddef2 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java @@ -36,6 +36,7 @@ import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyAdminChatFileStore; import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyAnnouncementsFileStore; import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyBulletinsFileStore; +import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyGroupChatFileStore; import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyStaffChatFileStore; @@ -352,7 +353,7 @@ public void onEnable() { new ProxyAdminChatFileStore("AdminChatInfo.dat", configDirectory)); fileStoreManager.registerFileStore("groupchatinfo.dat", - new ProxyAdminChatFileStore("GroupChatInfo.dat", configDirectory)); + new ProxyGroupChatFileStore("GroupChatInfo.dat", configDirectory)); MultiChatProxy.getInstance().registerFileStoreManager(fileStoreManager); From c33bd208007cf66609afe4f0f5174b883d27d864 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Tue, 21 Jul 2020 18:07:16 +0100 Subject: [PATCH 024/188] Changed spigot api version to 1.13 (no longer listed as legacy) --- multichat/src/main/resources/plugin.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/multichat/src/main/resources/plugin.yml b/multichat/src/main/resources/plugin.yml index 169f336c..c82fb345 100644 --- a/multichat/src/main/resources/plugin.yml +++ b/multichat/src/main/resources/plugin.yml @@ -1,6 +1,7 @@ name: MultiChat version: 1.10 author: Revilo410 +api-version: 1.13 main: xyz.olivermartin.multichat.local.spigot.MultiChatLocalSpigotPlugin softdepend: [Vault,PlaceholderAPI] commands: From 0f71bec516f905a88ec4d935c9cebe4bfd83a830 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Tue, 21 Jul 2020 18:17:12 +0100 Subject: [PATCH 025/188] Moved GroupSpyInfo.dat files to new FileStore --- .../multichat/bungee/MultiChat.java | 65 ++--------------- .../bungee/commands/MultiChatCommand.java | 2 +- .../storage/files/ProxyGroupSpyFileStore.java | 69 +++++++++++++++++++ 3 files changed, 77 insertions(+), 59 deletions(-) create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyGroupSpyFileStore.java 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 2d5ddef2..dd2d7db0 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java @@ -37,6 +37,7 @@ import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyAnnouncementsFileStore; import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyBulletinsFileStore; import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyGroupChatFileStore; +import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyGroupSpyFileStore; import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyStaffChatFileStore; @@ -120,7 +121,7 @@ public void run() { //saveChatInfo(); //saveGroupChatInfo(); - saveGroupSpyInfo(); + //saveGroupSpyInfo(); saveGlobalChatInfo(); saveSocialSpyInfo(); // TODO Legacy saveAnnouncements(); @@ -355,6 +356,9 @@ public void onEnable() { fileStoreManager.registerFileStore("groupchatinfo.dat", new ProxyGroupChatFileStore("GroupChatInfo.dat", configDirectory)); + fileStoreManager.registerFileStore("groupspyinfo.dat", + new ProxyGroupSpyFileStore("GroupSpyInfo.dat", configDirectory)); + MultiChatProxy.getInstance().registerFileStoreManager(fileStoreManager); Startup(); @@ -425,7 +429,7 @@ public void onDisable() { //saveChatInfo(); //saveGroupChatInfo(); - saveGroupSpyInfo(); + //saveGroupSpyInfo(); saveGlobalChatInfo(); saveSocialSpyInfo(); // TODO Legacy saveAnnouncements(); @@ -560,24 +564,6 @@ public static void saveCasts() { } - public static void saveGroupSpyInfo() { - - File configDir = MultiChatProxy.getInstance().getConfigDirectory(); - ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); - - try { - File file = new File(configDir, "GroupSpyInfo.dat"); - FileOutputStream saveFile = new FileOutputStream(file); - ObjectOutputStream out = new ObjectOutputStream(saveFile); - out.writeObject(ds.getAllSpy()); - out.close(); - } catch (IOException e) { - System.out.println("[MultiChat] [Save Error] An error has occured writing the group spy info file!"); - e.printStackTrace(); - } - - } - public static void saveSocialSpyInfo() { File configDir = MultiChatProxy.getInstance().getConfigDirectory(); @@ -671,27 +657,6 @@ public static HashMap loadCasts() { } - @SuppressWarnings("unchecked") - public static List loadGroupSpyInfo() { - - File configDir = MultiChatProxy.getInstance().getConfigDirectory(); - List result = null; - - try { - File file = new File(configDir, "GroupSpyInfo.dat"); - FileInputStream saveFile = new FileInputStream(file); - ObjectInputStream in = new ObjectInputStream(saveFile); - result = (List)in.readObject(); - in.close(); - } catch (IOException|ClassNotFoundException e) { - System.out.println("[MultiChat] [Load Error] An error has occured reading the group spy info file!"); - e.printStackTrace(); - } - - return result; - - } - @SuppressWarnings("unchecked") public static List loadSocialSpyInfo() { @@ -787,22 +752,6 @@ public static void Startup() { System.out.println("[MultiChat] Starting load routine for data files"); - File f4 = new File(configDir, "GroupSpyInfo.dat"); - - if ((f4.exists()) && (!f4.isDirectory())) { - - ds.setAllSpy(loadGroupSpyInfo()); - - } else { - - System.out.println("[MultiChat] Some group spy files do not exist to load. Must be first startup!"); - System.out.println("[MultiChat] Enabling Group-Spy! :D"); - System.out.println("[MultiChat] Attempting to create hash files!"); - saveGroupSpyInfo(); - System.out.println("[MultiChat] The files were created!"); - - } - File f5 = new File(configDir, "GlobalChatInfo.dat"); if ((f5.exists()) && (!f5.isDirectory())) { @@ -830,7 +779,7 @@ public static void Startup() { System.out.println("[MultiChat] Some social spy files do not exist to load. Must be first startup!"); System.out.println("[MultiChat] Enabling Social Spy! :D"); System.out.println("[MultiChat] Attempting to create hash files!"); - saveGroupSpyInfo(); + saveSocialSpyInfo(); System.out.println("[MultiChat] The files were created!"); } 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 0b547800..14dd46de 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 @@ -83,7 +83,7 @@ public void execute(CommandSender sender, String[] args) { //MultiChat.saveChatInfo(); //MultiChat.saveGroupChatInfo(); - MultiChat.saveGroupSpyInfo(); + //MultiChat.saveGroupSpyInfo(); MultiChat.saveGlobalChatInfo(); MultiChat.saveSocialSpyInfo(); //TODO Legacy MultiChat.saveAnnouncements(); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyGroupSpyFileStore.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyGroupSpyFileStore.java new file mode 100644 index 00000000..d42c153e --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyGroupSpyFileStore.java @@ -0,0 +1,69 @@ +package xyz.olivermartin.multichat.proxy.common.storage.files; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.util.List; +import java.util.UUID; + +import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; +import xyz.olivermartin.multichat.proxy.common.storage.ProxyGenericFileStore; + +public class ProxyGroupSpyFileStore extends ProxyGenericFileStore { + + public ProxyGroupSpyFileStore(String fileName, File fileDirectory) { + super(fileName, fileDirectory); + } + + @SuppressWarnings("unchecked") + @Override + protected boolean loadFile(File file) { + + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + List result = null; + + try { + + FileInputStream saveFile = new FileInputStream(file); + ObjectInputStream in = new ObjectInputStream(saveFile); + result = (List)in.readObject(); + in.close(); + ds.setAllSpy(result); + return true; + + } catch (IOException|ClassNotFoundException e) { + + e.printStackTrace(); + return false; + + } + + } + + @Override + protected boolean saveFile(File file) { + + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + + try { + + FileOutputStream stream = new FileOutputStream(file); + ObjectOutputStream out = new ObjectOutputStream(stream); + out.writeObject(ds.getAllSpy()); + out.close(); + return true; + + } catch (IOException e) { + + e.printStackTrace(); + return false; + + } + + } + +} From 29ad906ca675de0f9edf220a485f0c175cb6b9a2 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Tue, 21 Jul 2020 18:22:06 +0100 Subject: [PATCH 026/188] Moved Casts.dat to new File Store --- .../multichat/bungee/MultiChat.java | 62 ++---------------- .../bungee/commands/MultiChatCommand.java | 2 +- .../storage/files/ProxyCastsFileStore.java | 64 +++++++++++++++++++ 3 files changed, 71 insertions(+), 57 deletions(-) create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyCastsFileStore.java 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 dd2d7db0..57aedcc5 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java @@ -36,6 +36,7 @@ import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyAdminChatFileStore; import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyAnnouncementsFileStore; import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyBulletinsFileStore; +import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyCastsFileStore; import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyGroupChatFileStore; import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyGroupSpyFileStore; import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyStaffChatFileStore; @@ -126,7 +127,7 @@ public void run() { saveSocialSpyInfo(); // TODO Legacy saveAnnouncements(); // saveBulletins(); - saveCasts(); + //saveCasts(); saveMute(); saveIgnore(); UUIDNameManager.saveUUIDS(); @@ -359,6 +360,9 @@ public void onEnable() { fileStoreManager.registerFileStore("groupspyinfo.dat", new ProxyGroupSpyFileStore("GroupSpyInfo.dat", configDirectory)); + fileStoreManager.registerFileStore("casts.dat", + new ProxyCastsFileStore("Casts.dat", configDirectory)); + MultiChatProxy.getInstance().registerFileStoreManager(fileStoreManager); Startup(); @@ -434,7 +438,7 @@ public void onDisable() { saveSocialSpyInfo(); // TODO Legacy saveAnnouncements(); // saveBulletins(); - saveCasts(); + //saveCasts(); saveMute(); saveIgnore(); UUIDNameManager.saveUUIDS(); @@ -547,23 +551,6 @@ public void unregisterCommands(Configuration configYML, Configuration chatcontro } - public static void saveCasts() { - - File configDir = MultiChatProxy.getInstance().getConfigDirectory(); - - try { - File file = new File(configDir, "Casts.dat"); - FileOutputStream saveFile = new FileOutputStream(file); - ObjectOutputStream out = new ObjectOutputStream(saveFile); - out.writeObject(CastControl.castList); - out.close(); - } catch (IOException e) { - System.out.println("[MultiChat] [Save Error] An error has occured writing the casts file!"); - e.printStackTrace(); - } - - } - public static void saveSocialSpyInfo() { File configDir = MultiChatProxy.getInstance().getConfigDirectory(); @@ -636,27 +623,6 @@ public static void saveIgnore() { } - @SuppressWarnings("unchecked") - public static HashMap loadCasts() { - - File configDir = MultiChatProxy.getInstance().getConfigDirectory(); - HashMap result = null; - - try { - File file = new File(configDir, "Casts.dat"); - FileInputStream saveFile = new FileInputStream(file); - ObjectInputStream in = new ObjectInputStream(saveFile); - result = (HashMap)in.readObject(); - in.close(); - } catch (IOException|ClassNotFoundException e) { - System.out.println("[MultiChat] [Load Error] An error has occured reading the casts file!"); - e.printStackTrace(); - } - - return result; - - } - @SuppressWarnings("unchecked") public static List loadSocialSpyInfo() { @@ -784,22 +750,6 @@ public static void Startup() { } - File f9 = new File(configDir, "Casts.dat"); - - if ((f9.exists()) && (!f9.isDirectory())) { - - CastControl.castList = loadCasts(); - - } else { - - System.out.println("[MultiChat] Some casts files do not exist to load. Must be first startup!"); - System.out.println("[MultiChat] Welcome to MultiChat! :D"); - System.out.println("[MultiChat] Attempting to create hash files!"); - saveCasts(); - System.out.println("[MultiChat] The files were created!"); - - } - File f10 = new File(configDir, "Mute.dat"); if ((f10.exists()) && (!f10.isDirectory())) { 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 14dd46de..82f18235 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 @@ -88,7 +88,7 @@ public void execute(CommandSender sender, String[] args) { MultiChat.saveSocialSpyInfo(); //TODO Legacy MultiChat.saveAnnouncements(); //MultiChat.saveBulletins(); - MultiChat.saveCasts(); + //MultiChat.saveCasts(); MultiChat.saveMute(); MultiChat.saveIgnore(); UUIDNameManager.saveUUIDS(); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyCastsFileStore.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyCastsFileStore.java new file mode 100644 index 00000000..7bd9049f --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyCastsFileStore.java @@ -0,0 +1,64 @@ +package xyz.olivermartin.multichat.proxy.common.storage.files; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.util.HashMap; + +import xyz.olivermartin.multichat.bungee.CastControl; +import xyz.olivermartin.multichat.proxy.common.storage.ProxyGenericFileStore; + +public class ProxyCastsFileStore extends ProxyGenericFileStore { + + public ProxyCastsFileStore(String fileName, File fileDirectory) { + super(fileName, fileDirectory); + } + + @SuppressWarnings("unchecked") + @Override + protected boolean loadFile(File file) { + + HashMap result = null; + + try { + + FileInputStream saveFile = new FileInputStream(file); + ObjectInputStream in = new ObjectInputStream(saveFile); + result = (HashMap)in.readObject(); + in.close(); + CastControl.castList = result; + return true; + + } catch (IOException|ClassNotFoundException e) { + + e.printStackTrace(); + return false; + + } + + } + + @Override + protected boolean saveFile(File file) { + + try { + + FileOutputStream saveFile = new FileOutputStream(file); + ObjectOutputStream out = new ObjectOutputStream(saveFile); + out.writeObject(CastControl.castList); + out.close(); + return true; + + } catch (IOException e) { + + e.printStackTrace(); + return false; + + } + + } + +} From 9c8207c06db2989b6e5eb869d8a7cf9533ece0d5 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Tue, 21 Jul 2020 19:04:02 +0100 Subject: [PATCH 027/188] Moved the SocialSpyInfo.dat file to new File Stores --- .../multichat/bungee/MultiChat.java | 64 ++--------------- .../bungee/commands/MultiChatCommand.java | 2 +- .../files/ProxySocialSpyFileStore.java | 69 +++++++++++++++++++ 3 files changed, 76 insertions(+), 59 deletions(-) create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxySocialSpyFileStore.java 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 57aedcc5..4b853c9b 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java @@ -39,6 +39,7 @@ import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyCastsFileStore; import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyGroupChatFileStore; import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyGroupSpyFileStore; +import xyz.olivermartin.multichat.proxy.common.storage.files.ProxySocialSpyFileStore; import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyStaffChatFileStore; @@ -124,7 +125,7 @@ public void run() { //saveGroupChatInfo(); //saveGroupSpyInfo(); saveGlobalChatInfo(); - saveSocialSpyInfo(); + //saveSocialSpyInfo(); // TODO Legacy saveAnnouncements(); // saveBulletins(); //saveCasts(); @@ -363,6 +364,9 @@ public void onEnable() { fileStoreManager.registerFileStore("casts.dat", new ProxyCastsFileStore("Casts.dat", configDirectory)); + fileStoreManager.registerFileStore("socialspyinfo.dat", + new ProxySocialSpyFileStore("SocialSpyInfo.dat", configDirectory)); + MultiChatProxy.getInstance().registerFileStoreManager(fileStoreManager); Startup(); @@ -435,7 +439,7 @@ public void onDisable() { //saveGroupChatInfo(); //saveGroupSpyInfo(); saveGlobalChatInfo(); - saveSocialSpyInfo(); + //saveSocialSpyInfo(); // TODO Legacy saveAnnouncements(); // saveBulletins(); //saveCasts(); @@ -551,24 +555,6 @@ public void unregisterCommands(Configuration configYML, Configuration chatcontro } - public static void saveSocialSpyInfo() { - - File configDir = MultiChatProxy.getInstance().getConfigDirectory(); - ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); - - try { - File file = new File(configDir, "SocialSpyInfo.dat"); - FileOutputStream saveFile = new FileOutputStream(file); - ObjectOutputStream out = new ObjectOutputStream(saveFile); - out.writeObject(ds.getSocialSpy()); - out.close(); - } catch (IOException e) { - System.out.println("[MultiChat] [Save Error] An error has occured writing the social spy info file!"); - e.printStackTrace(); - } - - } - public static void saveGlobalChatInfo() { File configDir = MultiChatProxy.getInstance().getConfigDirectory(); @@ -623,27 +609,6 @@ public static void saveIgnore() { } - @SuppressWarnings("unchecked") - public static List loadSocialSpyInfo() { - - File configDir = MultiChatProxy.getInstance().getConfigDirectory(); - List result = null; - - try { - File file = new File(configDir, "SocialSpyInfo.dat"); - FileInputStream saveFile = new FileInputStream(file); - ObjectInputStream in = new ObjectInputStream(saveFile); - result = (List)in.readObject(); - in.close(); - } catch (IOException|ClassNotFoundException e) { - System.out.println("[MultiChat] [Load Error] An error has occured reading the social spy info file!"); - e.printStackTrace(); - } - - return result; - - } - @SuppressWarnings("unchecked") public static Map loadGlobalChatInfo() { @@ -714,7 +679,6 @@ public static Map> loadIgnore() { public static void Startup() { File configDir = MultiChatProxy.getInstance().getConfigDirectory(); - ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); System.out.println("[MultiChat] Starting load routine for data files"); @@ -734,22 +698,6 @@ public static void Startup() { } - File f6 = new File(configDir, "SocialSpyInfo.dat"); - - if ((f6.exists()) && (!f6.isDirectory())) { - - ds.setSocialSpy(loadSocialSpyInfo()); - - } else { - - System.out.println("[MultiChat] Some social spy files do not exist to load. Must be first startup!"); - System.out.println("[MultiChat] Enabling Social Spy! :D"); - System.out.println("[MultiChat] Attempting to create hash files!"); - saveSocialSpyInfo(); - System.out.println("[MultiChat] The files were created!"); - - } - File f10 = new File(configDir, "Mute.dat"); if ((f10.exists()) && (!f10.isDirectory())) { 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 82f18235..78ac196a 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 @@ -85,7 +85,7 @@ public void execute(CommandSender sender, String[] args) { //MultiChat.saveGroupChatInfo(); //MultiChat.saveGroupSpyInfo(); MultiChat.saveGlobalChatInfo(); - MultiChat.saveSocialSpyInfo(); + //MultiChat.saveSocialSpyInfo(); //TODO Legacy MultiChat.saveAnnouncements(); //MultiChat.saveBulletins(); //MultiChat.saveCasts(); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxySocialSpyFileStore.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxySocialSpyFileStore.java new file mode 100644 index 00000000..8200669d --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxySocialSpyFileStore.java @@ -0,0 +1,69 @@ +package xyz.olivermartin.multichat.proxy.common.storage.files; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.util.List; +import java.util.UUID; + +import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; +import xyz.olivermartin.multichat.proxy.common.storage.ProxyGenericFileStore; + +public class ProxySocialSpyFileStore extends ProxyGenericFileStore { + + public ProxySocialSpyFileStore(String fileName, File fileDirectory) { + super(fileName, fileDirectory); + } + + @SuppressWarnings("unchecked") + @Override + protected boolean loadFile(File file) { + + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + List result = null; + + try { + + FileInputStream saveFile = new FileInputStream(file); + ObjectInputStream in = new ObjectInputStream(saveFile); + result = (List)in.readObject(); + in.close(); + ds.setSocialSpy(result); + return true; + + } catch (IOException|ClassNotFoundException e) { + + e.printStackTrace(); + return false; + + } + + } + + @Override + protected boolean saveFile(File file) { + + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + + try { + + FileOutputStream saveFile = new FileOutputStream(file); + ObjectOutputStream out = new ObjectOutputStream(saveFile); + out.writeObject(ds.getSocialSpy()); + out.close(); + return true; + + } catch (IOException e) { + + e.printStackTrace(); + return false; + + } + + } + +} From 9c2b58b62c3cce82ba4d322eb9db45fa8258d4ee Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Tue, 21 Jul 2020 19:08:23 +0100 Subject: [PATCH 028/188] Moved GlobalChatInfo.dat to new File Stores --- .../multichat/bungee/MultiChat.java | 62 ++---------------- .../bungee/commands/MultiChatCommand.java | 2 +- .../files/ProxyGlobalChatFileStore.java | 65 +++++++++++++++++++ 3 files changed, 72 insertions(+), 57 deletions(-) create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyGlobalChatFileStore.java 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 4b853c9b..3ea890ea 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java @@ -37,6 +37,7 @@ import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyAnnouncementsFileStore; import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyBulletinsFileStore; import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyCastsFileStore; +import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyGlobalChatFileStore; import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyGroupChatFileStore; import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyGroupSpyFileStore; import xyz.olivermartin.multichat.proxy.common.storage.files.ProxySocialSpyFileStore; @@ -124,7 +125,7 @@ public void run() { //saveChatInfo(); //saveGroupChatInfo(); //saveGroupSpyInfo(); - saveGlobalChatInfo(); + //saveGlobalChatInfo(); //saveSocialSpyInfo(); // TODO Legacy saveAnnouncements(); // saveBulletins(); @@ -367,6 +368,9 @@ public void onEnable() { fileStoreManager.registerFileStore("socialspyinfo.dat", new ProxySocialSpyFileStore("SocialSpyInfo.dat", configDirectory)); + fileStoreManager.registerFileStore("globalchatinfo.dat", + new ProxyGlobalChatFileStore("GlobalChatInfo.dat", configDirectory)); + MultiChatProxy.getInstance().registerFileStoreManager(fileStoreManager); Startup(); @@ -438,7 +442,7 @@ public void onDisable() { //saveChatInfo(); //saveGroupChatInfo(); //saveGroupSpyInfo(); - saveGlobalChatInfo(); + //saveGlobalChatInfo(); //saveSocialSpyInfo(); // TODO Legacy saveAnnouncements(); // saveBulletins(); @@ -555,23 +559,6 @@ public void unregisterCommands(Configuration configYML, Configuration chatcontro } - public static void saveGlobalChatInfo() { - - File configDir = MultiChatProxy.getInstance().getConfigDirectory(); - - try { - File file = new File(configDir, "GlobalChatInfo.dat"); - FileOutputStream saveFile = new FileOutputStream(file); - ObjectOutputStream out = new ObjectOutputStream(saveFile); - out.writeObject(ChatModeManager.getInstance().getData()); - out.close(); - } catch (IOException e) { - System.out.println("[MultiChat] [Save Error] An error has occured writing the global chat info file!"); - e.printStackTrace(); - } - - } - public static void saveMute() { File configDir = MultiChatProxy.getInstance().getConfigDirectory(); @@ -609,27 +596,6 @@ public static void saveIgnore() { } - @SuppressWarnings("unchecked") - public static Map loadGlobalChatInfo() { - - File configDir = MultiChatProxy.getInstance().getConfigDirectory(); - Map result = null; - - try { - File file = new File(configDir, "GlobalChatInfo.dat"); - FileInputStream saveFile = new FileInputStream(file); - ObjectInputStream in = new ObjectInputStream(saveFile); - result = (Map)in.readObject(); - in.close(); - } catch (IOException|ClassNotFoundException e) { - System.out.println("[MultiChat] [Load Error] An error has occured reading the global chat info file!"); - e.printStackTrace(); - } - - return result; - - } - @SuppressWarnings("unchecked") public static Set loadMute() { @@ -682,22 +648,6 @@ public static void Startup() { System.out.println("[MultiChat] Starting load routine for data files"); - File f5 = new File(configDir, "GlobalChatInfo.dat"); - - if ((f5.exists()) && (!f5.isDirectory())) { - - ChatModeManager.getInstance().loadData(loadGlobalChatInfo()); - - } else { - - System.out.println("[MultiChat] Some global chat files do not exist to load. Must be first startup!"); - System.out.println("[MultiChat] Enabling Global Chat! :D"); - System.out.println("[MultiChat] Attempting to create hash files!"); - saveGlobalChatInfo(); - System.out.println("[MultiChat] The files were created!"); - - } - File f10 = new File(configDir, "Mute.dat"); if ((f10.exists()) && (!f10.isDirectory())) { 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 78ac196a..62f2049d 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 @@ -84,7 +84,7 @@ public void execute(CommandSender sender, String[] args) { //MultiChat.saveChatInfo(); //MultiChat.saveGroupChatInfo(); //MultiChat.saveGroupSpyInfo(); - MultiChat.saveGlobalChatInfo(); + //MultiChat.saveGlobalChatInfo(); //MultiChat.saveSocialSpyInfo(); //TODO Legacy MultiChat.saveAnnouncements(); //MultiChat.saveBulletins(); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyGlobalChatFileStore.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyGlobalChatFileStore.java new file mode 100644 index 00000000..ffd933ad --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyGlobalChatFileStore.java @@ -0,0 +1,65 @@ +package xyz.olivermartin.multichat.proxy.common.storage.files; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.util.Map; +import java.util.UUID; + +import xyz.olivermartin.multichat.bungee.ChatModeManager; +import xyz.olivermartin.multichat.proxy.common.storage.ProxyGenericFileStore; + +public class ProxyGlobalChatFileStore extends ProxyGenericFileStore { + + public ProxyGlobalChatFileStore(String fileName, File fileDirectory) { + super(fileName, fileDirectory); + } + + @SuppressWarnings("unchecked") + @Override + protected boolean loadFile(File file) { + + Map result = null; + + try { + + FileInputStream saveFile = new FileInputStream(file); + ObjectInputStream in = new ObjectInputStream(saveFile); + result = (Map)in.readObject(); + in.close(); + ChatModeManager.getInstance().loadData(result); + return true; + + } catch (IOException|ClassNotFoundException e) { + + e.printStackTrace(); + return false; + + } + + } + + @Override + protected boolean saveFile(File file) { + + try { + + FileOutputStream saveFile = new FileOutputStream(file); + ObjectOutputStream out = new ObjectOutputStream(saveFile); + out.writeObject(ChatModeManager.getInstance().getData()); + out.close(); + return true; + + } catch (IOException e) { + + e.printStackTrace(); + return false; + + } + + } + +} From bde15ba11b5712c42c7943d24ed362cdaa2fa89e Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Tue, 21 Jul 2020 19:12:58 +0100 Subject: [PATCH 029/188] Moved Mute.dat to new File stores --- .../multichat/bungee/MultiChat.java | 64 ++---------------- .../bungee/commands/MultiChatCommand.java | 2 +- .../storage/files/ProxyMuteFileStore.java | 65 +++++++++++++++++++ 3 files changed, 73 insertions(+), 58 deletions(-) create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyMuteFileStore.java 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 3ea890ea..e0c399b5 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java @@ -40,6 +40,7 @@ import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyGlobalChatFileStore; import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyGroupChatFileStore; import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyGroupSpyFileStore; +import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyMuteFileStore; import xyz.olivermartin.multichat.proxy.common.storage.files.ProxySocialSpyFileStore; import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyStaffChatFileStore; @@ -130,7 +131,7 @@ public void run() { // TODO Legacy saveAnnouncements(); // saveBulletins(); //saveCasts(); - saveMute(); + //saveMute(); saveIgnore(); UUIDNameManager.saveUUIDS(); @@ -371,6 +372,9 @@ public void onEnable() { fileStoreManager.registerFileStore("globalchatinfo.dat", new ProxyGlobalChatFileStore("GlobalChatInfo.dat", configDirectory)); + fileStoreManager.registerFileStore("mute.dat", + new ProxyMuteFileStore("Mute.dat", configDirectory)); + MultiChatProxy.getInstance().registerFileStoreManager(fileStoreManager); Startup(); @@ -447,7 +451,7 @@ public void onDisable() { // TODO Legacy saveAnnouncements(); // saveBulletins(); //saveCasts(); - saveMute(); + //saveMute(); saveIgnore(); UUIDNameManager.saveUUIDS(); @@ -559,23 +563,6 @@ public void unregisterCommands(Configuration configYML, Configuration chatcontro } - public static void saveMute() { - - File configDir = MultiChatProxy.getInstance().getConfigDirectory(); - - try { - File file = new File(configDir, "Mute.dat"); - FileOutputStream saveFile = new FileOutputStream(file); - ObjectOutputStream out = new ObjectOutputStream(saveFile); - out.writeObject(ChatControl.getMutedPlayers()); - out.close(); - } catch (IOException e) { - System.out.println("[MultiChat] [Save Error] An error has occured writing the mute file!"); - e.printStackTrace(); - } - - } - public static void saveIgnore() { File configDir = MultiChatProxy.getInstance().getConfigDirectory(); @@ -596,27 +583,6 @@ public static void saveIgnore() { } - @SuppressWarnings("unchecked") - public static Set loadMute() { - - File configDir = MultiChatProxy.getInstance().getConfigDirectory(); - Set result = null; - - try { - File file = new File(configDir, "Mute.dat"); - FileInputStream saveFile = new FileInputStream(file); - ObjectInputStream in = new ObjectInputStream(saveFile); - result = (Set)in.readObject(); - in.close(); - } catch (IOException|ClassNotFoundException e) { - System.out.println("[MultiChat] [Load Error] An error has occured reading the mute file!"); - e.printStackTrace(); - } - - return result; - - } - @SuppressWarnings("unchecked") public static Map> loadIgnore() { @@ -648,22 +614,6 @@ public static void Startup() { System.out.println("[MultiChat] Starting load routine for data files"); - File f10 = new File(configDir, "Mute.dat"); - - if ((f10.exists()) && (!f10.isDirectory())) { - - ChatControl.setMutedPlayers(loadMute()); - - } else { - - System.out.println("[MultiChat] Some mute files do not exist to load. Must be first startup!"); - System.out.println("[MultiChat] Welcome to MultiChat! :D"); - System.out.println("[MultiChat] Attempting to create hash files!"); - saveMute(); - System.out.println("[MultiChat] The files were created!"); - - } - File f11 = new File(configDir, "Ignore.dat"); if ((f11.exists()) && (!f11.isDirectory())) { @@ -675,7 +625,7 @@ public static void Startup() { System.out.println("[MultiChat] Some ignore files do not exist to load. Must be first startup!"); System.out.println("[MultiChat] Welcome to MultiChat! :D"); System.out.println("[MultiChat] Attempting to create hash files!"); - saveMute(); + saveIgnore(); System.out.println("[MultiChat] The files were created!"); } 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 62f2049d..3d97e3ba 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 @@ -89,7 +89,7 @@ public void execute(CommandSender sender, String[] args) { //TODO Legacy MultiChat.saveAnnouncements(); //MultiChat.saveBulletins(); //MultiChat.saveCasts(); - MultiChat.saveMute(); + //MultiChat.saveMute(); MultiChat.saveIgnore(); UUIDNameManager.saveUUIDS(); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyMuteFileStore.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyMuteFileStore.java new file mode 100644 index 00000000..6beedb06 --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyMuteFileStore.java @@ -0,0 +1,65 @@ +package xyz.olivermartin.multichat.proxy.common.storage.files; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.util.Set; +import java.util.UUID; + +import xyz.olivermartin.multichat.bungee.ChatControl; +import xyz.olivermartin.multichat.proxy.common.storage.ProxyGenericFileStore; + +public class ProxyMuteFileStore extends ProxyGenericFileStore { + + public ProxyMuteFileStore(String fileName, File fileDirectory) { + super(fileName, fileDirectory); + } + + @SuppressWarnings("unchecked") + @Override + protected boolean loadFile(File file) { + + Set result = null; + + try { + + FileInputStream saveFile = new FileInputStream(file); + ObjectInputStream in = new ObjectInputStream(saveFile); + result = (Set)in.readObject(); + in.close(); + ChatControl.setMutedPlayers(result); + return true; + + } catch (IOException|ClassNotFoundException e) { + + e.printStackTrace(); + return false; + + } + + } + + @Override + protected boolean saveFile(File file) { + + try { + + FileOutputStream saveFile = new FileOutputStream(file); + ObjectOutputStream out = new ObjectOutputStream(saveFile); + out.writeObject(ChatControl.getMutedPlayers()); + out.close(); + return true; + + } catch (IOException e) { + + e.printStackTrace(); + return false; + + } + + } + +} From d859f7dd11ce1bfb3489cf82e23cbd887b773bc5 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Tue, 21 Jul 2020 19:17:39 +0100 Subject: [PATCH 030/188] Added Ignore.dat to new File Stores --- .../multichat/bungee/MultiChat.java | 104 +----------------- .../bungee/commands/MultiChatCommand.java | 10 -- .../storage/files/ProxyIgnoreFileStore.java | 80 ++++++++++++++ 3 files changed, 84 insertions(+), 110 deletions(-) create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyIgnoreFileStore.java 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 e0c399b5..47d95c10 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java @@ -1,18 +1,9 @@ package xyz.olivermartin.multichat.bungee; import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; import java.util.ArrayList; import java.util.Arrays; -import java.util.HashMap; import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.UUID; import java.util.concurrent.TimeUnit; import net.md_5.bungee.api.ProxyServer; @@ -40,6 +31,7 @@ import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyGlobalChatFileStore; import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyGroupChatFileStore; import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyGroupSpyFileStore; +import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyIgnoreFileStore; import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyMuteFileStore; import xyz.olivermartin.multichat.proxy.common.storage.files.ProxySocialSpyFileStore; import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyStaffChatFileStore; @@ -123,16 +115,6 @@ public void run() { MultiChatProxy.getInstance().getFileStoreManager().save(); - //saveChatInfo(); - //saveGroupChatInfo(); - //saveGroupSpyInfo(); - //saveGlobalChatInfo(); - //saveSocialSpyInfo(); - // TODO Legacy saveAnnouncements(); - // saveBulletins(); - //saveCasts(); - //saveMute(); - saveIgnore(); UUIDNameManager.saveUUIDS(); getLogger().info("Backup complete. Any errors reported above."); @@ -375,9 +357,11 @@ public void onEnable() { fileStoreManager.registerFileStore("mute.dat", new ProxyMuteFileStore("Mute.dat", configDirectory)); + fileStoreManager.registerFileStore("ignore.dat", + new ProxyIgnoreFileStore("Ignore.dat", configDirectory)); + MultiChatProxy.getInstance().registerFileStoreManager(fileStoreManager); - Startup(); UUIDNameManager.Startup(); // Set up chat control stuff @@ -443,16 +427,6 @@ public void onDisable() { MultiChatProxy.getInstance().getFileStoreManager().save(); - //saveChatInfo(); - //saveGroupChatInfo(); - //saveGroupSpyInfo(); - //saveGlobalChatInfo(); - //saveSocialSpyInfo(); - // TODO Legacy saveAnnouncements(); - // saveBulletins(); - //saveCasts(); - //saveMute(); - saveIgnore(); UUIDNameManager.saveUUIDS(); } @@ -563,74 +537,4 @@ public void unregisterCommands(Configuration configYML, Configuration chatcontro } - public static void saveIgnore() { - - File configDir = MultiChatProxy.getInstance().getConfigDirectory(); - Configuration config = ConfigManager.getInstance().getHandler("chatcontrol.yml").getConfig(); - - if (config.getBoolean("session_ignore")) return; - - try { - File file = new File(configDir, "Ignore.dat"); - FileOutputStream saveFile = new FileOutputStream(file); - ObjectOutputStream out = new ObjectOutputStream(saveFile); - out.writeObject(ChatControl.getIgnoreMap()); - out.close(); - } catch (IOException e) { - System.out.println("[MultiChat] [Save Error] An error has occured writing the ignore file!"); - e.printStackTrace(); - } - - } - - @SuppressWarnings("unchecked") - public static Map> loadIgnore() { - - File configDir = MultiChatProxy.getInstance().getConfigDirectory(); - Configuration config = ConfigManager.getInstance().getHandler("chatcontrol.yml").getConfig(); - - if (config.getBoolean("session_ignore")) return new HashMap>(); - - Map> result = null; - - try { - File file = new File(configDir, "Ignore.dat"); - FileInputStream saveFile = new FileInputStream(file); - ObjectInputStream in = new ObjectInputStream(saveFile); - result = (Map>)in.readObject(); - in.close(); - } catch (IOException|ClassNotFoundException e) { - System.out.println("[MultiChat] [Load Error] An error has occured reading the ignore file!"); - e.printStackTrace(); - } - - return result; - - } - - public static void Startup() { - - File configDir = MultiChatProxy.getInstance().getConfigDirectory(); - - System.out.println("[MultiChat] Starting load routine for data files"); - - File f11 = new File(configDir, "Ignore.dat"); - - if ((f11.exists()) && (!f11.isDirectory())) { - - ChatControl.setIgnoreMap(loadIgnore()); - - } else { - - System.out.println("[MultiChat] Some ignore files do not exist to load. Must be first startup!"); - System.out.println("[MultiChat] Welcome to MultiChat! :D"); - System.out.println("[MultiChat] Attempting to create hash files!"); - saveIgnore(); - System.out.println("[MultiChat] The files were created!"); - - } - - System.out.println("[MultiChat] [COMPLETE] Load sequence finished! (Any errors reported above)"); - - } } 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 3d97e3ba..6ac9089a 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 @@ -81,16 +81,6 @@ public void execute(CommandSender sender, String[] args) { MultiChatProxy.getInstance().getFileStoreManager().save(); - //MultiChat.saveChatInfo(); - //MultiChat.saveGroupChatInfo(); - //MultiChat.saveGroupSpyInfo(); - //MultiChat.saveGlobalChatInfo(); - //MultiChat.saveSocialSpyInfo(); - //TODO Legacy MultiChat.saveAnnouncements(); - //MultiChat.saveBulletins(); - //MultiChat.saveCasts(); - //MultiChat.saveMute(); - MultiChat.saveIgnore(); UUIDNameManager.saveUUIDS(); MessageManager.sendMessage(sender, "command_multichat_save_completed"); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyIgnoreFileStore.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyIgnoreFileStore.java new file mode 100644 index 00000000..dbc7507d --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyIgnoreFileStore.java @@ -0,0 +1,80 @@ +package xyz.olivermartin.multichat.proxy.common.storage.files; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; +import java.util.UUID; + +import net.md_5.bungee.config.Configuration; +import xyz.olivermartin.multichat.bungee.ChatControl; +import xyz.olivermartin.multichat.bungee.ConfigManager; +import xyz.olivermartin.multichat.proxy.common.storage.ProxyGenericFileStore; + +public class ProxyIgnoreFileStore extends ProxyGenericFileStore { + + public ProxyIgnoreFileStore(String fileName, File fileDirectory) { + super(fileName, fileDirectory); + } + + @SuppressWarnings("unchecked") + @Override + protected boolean loadFile(File file) { + + Configuration config = ConfigManager.getInstance().getHandler("chatcontrol.yml").getConfig(); + + if (config.getBoolean("session_ignore")) { + ChatControl.setIgnoreMap(new HashMap>()); + return true; + } + + Map> result = null; + + try { + + FileInputStream saveFile = new FileInputStream(file); + ObjectInputStream in = new ObjectInputStream(saveFile); + result = (Map>)in.readObject(); + in.close(); + ChatControl.setIgnoreMap(result); + return true; + + } catch (IOException|ClassNotFoundException e) { + + e.printStackTrace(); + return false; + + } + + } + + @Override + protected boolean saveFile(File file) { + + Configuration config = ConfigManager.getInstance().getHandler("chatcontrol.yml").getConfig(); + + if (config.getBoolean("session_ignore")) return true; + + try { + + FileOutputStream saveFile = new FileOutputStream(file); + ObjectOutputStream out = new ObjectOutputStream(saveFile); + out.writeObject(ChatControl.getIgnoreMap()); + out.close(); + return true; + + } catch (IOException e) { + + e.printStackTrace(); + return false; + + } + + } + +} From 561f32baa18b6cd7267dabd622796f17fc6874fa Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Tue, 21 Jul 2020 19:23:29 +0100 Subject: [PATCH 031/188] Moved UUIDNameManager files to new File Stores --- .../multichat/bungee/MultiChat.java | 12 ++-- .../multichat/bungee/UUIDNameManager.java | 64 +----------------- .../bungee/commands/MultiChatCommand.java | 5 -- .../storage/files/ProxyUUIDNameFileStore.java | 65 +++++++++++++++++++ 4 files changed, 70 insertions(+), 76 deletions(-) create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyUUIDNameFileStore.java 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 47d95c10..90951a63 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java @@ -35,6 +35,7 @@ import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyMuteFileStore; import xyz.olivermartin.multichat.proxy.common.storage.files.ProxySocialSpyFileStore; import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyStaffChatFileStore; +import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyUUIDNameFileStore; /** @@ -112,11 +113,7 @@ public void backup() { public void run() { getLogger().info("Commencing backup!"); - MultiChatProxy.getInstance().getFileStoreManager().save(); - - UUIDNameManager.saveUUIDS(); - getLogger().info("Backup complete. Any errors reported above."); } @@ -360,9 +357,10 @@ public void onEnable() { fileStoreManager.registerFileStore("ignore.dat", new ProxyIgnoreFileStore("Ignore.dat", configDirectory)); - MultiChatProxy.getInstance().registerFileStoreManager(fileStoreManager); + fileStoreManager.registerFileStore("multichatuuidname.dat", + new ProxyUUIDNameFileStore("MultiChatUUIDName.dat", configDirectory)); - UUIDNameManager.Startup(); + MultiChatProxy.getInstance().registerFileStoreManager(fileStoreManager); // Set up chat control stuff if (chatcontrolYML.contains("link_control")) { @@ -427,8 +425,6 @@ public void onDisable() { MultiChatProxy.getInstance().getFileStoreManager().save(); - UUIDNameManager.saveUUIDS(); - } public void registerCommands(Configuration configYML, Configuration chatcontrolYML) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/UUIDNameManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/UUIDNameManager.java index ec69f676..9383a780 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/UUIDNameManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/UUIDNameManager.java @@ -1,17 +1,9 @@ package xyz.olivermartin.multichat.bungee; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; import java.util.HashMap; import java.util.Map; import java.util.UUID; -import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; - /** * UUID - NAME Manager *

Manages storage of UUIDS with their currently associated username

@@ -21,7 +13,7 @@ */ public class UUIDNameManager { - private static Map uuidname = new HashMap(); + public static Map uuidname = new HashMap(); public static void addNew(UUID uuid, String name) { uuidname.put(uuid, name); @@ -35,60 +27,6 @@ public static String getName(UUID uuid) { return (String)uuidname.get(uuid); } - public static void saveUUIDS() { - - File configDir = MultiChatProxy.getInstance().getConfigDirectory(); - - try { - File file = new File(configDir, "MultiChatUUIDName.dat"); - FileOutputStream saveFile = new FileOutputStream(file); - ObjectOutputStream out = new ObjectOutputStream(saveFile); - out.writeObject(uuidname); - out.close(); - } catch (IOException e) { - System.out.println("[MultiChat] [Save Error] An error has occured writing the uuid-name file!"); - e.printStackTrace(); - } - - } - - @SuppressWarnings("unchecked") - public static HashMap loadUUIDS() { - - File configDir = MultiChatProxy.getInstance().getConfigDirectory(); - HashMap result = null; - - try { - File file = new File(configDir, "MultiChatUUIDName.dat"); - FileInputStream saveFile = new FileInputStream(file); - ObjectInputStream in = new ObjectInputStream(saveFile); - result = (HashMap)in.readObject(); - in.close(); - } catch (IOException|ClassNotFoundException e) { - System.out.println("[ActivityMonitor] [Load Error] An error has occured reading the uuid-name file!"); - e.printStackTrace(); - } - - return result; - - } - - public static void Startup() { - - File configDir = MultiChatProxy.getInstance().getConfigDirectory(); - File f = new File(configDir, "MultiChatUUIDName.dat"); - - if ((f.exists()) && (!f.isDirectory())) { - uuidname.putAll(loadUUIDS()); - } else { - System.out.println("[MultiChat] File for uuid-name conversion does not exist to load. Must be first startup!"); - System.out.println("[MultiChat] Attempting to create hash file!"); - saveUUIDS(); - System.out.println("[MultiChat] The uuid-name file was created!"); - } - - } - public static boolean existsUUID(UUID uuid) { if (uuidname.containsKey(uuid)) { 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 6ac9089a..e5310403 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 @@ -12,7 +12,6 @@ import xyz.olivermartin.multichat.bungee.DebugManager; import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.bungee.MultiChat; -import xyz.olivermartin.multichat.bungee.UUIDNameManager; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; /** @@ -78,11 +77,7 @@ public void execute(CommandSender sender, String[] args) { } else if (args[0].toLowerCase().equals("save")) { MessageManager.sendMessage(sender, "command_multichat_save_prepare"); - MultiChatProxy.getInstance().getFileStoreManager().save(); - - UUIDNameManager.saveUUIDS(); - MessageManager.sendMessage(sender, "command_multichat_save_completed"); } else if (args[0].toLowerCase().equals("reload")) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyUUIDNameFileStore.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyUUIDNameFileStore.java new file mode 100644 index 00000000..760365ae --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyUUIDNameFileStore.java @@ -0,0 +1,65 @@ +package xyz.olivermartin.multichat.proxy.common.storage.files; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.util.HashMap; +import java.util.UUID; + +import xyz.olivermartin.multichat.bungee.UUIDNameManager; +import xyz.olivermartin.multichat.proxy.common.storage.ProxyGenericFileStore; + +public class ProxyUUIDNameFileStore extends ProxyGenericFileStore { + + public ProxyUUIDNameFileStore(String fileName, File fileDirectory) { + super(fileName, fileDirectory); + } + + @SuppressWarnings("unchecked") + @Override + protected boolean loadFile(File file) { + + HashMap result = null; + + try { + + FileInputStream saveFile = new FileInputStream(file); + ObjectInputStream in = new ObjectInputStream(saveFile); + result = (HashMap)in.readObject(); + in.close(); + UUIDNameManager.uuidname.putAll(result); + return true; + + } catch (IOException|ClassNotFoundException e) { + + e.printStackTrace(); + return false; + + } + + } + + @Override + protected boolean saveFile(File file) { + + try { + + FileOutputStream stream = new FileOutputStream(file); + ObjectOutputStream out = new ObjectOutputStream(stream); + out.writeObject(UUIDNameManager.uuidname); + out.close(); + return true; + + } catch (IOException e) { + + e.printStackTrace(); + return false; + + } + + } + +} From 6d98bce770e9fc92b6fd315af0fe866b7eff0c6b Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Wed, 22 Jul 2020 00:06:29 +0100 Subject: [PATCH 032/188] First attempt to migrate command aliases to new file aliases.yml --- .../multichat/bungee/MultiChat.java | 2 + .../multichat/bungee/commands/ACCCommand.java | 6 +- .../multichat/bungee/commands/ACCommand.java | 5 +- .../bungee/commands/AnnouncementCommand.java | 5 +- .../bungee/commands/BulletinCommand.java | 5 +- .../bungee/commands/CastCommand.java | 5 +- .../bungee/commands/ChannelCommand.java | 2 +- .../bungee/commands/ClearChatCommand.java | 4 +- .../bungee/commands/DisplayCommand.java | 4 +- .../bungee/commands/FreezeChatCommand.java | 5 +- .../multichat/bungee/commands/GCCommand.java | 4 +- .../bungee/commands/GlobalCommand.java | 2 +- .../bungee/commands/GroupCommand.java | 5 +- .../bungee/commands/GroupListCommand.java | 5 +- .../bungee/commands/HelpMeCommand.java | 5 +- .../bungee/commands/IgnoreCommand.java | 2 +- .../bungee/commands/LocalCommand.java | 2 +- .../multichat/bungee/commands/MCCCommand.java | 5 +- .../multichat/bungee/commands/MCCommand.java | 5 +- .../multichat/bungee/commands/MsgCommand.java | 2 +- .../commands/MultiChatBypassCommand.java | 2 +- .../bungee/commands/MultiChatCommand.java | 6 +- .../commands/MultiChatExecuteCommand.java | 2 +- .../bungee/commands/MuteCommand.java | 2 +- .../bungee/commands/ReplyCommand.java | 2 +- .../bungee/commands/SocialSpyCommand.java | 2 +- .../bungee/commands/StaffListCommand.java | 4 +- .../bungee/commands/UseCastCommand.java | 5 +- multichat/src/main/resources/aliases.yml | 167 +++++++++++++++++ multichat/src/main/resources/aliases_fr.yml | 169 ++++++++++++++++++ multichat/src/main/resources/chatcontrol.yml | 11 -- .../src/main/resources/chatcontrol_fr.yml | 10 -- multichat/src/main/resources/config.yml | 50 ------ multichat/src/main/resources/config_fr.yml | 50 ------ 34 files changed, 379 insertions(+), 183 deletions(-) create mode 100644 multichat/src/main/resources/aliases.yml create mode 100644 multichat/src/main/resources/aliases_fr.yml 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 90951a63..18b01363 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java @@ -275,11 +275,13 @@ public void onEnable() { ConfigManager.getInstance().registerHandler("joinmessages.yml", configDirectory); ConfigManager.getInstance().registerHandler("messages.yml", configDirectory); ConfigManager.getInstance().registerHandler("chatcontrol.yml", configDirectory); + ConfigManager.getInstance().registerHandler("aliases.yml", configDirectory); ConfigManager.getInstance().registerHandler("messages_fr.yml", new File(translationsDir)); ConfigManager.getInstance().registerHandler("joinmessages_fr.yml", new File(translationsDir)); ConfigManager.getInstance().registerHandler("config_fr.yml", new File(translationsDir)); ConfigManager.getInstance().registerHandler("chatcontrol_fr.yml", new File(translationsDir)); + ConfigManager.getInstance().registerHandler("aliases_fr.yml", new File(translationsDir)); Configuration configYML = ConfigManager.getInstance().getHandler("config.yml").getConfig(); Configuration chatcontrolYML = ConfigManager.getInstance().getHandler("chatcontrol.yml").getConfig(); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ACCCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ACCCommand.java index d1e4fb18..c696bccb 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ACCCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ACCCommand.java @@ -5,6 +5,7 @@ import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.plugin.Command; +import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.DebugManager; import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; @@ -19,11 +20,8 @@ */ public class ACCCommand extends Command { - // Command aliases - private static String[] aliases = new String[] {}; - public ACCCommand() { - super("acc", "multichat.staff.mod", aliases); + super("mcacc", "multichat.staff.admin", (String[]) ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("acc").toArray(new String[0])); } public void execute(CommandSender sender, String[] args) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ACCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ACCommand.java index c7b1f49d..72a3c6ee 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ACCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ACCommand.java @@ -3,6 +3,7 @@ import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.plugin.Command; +import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.DebugManager; import xyz.olivermartin.multichat.bungee.Events; import xyz.olivermartin.multichat.bungee.MessageManager; @@ -18,10 +19,8 @@ */ public class ACCommand extends Command { - private static String[] aliases = new String[] {}; - public ACCommand() { - super("ac", "multichat.staff.admin", aliases); + super("mcac", "multichat.staff.admin", (String[]) ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("ac").toArray(new String[0])); } public void execute(CommandSender sender, String[] args) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/AnnouncementCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/AnnouncementCommand.java index 83b087e7..ba0881cb 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/AnnouncementCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/AnnouncementCommand.java @@ -8,6 +8,7 @@ import net.md_5.bungee.api.chat.ComponentBuilder; import net.md_5.bungee.api.plugin.Command; import xyz.olivermartin.multichat.bungee.Announcements; +import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.bungee.MultiChatUtil; @@ -20,10 +21,8 @@ */ public class AnnouncementCommand extends Command { - private static String[] aliases = new String[] {"announce"}; - public AnnouncementCommand() { - super("announcement", "multichat.announce", aliases); + super("mcannouncement", "multichat.announce", (String[]) ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("announcement").toArray(new String[0])); } public void execute(CommandSender sender, String[] args) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/BulletinCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/BulletinCommand.java index 59c0902a..422ad243 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/BulletinCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/BulletinCommand.java @@ -7,6 +7,7 @@ import net.md_5.bungee.api.chat.ComponentBuilder; import net.md_5.bungee.api.plugin.Command; import xyz.olivermartin.multichat.bungee.Bulletins; +import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.bungee.MultiChatUtil; @@ -19,10 +20,8 @@ */ public class BulletinCommand extends Command { - private static String[] aliases = new String[] {"bulletins"}; - public BulletinCommand() { - super("bulletin", "multichat.bulletin", aliases); + super("mcbulletin", "multichat.bulletin", (String[]) ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("bulletin").toArray(new String[0])); } @Override diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/CastCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/CastCommand.java index f6982a79..455b68e5 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/CastCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/CastCommand.java @@ -7,6 +7,7 @@ import net.md_5.bungee.api.chat.ComponentBuilder; import net.md_5.bungee.api.plugin.Command; import xyz.olivermartin.multichat.bungee.CastControl; +import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.bungee.MultiChatUtil; @@ -19,10 +20,8 @@ */ public class CastCommand extends Command { - private static String[] aliases = new String[] {}; - public CastCommand() { - super("cast", "multichat.cast.admin", aliases); + super("mccast", "multichat.cast.admin", (String[]) ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("cast").toArray(new String[0])); } public void showCommandUsage(CommandSender sender) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ChannelCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ChannelCommand.java index ddb48f97..38ddb6a7 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ChannelCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ChannelCommand.java @@ -20,7 +20,7 @@ public class ChannelCommand extends Command { public ChannelCommand() { - super("channel", "multichat.chat.channel", (String[]) ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList("channelcommand").toArray(new String[0])); + super("mcchannel", "multichat.chat.channel", (String[]) ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("channel").toArray(new String[0])); } private void showHelp(CommandSender sender) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ClearChatCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ClearChatCommand.java index b2e14dc3..e495d9fb 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ClearChatCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ClearChatCommand.java @@ -17,10 +17,8 @@ */ public class ClearChatCommand extends Command { - private static String[] aliases = new String[] {"chatclear","wipechat","killchat"}; - public ClearChatCommand() { - super("clearchat", "multichat.chat.clear", aliases); + super("mcclearchat", "multichat.chat.clear", (String[]) ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("clearchat").toArray(new String[0])); } private void clearChatSelf(CommandSender sender) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/DisplayCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/DisplayCommand.java index fd6f6dc7..524ca187 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/DisplayCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/DisplayCommand.java @@ -24,10 +24,8 @@ */ public class DisplayCommand extends Command { - private static String[] aliases = new String[] {}; - public DisplayCommand() { - super("display", "multichat.staff.display", aliases); + super("mcdisplay", "multichat.staff.display", (String[]) ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("display").toArray(new String[0])); } public void execute(CommandSender sender, String[] args) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/FreezeChatCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/FreezeChatCommand.java index 0c772eb3..4b4fa21e 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/FreezeChatCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/FreezeChatCommand.java @@ -4,6 +4,7 @@ import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.plugin.Command; +import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; @@ -17,10 +18,8 @@ */ public class FreezeChatCommand extends Command { - private static String[] aliases = new String[] {}; - public FreezeChatCommand() { - super("freezechat", "multichat.chat.freeze", aliases); + super("mcfreezechat", "multichat.chat.freeze", (String[]) ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("freezechat").toArray(new String[0])); } public void execute(CommandSender sender, String[] args) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GCCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GCCommand.java index cda81c0b..fbdd13a5 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GCCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GCCommand.java @@ -30,10 +30,8 @@ */ public class GCCommand extends Command { - private static String[] aliases = new String[] {}; - public GCCommand() { - super("gc", "multichat.group", aliases); + super("mcgc", "multichat.group", (String[]) ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("gc").toArray(new String[0])); } public void execute(CommandSender sender, String[] args) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java index c35d2011..ca53279e 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java @@ -26,7 +26,7 @@ public class GlobalCommand extends Command { public GlobalCommand() { - super("global", "multichat.chat.mode", (String[]) ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList("globalcommand").toArray(new String[0])); + super("mcglobal", "multichat.chat.mode", (String[]) ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("global").toArray(new String[0])); } public void execute(CommandSender sender, String[] args) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GroupCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GroupCommand.java index d200edab..77819271 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GroupCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GroupCommand.java @@ -13,6 +13,7 @@ import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.plugin.Command; import net.md_5.bungee.api.plugin.TabExecutor; +import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.GroupManager; import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.bungee.UUIDNameManager; @@ -28,10 +29,8 @@ */ public class GroupCommand extends Command implements TabExecutor { - private static String[] aliases = new String[] {}; - public GroupCommand() { - super("group", "multichat.group", aliases); + super("mcgroup", "multichat.group", (String[]) ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("group").toArray(new String[0])); } public void execute(CommandSender sender, String[] args) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GroupListCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GroupListCommand.java index a623ff63..e91fbb3e 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GroupListCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GroupListCommand.java @@ -2,6 +2,7 @@ import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.plugin.Command; +import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; @@ -15,10 +16,8 @@ */ public class GroupListCommand extends Command { - private static String[] aliases = new String[] {}; - public GroupListCommand() { - super("groups", "multichat.staff.listgroups", aliases); + super("mcgroups", "multichat.staff.listgroups", (String[]) ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("groups").toArray(new String[0])); } public void execute(CommandSender sender, String[] args) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/HelpMeCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/HelpMeCommand.java index 28b9cdd3..cd35e54f 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/HelpMeCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/HelpMeCommand.java @@ -7,6 +7,7 @@ import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.plugin.Command; import xyz.olivermartin.multichat.bungee.ChatControl; +import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.ConsoleManager; import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.bungee.MultiChatUtil; @@ -20,10 +21,8 @@ */ public class HelpMeCommand extends Command { - private static String[] aliases = new String[] {}; - public HelpMeCommand() { - super("helpme", "multichat.chat.helpme", aliases); + super("mchelpme", "multichat.chat.helpme", (String[]) ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("helpme").toArray(new String[0])); } public void execute(CommandSender sender, String[] args) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/IgnoreCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/IgnoreCommand.java index c7ad2d87..192c598a 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/IgnoreCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/IgnoreCommand.java @@ -12,7 +12,7 @@ public class IgnoreCommand extends Command { public IgnoreCommand() { - super("ignore", "multichat.ignore", (String[])ConfigManager.getInstance().getHandler("chatcontrol.yml").getConfig().getStringList("ignorecommand").toArray(new String[0])); + super("mcignore", "multichat.ignore", (String[])ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("ignore").toArray(new String[0])); } @Override diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java index d3c76c91..57836664 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java @@ -26,7 +26,7 @@ public class LocalCommand extends Command { public LocalCommand() { - super("local", "multichat.chat.mode", (String[]) ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList("localcommand").toArray(new String[0])); + super("mclocal", "multichat.chat.mode", (String[]) ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("local").toArray(new String[0])); } public void execute(CommandSender sender, String[] args) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MCCCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MCCCommand.java index b2305446..b710add0 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MCCCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MCCCommand.java @@ -5,6 +5,7 @@ import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.plugin.Command; +import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; @@ -18,10 +19,8 @@ */ public class MCCCommand extends Command { - private static String[] aliases = new String[] {}; - public MCCCommand() { - super("mcc", "multichat.staff.mod", aliases); + super("mcmcc", "multichat.staff.mod", (String[]) ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("mcc").toArray(new String[0])); } public void execute(CommandSender sender, String[] args) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MCCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MCCommand.java index a578fa3e..3d7fe9fd 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MCCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MCCommand.java @@ -3,6 +3,7 @@ import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.plugin.Command; +import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.Events; import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.bungee.MultiChatUtil; @@ -17,10 +18,8 @@ */ public class MCCommand extends Command { - private static String[] aliases = new String[] {}; - public MCCommand() { - super("mc", "multichat.staff.mod", aliases); + super("mcmc", "multichat.staff.mod", (String[]) ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("mc").toArray(new String[0])); } public void execute(CommandSender sender, String[] args) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MsgCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MsgCommand.java index 1029c00d..35ee8a4d 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MsgCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MsgCommand.java @@ -30,7 +30,7 @@ public class MsgCommand extends Command implements TabExecutor { public MsgCommand() { - super("msg", "multichat.chat.msg", (String[]) ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList("msgcommand").toArray(new String[0])); + super("mcmsg", "multichat.chat.msg", (String[]) ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("msg").toArray(new String[0])); } public void execute(CommandSender sender, String[] args) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MultiChatBypassCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MultiChatBypassCommand.java index 10afc672..a4819d2a 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MultiChatBypassCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MultiChatBypassCommand.java @@ -10,7 +10,7 @@ public class MultiChatBypassCommand extends Command { public MultiChatBypassCommand() { - super("multichatbypass", "multichat.bypass", ConfigManager.getInstance().getHandler("config.yml").getConfig().contains("multichatbypasscommand") ? (String[]) ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList("multichatbypasscommand").toArray(new String[0]) : new String[0]); + super("mcbypass", "multichat.bypass", (String[]) ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("bypass").toArray(new String[0])); } @Override 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 e5310403..f1d5063e 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 @@ -23,10 +23,8 @@ */ public class MultiChatCommand extends Command { - private static String[] aliases = new String[] {}; - public MultiChatCommand() { - super("multichat", "multichat.admin", aliases); + super("multichat", "multichat.admin", (String[]) ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("multichat").toArray(new String[0])); } private void displayHelp(CommandSender sender, int page) { @@ -93,11 +91,13 @@ public void execute(CommandSender sender, String[] args) { ConfigManager.getInstance().getHandler("joinmessages.yml").startupConfig(); ConfigManager.getInstance().getHandler("messages.yml").startupConfig(); ConfigManager.getInstance().getHandler("chatcontrol.yml").startupConfig(); + ConfigManager.getInstance().getHandler("aliases.yml").startupConfig(); ConfigManager.getInstance().getHandler("messages_fr.yml").startupConfig(); ConfigManager.getInstance().getHandler("joinmessages_fr.yml").startupConfig(); ConfigManager.getInstance().getHandler("config_fr.yml").startupConfig(); ConfigManager.getInstance().getHandler("chatcontrol_fr.yml").startupConfig(); + ConfigManager.getInstance().getHandler("aliases_fr.yml").startupConfig(); // Reload, and re-register commands CommandManager.reload(); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MultiChatExecuteCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MultiChatExecuteCommand.java index 1def1691..6e975f13 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MultiChatExecuteCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MultiChatExecuteCommand.java @@ -21,7 +21,7 @@ public class MultiChatExecuteCommand extends Command { public MultiChatExecuteCommand() { - super("multichatexecute", "multichat.execute", ConfigManager.getInstance().getHandler("config.yml").getConfig().contains("multichatexecutecommand") ? (String[]) ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList("multichatexecutecommand").toArray(new String[0]) : new String[] {"mcexecute", "mce" ,"gexecute","gexe","gcommand"}); + super("mcexecute", "multichat.execute", (String[]) ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("execute").toArray(new String[0])); } public void execute(CommandSender sender, String[] args) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MuteCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MuteCommand.java index 133e9600..3c10f189 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MuteCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MuteCommand.java @@ -11,7 +11,7 @@ public class MuteCommand extends Command { public MuteCommand() { - super("multichatmute", "multichat.mute", (String[])ConfigManager.getInstance().getHandler("chatcontrol.yml").getConfig().getStringList("mutecommand").toArray(new String[0])); + super("mcmute", "multichat.mute", (String[])ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("mute").toArray(new String[0])); } @Override diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ReplyCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ReplyCommand.java index 20f2c6fd..5ea9ded0 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ReplyCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ReplyCommand.java @@ -25,7 +25,7 @@ public class ReplyCommand extends Command { public ReplyCommand() { - super("r", "multichat.chat.msg", (String[])ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList("rcommand").toArray(new String[0])); + super("mcr", "multichat.chat.msg", (String[])ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("r").toArray(new String[0])); } public void execute(CommandSender sender, String[] args) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/SocialSpyCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/SocialSpyCommand.java index c9228764..ab14e63e 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/SocialSpyCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/SocialSpyCommand.java @@ -18,7 +18,7 @@ public class SocialSpyCommand extends Command { public SocialSpyCommand() { - super("socialspy", "multichat.staff.spy", (String[])ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList("socialspycommand").toArray(new String[0])); + super("mcsocialspy", "multichat.staff.spy", (String[])ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("socialspy").toArray(new String[0])); } public void execute(CommandSender sender, String[] args) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/StaffListCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/StaffListCommand.java index da8c5566..b975b09c 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/StaffListCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/StaffListCommand.java @@ -22,10 +22,8 @@ */ public class StaffListCommand extends Command { - private static String[] aliases = new String[] {}; - public StaffListCommand() { - super("staff", "multichat.staff.list", aliases); + super("mcstaff", "multichat.staff.list", (String[])ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("staff").toArray(new String[0])); } public void execute(CommandSender sender, String[] args) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/UseCastCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/UseCastCommand.java index 843dda6d..3208d6f3 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/UseCastCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/UseCastCommand.java @@ -6,6 +6,7 @@ import net.md_5.bungee.api.plugin.Command; import xyz.olivermartin.multichat.bungee.CastControl; import xyz.olivermartin.multichat.bungee.Channel; +import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.bungee.MultiChatUtil; @@ -18,10 +19,8 @@ */ public class UseCastCommand extends Command { - private static String[] aliases = new String[] {}; - public UseCastCommand() { - super("usecast", "multichat.cast.admin", aliases); + super("mcusecast", "multichat.cast.admin", (String[])ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("usecast").toArray(new String[0])); } public void displayUsage(CommandSender sender) { diff --git a/multichat/src/main/resources/aliases.yml b/multichat/src/main/resources/aliases.yml new file mode 100644 index 00000000..e41ce1fe --- /dev/null +++ b/multichat/src/main/resources/aliases.yml @@ -0,0 +1,167 @@ +############################################################ +# +------------------------------------------------------+ # +# | MultiChat Command Aliases | # +# +------------------------------------------------------+ # +############################################################ + +# By Revilo410 + +################## +# DON'T EDIT # +version: "1.10" # +################## + +# 1. Command Aliases + +############################################################ +# +------------------------------------------------------+ # +# | General | # +# +------------------------------------------------------+ # +############################################################ + +# The admin chat colour command has the following aliases (other than /mcacc) +acc: +- acc + +# The admin chat command has the following aliases (other than /mcac) +ac: +- ac + +# The announcement command has the following aliases (other than /mcannouncement) +announcement: +- announcement +- announce +- announcements + +# The bulletin command has the following aliases (other than /mcbulletin) +bulletin: +- bulletin +- bulletins + +# The cast command has the following aliases (other than /mccast) +cast: +- cast + +# The channel command has the following aliases (other than /mcchannel) +channel: +- channel +- ch + +# The clearchat command has the following aliases (other than /mcclearchat) +clearchat: +- clearchat +- chatclear +- wipechat +- killchat + +# The display command has the following aliases (other than /mcdisplay) +display: +- display + +# The freezechat command has the following aliases (other than /mcfreezechat) +freezechat: +- freezechat +- pausechat +- lockchat +- chatlock + +# The group chat command has the following aliases (other than /mcgc) +gc: +- gc + +# The global command has the following aliases (other than /mcglobal) +global: +- global +- g + +# The group command has the following aliases (other than /mcgroup) +group: +- group + +# The group list command has the following aliases (other than /mcgroups) +groups: +- groups +- grouplist + +# The helpme command has the following aliases (other than /mchelpme) +helpme: +- helpme +- helpop + +# The ignore command has the following aliases (other than /mcignore) +ignore: +- ignore +- blockplayer + +# The local command has the following aliases (other than /mclocal) +local: +- local +- l + +# The mod chat colour command has the following aliases (other than /mcmcc) +mcc: +- mcc + +# The mod chat command has the following aliases (other than /mcmc) +mc: +- mc + +# The private message command has the following aliases (other than /mcmsg) +msg: +- msg +- m +- message +- t +- tell +- w +- whisper +- chat +- pm + +# The multichat bypass command has the following aliases (other than /mcbypass) +bypass: +- bypass +- mcb +- multichatbypass + +# The multichat command has the following aliases (other than /multichat) +multichat: +- mcinfo +- mcversion + +# The multichat execute command has the following aliases (other than /mcexecute) +execute: +- execute +- mce +- multichatexecute +- gexe +- gexecute + +# The mute command has the following aliases (other than /mcmute) +mute: +- mute +- silence +- multichatmute + +# The reply command has the following aliases (other than /mcr) +r: +- r +- reply +- respond + +# The socialspy command has the following aliases (other than /mcsocialspy) +socialspy: +- socialspy +- spy +- sspy + +# The staff list command has the following aliases (other than /mcstaff) +staff: +- staff +- stafflist +- liststaff + +# The usecast command has the following aliases (other than /mcusecast) +usecast: +- usecast +- ccast diff --git a/multichat/src/main/resources/aliases_fr.yml b/multichat/src/main/resources/aliases_fr.yml new file mode 100644 index 00000000..a7f1da4e --- /dev/null +++ b/multichat/src/main/resources/aliases_fr.yml @@ -0,0 +1,169 @@ +############################################################ +# +------------------------------------------------------+ # +# | MultiChat Aliases | # +# +------------------------------------------------------+ # +############################################################ + +# By Revilo410 + +# Pour utiliser ce fichier, renommer en 'aliases.yml' + +################## +# DON'T EDIT # +version: "1.10" # +################## + +# 1. Command Aliases + +############################################################ +# +------------------------------------------------------+ # +# | General | # +# +------------------------------------------------------+ # +############################################################ + +# La commande 'acc' possède les alias suivants (autres que /mcacc) +acc: +- acc + +# La commande 'ac' possède les alias suivants (autres que /mcac) +ac: +- ac + +# La commande 'announcement' possède les alias suivants (autres que /mcannouncement) +announcement: +- announcement +- announce +- announcements + +# La commande 'bulletin' possède les alias suivants (autres que /mcbulletin) +bulletin: +- bulletin +- bulletins + +# La commande 'cast' possède les alias suivants (autres que /mccast) +cast: +- cast + +# La commande 'channel' possède les alias suivants (autres que /mcchannel) +channel: +- channel +- ch + +# La commande 'clearchat' possède les alias suivants (autres que /mcclearchat) +clearchat: +- clearchat +- chatclear +- wipechat +- killchat + +# La commande 'display' possède les alias suivants (autres que /mcdisplay) +display: +- display + +# La commande 'freezechat' possède les alias suivants (autres que /mcfreezechat) +freezechat: +- freezechat +- pausechat +- lockchat +- chatlock + +# La commande 'gc' possède les alias suivants (autres que /mcgc) +gc: +- gc + +# La commande 'global' possède les alias suivants (autres que /mcglobal) +global: +- global +- g + +# La commande 'group' possède les alias suivants (autres que /mcgroup) +group: +- group + +# La commande 'groups' possède les alias suivants (autres que /mcgroups) +groups: +- groups +- grouplist + +# La commande 'helpme' possède les alias suivants (autres que /mchelpme) +helpme: +- helpme +- helpop + +# La commande 'ignore' possède les alias suivants (autres que /mcignore) +ignore: +- ignore +- blockplayer + +# La commande 'local' possède les alias suivants (autres que /mclocal) +local: +- local +- l + +# La commande 'mcc' possède les alias suivants (autres que /mcmcc) +mcc: +- mcc + +# La commande 'mc' possède les alias suivants (autres que /mcmc) +mc: +- mc + +# La commande 'msg' possède les alias suivants (autres que /mcmsg) +msg: +- msg +- m +- message +- t +- tell +- w +- whisper +- chat +- pm + +# La commande 'bypass' possède les alias suivants (autres que /mcbypass) +bypass: +- bypass +- mcb +- multichatbypass + +# La commande 'multichat' possède les alias suivants (autres que /multichat) +multichat: +- mcinfo +- mcversion + +# La commande 'execute' possède les alias suivants (autres que /mcexecute) +execute: +- execute +- mce +- multichatexecute +- gexe +- gexecute + +# La commande 'mute' possède les alias suivants (autres que /mcmute) +mute: +- mute +- silence +- multichatmute + +# La commande 'r' possède les alias suivants (autres que /mcr) +r: +- r +- reply +- respond + +# La commande 'socialspy' possède les alias suivants (autres que /mcsocialspy) +socialspy: +- socialspy +- spy +- sspy + +# La commande 'staff' possède les alias suivants (autres que /mcstaff) +staff: +- staff +- stafflist +- liststaff + +# La commande 'usecast' possède les alias suivants (autres que /mcusecast) +usecast: +- usecast +- ccast diff --git a/multichat/src/main/resources/chatcontrol.yml b/multichat/src/main/resources/chatcontrol.yml index b798d277..7dbd9273 100644 --- a/multichat/src/main/resources/chatcontrol.yml +++ b/multichat/src/main/resources/chatcontrol.yml @@ -151,12 +151,6 @@ apply_mute_to: group_chats: false helpme: false -# Mute command aliases (in addition to /multichatmute) - -mutecommand: -- mute -- mcmute - ################## # Ignore Command # ################## @@ -179,11 +173,6 @@ apply_ignore_to: private_messages: true group_chats: false -# Ignore command aliases (in addition to /ignore) - -ignorecommand: -- blockchat - ############################################################ # +------------------------------------------------------+ # # | Link / URL Controls | # diff --git a/multichat/src/main/resources/chatcontrol_fr.yml b/multichat/src/main/resources/chatcontrol_fr.yml index e9701fe1..bbf4635e 100644 --- a/multichat/src/main/resources/chatcontrol_fr.yml +++ b/multichat/src/main/resources/chatcontrol_fr.yml @@ -161,11 +161,6 @@ apply_mute_to: group_chats: false helpme: false -# Alias de commande MUTE (en plus de /multichatmute). -mutecommand: -- mute -- mcmute - ################### # Commande Ignore # ################### @@ -188,11 +183,6 @@ apply_ignore_to: private_messages: true group_chats: false -# Alias de commande ignore (en plus de la commande /ignore) - -ignorecommand: -- blockchat - ############################################################ # +------------------------------------------------------+ # # | Contrôle de Liens / URL | # diff --git a/multichat/src/main/resources/config.yml b/multichat/src/main/resources/config.yml index 2f294903..bd06a502 100644 --- a/multichat/src/main/resources/config.yml +++ b/multichat/src/main/resources/config.yml @@ -97,31 +97,6 @@ pmin: "&6[&c%DISPLAYNAME% &6-> &cMe&6] &f%MESSAGE%" pmspy: "&8&l<< &f%NAME% &7-> &f%NAMET%&8: &7%MESSAGE% &8&l>>" -############## -# PM ALIASES # -############## - -# The /msg command has the following aliases (other than /msg) -msgcommand: -- m -- message -- t -- tell -- w -- whisper -- chat -- pm - -# The /r command has the following aliases (other than /r) -rcommand: -- reply -- respond - -# The /socialspy command has the following aliases (other than /socialspy) -socialspycommand: -- spy -- sspy - ############################################################ # +------------------------------------------------------+ # # | Chat Channels | # @@ -135,18 +110,6 @@ default_channel: "global" # Force players into default channel when they join the server? force_channel_on_join: false -# The /channel command has the following aliases (other than /channel) -channelcommand: -- ch - -# The /global command has the following aliases (other than /global) -globalcommand: -- g - -# The /local command has the following aliases (other than /local) -localcommand: -- l - ############################################################ # +------------------------------------------------------+ # # | Global Chat | # @@ -247,19 +210,6 @@ adminchat: # Set to false to disable the '/staff' staff list command staff_list: true -# MultiChat bypass command aliases (other than /multichatbypass) -multichatbypasscommand: -- mcb -- bypass - -# MultiChat execute command aliases (other than /multichatexecute) -multichatexecutecommand: -- mcexecute -- mce -- gexecute -- gexe -- gcommand - # Control what aspects of chat are logged by MultiChat (useful for GDPR etc.) privacy_settings: log_pms: true diff --git a/multichat/src/main/resources/config_fr.yml b/multichat/src/main/resources/config_fr.yml index eca5b17d..4046a3e3 100644 --- a/multichat/src/main/resources/config_fr.yml +++ b/multichat/src/main/resources/config_fr.yml @@ -103,31 +103,6 @@ pmin: "&6[&c%DISPLAYNAME% &6-> &cMe&6] &f%MESSAGE%" # Formatage des message en socialspy. pmspy: "&8&l<< &f%NAME% &7-> &f%NAMET%&8: &7%MESSAGE% &8&l>>" -################################### -# Alias pour les messages privées # -################################### - -# La commande /msg possède les alias suivants (autres que /msg). -msgcommand: -- m -- message -- t -- tell -- w -- whisper -- chat -- pm - -# La commande /r possède les alias suivants (autres que /r). -rcommand: -- reply -- respond - -# La commande /socialspy a les alias suivants (autres que /socialspy). -socialspycommand: -- spy -- sspy - ############################################################ # +------------------------------------------------------+ # # | Cannaux de chat | # @@ -142,18 +117,6 @@ default_channel: "global" # Paramétrage disponible : true ou false force_channel_on_join: false -# La commande /Channel possède les alias suivants (autres que /Channel) -channelcommand: -- ch - -# La commande /Global possède les alias suivants (autres que /Global) -globalcommand: -- g - -# La commande /Local possède les alias suivants (autres que /Local) -localcommand: -- l - ############################################################ # +------------------------------------------------------+ # # | Chat global | # @@ -252,19 +215,6 @@ adminchat: # Paramétrage disponible : true ou false staff_list: true -# Alias de commande de contournement MultiChat (autre que /multichatbypass). -multichatbypasscommand: -- mcb -- bypass - -# Alias de commande MultiChat Execute (autre que /multichatexecute). -multichatexecutecommand: -- mcexecute -- mce -- gexecute -- gexe -- gcommand - # Contrôlez quels aspects du chat sont enregistrés dans les logs MultiChat (utile pour la RGDP etc.) privacy_settings: log_pms: true From 41b91941c5fd5a3cebc14ecd94f8ab44870bf44a Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Wed, 22 Jul 2020 00:20:23 +0100 Subject: [PATCH 033/188] Moved MultiChatUtil to common package --- .../multichat/bungee/Announcements.java | 1 + .../multichat/bungee/Bulletins.java | 1 + .../multichat/bungee/CastControl.java | 1 + .../multichat/bungee/Channel.java | 1 + .../multichat/bungee/ConsoleManager.java | 1 + .../olivermartin/multichat/bungee/Events.java | 1 + .../multichat/bungee/MessageManager.java | 1 + .../bungee/PrivateMessageManager.java | 1 + .../multichat/bungee/StaffChatManager.java | 1 + .../multichat/bungee/commands/ACCommand.java | 2 +- .../bungee/commands/AnnouncementCommand.java | 2 +- .../bungee/commands/BulletinCommand.java | 2 +- .../bungee/commands/CastCommand.java | 2 +- .../bungee/commands/DisplayCommand.java | 2 +- .../multichat/bungee/commands/GCCommand.java | 2 +- .../bungee/commands/GlobalCommand.java | 2 +- .../bungee/commands/HelpMeCommand.java | 2 +- .../bungee/commands/LocalCommand.java | 2 +- .../multichat/bungee/commands/MCCommand.java | 2 +- .../multichat/bungee/commands/MsgCommand.java | 2 +- .../bungee/commands/ReplyCommand.java | 2 +- .../bungee/commands/UseCastCommand.java | 2 +- .../{bungee => common}/MultiChatUtil.java | 86 +++++++++---------- .../local/spigot/LocalSpigotChatManager.java | 2 +- .../local/spigot/LocalSpigotMetaManager.java | 2 +- .../spigot/LocalSpigotPlaceholderManager.java | 2 +- .../local/sponge/LocalSpongeChatManager.java | 2 +- .../local/sponge/LocalSpongeMetaManager.java | 2 +- .../sponge/LocalSpongePlaceholderManager.java | 2 +- 29 files changed, 71 insertions(+), 62 deletions(-) rename multichat/src/main/java/xyz/olivermartin/multichat/{bungee => common}/MultiChatUtil.java (51%) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Announcements.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Announcements.java index 355f00e5..94da392e 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Announcements.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Announcements.java @@ -10,6 +10,7 @@ import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.scheduler.ScheduledTask; import xyz.olivermartin.multichat.bungee.events.PostBroadcastEvent; +import xyz.olivermartin.multichat.common.MultiChatUtil; /** * Announcements Management diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Bulletins.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Bulletins.java index f08f7ff3..e48590f4 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Bulletins.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Bulletins.java @@ -10,6 +10,7 @@ import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.scheduler.ScheduledTask; import xyz.olivermartin.multichat.bungee.events.PostBroadcastEvent; +import xyz.olivermartin.multichat.common.MultiChatUtil; /** * Bulletins Management diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/CastControl.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/CastControl.java index 5a6229d9..c0f4f47c 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/CastControl.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/CastControl.java @@ -4,6 +4,7 @@ import java.util.Map; import net.md_5.bungee.api.CommandSender; +import xyz.olivermartin.multichat.common.MultiChatUtil; /** * Cast Control diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Channel.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Channel.java index 953a453d..e7db5f27 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Channel.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Channel.java @@ -15,6 +15,7 @@ import net.md_5.bungee.api.connection.ProxiedPlayer; import xyz.olivermartin.multichat.bungee.events.PostBroadcastEvent; import xyz.olivermartin.multichat.bungee.events.PostGlobalChatEvent; +import xyz.olivermartin.multichat.common.MultiChatUtil; /** * Channel diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ConsoleManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ConsoleManager.java index a974d60f..9ea08d79 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ConsoleManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ConsoleManager.java @@ -7,6 +7,7 @@ import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.TextComponent; +import xyz.olivermartin.multichat.common.MultiChatUtil; public class ConsoleManager { 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 dcee8ebb..83784da9 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Events.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Events.java @@ -28,6 +28,7 @@ import net.md_5.bungee.event.EventHandler; import net.md_5.bungee.event.EventPriority; import xyz.olivermartin.multichat.bungee.commands.GCCommand; +import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MessageManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MessageManager.java index 9cfad8cd..c4541abf 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MessageManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MessageManager.java @@ -7,6 +7,7 @@ import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.config.Configuration; +import xyz.olivermartin.multichat.common.MultiChatUtil; /** * Message Manager diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PrivateMessageManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PrivateMessageManager.java index ea5d734e..434ba78e 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PrivateMessageManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PrivateMessageManager.java @@ -7,6 +7,7 @@ import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.connection.ProxiedPlayer; +import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/StaffChatManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/StaffChatManager.java index 7f9dfc2e..c54f1915 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/StaffChatManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/StaffChatManager.java @@ -9,6 +9,7 @@ import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.connection.ProxiedPlayer; import xyz.olivermartin.multichat.bungee.events.PostStaffChatEvent; +import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ACCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ACCommand.java index 72a3c6ee..0af3f226 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ACCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ACCommand.java @@ -7,7 +7,7 @@ import xyz.olivermartin.multichat.bungee.DebugManager; import xyz.olivermartin.multichat.bungee.Events; import xyz.olivermartin.multichat.bungee.MessageManager; -import xyz.olivermartin.multichat.bungee.MultiChatUtil; +import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.bungee.StaffChatManager; /** diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/AnnouncementCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/AnnouncementCommand.java index ba0881cb..92001d9a 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/AnnouncementCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/AnnouncementCommand.java @@ -10,7 +10,7 @@ import xyz.olivermartin.multichat.bungee.Announcements; import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.MessageManager; -import xyz.olivermartin.multichat.bungee.MultiChatUtil; +import xyz.olivermartin.multichat.common.MultiChatUtil; /** * Announcement Command diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/BulletinCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/BulletinCommand.java index 422ad243..2219e966 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/BulletinCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/BulletinCommand.java @@ -9,7 +9,7 @@ import xyz.olivermartin.multichat.bungee.Bulletins; import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.MessageManager; -import xyz.olivermartin.multichat.bungee.MultiChatUtil; +import xyz.olivermartin.multichat.common.MultiChatUtil; /** * Bulletin Command diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/CastCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/CastCommand.java index 455b68e5..e49ec664 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/CastCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/CastCommand.java @@ -9,7 +9,7 @@ import xyz.olivermartin.multichat.bungee.CastControl; import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.MessageManager; -import xyz.olivermartin.multichat.bungee.MultiChatUtil; +import xyz.olivermartin.multichat.common.MultiChatUtil; /** * Cast Command diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/DisplayCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/DisplayCommand.java index 524ca187..73f26b2f 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/DisplayCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/DisplayCommand.java @@ -12,7 +12,7 @@ import xyz.olivermartin.multichat.bungee.ConsoleManager; import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.bungee.MultiChat; -import xyz.olivermartin.multichat.bungee.MultiChatUtil; +import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.bungee.events.PostBroadcastEvent; /** diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GCCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GCCommand.java index fbdd13a5..2efaca19 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GCCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GCCommand.java @@ -17,7 +17,7 @@ import xyz.olivermartin.multichat.bungee.Events; import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.bungee.MultiChat; -import xyz.olivermartin.multichat.bungee.MultiChatUtil; +import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java index ca53279e..6eff45b3 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java @@ -12,7 +12,7 @@ import xyz.olivermartin.multichat.bungee.DebugManager; import xyz.olivermartin.multichat.bungee.Events; import xyz.olivermartin.multichat.bungee.MessageManager; -import xyz.olivermartin.multichat.bungee.MultiChatUtil; +import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/HelpMeCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/HelpMeCommand.java index cd35e54f..1fba7372 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/HelpMeCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/HelpMeCommand.java @@ -10,7 +10,7 @@ import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.ConsoleManager; import xyz.olivermartin.multichat.bungee.MessageManager; -import xyz.olivermartin.multichat.bungee.MultiChatUtil; +import xyz.olivermartin.multichat.common.MultiChatUtil; /** * 'Help Me' Command diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java index 57836664..ceeba62a 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java @@ -12,7 +12,7 @@ import xyz.olivermartin.multichat.bungee.DebugManager; import xyz.olivermartin.multichat.bungee.Events; import xyz.olivermartin.multichat.bungee.MessageManager; -import xyz.olivermartin.multichat.bungee.MultiChatUtil; +import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MCCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MCCommand.java index 3d7fe9fd..5cd3763a 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MCCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MCCommand.java @@ -6,7 +6,7 @@ import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.Events; import xyz.olivermartin.multichat.bungee.MessageManager; -import xyz.olivermartin.multichat.bungee.MultiChatUtil; +import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.bungee.StaffChatManager; /** diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MsgCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MsgCommand.java index 35ee8a4d..697be498 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MsgCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MsgCommand.java @@ -16,7 +16,7 @@ import xyz.olivermartin.multichat.bungee.Events; import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.bungee.MultiChat; -import xyz.olivermartin.multichat.bungee.MultiChatUtil; +import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.bungee.PrivateMessageManager; import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ReplyCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ReplyCommand.java index 5ea9ded0..4f654fca 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ReplyCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ReplyCommand.java @@ -10,7 +10,7 @@ import xyz.olivermartin.multichat.bungee.ChatControl; import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.MessageManager; -import xyz.olivermartin.multichat.bungee.MultiChatUtil; +import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.bungee.PrivateMessageManager; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/UseCastCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/UseCastCommand.java index 3208d6f3..b2b4da85 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/UseCastCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/UseCastCommand.java @@ -8,7 +8,7 @@ import xyz.olivermartin.multichat.bungee.Channel; import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.MessageManager; -import xyz.olivermartin.multichat.bungee.MultiChatUtil; +import xyz.olivermartin.multichat.common.MultiChatUtil; /** * Use Cast Command diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChatUtil.java b/multichat/src/main/java/xyz/olivermartin/multichat/common/MultiChatUtil.java similarity index 51% rename from multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChatUtil.java rename to multichat/src/main/java/xyz/olivermartin/multichat/common/MultiChatUtil.java index 7e81e72f..4de37048 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChatUtil.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/common/MultiChatUtil.java @@ -1,4 +1,4 @@ -package xyz.olivermartin.multichat.bungee; +package xyz.olivermartin.multichat.common; import java.util.ArrayList; import java.util.Collection; @@ -7,7 +7,7 @@ import java.util.regex.Pattern; public class MultiChatUtil { - + /** * Reformat the RGB codes into Spigot Native version * @@ -18,67 +18,67 @@ public static String reformatRGB(String message) { // Translate RGB codes return message.replaceAll("(?i)\\&(x|#)([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])", "&x&$2&$3&$4&$5&$6&$7"); } - + public static String approximateHexCodes(String message) { - message = message.replaceAll("(?i)(\\&|§)x(\\&|§)([0-9A-F])(\\&|§)([0-9A-F])(\\&|§)([0-9A-F])(\\&|§)([0-9A-F])(\\&|§)([0-9A-F])(\\&|§)([0-9A-F])", "&#$3$5$7$9$11$13"); + message = message.replaceAll("(?i)(\\&|§)x(\\&|§)([0-9A-F])(\\&|§)([0-9A-F])(\\&|§)([0-9A-F])(\\&|§)([0-9A-F])(\\&|§)([0-9A-F])(\\&|§)([0-9A-F])", "&#$3$5$7$9$11$13"); - List allMatches = new ArrayList(); - Matcher m = Pattern.compile("(?i)\\&(x|#)([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])") - .matcher(message); - while (m.find()) { - allMatches.add(m.group()); - } + List allMatches = new ArrayList(); + Matcher m = Pattern.compile("(?i)\\&(x|#)([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])") + .matcher(message); + while (m.find()) { + allMatches.add(m.group()); + } - for (String match : allMatches) { - String hexonly = match.split("#")[1]; - String minecraftCode = hexToMinecraft(hexonly); - message = message.replace(match,"§"+minecraftCode); - } + for (String match : allMatches) { + String hexonly = match.split("#")[1]; + String minecraftCode = hexToMinecraft(hexonly); + message = message.replace(match,"§"+minecraftCode); + } - return message; + return message; - } + } - public static String hexToMinecraft(String hex) { + public static String hexToMinecraft(String hex) { - String rcode = hex.substring(0,2); - String gcode = hex.substring(2,4); - String bcode = hex.substring(4,6); + String rcode = hex.substring(0,2); + String gcode = hex.substring(2,4); + String bcode = hex.substring(4,6); - int rint = Integer.parseInt(rcode,16); - int gint = Integer.parseInt(gcode,16); - int bint = Integer.parseInt(bcode,16); + int rint = Integer.parseInt(rcode,16); + int gint = Integer.parseInt(gcode,16); + int bint = Integer.parseInt(bcode,16); - String[] cga = {"000000","0000aa","00aa00","00aaaa","aa0000","aa00aa","ffaa00","aaaaaa","555555","5555ff","55ff55","55ffff","ff5555","ff55ff","ffff55","ffffff"}; + String[] cga = {"000000","0000aa","00aa00","00aaaa","aa0000","aa00aa","ffaa00","aaaaaa","555555","5555ff","55ff55","55ffff","ff5555","ff55ff","ffff55","ffffff"}; - int diff = 999999999; - int best = -1; + int diff = 999999999; + int best = -1; - for (int i = 0; i < 16; i++) { + for (int i = 0; i < 16; i++) { - String current = cga[i]; + String current = cga[i]; - String rcode2 = current.substring(0,2); - String gcode2 = current.substring(2,4); - String bcode2 = current.substring(4,6); + String rcode2 = current.substring(0,2); + String gcode2 = current.substring(2,4); + String bcode2 = current.substring(4,6); - int rint2 = Integer.parseInt(rcode2,16); - int gint2 = Integer.parseInt(gcode2,16); - int bint2 = Integer.parseInt(bcode2,16); + int rint2 = Integer.parseInt(rcode2,16); + int gint2 = Integer.parseInt(gcode2,16); + int bint2 = Integer.parseInt(bcode2,16); - int val = Math.abs(rint-rint2) + Math.abs(gint-gint2) + Math.abs(bint-bint2); + int val = Math.abs(rint-rint2) + Math.abs(gint-gint2) + Math.abs(bint-bint2); - if (val < diff) { - best = i; - diff = val; - } + if (val < diff) { + best = i; + diff = val; + } - } + } - return Integer.toHexString(best); + return Integer.toHexString(best); - } + } /** * Concatenate the arguments together to get the message as a string diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotChatManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotChatManager.java index 7e454209..5cc0bb03 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotChatManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotChatManager.java @@ -4,7 +4,7 @@ import org.bukkit.ChatColor; import me.clip.placeholderapi.PlaceholderAPI; -import xyz.olivermartin.multichat.bungee.MultiChatUtil; +import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.local.common.LocalChatManager; import xyz.olivermartin.multichat.local.common.MultiChatLocal; import xyz.olivermartin.multichat.local.common.MultiChatLocalPlayer; diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotMetaManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotMetaManager.java index 9ceebfdf..898cb470 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotMetaManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotMetaManager.java @@ -7,7 +7,7 @@ import org.bukkit.entity.Player; import net.milkbowl.vault.chat.Chat; -import xyz.olivermartin.multichat.bungee.MultiChatUtil; +import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.local.common.LocalConsoleLogger; import xyz.olivermartin.multichat.local.common.LocalMetaManager; import xyz.olivermartin.multichat.local.common.MultiChatLocal; diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotPlaceholderManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotPlaceholderManager.java index cf9975ae..35b6fba6 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotPlaceholderManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotPlaceholderManager.java @@ -2,7 +2,7 @@ import java.util.UUID; -import xyz.olivermartin.multichat.bungee.MultiChatUtil; +import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.local.common.LocalPlaceholderManager; import xyz.olivermartin.multichat.local.common.MultiChatLocalPlatform; diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongeChatManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongeChatManager.java index c2215dc9..bf12e2db 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongeChatManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongeChatManager.java @@ -7,7 +7,7 @@ import org.spongepowered.api.text.serializer.TextSerializers; import me.rojo8399.placeholderapi.PlaceholderService; -import xyz.olivermartin.multichat.bungee.MultiChatUtil; +import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.local.common.LocalChatManager; import xyz.olivermartin.multichat.local.common.MultiChatLocal; import xyz.olivermartin.multichat.local.common.MultiChatLocalPlayer; diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongeMetaManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongeMetaManager.java index 18acdbcf..77323c31 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongeMetaManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongeMetaManager.java @@ -8,7 +8,7 @@ import org.spongepowered.api.entity.living.player.Player; import org.spongepowered.api.text.Text; -import xyz.olivermartin.multichat.bungee.MultiChatUtil; +import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.local.common.LocalMetaManager; import xyz.olivermartin.multichat.local.common.MultiChatLocal; diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongePlaceholderManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongePlaceholderManager.java index ad5963e7..78413187 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongePlaceholderManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongePlaceholderManager.java @@ -2,7 +2,7 @@ import java.util.UUID; -import xyz.olivermartin.multichat.bungee.MultiChatUtil; +import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.local.common.LocalPlaceholderManager; import xyz.olivermartin.multichat.local.common.MultiChatLocalPlatform; From aee8f631b860488efb84fc81eda9ac96a4cd0888 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Wed, 22 Jul 2020 14:55:16 +0100 Subject: [PATCH 034/188] Changed CommChannels to Interface implementation (thanks to Gadse) --- .../multichat/bungee/MultiChat.java | 14 ++--- .../common/communication/CommChannels.java | 53 +++--------------- .../LocalBungeeCommunicationManager.java | 8 +-- .../spigot/MultiChatLocalSpigotPlugin.java | 22 ++++---- .../LocalSpigotPlayerActionListener.java | 2 +- .../LocalSpigotPlayerChatListener.java | 2 +- .../LocalSpigotPlayerDataListener.java | 2 +- .../LocalSpigotPlayerMetaListener.java | 2 +- .../LocalSpigotServerActionListener.java | 2 +- .../LocalSpigotServerChatListener.java | 2 +- .../LocalSpigotServerDataListener.java | 2 +- .../sponge/MultiChatLocalSpongePlugin.java | 56 +++++++++---------- .../ProxyLocalCommunicationManager.java | 20 +++---- .../ProxyPlayerActionListener.java | 2 +- .../ProxyPlayerChatListener.java | 2 +- .../ProxyPlayerMetaListener.java | 2 +- .../ProxyServerActionListener.java | 2 +- 17 files changed, 80 insertions(+), 115 deletions(-) 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 18b01363..cbc86c71 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java @@ -306,13 +306,13 @@ public void onEnable() { getProxy().getPluginManager().registerListener(this, this); // Communication Channels - getProxy().registerChannel(CommChannels.getPlayerMeta()); // pmeta - getProxy().registerChannel(CommChannels.getPlayerChat()); // pchat - getProxy().registerChannel(CommChannels.getServerChat()); // schat - getProxy().registerChannel(CommChannels.getPlayerAction()); // pact - getProxy().registerChannel(CommChannels.getServerAction()); // sact - getProxy().registerChannel(CommChannels.getPlayerData()); // pdata - getProxy().registerChannel(CommChannels.getServerData()); // sdata + getProxy().registerChannel(CommChannels.PLAYER_META); // pmeta + getProxy().registerChannel(CommChannels.PLAYER_CHAT); // pchat + getProxy().registerChannel(CommChannels.SERVER_CHAT); // schat + getProxy().registerChannel(CommChannels.PLAYER_ACTION); // pact + getProxy().registerChannel(CommChannels.SERVER_ACTION); // sact + getProxy().registerChannel(CommChannels.PLAYER_DATA); // pdata + getProxy().registerChannel(CommChannels.SERVER_DATA); // sdata getProxy().getPluginManager().registerListener(this, new ProxyPlayerMetaListener()); // list - pmeta getProxy().getPluginManager().registerListener(this, new ProxyPlayerChatListener()); // list - pchat getProxy().getPluginManager().registerListener(this, new ProxyPlayerActionListener()); // list - pact diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/common/communication/CommChannels.java b/multichat/src/main/java/xyz/olivermartin/multichat/common/communication/CommChannels.java index 13411ff0..2398f2c1 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/common/communication/CommChannels.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/common/communication/CommChannels.java @@ -1,32 +1,11 @@ package xyz.olivermartin.multichat.common.communication; -public class CommChannels { +public interface CommChannels { /* * The prefix used for multichat communication channels */ - private static String prefix = "multichat:"; - - // Player meta communication (prefix, suffix, displayname etc.) - private static String playerMeta = "pmeta"; - - // Chat messages sent by players - private static String playerChat = "pchat"; - - // Chat messages sent by non-player objects (casts, announcements etc.) - private static String serverChat = "schat"; - - // Data about specific players (selected channels, colour permissions etc.) - private static String playerData = "pdata"; - - // Data about the server as a whole (ignoremap, global chat servers, display name formats, legacy servers etc.) - private static String serverData = "sdata"; - - // Actions for the server console (mce/pxe) - private static String serverAction = "sact"; - - // Actions for players (mce players, ppxe) - private static String playerAction = "pact"; + String PREFIX = "multichat:"; /** * Gets the channel id used for: @@ -52,9 +31,7 @@ public class CommChannels { *

* @return the channel id */ - public static String getPlayerMeta() { - return prefix + playerMeta; - } + String PLAYER_META = PREFIX + "pmeta"; /** * Gets the channel id used for: @@ -76,9 +53,7 @@ public static String getPlayerMeta() { *

* @return the channel id */ - public static String getPlayerChat() { - return prefix + playerChat; - } + String PLAYER_CHAT = PREFIX + "pchat"; /** * Gets the channel id used for: @@ -100,9 +75,7 @@ public static String getPlayerChat() { *

* @return the channel id */ - public static String getServerChat() { - return prefix + serverChat; - } + String SERVER_CHAT = PREFIX + "schat"; /** * Gets the channel id used for: @@ -126,9 +99,7 @@ public static String getServerChat() { *

* @return the channel id */ - public static String getPlayerData() { - return prefix + playerData; - } + String PLAYER_DATA = PREFIX + "pdata"; /** * Gets the channel id used for: @@ -155,9 +126,7 @@ public static String getPlayerData() { *

* @return the channel id */ - public static String getServerData() { - return prefix + serverData; - } + String SERVER_DATA = PREFIX + "sdata"; /** * Gets the channel id used for: @@ -179,9 +148,7 @@ public static String getServerData() { *

* @return the channel id */ - public static String getServerAction() { - return prefix + serverAction; - } + String SERVER_ACTION = PREFIX + "sact"; /** * Gets the channel id used for: @@ -203,8 +170,6 @@ public static String getServerAction() { *

* @return the channel id */ - public static String getPlayerAction() { - return prefix + playerAction; - } + String PLAYER_ACTION = PREFIX + "pact"; } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalBungeeCommunicationManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalBungeeCommunicationManager.java index 3264d990..2191b815 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalBungeeCommunicationManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalBungeeCommunicationManager.java @@ -29,22 +29,22 @@ protected LocalBungeeCommunicationManager(MultiChatLocalPlatform localPlatform) @Override public void sendMetaUpdate(UUID uuid, String metaId, String metaValue) { - sendUUIDAndStringAndString(CommChannels.getPlayerMeta(), uuid, metaId, metaValue); + sendUUIDAndStringAndString(CommChannels.PLAYER_META, uuid, metaId, metaValue); } @Override public void sendProxyExecuteMessage(String command) { - sendString(CommChannels.getServerAction(), command); + sendString(CommChannels.SERVER_ACTION, command); } @Override public void sendProxyExecutePlayerMessage(String command, String player) { - sendStringAndString(CommChannels.getPlayerAction(), command, player); + sendStringAndString(CommChannels.PLAYER_ACTION, command, player); } @Override public void sendPlayerChatMessage(UUID uuid, String channel, String message, String format) { - sendUUIDAndStringAndStringAndString(CommChannels.getPlayerChat(), uuid, channel, message, format); + sendUUIDAndStringAndStringAndString(CommChannels.PLAYER_CHAT, uuid, channel, message, format); } } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/MultiChatLocalSpigotPlugin.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/MultiChatLocalSpigotPlugin.java index 69967fd0..81ebdfba 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/MultiChatLocalSpigotPlugin.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/MultiChatLocalSpigotPlugin.java @@ -169,17 +169,17 @@ public void onEnable() { private void registerCommunicationChannels() { - getServer().getMessenger().registerOutgoingPluginChannel(this, CommChannels.getPlayerMeta()); - getServer().getMessenger().registerOutgoingPluginChannel(this, CommChannels.getPlayerChat()); - getServer().getMessenger().registerOutgoingPluginChannel(this, CommChannels.getPlayerAction()); - getServer().getMessenger().registerOutgoingPluginChannel(this, CommChannels.getServerAction()); - getServer().getMessenger().registerIncomingPluginChannel(this, CommChannels.getServerChat(), new LocalSpigotServerChatListener()); - getServer().getMessenger().registerIncomingPluginChannel(this, CommChannels.getServerAction(), new LocalSpigotServerActionListener()); - getServer().getMessenger().registerIncomingPluginChannel(this, CommChannels.getPlayerAction(), new LocalSpigotPlayerActionListener()); - getServer().getMessenger().registerIncomingPluginChannel(this, CommChannels.getPlayerChat(), new LocalSpigotPlayerChatListener()); - getServer().getMessenger().registerIncomingPluginChannel(this, CommChannels.getPlayerData(), new LocalSpigotPlayerDataListener()); - getServer().getMessenger().registerIncomingPluginChannel(this, CommChannels.getServerData(), new LocalSpigotServerDataListener()); - getServer().getMessenger().registerIncomingPluginChannel(this, CommChannels.getPlayerMeta(), new LocalSpigotPlayerMetaListener()); + getServer().getMessenger().registerOutgoingPluginChannel(this, CommChannels.PLAYER_META); + getServer().getMessenger().registerOutgoingPluginChannel(this, CommChannels.PLAYER_CHAT); + getServer().getMessenger().registerOutgoingPluginChannel(this, CommChannels.PLAYER_ACTION); + getServer().getMessenger().registerOutgoingPluginChannel(this, CommChannels.SERVER_ACTION); + getServer().getMessenger().registerIncomingPluginChannel(this, CommChannels.SERVER_CHAT, new LocalSpigotServerChatListener()); + getServer().getMessenger().registerIncomingPluginChannel(this, CommChannels.SERVER_ACTION, new LocalSpigotServerActionListener()); + getServer().getMessenger().registerIncomingPluginChannel(this, CommChannels.PLAYER_ACTION, new LocalSpigotPlayerActionListener()); + getServer().getMessenger().registerIncomingPluginChannel(this, CommChannels.PLAYER_CHAT, new LocalSpigotPlayerChatListener()); + getServer().getMessenger().registerIncomingPluginChannel(this, CommChannels.PLAYER_DATA, new LocalSpigotPlayerDataListener()); + getServer().getMessenger().registerIncomingPluginChannel(this, CommChannels.SERVER_DATA, new LocalSpigotServerDataListener()); + getServer().getMessenger().registerIncomingPluginChannel(this, CommChannels.PLAYER_META, new LocalSpigotPlayerMetaListener()); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotPlayerActionListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotPlayerActionListener.java index e427a73f..ad603ddd 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotPlayerActionListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotPlayerActionListener.java @@ -14,7 +14,7 @@ public class LocalSpigotPlayerActionListener extends LocalPlayerActionListener i @Override public void onPluginMessageReceived(String channel, Player player, byte[] message) { - if (!channel.equals(CommChannels.getPlayerAction())) return; + if (!channel.equals(CommChannels.PLAYER_ACTION)) return; LocalBungeeMessage lbm = new SpigotBungeeMessage(message); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotPlayerChatListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotPlayerChatListener.java index 36c6d0a2..114596cc 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotPlayerChatListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotPlayerChatListener.java @@ -14,7 +14,7 @@ public class LocalSpigotPlayerChatListener extends LocalPlayerChatListener imple @Override public void onPluginMessageReceived(String channel, Player player, byte[] message) { - if (!channel.equals(CommChannels.getPlayerChat())) return; + if (!channel.equals(CommChannels.PLAYER_CHAT)) return; LocalBungeeMessage lbm = new SpigotBungeeMessage(message); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotPlayerDataListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotPlayerDataListener.java index 6cd807b0..0b0429f3 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotPlayerDataListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotPlayerDataListener.java @@ -20,7 +20,7 @@ public class LocalSpigotPlayerDataListener extends LocalPlayerDataListener imple @Override public void onPluginMessageReceived(String channel, Player player, byte[] message) { - if (!channel.equals(CommChannels.getPlayerData())) return; + if (!channel.equals(CommChannels.PLAYER_DATA)) return; try { LocalBungeeObjectMessage lbm = new SpigotBungeeObjectMessage(message); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotPlayerMetaListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotPlayerMetaListener.java index b6d09079..ef388b83 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotPlayerMetaListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotPlayerMetaListener.java @@ -18,7 +18,7 @@ public class LocalSpigotPlayerMetaListener extends LocalPlayerMetaListener imple @Override public void onPluginMessageReceived(String channel, Player player, byte[] message) { - if (!channel.equals(CommChannels.getPlayerMeta())) return; + if (!channel.equals(CommChannels.PLAYER_META)) return; LocalBungeeMessage lbm = new SpigotBungeeMessage(message); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotServerActionListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotServerActionListener.java index 12d5614b..282eddc4 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotServerActionListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotServerActionListener.java @@ -14,7 +14,7 @@ public class LocalSpigotServerActionListener extends LocalServerActionListener i @Override public void onPluginMessageReceived(String channel, Player player, byte[] message) { - if (!channel.equals(CommChannels.getServerAction())) return; + if (!channel.equals(CommChannels.SERVER_ACTION)) return; LocalBungeeMessage lbm = new SpigotBungeeMessage(message); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotServerChatListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotServerChatListener.java index 907c053f..27e5609a 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotServerChatListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotServerChatListener.java @@ -15,7 +15,7 @@ public class LocalSpigotServerChatListener extends LocalServerChatListener imple @Override public void onPluginMessageReceived(String channel, Player player, byte[] message) { - if (!channel.equals(CommChannels.getServerChat())) return; + if (!channel.equals(CommChannels.SERVER_CHAT)) return; LocalBungeeMessage lbm = new SpigotBungeeMessage(message); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotServerDataListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotServerDataListener.java index 063abcb0..23e2a43d 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotServerDataListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/communication/LocalSpigotServerDataListener.java @@ -16,7 +16,7 @@ public class LocalSpigotServerDataListener extends LocalServerDataListener imple @Override public void onPluginMessageReceived(String channel, Player player, byte[] message) { - if (!channel.equals(CommChannels.getServerData())) return; + if (!channel.equals(CommChannels.SERVER_DATA)) return; try { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/MultiChatLocalSpongePlugin.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/MultiChatLocalSpongePlugin.java index 4b84e58c..ffbe6d2f 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/MultiChatLocalSpongePlugin.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/MultiChatLocalSpongePlugin.java @@ -233,26 +233,26 @@ private void registerCommunicationChannels(SpongeBungeeCommunicationManager comm ChannelRegistrar channelRegistrar = Sponge.getGame().getChannelRegistrar(); // New channels - ChannelBinding.RawDataChannel playerMetaChannel = channelRegistrar.createRawChannel(this, CommChannels.getPlayerMeta()); - commManager.registerChannel(CommChannels.getPlayerMeta(), playerMetaChannel); + ChannelBinding.RawDataChannel playerMetaChannel = channelRegistrar.createRawChannel(this, CommChannels.PLAYER_META); + commManager.registerChannel(CommChannels.PLAYER_META, playerMetaChannel); - ChannelBinding.RawDataChannel playerChatChannel = channelRegistrar.createRawChannel(this, CommChannels.getPlayerChat()); - commManager.registerChannel(CommChannels.getPlayerChat(), playerChatChannel); + ChannelBinding.RawDataChannel playerChatChannel = channelRegistrar.createRawChannel(this, CommChannels.PLAYER_CHAT); + commManager.registerChannel(CommChannels.PLAYER_CHAT, playerChatChannel); - ChannelBinding.RawDataChannel serverChatChannel = channelRegistrar.createRawChannel(this, CommChannels.getServerChat()); - commManager.registerChannel(CommChannels.getServerChat(), serverChatChannel); + ChannelBinding.RawDataChannel serverChatChannel = channelRegistrar.createRawChannel(this, CommChannels.SERVER_CHAT); + commManager.registerChannel(CommChannels.SERVER_CHAT, serverChatChannel); - ChannelBinding.RawDataChannel serverActionChannel = channelRegistrar.createRawChannel(this, CommChannels.getServerAction()); - commManager.registerChannel(CommChannels.getServerAction(), serverActionChannel); + ChannelBinding.RawDataChannel serverActionChannel = channelRegistrar.createRawChannel(this, CommChannels.SERVER_ACTION); + commManager.registerChannel(CommChannels.SERVER_ACTION, serverActionChannel); - ChannelBinding.RawDataChannel playerActionChannel = channelRegistrar.createRawChannel(this, CommChannels.getPlayerAction()); - commManager.registerChannel(CommChannels.getPlayerAction(), playerActionChannel); + ChannelBinding.RawDataChannel playerActionChannel = channelRegistrar.createRawChannel(this, CommChannels.PLAYER_ACTION); + commManager.registerChannel(CommChannels.PLAYER_ACTION, playerActionChannel); - ChannelBinding.RawDataChannel playerDataChannel = channelRegistrar.createRawChannel(this, CommChannels.getPlayerData()); - commManager.registerChannel(CommChannels.getPlayerData(), playerDataChannel); + ChannelBinding.RawDataChannel playerDataChannel = channelRegistrar.createRawChannel(this, CommChannels.PLAYER_DATA); + commManager.registerChannel(CommChannels.PLAYER_DATA, playerDataChannel); - ChannelBinding.RawDataChannel serverDataChannel = channelRegistrar.createRawChannel(this, CommChannels.getServerData()); - commManager.registerChannel(CommChannels.getServerData(), serverDataChannel); + ChannelBinding.RawDataChannel serverDataChannel = channelRegistrar.createRawChannel(this, CommChannels.SERVER_DATA); + commManager.registerChannel(CommChannels.SERVER_DATA, serverDataChannel); serverChatChannel.addListener(Platform.Type.SERVER, new LocalSpongeServerChatListener()); serverActionChannel.addListener(Platform.Type.SERVER, new LocalSpongeServerActionListener()); @@ -270,26 +270,26 @@ public void onServerStop(GameStoppingServerEvent event) { SpongeBungeeCommunicationManager commManager = (SpongeBungeeCommunicationManager)MultiChatLocal.getInstance().getProxyCommunicationManager(); // New channels - Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel(CommChannels.getPlayerMeta())); - commManager.unregisterChannel(CommChannels.getPlayerMeta()); + Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel(CommChannels.PLAYER_META)); + commManager.unregisterChannel(CommChannels.PLAYER_META); - Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel(CommChannels.getPlayerChat())); - commManager.unregisterChannel(CommChannels.getPlayerChat()); + Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel(CommChannels.PLAYER_CHAT)); + commManager.unregisterChannel(CommChannels.PLAYER_CHAT); - Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel(CommChannels.getServerChat())); - commManager.unregisterChannel(CommChannels.getServerChat()); + Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel(CommChannels.SERVER_CHAT)); + commManager.unregisterChannel(CommChannels.SERVER_CHAT); - Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel(CommChannels.getPlayerAction())); - commManager.unregisterChannel(CommChannels.getPlayerAction()); + Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel(CommChannels.PLAYER_ACTION)); + commManager.unregisterChannel(CommChannels.PLAYER_ACTION); - Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel(CommChannels.getServerAction())); - commManager.unregisterChannel(CommChannels.getServerAction()); + Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel(CommChannels.SERVER_ACTION)); + commManager.unregisterChannel(CommChannels.SERVER_ACTION); - Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel(CommChannels.getPlayerData())); - commManager.unregisterChannel(CommChannels.getPlayerData()); + Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel(CommChannels.PLAYER_DATA)); + commManager.unregisterChannel(CommChannels.PLAYER_DATA); - Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel(CommChannels.getServerData())); - commManager.unregisterChannel(CommChannels.getServerData()); + Sponge.getChannelRegistrar().unbindChannel(commManager.getChannel(CommChannels.SERVER_DATA)); + commManager.unregisterChannel(CommChannels.SERVER_DATA); if (MultiChatLocal.getInstance().getNameManager().getMode() == LocalNameManagerMode.SQL) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyLocalCommunicationManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyLocalCommunicationManager.java index fec13de0..f262a194 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyLocalCommunicationManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyLocalCommunicationManager.java @@ -55,7 +55,7 @@ public static void sendGlobalServerData(ServerInfo server) { e.printStackTrace(); } - server.sendData(CommChannels.getServerData(), stream.toByteArray()); + server.sendData(CommChannels.SERVER_DATA, stream.toByteArray()); DebugManager.log("Completed send on multichat:sdata on the global id"); @@ -96,7 +96,7 @@ public static void sendDisplayNameServerData(ServerInfo server) { e.printStackTrace(); } - server.sendData(CommChannels.getServerData(), stream.toByteArray()); + server.sendData(CommChannels.SERVER_DATA, stream.toByteArray()); DebugManager.log("Completed send to multichat:sdata on the dn id"); @@ -129,7 +129,7 @@ public static void sendIgnoreServerData(ServerInfo server) { e.printStackTrace(); } - server.sendData(CommChannels.getServerData(), stream.toByteArray()); + server.sendData(CommChannels.SERVER_DATA, stream.toByteArray()); DebugManager.log("Completed send to multichat:sdata on the ignore id"); @@ -170,7 +170,7 @@ public static void sendLegacyServerData(ServerInfo server) { e.printStackTrace(); } - server.sendData(CommChannels.getServerData(), stream.toByteArray()); + server.sendData(CommChannels.SERVER_DATA, stream.toByteArray()); DebugManager.log("Completed send to multichat:sdata on the legacy id"); @@ -194,7 +194,7 @@ public static void sendUpdatePlayerMetaRequestMessage(String playerName, ServerI e.printStackTrace(); } - server.sendData(CommChannels.getPlayerMeta(), stream.toByteArray()); + server.sendData(CommChannels.PLAYER_META, stream.toByteArray()); DebugManager.log("Request sent!"); } @@ -213,7 +213,7 @@ public static void sendCommandMessage(String command, ServerInfo server) { e.printStackTrace(); } - server.sendData(CommChannels.getServerAction(), stream.toByteArray()); + server.sendData(CommChannels.SERVER_ACTION, stream.toByteArray()); } @@ -232,7 +232,7 @@ public static void sendPlayerCommandMessage(String command, String playerRegex, e.printStackTrace(); } - server.sendData(CommChannels.getPlayerAction(), stream.toByteArray()); + server.sendData(CommChannels.PLAYER_ACTION, stream.toByteArray()); } @@ -251,7 +251,7 @@ public static void sendPlayerDirectChatMessage(String channel, String player, St e.printStackTrace(); } - server.sendData(CommChannels.getPlayerChat(), stream.toByteArray()); + server.sendData(CommChannels.PLAYER_CHAT, stream.toByteArray()); } @@ -273,7 +273,7 @@ public static void sendServerChatMessage(String channel, String message, ServerI e.printStackTrace(); } - server.sendData(CommChannels.getServerChat(), stream.toByteArray()); + server.sendData(CommChannels.SERVER_CHAT, stream.toByteArray()); } @@ -299,7 +299,7 @@ public static void sendPlayerDataMessage(String playerName, String channel, Chan e.printStackTrace(); } - server.sendData(CommChannels.getPlayerData(), stream.toByteArray()); + server.sendData(CommChannels.PLAYER_DATA, stream.toByteArray()); DebugManager.log("Sent message on multichat:pdata channel!"); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyPlayerActionListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyPlayerActionListener.java index b8818d57..ea11a8aa 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyPlayerActionListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyPlayerActionListener.java @@ -25,7 +25,7 @@ public class ProxyPlayerActionListener implements Listener { public static void onPluginMessage(PluginMessageEvent event) { // Ignore if sent to a different channel - if (!event.getTag().equals(CommChannels.getPlayerAction())) return; + if (!event.getTag().equals(CommChannels.PLAYER_ACTION)) return; event.setCancelled(true); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyPlayerChatListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyPlayerChatListener.java index 36ed0fb8..14a0f746 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyPlayerChatListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyPlayerChatListener.java @@ -29,7 +29,7 @@ public class ProxyPlayerChatListener implements Listener { public static void onPluginMessage(PluginMessageEvent event) { // Ignore if sent to a different channel - if (!event.getTag().equals(CommChannels.getPlayerChat())) return; + if (!event.getTag().equals(CommChannels.PLAYER_CHAT)) return; event.setCancelled(true); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyPlayerMetaListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyPlayerMetaListener.java index d6b5fecb..c3319e83 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyPlayerMetaListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyPlayerMetaListener.java @@ -27,7 +27,7 @@ public class ProxyPlayerMetaListener implements Listener { public static void onPluginMessage(PluginMessageEvent event) { // Ignore if sent to a different channel - if (!event.getTag().equals(CommChannels.getPlayerMeta())) return; + if (!event.getTag().equals(CommChannels.PLAYER_META)) return; event.setCancelled(true); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyServerActionListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyServerActionListener.java index aaaffb9f..9979698a 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyServerActionListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyServerActionListener.java @@ -22,7 +22,7 @@ public class ProxyServerActionListener implements Listener { public static void onPluginMessage(PluginMessageEvent event) { // Ignore if sent to a different channel - if (!event.getTag().equals(CommChannels.getServerAction())) return; + if (!event.getTag().equals(CommChannels.SERVER_ACTION)) return; event.setCancelled(true); From 410cca2b52dae245eece803b43004424571076c3 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Wed, 22 Jul 2020 15:16:42 +0100 Subject: [PATCH 035/188] Created new ProxyBackupManager --- .../multichat/bungee/Announcements.java | 3 +- .../multichat/bungee/Bulletins.java | 3 +- .../olivermartin/multichat/bungee/Events.java | 2 +- .../multichat/bungee/MultiChat.java | 35 +++++--------- .../bungee/commands/MultiChatCommand.java | 4 +- .../proxy/common/MultiChatProxy.java | 19 ++++++++ .../proxy/common/ProxyBackupManager.java | 48 +++++++++++++++++++ 7 files changed, 86 insertions(+), 28 deletions(-) create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyBackupManager.java diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Announcements.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Announcements.java index 94da392e..58ec0f09 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Announcements.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Announcements.java @@ -11,6 +11,7 @@ import net.md_5.bungee.api.scheduler.ScheduledTask; import xyz.olivermartin.multichat.bungee.events.PostBroadcastEvent; import xyz.olivermartin.multichat.common.MultiChatUtil; +import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; /** * Announcements Management @@ -30,7 +31,7 @@ public static boolean startAnnouncement(final String name, Integer minutes) { Integer ID; - ScheduledTask task = ProxyServer.getInstance().getScheduler().schedule(MultiChat.getInstance(), new Runnable() { + ScheduledTask task = ProxyServer.getInstance().getScheduler().schedule(MultiChatProxy.getInstance().getPlugin(), new Runnable() { @Override public void run() { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Bulletins.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Bulletins.java index e48590f4..077bd4cf 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Bulletins.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Bulletins.java @@ -11,6 +11,7 @@ import net.md_5.bungee.api.scheduler.ScheduledTask; import xyz.olivermartin.multichat.bungee.events.PostBroadcastEvent; import xyz.olivermartin.multichat.common.MultiChatUtil; +import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; /** * Bulletins Management @@ -96,7 +97,7 @@ public static void removeBulletin(int index) { } private static void scheduleNextBulletin(final int minutes) { - ScheduledTask task = ProxyServer.getInstance().getScheduler().schedule(MultiChat.getInstance(), new Runnable() { + ScheduledTask task = ProxyServer.getInstance().getScheduler().schedule(MultiChatProxy.getInstance().getPlugin(), new Runnable() { @Override public void run() { 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 83784da9..dc671448 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Events.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Events.java @@ -642,7 +642,7 @@ public void onLogout(PlayerDisconnectEvent event) { @EventHandler(priority = EventPriority.LOWEST) public void onServerSwitch(ServerSwitchEvent event) { // Tell the new server the player's channel preference - ProxyServer.getInstance().getScheduler().schedule(MultiChat.getInstance(), new Runnable() { + ProxyServer.getInstance().getScheduler().schedule(MultiChatProxy.getInstance().getPlugin(), new Runnable() { public void run() { ProxyLocalCommunicationManager.sendPlayerDataMessage(event.getPlayer().getName(), Channel.getChannel(event.getPlayer().getUniqueId()).getName(), Channel.getChannel(event.getPlayer().getUniqueId()), event.getPlayer().getServer().getInfo(), (event.getPlayer().hasPermission("multichat.chat.colour")||event.getPlayer().hasPermission("multichat.chat.color")||event.getPlayer().hasPermission("multichat.chat.colour.simple")||event.getPlayer().hasPermission("multichat.chat.color.simple")), (event.getPlayer().hasPermission("multichat.chat.colour")||event.getPlayer().hasPermission("multichat.chat.color")||event.getPlayer().hasPermission("multichat.chat.colour.rgb")||event.getPlayer().hasPermission("multichat.chat.color.rgb"))); 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 cbc86c71..7736ce1f 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java @@ -17,6 +17,7 @@ import xyz.olivermartin.multichat.common.communication.CommChannels; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.MultiChatProxyPlatform; +import xyz.olivermartin.multichat.proxy.common.ProxyBackupManager; import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; import xyz.olivermartin.multichat.proxy.common.listeners.communication.ProxyPlayerActionListener; @@ -85,7 +86,6 @@ public class MultiChat extends Plugin implements Listener { }; public static String configversion; - private static MultiChat instance; // Config values public static String defaultChannel = ""; @@ -102,26 +102,6 @@ public class MultiChat extends Plugin implements Listener { public static List legacyServers = new ArrayList(); - public static MultiChat getInstance() { - return instance; - } - - public void backup() { - - getProxy().getScheduler().schedule(this, new Runnable() { - - public void run() { - - getLogger().info("Commencing backup!"); - MultiChatProxy.getInstance().getFileStoreManager().save(); - getLogger().info("Backup complete. Any errors reported above."); - - } - - }, 1L, 60L, TimeUnit.MINUTES); - - } - public void fetchDisplayNames() { getProxy().getScheduler().schedule(this, new Runnable() { @@ -247,7 +227,7 @@ public void run() { public void onEnable() { - instance = this; + MultiChatProxy.getInstance().registerPlugin(this); @SuppressWarnings("unused") Metrics metrics = new Metrics(this); @@ -398,7 +378,16 @@ public void onEnable() { } // Initiate backup routine - backup(); + ProxyBackupManager backupManager = new ProxyBackupManager(); + MultiChatProxy.getInstance().registerBackupManager(backupManager); + backupManager.registerBackupTask(new Runnable() { + + public void run() { + MultiChatProxy.getInstance().getFileStoreManager().save(); + } + + }); + backupManager.startBackup(1L, 60L, TimeUnit.MINUTES); // Fetch display names of all players fetchDisplayNames(); 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 f1d5063e..199dc709 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 @@ -83,7 +83,7 @@ public void execute(CommandSender sender, String[] args) { MessageManager.sendMessage(sender, "command_multichat_reload_prepare"); // Unregister commands - MultiChat.getInstance().unregisterCommands(ConfigManager.getInstance().getHandler("config.yml").getConfig(), ConfigManager.getInstance().getHandler("chatcontrol.yml").getConfig()); + ((MultiChat)MultiChatProxy.getInstance().getPlugin()).unregisterCommands(ConfigManager.getInstance().getHandler("config.yml").getConfig(), ConfigManager.getInstance().getHandler("chatcontrol.yml").getConfig()); ConfigManager.getInstance().getHandler("config.yml").startupConfig(); MultiChat.configversion = ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("version"); @@ -101,7 +101,7 @@ public void execute(CommandSender sender, String[] args) { // Reload, and re-register commands CommandManager.reload(); - MultiChat.getInstance().registerCommands(ConfigManager.getInstance().getHandler("config.yml").getConfig(), ConfigManager.getInstance().getHandler("chatcontrol.yml").getConfig()); + ((MultiChat)MultiChatProxy.getInstance().getPlugin()).registerCommands(ConfigManager.getInstance().getHandler("config.yml").getConfig(), ConfigManager.getInstance().getHandler("chatcontrol.yml").getConfig()); ChatControl.reload(); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/MultiChatProxy.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/MultiChatProxy.java index ece753c5..7bde7e95 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/MultiChatProxy.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/MultiChatProxy.java @@ -2,6 +2,7 @@ import java.io.File; +import net.md_5.bungee.api.plugin.Plugin; import xyz.olivermartin.multichat.proxy.common.storage.ProxyFileStoreManager; /** @@ -25,14 +26,24 @@ public static MultiChatProxy getInstance() { /* END STATIC */ private MultiChatProxyPlatform platform; + private Plugin plugin; private File configDirectory; private ProxyDataStore dataStore; private ProxyFileStoreManager fileStoreManager; + private ProxyBackupManager backupManager; /* END ATTRIBUTES */ private MultiChatProxy() { /* EMPTY */ } + public Plugin getPlugin() { + return this.plugin; + } + + public void registerPlugin(Plugin plugin) { + this.plugin = plugin; + } + public MultiChatProxyPlatform getPlatform() { return this.platform; } @@ -65,4 +76,12 @@ public void registerFileStoreManager(ProxyFileStoreManager fileStoreManager) { this.fileStoreManager = fileStoreManager; } + public ProxyBackupManager getBackupManager() { + return this.backupManager; + } + + public void registerBackupManager(ProxyBackupManager backupManager) { + this.backupManager = backupManager; + } + } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyBackupManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyBackupManager.java new file mode 100644 index 00000000..d237de5d --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyBackupManager.java @@ -0,0 +1,48 @@ +package xyz.olivermartin.multichat.proxy.common; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.TimeUnit; + +import net.md_5.bungee.api.ProxyServer; +import net.md_5.bungee.api.scheduler.ScheduledTask; + +public class ProxyBackupManager { + + private List backupTasks; + private ScheduledTask scheduledTask; + + public ProxyBackupManager() { + backupTasks = new ArrayList(); + } + + public void registerBackupTask(Runnable task) { + backupTasks.add(task); + } + + public void startBackup(long delay, long period, TimeUnit unit) { + + scheduledTask = ProxyServer.getInstance().getScheduler().schedule(MultiChatProxy.getInstance().getPlugin(), new Runnable() { + + public void run() { + + MultiChatProxy.getInstance().getPlugin().getLogger().info("Commencing backup!"); + + for (Runnable r : backupTasks) { + r.run(); + } + + MultiChatProxy.getInstance().getPlugin().getLogger().info("Backup complete. Any errors reported above."); + + } + + }, delay, period, unit); + + } + + public void stopBackup() { + if (scheduledTask == null) return; + scheduledTask.cancel(); + } + +} From 49a35b77f7ef531d5de2f02b71d736f71042a2ba Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Wed, 22 Jul 2020 15:40:47 +0100 Subject: [PATCH 036/188] Changed outdated config version message --- .../xyz/olivermartin/multichat/bungee/MultiChat.java | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) 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 7736ce1f..e87b28ef 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java @@ -270,15 +270,9 @@ public void onEnable() { if (Arrays.asList(ALLOWED_VERSIONS).contains(configversion)) { - // TODO - Remove for future versions! if (!configversion.equals(LATEST_VERSION)) { - - getLogger().info("[!!!] [WARNING] YOUR CONFIG FILES ARE NOT THE LATEST VERSION"); - getLogger().info("[!!!] [WARNING] MULTICHAT 1.8 INTRODUCES SEVERAL NEW FEATURES WHICH ARE NOT IN YOUR OLD FILE"); - getLogger().info("[!!!] [WARNING] THE PLUGIN SHOULD WORK WITH THE OLDER FILE, BUT IS NOT SUPPORTED!"); - getLogger().info("[!!!] [WARNING] PLEASE BACKUP YOUR OLD CONFIG FILES AND DELETE THEM FROM THE MULTICHAT FOLDER SO NEW ONES CAN BE GENERATED!"); - getLogger().info("[!!!] [WARNING] THANK YOU"); - + getLogger().warning("YOUR CONFIG FILES ARE NOT THE LATEST VERSION"); + getLogger().warning("SOME FEATURES OF MULTICHAT ARE ONLY PRESENT IN THE LATEST VERSION OF THE CONFIG"); } // Register listeners From 2b78c212f01a8611f997b542e05dc3585dfd051b Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Wed, 22 Jul 2020 15:42:46 +0100 Subject: [PATCH 037/188] Renamed Channel class to LegacyChannel to make way for new Channel --- .../multichat/bungee/CastControl.java | 2 +- .../multichat/bungee/ChatModeManager.java | 12 +++++----- .../olivermartin/multichat/bungee/Events.java | 22 +++++++++---------- .../multichat/bungee/GlobalChannel.java | 2 +- .../{Channel.java => LegacyChannel.java} | 16 +++++++------- .../multichat/bungee/LocalChannel.java | 2 +- .../multichat/bungee/MultiChat.java | 2 +- .../bungee/commands/ChannelCommand.java | 12 +++++----- .../bungee/commands/GlobalCommand.java | 6 ++--- .../bungee/commands/LocalCommand.java | 6 ++--- .../bungee/commands/MultiChatCommand.java | 8 +++---- .../bungee/commands/UseCastCommand.java | 4 ++-- .../ProxyLocalCommunicationManager.java | 6 ++--- .../ProxyPlayerChatListener.java | 6 ++--- 14 files changed, 53 insertions(+), 53 deletions(-) rename multichat/src/main/java/xyz/olivermartin/multichat/bungee/{Channel.java => LegacyChannel.java} (93%) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/CastControl.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/CastControl.java index c0f4f47c..a7e38f70 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/CastControl.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/CastControl.java @@ -17,7 +17,7 @@ public class CastControl { public static Map castList = new HashMap(); - public static void sendCast(String castName, String castMessage, Channel chatStream, CommandSender sender) { + public static void sendCast(String castName, String castMessage, LegacyChannel chatStream, CommandSender sender) { castMessage = ChatControl.applyChatRules(castMessage, "casts", "").get(); chatStream.sendMessage(castList.get(castName.toLowerCase()) + " " + castMessage, sender); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatModeManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatModeManager.java index 986942be..0f5080e2 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatModeManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatModeManager.java @@ -33,19 +33,19 @@ public void setLocal(UUID uuid) { globalPlayers.put(uuid, false); // TODO - Channel.setChannel(uuid, Channel.getLocalChannel()); + LegacyChannel.setChannel(uuid, LegacyChannel.getLocalChannel()); // TODO ProxiedPlayer player = ProxyServer.getInstance().getPlayer(uuid); if (player == null) return; - Channel local = Channel.getLocalChannel(); + LegacyChannel local = LegacyChannel.getLocalChannel(); if (!local.isMember(uuid)) { local.removeMember(uuid); MessageManager.sendSpecialMessage(player, "command_channel_show", "LOCAL"); } - ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), Channel.getChannel(uuid).getName(), Channel.getChannel(uuid), player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); + ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), LegacyChannel.getChannel(uuid).getName(), LegacyChannel.getChannel(uuid), player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); } @@ -54,19 +54,19 @@ public void setGlobal(UUID uuid) { globalPlayers.put(uuid, true); // TODO - Channel.setChannel(uuid, Channel.getGlobalChannel()); + LegacyChannel.setChannel(uuid, LegacyChannel.getGlobalChannel()); // TODO ProxiedPlayer player = ProxyServer.getInstance().getPlayer(uuid); if (player == null) return; - Channel global = Channel.getGlobalChannel(); + LegacyChannel global = LegacyChannel.getGlobalChannel(); if (!global.isMember(uuid)) { global.removeMember(uuid); MessageManager.sendSpecialMessage(player, "command_channel_show", "GLOBAL"); } - ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), Channel.getChannel(uuid).getName(), Channel.getChannel(uuid), player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); + ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), LegacyChannel.getChannel(uuid).getName(), LegacyChannel.getChannel(uuid), player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); } 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 dc671448..d64d6932 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Events.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Events.java @@ -325,7 +325,7 @@ public void onChat(ChatEvent event) { String message = MultiChatUtil.getMessageFromArgs(parts, 1); - CastControl.sendCast(parts[0].substring(1),message,Channel.getChannel(playerSender.getUniqueId()), playerSender); + CastControl.sendCast(parts[0].substring(1),message,LegacyChannel.getChannel(playerSender.getUniqueId()), playerSender); event.setCancelled(true); @@ -335,7 +335,7 @@ public void onChat(ChatEvent event) { String message = MultiChatUtil.getMessageFromArgs(parts, 1); - CastControl.sendCast(parts[0].substring(1), message, Channel.getGlobalChannel(), ProxyServer.getInstance().getConsole()); + CastControl.sendCast(parts[0].substring(1), message, LegacyChannel.getGlobalChannel(), ProxyServer.getInstance().getConsole()); event.setCancelled(true); @@ -397,7 +397,7 @@ public void onChat(ChatEvent event) { DebugManager.log("Does player have rgb colour permission? " + (player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); // Let server know players channel preference - ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), Channel.getChannel(player.getUniqueId()).getName(), Channel.getChannel(player.getUniqueId()), player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); + ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), LegacyChannel.getChannel(player.getUniqueId()).getName(), LegacyChannel.getChannel(player.getUniqueId()), player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); // Message passes through to spigot here @@ -485,9 +485,9 @@ public void onLogin(PostLoginEvent event) { // Set player to appropriate channels if (ChatModeManager.getInstance().isGlobal(uuid)) { - Channel.setChannel(player.getUniqueId(), Channel.getGlobalChannel()); + LegacyChannel.setChannel(player.getUniqueId(), LegacyChannel.getGlobalChannel()); } else { - Channel.setChannel(player.getUniqueId(), Channel.getLocalChannel()); + LegacyChannel.setChannel(player.getUniqueId(), LegacyChannel.getLocalChannel()); } //BungeeComm.sendPlayerChannelMessage(player.getName(), Channel.getChannel(player.getUniqueId()).getName(), Channel.getChannel(player.getUniqueId()), player.getServer().getInfo()); @@ -593,7 +593,7 @@ public void onLogout(PlayerDisconnectEvent event) { ChatControl.spamPardonPlayer(uuid); /// - Channel.removePlayer(player.getUniqueId()); + LegacyChannel.removePlayer(player.getUniqueId()); /// if (ds.getViewedChats().containsKey(uuid)) { @@ -604,12 +604,12 @@ public void onLogout(PlayerDisconnectEvent event) { ConsoleManager.log("Un-Registered player " + player.getName()); - if (!Channel.getGlobalChannel().isMember(player.getUniqueId())) { - Channel.getGlobalChannel().removeMember(uuid); + if (!LegacyChannel.getGlobalChannel().isMember(player.getUniqueId())) { + LegacyChannel.getGlobalChannel().removeMember(uuid); } - if (!Channel.getLocalChannel().isMember(player.getUniqueId())) { - Channel.getLocalChannel().removeMember(uuid); + if (!LegacyChannel.getLocalChannel().isMember(player.getUniqueId())) { + LegacyChannel.getLocalChannel().removeMember(uuid); } if ( ConfigManager.getInstance().getHandler("joinmessages.yml").getConfig().getBoolean("showquit") == true ) { @@ -645,7 +645,7 @@ public void onServerSwitch(ServerSwitchEvent event) { ProxyServer.getInstance().getScheduler().schedule(MultiChatProxy.getInstance().getPlugin(), new Runnable() { public void run() { - ProxyLocalCommunicationManager.sendPlayerDataMessage(event.getPlayer().getName(), Channel.getChannel(event.getPlayer().getUniqueId()).getName(), Channel.getChannel(event.getPlayer().getUniqueId()), event.getPlayer().getServer().getInfo(), (event.getPlayer().hasPermission("multichat.chat.colour")||event.getPlayer().hasPermission("multichat.chat.color")||event.getPlayer().hasPermission("multichat.chat.colour.simple")||event.getPlayer().hasPermission("multichat.chat.color.simple")), (event.getPlayer().hasPermission("multichat.chat.colour")||event.getPlayer().hasPermission("multichat.chat.color")||event.getPlayer().hasPermission("multichat.chat.colour.rgb")||event.getPlayer().hasPermission("multichat.chat.color.rgb"))); + ProxyLocalCommunicationManager.sendPlayerDataMessage(event.getPlayer().getName(), LegacyChannel.getChannel(event.getPlayer().getUniqueId()).getName(), LegacyChannel.getChannel(event.getPlayer().getUniqueId()), event.getPlayer().getServer().getInfo(), (event.getPlayer().hasPermission("multichat.chat.colour")||event.getPlayer().hasPermission("multichat.chat.color")||event.getPlayer().hasPermission("multichat.chat.colour.simple")||event.getPlayer().hasPermission("multichat.chat.color.simple")), (event.getPlayer().hasPermission("multichat.chat.colour")||event.getPlayer().hasPermission("multichat.chat.color")||event.getPlayer().hasPermission("multichat.chat.colour.rgb")||event.getPlayer().hasPermission("multichat.chat.color.rgb"))); ProxyLocalCommunicationManager.sendLegacyServerData(event.getPlayer().getServer().getInfo()); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/GlobalChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/GlobalChannel.java index 5d84f61c..020cfb2a 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/GlobalChannel.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/GlobalChannel.java @@ -1,6 +1,6 @@ package xyz.olivermartin.multichat.bungee; -public class GlobalChannel extends Channel { +public class GlobalChannel extends LegacyChannel { public GlobalChannel(String format) { super("global", format, false, false); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Channel.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/LegacyChannel.java similarity index 93% rename from multichat/src/main/java/xyz/olivermartin/multichat/bungee/Channel.java rename to multichat/src/main/java/xyz/olivermartin/multichat/bungee/LegacyChannel.java index e7db5f27..c542fe45 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Channel.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/LegacyChannel.java @@ -24,7 +24,7 @@ * @author Oliver Martin (Revilo410) * */ -public class Channel { +public class LegacyChannel { private static GlobalChannel global; private static LocalChannel local; @@ -44,18 +44,18 @@ public static LocalChannel getLocalChannel() { return local; } - public static Map playerChannels = new HashMap(); + public static Map playerChannels = new HashMap(); - public static void setChannel (UUID uuid, Channel channel) { - Channel.playerChannels.put(uuid, channel); + public static void setChannel (UUID uuid, LegacyChannel channel) { + LegacyChannel.playerChannels.put(uuid, channel); } - public static Channel getChannel (UUID uuid) { - return Channel.playerChannels.get(uuid); + public static LegacyChannel getChannel (UUID uuid) { + return LegacyChannel.playerChannels.get(uuid); } public static void removePlayer (UUID uuid) { - Channel.playerChannels.remove(uuid); + LegacyChannel.playerChannels.remove(uuid); } /* END STATIC */ @@ -69,7 +69,7 @@ public static void removePlayer (UUID uuid) { protected String name; protected String format; - public Channel(String name, String format, boolean whitelistServers, boolean whitelistMembers) { + public LegacyChannel(String name, String format, boolean whitelistServers, boolean whitelistMembers) { this.name = name; this.whitelistServers = whitelistServers; diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/LocalChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/LocalChannel.java index dc1f093a..f87d55c6 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/LocalChannel.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/LocalChannel.java @@ -4,7 +4,7 @@ import net.md_5.bungee.api.connection.ProxiedPlayer; import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; -public class LocalChannel extends Channel { +public class LocalChannel extends LegacyChannel { public LocalChannel() { super("local", "", false, false); 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 e87b28ef..25be6785 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java @@ -363,7 +363,7 @@ public void onEnable() { forceChannelOnJoin = configYML.getBoolean("force_channel_on_join"); // Set up global chat - GlobalChannel channel = Channel.getGlobalChannel(); + GlobalChannel channel = LegacyChannel.getGlobalChannel(); channel.setFormat(configYML.getString("globalformat")); // Add all appropriate servers to this hardcoded global chat stream diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ChannelCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ChannelCommand.java index 38ddb6a7..6f25fb56 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ChannelCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ChannelCommand.java @@ -4,7 +4,7 @@ import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.plugin.Command; -import xyz.olivermartin.multichat.bungee.Channel; +import xyz.olivermartin.multichat.bungee.LegacyChannel; import xyz.olivermartin.multichat.bungee.ChatModeManager; import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.MessageManager; @@ -77,7 +77,7 @@ public void execute(CommandSender sender, String[] args) { return; } - Channel local = Channel.getLocalChannel(); + LegacyChannel local = LegacyChannel.getLocalChannel(); if (local.isMember(((ProxiedPlayer)sender).getUniqueId())) { local.addMember(((ProxiedPlayer)sender).getUniqueId()); MessageManager.sendSpecialMessage(sender, "command_channel_hide", operand.toUpperCase()); @@ -92,7 +92,7 @@ public void execute(CommandSender sender, String[] args) { return; } - Channel global = Channel.getGlobalChannel(); + LegacyChannel global = LegacyChannel.getGlobalChannel(); if (global.isMember(((ProxiedPlayer)sender).getUniqueId())) { global.addMember(((ProxiedPlayer)sender).getUniqueId()); MessageManager.sendSpecialMessage(sender, "command_channel_hide", operand.toUpperCase()); @@ -112,7 +112,7 @@ public void execute(CommandSender sender, String[] args) { } if (operand.equals("local")) { - Channel local = Channel.getLocalChannel(); + LegacyChannel local = LegacyChannel.getLocalChannel(); if (!local.isMember(((ProxiedPlayer)sender).getUniqueId())) { local.removeMember(((ProxiedPlayer)sender).getUniqueId()); MessageManager.sendSpecialMessage(sender, "command_channel_show", operand.toUpperCase()); @@ -122,7 +122,7 @@ public void execute(CommandSender sender, String[] args) { } else if (operand.equals("global")) { - Channel global = Channel.getGlobalChannel(); + LegacyChannel global = LegacyChannel.getGlobalChannel(); if (!global.isMember(((ProxiedPlayer)sender).getUniqueId())) { global.removeMember(((ProxiedPlayer)sender).getUniqueId()); MessageManager.sendSpecialMessage(sender, "command_channel_show", operand.toUpperCase()); @@ -142,7 +142,7 @@ public void execute(CommandSender sender, String[] args) { // Update local channel info for (ProxiedPlayer p : ProxyServer.getInstance().getPlayers()) { - ProxyLocalCommunicationManager.sendPlayerDataMessage(p.getName(), Channel.getChannel(p.getUniqueId()).getName(), Channel.getChannel(p.getUniqueId()), p.getServer().getInfo(), (p.hasPermission("multichat.chat.colour")||p.hasPermission("multichat.chat.color")||p.hasPermission("multichat.chat.colour.simple")||p.hasPermission("multichat.chat.color.simple")), (p.hasPermission("multichat.chat.colour")||p.hasPermission("multichat.chat.color")||p.hasPermission("multichat.chat.colour.rgb")||p.hasPermission("multichat.chat.color.rgb"))); + ProxyLocalCommunicationManager.sendPlayerDataMessage(p.getName(), LegacyChannel.getChannel(p.getUniqueId()).getName(), LegacyChannel.getChannel(p.getUniqueId()), p.getServer().getInfo(), (p.hasPermission("multichat.chat.colour")||p.hasPermission("multichat.chat.color")||p.hasPermission("multichat.chat.colour.simple")||p.hasPermission("multichat.chat.color.simple")), (p.hasPermission("multichat.chat.colour")||p.hasPermission("multichat.chat.color")||p.hasPermission("multichat.chat.colour.rgb")||p.hasPermission("multichat.chat.color.rgb"))); } } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java index 6eff45b3..2037689e 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java @@ -5,7 +5,7 @@ import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.plugin.Command; -import xyz.olivermartin.multichat.bungee.Channel; +import xyz.olivermartin.multichat.bungee.LegacyChannel; import xyz.olivermartin.multichat.bungee.ChatControl; import xyz.olivermartin.multichat.bungee.ChatModeManager; import xyz.olivermartin.multichat.bungee.ConfigManager; @@ -82,14 +82,14 @@ public void execute(CommandSender sender, String[] args) { } // If they had this channel hidden, then unhide it... - Channel global = Channel.getGlobalChannel(); + LegacyChannel global = LegacyChannel.getGlobalChannel(); if (!global.isMember(player.getUniqueId())) { global.removeMember(player.getUniqueId()); MessageManager.sendSpecialMessage(player, "command_channel_show", "GLOBAL"); } // Let server know players channel preference - ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), Channel.getChannel(player.getUniqueId()).getName(), Channel.getChannel(player.getUniqueId()), player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); + ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), LegacyChannel.getChannel(player.getUniqueId()).getName(), LegacyChannel.getChannel(player.getUniqueId()), player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); // Message passes through to spigot here diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java index ceeba62a..90d45026 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java @@ -5,7 +5,7 @@ import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.plugin.Command; -import xyz.olivermartin.multichat.bungee.Channel; +import xyz.olivermartin.multichat.bungee.LegacyChannel; import xyz.olivermartin.multichat.bungee.ChatControl; import xyz.olivermartin.multichat.bungee.ChatModeManager; import xyz.olivermartin.multichat.bungee.ConfigManager; @@ -78,14 +78,14 @@ public void execute(CommandSender sender, String[] args) { } // If they had this channel hidden, then unhide it... - Channel local = Channel.getLocalChannel(); + LegacyChannel local = LegacyChannel.getLocalChannel(); if (!local.isMember(player.getUniqueId())) { local.removeMember(player.getUniqueId()); MessageManager.sendSpecialMessage(player, "command_channel_show", "LOCAL"); } // Let server know players channel preference - ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), Channel.getChannel(player.getUniqueId()).getName(), Channel.getChannel(player.getUniqueId()), player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); + ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), LegacyChannel.getChannel(player.getUniqueId()).getName(), LegacyChannel.getChannel(player.getUniqueId()), player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); // Message passes through to spigot here // Send message directly to local chat... 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 199dc709..63ec3caa 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 @@ -5,7 +5,7 @@ import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.chat.ComponentBuilder; import net.md_5.bungee.api.plugin.Command; -import xyz.olivermartin.multichat.bungee.Channel; +import xyz.olivermartin.multichat.bungee.LegacyChannel; import xyz.olivermartin.multichat.bungee.ChatControl; import xyz.olivermartin.multichat.bungee.CommandManager; import xyz.olivermartin.multichat.bungee.ConfigManager; @@ -131,11 +131,11 @@ public void execute(CommandSender sender, String[] args) { MultiChat.defaultChannel = ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("default_channel"); MultiChat.forceChannelOnJoin = ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean("force_channel_on_join"); - Channel.getGlobalChannel().setFormat(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("globalformat")); - Channel.getGlobalChannel().clearServers(); + LegacyChannel.getGlobalChannel().setFormat(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("globalformat")); + LegacyChannel.getGlobalChannel().clearServers(); for (String server : ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList("no_global")) { - Channel.getGlobalChannel().addServer(server); + LegacyChannel.getGlobalChannel().addServer(server); } if (ProxyServer.getInstance().getPluginManager().getPlugin("PremiumVanish") != null) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/UseCastCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/UseCastCommand.java index b2b4da85..d246ba6a 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/UseCastCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/UseCastCommand.java @@ -5,7 +5,7 @@ import net.md_5.bungee.api.chat.ComponentBuilder; import net.md_5.bungee.api.plugin.Command; import xyz.olivermartin.multichat.bungee.CastControl; -import xyz.olivermartin.multichat.bungee.Channel; +import xyz.olivermartin.multichat.bungee.LegacyChannel; import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.common.MultiChatUtil; @@ -40,7 +40,7 @@ public void execute(CommandSender sender, String[] args) { String message = MultiChatUtil.getMessageFromArgs(args, 1); - CastControl.sendCast(args[0], message, Channel.getGlobalChannel(), sender); + CastControl.sendCast(args[0], message, LegacyChannel.getGlobalChannel(), sender); } else { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyLocalCommunicationManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyLocalCommunicationManager.java index f262a194..f9bfb343 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyLocalCommunicationManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyLocalCommunicationManager.java @@ -7,7 +7,7 @@ import net.md_5.bungee.api.config.ServerInfo; import net.md_5.bungee.config.Configuration; -import xyz.olivermartin.multichat.bungee.Channel; +import xyz.olivermartin.multichat.bungee.LegacyChannel; import xyz.olivermartin.multichat.bungee.ChatControl; import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.DebugManager; @@ -44,7 +44,7 @@ public static void sendGlobalServerData(ServerInfo server) { boolean globalChatServer = ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean("global") == true && !ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList("no_global").contains(server.getName()); - String globalChatFormat = Channel.getGlobalChannel().getFormat(); + String globalChatFormat = LegacyChannel.getGlobalChannel().getFormat(); out.writeUTF("global"); out.writeBoolean(globalChatServer); @@ -277,7 +277,7 @@ public static void sendServerChatMessage(String channel, String message, ServerI } - public static void sendPlayerDataMessage(String playerName, String channel, Channel channelObject, ServerInfo server, boolean colour, boolean rgb) { + public static void sendPlayerDataMessage(String playerName, String channel, LegacyChannel channelObject, ServerInfo server, boolean colour, boolean rgb) { sendIgnoreServerData(server); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyPlayerChatListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyPlayerChatListener.java index 14a0f746..4e464c8c 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyPlayerChatListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyPlayerChatListener.java @@ -11,7 +11,7 @@ import net.md_5.bungee.api.event.PluginMessageEvent; import net.md_5.bungee.api.plugin.Listener; import net.md_5.bungee.event.EventHandler; -import xyz.olivermartin.multichat.bungee.Channel; +import xyz.olivermartin.multichat.bungee.LegacyChannel; import xyz.olivermartin.multichat.bungee.DebugManager; import xyz.olivermartin.multichat.bungee.PlayerMeta; import xyz.olivermartin.multichat.bungee.PlayerMetaManager; @@ -83,8 +83,8 @@ public static void onPluginMessage(PluginMessageEvent event) { switch (channel) { case "global": - DebugManager.log("{multichat:pchat} Global Channel Available? = " + (Channel.getGlobalChannel() != null)); - Channel.getGlobalChannel().sendMessage(player, message, format); + DebugManager.log("{multichat:pchat} Global Channel Available? = " + (LegacyChannel.getGlobalChannel() != null)); + LegacyChannel.getGlobalChannel().sendMessage(player, message, format); break; case "local": From ab131bbe1f265c571bcb52261bcf6398917fa36e Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Wed, 22 Jul 2020 21:01:10 +0100 Subject: [PATCH 038/188] First batch of new channel and context implementation --- .../olivermartin/multichat/bungee/Events.java | 10 +- .../multichat/bungee/MultiChat.java | 20 ++- .../bungee/commands/MultiChatCommand.java | 31 +++- .../proxy/common/MultiChatProxy.java | 20 +++ .../proxy/common/channels/Channel.java | 7 + .../proxy/common/channels/ChannelFactory.java | 11 ++ .../proxy/common/channels/ChannelManager.java | 7 + .../proxy/common/channels/Context.java | 127 +++++++++++++++ .../proxy/common/channels/ContextManager.java | 27 ++++ .../proxy/common/channels/GlobalContext.java | 11 ++ .../proxy/common/channels/NetworkChannel.java | 151 ++++++++++++++++++ .../common/channels/StaticNetworkChannel.java | 97 +++++++++++ 12 files changed, 506 insertions(+), 13 deletions(-) create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/Channel.java create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelFactory.java create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelManager.java create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/Context.java create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ContextManager.java create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/GlobalContext.java create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/NetworkChannel.java create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/StaticNetworkChannel.java 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 d64d6932..355b7a48 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Events.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Events.java @@ -457,10 +457,14 @@ public void onLogin(PostLoginEvent event) { } + String defaultChannel = MultiChatProxy.getInstance().getContextManager().getGlobalContext().getDefaultChannel(); + boolean forceChannel = MultiChatProxy.getInstance().getContextManager().getGlobalContext().isForceChannel(); + if (!ChatModeManager.getInstance().existsPlayer(uuid)) { boolean globalMode; - if (!MultiChat.defaultChannel.equalsIgnoreCase("local")) { + + if (!defaultChannel.equalsIgnoreCase("local")) { globalMode = true; } else { globalMode = false; @@ -471,10 +475,10 @@ public void onLogin(PostLoginEvent event) { } - if (MultiChat.forceChannelOnJoin) { + if (forceChannel) { boolean globalMode; - if (!MultiChat.defaultChannel.equalsIgnoreCase("local")) { + if (!defaultChannel.equalsIgnoreCase("local")) { globalMode = true; } else { globalMode = false; 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 25be6785..169f4c42 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java @@ -20,6 +20,8 @@ import xyz.olivermartin.multichat.proxy.common.ProxyBackupManager; import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; +import xyz.olivermartin.multichat.proxy.common.channels.ContextManager; +import xyz.olivermartin.multichat.proxy.common.channels.GlobalContext; import xyz.olivermartin.multichat.proxy.common.listeners.communication.ProxyPlayerActionListener; import xyz.olivermartin.multichat.proxy.common.listeners.communication.ProxyPlayerChatListener; import xyz.olivermartin.multichat.proxy.common.listeners.communication.ProxyPlayerMetaListener; @@ -88,8 +90,6 @@ public class MultiChat extends Plugin implements Listener { public static String configversion; // Config values - public static String defaultChannel = ""; - public static boolean forceChannelOnJoin = false; public static boolean logPMs = true; public static boolean logStaffChat = true; @@ -359,18 +359,30 @@ public void onEnable() { } // Set default channel - defaultChannel = configYML.getString("default_channel"); - forceChannelOnJoin = configYML.getBoolean("force_channel_on_join"); + String defaultChannel = configYML.getString("default_channel"); + boolean forceChannelOnJoin = configYML.getBoolean("force_channel_on_join"); // Set up global chat GlobalChannel channel = LegacyChannel.getGlobalChannel(); channel.setFormat(configYML.getString("globalformat")); + List noGlobalServers = new ArrayList(); + // Add all appropriate servers to this hardcoded global chat stream for (String server : configYML.getStringList("no_global")) { channel.addServer(server); + noGlobalServers.add(server); } + /// + + // New context manager + GlobalContext globalContext = new GlobalContext(defaultChannel, forceChannelOnJoin, true, noGlobalServers); + ContextManager contextManager = new ContextManager(globalContext); + MultiChatProxy.getInstance().registerContextManager(contextManager); + + /// + // Initiate backup routine ProxyBackupManager backupManager = new ProxyBackupManager(); MultiChatProxy.getInstance().registerBackupManager(backupManager); 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 63ec3caa..ba167965 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 @@ -1,18 +1,23 @@ package xyz.olivermartin.multichat.bungee.commands; +import java.util.ArrayList; +import java.util.List; + import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.chat.ComponentBuilder; import net.md_5.bungee.api.plugin.Command; -import xyz.olivermartin.multichat.bungee.LegacyChannel; import xyz.olivermartin.multichat.bungee.ChatControl; import xyz.olivermartin.multichat.bungee.CommandManager; import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.DebugManager; +import xyz.olivermartin.multichat.bungee.GlobalChannel; +import xyz.olivermartin.multichat.bungee.LegacyChannel; import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.bungee.MultiChat; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.channels.GlobalContext; /** * MultiChat (Admin) Command @@ -128,16 +133,30 @@ public void execute(CommandSender sender, String[] args) { } // Set default channel - MultiChat.defaultChannel = ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("default_channel"); - MultiChat.forceChannelOnJoin = ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean("force_channel_on_join"); + String defaultChannel = ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("default_channel"); + boolean forceChannelOnJoin = ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean("force_channel_on_join"); + + // Set up global chat + GlobalChannel channel = LegacyChannel.getGlobalChannel(); + channel.setFormat(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("globalformat")); - LegacyChannel.getGlobalChannel().setFormat(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("globalformat")); - LegacyChannel.getGlobalChannel().clearServers(); + List noGlobalServers = new ArrayList(); + channel.clearServers(); + // Add all appropriate servers to this hardcoded global chat stream for (String server : ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList("no_global")) { - LegacyChannel.getGlobalChannel().addServer(server); + channel.addServer(server); + noGlobalServers.add(server); } + /// + + // New context manager + GlobalContext globalContext = new GlobalContext(defaultChannel, forceChannelOnJoin, true, noGlobalServers); + MultiChatProxy.getInstance().getContextManager().setGlobalContext(globalContext); + + /// + if (ProxyServer.getInstance().getPluginManager().getPlugin("PremiumVanish") != null) { MultiChat.premiumVanish = true; diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/MultiChatProxy.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/MultiChatProxy.java index 7bde7e95..548e2fe5 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/MultiChatProxy.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/MultiChatProxy.java @@ -3,6 +3,8 @@ import java.io.File; import net.md_5.bungee.api.plugin.Plugin; +import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; +import xyz.olivermartin.multichat.proxy.common.channels.ContextManager; import xyz.olivermartin.multichat.proxy.common.storage.ProxyFileStoreManager; /** @@ -31,6 +33,8 @@ public static MultiChatProxy getInstance() { private ProxyDataStore dataStore; private ProxyFileStoreManager fileStoreManager; private ProxyBackupManager backupManager; + private ContextManager contextManager; + private ChannelManager channelManager; /* END ATTRIBUTES */ @@ -84,4 +88,20 @@ public void registerBackupManager(ProxyBackupManager backupManager) { this.backupManager = backupManager; } + public ContextManager getContextManager() { + return this.contextManager; + } + + public void registerContextManager(ContextManager contextManager) { + this.contextManager = contextManager; + } + + public ChannelManager getChannelManager() { + return this.channelManager; + } + + public void registerChannelManager(ChannelManager channelManager) { + this.channelManager = channelManager; + } + } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/Channel.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/Channel.java new file mode 100644 index 00000000..fb352c44 --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/Channel.java @@ -0,0 +1,7 @@ +package xyz.olivermartin.multichat.proxy.common.channels; + +public interface Channel { + + + +} diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelFactory.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelFactory.java new file mode 100644 index 00000000..118f34ee --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelFactory.java @@ -0,0 +1,11 @@ +package xyz.olivermartin.multichat.proxy.common.channels; + +public class ChannelFactory { + + public ChannelFactory() { + + + + } + +} diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelManager.java new file mode 100644 index 00000000..09acbdd4 --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelManager.java @@ -0,0 +1,7 @@ +package xyz.olivermartin.multichat.proxy.common.channels; + +public class ChannelManager { + + + +} diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/Context.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/Context.java new file mode 100644 index 00000000..0b49fbe3 --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/Context.java @@ -0,0 +1,127 @@ +package xyz.olivermartin.multichat.proxy.common.channels; + +import java.util.ArrayList; +import java.util.List; + +import net.md_5.bungee.api.CommandSender; +import net.md_5.bungee.api.connection.ProxiedPlayer; + +public class Context { + + private String id; + private int priority; + private String defaultChannel; + private boolean forceChannel; + private boolean blacklistServers; + private List servers; + + public Context(String id, int priority, String defaultChannel, boolean forceChannel, boolean blacklistServers, List servers) { + this.id = id; + this.priority = priority; + this.defaultChannel = defaultChannel; + this.forceChannel = forceChannel; + this.blacklistServers = blacklistServers; + this.servers = servers; + } + + public Context(String id, int priority, String defaultChannel, boolean forceChannel) { + this.id = id; + this.priority = priority; + this.defaultChannel = defaultChannel; + this.forceChannel = forceChannel; + this.blacklistServers = true; + this.servers = new ArrayList(); + } + + public Context(String id, int priority, String defaultChannel) { + this.id = id; + this.priority = priority; + this.defaultChannel = defaultChannel; + this.forceChannel = false; + this.blacklistServers = true; + this.servers = new ArrayList(); + } + + public Context(String id, int priority) { + this.id = id; + this.priority = priority; + this.defaultChannel = "global"; + this.forceChannel = false; + this.blacklistServers = true; + this.servers = new ArrayList(); + } + + /** + * Get the ID of this context + * @return the id + */ + public String getId() { + return this.id; + } + + /** + * Get the priority of this context + * @return the priority + */ + public int getPriority() { + return this.priority; + } + + /** + * Get the default channel of this context + * @return the default channel + */ + public String getDefaultChannel() { + return this.defaultChannel; + } + + /** + * Are players forced into the default channel every time they enter the context? + * @return true if they are forced into the default channel + */ + public boolean isForceChannel() { + return this.forceChannel; + } + + /** + * Is the server list a blacklist (rather than a whitelist) + * @return true if the server list is a blacklist + */ + public boolean isBlacklistServers() { + return this.blacklistServers; + } + + /** + *

Gets the blacklist/whitelist of servers for this context.

+ *

List is a blacklist if isBlacklistServers() returns true, otherwise is a whitelist

+ * @return the blacklist/whitelist of servers + */ + public List getServerList() { + return this.servers; + } + + /** + *

Checks if a command sender is contained by this context (on one of the allowed servers)

+ *

Note: If the sender is not a player then it is assumed they are always in the context

+ * @param sender The sender to check + * @return true if the sender is within the context + */ + public boolean contains(CommandSender sender) { + + if (!(sender instanceof ProxiedPlayer)) return true; + + ProxiedPlayer player = (ProxiedPlayer) sender; + + if (player.getServer() == null) return false; + + String server = player.getServer().getInfo().getName(); + + if (blacklistServers) { + return !servers.contains(server); + } else { + return servers.contains(server); + } + + } + +} diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ContextManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ContextManager.java new file mode 100644 index 00000000..ea6b6b81 --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ContextManager.java @@ -0,0 +1,27 @@ +package xyz.olivermartin.multichat.proxy.common.channels; + +import java.util.HashMap; +import java.util.Map; + +public class ContextManager { + + private Map contexts; + private GlobalContext global; + + public ContextManager(GlobalContext global) { + contexts = new HashMap(); + this.global = global; + contexts.put("global", global); + } + + public Context getGlobalContext() { + return this.global; + } + + public void setGlobalContext(GlobalContext global) { + this.global = global; + contexts.remove("global"); + contexts.put("global", global); + } + +} diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/GlobalContext.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/GlobalContext.java new file mode 100644 index 00000000..26b4f95b --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/GlobalContext.java @@ -0,0 +1,11 @@ +package xyz.olivermartin.multichat.proxy.common.channels; + +import java.util.List; + +public class GlobalContext extends Context { + + public GlobalContext(String defaultChannel, boolean forceChannel, boolean blacklistServers, List servers) { + super("global", 0, defaultChannel, forceChannel, blacklistServers, servers); + } + +} diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/NetworkChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/NetworkChannel.java new file mode 100644 index 00000000..cbe49ae3 --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/NetworkChannel.java @@ -0,0 +1,151 @@ +package xyz.olivermartin.multichat.proxy.common.channels; + +import java.util.List; +import java.util.Optional; +import java.util.Set; +import java.util.UUID; + +import net.md_5.bungee.api.CommandSender; + +public abstract class NetworkChannel { + + private String id; // The channel ID + private String desc; // A short description of the channel + private String format; // The format of this channel + private boolean unhideable; // If the channel is unhideable + private Context context; // The context for this channel + private List aliases; // The command aliases for this channel + + private String permission; // Permission to view / speak + private String viewPermission; // Permission to view only + + private boolean blacklistMembers; // Should member list of the channel be a blacklist or whitelist + private Set members; // Member list of the channel + + public NetworkChannel(String id, String desc, String format, boolean unhideable, Context context, List aliases, String permission, String viewPermission, boolean blacklistMembers, Set members) { + + this.id = id; + this.desc = desc; + this.format = format; + this.unhideable = unhideable; + this.context = context; + this.aliases = aliases; + + this.permission = null; + this.viewPermission = null; + + this.blacklistMembers = blacklistMembers; + this.members = members; + + } + + /** + * Gets the ID of this channel + * @return the id + */ + public String getId() { + return this.id; + } + + /** + * Gets a short description of this channel + * @return the description + */ + public String getDescription() { + return this.desc; + } + + /** + * Gets the format used for chat in this channel + * @return the format + */ + public String getFormat() { + return this.format; + } + + /** + * Checks if this channel is not allowed to be hidden + * @return true if the channel can not be hidden + */ + public boolean isUnhideable() { + return this.unhideable; + } + + /** + * Gets the context of this channel + * @return the context + */ + public Context getContext() { + return this.context; + } + + /** + * Gets the command aliases of this channel + * @return the command aliases + */ + public List getAliases() { + return this.aliases; + } + + /** + * Checks if this channel requires a permission to view / speak + * @return true if the channel requires a permission + */ + public boolean isPermissionProtected() { + return this.permission == null; + } + + /** + * Gets the permission required to view / speak in the channel (if one exists) + * @return an optional of the permission + */ + public Optional getPermission() { + return Optional.ofNullable(permission); + } + + /** + * Gets the permission required to ONLY view the channel (if one exists) + * @return an optional of the permission + */ + public Optional getViewPermission() { + return Optional.ofNullable(viewPermission); + } + + /** + * Checks if this command sender is allowed to speak in the channel + * @param sender The command sender + * @return true if they are allowed to speak + */ + public boolean canSpeak(CommandSender sender) { + if (!isPermissionProtected()) return true; + return sender.hasPermission(permission); + } + + /** + * Checks if this command sender is allowed to view the channel + * @param sender The command sender + * @return true if they are allowed to view + */ + public boolean canView(CommandSender sender) { + if (!isPermissionProtected()) return true; + return sender.hasPermission(permission) || sender.hasPermission(viewPermission); + } + + /** + * Is the member list for this channel a blacklist or a whitelist? + * @return true if it is a blacklist + */ + public boolean isBlacklistMembers() { + return this.blacklistMembers; + } + + /** + *

Gets the blacklist/whitelist of members for this channel.

+ *

List is a blacklist if isBlacklistMembers() returns true, otherwise is a whitelist

+ * @return the blacklist/whitelist of members + */ + public Set getMembers() { + return this.members; + } + +} diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/StaticNetworkChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/StaticNetworkChannel.java new file mode 100644 index 00000000..450332b1 --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/StaticNetworkChannel.java @@ -0,0 +1,97 @@ +package xyz.olivermartin.multichat.proxy.common.channels; + +import java.util.HashSet; +import java.util.List; +import java.util.UUID; + +public class StaticNetworkChannel extends NetworkChannel { + + /*public static class Builder { + + private String id; // The channel ID + private String desc; // A short description of the channel + private String format; // The format of this channel + private boolean unhideable; // If the channel is unhideable + private Context context; // The context for this channel + private List aliases; // The command aliases for this channel + + private String permission; // Permission to view / speak + private String viewPermission; // Permission to view only + + private boolean blacklistMembers; // Should member list of the channel be a blacklist or whitelist + private Set members; // Member list of the channel + + public Builder(String id) { + + this.id = id; + this.desc = id; + this.format = "[" + id + "] %DISPLAYNAME%&f: "; + this.unhideable = false; + this.context = MultiChatProxy.getInstance().getContextManager().getGlobalContext(); + this.aliases = new ArrayList(); + + this.permission = null; + this.viewPermission = null; + + this.blacklistMembers = true; + this.members = new HashSet(); + + } + + public Builder withDescription(String desc) { + this.desc = desc; + return this; + } + + public Builder withFormat(String format) { + this.format = format; + return this; + } + + public Builder isUnhideable(boolean unhideable) { + this.unhideable = unhideable; + return this; + } + + public Builder inContext(Context context) { + this.context = context; + return this; + } + + public Builder withAliases(List aliases) { + this.aliases = aliases; + return this; + } + + public Builder withPemission(String permission) { + this.permission = permission; + return this; + } + + public Builder withViewPemission(String viewPermission) { + this.viewPermission = viewPermission; + return this; + } + + public Builder isBlacklistMembers(boolean blacklistMembers) { + this.blacklistMembers = blacklistMembers; + return this; + } + + public Builder withMemberList(Set members) { + this.members = members; + return this; + } + + public StaticNetworkChannel build() { + return new StaticNetworkChannel(id, desc, format, unhideable, context, aliases, permission, viewPermission); + } + + }*/ + + public StaticNetworkChannel(String id, String desc, String format, boolean unhideable, Context context, List aliases, String permission, String viewPermission) { + // Create NetworkChannel with a "blacklist of members" that will always be empty (as this is a static channel) + super(id, desc, format, unhideable, context, aliases, permission, viewPermission, true, new HashSet()); + } + +} From 8ff2cb0871d573fe522574e64201d0345439335d Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Wed, 22 Jul 2020 23:56:20 +0100 Subject: [PATCH 039/188] Much of the framework for new chat channels is now in place --- .../proxy/common/channels/Channel.java | 2 +- .../proxy/common/channels/ChannelFactory.java | 2 +- .../proxy/common/channels/ChannelInfo.java | 124 ++++++++++++ .../proxy/common/channels/ChannelManager.java | 50 ++++- .../channels/DynamicNetworkChannel.java | 75 +++++++ .../proxy/common/channels/GlobalChannel.java | 13 ++ .../proxy/common/channels/NetworkChannel.java | 189 ++++++++---------- .../common/channels/StaticNetworkChannel.java | 19 +- 8 files changed, 363 insertions(+), 111 deletions(-) create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelInfo.java create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/DynamicNetworkChannel.java create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/GlobalChannel.java diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/Channel.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/Channel.java index fb352c44..9d86ebea 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/Channel.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/Channel.java @@ -2,6 +2,6 @@ public interface Channel { - + /* Not yet implemented */ } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelFactory.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelFactory.java index 118f34ee..299be675 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelFactory.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelFactory.java @@ -4,7 +4,7 @@ public class ChannelFactory { public ChannelFactory() { - + /* Not yet implemented */ } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelInfo.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelInfo.java new file mode 100644 index 00000000..9514fea9 --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelInfo.java @@ -0,0 +1,124 @@ +package xyz.olivermartin.multichat.proxy.common.channels; + +import java.util.List; +import java.util.Optional; + +import net.md_5.bungee.api.CommandSender; + +public class ChannelInfo { + + private String desc; // A short description of the channel + private String format; // The format of this channel + private boolean unhideable; // If the channel is unhideable + private Context context; // The context for this channel + private List aliases; // The command aliases for this channel + + private String permission; // Permission to view / speak + private String viewPermission; // Permission to view only + + public ChannelInfo(String desc, String format, boolean unhideable, Context context, List aliases) { + + this.desc = desc; + this.format = format; + this.unhideable = unhideable; + this.context = context; + this.aliases = aliases; + + this.permission = null; + this.viewPermission = null; + + } + + /** + * Gets a short description of this channel + * @return the description + */ + public String getDescription() { + return this.desc; + } + + /** + * Gets the format used for chat in this channel + * @return the format + */ + public String getFormat() { + return this.format; + } + + /** + * Checks if this channel is not allowed to be hidden + * @return true if the channel can not be hidden + */ + public boolean isUnhideable() { + return this.unhideable; + } + + /** + * Gets the context of this channel + * @return the context + */ + public Context getContext() { + return this.context; + } + + /** + * Gets the command aliases of this channel + * @return the command aliases + */ + public List getAliases() { + return this.aliases; + } + + /* + * Are any permissions set for this channel? + */ + private boolean isPermissionProtected() { + return this.permission != null; + } + + /** + * Gets the permission required to view / speak in the channel (if one exists) + * @return an optional of the permission + */ + public Optional getPermission() { + return Optional.ofNullable(permission); + } + + /** + * Gets the permission required to ONLY view the channel (if one exists) + * @return an optional of the permission + */ + public Optional getViewPermission() { + return Optional.ofNullable(viewPermission); + } + + /** + * Checks if the command sender has permission to view this channel + * @param sender The command sender to check + * @return true if they have permission to view the channel + */ + public boolean hasViewPermission(CommandSender sender) { + if (!isPermissionProtected()) return true; + return sender.hasPermission(permission) || sender.hasPermission(viewPermission); + } + + /** + * Checks if the command sender has permission to speak in channel + * @param sender The command sender to check + * @return true if they have permission to speak into the channel + */ + public boolean hasSpeakPermission(CommandSender sender) { + if (!isPermissionProtected()) return true; + return sender.hasPermission(permission); + } + + /** + * Checks if the command sender is in the context of the channel + * @param sender The command sender to check + * @return true if they are in the context + */ + public boolean inContext(CommandSender sender) { + return context.contains(sender); + } + +} diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelManager.java index 09acbdd4..bb824252 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelManager.java @@ -1,7 +1,53 @@ package xyz.olivermartin.multichat.proxy.common.channels; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +import java.util.UUID; + public class ChannelManager { - - + private NetworkChannel global; + //private Something local; + + private Map channels; + private Map> hiddenChannels; + + public ChannelManager() { + channels = new HashMap(); + hiddenChannels = new HashMap>(); + } + + public NetworkChannel getGlobalChannel() { + return this.global; + } + + /*public Something getLocalChannel() { + return this.local; + }*/ + + public void setGlobalChannel(GlobalChannel global) { + this.global = global; + channels.remove("global"); + channels.put("global", global); + } + + public void hide(UUID uuid, String channelId) { + Set hidden = hiddenChannels.getOrDefault(uuid, new HashSet()); + hidden.add(channelId); + } + + public void show(UUID uuid, String channelId) { + Set hidden = hiddenChannels.getOrDefault(uuid, new HashSet()); + hidden.remove(channelId); + if (hidden.size() == 0) hiddenChannels.remove(uuid); + } + + public boolean isHidden(UUID uuid, String channelId) { + if (!hiddenChannels.containsKey(uuid)) return false; + Set hidden = hiddenChannels.get(uuid); + return hidden.contains(channelId); + } + } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/DynamicNetworkChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/DynamicNetworkChannel.java new file mode 100644 index 00000000..593308c5 --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/DynamicNetworkChannel.java @@ -0,0 +1,75 @@ +package xyz.olivermartin.multichat.proxy.common.channels; + +import java.util.Set; +import java.util.UUID; + +import net.md_5.bungee.api.CommandSender; +import net.md_5.bungee.api.connection.ProxiedPlayer; + +public class DynamicNetworkChannel extends NetworkChannel { + + private boolean blacklistMembers; // Should member list of the channel be a blacklist or whitelist + private Set members; // Member list of the channel + + public DynamicNetworkChannel(String id, ChannelInfo info, ChannelManager manager, boolean blacklistMembers, Set members) { + super(id, info, manager); + this.blacklistMembers = blacklistMembers; + this.members = members; + } + + /** + * Checks if the command sender is a member of this channel + * @param sender The command sender to check + * @return true if they are a member of the channel + */ + public boolean isMember(CommandSender sender) { + + // Console always member + if (!(sender instanceof ProxiedPlayer)) return true; + + ProxiedPlayer player = (ProxiedPlayer) sender; + + if (blacklistMembers) { + return !members.contains(player.getUniqueId()); + } else { + return members.contains(player.getUniqueId()); + } + + } + + /** + * Is the member list for this channel a blacklist or a whitelist? + * @return true if it is a blacklist + */ + public boolean isBlacklistMembers() { + return this.blacklistMembers; + } + + /** + * Controls if the member list for this channel is a blacklist or a whitelist + * @param blacklistMembers TRUE for blacklist, FALSE for whitelist + */ + public void setBlacklistMembers(boolean blacklistMembers) { + this.blacklistMembers = blacklistMembers; + } + + /** + *

Gets the blacklist/whitelist of members for this channel.

+ *

List is a blacklist if isBlacklistMembers() returns true, otherwise is a whitelist

+ * @return the blacklist/whitelist of members + */ + public Set getMembers() { + return this.members; + } + + @Override + public boolean canSpeak(CommandSender sender) { + return isMember(sender) && getInfo().inContext(sender) && getInfo().hasSpeakPermission(sender); + } + + @Override + public boolean canView(CommandSender sender) { + return isMember(sender) && getInfo().inContext(sender) && getInfo().hasViewPermission(sender); + } + +} diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/GlobalChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/GlobalChannel.java new file mode 100644 index 00000000..80d4dfcf --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/GlobalChannel.java @@ -0,0 +1,13 @@ +package xyz.olivermartin.multichat.proxy.common.channels; + +import java.util.List; + +import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; + +public class GlobalChannel extends StaticNetworkChannel { + + public GlobalChannel(String id, String desc, String format, List aliases, ChannelManager manager) { + super(id, new ChannelInfo(desc, format, false, MultiChatProxy.getInstance().getContextManager().getGlobalContext(), aliases), manager); + } + +} diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/NetworkChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/NetworkChannel.java index cbe49ae3..e7a12e67 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/NetworkChannel.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/NetworkChannel.java @@ -1,42 +1,26 @@ package xyz.olivermartin.multichat.proxy.common.channels; -import java.util.List; -import java.util.Optional; -import java.util.Set; -import java.util.UUID; - import net.md_5.bungee.api.CommandSender; +import net.md_5.bungee.api.ProxyServer; +import net.md_5.bungee.api.chat.TextComponent; +import net.md_5.bungee.api.connection.ProxiedPlayer; +import xyz.olivermartin.multichat.bungee.ChatControl; +import xyz.olivermartin.multichat.bungee.ConsoleManager; +import xyz.olivermartin.multichat.bungee.MultiChat; +import xyz.olivermartin.multichat.bungee.events.PostBroadcastEvent; +import xyz.olivermartin.multichat.bungee.events.PostGlobalChatEvent; +import xyz.olivermartin.multichat.common.MultiChatUtil; public abstract class NetworkChannel { - private String id; // The channel ID - private String desc; // A short description of the channel - private String format; // The format of this channel - private boolean unhideable; // If the channel is unhideable - private Context context; // The context for this channel - private List aliases; // The command aliases for this channel - - private String permission; // Permission to view / speak - private String viewPermission; // Permission to view only - - private boolean blacklistMembers; // Should member list of the channel be a blacklist or whitelist - private Set members; // Member list of the channel - - public NetworkChannel(String id, String desc, String format, boolean unhideable, Context context, List aliases, String permission, String viewPermission, boolean blacklistMembers, Set members) { + private String id; + private ChannelInfo info; + private ChannelManager manager; + public NetworkChannel(String id, ChannelInfo info, ChannelManager manager) { this.id = id; - this.desc = desc; - this.format = format; - this.unhideable = unhideable; - this.context = context; - this.aliases = aliases; - - this.permission = null; - this.viewPermission = null; - - this.blacklistMembers = blacklistMembers; - this.members = members; - + this.info = info; + this.manager = manager; } /** @@ -48,67 +32,93 @@ public String getId() { } /** - * Gets a short description of this channel - * @return the description + * Gets the info for this channel + * @return the info */ - public String getDescription() { - return this.desc; + public ChannelInfo getInfo() { + return this.info; } /** - * Gets the format used for chat in this channel - * @return the format + * Updates the ChannelInfo used for this channel + * @param info The new info for the channel */ - public String getFormat() { - return this.format; + public void updateInfo(ChannelInfo info) { + this.info = info; } /** - * Checks if this channel is not allowed to be hidden - * @return true if the channel can not be hidden + * Gets the manager for this channel + * @return the manager */ - public boolean isUnhideable() { - return this.unhideable; + public ChannelManager getManager() { + return this.manager; } - /** - * Gets the context of this channel - * @return the context - */ - public Context getContext() { - return this.context; - } + public void sendMessage(CommandSender sender, String message) { - /** - * Gets the command aliases of this channel - * @return the command aliases - */ - public List getAliases() { - return this.aliases; - } + // If the sender can't speak then return + if (!canSpeak(sender)) return; - /** - * Checks if this channel requires a permission to view / speak - * @return true if the channel requires a permission - */ - public boolean isPermissionProtected() { - return this.permission == null; - } + for (ProxiedPlayer receiver : ProxyServer.getInstance().getPlayers()) { + + // Skip sending to this player if they shouldn't receive the message + if (receiver.getServer() == null // Receiver is between servers + || !canView(receiver) // Receiver is not permitted to view message + || manager.isHidden(receiver.getUniqueId(), id)) // Receiver has hidden this channel + continue; + + if (MultiChat.legacyServers.contains(receiver.getServer().getInfo().getName())) { + message = MultiChatUtil.approximateHexCodes(message); + } + + receiver.sendMessage(TextComponent.fromLegacyText(message)); + + } + + // Trigger PostBroadcastEvent + ProxyServer.getInstance().getPluginManager().callEvent(new PostBroadcastEvent("cast", message)); + + ConsoleManager.logDisplayMessage(message); - /** - * Gets the permission required to view / speak in the channel (if one exists) - * @return an optional of the permission - */ - public Optional getPermission() { - return Optional.ofNullable(permission); } - /** - * Gets the permission required to ONLY view the channel (if one exists) - * @return an optional of the permission - */ - public Optional getViewPermission() { - return Optional.ofNullable(viewPermission); + public void distributeMessage(ProxiedPlayer sender, String message, String format) { + + // If the sender can't speak, or is between servers, then return + if (!canSpeak(sender) || sender.getServer() == null) return; + + String senderServer = sender.getServer().getInfo().getName(); + String joined = format + message; + + for (ProxiedPlayer receiver : ProxyServer.getInstance().getPlayers()) { + + // Skip sending to this player if they shouldn't receive the message + if (receiver.getServer() == null // Receiver is between servers + || !canView(receiver) // Receiver is not permitted to view message + || manager.isHidden(receiver.getUniqueId(), id) // Receiver has hidden this channel + || receiver.getServer().getInfo().getName().equals(senderServer)) // Receiver is on same server as sender + continue; + + // If receiver ignores sender + if (ChatControl.ignores(sender.getUniqueId(), receiver.getUniqueId(), "global_chat")) { + ChatControl.sendIgnoreNotifications(receiver, sender, "global_chat"); + continue; + } + + if (MultiChat.legacyServers.contains(receiver.getServer().getInfo().getName())) { + joined = MultiChatUtil.approximateHexCodes(joined); + } + + receiver.sendMessage(TextComponent.fromLegacyText(joined)); + + } + + // Trigger PostGlobalChatEvent + ProxyServer.getInstance().getPluginManager().callEvent(new PostGlobalChatEvent(sender, format, message)); + + ConsoleManager.logChat(MultiChatUtil.approximateHexCodes(joined)); + } /** @@ -116,36 +126,13 @@ public Optional getViewPermission() { * @param sender The command sender * @return true if they are allowed to speak */ - public boolean canSpeak(CommandSender sender) { - if (!isPermissionProtected()) return true; - return sender.hasPermission(permission); - } + public abstract boolean canSpeak(CommandSender sender); /** * Checks if this command sender is allowed to view the channel * @param sender The command sender * @return true if they are allowed to view */ - public boolean canView(CommandSender sender) { - if (!isPermissionProtected()) return true; - return sender.hasPermission(permission) || sender.hasPermission(viewPermission); - } - - /** - * Is the member list for this channel a blacklist or a whitelist? - * @return true if it is a blacklist - */ - public boolean isBlacklistMembers() { - return this.blacklistMembers; - } - - /** - *

Gets the blacklist/whitelist of members for this channel.

- *

List is a blacklist if isBlacklistMembers() returns true, otherwise is a whitelist

- * @return the blacklist/whitelist of members - */ - public Set getMembers() { - return this.members; - } + public abstract boolean canView(CommandSender sender); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/StaticNetworkChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/StaticNetworkChannel.java index 450332b1..a0b86d3d 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/StaticNetworkChannel.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/StaticNetworkChannel.java @@ -1,8 +1,6 @@ package xyz.olivermartin.multichat.proxy.common.channels; -import java.util.HashSet; -import java.util.List; -import java.util.UUID; +import net.md_5.bungee.api.CommandSender; public class StaticNetworkChannel extends NetworkChannel { @@ -89,9 +87,18 @@ public StaticNetworkChannel build() { }*/ - public StaticNetworkChannel(String id, String desc, String format, boolean unhideable, Context context, List aliases, String permission, String viewPermission) { - // Create NetworkChannel with a "blacklist of members" that will always be empty (as this is a static channel) - super(id, desc, format, unhideable, context, aliases, permission, viewPermission, true, new HashSet()); + public StaticNetworkChannel(String id, ChannelInfo info, ChannelManager manager) { + super(id, info, manager); + } + + @Override + public boolean canSpeak(CommandSender sender) { + return getInfo().inContext(sender) && getInfo().hasSpeakPermission(sender); + } + + @Override + public boolean canView(CommandSender sender) { + return getInfo().inContext(sender) && getInfo().hasViewPermission(sender); } } From cfa537fdd0d833d93d9bed45cd83aaed37672c51 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Thu, 23 Jul 2020 19:24:30 +0100 Subject: [PATCH 040/188] Channels seem to practically work except local channel --- .../multichat/bungee/CastControl.java | 5 +- .../multichat/bungee/ChatModeManager.java | 32 +- .../olivermartin/multichat/bungee/Events.java | 32 +- .../multichat/bungee/GlobalChannel.java | 9 - .../multichat/bungee/LegacyChannel.java | 419 ------------------ .../multichat/bungee/LocalChannel.java | 33 -- .../multichat/bungee/MultiChat.java | 14 +- .../bungee/commands/ChannelCommand.java | 27 +- .../bungee/commands/GlobalCommand.java | 11 +- .../bungee/commands/LocalCommand.java | 11 +- .../bungee/commands/MultiChatCommand.java | 15 +- .../bungee/commands/UseCastCommand.java | 4 +- .../multichat/common/MultiChatUtil.java | 10 +- .../LocalBungeeCommunicationManager.java | 7 +- .../local/common/LocalChatManager.java | 44 ++ .../LocalProxyCommunicationManager.java | 3 +- .../chat/LocalChatListenerHighest.java | 14 +- .../chat/LocalChatListenerMonitor.java | 7 +- .../chat/MultiChatLocalPlayerChatEvent.java | 10 +- .../LocalPlayerDataListener.java | 29 +- .../local/common/storage/LocalDataStore.java | 19 + .../SpigotBungeeCommunicationManager.java | 33 ++ .../MultiChatLocalSpigotPlayerChatEvent.java | 33 +- .../SpongeBungeeCommunicationManager.java | 50 +++ .../MultiChatLocalSpongePlayerChatEvent.java | 46 +- .../chat/MultiChatMessageChannel.java | 24 +- .../ProxyLocalCommunicationManager.java | 12 +- .../proxy/common/channels/ChannelManager.java | 55 ++- .../proxy/common/channels/ContextManager.java | 25 ++ .../proxy/common/channels/GlobalChannel.java | 4 +- .../proxy/common/channels/LocalChannel.java | 130 ++++++ .../proxy/common/channels/NetworkChannel.java | 13 +- .../ProxyPlayerChatListener.java | 23 +- 33 files changed, 625 insertions(+), 578 deletions(-) delete mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/bungee/GlobalChannel.java delete mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/bungee/LegacyChannel.java delete mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/bungee/LocalChannel.java create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/LocalChannel.java diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/CastControl.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/CastControl.java index a7e38f70..20d55915 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/CastControl.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/CastControl.java @@ -5,6 +5,7 @@ import net.md_5.bungee.api.CommandSender; import xyz.olivermartin.multichat.common.MultiChatUtil; +import xyz.olivermartin.multichat.proxy.common.channels.NetworkChannel; /** * Cast Control @@ -17,9 +18,9 @@ public class CastControl { public static Map castList = new HashMap(); - public static void sendCast(String castName, String castMessage, LegacyChannel chatStream, CommandSender sender) { + public static void sendCast(String castName, String castMessage, NetworkChannel chatStream, CommandSender sender) { castMessage = ChatControl.applyChatRules(castMessage, "casts", "").get(); - chatStream.sendMessage(castList.get(castName.toLowerCase()) + " " + castMessage, sender); + chatStream.sendMessage(sender, castList.get(castName.toLowerCase()) + " " + castMessage); } public static void addCast(String castName, String castFormat) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatModeManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatModeManager.java index 0f5080e2..60fec1b0 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatModeManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatModeManager.java @@ -6,7 +6,9 @@ import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.connection.ProxiedPlayer; +import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; +import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; public class ChatModeManager { @@ -30,43 +32,61 @@ private ChatModeManager() { public void setLocal(UUID uuid) { + ChannelManager channelManager = MultiChatProxy.getInstance().getChannelManager(); + globalPlayers.put(uuid, false); // TODO - LegacyChannel.setChannel(uuid, LegacyChannel.getLocalChannel()); + //LegacyChannel.setChannel(uuid, LegacyChannel.getLocalChannel()); + channelManager.select(uuid, "local"); // TODO ProxiedPlayer player = ProxyServer.getInstance().getPlayer(uuid); if (player == null) return; - LegacyChannel local = LegacyChannel.getLocalChannel(); + /*LegacyChannel local = LegacyChannel.getLocalChannel(); if (!local.isMember(uuid)) { local.removeMember(uuid); MessageManager.sendSpecialMessage(player, "command_channel_show", "LOCAL"); + }*/ + + if (channelManager.isHidden(uuid, "local")) { + channelManager.show(uuid, "local"); + MessageManager.sendSpecialMessage(player, "command_channel_show", "LOCAL"); } - ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), LegacyChannel.getChannel(uuid).getName(), LegacyChannel.getChannel(uuid), player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); + // TODO + //ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), LegacyChannel.getChannel(uuid).getName(), LegacyChannel.getChannel(uuid), player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); + ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), "local", player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); } public void setGlobal(UUID uuid) { + ChannelManager channelManager = MultiChatProxy.getInstance().getChannelManager(); + globalPlayers.put(uuid, true); // TODO - LegacyChannel.setChannel(uuid, LegacyChannel.getGlobalChannel()); + channelManager.select(uuid, "global"); + //LegacyChannel.setChannel(uuid, LegacyChannel.getGlobalChannel()); // TODO ProxiedPlayer player = ProxyServer.getInstance().getPlayer(uuid); if (player == null) return; - LegacyChannel global = LegacyChannel.getGlobalChannel(); + /*LegacyChannel global = LegacyChannel.getGlobalChannel(); if (!global.isMember(uuid)) { global.removeMember(uuid); MessageManager.sendSpecialMessage(player, "command_channel_show", "GLOBAL"); + }*/ + + if (channelManager.isHidden(uuid, "global")) { + channelManager.show(uuid, "global"); + MessageManager.sendSpecialMessage(player, "command_channel_show", "GLOBAL"); } - ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), LegacyChannel.getChannel(uuid).getName(), LegacyChannel.getChannel(uuid), player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); + ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), "global", player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); } 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 355b7a48..512f6c80 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Events.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Events.java @@ -32,6 +32,7 @@ import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; +import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; /** * Events Manager @@ -143,6 +144,7 @@ public static boolean togglePM(UUID uuid, UUID uuidt) { public void onChat(ChatEvent event) { ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + ChannelManager channelManager = MultiChatProxy.getInstance().getChannelManager(); ProxiedPlayer player = (ProxiedPlayer) event.getSender(); // New null pointer checks @@ -325,7 +327,7 @@ public void onChat(ChatEvent event) { String message = MultiChatUtil.getMessageFromArgs(parts, 1); - CastControl.sendCast(parts[0].substring(1),message,LegacyChannel.getChannel(playerSender.getUniqueId()), playerSender); + CastControl.sendCast(parts[0].substring(1),message,channelManager.getChannel(player), playerSender); event.setCancelled(true); @@ -335,7 +337,7 @@ public void onChat(ChatEvent event) { String message = MultiChatUtil.getMessageFromArgs(parts, 1); - CastControl.sendCast(parts[0].substring(1), message, LegacyChannel.getGlobalChannel(), ProxyServer.getInstance().getConsole()); + CastControl.sendCast(parts[0].substring(1), message, channelManager.getGlobalChannel(), ProxyServer.getInstance().getConsole()); event.setCancelled(true); @@ -397,7 +399,12 @@ public void onChat(ChatEvent event) { DebugManager.log("Does player have rgb colour permission? " + (player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); // Let server know players channel preference - ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), LegacyChannel.getChannel(player.getUniqueId()).getName(), LegacyChannel.getChannel(player.getUniqueId()), player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); + + DebugManager.log("!!!!! : " + channelManager.getChannel(player).toString()); + DebugManager.log("!!!!! : " + channelManager.getChannel(player).getId()); + DebugManager.log("!!!!! : " + player.getServer().getInfo().getName()); + + ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), channelManager.getChannel(player).getId(), player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); // Message passes through to spigot here @@ -419,6 +426,7 @@ public void onChat(ChatEvent event) { public void onLogin(PostLoginEvent event) { ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + ChannelManager channelManager = MultiChatProxy.getInstance().getChannelManager(); ProxiedPlayer player = event.getPlayer(); UUID uuid = player.getUniqueId(); @@ -489,9 +497,9 @@ public void onLogin(PostLoginEvent event) { // Set player to appropriate channels if (ChatModeManager.getInstance().isGlobal(uuid)) { - LegacyChannel.setChannel(player.getUniqueId(), LegacyChannel.getGlobalChannel()); + channelManager.select(uuid, "global"); } else { - LegacyChannel.setChannel(player.getUniqueId(), LegacyChannel.getLocalChannel()); + channelManager.select(uuid, "local"); } //BungeeComm.sendPlayerChannelMessage(player.getName(), Channel.getChannel(player.getUniqueId()).getName(), Channel.getChannel(player.getUniqueId()), player.getServer().getInfo()); @@ -596,10 +604,6 @@ public void onLogout(PlayerDisconnectEvent event) { // Reset their spam data on logout (nothing is stored persistantly) ChatControl.spamPardonPlayer(uuid); - /// - LegacyChannel.removePlayer(player.getUniqueId()); - /// - if (ds.getViewedChats().containsKey(uuid)) { ds.getViewedChats().remove(uuid); } @@ -608,14 +612,6 @@ public void onLogout(PlayerDisconnectEvent event) { ConsoleManager.log("Un-Registered player " + player.getName()); - if (!LegacyChannel.getGlobalChannel().isMember(player.getUniqueId())) { - LegacyChannel.getGlobalChannel().removeMember(uuid); - } - - if (!LegacyChannel.getLocalChannel().isMember(player.getUniqueId())) { - LegacyChannel.getLocalChannel().removeMember(uuid); - } - if ( ConfigManager.getInstance().getHandler("joinmessages.yml").getConfig().getBoolean("showquit") == true ) { String joinformat = ConfigManager.getInstance().getHandler("joinmessages.yml").getConfig().getString("networkquit"); @@ -649,7 +645,7 @@ public void onServerSwitch(ServerSwitchEvent event) { ProxyServer.getInstance().getScheduler().schedule(MultiChatProxy.getInstance().getPlugin(), new Runnable() { public void run() { - ProxyLocalCommunicationManager.sendPlayerDataMessage(event.getPlayer().getName(), LegacyChannel.getChannel(event.getPlayer().getUniqueId()).getName(), LegacyChannel.getChannel(event.getPlayer().getUniqueId()), event.getPlayer().getServer().getInfo(), (event.getPlayer().hasPermission("multichat.chat.colour")||event.getPlayer().hasPermission("multichat.chat.color")||event.getPlayer().hasPermission("multichat.chat.colour.simple")||event.getPlayer().hasPermission("multichat.chat.color.simple")), (event.getPlayer().hasPermission("multichat.chat.colour")||event.getPlayer().hasPermission("multichat.chat.color")||event.getPlayer().hasPermission("multichat.chat.colour.rgb")||event.getPlayer().hasPermission("multichat.chat.color.rgb"))); + ProxyLocalCommunicationManager.sendPlayerDataMessage(event.getPlayer().getName(), MultiChatProxy.getInstance().getChannelManager().getChannel(event.getPlayer()).getId(), event.getPlayer().getServer().getInfo(), (event.getPlayer().hasPermission("multichat.chat.colour")||event.getPlayer().hasPermission("multichat.chat.color")||event.getPlayer().hasPermission("multichat.chat.colour.simple")||event.getPlayer().hasPermission("multichat.chat.color.simple")), (event.getPlayer().hasPermission("multichat.chat.colour")||event.getPlayer().hasPermission("multichat.chat.color")||event.getPlayer().hasPermission("multichat.chat.colour.rgb")||event.getPlayer().hasPermission("multichat.chat.color.rgb"))); ProxyLocalCommunicationManager.sendLegacyServerData(event.getPlayer().getServer().getInfo()); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/GlobalChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/GlobalChannel.java deleted file mode 100644 index 020cfb2a..00000000 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/GlobalChannel.java +++ /dev/null @@ -1,9 +0,0 @@ -package xyz.olivermartin.multichat.bungee; - -public class GlobalChannel extends LegacyChannel { - - public GlobalChannel(String format) { - super("global", format, false, false); - } - -} diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/LegacyChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/LegacyChannel.java deleted file mode 100644 index c542fe45..00000000 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/LegacyChannel.java +++ /dev/null @@ -1,419 +0,0 @@ -package xyz.olivermartin.multichat.bungee; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.UUID; - -import net.md_5.bungee.api.ChatColor; -import net.md_5.bungee.api.CommandSender; -import net.md_5.bungee.api.ProxyServer; -import net.md_5.bungee.api.chat.BaseComponent; -import net.md_5.bungee.api.chat.TextComponent; -import net.md_5.bungee.api.connection.ProxiedPlayer; -import xyz.olivermartin.multichat.bungee.events.PostBroadcastEvent; -import xyz.olivermartin.multichat.bungee.events.PostGlobalChatEvent; -import xyz.olivermartin.multichat.common.MultiChatUtil; - -/** - * Channel - *

A class to represent a chat channel and control the messages sent etc.

- * - * @author Oliver Martin (Revilo410) - * - */ -public class LegacyChannel { - - private static GlobalChannel global; - private static LocalChannel local; - - static { - - global = new GlobalChannel("&f%DISPLAYNAME%&f: "); - local = new LocalChannel(); - - } - - public static GlobalChannel getGlobalChannel() { - return global; - } - - public static LocalChannel getLocalChannel() { - return local; - } - - public static Map playerChannels = new HashMap(); - - public static void setChannel (UUID uuid, LegacyChannel channel) { - LegacyChannel.playerChannels.put(uuid, channel); - } - - public static LegacyChannel getChannel (UUID uuid) { - return LegacyChannel.playerChannels.get(uuid); - } - - public static void removePlayer (UUID uuid) { - LegacyChannel.playerChannels.remove(uuid); - } - - /* END STATIC */ - - boolean whitelistMembers; - protected List members; - - boolean whitelistServers; - protected List servers; - - protected String name; - protected String format; - - public LegacyChannel(String name, String format, boolean whitelistServers, boolean whitelistMembers) { - - this.name = name; - this.whitelistServers = whitelistServers; - this.format = format; - this.servers = new ArrayList(); - this.members = new ArrayList(); - this.whitelistMembers = whitelistMembers; - - } - - public boolean isMember(UUID player) { - if (this.whitelistMembers) { - return this.members.contains(player); - } else { - return !this.members.contains(player); - } - } - - public void removeMember(UUID player) { - this.members.remove(player); - } - - public List getMembers() { - return this.members; - } - - public boolean isWhitelistMembers() { - return this.whitelistMembers; - } - - public void addServer(String server) { - if (!servers.contains(server)) servers.add(server); - } - - public void setServers(List servers) { - this.servers = servers; - } - - public void clearServers() { - this.servers = new ArrayList(); - } - - public void addMember(UUID member) { - if (!members.contains(member)) members.add(member); - } - - public void setMembers(List members) { - this.members = members; - } - - public String getName() { - return this.name; - } - - public String getFormat() { - return this.format; - } - - public void setFormat(String format) { - this.format = format; - } - - public void sendMessage(ProxiedPlayer sender, String message, String format) { - - DebugManager.log("CHANNEL #" + getName() + ": Got a message for the channel"); - DebugManager.log("CHANNEL #" + getName() + ": SENDER = " + sender.getName()); - DebugManager.log("CHANNEL #" + getName() + ": MESSAGE = " + message); - DebugManager.log("CHANNEL #" + getName() + ": FORMAT = " + format); - - for (ProxiedPlayer receiver : ProxyServer.getInstance().getPlayers()) { - - if (receiver != null && sender != null) { - - synchronized (receiver) { - - if (sender.getServer() != null && receiver.getServer() != null) { - - if ( (whitelistMembers && members.contains(receiver.getUniqueId())) || (!whitelistMembers && !members.contains(receiver.getUniqueId()))) { - if ( (whitelistServers && servers.contains(receiver.getServer().getInfo().getName())) || (!whitelistServers && !servers.contains(receiver.getServer().getInfo().getName()))) { - - if (!ChatControl.ignores(sender.getUniqueId(), receiver.getUniqueId(), "global_chat")) { - if (!receiver.getServer().getInfo().getName().equals(sender.getServer().getInfo().getName())) { - receiver.sendMessage(buildFormat(sender,receiver,format,message)); - } else { - // If they are on the same server, this message will already have been displayed locally. - } - } else { - ChatControl.sendIgnoreNotifications(receiver, sender, "global_chat"); - } - - } - - } - - } - - } - - } - - } - - // Trigger PostGlobalChatEvent - ProxyServer.getInstance().getPluginManager().callEvent(new PostGlobalChatEvent(sender, format, message)); - - sendToConsole(sender,format,message); - - } - - public void sendMessage(String message, CommandSender sender) { - - for (ProxiedPlayer receiver : ProxyServer.getInstance().getPlayers()) { - if (receiver != null && sender != null) { - if (receiver.getServer() != null) { - if ( (whitelistMembers && members.contains(receiver.getUniqueId())) || (!whitelistMembers && !members.contains(receiver.getUniqueId()))) { - if ( (whitelistServers && servers.contains(receiver.getServer().getInfo().getName())) || (!whitelistServers && !servers.contains(receiver.getServer().getInfo().getName()))) { - //TODO hiding & showing streams - - if (MultiChat.legacyServers.contains(receiver.getServer().getInfo().getName())) { - receiver.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(ChatColor.translateAlternateColorCodes('&', message)))); - } else { - receiver.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', message))); - } - - } - } - } - } - } - - // Trigger PostBroadcastEvent - ProxyServer.getInstance().getPluginManager().callEvent(new PostBroadcastEvent("cast", message)); - - ConsoleManager.logDisplayMessage(message); - - } - - /*public String buildSpigotFormat(ProxiedPlayer sender, String format, String message) { - - String newFormat = format; - - /*newFormat = newFormat.replace("%DISPLAYNAME%", sender.getDisplayName()); - newFormat = newFormat.replace("%NAME%", sender.getName()); - - Optional opm = PlayerMetaManager.getInstance().getPlayer(sender.getUniqueId()); - if (opm.isPresent()) { - newFormat = newFormat.replace("%PREFIX%", opm.get().prefix); - newFormat = newFormat.replace("%SUFFIX%", opm.get().suffix); - newFormat = newFormat.replace("%NICK%", opm.get().nick); - newFormat = newFormat.replace("%WORLD%", opm.get().world); - } - - newFormat = newFormat.replace("%SERVER%", sender.getServer().getInfo().getName()); - - - if (!ChatModeManager.getInstance().isGlobal(sender.getUniqueId())) { - newFormat = newFormat.replace("%MODE%", "Local"); - newFormat = newFormat.replace("%M%", "L"); - } - - if (ChatModeManager.getInstance().isGlobal(sender.getUniqueId())) { - newFormat = newFormat.replace("%MODE%", "Global"); - newFormat = newFormat.replace("%M%", "G"); - } - - newFormat = newFormat + "%MESSAGE%"; - - return newFormat; - - }*/ - - public BaseComponent[] buildFormat(ProxiedPlayer sender, ProxiedPlayer receiver, String format, String message) { - - String newFormat = format; - - /*newFormat = newFormat.replace("%DISPLAYNAME%", sender.getDisplayName()); - newFormat = newFormat.replace("%NAME%", sender.getName()); - - Optional opm = PlayerMetaManager.getInstance().getPlayer(sender.getUniqueId()); - if (opm.isPresent()) { - newFormat = newFormat.replace("%PREFIX%", opm.get().prefix); - newFormat = newFormat.replace("%SUFFIX%", opm.get().suffix); - newFormat = newFormat.replace("%NICK%", opm.get().nick); - newFormat = newFormat.replace("%WORLD%", opm.get().world); - } - - newFormat = newFormat.replace("%DISPLAYNAMET%", receiver.getDisplayName()); - newFormat = newFormat.replace("%NAMET%", receiver.getName()); - - Optional opmt = PlayerMetaManager.getInstance().getPlayer(receiver.getUniqueId()); - if (opmt.isPresent()) { - newFormat = newFormat.replace("%PREFIXT%", opmt.get().prefix); - newFormat = newFormat.replace("%SUFFIXT%", opmt.get().suffix); - newFormat = newFormat.replace("%NICKT%", opmt.get().nick); - newFormat = newFormat.replace("%WORLDT%", opmt.get().world); - } - - newFormat = newFormat.replace("%SERVER%", sender.getServer().getInfo().getName()); - newFormat = newFormat.replace("%SERVERT%", receiver.getServer().getInfo().getName()); - - - if (!ChatModeManager.getInstance().isGlobal(sender.getUniqueId())) { - newFormat = newFormat.replace("%MODE%", "Local"); - newFormat = newFormat.replace("%M%", "L"); - } - - if (ChatModeManager.getInstance().isGlobal(sender.getUniqueId())) { - newFormat = newFormat.replace("%MODE%", "Global"); - newFormat = newFormat.replace("%M%", "G"); - }*/ - - newFormat = newFormat + "%MESSAGE%"; - - BaseComponent[] toSend; - - if (sender.hasPermission("multichat.chat.colour") || sender.hasPermission("multichat.chat.color")) { - - newFormat = newFormat.replace("%MESSAGE%", message); - if (MultiChat.legacyServers.contains(receiver.getServer().getInfo().getName())) { - newFormat = MultiChatUtil.approximateHexCodes(newFormat); - } - toSend = TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', newFormat)); - - } else { - - newFormat = newFormat.replace("%MESSAGE%", ""); - if (MultiChat.legacyServers.contains(receiver.getServer().getInfo().getName())) { - newFormat = MultiChatUtil.approximateHexCodes(newFormat); - } - toSend = TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', newFormat) + message); - } - - return toSend; - - } - - public BaseComponent[] buildFormat(String name, String displayName, String server, String world, ProxiedPlayer receiver, String format, String message) { - - String newFormat = format; - - newFormat = newFormat.replace("%DISPLAYNAME%", displayName); - newFormat = newFormat.replace("%NAME%", name); - newFormat = newFormat.replace("%DISPLAYNAMET%", receiver.getDisplayName()); - newFormat = newFormat.replace("%NAMET%", receiver.getName()); - - Optional opmt = PlayerMetaManager.getInstance().getPlayer(receiver.getUniqueId()); - if (opmt.isPresent()) { - newFormat = newFormat.replace("%PREFIXT%", opmt.get().prefix); - newFormat = newFormat.replace("%SUFFIXT%", opmt.get().suffix); - newFormat = newFormat.replace("%NICKT%", opmt.get().nick); - newFormat = newFormat.replace("%WORLDT%", opmt.get().world); - } - - newFormat = newFormat.replace("%SERVER%", server); - newFormat = newFormat.replace("%SERVERT%", receiver.getServer().getInfo().getName()); - - newFormat = newFormat.replace("%WORLD%", world); - - - /*newFormat = newFormat.replace("%MODE%", "Global"); - newFormat = newFormat.replace("%M%", "G");*/ - - newFormat = newFormat + "%MESSAGE%"; - - BaseComponent[] toSend; - - newFormat = newFormat.replace("%MESSAGE%", message); - if (MultiChat.legacyServers.contains(receiver.getServer().getInfo().getName())) { - newFormat = MultiChatUtil.approximateHexCodes(newFormat); - } - toSend = TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', newFormat)); - - return toSend; - - } - - public void sendToConsole(ProxiedPlayer sender, String format, String message) { - - String newFormat = format; - - newFormat = newFormat.replace("%DISPLAYNAME%", sender.getDisplayName()); - newFormat = newFormat.replace("%NAME%", sender.getName()); - - Optional opm = PlayerMetaManager.getInstance().getPlayer(sender.getUniqueId()); - if (opm.isPresent()) { - newFormat = newFormat.replace("%PREFIX%", opm.get().prefix); - newFormat = newFormat.replace("%SUFFIX%", opm.get().suffix); - newFormat = newFormat.replace("%NICK%", opm.get().nick); - newFormat = newFormat.replace("%WORLD%", opm.get().world); - } - - newFormat = newFormat.replace("%DISPLAYNAMET%", "CONSOLE"); - newFormat = newFormat.replace("%NAMET%", "CONSOLE"); - newFormat = newFormat.replace("%SERVER%", sender.getServer().getInfo().getName()); - newFormat = newFormat.replace("%SERVERT%", "CONSOLE"); - newFormat = newFormat.replace("%WORLDT%", "CONSOLE"); - - /*if (!ChatModeManager.getInstance().isGlobal(sender.getUniqueId())) { - newFormat = newFormat.replace("%MODE%", "Local"); - newFormat = newFormat.replace("%M%", "L"); - } - - if (ChatModeManager.getInstance().isGlobal(sender.getUniqueId())) { - newFormat = newFormat.replace("%MODE%", "Global"); - newFormat = newFormat.replace("%M%", "G"); - }*/ - - newFormat = newFormat + "%MESSAGE%"; - - if (sender.hasPermission("multichat.chat.colour") || sender.hasPermission("multichat.chat.color")) { - - newFormat = newFormat.replace("%MESSAGE%", message); - ConsoleManager.logChat(newFormat); - - } else { - - newFormat = newFormat.replace("%MESSAGE%", ""); - ConsoleManager.logBasicChat(newFormat, message); - - } - - } - - public void sendToConsole(String name, String displayName, String server, String world, String format, String message) { - - String newFormat = format; - - newFormat = newFormat.replace("%DISPLAYNAME%", displayName); - newFormat = newFormat.replace("%NAME%", name); - newFormat = newFormat.replace("%DISPLAYNAMET%", "CONSOLE"); - newFormat = newFormat.replace("%NAMET%", "CONSOLE"); - newFormat = newFormat.replace("%SERVER%", server); - newFormat = newFormat.replace("%SERVERT%", "CONSOLE"); - newFormat = newFormat.replace("%WORLD%", world); - newFormat = newFormat.replace("%WORLDT%", "CONSOLE"); - - /*newFormat = newFormat.replace("%MODE%", "Global"); - newFormat = newFormat.replace("%M%", "G");*/ - - newFormat = newFormat + "%MESSAGE%"; - - newFormat = newFormat.replace("%MESSAGE%", message); - - ConsoleManager.logChat(newFormat); - - } -} diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/LocalChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/LocalChannel.java deleted file mode 100644 index f87d55c6..00000000 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/LocalChannel.java +++ /dev/null @@ -1,33 +0,0 @@ -package xyz.olivermartin.multichat.bungee; - -import net.md_5.bungee.api.CommandSender; -import net.md_5.bungee.api.connection.ProxiedPlayer; -import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; - -public class LocalChannel extends LegacyChannel { - - public LocalChannel() { - super("local", "", false, false); - } - - /** - * This has no purpose as local chat for players is handled by the local servers - */ - @Override - public void sendMessage(ProxiedPlayer sender, String message, String format) { - /* EMPTY */ - } - - @Override - public void sendMessage(String message, CommandSender sender) { - - DebugManager.log("LocalChannel wants to send a cast message!"); - - // Use this to relay CASTS to local chat! - if (sender instanceof ProxiedPlayer) { - ProxyLocalCommunicationManager.sendServerChatMessage("local", message, ((ProxiedPlayer)sender).getServer().getInfo()); - } - - } - -} 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 169f4c42..727fd529 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java @@ -20,7 +20,9 @@ import xyz.olivermartin.multichat.proxy.common.ProxyBackupManager; import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; +import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; import xyz.olivermartin.multichat.proxy.common.channels.ContextManager; +import xyz.olivermartin.multichat.proxy.common.channels.GlobalChannel; import xyz.olivermartin.multichat.proxy.common.channels.GlobalContext; import xyz.olivermartin.multichat.proxy.common.listeners.communication.ProxyPlayerActionListener; import xyz.olivermartin.multichat.proxy.common.listeners.communication.ProxyPlayerChatListener; @@ -363,24 +365,28 @@ public void onEnable() { boolean forceChannelOnJoin = configYML.getBoolean("force_channel_on_join"); // Set up global chat - GlobalChannel channel = LegacyChannel.getGlobalChannel(); - channel.setFormat(configYML.getString("globalformat")); + //GlobalChannel channel = LegacyChannel.getGlobalChannel(); + //channel.setFormat(configYML.getString("globalformat")); List noGlobalServers = new ArrayList(); // Add all appropriate servers to this hardcoded global chat stream for (String server : configYML.getStringList("no_global")) { - channel.addServer(server); + //channel.addServer(server); noGlobalServers.add(server); } /// - // New context manager + // New context manager and channels GlobalContext globalContext = new GlobalContext(defaultChannel, forceChannelOnJoin, true, noGlobalServers); ContextManager contextManager = new ContextManager(globalContext); MultiChatProxy.getInstance().registerContextManager(contextManager); + ChannelManager channelManager = new ChannelManager(); + channelManager.setGlobalChannel(new GlobalChannel("Global Channel", configYML.getString("globalformat"), ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("global"), channelManager)); + MultiChatProxy.getInstance().registerChannelManager(channelManager); + /// // Initiate backup routine diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ChannelCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ChannelCommand.java index 6f25fb56..aa61d1a3 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ChannelCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ChannelCommand.java @@ -4,11 +4,12 @@ import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.plugin.Command; -import xyz.olivermartin.multichat.bungee.LegacyChannel; import xyz.olivermartin.multichat.bungee.ChatModeManager; import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.MessageManager; +import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; +import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; /** * Chat Channel Command @@ -32,6 +33,8 @@ private void showHelp(CommandSender sender) { @Override public void execute(CommandSender sender, String[] args) { + ChannelManager channelManager = MultiChatProxy.getInstance().getChannelManager(); + if ((sender instanceof ProxiedPlayer)) { if ((args.length < 1) || ((args.length == 1) && (args[0].toLowerCase().equals("help")))) { @@ -77,9 +80,8 @@ public void execute(CommandSender sender, String[] args) { return; } - LegacyChannel local = LegacyChannel.getLocalChannel(); - if (local.isMember(((ProxiedPlayer)sender).getUniqueId())) { - local.addMember(((ProxiedPlayer)sender).getUniqueId()); + if (!channelManager.isHidden(((ProxiedPlayer)sender).getUniqueId(), "local")) { + channelManager.hide(((ProxiedPlayer)sender).getUniqueId(),"local"); MessageManager.sendSpecialMessage(sender, "command_channel_hide", operand.toUpperCase()); } else { MessageManager.sendSpecialMessage(sender, "command_channel_already_hide", operand.toUpperCase()); @@ -92,9 +94,8 @@ public void execute(CommandSender sender, String[] args) { return; } - LegacyChannel global = LegacyChannel.getGlobalChannel(); - if (global.isMember(((ProxiedPlayer)sender).getUniqueId())) { - global.addMember(((ProxiedPlayer)sender).getUniqueId()); + if (!channelManager.isHidden(((ProxiedPlayer)sender).getUniqueId(), "global")) { + channelManager.hide(((ProxiedPlayer)sender).getUniqueId(),"global"); MessageManager.sendSpecialMessage(sender, "command_channel_hide", operand.toUpperCase()); } else { MessageManager.sendSpecialMessage(sender, "command_channel_already_hide", operand.toUpperCase()); @@ -112,9 +113,8 @@ public void execute(CommandSender sender, String[] args) { } if (operand.equals("local")) { - LegacyChannel local = LegacyChannel.getLocalChannel(); - if (!local.isMember(((ProxiedPlayer)sender).getUniqueId())) { - local.removeMember(((ProxiedPlayer)sender).getUniqueId()); + if (channelManager.isHidden(((ProxiedPlayer)sender).getUniqueId(), "local")) { + channelManager.show(((ProxiedPlayer)sender).getUniqueId(),"local"); MessageManager.sendSpecialMessage(sender, "command_channel_show", operand.toUpperCase()); } else { MessageManager.sendSpecialMessage(sender, "command_channel_already_show", operand.toUpperCase()); @@ -122,9 +122,8 @@ public void execute(CommandSender sender, String[] args) { } else if (operand.equals("global")) { - LegacyChannel global = LegacyChannel.getGlobalChannel(); - if (!global.isMember(((ProxiedPlayer)sender).getUniqueId())) { - global.removeMember(((ProxiedPlayer)sender).getUniqueId()); + if (channelManager.isHidden(((ProxiedPlayer)sender).getUniqueId(), "global")) { + channelManager.show(((ProxiedPlayer)sender).getUniqueId(),"global"); MessageManager.sendSpecialMessage(sender, "command_channel_show", operand.toUpperCase()); } else { MessageManager.sendSpecialMessage(sender, "command_channel_already_show", operand.toUpperCase()); @@ -142,7 +141,7 @@ public void execute(CommandSender sender, String[] args) { // Update local channel info for (ProxiedPlayer p : ProxyServer.getInstance().getPlayers()) { - ProxyLocalCommunicationManager.sendPlayerDataMessage(p.getName(), LegacyChannel.getChannel(p.getUniqueId()).getName(), LegacyChannel.getChannel(p.getUniqueId()), p.getServer().getInfo(), (p.hasPermission("multichat.chat.colour")||p.hasPermission("multichat.chat.color")||p.hasPermission("multichat.chat.colour.simple")||p.hasPermission("multichat.chat.color.simple")), (p.hasPermission("multichat.chat.colour")||p.hasPermission("multichat.chat.color")||p.hasPermission("multichat.chat.colour.rgb")||p.hasPermission("multichat.chat.color.rgb"))); + ProxyLocalCommunicationManager.sendPlayerDataMessage(p.getName(), channelManager.getChannel(p).getId(), p.getServer().getInfo(), (p.hasPermission("multichat.chat.colour")||p.hasPermission("multichat.chat.color")||p.hasPermission("multichat.chat.colour.simple")||p.hasPermission("multichat.chat.color.simple")), (p.hasPermission("multichat.chat.colour")||p.hasPermission("multichat.chat.color")||p.hasPermission("multichat.chat.colour.rgb")||p.hasPermission("multichat.chat.color.rgb"))); } } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java index 2037689e..ee2b5c54 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java @@ -5,7 +5,6 @@ import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.plugin.Command; -import xyz.olivermartin.multichat.bungee.LegacyChannel; import xyz.olivermartin.multichat.bungee.ChatControl; import xyz.olivermartin.multichat.bungee.ChatModeManager; import xyz.olivermartin.multichat.bungee.ConfigManager; @@ -15,6 +14,7 @@ import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; +import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; /** * Global Command @@ -31,6 +31,8 @@ public GlobalCommand() { public void execute(CommandSender sender, String[] args) { + ChannelManager channelManager = MultiChatProxy.getInstance().getChannelManager(); + if ((sender instanceof ProxiedPlayer)) { if (args.length < 1) { @@ -82,14 +84,13 @@ public void execute(CommandSender sender, String[] args) { } // If they had this channel hidden, then unhide it... - LegacyChannel global = LegacyChannel.getGlobalChannel(); - if (!global.isMember(player.getUniqueId())) { - global.removeMember(player.getUniqueId()); + if (channelManager.isHidden(player.getUniqueId(), "global")) { + channelManager.show(player.getUniqueId(), "global"); MessageManager.sendSpecialMessage(player, "command_channel_show", "GLOBAL"); } // Let server know players channel preference - ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), LegacyChannel.getChannel(player.getUniqueId()).getName(), LegacyChannel.getChannel(player.getUniqueId()), player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); + ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), channelManager.getChannel(player).getId(), player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); // Message passes through to spigot here diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java index 90d45026..93c9163e 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java @@ -5,7 +5,6 @@ import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.plugin.Command; -import xyz.olivermartin.multichat.bungee.LegacyChannel; import xyz.olivermartin.multichat.bungee.ChatControl; import xyz.olivermartin.multichat.bungee.ChatModeManager; import xyz.olivermartin.multichat.bungee.ConfigManager; @@ -15,6 +14,7 @@ import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; +import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; /** * Local Chat Command @@ -31,6 +31,8 @@ public LocalCommand() { public void execute(CommandSender sender, String[] args) { + ChannelManager channelManager = MultiChatProxy.getInstance().getChannelManager(); + if ((sender instanceof ProxiedPlayer)) { if (args.length < 1) { @@ -78,14 +80,13 @@ public void execute(CommandSender sender, String[] args) { } // If they had this channel hidden, then unhide it... - LegacyChannel local = LegacyChannel.getLocalChannel(); - if (!local.isMember(player.getUniqueId())) { - local.removeMember(player.getUniqueId()); + if (channelManager.isHidden(player.getUniqueId(), "local")) { + channelManager.show(player.getUniqueId(), "local"); MessageManager.sendSpecialMessage(player, "command_channel_show", "LOCAL"); } // Let server know players channel preference - ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), LegacyChannel.getChannel(player.getUniqueId()).getName(), LegacyChannel.getChannel(player.getUniqueId()), player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); + ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), channelManager.getChannel(player).getId(), player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); // Message passes through to spigot here // Send message directly to local chat... 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 ba167965..db393f14 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 @@ -12,11 +12,10 @@ import xyz.olivermartin.multichat.bungee.CommandManager; import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.DebugManager; -import xyz.olivermartin.multichat.bungee.GlobalChannel; -import xyz.olivermartin.multichat.bungee.LegacyChannel; import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.bungee.MultiChat; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.channels.GlobalChannel; import xyz.olivermartin.multichat.proxy.common.channels.GlobalContext; /** @@ -137,24 +136,26 @@ public void execute(CommandSender sender, String[] args) { boolean forceChannelOnJoin = ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean("force_channel_on_join"); // Set up global chat - GlobalChannel channel = LegacyChannel.getGlobalChannel(); - channel.setFormat(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("globalformat")); + //GlobalAChannel channel = LegacyChannel.getGlobalChannel(); + //channel.setFormat(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("globalformat")); List noGlobalServers = new ArrayList(); - channel.clearServers(); + //channel.clearServers(); // Add all appropriate servers to this hardcoded global chat stream for (String server : ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList("no_global")) { - channel.addServer(server); + //channel.addServer(server); noGlobalServers.add(server); } /// - // New context manager + // New context manager and channels GlobalContext globalContext = new GlobalContext(defaultChannel, forceChannelOnJoin, true, noGlobalServers); MultiChatProxy.getInstance().getContextManager().setGlobalContext(globalContext); + MultiChatProxy.getInstance().getChannelManager().setGlobalChannel(new GlobalChannel("Global Channel", ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("globalformat"), ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("global"), MultiChatProxy.getInstance().getChannelManager())); + /// if (ProxyServer.getInstance().getPluginManager().getPlugin("PremiumVanish") != null) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/UseCastCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/UseCastCommand.java index d246ba6a..3a1c4d16 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/UseCastCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/UseCastCommand.java @@ -5,10 +5,10 @@ import net.md_5.bungee.api.chat.ComponentBuilder; import net.md_5.bungee.api.plugin.Command; import xyz.olivermartin.multichat.bungee.CastControl; -import xyz.olivermartin.multichat.bungee.LegacyChannel; import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.common.MultiChatUtil; +import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; /** * Use Cast Command @@ -40,7 +40,7 @@ public void execute(CommandSender sender, String[] args) { String message = MultiChatUtil.getMessageFromArgs(args, 1); - CastControl.sendCast(args[0], message, LegacyChannel.getGlobalChannel(), sender); + CastControl.sendCast(args[0], message, MultiChatProxy.getInstance().getChannelManager().getGlobalChannel(), sender); } else { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/common/MultiChatUtil.java b/multichat/src/main/java/xyz/olivermartin/multichat/common/MultiChatUtil.java index 4de37048..84e65ba0 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/common/MultiChatUtil.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/common/MultiChatUtil.java @@ -31,7 +31,15 @@ public static String approximateHexCodes(String message) { } for (String match : allMatches) { - String hexonly = match.split("#")[1]; + + String hexonly; + if (match.contains("#")) { + hexonly = match.split("#")[1]; + } else if (match.contains("x")) { + hexonly = match.split("x")[1]; + } else { + hexonly = match.split("X")[1]; + } String minecraftCode = hexToMinecraft(hexonly); message = message.replace(match,"§"+minecraftCode); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalBungeeCommunicationManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalBungeeCommunicationManager.java index 2191b815..9a0fbbfc 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalBungeeCommunicationManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalBungeeCommunicationManager.java @@ -1,5 +1,6 @@ package xyz.olivermartin.multichat.local.common; +import java.util.Set; import java.util.UUID; import xyz.olivermartin.multichat.common.communication.CommChannels; @@ -23,6 +24,8 @@ protected LocalBungeeCommunicationManager(MultiChatLocalPlatform localPlatform) protected abstract boolean sendUUIDAndStringAndStringAndString(String channel, UUID uuid, String value1, String value2, String value3); + protected abstract boolean sendPlatformChatMessage(String channel, UUID uuid, String chatChannel, String message, String format, Set otherRecipients); + protected abstract boolean sendStringAndString(String channel, String string1, String string2); protected abstract boolean sendString(String channel, String string); @@ -43,8 +46,8 @@ public void sendProxyExecutePlayerMessage(String command, String player) { } @Override - public void sendPlayerChatMessage(UUID uuid, String channel, String message, String format) { - sendUUIDAndStringAndStringAndString(CommChannels.PLAYER_CHAT, uuid, channel, message, format); + public void sendPlayerChatMessage(UUID uuid, String channel, String message, String format, Set otherRecipients) { + sendPlatformChatMessage(CommChannels.PLAYER_CHAT, uuid, channel, message, format, otherRecipients); } } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalChatManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalChatManager.java index 680c9466..8d41e49e 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalChatManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalChatManager.java @@ -5,6 +5,7 @@ import java.util.Map; import java.util.Optional; import java.util.Queue; +import java.util.Set; import java.util.UUID; import xyz.olivermartin.multichat.local.common.config.LocalConfig; @@ -58,6 +59,29 @@ public String getSelectedChatChannel(UUID uuid) { } + public void queueRecipients(UUID uuid, Set recipients) { + + Map>> recipientQueues = MultiChatLocal.getInstance().getDataStore().getRecipientQueues(); + + synchronized (recipientQueues) { + + if (recipientQueues.containsKey(uuid)) { + + Queue> q = recipientQueues.get(uuid); + q.add(recipients); + + } else { + + Queue> q = new LinkedList>(); + q.add(recipients); + recipientQueues.put(uuid, q); + + } + + } + + } + public void queueChatChannel(String playerName, String channel) { Map> chatQueues = MultiChatLocal.getInstance().getDataStore().getChatQueues(); @@ -81,6 +105,26 @@ public void queueChatChannel(String playerName, String channel) { } + public Set getRecipientsFromRecipientQueue(UUID uuid) { + + LocalDataStore store = MultiChatLocal.getInstance().getDataStore(); + Map>> recipientQueues = store.getRecipientQueues(); + Set recipients; + + synchronized (recipientQueues) { + + recipients = recipientQueues.get(uuid).poll(); + + if (recipientQueues.get(uuid).size() < 1) { + recipientQueues.remove(uuid); + } + + } + + return recipients; + + } + private String getChannelFromChatQueue(MultiChatLocalPlayer player, boolean pollQueue) { LocalDataStore store = MultiChatLocal.getInstance().getDataStore(); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalProxyCommunicationManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalProxyCommunicationManager.java index a3013a0f..e47bad34 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalProxyCommunicationManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalProxyCommunicationManager.java @@ -1,5 +1,6 @@ package xyz.olivermartin.multichat.local.common; +import java.util.Set; import java.util.UUID; import xyz.olivermartin.multichat.proxy.common.MultiChatProxyPlatform; @@ -44,6 +45,6 @@ public void updatePlayerMeta(UUID uuid) { public abstract void sendProxyExecutePlayerMessage(String command, String player); - public abstract void sendPlayerChatMessage(UUID uuid, String channel, String message, String format); + public abstract void sendPlayerChatMessage(UUID uuid, String channel, String message, String format, Set otherRecipients); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/LocalChatListenerHighest.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/LocalChatListenerHighest.java index 28d357a9..3e8a587a 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/LocalChatListenerHighest.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/LocalChatListenerHighest.java @@ -1,9 +1,9 @@ package xyz.olivermartin.multichat.local.common.listeners.chat; -import java.util.Optional; +import java.util.Set; +import java.util.UUID; import xyz.olivermartin.multichat.local.common.LocalChatManager; -import xyz.olivermartin.multichat.local.common.LocalPseudoChannel; import xyz.olivermartin.multichat.local.common.MultiChatLocal; import xyz.olivermartin.multichat.local.common.MultiChatLocalPlatform; @@ -43,7 +43,13 @@ public void handleChat(MultiChatLocalPlayerChatEvent event) { // Deal with ignores and channel members - Optional opChannelObject = chatManager.getChannelObject(channel); + Set intendedRecipients = event.getOtherRecipients(); + + chatManager.queueRecipients(event.getPlayer().getUniqueId(), intendedRecipients); + + event.removeOtherPlayers(); + + /*Optional opChannelObject = chatManager.getChannelObject(channel); if (opChannelObject.isPresent()) { @@ -58,7 +64,7 @@ public void handleChat(MultiChatLocalPlayerChatEvent event) { MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@HIGHEST - We didn't find a channel object to match that name... Probably not good!"); - } + }*/ if (!chatManager.isGlobalChatServer() || channel.equalsIgnoreCase("local")) { MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@HIGHEST - We are speaking into local chat, so at this point we are returning! Bye!"); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/LocalChatListenerMonitor.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/LocalChatListenerMonitor.java index dea81504..390fbd14 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/LocalChatListenerMonitor.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/LocalChatListenerMonitor.java @@ -1,5 +1,8 @@ package xyz.olivermartin.multichat.local.common.listeners.chat; +import java.util.Set; +import java.util.UUID; + import xyz.olivermartin.multichat.local.common.LocalChatManager; import xyz.olivermartin.multichat.local.common.MultiChatLocal; import xyz.olivermartin.multichat.local.common.MultiChatLocalPlatform; @@ -14,6 +17,8 @@ public void handleChat(MultiChatLocalPlayerChatEvent event) { LocalConfig config = MultiChatLocal.getInstance().getConfigManager().getLocalConfig(); LocalChatManager chatManager = MultiChatLocal.getInstance().getChatManager(); + Set originalRecipients = chatManager.getRecipientsFromRecipientQueue(event.getPlayer().getUniqueId()); + String channel = chatManager.pollChatChannel(event.getPlayer()); // Deal with regex channel forcing... @@ -74,7 +79,7 @@ public void handleChat(MultiChatLocalPlayerChatEvent event) { } - MultiChatLocal.getInstance().getProxyCommunicationManager().sendPlayerChatMessage(event.getPlayer().getUniqueId(), "global", proxyMessage, proxyFormat); + MultiChatLocal.getInstance().getProxyCommunicationManager().sendPlayerChatMessage(event.getPlayer().getUniqueId(), "global", proxyMessage, proxyFormat, originalRecipients); MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@MONITOR - Aaaaand we sent it to the proxy! ALL DONE."); MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@MONITOR - UUID: " + event.getPlayer().getUniqueId()); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/MultiChatLocalPlayerChatEvent.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/MultiChatLocalPlayerChatEvent.java index 8ace0f64..fbf9dce7 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/MultiChatLocalPlayerChatEvent.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/MultiChatLocalPlayerChatEvent.java @@ -1,6 +1,8 @@ package xyz.olivermartin.multichat.local.common.listeners.chat; -import xyz.olivermartin.multichat.local.common.LocalPseudoChannel; +import java.util.Set; +import java.util.UUID; + import xyz.olivermartin.multichat.local.common.MultiChatLocalPlayer; public interface MultiChatLocalPlayerChatEvent { @@ -19,6 +21,10 @@ public interface MultiChatLocalPlayerChatEvent { public void setCancelled(boolean cancelled); - public void removeIgnoredPlayersAndNonChannelMembersFromRecipients(LocalPseudoChannel channel); + //public void removeIgnoredPlayersAndNonChansnelMembersFromRecipients(LocalPseudoChannel channel); + + public void removeOtherPlayers(); + + public Set getOtherRecipients(); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalPlayerDataListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalPlayerDataListener.java index eb205efa..e670e054 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalPlayerDataListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalPlayerDataListener.java @@ -1,12 +1,11 @@ package xyz.olivermartin.multichat.local.common.listeners.communication; import java.io.IOException; -import java.util.List; import java.util.Map; import java.util.Optional; import java.util.UUID; -import xyz.olivermartin.multichat.local.common.LocalPseudoChannel; +import xyz.olivermartin.multichat.local.common.LocalConsoleLogger; import xyz.olivermartin.multichat.local.common.MultiChatLocal; import xyz.olivermartin.multichat.local.common.MultiChatLocalPlayer; import xyz.olivermartin.multichat.local.common.listeners.LocalBungeeObjectMessage; @@ -15,25 +14,39 @@ public abstract class LocalPlayerDataListener { protected abstract Optional getPlayerFromName(String playername); - @SuppressWarnings("unchecked") protected boolean handleMessage(LocalBungeeObjectMessage message) { + LocalConsoleLogger logger = MultiChatLocal.getInstance().getConsoleLogger(); + try { + logger.debug("Starting processing of pdata message"); + Optional opPlayer = getPlayerFromName(message.readUTF()); if (!opPlayer.isPresent()) return true; MultiChatLocalPlayer player = opPlayer.get(); + logger.debug("Player is present: " + player.getName()); + String channelName = message.readUTF(); + + logger.debug("Channel is present: " + channelName); + Map playerChannels = MultiChatLocal.getInstance().getDataStore().getPlayerChannels(); synchronized (playerChannels) { playerChannels.put(player.getUniqueId(), channelName); } boolean colour = message.readBoolean(); + + logger.debug("Colour: " + colour); + boolean rgb = message.readBoolean(); + + logger.debug("RGB: " + rgb); + Map simpleColourMap = MultiChatLocal.getInstance().getDataStore().getSimpleColourMap(); Map rgbColourMap = MultiChatLocal.getInstance().getDataStore().getRGBColourMap(); synchronized (simpleColourMap) { @@ -43,27 +56,23 @@ protected boolean handleMessage(LocalBungeeObjectMessage message) { rgbColourMap.put(player.getUniqueId(), rgb); } - boolean whitelistMembers = message.readBoolean(); + /*boolean whitelistMembers = message.readBoolean(); List channelMembers = (List) message.readObject(); LocalPseudoChannel channelObject = new LocalPseudoChannel(channelName, channelMembers, whitelistMembers); Map channelObjects = MultiChatLocal.getInstance().getDataStore().getChannelObjects(); synchronized (channelObjects) { channelObjects.put(channelName, channelObject); - } + }*/ return true; } catch (IOException e) { + e.printStackTrace(); MultiChatLocal.getInstance().getConsoleLogger().log("An error occurred trying to read player data message from Bungeecord, is the server lagging?"); return false; - } catch (ClassNotFoundException e) { - - MultiChatLocal.getInstance().getConsoleLogger().log("Could not read List of UUIDs from local player data message..."); - return false; - } } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/storage/LocalDataStore.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/storage/LocalDataStore.java index 8c9bdd15..42d990f8 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/storage/LocalDataStore.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/storage/LocalDataStore.java @@ -43,6 +43,11 @@ public class LocalDataStore { */ private Map> chatQueues = new HashMap>(); + /** + * Recipient Queues + */ + private Map>> recipientQueues = new HashMap>>(); + /** * What channel is each player speaking in? */ @@ -108,6 +113,13 @@ public synchronized Map> getChatQueues() { return chatQueues; } + /** + * @return the recipientQueues + */ + public synchronized Map>> getRecipientQueues() { + return recipientQueues; + } + /** * @return the playerChannels */ @@ -185,6 +197,13 @@ public synchronized void setChatQueues(Map> chatQueues) { this.chatQueues = chatQueues; } + /** + * @param recipientQueues the recipientQueues to set + */ + public synchronized void setRecipientQueues(Map>> recipientQueues) { + this.recipientQueues = recipientQueues; + } + /** * @param playerChannels the playerChannels to set */ diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/SpigotBungeeCommunicationManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/SpigotBungeeCommunicationManager.java index 04c631db..d8cdd4bf 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/SpigotBungeeCommunicationManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/SpigotBungeeCommunicationManager.java @@ -3,6 +3,8 @@ import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.IOException; +import java.io.ObjectOutputStream; +import java.util.Set; import java.util.UUID; import org.bukkit.Bukkit; @@ -150,4 +152,35 @@ protected boolean sendUUIDAndStringAndStringAndString(String channel, UUID uuid, } + @Override + protected boolean sendPlatformChatMessage(String channel, UUID uuid, String chatChannel, String message, String format, Set otherRecipients) { + + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + + try { + + ObjectOutputStream out = new ObjectOutputStream(stream); + + out.writeUTF(uuid.toString()); + out.writeUTF(chatChannel); + out.writeUTF(message); + out.writeUTF(format); + out.writeObject(otherRecipients); + out.flush(); + + } catch (IOException e) { + + return false; + + } + + if (Bukkit.getServer().getOnlinePlayers().size() < 1) return false; + + ((PluginMessageRecipient)Bukkit.getServer().getOnlinePlayers().toArray()[0]).sendPluginMessage(Bukkit.getPluginManager().getPlugin(MultiChatLocal.getInstance().getPluginName()), channel, stream.toByteArray()); + + return true; + + + } + } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/chat/MultiChatLocalSpigotPlayerChatEvent.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/chat/MultiChatLocalSpigotPlayerChatEvent.java index 551327cb..7824554a 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/chat/MultiChatLocalSpigotPlayerChatEvent.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/listeners/chat/MultiChatLocalSpigotPlayerChatEvent.java @@ -1,15 +1,13 @@ package xyz.olivermartin.multichat.local.spigot.listeners.chat; +import java.util.HashSet; import java.util.Iterator; -import java.util.Map; import java.util.Set; import java.util.UUID; import org.bukkit.entity.Player; import org.bukkit.event.player.AsyncPlayerChatEvent; -import xyz.olivermartin.multichat.local.common.LocalPseudoChannel; -import xyz.olivermartin.multichat.local.common.MultiChatLocal; import xyz.olivermartin.multichat.local.common.MultiChatLocalPlayer; import xyz.olivermartin.multichat.local.common.listeners.chat.MultiChatLocalPlayerChatEvent; import xyz.olivermartin.multichat.local.spigot.MultiChatLocalSpigotPlayer; @@ -62,6 +60,33 @@ public void setCancelled(boolean cancelled) { } @Override + public void removeOtherPlayers() { + + Iterator it = event.getRecipients().iterator(); + + while (it.hasNext()) { + Player p = it.next(); + if (!p.getUniqueId().equals(player.getUniqueId())) it.remove(); + } + + } + + @Override + public Set getOtherRecipients() { + + Set rSet = new HashSet(); + + for (Player p : event.getRecipients()) { + rSet.add(p.getUniqueId()); + } + + rSet.remove(player.getUniqueId()); + + return rSet; + + } + + /*@Override public void removeIgnoredPlayersAndNonChannelMembersFromRecipients(LocalPseudoChannel channel) { MultiChatLocal.getInstance().getConsoleLogger().debug("[MultiChatLocalSpigotChatEvent] Removing Ignored Players and Non Channel Members from recipients!"); @@ -105,6 +130,6 @@ public void removeIgnoredPlayersAndNonChannelMembersFromRecipients(LocalPseudoCh } } - } + }*/ } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/SpongeBungeeCommunicationManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/SpongeBungeeCommunicationManager.java index 787bacf7..0b9f30a6 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/SpongeBungeeCommunicationManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/SpongeBungeeCommunicationManager.java @@ -1,7 +1,13 @@ package xyz.olivermartin.multichat.local.sponge; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.DataInputStream; +import java.io.IOException; +import java.io.ObjectOutputStream; import java.util.HashMap; import java.util.Map; +import java.util.Set; import java.util.UUID; import org.spongepowered.api.Sponge; @@ -111,4 +117,48 @@ protected boolean sendUUIDAndStringAndStringAndString(String channel, UUID uuid, return true; } + @Override + protected boolean sendPlatformChatMessage(String channel, UUID uuid, String chatChannel, String message, String format, Set otherRecipients) { + + if (!this.channels.containsKey(channel)) throw new IllegalStateException("Sponge Raw Data Channels must first be registered with MultiChat's SpongeBungeeCommunicationManager!"); + + if (Sponge.getServer().getOnlinePlayers().size() < 1) return false; + + Player facilitatingPlayer = (Player) Sponge.getServer().getOnlinePlayers().toArray()[0]; + + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + + ByteArrayInputStream inputStream; + byte[] byteArray; + + try { + + ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream); + + objectOutputStream.writeUTF(uuid.toString()); + objectOutputStream.writeUTF(chatChannel); + objectOutputStream.writeUTF(message); + objectOutputStream.writeUTF(format); + objectOutputStream.writeObject(otherRecipients); + objectOutputStream.flush(); + + inputStream = new ByteArrayInputStream(outputStream.toByteArray()); + + DataInputStream dis = new DataInputStream(inputStream); + + byteArray = new byte[dis.available()]; + + dis.readFully(byteArray);; + + } catch (IOException e) { + e.printStackTrace(); + return false; + } + + this.channels.get(channel).sendTo(facilitatingPlayer, buffer -> buffer.writeBytes(byteArray)); + + return true; + + } + } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/listeners/chat/MultiChatLocalSpongePlayerChatEvent.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/listeners/chat/MultiChatLocalSpongePlayerChatEvent.java index b28032fe..d51fe42d 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/listeners/chat/MultiChatLocalSpongePlayerChatEvent.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/listeners/chat/MultiChatLocalSpongePlayerChatEvent.java @@ -3,14 +3,16 @@ import java.util.Collection; import java.util.HashSet; import java.util.Optional; +import java.util.Set; +import java.util.UUID; import org.spongepowered.api.Sponge; +import org.spongepowered.api.entity.living.player.Player; import org.spongepowered.api.event.message.MessageChannelEvent; import org.spongepowered.api.text.channel.MessageChannel; import org.spongepowered.api.text.channel.MessageReceiver; import org.spongepowered.api.text.serializer.TextSerializers; -import xyz.olivermartin.multichat.local.common.LocalPseudoChannel; import xyz.olivermartin.multichat.local.common.MultiChatLocalPlayer; import xyz.olivermartin.multichat.local.common.listeners.chat.MultiChatLocalPlayerChatEvent; @@ -60,6 +62,46 @@ public void setCancelled(boolean cancelled) { } @Override + public void removeOtherPlayers() { + + Optional currentChannel = event.getChannel(); + Collection recipients; + if (currentChannel.isPresent()) { + recipients = currentChannel.get().getMembers(); + } else { + recipients = new HashSet(Sponge.getServer().getOnlinePlayers()); + } + MultiChatMessageChannel messageChannel = new MultiChatMessageChannel(player, recipients); + event.setChannel(messageChannel); + + } + + @Override + public Set getOtherRecipients() { + + Set rSet = new HashSet(); + Optional currentChannel = event.getChannel(); + Collection recipients; + + if (currentChannel.isPresent()) { + recipients = currentChannel.get().getMembers(); + } else { + recipients = new HashSet(Sponge.getServer().getOnlinePlayers()); + } + + for (MessageReceiver r : recipients) { + if (r instanceof Player) { + rSet.add(((Player)r).getUniqueId()); + } + } + + rSet.remove(player.getUniqueId()); + + return rSet; + + } + + /*@Override public void removeIgnoredPlayersAndNonChannelMembersFromRecipients(LocalPseudoChannel channel) { channel = null; // TODO Ignored for Sponge... Optional currentChannel = event.getChannel(); @@ -71,6 +113,6 @@ public void removeIgnoredPlayersAndNonChannelMembersFromRecipients(LocalPseudoCh } MultiChatMessageChannel messageChannel = new MultiChatMessageChannel(player, recipients); event.setChannel(messageChannel); - } + }*/ } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/listeners/chat/MultiChatMessageChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/listeners/chat/MultiChatMessageChannel.java index fe0d2f11..9a9cc6aa 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/listeners/chat/MultiChatMessageChannel.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/listeners/chat/MultiChatMessageChannel.java @@ -3,19 +3,13 @@ import java.util.Collection; import java.util.HashSet; import java.util.Iterator; -import java.util.Map; -import java.util.Optional; import java.util.Set; -import java.util.UUID; import org.spongepowered.api.Sponge; import org.spongepowered.api.entity.living.player.Player; import org.spongepowered.api.text.channel.MessageReceiver; import org.spongepowered.api.text.channel.impl.SimpleMutableMessageChannel; -import xyz.olivermartin.multichat.local.common.LocalConsoleLogger; -import xyz.olivermartin.multichat.local.common.LocalPseudoChannel; -import xyz.olivermartin.multichat.local.common.MultiChatLocal; import xyz.olivermartin.multichat.local.common.MultiChatLocalPlayer; public class MultiChatMessageChannel extends SimpleMutableMessageChannel { @@ -30,7 +24,21 @@ public MultiChatMessageChannel(MultiChatLocalPlayer sender, Collection recipients = new HashSet(originalRecipients); - LocalConsoleLogger logger = MultiChatLocal.getInstance().getConsoleLogger(); + Iterator it = recipients.iterator(); + + while (it.hasNext()) { + + MessageReceiver p = it.next(); + + if (p instanceof Player) { + + if (!((Player) p).getUniqueId().equals(sender.getUniqueId())) it.remove(); + + } + + } + + /*LocalConsoleLogger logger = MultiChatLocal.getInstance().getConsoleLogger(); logger.debug("Creating new MultiChatMessageChannel for " + sender.getName()); @@ -93,7 +101,7 @@ public MultiChatMessageChannel(MultiChatLocalPlayer sender, Collection channels; + private Map selectedChannels; private Map> hiddenChannels; public ChannelManager() { channels = new HashMap(); + selectedChannels = new HashMap(); hiddenChannels = new HashMap>(); } + public Optional getChannel(String channelId) { + return Optional.ofNullable(channels.get(channelId)); + } + + public NetworkChannel getChannel(ProxiedPlayer player) { + + DebugManager.log("Getting channel for: " + player.getName()); + + UUID uuid = player.getUniqueId(); + if (selectedChannels.containsKey(uuid)) { + DebugManager.log("Their UUID has a selected channel..."); + String channel = selectedChannels.get(uuid); + DebugManager.log("Their channel=" + channel); + return channels.get(channel); + } else { + DebugManager.log("They don't yet have a selected channel"); + ContextManager cm = MultiChatProxy.getInstance().getContextManager(); + String defaultChannel = cm.getContext(player).getDefaultChannel(); + DebugManager.log("Default channel for their context is..." + defaultChannel); + select(player.getUniqueId(), defaultChannel); + return channels.get(defaultChannel); + } + } + public NetworkChannel getGlobalChannel() { return this.global; } - /*public Something getLocalChannel() { + public LocalChannel getLocalChannel() { return this.local; - }*/ + } public void setGlobalChannel(GlobalChannel global) { this.global = global; @@ -33,6 +64,15 @@ public void setGlobalChannel(GlobalChannel global) { channels.put("global", global); } + public void setLocalChannel(LocalChannel local) { + this.local = local; + } + + public boolean existsChannel(String channelId) { + if (channelId.equals("local")) return true; + return channels.containsKey(channelId); + } + public void hide(UUID uuid, String channelId) { Set hidden = hiddenChannels.getOrDefault(uuid, new HashSet()); hidden.add(channelId); @@ -50,4 +90,13 @@ public boolean isHidden(UUID uuid, String channelId) { return hidden.contains(channelId); } + public boolean select(UUID uuid, String channelId) { + if (existsChannel(channelId)) { + selectedChannels.put(uuid, channelId); + return true; + } else { + return false; + } + } + } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ContextManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ContextManager.java index ea6b6b81..2632e3ea 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ContextManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ContextManager.java @@ -2,6 +2,9 @@ import java.util.HashMap; import java.util.Map; +import java.util.Optional; + +import net.md_5.bungee.api.connection.ProxiedPlayer; public class ContextManager { @@ -24,4 +27,26 @@ public void setGlobalContext(GlobalContext global) { contexts.put("global", global); } + public Optional getContext(String id) { + return Optional.ofNullable(contexts.get(id)); + } + + public Context getContext(ProxiedPlayer player) { + + int lastPriority = -1; + Context lastContext = null; + + for (Context c : contexts.values()) { + if (c.contains(player)) { + if (c.getPriority() > lastPriority) { + lastContext = c; + lastPriority = c.getPriority(); + } + } + } + + return lastContext; + + } + } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/GlobalChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/GlobalChannel.java index 80d4dfcf..b1f1fa9e 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/GlobalChannel.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/GlobalChannel.java @@ -6,8 +6,8 @@ public class GlobalChannel extends StaticNetworkChannel { - public GlobalChannel(String id, String desc, String format, List aliases, ChannelManager manager) { - super(id, new ChannelInfo(desc, format, false, MultiChatProxy.getInstance().getContextManager().getGlobalContext(), aliases), manager); + public GlobalChannel(String desc, String format, List aliases, ChannelManager manager) { + super("global", new ChannelInfo(desc, format, false, MultiChatProxy.getInstance().getContextManager().getGlobalContext(), aliases), manager); } } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/LocalChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/LocalChannel.java new file mode 100644 index 00000000..e4400aa0 --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/LocalChannel.java @@ -0,0 +1,130 @@ +package xyz.olivermartin.multichat.proxy.common.channels; + +import java.util.List; +import java.util.Set; +import java.util.UUID; + +import net.md_5.bungee.api.CommandSender; +import net.md_5.bungee.api.ProxyServer; +import net.md_5.bungee.api.chat.TextComponent; +import net.md_5.bungee.api.connection.ProxiedPlayer; +import xyz.olivermartin.multichat.bungee.ChatControl; +import xyz.olivermartin.multichat.bungee.MultiChat; +import xyz.olivermartin.multichat.common.MultiChatUtil; + +public abstract class LocalChannel { + + private String id; + + private String desc; + private String format; + private List aliases; + + private ChannelManager manager; + + public LocalChannel(String id, String desc, String format, List aliases, ChannelManager manager) { + this.id = id; + + this.desc = desc; + this.format = format; + this.aliases = aliases; + + this.manager = manager; + } + + /** + * Gets the ID of this channel + * @return the id + */ + public String getId() { + return this.id; + } + + /** + * Gets the description of this channel + * @return the description + */ + public String getDiscription() { + return this.desc; + } + + /** + * Gets the format of this channel + * @return the format + */ + public String getFormat() { + return this.format; + } + + /** + * Gets the aliases of this channel + * @return the aliases + */ + public List getAliases() { + return this.aliases; + } + + /** + * Gets the manager for this channel + * @return the manager + */ + public ChannelManager getManager() { + return this.manager; + } + + public void sendMessage(CommandSender sender, String message, String server) { + + for (ProxiedPlayer receiver : ProxyServer.getInstance().getPlayers()) { + + // Skip sending to this player if they shouldn't receive the message + if (receiver.getServer() == null // Receiver is between servers + || manager.isHidden(receiver.getUniqueId(), id)) // Receiver has hidden this channel + continue; + + // If not on specified server then return + if (!receiver.getServer().getInfo().getName().equals(server)) continue; + + if (MultiChat.legacyServers.contains(receiver.getServer().getInfo().getName())) { + message = MultiChatUtil.approximateHexCodes(message); + } + + receiver.sendMessage(TextComponent.fromLegacyText(message)); + + } + + } + + public void distributeMessage(ProxiedPlayer sender, String message, String format, Set otherRecipients) { + + // If the sender can't speak, or is between servers, then return + if (sender.getServer() == null) return; + + String joined = format + message; + + for (ProxiedPlayer receiver : ProxyServer.getInstance().getPlayers()) { + + // Skip sending to this player if they shouldn't receive the message + if (receiver.getServer() == null // Receiver is between servers + || manager.isHidden(receiver.getUniqueId(), id)) // Receiver has hidden this channel + continue; + + // If receiver is NOT in the other recipients list then leave processing (as this is local only) + if (!otherRecipients.contains(receiver.getUniqueId())) continue; + + // If receiver ignores sender + if (ChatControl.ignores(sender.getUniqueId(), receiver.getUniqueId(), "global_chat")) { + ChatControl.sendIgnoreNotifications(receiver, sender, "global_chat"); + continue; + } + + if (MultiChat.legacyServers.contains(receiver.getServer().getInfo().getName())) { + joined = MultiChatUtil.approximateHexCodes(joined); + } + + receiver.sendMessage(TextComponent.fromLegacyText(joined)); + + } + + } + +} diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/NetworkChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/NetworkChannel.java index e7a12e67..0ab85ae1 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/NetworkChannel.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/NetworkChannel.java @@ -1,5 +1,8 @@ package xyz.olivermartin.multichat.proxy.common.channels; +import java.util.Set; +import java.util.UUID; + import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.chat.TextComponent; @@ -83,7 +86,7 @@ public void sendMessage(CommandSender sender, String message) { } - public void distributeMessage(ProxiedPlayer sender, String message, String format) { + public void distributeMessage(ProxiedPlayer sender, String message, String format, Set otherRecipients) { // If the sender can't speak, or is between servers, then return if (!canSpeak(sender) || sender.getServer() == null) return; @@ -96,8 +99,12 @@ public void distributeMessage(ProxiedPlayer sender, String message, String forma // Skip sending to this player if they shouldn't receive the message if (receiver.getServer() == null // Receiver is between servers || !canView(receiver) // Receiver is not permitted to view message - || manager.isHidden(receiver.getUniqueId(), id) // Receiver has hidden this channel - || receiver.getServer().getInfo().getName().equals(senderServer)) // Receiver is on same server as sender + || manager.isHidden(receiver.getUniqueId(), id)) // Receiver has hidden this channel + continue; + + // If receiver is on the same server as the sender AND NOT in the other recipients list + if (receiver.getServer().getInfo().getName().equals(senderServer) + && !otherRecipients.contains(receiver.getUniqueId())) continue; // If receiver ignores sender diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyPlayerChatListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyPlayerChatListener.java index 4e464c8c..8cd2780a 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyPlayerChatListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyPlayerChatListener.java @@ -1,9 +1,10 @@ package xyz.olivermartin.multichat.proxy.common.listeners.communication; import java.io.ByteArrayInputStream; -import java.io.DataInputStream; import java.io.IOException; +import java.io.ObjectInputStream; import java.util.Optional; +import java.util.Set; import java.util.UUID; import net.md_5.bungee.api.ProxyServer; @@ -11,11 +12,12 @@ import net.md_5.bungee.api.event.PluginMessageEvent; import net.md_5.bungee.api.plugin.Listener; import net.md_5.bungee.event.EventHandler; -import xyz.olivermartin.multichat.bungee.LegacyChannel; import xyz.olivermartin.multichat.bungee.DebugManager; import xyz.olivermartin.multichat.bungee.PlayerMeta; import xyz.olivermartin.multichat.bungee.PlayerMetaManager; import xyz.olivermartin.multichat.common.communication.CommChannels; +import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; /** * Listener for communication over the Player Chat communication channel @@ -25,6 +27,7 @@ */ public class ProxyPlayerChatListener implements Listener { + @SuppressWarnings("unchecked") @EventHandler public static void onPluginMessage(PluginMessageEvent event) { @@ -42,14 +45,18 @@ public static void onPluginMessage(PluginMessageEvent event) { */ ByteArrayInputStream stream = new ByteArrayInputStream(event.getData()); - DataInputStream in = new DataInputStream(stream); + UUID uuid; String channel; String message; String format; + Set otherRecipients; try { + + ObjectInputStream in = new ObjectInputStream(stream); + uuid = UUID.fromString(in.readUTF()); DebugManager.log("{multichat:pchat} UUID = " + uuid); channel = in.readUTF(); @@ -57,7 +64,9 @@ public static void onPluginMessage(PluginMessageEvent event) { message = in.readUTF(); DebugManager.log("{multichat:pchat} Message = " + message); format = in.readUTF(); - } catch (IOException e) { + otherRecipients = (Set) in.readObject(); + + } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); return; } @@ -77,14 +86,16 @@ public static void onPluginMessage(PluginMessageEvent event) { DebugManager.log("{multichat:pchat} Got player successfully! Name = " + player.getName()); Optional opm = PlayerMetaManager.getInstance().getPlayer(uuid); + ChannelManager channelManager = MultiChatProxy.getInstance().getChannelManager(); if (opm.isPresent()) { switch (channel) { case "global": - DebugManager.log("{multichat:pchat} Global Channel Available? = " + (LegacyChannel.getGlobalChannel() != null)); - LegacyChannel.getGlobalChannel().sendMessage(player, message, format); + //DebugManager.log("{multichat:pchat} Global Channel Available? = " + (LegacyChannel.getGlobalChannel() != null)); + //LegacyChannel.getGlobalChannel().sendMessage(player, message, format); + channelManager.getGlobalChannel().distributeMessage(player, message, format, otherRecipients); break; case "local": From 74c683c121c5cbed02aa26566b9b647ac70b60c6 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Fri, 24 Jul 2020 16:12:09 +0100 Subject: [PATCH 041/188] Made changes to proxy channels, need to fix local part --- .../multichat/bungee/CastControl.java | 12 ++- .../multichat/bungee/MultiChat.java | 4 +- .../bungee/commands/MultiChatCommand.java | 4 +- .../proxy/common/channels/Channel.java | 7 -- .../proxy/common/channels/ChannelManager.java | 37 +++---- ...kChannel.java => DynamicProxyChannel.java} | 4 +- ...kChannel.java => GenericProxyChannel.java} | 97 +++++++++---------- .../proxy/common/channels/GlobalChannel.java | 13 --- .../channels/GlobalStaticProxyChannel.java | 13 +++ .../proxy/common/channels/LocalChannel.java | 82 ++++++++-------- .../proxy/common/channels/ProxyChannel.java | 57 +++++++++++ ...ChannelInfo.java => ProxyChannelInfo.java} | 4 +- ...rkChannel.java => StaticProxyChannel.java} | 4 +- 13 files changed, 199 insertions(+), 139 deletions(-) delete mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/Channel.java rename multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/{DynamicNetworkChannel.java => DynamicProxyChannel.java} (88%) rename multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/{NetworkChannel.java => GenericProxyChannel.java} (82%) delete mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/GlobalChannel.java create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/GlobalStaticProxyChannel.java create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ProxyChannel.java rename multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/{ChannelInfo.java => ProxyChannelInfo.java} (91%) rename multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/{StaticNetworkChannel.java => StaticProxyChannel.java} (91%) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/CastControl.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/CastControl.java index 20d55915..bd5a6a00 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/CastControl.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/CastControl.java @@ -4,8 +4,10 @@ import java.util.Map; import net.md_5.bungee.api.CommandSender; +import net.md_5.bungee.api.connection.ProxiedPlayer; import xyz.olivermartin.multichat.common.MultiChatUtil; -import xyz.olivermartin.multichat.proxy.common.channels.NetworkChannel; +import xyz.olivermartin.multichat.proxy.common.channels.ProxyChannel; +import xyz.olivermartin.multichat.proxy.common.channels.GenericProxyChannel; /** * Cast Control @@ -18,7 +20,13 @@ public class CastControl { public static Map castList = new HashMap(); - public static void sendCast(String castName, String castMessage, NetworkChannel chatStream, CommandSender sender) { + public static void sendCast(String castName, String castMessage, ProxyChannel channel, ProxiedPlayer player) { + MultiChatProxy + castMessage = ChatControl.applyChatRules(castMessage, "casts", "").get(); + chatStream.sendMessage(sender, castList.get(castName.toLowerCase()) + " " + castMessage); + } + + public static void sendCast(String castName, String castMessage, GenericProxyChannel proxyChannel, CommandSender sender) { castMessage = ChatControl.applyChatRules(castMessage, "casts", "").get(); chatStream.sendMessage(sender, castList.get(castName.toLowerCase()) + " " + castMessage); } 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 727fd529..43129416 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java @@ -22,7 +22,7 @@ import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; import xyz.olivermartin.multichat.proxy.common.channels.ContextManager; -import xyz.olivermartin.multichat.proxy.common.channels.GlobalChannel; +import xyz.olivermartin.multichat.proxy.common.channels.GlobalStaticProxyChannel; import xyz.olivermartin.multichat.proxy.common.channels.GlobalContext; import xyz.olivermartin.multichat.proxy.common.listeners.communication.ProxyPlayerActionListener; import xyz.olivermartin.multichat.proxy.common.listeners.communication.ProxyPlayerChatListener; @@ -384,7 +384,7 @@ public void onEnable() { MultiChatProxy.getInstance().registerContextManager(contextManager); ChannelManager channelManager = new ChannelManager(); - channelManager.setGlobalChannel(new GlobalChannel("Global Channel", configYML.getString("globalformat"), ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("global"), channelManager)); + channelManager.setGlobalChannel(new GlobalStaticProxyChannel("Global Channel", configYML.getString("globalformat"), ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("global"), channelManager)); MultiChatProxy.getInstance().registerChannelManager(channelManager); /// 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 db393f14..38c78ef8 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 @@ -15,7 +15,7 @@ import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.bungee.MultiChat; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; -import xyz.olivermartin.multichat.proxy.common.channels.GlobalChannel; +import xyz.olivermartin.multichat.proxy.common.channels.GlobalStaticProxyChannel; import xyz.olivermartin.multichat.proxy.common.channels.GlobalContext; /** @@ -154,7 +154,7 @@ public void execute(CommandSender sender, String[] args) { GlobalContext globalContext = new GlobalContext(defaultChannel, forceChannelOnJoin, true, noGlobalServers); MultiChatProxy.getInstance().getContextManager().setGlobalContext(globalContext); - MultiChatProxy.getInstance().getChannelManager().setGlobalChannel(new GlobalChannel("Global Channel", ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("globalformat"), ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("global"), MultiChatProxy.getInstance().getChannelManager())); + MultiChatProxy.getInstance().getChannelManager().setGlobalChannel(new GlobalStaticProxyChannel("Global Channel", ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("globalformat"), ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("global"), MultiChatProxy.getInstance().getChannelManager())); /// diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/Channel.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/Channel.java deleted file mode 100644 index 9d86ebea..00000000 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/Channel.java +++ /dev/null @@ -1,7 +0,0 @@ -package xyz.olivermartin.multichat.proxy.common.channels; - -public interface Channel { - - /* Not yet implemented */ - -} diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelManager.java index 0b58254a..5b083817 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelManager.java @@ -13,44 +13,48 @@ public class ChannelManager { - private NetworkChannel global; + // Local Channel Management private LocalChannel local; - private Map channels; + // Proxy Channel Management + private Map proxyChannels; + private GlobalStaticProxyChannel global; + + // Player preferences for channels private Map selectedChannels; private Map> hiddenChannels; public ChannelManager() { - channels = new HashMap(); + proxyChannels = new HashMap(); selectedChannels = new HashMap(); hiddenChannels = new HashMap>(); } - public Optional getChannel(String channelId) { - return Optional.ofNullable(channels.get(channelId)); + public Optional getProxyChannel(String channelId) { + return Optional.ofNullable(proxyChannels.get(channelId)); } - public NetworkChannel getChannel(ProxiedPlayer player) { + public String getChannel(ProxiedPlayer player) { DebugManager.log("Getting channel for: " + player.getName()); - UUID uuid = player.getUniqueId(); + if (selectedChannels.containsKey(uuid)) { DebugManager.log("Their UUID has a selected channel..."); String channel = selectedChannels.get(uuid); DebugManager.log("Their channel=" + channel); - return channels.get(channel); + return channel; } else { DebugManager.log("They don't yet have a selected channel"); ContextManager cm = MultiChatProxy.getInstance().getContextManager(); String defaultChannel = cm.getContext(player).getDefaultChannel(); DebugManager.log("Default channel for their context is..." + defaultChannel); select(player.getUniqueId(), defaultChannel); - return channels.get(defaultChannel); + return defaultChannel; } } - public NetworkChannel getGlobalChannel() { + public GlobalStaticProxyChannel getGlobalChannel() { return this.global; } @@ -58,19 +62,18 @@ public LocalChannel getLocalChannel() { return this.local; } - public void setGlobalChannel(GlobalChannel global) { + public void setGlobalChannel(GlobalStaticProxyChannel global) { this.global = global; - channels.remove("global"); - channels.put("global", global); + proxyChannels.remove("global"); + proxyChannels.put("global", global); } public void setLocalChannel(LocalChannel local) { this.local = local; } - public boolean existsChannel(String channelId) { - if (channelId.equals("local")) return true; - return channels.containsKey(channelId); + public boolean existsProxyChannel(String channelId) { + return proxyChannels.containsKey(channelId); } public void hide(UUID uuid, String channelId) { @@ -91,7 +94,7 @@ public boolean isHidden(UUID uuid, String channelId) { } public boolean select(UUID uuid, String channelId) { - if (existsChannel(channelId)) { + if (existsProxyChannel(channelId)) { selectedChannels.put(uuid, channelId); return true; } else { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/DynamicNetworkChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/DynamicProxyChannel.java similarity index 88% rename from multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/DynamicNetworkChannel.java rename to multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/DynamicProxyChannel.java index 593308c5..1d66e7b3 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/DynamicNetworkChannel.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/DynamicProxyChannel.java @@ -6,12 +6,12 @@ import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.connection.ProxiedPlayer; -public class DynamicNetworkChannel extends NetworkChannel { +public class DynamicProxyChannel extends GenericProxyChannel { private boolean blacklistMembers; // Should member list of the channel be a blacklist or whitelist private Set members; // Member list of the channel - public DynamicNetworkChannel(String id, ChannelInfo info, ChannelManager manager, boolean blacklistMembers, Set members) { + public DynamicProxyChannel(String id, ProxyChannelInfo info, ChannelManager manager, boolean blacklistMembers, Set members) { super(id, info, manager); this.blacklistMembers = blacklistMembers; this.members = members; diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/NetworkChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/GenericProxyChannel.java similarity index 82% rename from multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/NetworkChannel.java rename to multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/GenericProxyChannel.java index 0ab85ae1..b88774f8 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/NetworkChannel.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/GenericProxyChannel.java @@ -13,79 +13,44 @@ import xyz.olivermartin.multichat.bungee.events.PostBroadcastEvent; import xyz.olivermartin.multichat.bungee.events.PostGlobalChatEvent; import xyz.olivermartin.multichat.common.MultiChatUtil; +import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; -public abstract class NetworkChannel { +public abstract class GenericProxyChannel implements ProxyChannel { private String id; - private ChannelInfo info; + private ProxyChannelInfo info; private ChannelManager manager; - public NetworkChannel(String id, ChannelInfo info, ChannelManager manager) { + public GenericProxyChannel(String id, ProxyChannelInfo info, ChannelManager manager) { this.id = id; this.info = info; this.manager = manager; } - /** - * Gets the ID of this channel - * @return the id - */ + @Override public String getId() { return this.id; } - /** - * Gets the info for this channel - * @return the info - */ - public ChannelInfo getInfo() { + @Override + public ProxyChannelInfo getInfo() { return this.info; } + @Override + public ChannelManager getManager() { + return this.manager; + } + /** * Updates the ChannelInfo used for this channel * @param info The new info for the channel */ - public void updateInfo(ChannelInfo info) { + public void updateInfo(ProxyChannelInfo info) { this.info = info; } - /** - * Gets the manager for this channel - * @return the manager - */ - public ChannelManager getManager() { - return this.manager; - } - - public void sendMessage(CommandSender sender, String message) { - - // If the sender can't speak then return - if (!canSpeak(sender)) return; - - for (ProxiedPlayer receiver : ProxyServer.getInstance().getPlayers()) { - - // Skip sending to this player if they shouldn't receive the message - if (receiver.getServer() == null // Receiver is between servers - || !canView(receiver) // Receiver is not permitted to view message - || manager.isHidden(receiver.getUniqueId(), id)) // Receiver has hidden this channel - continue; - - if (MultiChat.legacyServers.contains(receiver.getServer().getInfo().getName())) { - message = MultiChatUtil.approximateHexCodes(message); - } - - receiver.sendMessage(TextComponent.fromLegacyText(message)); - - } - - // Trigger PostBroadcastEvent - ProxyServer.getInstance().getPluginManager().callEvent(new PostBroadcastEvent("cast", message)); - - ConsoleManager.logDisplayMessage(message); - - } - + @Override public void distributeMessage(ProxiedPlayer sender, String message, String format, Set otherRecipients) { // If the sender can't speak, or is between servers, then return @@ -128,6 +93,40 @@ public void distributeMessage(ProxiedPlayer sender, String message, String forma } + @Override + public void sendMessage(ProxiedPlayer sender, String message) { + ProxyLocalCommunicationManager.sendPlayerDirectChatMessage(getId(), sender.getName(), message, sender.getServer().getInfo()); + } + + @Override + public void broadcastRawMessage(CommandSender sender, String message) { + + // If the sender can't speak then return + if (!canSpeak(sender)) return; + + for (ProxiedPlayer receiver : ProxyServer.getInstance().getPlayers()) { + + // Skip sending to this player if they shouldn't receive the message + if (receiver.getServer() == null // Receiver is between servers + || !canView(receiver) // Receiver is not permitted to view message + || manager.isHidden(receiver.getUniqueId(), id)) // Receiver has hidden this channel + continue; + + if (MultiChat.legacyServers.contains(receiver.getServer().getInfo().getName())) { + message = MultiChatUtil.approximateHexCodes(message); + } + + receiver.sendMessage(TextComponent.fromLegacyText(message)); + + } + + // Trigger PostBroadcastEvent + ProxyServer.getInstance().getPluginManager().callEvent(new PostBroadcastEvent("cast", message)); + + ConsoleManager.logDisplayMessage(message); + + } + /** * Checks if this command sender is allowed to speak in the channel * @param sender The command sender diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/GlobalChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/GlobalChannel.java deleted file mode 100644 index b1f1fa9e..00000000 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/GlobalChannel.java +++ /dev/null @@ -1,13 +0,0 @@ -package xyz.olivermartin.multichat.proxy.common.channels; - -import java.util.List; - -import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; - -public class GlobalChannel extends StaticNetworkChannel { - - public GlobalChannel(String desc, String format, List aliases, ChannelManager manager) { - super("global", new ChannelInfo(desc, format, false, MultiChatProxy.getInstance().getContextManager().getGlobalContext(), aliases), manager); - } - -} diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/GlobalStaticProxyChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/GlobalStaticProxyChannel.java new file mode 100644 index 00000000..69919cb9 --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/GlobalStaticProxyChannel.java @@ -0,0 +1,13 @@ +package xyz.olivermartin.multichat.proxy.common.channels; + +import java.util.List; + +import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; + +public class GlobalStaticProxyChannel extends StaticProxyChannel { + + public GlobalStaticProxyChannel(String desc, String format, List aliases, ChannelManager manager) { + super("global", new ProxyChannelInfo(desc, format, false, MultiChatProxy.getInstance().getContextManager().getGlobalContext(), aliases), manager); + } + +} diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/LocalChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/LocalChannel.java index e4400aa0..db89723f 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/LocalChannel.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/LocalChannel.java @@ -11,8 +11,9 @@ import xyz.olivermartin.multichat.bungee.ChatControl; import xyz.olivermartin.multichat.bungee.MultiChat; import xyz.olivermartin.multichat.common.MultiChatUtil; +import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; -public abstract class LocalChannel { +public class LocalChannel { private String id; @@ -23,6 +24,7 @@ public abstract class LocalChannel { private ChannelManager manager; public LocalChannel(String id, String desc, String format, List aliases, ChannelManager manager) { + this.id = id; this.desc = desc; @@ -30,49 +32,41 @@ public LocalChannel(String id, String desc, String format, List aliases, this.aliases = aliases; this.manager = manager; + } - /** - * Gets the ID of this channel - * @return the id - */ + @Override public String getId() { return this.id; } - /** - * Gets the description of this channel - * @return the description - */ - public String getDiscription() { + @Override + public String getDescription() { return this.desc; } - /** - * Gets the format of this channel - * @return the format - */ + @Override public String getFormat() { return this.format; } - /** - * Gets the aliases of this channel - * @return the aliases - */ + @Override public List getAliases() { return this.aliases; } - /** - * Gets the manager for this channel - * @return the manager - */ + @Override public ChannelManager getManager() { return this.manager; } - public void sendMessage(CommandSender sender, String message, String server) { + @Override + public void distributeMessage(ProxiedPlayer sender, String message, String format, Set otherRecipients) { + + // If the sender can't speak, or is between servers, then return + if (sender.getServer() == null) return; + + String joined = format + message; for (ProxiedPlayer receiver : ProxyServer.getInstance().getPlayers()) { @@ -81,25 +75,37 @@ public void sendMessage(CommandSender sender, String message, String server) { || manager.isHidden(receiver.getUniqueId(), id)) // Receiver has hidden this channel continue; - // If not on specified server then return - if (!receiver.getServer().getInfo().getName().equals(server)) continue; + // If receiver is NOT in the other recipients list then leave processing (as this is local only) + if (!otherRecipients.contains(receiver.getUniqueId())) continue; + + // If receiver ignores sender + if (ChatControl.ignores(sender.getUniqueId(), receiver.getUniqueId(), "global_chat")) { + ChatControl.sendIgnoreNotifications(receiver, sender, "global_chat"); + continue; + } if (MultiChat.legacyServers.contains(receiver.getServer().getInfo().getName())) { - message = MultiChatUtil.approximateHexCodes(message); + joined = MultiChatUtil.approximateHexCodes(joined); } - receiver.sendMessage(TextComponent.fromLegacyText(message)); + receiver.sendMessage(TextComponent.fromLegacyText(joined)); } } - public void distributeMessage(ProxiedPlayer sender, String message, String format, Set otherRecipients) { + @Override + public void sendMessage(ProxiedPlayer sender, String message) { + ProxyLocalCommunicationManager.sendPlayerDirectChatMessage(getId(), sender.getName(), message, sender.getServer().getInfo()); + } - // If the sender can't speak, or is between servers, then return - if (sender.getServer() == null) return; + @Override + public void broadcastRawMessage(ProxiedPlayer sender, String message) { + broadcastRawServerMessage(sender, sender.getServer().getInfo().getName(), message); + } - String joined = format + message; + @Override + public void broadcastRawServerMessage(CommandSender sender, String server, String message) { for (ProxiedPlayer receiver : ProxyServer.getInstance().getPlayers()) { @@ -108,20 +114,14 @@ public void distributeMessage(ProxiedPlayer sender, String message, String forma || manager.isHidden(receiver.getUniqueId(), id)) // Receiver has hidden this channel continue; - // If receiver is NOT in the other recipients list then leave processing (as this is local only) - if (!otherRecipients.contains(receiver.getUniqueId())) continue; - - // If receiver ignores sender - if (ChatControl.ignores(sender.getUniqueId(), receiver.getUniqueId(), "global_chat")) { - ChatControl.sendIgnoreNotifications(receiver, sender, "global_chat"); - continue; - } + // If not on specified server then return + if (!receiver.getServer().getInfo().getName().equals(server)) continue; if (MultiChat.legacyServers.contains(receiver.getServer().getInfo().getName())) { - joined = MultiChatUtil.approximateHexCodes(joined); + message = MultiChatUtil.approximateHexCodes(message); } - receiver.sendMessage(TextComponent.fromLegacyText(joined)); + receiver.sendMessage(TextComponent.fromLegacyText(message)); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ProxyChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ProxyChannel.java new file mode 100644 index 00000000..55630aaa --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ProxyChannel.java @@ -0,0 +1,57 @@ +package xyz.olivermartin.multichat.proxy.common.channels; + +import java.util.Set; +import java.util.UUID; + +import net.md_5.bungee.api.CommandSender; +import net.md_5.bungee.api.connection.ProxiedPlayer; + +public interface ProxyChannel { + + /** + * Gets the ID of this proxy channel + * @return the id + */ + public String getId(); + + /** + * Gets the info for this proxy channel + * @return the info + */ + public ProxyChannelInfo getInfo(); + + /** + * Gets the channel manager for this channel + * @return the manager + */ + public ChannelManager getManager(); + + /** + *

Distributes the chat message to all remaining players

+ *

MultiChat works by first handling the message formatting on each local server.

+ *

This message is ONLY sent to the sender locally... It is then forwarded to the proxy to distribute.

+ * @param sender The sender of the message + * @param message The message to send + * @param format The format before the message part + * @param otherRecipients The recipients the message was intended for on the local server (excluding the sender) + */ + public void distributeMessage(ProxiedPlayer sender, String message, String format, Set otherRecipients); + + /** + *

Sends a chat message from a player to the local server to be sent

+ *

MultiChat works by first handling the message formatting on each local server.

+ *

This message is ONLY sent to the sender locally... It is then forwarded to the proxy to distribute.

+ * @param sender The sender of the message + * @param message The message to send + */ + public void sendMessage(ProxiedPlayer sender, String message); + + /** + *

Broadcasts a raw message to this channel

+ *

This sends a message directly to all permitted viewers on the proxy only

+ * @param sender The sender of the message + * @param message The message to send + */ + public void broadcastRawMessage(CommandSender sender, String message); + +} diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelInfo.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ProxyChannelInfo.java similarity index 91% rename from multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelInfo.java rename to multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ProxyChannelInfo.java index 9514fea9..b5410608 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelInfo.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ProxyChannelInfo.java @@ -5,7 +5,7 @@ import net.md_5.bungee.api.CommandSender; -public class ChannelInfo { +public class ProxyChannelInfo { private String desc; // A short description of the channel private String format; // The format of this channel @@ -16,7 +16,7 @@ public class ChannelInfo { private String permission; // Permission to view / speak private String viewPermission; // Permission to view only - public ChannelInfo(String desc, String format, boolean unhideable, Context context, List aliases) { + public ProxyChannelInfo(String desc, String format, boolean unhideable, Context context, List aliases) { this.desc = desc; this.format = format; diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/StaticNetworkChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/StaticProxyChannel.java similarity index 91% rename from multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/StaticNetworkChannel.java rename to multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/StaticProxyChannel.java index a0b86d3d..56de8ac4 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/StaticNetworkChannel.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/StaticProxyChannel.java @@ -2,7 +2,7 @@ import net.md_5.bungee.api.CommandSender; -public class StaticNetworkChannel extends NetworkChannel { +public class StaticProxyChannel extends GenericProxyChannel { /*public static class Builder { @@ -87,7 +87,7 @@ public StaticNetworkChannel build() { }*/ - public StaticNetworkChannel(String id, ChannelInfo info, ChannelManager manager) { + public StaticProxyChannel(String id, ProxyChannelInfo info, ChannelManager manager) { super(id, info, manager); } From 8415e0c46e1224034f63a4cf523ccbebf4618436 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Sun, 26 Jul 2020 21:01:17 +0100 Subject: [PATCH 042/188] Attempt to implement the local chat with new channels --- .../multichat/bungee/CastControl.java | 14 ++++----- .../olivermartin/multichat/bungee/Events.java | 21 ++++++++----- .../bungee/commands/ChannelCommand.java | 2 +- .../bungee/commands/GlobalCommand.java | 2 +- .../bungee/commands/LocalCommand.java | 2 +- .../chat/LocalChatListenerMonitor.java | 8 ++--- .../proxy/common/channels/ChannelManager.java | 10 ++++++ .../proxy/common/channels/ChannelMode.java | 6 ++++ .../proxy/common/channels/LocalChannel.java | 31 +++---------------- .../ProxyPlayerChatListener.java | 3 +- 10 files changed, 50 insertions(+), 49 deletions(-) create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelMode.java diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/CastControl.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/CastControl.java index bd5a6a00..9d99115a 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/CastControl.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/CastControl.java @@ -4,10 +4,9 @@ import java.util.Map; import net.md_5.bungee.api.CommandSender; -import net.md_5.bungee.api.connection.ProxiedPlayer; import xyz.olivermartin.multichat.common.MultiChatUtil; +import xyz.olivermartin.multichat.proxy.common.channels.LocalChannel; import xyz.olivermartin.multichat.proxy.common.channels.ProxyChannel; -import xyz.olivermartin.multichat.proxy.common.channels.GenericProxyChannel; /** * Cast Control @@ -20,15 +19,14 @@ public class CastControl { public static Map castList = new HashMap(); - public static void sendCast(String castName, String castMessage, ProxyChannel channel, ProxiedPlayer player) { - MultiChatProxy + public static void sendCast(String castName, String castMessage, ProxyChannel channel, CommandSender sender) { castMessage = ChatControl.applyChatRules(castMessage, "casts", "").get(); - chatStream.sendMessage(sender, castList.get(castName.toLowerCase()) + " " + castMessage); + channel.broadcastRawMessage(sender, castList.get(castName.toLowerCase()) + " " + castMessage); } - - public static void sendCast(String castName, String castMessage, GenericProxyChannel proxyChannel, CommandSender sender) { + + public static void sendCast(String castName, String castMessage, LocalChannel channel, String server, CommandSender sender) { castMessage = ChatControl.applyChatRules(castMessage, "casts", "").get(); - chatStream.sendMessage(sender, castList.get(castName.toLowerCase()) + " " + castMessage); + channel.broadcastRawMessage(sender, server, castList.get(castName.toLowerCase()) + " " + castMessage); } public static void addCast(String castName, String castFormat) { 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 512f6c80..7eef5b41 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Events.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Events.java @@ -33,6 +33,8 @@ import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; +import xyz.olivermartin.multichat.proxy.common.channels.ChannelMode; +import xyz.olivermartin.multichat.proxy.common.channels.ProxyChannel; /** * Events Manager @@ -327,7 +329,16 @@ public void onChat(ChatEvent event) { String message = MultiChatUtil.getMessageFromArgs(parts, 1); - CastControl.sendCast(parts[0].substring(1),message,channelManager.getChannel(player), playerSender); + if (channelManager.getChannelMode(player.getUniqueId()) == ChannelMode.LOCAL) { + + CastControl.sendCast(parts[0].substring(1),message,channelManager.getLocalChannel(), player.getServer().getInfo().getName(), playerSender); + + } else { + + ProxyChannel pc = channelManager.getProxyChannel(channelManager.getChannel(player)).get(); // TODO unsafe + CastControl.sendCast(parts[0].substring(1),message,pc, playerSender); + + } event.setCancelled(true); @@ -400,11 +411,7 @@ public void onChat(ChatEvent event) { // Let server know players channel preference - DebugManager.log("!!!!! : " + channelManager.getChannel(player).toString()); - DebugManager.log("!!!!! : " + channelManager.getChannel(player).getId()); - DebugManager.log("!!!!! : " + player.getServer().getInfo().getName()); - - ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), channelManager.getChannel(player).getId(), player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); + ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), channelManager.getChannel(player), player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); // Message passes through to spigot here @@ -645,7 +652,7 @@ public void onServerSwitch(ServerSwitchEvent event) { ProxyServer.getInstance().getScheduler().schedule(MultiChatProxy.getInstance().getPlugin(), new Runnable() { public void run() { - ProxyLocalCommunicationManager.sendPlayerDataMessage(event.getPlayer().getName(), MultiChatProxy.getInstance().getChannelManager().getChannel(event.getPlayer()).getId(), event.getPlayer().getServer().getInfo(), (event.getPlayer().hasPermission("multichat.chat.colour")||event.getPlayer().hasPermission("multichat.chat.color")||event.getPlayer().hasPermission("multichat.chat.colour.simple")||event.getPlayer().hasPermission("multichat.chat.color.simple")), (event.getPlayer().hasPermission("multichat.chat.colour")||event.getPlayer().hasPermission("multichat.chat.color")||event.getPlayer().hasPermission("multichat.chat.colour.rgb")||event.getPlayer().hasPermission("multichat.chat.color.rgb"))); + ProxyLocalCommunicationManager.sendPlayerDataMessage(event.getPlayer().getName(), MultiChatProxy.getInstance().getChannelManager().getChannel(event.getPlayer()), event.getPlayer().getServer().getInfo(), (event.getPlayer().hasPermission("multichat.chat.colour")||event.getPlayer().hasPermission("multichat.chat.color")||event.getPlayer().hasPermission("multichat.chat.colour.simple")||event.getPlayer().hasPermission("multichat.chat.color.simple")), (event.getPlayer().hasPermission("multichat.chat.colour")||event.getPlayer().hasPermission("multichat.chat.color")||event.getPlayer().hasPermission("multichat.chat.colour.rgb")||event.getPlayer().hasPermission("multichat.chat.color.rgb"))); ProxyLocalCommunicationManager.sendLegacyServerData(event.getPlayer().getServer().getInfo()); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ChannelCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ChannelCommand.java index aa61d1a3..9f51e22b 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ChannelCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ChannelCommand.java @@ -141,7 +141,7 @@ public void execute(CommandSender sender, String[] args) { // Update local channel info for (ProxiedPlayer p : ProxyServer.getInstance().getPlayers()) { - ProxyLocalCommunicationManager.sendPlayerDataMessage(p.getName(), channelManager.getChannel(p).getId(), p.getServer().getInfo(), (p.hasPermission("multichat.chat.colour")||p.hasPermission("multichat.chat.color")||p.hasPermission("multichat.chat.colour.simple")||p.hasPermission("multichat.chat.color.simple")), (p.hasPermission("multichat.chat.colour")||p.hasPermission("multichat.chat.color")||p.hasPermission("multichat.chat.colour.rgb")||p.hasPermission("multichat.chat.color.rgb"))); + ProxyLocalCommunicationManager.sendPlayerDataMessage(p.getName(), channelManager.getChannel(p), p.getServer().getInfo(), (p.hasPermission("multichat.chat.colour")||p.hasPermission("multichat.chat.color")||p.hasPermission("multichat.chat.colour.simple")||p.hasPermission("multichat.chat.color.simple")), (p.hasPermission("multichat.chat.colour")||p.hasPermission("multichat.chat.color")||p.hasPermission("multichat.chat.colour.rgb")||p.hasPermission("multichat.chat.color.rgb"))); } } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java index ee2b5c54..6fed9a65 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java @@ -90,7 +90,7 @@ public void execute(CommandSender sender, String[] args) { } // Let server know players channel preference - ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), channelManager.getChannel(player).getId(), player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); + ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), channelManager.getChannel(player), player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); // Message passes through to spigot here diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java index 93c9163e..51bd9bf3 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java @@ -86,7 +86,7 @@ public void execute(CommandSender sender, String[] args) { } // Let server know players channel preference - ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), channelManager.getChannel(player).getId(), player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); + ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), channelManager.getChannel(player), player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); // Message passes through to spigot here // Send message directly to local chat... diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/LocalChatListenerMonitor.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/LocalChatListenerMonitor.java index 390fbd14..b47f38de 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/LocalChatListenerMonitor.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/LocalChatListenerMonitor.java @@ -32,14 +32,14 @@ public void handleChat(MultiChatLocalPlayerChatEvent event) { MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@MONITOR - The message isn't cancelled!"); // IF ITS LOCAL CHAT WE CAN IGNORE IT - if (!chatManager.isGlobalChatServer() || channel.equalsIgnoreCase("local")) { + /*if (!chatManager.isGlobalChatServer() || channel.equalsIgnoreCase("local")) { MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@MONITOR - We are speaking into local chat, so at this point we are returning! Bye!"); return; - } + }*/ // IF WE ARE MANAGING GLOBAL CHAT THEN WE NEED TO MANAGE IT! - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@MONITOR - We are in global chat... SO TIME TO FORWARD TO PROXY!"); + MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@MONITOR - TIME TO FORWARD TO PROXY!"); MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@MONITOR - First we are sending their meta data..."); MultiChatLocal.getInstance().getProxyCommunicationManager().updatePlayerMeta(event.getPlayer().getUniqueId()); @@ -79,7 +79,7 @@ public void handleChat(MultiChatLocalPlayerChatEvent event) { } - MultiChatLocal.getInstance().getProxyCommunicationManager().sendPlayerChatMessage(event.getPlayer().getUniqueId(), "global", proxyMessage, proxyFormat, originalRecipients); + MultiChatLocal.getInstance().getProxyCommunicationManager().sendPlayerChatMessage(event.getPlayer().getUniqueId(), channel, proxyMessage, proxyFormat, originalRecipients); MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@MONITOR - Aaaaand we sent it to the proxy! ALL DONE."); MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@MONITOR - UUID: " + event.getPlayer().getUniqueId()); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelManager.java index 5b083817..8dea3510 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelManager.java @@ -54,6 +54,16 @@ public String getChannel(ProxiedPlayer player) { } } + public ChannelMode getChannelMode(UUID uuid) { + + if (selectedChannels.containsKey(uuid)) { + if (selectedChannels.get(uuid).equals("local")) return ChannelMode.LOCAL; + } + + return ChannelMode.PROXY; + + } + public GlobalStaticProxyChannel getGlobalChannel() { return this.global; } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelMode.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelMode.java new file mode 100644 index 00000000..6aa3fecc --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelMode.java @@ -0,0 +1,6 @@ +package xyz.olivermartin.multichat.proxy.common.channels; + +public enum ChannelMode { + PROXY, + LOCAL +} diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/LocalChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/LocalChannel.java index db89723f..ef99f3ec 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/LocalChannel.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/LocalChannel.java @@ -15,17 +15,13 @@ public class LocalChannel { - private String id; - private String desc; private String format; private List aliases; private ChannelManager manager; - public LocalChannel(String id, String desc, String format, List aliases, ChannelManager manager) { - - this.id = id; + public LocalChannel(String desc, String format, List aliases, ChannelManager manager) { this.desc = desc; this.format = format; @@ -35,32 +31,22 @@ public LocalChannel(String id, String desc, String format, List aliases, } - @Override - public String getId() { - return this.id; - } - - @Override public String getDescription() { return this.desc; } - @Override public String getFormat() { return this.format; } - @Override public List getAliases() { return this.aliases; } - @Override public ChannelManager getManager() { return this.manager; } - @Override public void distributeMessage(ProxiedPlayer sender, String message, String format, Set otherRecipients) { // If the sender can't speak, or is between servers, then return @@ -72,7 +58,7 @@ public void distributeMessage(ProxiedPlayer sender, String message, String forma // Skip sending to this player if they shouldn't receive the message if (receiver.getServer() == null // Receiver is between servers - || manager.isHidden(receiver.getUniqueId(), id)) // Receiver has hidden this channel + || manager.isHidden(receiver.getUniqueId(), "local")) // Receiver has hidden this channel continue; // If receiver is NOT in the other recipients list then leave processing (as this is local only) @@ -94,24 +80,17 @@ public void distributeMessage(ProxiedPlayer sender, String message, String forma } - @Override public void sendMessage(ProxiedPlayer sender, String message) { - ProxyLocalCommunicationManager.sendPlayerDirectChatMessage(getId(), sender.getName(), message, sender.getServer().getInfo()); - } - - @Override - public void broadcastRawMessage(ProxiedPlayer sender, String message) { - broadcastRawServerMessage(sender, sender.getServer().getInfo().getName(), message); + ProxyLocalCommunicationManager.sendPlayerDirectChatMessage("local", sender.getName(), message, sender.getServer().getInfo()); } - @Override - public void broadcastRawServerMessage(CommandSender sender, String server, String message) { + public void broadcastRawMessage(CommandSender sender, String server, String message) { for (ProxiedPlayer receiver : ProxyServer.getInstance().getPlayers()) { // Skip sending to this player if they shouldn't receive the message if (receiver.getServer() == null // Receiver is between servers - || manager.isHidden(receiver.getUniqueId(), id)) // Receiver has hidden this channel + || manager.isHidden(receiver.getUniqueId(), "local")) // Receiver has hidden this channel continue; // If not on specified server then return diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyPlayerChatListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyPlayerChatListener.java index 8cd2780a..e89656d6 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyPlayerChatListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyPlayerChatListener.java @@ -99,7 +99,8 @@ public static void onPluginMessage(PluginMessageEvent event) { break; case "local": - DebugManager.log("{multichat:pchat} LOCAL SPY MESSAGE - Not yet implemented...?"); + DebugManager.log("{multichat:pchat} LOCAL SPY MESSAGE - Not yet implemented...?"); // TODO ?! + channelManager.getLocalChannel().distributeMessage(player, message, format, otherRecipients); break; default: From ac6361c630313c06302134ac4792f5ec3ea14f57 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Sun, 26 Jul 2020 21:08:43 +0100 Subject: [PATCH 043/188] Fix registering of local channel --- .../java/xyz/olivermartin/multichat/bungee/MultiChat.java | 4 +++- .../multichat/bungee/commands/MultiChatCommand.java | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) 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 43129416..150c02d5 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java @@ -22,8 +22,9 @@ import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; import xyz.olivermartin.multichat.proxy.common.channels.ContextManager; -import xyz.olivermartin.multichat.proxy.common.channels.GlobalStaticProxyChannel; import xyz.olivermartin.multichat.proxy.common.channels.GlobalContext; +import xyz.olivermartin.multichat.proxy.common.channels.GlobalStaticProxyChannel; +import xyz.olivermartin.multichat.proxy.common.channels.LocalChannel; import xyz.olivermartin.multichat.proxy.common.listeners.communication.ProxyPlayerActionListener; import xyz.olivermartin.multichat.proxy.common.listeners.communication.ProxyPlayerChatListener; import xyz.olivermartin.multichat.proxy.common.listeners.communication.ProxyPlayerMetaListener; @@ -385,6 +386,7 @@ public void onEnable() { ChannelManager channelManager = new ChannelManager(); channelManager.setGlobalChannel(new GlobalStaticProxyChannel("Global Channel", configYML.getString("globalformat"), ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("global"), channelManager)); + channelManager.setLocalChannel(new LocalChannel("Local Channel", configYML.getString("globalformat"), ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("local"), channelManager)); MultiChatProxy.getInstance().registerChannelManager(channelManager); /// 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 38c78ef8..8d1159d5 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 @@ -15,8 +15,9 @@ import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.bungee.MultiChat; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; -import xyz.olivermartin.multichat.proxy.common.channels.GlobalStaticProxyChannel; import xyz.olivermartin.multichat.proxy.common.channels.GlobalContext; +import xyz.olivermartin.multichat.proxy.common.channels.GlobalStaticProxyChannel; +import xyz.olivermartin.multichat.proxy.common.channels.LocalChannel; /** * MultiChat (Admin) Command @@ -155,6 +156,7 @@ public void execute(CommandSender sender, String[] args) { MultiChatProxy.getInstance().getContextManager().setGlobalContext(globalContext); MultiChatProxy.getInstance().getChannelManager().setGlobalChannel(new GlobalStaticProxyChannel("Global Channel", ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("globalformat"), ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("global"), MultiChatProxy.getInstance().getChannelManager())); + MultiChatProxy.getInstance().getChannelManager().setLocalChannel(new LocalChannel("Local Channel", ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("globalformat"), ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("local"), MultiChatProxy.getInstance().getChannelManager())); /// From b77a47e8c56a3194c9ef59130ba503108f7369dc Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Sun, 26 Jul 2020 21:13:51 +0100 Subject: [PATCH 044/188] Fix a bug with selecting channels --- .../multichat/proxy/common/channels/ChannelManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelManager.java index 8dea3510..1b7a7148 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelManager.java @@ -104,7 +104,7 @@ public boolean isHidden(UUID uuid, String channelId) { } public boolean select(UUID uuid, String channelId) { - if (existsProxyChannel(channelId)) { + if (existsProxyChannel(channelId) || channelId.equals("local")) { selectedChannels.put(uuid, channelId); return true; } else { From bb6b2b821a2cebabe84103ef953a9e23bb9ab4e4 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Sun, 26 Jul 2020 22:14:29 +0100 Subject: [PATCH 045/188] Fixed bug with legacy message handling --- .../local/spigot/LocalSpigotChatManager.java | 4 ++-- .../local/sponge/LocalSpongeChatManager.java | 2 +- .../listeners/chat/MultiChatMessageChannel.java | 1 + .../proxy/common/channels/GenericProxyChannel.java | 12 ++++++------ .../proxy/common/channels/LocalChannel.java | 12 ++++++------ 5 files changed, 16 insertions(+), 15 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotChatManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotChatManager.java index 5cc0bb03..d76849ac 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotChatManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotChatManager.java @@ -20,13 +20,13 @@ public String translateColourCodes(String message, boolean rgb) { // LEGACY HACK if (MultiChatLocal.getInstance().getDataStore().isLegacy()) { - message = message.replaceAll("&(?=[a-f,0-9,k-o,r,x])", "§"); + message = message.replaceAll("(?i)&(?=[a-f,0-9,k-o,r,x])", "§"); message = MultiChatUtil.approximateHexCodes(message); } return ChatColor.translateAlternateColorCodes('&', message); } else { - message = message.replaceAll("&(?=[a-f,0-9,k-o,r])", "§"); + message = message.replaceAll("(?i)&(?=[a-f,0-9,k-o,r])", "§"); return message; } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongeChatManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongeChatManager.java index bf12e2db..269402f9 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongeChatManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongeChatManager.java @@ -20,7 +20,7 @@ public String translateColourCodes(String message, boolean rgb) { if (rgb) { message = MultiChatLocal.getInstance().getChatManager().reformatRGB(message); - message = message.replaceAll("&(?=[a-f,0-9,k-o,r,x])", "§"); + message = message.replaceAll("(?i)&(?=[a-f,0-9,k-o,r,x])", "§"); message = MultiChatUtil.approximateHexCodes(message); return TextSerializers.formattingCode('§').serialize(TextSerializers.FORMATTING_CODE.deserialize(message)); } else { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/listeners/chat/MultiChatMessageChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/listeners/chat/MultiChatMessageChannel.java index 9a9cc6aa..32585b34 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/listeners/chat/MultiChatMessageChannel.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/listeners/chat/MultiChatMessageChannel.java @@ -107,6 +107,7 @@ public MultiChatMessageChannel(MultiChatLocalPlayer sender, Collection Date: Sun, 26 Jul 2020 22:22:23 +0100 Subject: [PATCH 046/188] Updated package organisation --- .../olivermartin/multichat/bungee/CastControl.java | 4 ++-- .../xyz/olivermartin/multichat/bungee/Events.java | 2 +- .../xyz/olivermartin/multichat/bungee/MultiChat.java | 8 ++++---- .../multichat/bungee/commands/MultiChatCommand.java | 6 +++--- .../multichat/proxy/common/MultiChatProxy.java | 2 +- .../proxy/common/channels/ChannelFactory.java | 11 ----------- .../proxy/common/channels/ChannelManager.java | 4 ++++ .../common/channels/{ => local}/LocalChannel.java | 3 ++- .../channels/{ => proxy}/DynamicProxyChannel.java | 3 ++- .../channels/{ => proxy}/GenericProxyChannel.java | 3 ++- .../{ => proxy}/GlobalStaticProxyChannel.java | 3 ++- .../common/channels/{ => proxy}/ProxyChannel.java | 3 ++- .../common/channels/{ => proxy}/ProxyChannelInfo.java | 3 ++- .../channels/{ => proxy}/StaticProxyChannel.java | 3 ++- .../proxy/common/{channels => contexts}/Context.java | 2 +- .../common/{channels => contexts}/ContextManager.java | 2 +- .../common/{channels => contexts}/GlobalContext.java | 2 +- 17 files changed, 32 insertions(+), 32 deletions(-) delete mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelFactory.java rename multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/{ => local}/LocalChannel.java (93%) rename multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/{ => proxy}/DynamicProxyChannel.java (91%) rename multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/{ => proxy}/GenericProxyChannel.java (94%) rename multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/{ => proxy}/GlobalStaticProxyChannel.java (73%) rename multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/{ => proxy}/ProxyChannel.java (90%) rename multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/{ => proxy}/ProxyChannelInfo.java (92%) rename multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/{ => proxy}/StaticProxyChannel.java (91%) rename multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/{channels => contexts}/Context.java (94%) rename multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/{channels => contexts}/ContextManager.java (90%) rename multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/{channels => contexts}/GlobalContext.java (79%) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/CastControl.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/CastControl.java index 9d99115a..0cfcf3b8 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/CastControl.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/CastControl.java @@ -5,8 +5,8 @@ import net.md_5.bungee.api.CommandSender; import xyz.olivermartin.multichat.common.MultiChatUtil; -import xyz.olivermartin.multichat.proxy.common.channels.LocalChannel; -import xyz.olivermartin.multichat.proxy.common.channels.ProxyChannel; +import xyz.olivermartin.multichat.proxy.common.channels.local.LocalChannel; +import xyz.olivermartin.multichat.proxy.common.channels.proxy.ProxyChannel; /** * Cast Control 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 7eef5b41..64718968 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Events.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Events.java @@ -34,7 +34,7 @@ import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; import xyz.olivermartin.multichat.proxy.common.channels.ChannelMode; -import xyz.olivermartin.multichat.proxy.common.channels.ProxyChannel; +import xyz.olivermartin.multichat.proxy.common.channels.proxy.ProxyChannel; /** * Events Manager 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 150c02d5..74c81048 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java @@ -21,10 +21,10 @@ import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; -import xyz.olivermartin.multichat.proxy.common.channels.ContextManager; -import xyz.olivermartin.multichat.proxy.common.channels.GlobalContext; -import xyz.olivermartin.multichat.proxy.common.channels.GlobalStaticProxyChannel; -import xyz.olivermartin.multichat.proxy.common.channels.LocalChannel; +import xyz.olivermartin.multichat.proxy.common.channels.local.LocalChannel; +import xyz.olivermartin.multichat.proxy.common.channels.proxy.GlobalStaticProxyChannel; +import xyz.olivermartin.multichat.proxy.common.contexts.ContextManager; +import xyz.olivermartin.multichat.proxy.common.contexts.GlobalContext; import xyz.olivermartin.multichat.proxy.common.listeners.communication.ProxyPlayerActionListener; import xyz.olivermartin.multichat.proxy.common.listeners.communication.ProxyPlayerChatListener; import xyz.olivermartin.multichat.proxy.common.listeners.communication.ProxyPlayerMetaListener; 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 8d1159d5..f7a66fd1 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 @@ -15,9 +15,9 @@ import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.bungee.MultiChat; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; -import xyz.olivermartin.multichat.proxy.common.channels.GlobalContext; -import xyz.olivermartin.multichat.proxy.common.channels.GlobalStaticProxyChannel; -import xyz.olivermartin.multichat.proxy.common.channels.LocalChannel; +import xyz.olivermartin.multichat.proxy.common.channels.local.LocalChannel; +import xyz.olivermartin.multichat.proxy.common.channels.proxy.GlobalStaticProxyChannel; +import xyz.olivermartin.multichat.proxy.common.contexts.GlobalContext; /** * MultiChat (Admin) Command diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/MultiChatProxy.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/MultiChatProxy.java index 548e2fe5..6f1b347b 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/MultiChatProxy.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/MultiChatProxy.java @@ -4,7 +4,7 @@ import net.md_5.bungee.api.plugin.Plugin; import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; -import xyz.olivermartin.multichat.proxy.common.channels.ContextManager; +import xyz.olivermartin.multichat.proxy.common.contexts.ContextManager; import xyz.olivermartin.multichat.proxy.common.storage.ProxyFileStoreManager; /** diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelFactory.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelFactory.java deleted file mode 100644 index 299be675..00000000 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelFactory.java +++ /dev/null @@ -1,11 +0,0 @@ -package xyz.olivermartin.multichat.proxy.common.channels; - -public class ChannelFactory { - - public ChannelFactory() { - - /* Not yet implemented */ - - } - -} diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelManager.java index 1b7a7148..eec1b57e 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelManager.java @@ -10,6 +10,10 @@ import net.md_5.bungee.api.connection.ProxiedPlayer; import xyz.olivermartin.multichat.bungee.DebugManager; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.channels.local.LocalChannel; +import xyz.olivermartin.multichat.proxy.common.channels.proxy.GlobalStaticProxyChannel; +import xyz.olivermartin.multichat.proxy.common.channels.proxy.ProxyChannel; +import xyz.olivermartin.multichat.proxy.common.contexts.ContextManager; public class ChannelManager { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/LocalChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/local/LocalChannel.java similarity index 93% rename from multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/LocalChannel.java rename to multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/local/LocalChannel.java index 14a67272..c3764843 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/LocalChannel.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/local/LocalChannel.java @@ -1,4 +1,4 @@ -package xyz.olivermartin.multichat.proxy.common.channels; +package xyz.olivermartin.multichat.proxy.common.channels.local; import java.util.List; import java.util.Set; @@ -12,6 +12,7 @@ import xyz.olivermartin.multichat.bungee.MultiChat; import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; +import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; public class LocalChannel { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/DynamicProxyChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/DynamicProxyChannel.java similarity index 91% rename from multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/DynamicProxyChannel.java rename to multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/DynamicProxyChannel.java index 1d66e7b3..0b196d44 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/DynamicProxyChannel.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/DynamicProxyChannel.java @@ -1,10 +1,11 @@ -package xyz.olivermartin.multichat.proxy.common.channels; +package xyz.olivermartin.multichat.proxy.common.channels.proxy; import java.util.Set; import java.util.UUID; import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.connection.ProxiedPlayer; +import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; public class DynamicProxyChannel extends GenericProxyChannel { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/GenericProxyChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/GenericProxyChannel.java similarity index 94% rename from multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/GenericProxyChannel.java rename to multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/GenericProxyChannel.java index f11c499a..1cba5d15 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/GenericProxyChannel.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/GenericProxyChannel.java @@ -1,4 +1,4 @@ -package xyz.olivermartin.multichat.proxy.common.channels; +package xyz.olivermartin.multichat.proxy.common.channels.proxy; import java.util.Set; import java.util.UUID; @@ -14,6 +14,7 @@ import xyz.olivermartin.multichat.bungee.events.PostGlobalChatEvent; import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; +import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; public abstract class GenericProxyChannel implements ProxyChannel { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/GlobalStaticProxyChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/GlobalStaticProxyChannel.java similarity index 73% rename from multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/GlobalStaticProxyChannel.java rename to multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/GlobalStaticProxyChannel.java index 69919cb9..94fa8967 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/GlobalStaticProxyChannel.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/GlobalStaticProxyChannel.java @@ -1,8 +1,9 @@ -package xyz.olivermartin.multichat.proxy.common.channels; +package xyz.olivermartin.multichat.proxy.common.channels.proxy; import java.util.List; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; public class GlobalStaticProxyChannel extends StaticProxyChannel { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ProxyChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/ProxyChannel.java similarity index 90% rename from multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ProxyChannel.java rename to multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/ProxyChannel.java index 55630aaa..41d556e5 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ProxyChannel.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/ProxyChannel.java @@ -1,10 +1,11 @@ -package xyz.olivermartin.multichat.proxy.common.channels; +package xyz.olivermartin.multichat.proxy.common.channels.proxy; import java.util.Set; import java.util.UUID; import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.connection.ProxiedPlayer; +import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; public interface ProxyChannel { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ProxyChannelInfo.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/ProxyChannelInfo.java similarity index 92% rename from multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ProxyChannelInfo.java rename to multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/ProxyChannelInfo.java index b5410608..86862e7f 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ProxyChannelInfo.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/ProxyChannelInfo.java @@ -1,9 +1,10 @@ -package xyz.olivermartin.multichat.proxy.common.channels; +package xyz.olivermartin.multichat.proxy.common.channels.proxy; import java.util.List; import java.util.Optional; import net.md_5.bungee.api.CommandSender; +import xyz.olivermartin.multichat.proxy.common.contexts.Context; public class ProxyChannelInfo { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/StaticProxyChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/StaticProxyChannel.java similarity index 91% rename from multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/StaticProxyChannel.java rename to multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/StaticProxyChannel.java index 56de8ac4..8332e6bb 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/StaticProxyChannel.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/StaticProxyChannel.java @@ -1,6 +1,7 @@ -package xyz.olivermartin.multichat.proxy.common.channels; +package xyz.olivermartin.multichat.proxy.common.channels.proxy; import net.md_5.bungee.api.CommandSender; +import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; public class StaticProxyChannel extends GenericProxyChannel { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/Context.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/contexts/Context.java similarity index 94% rename from multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/Context.java rename to multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/contexts/Context.java index 0b49fbe3..db42d472 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/Context.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/contexts/Context.java @@ -1,4 +1,4 @@ -package xyz.olivermartin.multichat.proxy.common.channels; +package xyz.olivermartin.multichat.proxy.common.contexts; import java.util.ArrayList; import java.util.List; diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ContextManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/contexts/ContextManager.java similarity index 90% rename from multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ContextManager.java rename to multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/contexts/ContextManager.java index 2632e3ea..3bfcb850 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ContextManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/contexts/ContextManager.java @@ -1,4 +1,4 @@ -package xyz.olivermartin.multichat.proxy.common.channels; +package xyz.olivermartin.multichat.proxy.common.contexts; import java.util.HashMap; import java.util.Map; diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/GlobalContext.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/contexts/GlobalContext.java similarity index 79% rename from multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/GlobalContext.java rename to multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/contexts/GlobalContext.java index 26b4f95b..785e1001 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/GlobalContext.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/contexts/GlobalContext.java @@ -1,4 +1,4 @@ -package xyz.olivermartin.multichat.proxy.common.channels; +package xyz.olivermartin.multichat.proxy.common.contexts; import java.util.List; From d3faf7c767debf3121dc0d2493b0820e3080262a Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Sun, 26 Jul 2020 23:11:53 +0100 Subject: [PATCH 047/188] 1.10 beta 1 --- .../releases/1.10/multichat-1.10-beta.1.jar | Bin 0 -> 622602 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 multichat/releases/1.10/multichat-1.10-beta.1.jar diff --git a/multichat/releases/1.10/multichat-1.10-beta.1.jar b/multichat/releases/1.10/multichat-1.10-beta.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..3a51c949aa0730ec87b1ef636da47e815bf1a6a9 GIT binary patch literal 622602 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

-(dK<#!rc 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 z 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�lRCLx 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�QPB62mY+XaEjld!K2Nn&TGz${8& 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

N{up$>qX(c!ph9niZQ6CyN!z?xX0RE_RT-y{P)+ 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%0DZAV$L0I1l-XDHnuzg|(cS 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

t)z4++VRr3 zbPE@an=vm&Y8D}qRpy0-55BMu?WLe@5#P?S>aM@XIb7&5N}29x#jf)1eVN%(D|jbg zx-`hvMQ3%FSKwAO(UfSj`)OEicz-yP5pF<dCcAjLy*Y9UfYv>B6A|Ct4?m` zrYTQixM?OrtiERT?9&Y9M?;K&c9E}C;wdz4LiJ<^uSbV;6Ej&D`hmItnCRk0DCw<^ z1xgo)wO|3T9Njjt8f);B>>tR&PqRZE#TuXmE^+$HH4=ucjeTx@(cDZ;{xOl%OJ+vL9#cNT62~~4 z4maYVgsxR>p5V}Mrq(0*17H}DhM#6NH2@Na5;WX4g^y*rB+6slOecn*P8vUoU&Y=6 zOPm1}!oK9@GiQnqw3XPQdAr#mUZ~8wVLZWPm4@C|yCM`f&@byF@NobYel_}I_y#Cj zo_{&I$v^sK+Gs(;f(99{w2%G^AQF~2y`R$IX$#L9L;9S)sQ*}{Jnc8{;H|c!$Da&{ z#U|>MG0Lb2G-64ON{k~wQa5AXr-6@Qj>kyl$~?NRQ`yoo&W=(!9=VlRG_INp(;SiP z?AY|w4T{~9E{grS+Q%HZIMNY4g>W!h!jA>5ADY^=BN=2jqFp>cNNKDAHV5y9UJ7TM zdXlWsA3o4^@CK@tzgQJ>7a8H=6j5hCD&{Nd7ox|EIXE|*`##A&nB&Ly*?LepqxAabMs1MT~A-%s0Q#*R09}Mbi^*lxg-E$S4Qcy8| zkujl2Q@?WM{K9kh4Ps1Hrh1xA(tt*%!8nK2A_2FY4P+@30j_W|R!Kt4W+9)?r7{Dk#jZkO&nNpWWL9xLh> z_i!yiX($a9BBXZAOn*ySx#Q?pi-Lcrjss7uWX_o*Vf{Ekk91DsotJax1J^S<{Zdnm>Zk;KV{(6p`B~+Z`!mDv zt#QeHYJz)kJ@>f0+vbny=pOfATMSkH_IR-^P~GlHU^{P_ZW7^}Ep1t9gB}y3>Fp7m zv}MT-Y;Fs8Z?5f#qq|Ef_l3eKfz#7i1wp|ROZYwfZlM>r`LF_!Xg}3A37b-8m8*T{* z@1x%r!*E*tyl|*2Daa5K zB>PM9Z#6uW@r6pZYdEiEPt=f(W6?v$eVD$fxqQ>j{3YS0jI&qp7k7gGhc}P;$a5)Z z_Y7=Ub~%b)R>jMbqVWaKcP1Jdk(anB=>=HTov@Qo#F`$sWrKABqVxMKsYB%*+Sz`OFq#1StHLr|;P#e6t&23?JFA>^fh{h>M01lWliOgHPWGNtIK^ZbKgF(o6i{nYx~?SLH5-n z+IYF`?I97`mQC}o49DSo1PZ!98n!2J(3@xNwYJo}WA=%`FMpci6uyP*g}CRppETPw z#EltO@-c7T)2@uPW`po9%dE>uD&=a4)Er%%cteH=XhaYg_-S z1(reQxkkm01BS(;5XU6GK#3oW+cP)J7PP%Gy&`zG@FpSiAHrAsf?a-IKUkbzkdZXP zIKTY&^SJzHRL{__zzo0PDYY{-cfXV`IGWl8M)7wF&lvK>OYWSVJ;^tAbHA9h!*?9- z+EVsrl3Zz#l*XMxT3gw+9fBLO@a-X^d`WA9uiN8AB|(U|ak+b?mQetG(KP8)xo>pu z3I}`t?91)xpW_dj=j*WOkWL-&JSIlIQPeqU z-&{X1gWb|YD8wgVsy#tg|0= zm)oBX?N?3MIieZQkH{Hers5|_OxUbfJuI|Wd7NLdj(tMh9e47^2jue_%C*wV>IXLe zMkz7;oyW`MF-rjXoN+FI67&Odujs>fzP}ya3Ymkoj}ydTV5-HkTIj>;Y%4GJb{F>I z&=2oq8XN%*r+D4Q=Y!t+I8h;qs3=tLaJ6wP9hj*k&_XveZflm%s07^Do3#0HdJQ6g z8O=Bv(eC+I>er3$aC`Vj2||ntRrAh#L)@(iU9M2Ec5y-)i3^*PEV$$ z=V9WCbV~b5Vj?q{b@;A2&X=3eU@VtgAeEh3Dmc?}tdf#CwaO%tRDc7Ef{dyXjzm4W zH&x8xFiS+*91X9|qN23udiw{Nd1DaYA(T8D>f2~6zFI7PSd0_t()d5T*|-PEU+D?> z{){xgAk2?7OF{Gz>+#e8)m51pe|pXPJ|6h{s`^i6Iln$00={KmkiC4X8~q)_64QuXsv~YL^x4JDx7g@U4dgrff$QH>} zi#hkLcK)4XvL`6W^rmZTZn|1epPlKm-VBDjwR~FJX%d@O^u$>T5O9-$HTngg^;~lX;`6meLD$w^#0_uaLLyF#rE8R=b zx{@OGtL-qn!yl2~Hu;~Ui-N`e;6);vkow%lNrmr`>krKajS!MTEnuYu*dhMY(#uM# zfWAQRZ91m4&X;;XE3OMy!6C?z^&v6YR=d!1SyhbLW?&bV-IX>cGXB(?oBre3ltl3DjO(-Ioqj<%2RwE~Hua*ljj zX~-y91Gk8Ad+ZF;^r+0*RGdJv?T8mKJ7-_5eRlLJkjJubX87o`%)y(_!wD~7M=n_& zU$RjMDOM4yNGAdV)()z4b%fIHLiA-qy6BFQDu6fnzSM$iH)(72JpXI(g7`J%%BX$* zi=Xrzn39vH{#3|>RF7;U#OFgei0$DbR@08L@acHR;UdXB_F4`6_HF%da0j|;y?goO zpMDcs+NxCNNwv@THzE!V3XfDt6#aF06?_!_)m`Az0?;cdB8}xZrDflHf0;NS2-hRX zvO@tGVkWcZU4y0dd^0*3H9disgMkaGCAB+MhzN~K21}Hj%G{-X8D#H=1FoXdMW z%pYz8fEICIT7X~u-HZ(IYY#TT^ZSMst%O8_79i&0{-4N z*^P&6$UNp(S%8E+ml9bguv_90H#-i2L>n&*debr1FnDZtd@8krK#FtZ8y-&Fm}3&L zT4T8)PboCE#o(io`1}KeqOa(~3#ew08S%F^{f<;kYoFB4RZ02iFNHv4Q;l8aR?lbH z#60pxhhAc)L<31MWP9#K__(q>Ce|6ALSH)7Vods8V?oU|7I?1uDHX!bPc5zQIY-ok z8p)w<)E|At_uw}p(T6pYkn-Bd0Wo--&ToVlc5sgw#~y7yEq^!8>XlhEz$PuFEKO*5 zHfWw}^BeNc$sDHUs&+WZ?0g_`CxWU!X9no}wI?jxilZsG@4%eUPm6cto1;5asYOSUnX5)~Bk30^CYgy2<1 z1c=F^T4YSuXTi&*-4pkN`**vi67{BeUKiPtmJe7QvvRKjMaHu;342~T9h7e2`+SB? zDV2VFh>_!)d(L1zktcbu;J}_^nI@N%4!D#Egkj{%4`kSG5hDa~!hfT~Jd?^F1#Lla zOriUJj*K;utx~Z=Ii?ub66ad^&>}BWT&-Nc*pr5!ou5q?pos;)S4%6q=w13^dSg^800)6*x6kzySI47 z?d=ZHjDxX8+CC$ckVO}aMIHNPjPN_#^=KJZ&at9$NA*4Wx} zuf8i^7O(!>Lp+ipt>tKxdx!aQ^~r_(GE?AC!FG;33iLMl0S^AgR9d6rnLN_`8Xx8r zzwi(9^yqD5L3_9C;@2sZZ&*?31f99O9g`TlWsczR3GoP3RldZd7|hlow-H|kYR#y- z=z#j7^HLdp9scE=8`l!O0ZR%t_SJNTTEMkMNXO7k$SVR(P|2cc5iHYnp_E0JLx2Mz>Y2zZ0?ZF)ZN37Pa-1xD&9rTWmPIT_4tfc6 zZV0+uN=I0sS;fhbro7cWz||zJSE5;5RLbgDd}`k+rqK$thu6r8ju{#(8Fe*zW#Su) zWcElZj9Fv+iO%evGgm9k)l8c9@N%63m9;XrlRKmBhd1b3b=;KP|p z5v;~)sS{T_m4hF$UwCwwM}p)qHJy9&+E5ruB14I|Z_}UPFSGKP8zEdfHqe_{62&O+ z@xjvlj64`R|sQs^^sOamF*nm#J z7n^?Cy(}E&HVEV5^k5ba8<7W@8;qS}TsQ+DpmU|s4~ z6U(eI#M~cipulF9rSc1Bmr!4?G*9}k#$C7yH%v7s8Y;G$0cNOi+Wxc%ach=bBLdAi zl@Hn?2jg$%05Sy;14fyW^16xPJ_gkKxa1aX7U(apmRJCp0%|U=_pC^|HVC$2a0_U9 zE5vmv8rnRPrevwo@P9eqX1k_Ygp>UGRrEt{{(pm=B>um_PL6i&9zq7z)&_>wCjT*n zG_m<_o#LDy_>-~-QjH~Wz-^ly5Gd$0r~;x0FjX)$!T=&dY8i(#o`F6SvKg7=kcisW z@VoZSyD(_GbHBjwd(Vy5UC*qGnwyJDXU8rHea0$o$MnC9(aVZ&6*Uz#wdKpSQs3Qr z_6Ul{Yu^?sZOiZyO5aP%USv*uBuHe7pfN^2f!LxOizn#15v*-kp=)naYudyVizsVCH zkFt^E2p(r@%~P9buq4T(pwS2)EmHMmhmTSWT6s|;MjZ>t2h5REUXLzg=ITdcI+{P= z{A@*@ainn1pg*|;@Xv1e-OlDQx%%)RbOtB4ZX?ME5uRsjAy8_Y_#Jiw1QFU}8KwjnNFz@pb2;<^pjyCLt7#X|5L!%6S!^S07A!9=($H@Td zKlguO{fVcJic_JDB3Cr5iv)uYoM&-o5CrE{$CKh@5aqp)k5EC3TZXzn7uJP3G`H>= z%0!9@BUwSg;>L;1?}voQdD#QFgZx8fKGX;8z$O^Y>^mZJ%uqp+(zU>^?p83DBj-0teRMU!h?-nP;)GZ}_m!J?HlCy7CW%Fwk<%*XO8I&O+=9{_jC0oo43br6ciO9C8gvzn- zvM-IHi<#p#CHmrvF*w_sao287i|94htKRq&F4uVveEhY@`ESW4pTvcq#A$9eOxT4^ zu6oF}v7&V~=POas3#Kn&!?$>bu%%D}!A>7@upa5XonlFH^$B#!P=Mk-?y@ch(8W0_wy8EVsk}uOR4}8r*a= zx%T*|$Q3*+3(Kzp@MCeh-7PW^q^$?{owGgu0(_hyF{?(gf5~-TM;J59=jc5&c+l)5NVYUvXM4VhWO=2qzF7A@;LykVh`av9C8G9Wh?;5dOsV22 zH@n$qkwEv!fftV8@IwlK;-EGO%i$m+N49F1E$%*8Zw5R;ZX*CZ{ek3Q{bRf$<$*H$ z30Yf%m1$dycF~~$1uULuyJ!pK;o4Hd7v#VXlfKb7Z@8`3n-{0$ycLWSVIA??YFYH;^NGZZWa$p!s!CC1N3JZOIxVWn3imI zXglAcX^UC6PMmrycMcQ{-;MMJ3sst^jNyqU9(j!?&LwL4fEI*kb?z62$n5^s^TrlomjR+x67wH^c zupVg*zp>HmP@7-wtY{-jy?+;OpysGCPJIs(eo(O2hNP?DSR@~MEN?2JsK~rdFR#G) z!09DuphtX$?1L-ozqKm-4pp;JyuS$~C;ub&0+R57Ax(rW|AL(GL7gt#QgCZV^g0~C zc%SeMOO`4_@ew2bg)U8`rSJkyZh#<7^sW$%DDj7>Tar2emU1Qcg-hO|`e5=xvOacb zQKG(aYzO61ngy=f5Y=`P4fRqIW_!cX{I7C7-q2i9MR^N`cQ@5aR@>XzBg$H(;b(X) zA3gZ-GG50iSTevG!2uRd7qOxSWiu*0w8;X;FDvp|hWlN9ZBDvQWHthpJkB%mfn(MD0Aj~r1bEg+x)nk9{*6j&4}jkLx> zLKqLgWPdlQ|Y=q2!mL9E2?30z4>R#+P0?_V z^NP?D_6!LTjWGIH6+==rPgPINhIl0DU7x5 zFyb+o&1G|HP8^1u2xb+GS}!OyM;OP?Rlj>nP;RH2f_Ae$T9U%mQY-F()nwgb=uQoM zMRKPZtTXp&p@BL4MtT4V!c0m;m91Np!u(S|EN8OpuiSFa;{Gd34Qo@b^D9k-poYtrlr2Krc%8tjT+c?+ z%<8kcthMPOmncBs=%zc6V%8JVxWOgq4p;|LF!ts|Zssmj{q#^>F>UBcnox9w zkSltz-~eTd0u@Qk-x3tTw$a$VU$|%bOqCsJYk!F;99(*5I<;K3F;jf52sJSeE)bCv zwRuDzklp3tPb0nLUN0!VJ3scyzG3RQE2G?PjJV}6=n0~?tGB8{(BC?~uSf$uF!$x9 zFe2`$3c60by4NFrt2MHRAIa=$EvyXKXSPP1;O=6O$5&f3Ij61iXu1bjp0Dbr6@>g;fvd2IyYjr1C7?+L2h7q6#U-tfB4#}Vg0>*-* z2ZU(hMopeLRsrfzhulLB1Gqq7rU+qx{W_f3v*>9`ocN+2%?scMdk#U;<2n}UruYUJ zvU0$b+#m`yW$6G*O7gHpx-H=`OxYZPswTlq;5yb&J6gC3gIth10Q3M@y-YycI6xg% z%mN{J9#}pJR;27@=gFg7* z1OFm|h+--F6lv}tqK|uH!;%I#V@~{&s^Ch$16CzDZB=eysDIAo@1h*5Vo?`z%`#im zY=F|XCG~O+OsToDTSdslN}mPRP_G6-O~@i^xS1wFE~uFm!fZ1?H~h>$1o->t?auKv zbfPBltd3j!yu&H$YYr9rgoQcc1^fDx0`xvouDQu7{>ptv+_Mzb{8#%FC}#xl?h&X* z%{E!1J8T*nU*au5(+h1VnjUzoC7^R#u;XbX_y7)iD5kD_oJQH}#fFCkR%-*gv56jM zZl{k%YhN}d{kskdO_Q-zE216j?@GYmy6jHX1+QxUo1h%55MKR)IWG4(A?__?r`Z#m zQaM>HJUFB#@WITg=8JQkoG7`Y2;=a|rcXqSn2%>vq> za#sm@%u$7$!|AnX-Ea>oRbQiI<7%}CY?miqN|rOdrP|5F<}$rUEoD~vJ3FpFd@6I? z(7p4w$oT}@295J@fbqT5iM!y`(gq5zZ_iEr%ql^??*gR9|4RCx{k|UtLyo7<($rdS ze8Vyb8n5aJu;Zx`;t6;&TgnZ+!E6sB-#~+}?bJJNY}`5okFoz|LHSFbWB=WP@Yn1` z1olM_x=)X_@iTAV+HZ9VtzVmii?N0ZxIV`NQT%jVC23f@u_{S6pW0-yF}|9a3+foP zxV|#PL}`syzt|8yDMeCjw^7RD%4T7#g!x{w`X93sBbRdR(8eHwRsM_)xK`U`Ze|1= zBZ_UAY?}{FFm?%|t)9^S^P)Z~h9RnDT_h~Xoa8nZmPJ7m(lilYpJ4)icoA^wqIuD= zGXoxyze5?Ks2@(H`}%OVRrdNM-5ZUNMgJhI)vH0eM+oD>1K~t6f3k%r1tkr9_B@PGawNY76|90OXyFv2K!Kc0@^h|P+uNzt z!7H#(RY>L*1iD7mmt~B-7&eq!G+82!6{3V7*7`tb!*W>^jJBn!@fS@W)xG zm%sBhJE&-SLR70oCjz}!D|}xf_P(wdfWA zY|{{;1@%Tb=yMRk8rxPas2H~2b&tog?j5Gzwm-+R4m_IFOa2&}JDkt@3_EVG$Z{T! z9pxI*TM_oTiExeir3&lHL#Ph@R)lqJazttmH3n3dxv5XpTPNtbgm8n+TPo-|mT<%J zn%dlZ)>23}=7#znY$BewZUXy9#YIEdV{kOp(6{jSvD5by)T7gf;B}Z@#w(%Ea=9W& z>r*S*jnaK{$?MKZJmpuuz(?scq0)y$(2HG`P{~Up*c~5Rm~^w}$MS#DCxk7$JsK<| zF}<6(Ov8N2if~fQO`OIP>5>y4ER*$rj3+iKyR(lsaF|SRS;IYkPHLFJ8lwMHs;UI5 z@BFE}A{4YX`BUn$THwmcX)O6kX?W|P--500FLxQ9bN;r16r1?nNxOJ9n1Re06AJ|4t#QxCBp{-fTDXP@k-?#~;A+DpJ>Irbp!P^deY>MC=y+6^Wrys6q zf_Xo%d8Rm|Sy>G^aHwk2u)!Z;MEl z_`Q8|qq8RH6+Ry~p}fBMo$5vxQqwXre$9eBtJJWko|v7IJgZhP{WZ&7kjAT7f#(g6 z*s%S!hU}H3T4pe=m6{Eku>C8SB+TCMB7WCGwCiL-vpR!pR@`otD)EXwb3);4_>VLz zVicY5o~aiCi>~;QXM;ODKcUWx6>8h!p&%S>{sg%|Tl+)Fn=^uF6XRMc-rbX^h_;WoOX+HD9>J?Km|>?!@Z-@7J|Zvi9Jd<~iJqmsyX?S7V&CuUro zeg;69LVkcScw}>WUbhV!r}H+-cT?y&zcJsvZ?n1U@Ba|26Os-fJW+rB^0)e*2EKy- zyMgb2Thsj)(KRP6!Vh^BarAV(!6fULB@{zwk;H~*5-b3c1T^zEN)T*Az*20vpd_iNp=_dCE!EW@f4|qfKl}dnOsrcb@NC*7lPnEzh#9R$iQ{uiZ)K z!^w0O`@>(q+8#;a&U3y%IO$n!NsST*fmZV3Ym8y#*X*fFkHxW)8BF8_Hbv4&CMBW2 zH^?olJV`B)B0Q%Us*JLNb2}zT7tUFrF1cyw#uXp=8BlUf5I=~G>=u)9z@|ea^u|?e zW`nvoZnk4plSPV42I~_?GxSCwivxHigl1Nw%lVlRTo2h(A+fnqAvJg~J6}5RG>~}TYWo&2d$`Jqve+bFUQ_jMf zczbAsgg{=MW-j}Tr${034P%bJj8!ei{{T+1{y-MPSgRx>r5!Q`tgC+;gJr_@_c7~+ zkPmkodd(oUsI%A(C2sI^i+%j9ylU!Gh(*KjC_C;p@UyH3ZCdwV7`7VfR|S6Mz> zkv4A6cH`rZpAD7dMtxC#OUu^2Q9S8g{Nox zb*5tU;`$+mptuD_Fe52;bgYPhkU^}N1&7ewTO23N4Uw)YnC_v2wr4Z_5gnEhti!eH z>~bkD0kI;b$8~&qycB&k`U8$xL*?!IR~3`xUMO5BxHkh=VVI>vl6 zL@OE`nj9bkJ!0tQMZmlj<=LN`??!wx5%Un6wAz`aZm!HUzMUrL)$FcMHNK$(UCSTS zyx-H*-zP8HI?ODd#MD140~e^CPyugZ8UI{<=egArCYT60TyOyiA^2qX^mjf?^FPXW zpApJEZa(6oebT{ol5<@cum_un`TYHN4o>qSBwXs(nme_{6PUc9k%YwnafiQ%O!EcE zZ&TnUl_9<{AwIgvTbOmfINbq_XM?SBXmejda!wl1s8FUn+qlK944-@YY!a25r+*ch zb<7WyrKAEw!H6wL+gA6B%rz@V@476RSTJAdEccy;tWty3FW7CE!#U+!r3bgsn!(|t zK1(HS`Eq~et{J^u>8#NIiuIkHqE^xS^Q;V)v9~fNE{8moRyHt|<}mE!D!{``$=V@l zf%gd_3cWn9)>V0|B0$SzweEiRWB`6rWoSFmvR}Hi*OWU5YSWqPo%1zh=_lH>k6P5> zG~Ylz5+kvl349P*jPO_G39NfO;R_8TL^D+M#+~xMw(SibLu9aBW-dk8v>lYP2P`U< zr%_L%hz8^^(^ow;CtATZwMd>en7JbxBkefiQ*5?PWM=n_NB8ud1J!~$Zoq*C% zeT>75DSL+?)#1}MT0_ZImd`q!OGivb-Z~U}qYT94bDE@0e)x>m?KRN>7o5NZto2{613Wh9%-ODv;k*UWaI2dkSS#Q+&VyDAOI`a3@(wUj zirm-oiCw^8DLC21POc!)&| zq7Y_-5@-dRYg)`X3ghG_E4^8e)`^neETd#a9}&5Jv7Q+rrnypupY!mV7lC(Z$=m3+ z5}$^orj={qVL{`!fapfd=~S7yvAV*b`buDd^9+;Lsn)?i8xxDPi8eG+_B_Fkeeh zItv-U-39U||3N^rv}cay``hVxyJ?5?M{E9lbme_lZNsqMa3*Mq$D2x$ zpizs#{(Dxq1ei|wMo=2DCqlKk{qJt|YiF5(LOtse5unPD8smJXW(w#082JZ81+}1t zDz>Lj2hj4H6w&5&E5w`-u(kjVKaBtl^N=9(+mGfSsYJV=qd$|x&4pM{389zbH!K~p zyD`o=BR_~QdN7;eKbzg1m404s)=E-8pJ271-@ic3x!${N;mR-Y|1=TTqOm#4KfZKc zSpQQK@xR*|%R8Fb8#tO6|KD3@{N1<5&mP1ZmD5xLN3@9k5aN7<_CJ=}hQIuVH6x^R@6p?|26u!Hh z?B_qe<6AtFH?4rv_nz<9yc?I9@oA-RpBKho96>sx1RR;`yXGR(h=Z}`t`pJhWMPlt zh!L3}F+wMGwplTdlaXw;hk2bgRxFD)*pS<7L_U-}CPUHg6*w3{GNX`3po|gyRZ&lf z-HaX*O%7?*DPGYskY_Lxst=326&Nj;mqRgS%bzYV1|{js!)}3DC@YYUI^6e$e*6-0*qyV zD`_pyfh%Kzv-FuEXAK!pL#kD=lH#PaBsO4ZNnj5yA__UzEQ6=hW39ANARxnrAD840 z(*Y4vE&SLSHmLbNl$#{H4^Cv<<3ki`@B)9z^N1l5i4)tJ_|56vM97^JoIBMussDXu zuNkKPH;y&21TskXbGutX_rX0NSA+`sSre9@PW;2O=)Kvp26od5jy;nGtO= zlMEJzSTQ`Oj$sxpVTO^Q2QC2_wZcp`*~52E<)@Y>fSj?B?voSHFGmHmtw9*vNV_Rkm)`u3D;#Ks6Xf{_Ns=}uGJX-1x~*6=L^ zi2spI@K}Zzch-{B)0#N#MYeVecxpHg+Z;Rbfw_n>t4Z6pZOeh->suTyqEqX`1w0TU z7Ju!)sU;tXRv?PC?c~^_pZomY4%eM1Ef4F2Iy$TA+{Y7qNe`E(b+MpeA|&&Uo^_?) z66^RERkK0*VtMOt{v(Z8w|IL8Ai9YK-$z*Y(UjgMWis1Z(s^Ctgb@?}*O)B4bs=!G zVTZ2qicpSAs$?7QqG>2M+Ma_;r#Pb<669Sdwx_W0Rai+FLv31`iBDckUN(Gd(Id?h zdOFsn95wG~hO7^0D}D4EAFY-n@A0L##=W z_Zbn2uuV63^sZ0y1e26)trG&+~GNKapvYq~Z^K#3FwXUwF;mR7MKe+ozu2 z^hpzW3{fGRWbTSVYQe{P!j7k5dZ-(I$m89lm@CL&cvSKESy--hykrR}lkK9~4^!=rhs$A!g|f!Qe-tzv}Fv`V!eawsHr48JU<5L+y$ zLuLu16}zkMZK}+O8YO|MwsVO5UUXe(=ycx5iQ;lA9VuymYDhmR5a>kAiv4TGY!8kP zz#W3j88N*B!LA&#!2%^h4OGQ~m#~I&1InTn&Pla__ygd;PbAUo%TJsU2eY-UE{Vwq zI~9#larmwip}?g{R)tlg>GcIU9!6y?sIU!xQ> z1I5GM;!1wUf`%}Fwe1^Fa!F^{x-`@?g&jDi9);`B=Fd=UWCzr%T(R6QoMR*k@H%K$ znF{)k{>Io_wuW7=LgnlN&ly>nC%FV2t`^;@n_o|GiiYuQf=o@cC(dDo62dqj9b!Y? z(_pbEn9vm~&2ZL?RJ+lQ+c2&+ZW^|-&E?aQFv&XI(k{($p5gpzZ&x74bdd?aW~0WM z2cIg-7+7p)aiGO$hu`cfb(Sao56+E)a8lBr<(lrD;Gm8tMk^(gjcn zg*5QuHXlY(5IQ>YAo_Z*GvHv3PSYc(q8H|DaCVU?RR$}wu%w~s08RTd9bWje3}#*v z0WeWy#%PHcl`!;TjJIPqQiE@@qM0x%MtY%eHru8W#7K1=jH$c`D&{&IaS;QY&hJJO zuuaCy`JRVjOt++MOzWuU_D>fssqj|M%?^CB|8-8Tqb9Sc71{;5|LLm`_Hb`glDnFF z4XGmXiyHo={HS5^$GRy)0VGub@~>dAyGU+eRyNo##;bLAt576Y)~{x;a$4U4SV02}yo zKvTs8uMS7b1Hs{eL$uRJ8V(B;?rxVxkXzy(p5_C2fCW0#tjJfR#IGGE4(vc2o3j6Y zfO8O`v8Emwz7e{xQK3kAlI)P4rQe7?nbc_C0z7GIerJd|CRm9yNjrBk+`tRHiJ~5w zuM@ad;J*f`gEV9dI)rzYLhx6f|L3oOG~|Se;5LW{dEfyR{=Vl8?vRwkx9l;5++c4| z|2q@1aXY^o6cR8gF!+C1d#4~#f@n*$ZR@mc+qP}nwr!ubZQHhO+dOT*zIW!$$3)DH zH#go#MP^h*eN^Sn+&lMPxt3%eBFCACWL^;ck$;Vo<|`05Gj!X0Ay>93?H#kQ^S%w8 z{VBb$3GtyMaaezX@E1}@*=9U-gHy53wKfsbY7Au?E%1j)O{ey_i&|eY(yC7NUI(y! z49Gnv=+Nap805hwDuP{bCUN+!GJh9_tpkD@SAR|>{BtKpG#9JPXeyNhCmE?M{MH4= zStxav8pYg~eJ0G~mt1}ZfpGu30MCZ|ZJ7<- zhI|lT@#gp40GRi&EjGnsHxn>4GK@D4bl$BLW#%9d-0Tlnfm zoB+CugS~?eH%q1SR)M@ja8o**89~9}gpT42HDYH-jkIKY6l=UHG881!uflc~`k(Q( zOZ65sy@z8zT1n<%cx3hDgLJ^>Bn_QYgs_Vgh3~5JPxUP#4c$^cAz&Q5Bv0ssz6upT zL`}ul`FExLSXSDr_zelaG*+bUnSfh$3z-|t zTx+~KK^BJzU55v;On{dgnH%pvgf^vUT(DGZCvQHS<1RFPOnrg^?~@T@qOu#J#&lrlL=p@`R_C2(ty zb1W6FlYNRnjn`j(x8^5mz^qWS*9jO5ms^zk@-ehQ!GTrpgj(U( z8oZ^Odo+{iobZ6kISz_s+aYHQypsxpcJDTxm&<+>gs({bC%9OHRoPwZqgQ~Qb{Cqy69n$3FMlBZvdMyb`MY;4_id8V0{{X}YEi5$@aAcFjkS4bCSB z2PxgIhz+=q!0yw?a%(T3M2SeIc+Q%Q7;$N;c0`}8@0T51c%JO?H(n5T(acyQL z46TSuhuC7=*84Iuv9|N@gb3H;DgghqxfN0(20;K>xF&)WSa! z*~XCwrVUA4A%c-?v{F;1*+F#7OxRa%0`Mequ5=^1AtgH}gsHkX+wjJE7wo->2mi9E z%U6>-g91kM48z=-OJRmI&@@ol<2sQ;+OR=~`Q_SnBNy}y?>y${90^6%XYVxu`6cip zQ&_}~Sff|$ej^UP$=ouwVZ@EKEwDvZeRsF>S7!PvHi*808#Ncy^k-hU4el*X?Bdb} z9UfVo^Y1IQ&3;Xz`Cr(?yl|0WX6nz3P<8Hd<7QUrfO2Xofiua5i88wKCIikX{c&l~ zs>pgPYE9EY>a^(s4k&fR2#y|&5LhPz+{u$l-sI5?3(e%ZtI-!kp9rLRKoJ+ru6bb9c!00MAx*O7%A3H;tQVkDo_`e=rVM z3X}#IR5|%5Y9Ux$&|)&+IfdDoC*#-LTkiJFlFj1)4#0|psv zs}{oO8LUvFl9Yuq(-I^EmCJRZ)hi2(znyt|a@AYPa#%A8f?*FlyQ%`&E)o(ht??Ow zH2F0K<=``pIGLWldsO`c5qTV|U=Uckcnkqy@=B~5I22ts` zJ40(Kt07QWy19g^`Dl6UyuVZnEsfi7!TkcpsCHZ$$KJv9|JKYxwnM7?6iVOE&pLyj zdc)<{+I_V?btXhp38WKZfDUdQTRH-RroG-N!%|)zS%Py=T&=R*lOP~tzpk=QrNSLi zy@P0aB%(NlDJXIp>h~>^A9|`&yfmD+5u;YwyKcbHz`)K~>}jyHOLcXxNpUcRB|nIm z^m1knC^#^5;o0i;V<<1FYk&7;2{?@9mZaA@_Q+O#y${EU2LFUu-w;W5WA@E`G^iK0 z(3|&7QK$Lxr3ZMd?GI$h&qtK3{P<5c^v)M_G09eJ+d^V|L+NQxjZM(EM!@(=yX)!I zu6AZL-SAPy*YF#=ty|(qDYDd$Y@>&_Bkj5WHtpLs^K1(>BFZM&7Wt}hZ29I|_U0m4 zuv;1Nqd5)31jc@P^c8v=!{a0q` zE`6;+WwhDdo$NS)Y@Y@yxA48UL}G54Py;Jh4tsB58QqCUCZQ4oJ6kqFw6uoe)*50o zjZ!j8af65OPGZjGl$am-&pzv9yAsg-vf%3j)ctR=E@83Eb+Wa)h{v7S2BTv5#+|I^ zzSYE)oF&~jLRUWZ_tmW^jm*+>iRDM-hRB5Byu1_lji?X}E4E5OEBW_9{dHyL1x5SP z=3R^97Y?S8Wlc2cR@>@#jisMld8!h_5le4v#*fJKG_K$>!Dvzo#8#%9YxfSm@Rp|o^gCv%5iQYKnG!R+II3574tujSv@18KT}2) zzL+(Uut;=94uGyk4lm4GbnN1~{r_^z8@v9%)+dxk!YPuQh48MWqQ1|wUUKE?xP#Qf zv|#%KuRF^B^1;l5l~y&RpliVN=UX#SUsvf>JJVEc^$CRxI)G4RrQK9jsDl;xpJxXp z%MB=0adTEzRisdx*lp?`*R#hak1F-gm0YRO3Tc*kl!;)4oPki@WD;weXP#_&-SHTdpLS-DPj1Cue5!vuQR2` zIISHeJv$vt@#bH;wivIZ|O~E~oH~irKB@|7g>ULl@^%Z)qQ*bV;(->j2Y1+*&xT=E?S_q79+Q=b_g}M$Xj){HoI4! zR<1z1&pNP;YzqgidjD;$KO9c-5t3y-5>+jEt__aSQy!pGn6ZquaZ($m+}!a=Pw+{H zNv@jOgiXGKBKd@xZSUR6OxzcjXkH{nv3DoI@}8!{)#e;}oaCHQSoFrK6{I!2&-`ZK zM5?s%6F*{A?85Awj@(sk-XRJibd_MgsUySZ(B^zKyN5n6|Z31i>Z3&3D!91 za#@k8vHnZB$IVDEqYNvpfCXdQ|1yD7L4{+7_cGe$te} zfykzLI}|jd))ppXE0&h%HRs59V?45R=wWk_7V1_%zAaiS!*pXZ;*+Hid)j=yh|AmO zS`7g`wX+T887=@{DN^rgqHS9f6-1WYOZ!?5DlRSoxqrmHG&G)zf_H$tZI=9Ya8jR7Xt*nhkD*bw{Jkn|7H zJ0&^yGCIfLjvK2ho)-2?o1PxI77eJfH<+&RoeJX6=^qn~u1VCYa!Ee3hQ==MqI(Rp zNbMn3)%&UJAJfeKOzXSVrUzc$Nsr>G8tma#^{?A(j$Dg-IIT~iY@d`7!Y5fBb|l%B zwbvZC=YBuM-T}zlnzo%0KMygCPq+6e#lk&S-#p2?pSwgg8}B674pABNltq?v$ai!; zgC{vIC(gwKrj}Rj7;6*G%Il>h&%wN@{`=+fT2;I#IR({T?O`eKL_ljs`EB)5(lN{{9b+w_ z*9bZi8crJ6yAiq%Z+)%7?o1>r5WaiVaF&FNwIyZTQG>urW2+>V44F}Ez2)P~JB0~M zx?I1m_s+G9G0PC;_3~0e%C)6UQY+;M-YB|*Y9vz+xyAJ3c7{a8#Dm!bGC9t$e-WOG z+P?oD&C`9WHqibhuDWW9HnqAaKGi3oq8&#*KcgL6*ROSkLS02%j3KRPPT<_27j-9yMpD)=zu+ zCW&MT3zC;n^HQq2w70y?V0hctY4h5GV9PY7!0Ca!iF6HzfmQ+<>^Pv_6Phv^wcG(7 zwCUDFW3H1&(y!iaM=lH{RVNt^K>j@FiBQiVt~>0lY^n}OJ_p;XGN}+j56s&q#O|m5 zQ9bugq>d6PypXi*Nzt)MV3Z`vrfHCjT^bdP{kmR(I|n}3;h)n9L`&t*yAtx4C8lV3S{uo0o&t|q#!p7L1;pdM z#2dGqt($3x>aQYFRijb&H$knCxf>JK$a@ZEz&YRVgUQ^TD!NhM&Sn0Hxt#2aEy!8a zYr#DYKOTx^txzZfL-5_1z8zbK$8ZSfDNK}%mySSWqd{x@{(#m(wwZkL_m|w?*n*A`QfBI&EMOy z{pHZVO$gAr;Wda$1pj-2YhcGOk^ArKI<)aU1=)GT3&|Uhl7v1wiO#6rL~SS^Xal<0 zidUB9{GYJ`0q(HcSXaw#EZrTrwh&-Ga>z~4wn#0(c;>OMw6FQ}ZhR}m+tj4fxt65U z+sq>U-JL3nrQ7zIdyBX-iWFP4ug;~c7PWheIvGWs#X*zZ8Q`fO#B;zId8&|)@uX)4 zkWG5X&is-fy^P`@;3R8yF#2IdwBM?YQE`%aqbve)ef#=zx6A@^5u>ZSRwaRE!V8TV zMW;myp1O@rbbV30<}J4i_`AiaG_gRtbt-5UXm$2j2 zz2+THB_Qvaq-SLy@13M)HWUco`H-G!KwnD8k3Asot)ypZ=)gY=;Q{dbM7gY^wKw3U zHF&%?1MIy$yQj6iJLzp1aBXsXN{}z0 z?8*b#`u4Xj`hz_hXh!IY(5f4Qc8v5}+vHJsg+Im}&rRhhW+&p9L zhLV0!(vCbS5^ckx?LC46G%OQO$w)Uah1z4fz?XhAUze@6|)TT7( ztkW({4$ua*@em^v2B)x*BeY;694s^wz!n#>dfd`Zexpc~?YPZNJ&vQlE?{O7;4`uO zGqN@_Zvk1*%^ZIqUntxozI~v6N;uJ7%K@(#Azj-6ub?2GRf4Pvb=*z%#0;RSYcGAA z_VIkc^=kH7A8iTW)b@eSF=ZB--Lv^SbQ7I{cgW*i&v*VF$_NO}RK9_42+?Y{7M{3p z{gCS5e<^#7xj`4@TEM?m1D&6C;N9EDp&YxJ`)X7TaTTv`mPS;JbQ0Iz%!_VQdARhF zT7vT8dpzZ_UJ#5|>Y0na`*Pz`_v%@QF8gwm3oqL-OZ>*4=Mc|j{Vm=Qc!{oWWH9z& z_Y&isrP20sQae0G{#=2xk~?4h5HDRv+fiU`sdpyhoqU-4y2)K1iGVl1`bO%|e)G|L ztM@VnG@mkw&M3PHqE|LSw7A1=MTlOj053WAn{l_7IuQ@MQXoOG7J|1^KD67=8Op_(UjXl#S#dRiv_y2PD~ zB3@NJ1GMUIu)&>CO#JBseBdqp^V8`S`DtIc6yLC4_>cr9?U(Wpr$Q$2=WipC$UK3W z-6K0j7W24#f2L|>-Q$)Wug6UN^ID7idg~Y%J}jN3FL=bakLZ(SEKEHvK+Q@xGsY0B z1mne{f<0;x+MN=?1mi_B`!p^(G{|9U+Crdk^F$#!M8t98nM0s}I|?c~6zBBnUO}Mn zeD6Fctw4E=ZvsZ)m!v{_jgLyYI=O;0-YE&J9TCm+7Rw}r+i6)ivm$QfR-#}gvL#tK z6Uo#$aa2bkH;hS?wYKg;8YbgmD$_%c^LO;dI?+(;`9_;4>nyt;oa$Rje&2N*%3_E1 zy5S;7{%T!xdb4<4^`dbBh|dX5O;-jZY1J|$$kEL1EOmVm6^Cy_Ju@h6I1+=wm=)|N zT3@mfmFc6&m<80YiqLQ?c+Ag_Qn_cd$=4`-)Q?6|krcLwHD}LOhZc$o`sgn37$wXO!gSMA%_LBb8`abT zDvGu|2%Uh&;FSdihUrSW259wEL#ByFiiw76D~#l%a8uI<{Feexx7kb^OsA74`z3E& z=ak3p>|4%@<4n5Wcef`FfNI|^2qt(K+z5@(uG}@?va1Wz&0{%52IJ$7d+tu{h9|d? zhNySri&v%%ESyV6g%o(%xu`#aI*SBdN%5EL%3G#^804^k#LPKLZ+4 z**^>}MhZIy7K3;+P}?w(sY5s*riCRNCGboa%OcLFpfe>*6EwF0on(1Hx5AJ_I|VeG z^6m1zZhJhY2&A&T`0Euwu>ka!s=-m&JqO@cUBNs|JT{JujQlj|7|vhx%bYEk4%B4Y zx?{~$lt?Nse|1%5pQNnrFpCVf*5LgMGWn{qQekK-0thcejI};ZfF#I`q78DXQyoMh za^gXpKKp9_;M5@^OsT2-a?g2TAJ~lK9t4!QvCU}1<}#o{p2IV#xhZZYgz)DQgmovX zd4Ot45{)`k8FQ*WkW*pcP^$pf!&+oZ15%R@fvWXab2{Xt-(OFx`x zU1A@#wiJ^~b5Bf%42xuEZ;E5qqB~;a`xCNq$*r8z}<%| z;*~(T{ijnG&^?>(s^6v~mU+o8FKYI&>E6?9m3a|Br|loDC5pn{fpwUZi{siIW2;UaV?q(`!dcR~$Mpr z1aoQzW;D=OE^Yl6XKFCY1Cj>B753Vfc1lb-RRDFEj%MVhg$0Wf8<;jLuuxI?AUIO@ z{yCA9>!{&%$XL1Gv3@k8w~C)RIGrHNE=KZ7K!Y~*@00XDU>ktS2WDX3@4$Yk!0Sl; zz28H-Ca=*vqlqhIEU!fs>f7X7t^^PiqjCTXS@8XXY%mS(>R^GVjqnJsFr_n)G1JB=&HW-U@$w)K%cn0uoq*ljZV;g&QtN zOjsaHhNI$}mlBahwG=>Xip~F4lKg2GZ5soRj1OVM$!(cPWeJ<~45v?{iyka7Py*2( z2SV2k99V73=>tt?u|+7~P!Fc;k_`cc;qq`o1RR7`Qzs%V#zef;|7A$h%SFNpu|YOu z2IT`3RpKoaQkKt701Zj)u%Dxqn6ou7as7jMhCBa`o0`-tMt(U?Xk1RHkx^8Y1o4cIwWf@QW>x?3ABQmpu&@py$Ys_Oz^u1 z6zG)=svm&jnsK!SS$V%0e&B?g(xlp6x|40z}|^7(L3 zc8ToFt%{{Xk4|9pd=c~byIe9J>B++M56o;ZLRaplF`nB z%kh@Y#8Yi4x4fiNTm^C`B2}u17m-oPW42%%xaScZ1_*VOXacVhv8|^zzYAZlG(&OU zi`GCmu$Q#$F5bOBX*bS%fi07><0Ni!S13)GszsUP1!jsLRDk<&|*P z!mI*%Ob{^T9goBNb-QTqg-CW~`8VM{81cf%q;sfoSVS<94^}YLT9h<%011NQ-QilO z-2rf+9J12OBoOk>4ZrJWk01P~e?FhS!2QMAChz`Tefs1jbEB5b#w1GUdvT-HCuHZ5 z#kK$Kk658}7iyTSZd={@Gcz{U0vi__;z62p=14Z74-+N!nFJn5w!PR*3v<7-=vaE}qH0Bq8WpB)g-zQ~c^$n0%Ob z8o_kR^#YF}Swlu6#3c99TVoTJ@5sm*U_jMNmEr3-G6x|zdel;XDzjR6zSN^UG28!) z&bsidV-xMWn&OiWe$(e5b{^?sJTQu$GBVllc__7IcwxTb=t?V8zyHAW*N>Q)zs%^J zrqy|9nPC32)56O@-F#fQ3-gg{!1(V)0B)LiSG=#171CyKq!!f`wLCv0OjBOmK9pq< zn?);ZF7R6G{sG##CuSda4bb2+5SoOY*)+K~zRtiu^nzEuAt+Tc1iat$9KlK{LazAb z+8Bb|8I=s-P0|Fy%B+f&HPjaQQNBrOQd;tX40YrkT2YuI zKWdbtl+k7ZJ>bu=(IGLiifntueCGe~(C%^2!oL^%j2~tbD_4sE;w4DmYz`SkcDflIP~ z7d2#a)YLen&aMH<1u!)2*59tDSa~t6yguUGfKU*lhptS}cOi*D3vD{CAWjeKS0i$V zsD^qw0fo{~$ukuNk`LJX9_=PQAVw|&xaAlOg6>D`Aq^G}`0YK)G7v*`E0H>y&*DeG zA(L(_(APx}U`#>f?vGGHs4i+Mc566@Rai=R;<~7a-?rGz##520DG6sEcKj&|%YQDk z`l1Z6S!%(+jfPr9{SLmv<|R)~c=2FqDlja-;$mEj&4w{sy|#wpf!UU+j7b~c78Jqi z1@~%Pi}8Uu4>3uG0k(PxDyjKfTg3h*8*;5}K(=65fDmy;0#oV%2V6;S9b->8N;=G) z+N@7l2fTs%+PbHSuU&a0X=W?9k|bny1`#x_k!0cADR&Nr^WgC|uTm%1>D{gLY{Gy@ zgtCcJDO6xq`ksa}%BObzDR2j7tH_IYqu*4MK-&T&^e+N|fJNM2<{W$*?&32v>uMv? z0XnB)wX+MaARVc-Tz(?kn%K-iK$!P_MIE( za=l|FF@4>5+r#_80tsD06)!=y>!Cf1%VB^fmA1c5< z(>`H%G}a^xwFT3^224b`7*=PIc$IE@=62>J$p!_OX$%mmYtGIqE#D+ zW3ED1{xcuYVm+>}`K$WK4e?*iX}SN#oR+n-|F5QXwE~YEkN|>@mp3*(!~yt*R#}LZ zL1{fgApv2A_}NP=BsF!b@h$#EZv$if9k}{?P_&b<6ckcaI@`zdb=Ug#?ClFYK&d%I zQ%;Uv5sRm+ZGmij3wYwIfh6-?GC63BH>3O(A|=>mw#m49N}9n-k9Y zks!X4{Tfwav?QcP6|`|;ek`c%=FfA6*;bRqhqb2NrhGbXu1Y|@Z3ak%4UU2tE9BT0 zW3d>Q6M@d9vx2P%Vta{#gEWKe-hCQ3uV2UBUOUF6w!}!%I8Jx|`$S0Cbcnt{K`879 zO|18XyIxmsxBT0hL6y^SemIh=hQg3$&)t9ecHXay6{g=cSo^>9?f)0Y5dK#@tK?y8 zWbSBZYvdn>Vsbv zuj_Tza!9;>$CE+VH*%Jng7+2pQ(X6sK!|tbe ze{H44S!>{l#>8DlA=PEG0z<}1t1YGekiF$TX`E<({QjbcF|(#Ht50h^(R7ci29D6U zWvGVUIv;Z+aU+G<2Zv!meG~IF#U?G55qLFuf{il(Qt)>cEF|IneIB_n;X5ZuZK;tWSN<;P#s-}cKl-s~uMZKl!)Q1f3=?mZQt^;co64@_Z zZj_xsA+Y_8nGKs2}Zl5B>zNnRcJ}8qMVa&`pS&5b-EAG5WQ*aqFs5B<5 zPM-aRG^x!OO0!L7V~5({29NQMke16uH`98UA*6epmmn`D9^suTB_S?IRi@)_aq9)N zlb6nwuxG^uNDYNrwY)?v1w^}|i0YZyxq2ZNlnui!~MD6Et8 z;;5)Lf6G^qztDOC4n0nvKFVig;z(MYEY3dCK2gKv`jMIT`*Lk?QlYuJva7ja9wzY9AC!XN&f-X%g>i+?XC{WsGh z;;9)|3s|FNvD%FeYcV0G3Q(3`*W*J&T6$x>rW&a&qS=P^IAO+}{|BJWD_k2O^4Iv) ze-)Ge&%rIr|NVmXKZ4k5ElB;O<89llvv}TnqD;|E>X2Wj7Y88cqc*SAex$7HCH!ru==dG2Rnr+oiO{+=X+m|0F z5@eX|=A)nQpO4 zf8X;(cEI+IcwPq$Hk@khph-EK-mkZ&{`g}*fk4sC56yG(v`F>ZzlWl z5E+ONVHwftURu|_x$~rQu9T*j9CKPFp#ru|lDm_xiN}h6poV~U^!M`AQY6-GhW1by z+KaNcqzma9Zt|Q}@>BZYN+xMp#|cM_ml%0~ zop1)aMeV4X?A3jcFf;PX2t4?fQsbXP`704^;~4HOA8$d8zIK|v392pLVcF3^c!C=6 z5Dql;HkCW~H%efoSeIA@7Wq;lHa=rwTw+|XE>f0OZOV1vBrh9i_xMORL!Yp$8UeES z`>s%>E;1j115V-*H~++5$zl)SgtL~our#+ehY&Fg!b8Ie*IKd>g1`4-T(=Hk+=mwE zPSNH2n0L_(^Y>rZSO3{B~lfEH5}(E;BUJb>Hn&}vFuW-W=UwVMOUOp%Dl z&}IlH9@`d1oya$D+4QidW5imPnx27;X`}s~ky&W?7CkPAn;*??3aN3JC(NMq(y7#F z8WxEfr?P9A+)n;Ca$7)Rsu#6&-jiL2b(JvAsNFQF?ZxI?(e$%p;=)+4EO7{Fbec|P z<20}RKzmRyIn8B$Z_gotR2gk9ommm}oS}8)G_RP5|473W!A7WCkRMgU zX12XoKyi}K2l`!PhbRVfXV@HNTR_CPZ~8~3P%+)UlEXkrFUxuU`ecqvTiF!ui&<%y zL_IK@_pqqbA|@(Dsd}ncEt>u2Dw-Ik?W~NvzQBmTZ*2xZ+HIs*u;DdaeGLUdp2YAK z?lrLPi6e-idPuT4U;W6RwPxRI16Y*WU0;J9nk1t47Ke+%#UB5Ie zeFTT|s{G&B0s4gmC*5rRAj_-M9Fg=Qn1z?CC(6!%oweQQxD?ZwSp_^}(D_>+cHAPe z$0It=I5TUZvIruppth?g6t+!;PD_h}$D;oj9v-ZecScW|lwO`$!}w<{|6~aP0!*a2 zO>w0NVs2@oEQ}{0FQ?@Y=0`{Cl(sI7b8Z2xLdp%h*W&2fIdj`Sa((;RWD{qc=Q+$` zZ~(@QMSv0gC!8mwFF2)A0%AX)U=Iol`M5ZqcIOog9k3c&vV#!t{Lu#qp>$i-R2bD} zLJ2(u;0Xu&U}(qtJEs%`?R(1jfnS|^))Uy4l%r)3Tg#&C4@{=r(+xPAq?%PqujsDB zLggc!zfW3Zz~O5l?RyPH_^rT5N)QspGNk>tzc2aK2jbBmNbsOd#H+S5GE%vpnDV}` zJbF{+VS9@ZxIW8+IchPfMZ3}_u}w(H3-3X`1(aZ ze^Vhb>=A&mXra%Pow35*x!WTkk+GNeFC;{fXmjPPyRn7ngOu&vf*;2PNKY(pka-_h zafYIw5EyF;Exv% zqB~+gR@g`2F{+Fs2M1EyVk;X#mpMK~ZtoLzbKwjk8I`9h9LF7JF)N(4;VG!mW9r3p z8<^`T_stEMpMOdAc10|WdVQw_piKxp{@3#7@%40o9ny_bbeJ~Ap_atRshp!T;>8d3 zZj=>q;woDxna&Qp@BvVa^w!e=V}9j1mXl~Wt@rX|o$lysFe=hdYnm0(YF~J*QNb^G z;^}H+-(|$*oNCKtfT3YbI^QqVR;PcZL*|0quWHKO?#Y8`uTJJ6)C+*{`y9%*=UNb_bOO_&Z* z&pCq5B5PVoBVQ(-r4!T8%eBa#qD~IKt%eSHe$k3{L2vC*rE_D(twi}+%-sX{E#!^$ zOYJ)sc%GvEwXekOU`ALJE1yI$dvL5l4N?c>Z7#k9T154$bp<;33=qHaZ+EdJmKbR} zn|V&->!M4V32`qtFTl*8^A9vO)ja7FPNi*n8?}<}Qe9%~v3195qPP9=boIffkh6c*UQKXrXS&AEHka1V@#Kiid-UCYfSY-K?|XcyEex{ID#olz3(P6uO53 zvbjHf*m^%D(_o|!?IOSb8vv>(EgK6zOJbf%=-XXjjw7 zUUk8mE~){iw15Ztf@F7XkMl}!nFSy&Dq%42^oO655?LC8Z$yU-05KImBykeYOdz%* z213_N7=wOwRK*BNsW2uWWu@edEDVx8IOK8@}XnViG?L;QSmD^y=9oV1Jr;Kb`0x z@69Hc;2O8$Ywb$}gyVF8sBU6aK^fQCMmR`of~ZtJb+ES<<%j^31bP36q2I-1kS%}I zJ6L2ecb(s}CqGwuS%?Zc^#QX>lh6sy;fi-cqBc3y^MT|E%^{?@9Md7;a5Fl^u0&~u zMI`WtFV70>GfzWm4L!L)gNl2?q4B3tHKrdc2FPw-me=f=&)QIyF>R5AP$zUxY>FV4 zZTszCcpd%mlhMiL=wGbedG4)4drlTF!1fJAR-ym?c87{v*!^w8OHHu*QYyG6#Y zsJgnQbJ}mD)3Ho5L_-rO(d$oc=CLV*1JYk&p93)cm0?DcrF6mLKd&NWF{et>OyC-R zt+6H0cUv|gG&>Noq&FPNB&fjqVtlv}p4lh5WG{EAG`f#CMyIv((>TO2CEiLHZ;XjA z2i{Vb=Tdw6rWp(mRI(wNf@!m=9KGX5ivUKN>--p<^^ZK@%59Mns%c3O4^#zBa58P=f+h?P)qy0wCMp^lU z{|`5ezjTB-*;Mg9eSw|gmHU$=2KouOShP??#)#UXxtN?Fh7a*ECjviz8XVZ$eg=dM zMPVuuBRm}+{6dM zshoS7`q*(EwS&Gk^szc4>W%ptvO_uFRo0R`)>tKDE*oSwt_n!1r7}{v{z~nj2njF= z@u}Q1u}R=h^^%G2acJ`6epYk45J6$iRXvnTu?cSQ4@GpjFJ- z+HWkDAPZMKUU5<@MLZ@{0VjL~+)Ue*l_hF(NBkuu*K&>$Nr@AiX>&$zQ~ZP)1zMI_ zWBwTOFEQ_(rR8xY%YbMxsGbeuv=zoUK5Jo~eETV6mZ#~UYT;v^6}BzriNu765evPk zrIJ;xgY%cC4P;xu(?SI~>r%F(bU;^e)YZd>P~*YtP%|@j6j6D)h@OZ!g;`#DwUTG5 zMj;<+B!YU9v0QM}kIC_$suW12R3;qUc*XUVMI;8)QLO014&aR?T#&R;xKF=$8k2B) zVu0H#SkgR#)dPDW<(~_Fwb&&~omN$=q6{k1tN4koHw%u=eSi*ZOBzoB<0-6odSB;_ zm$~d6@kGGsL~iJa><-E5KPEN*~E3UtBUF{NzvdjwDj}6J~iXB19Ek<%)8Vy0`bm`KLd$+I2ky_nrTW z%W7nMOnXagofj%ENFmLr5Ul{; z>Bw4440^vQ6xU8+e*uh=$1XwI`fE=C@$+jt9oymRJa6`XJ=?H5te5NQ_HXP7i_s8j zAV)Eka65f46)|PgLXp<-Q{tGUz2$v6^`8ZTtxDzUi{%;W zJds`^srw$H6A#kdvyvV;F})n_DIb&7t~JZL2F(vuEukluu7EVcT++Ty`J2Pe#kQ&H z*NT-orp=S(XdgT!r!{?>$sK;g->M2YJKS(0S%MnwQqD>q@XM+2N~IP)e{9HW&kAIY zE23&>YtKrmb(&-}_5NTi+?*BoH}x-~+!XLI(o&|no^Sc(T(!tHn7GUfczg^0(ILAg z>pT;+usbi25GlkI}_2ktZnzAlMVqS^^17dMDhz|xUJ?D$(y zf&5!hatT=Z+c4QnGvw+~GSt`4M!yH5b^Svw4imo$B3GIg1DnZG-;mfrIXEHHQ?Mjb)1pGmDuT>yx4xTC!RfzaC|Y zS?BpM?nU`oaV@<|Lgjo{CFiCDGS(9m-HTTKg!Vr18V4dJ2RznB9z-*Qpp0nhp$BM8 zVdEpz`0Q>p$RzALrH>3=UtX=yeiE-DM*}QkSd8sRWUJvcS6+{s;W1a;&9?d*ZPg0~ z{fF+f_MdgQwew&j3fjZFPuTa8aeya)^>IMZDzJ8NE^{!rw`;?9G45@bjPK^m9zQF( zFZFprXYEyi5ObhWia%!GZXoNkNor&Ki8y>_miqhro!21klT;rxOG3RhLx-f~W^`Yr z1=Go=W#t#xF=bc9Y$2&smewk^T5MlEi6^5UrYmb(EuyX0)-tT2a^g6;+KEcXGxLK^ z)4Xoa8i_NKi8BY~6*!uchCSb27I=34Y@R zRc849LXQ&RdmvXFPzLGOMEW<2kKEnir{L!bU($6Es}9*hr!F6yU)rt0jqK1qPU`2Z zYgrTT+nWJV%*3~8KWaK zIz1kgZb{EA0vl>B?}wFk?^QO6_ZX@H!h^pvmRW_cXK77=eZGV~K0P|_`j1&}(>}C& z+H7rgYw(-U_WVR=K!aHXd#E{6h-Yghjg>sXLq4Xup(6E#s;!>^GyMKBg1XN>WYcuV zWdTAdbamYM?ebV|9RPs@*7QeaL2Z4K4Vb`wg1aLumNec9ajDy%cewSgnzNxJ)b4Q8 zVTOh|^|miNCU$;~J;PwWZIA0s_PZ&>G?gd?KiVD$@t?m4XqHT)!H^aJsjsU%*6D(Q z{vr=|Qmi8&&Y_@ZLYPHtY~EE@?>sKo=+)J5?@Kwv_sysL-E&PFf(P~(LYSWvXX+*R z;BjcbeS3X@B2#-%=)`t+BxQv&FzrgFHaF!WrD9tf`25@(N+WsRbw*TlX-Gy?WQIl2 zi6L6EmNp7aCyB_Uso+ES_R*2T-ZuN)4DgOjo@tIaZ;o)MJLB~}W8^)v<*8yv`XtSA z>+x3zOrn~kZ<^)(MO+_Q1d}e4$FhQ53p`8Ob%bc6Pt%C$4!1(0%?`IpqR|d_;TNrK zPNhSe&8d09rbEt1yN!r9BQ&`~MyKw6qWiJ^rrblitR+7>tL6v{-=JA0)z-SLmx&6z zU-ihm1k)DBX_=y~EZ5+!KTMBC;^mA8K;KW^pYx)?j4dYShV|^t!5{aPYj&~0iS1Zi zUs$!)>VmM|s7zW{h}l~(1n%J%Ep9ttc+Rom-NRcY+RxU+nSb#1VTD?n7kLk#Lcw}t zk@q)ZNZ|y5xBGa9w9x4jji1O{>wDd~dwzpDtloD*pSNw30zLM4KS_GvOjhTv**xq` zT`f{@eNJQjsY(R1A>Orlklb+-?O-#myfk|u%9By%G;}34-Xuq@Nd;Xnj+Moo9waVz zlvgcar)7nufJuFX7st(cb~rv!nP)0HdB<7;_5+>dYFkvZ7caLYT)>^8gN8S=RDxrF zXN9PL9!cSX*Wzb#PV{ufQ=0H1r9OmZS~gvCpoa3F|Je~wQ6_n{PG@gV_D&XzR6H;r z!St?c5B)3;+U3%O5&w|mW+57?L`2?oo<3%|jpm-bcwz)3bDesC1f2R;sfc{8+V;#z z98Pwk=9d25a7}uqLL%f;SMae}Vi1E}8DSsLoJK*j^%#0?a7Q=)2BOcRQ?POCZOaSkSO&e}X@*nu|Y5}&;% zpc$@C@&cr=V=XdIWS5ePEBk*ad&lQayXM_Hw(VqM+qP}nwv!3Jv27a@8xz~MZ9B8) z-uK@7srpqtSJm|ooNv~-x_fmW$EOKipr*+S60oQzyy^N@-ViI0R^|lfoBZ(u*ADR2 zfl^TlDc>55D}GBl3i+-e-+i4UQ&YDJ`yYv_M?O+y0F&;gm>MeU&lTO1!B7d5z{o55 zGZQlf$A6lx7Obo-)&SPL7jI3==cL}?Ey|1A8zf>leUwGE`MIG+Y+IO^PPr2#WbLMbxp+bQ^9Atltx#oqE;@NnPgVj{S6wlhwPcI? z#{(N2XXQJTeU{r)luTsHg1FkntaT}l(5T`#vDoHZ8Q1@~S4piiXb}6Hsi~xQs0KP> z+>g;RBfjm${$%VLujx+UMh< z+S0F#wg{G$!Eh;f1?`ogzzL-EJL=)?G9={W75(_+ZGRKX9Pd_zm|!>|@VsAG>^BJH z_!;s1FyRWCH(+l7Ueqg&c)yYm;R_o6PUoG_TZ7#jl5M}DT+@EgM13K85YiO4wuY(U zTg5SP8S3RLShOkgqsCcBTC(hrVp&~s#ZCk0?&ftG^AAl{A;jBSQ*HZ@W=a(3jB5-e#7dwOP0n(Ee z9h>Su`YKMA^_wYW2+O+%pQDGb-LoyTvdg!4=Tb0=wIxt|`~!OqFH14w_(}U}qqQo7 zh19aZlk>8fjTNrv5CVb-8kw0O&g$#Th~=c~hTv=>m#8E5tzhPrjN)&d3FyWX!Ai)WrDc>UmyCL- z1AG_;rNV{=KKE6Rk`Rk9)LjEmBAB?TXXZf7flG#m_tj{o-or&@SK1n95^#Y#v>q(0 z$AlD3G5Au+y?+ThAdnybh8!=ZI!gkO^pCsqJd&0z(Uc(SA!FO9ivr@rfWVe2(xBD7 z4oOYfksTGGsW5)i(KoNN5qY!VC1TFVR0s)Blw1~WY0rh$;6ul{k#a5<;JCh$dc?Sv z9PyWd>Ph|J);OpTl*>=BCZ-$u!fE3bd$K z^FyLY(+HcWeDoF>j~}eV6GGIv=bJ0PR1F-9lc$x*is-@X;(`b~(!i*2+p->T$_#QO z>#dZun^zzSs70meSW2~btKljHH9Ez{S)Syx_QB+EpI<61vq>0V<`V8<P`EUG+3a zo}pT#N4?)e(lI-=LKmxqrn10XXk_fQZ=T74uj13Zo*wRyGE1>EM_;NEIY%XWWsFe_ zTXMr8jwKs(k{u}^jy2(SR(qEx-c)s(EZ(!mkW*|tV`dA(0Bu&U@Dd!v;jTVjsIdm# zD#4gnYSxS@3cnP&j{^8g4qRHFsDJtaT`ApP5W(6JLaq$O7N>ja)OUQB6V=L{hny$P zAEi+5S-BN!Y!RQ$OHKrCr8;^$4Ni%42+#r38E2QM+ImsY=5ZbgKP1147KyqBrWEh^U6EoU79a4Pr|2>zG!R zx#1llIfujGlm0mor>OfK%1-zNZVBsx=lBT|xtm-EB|jI4Tx7{A9#?XQl>G4%_&<`s zyhL?(8bTl-GLe6p#qyz=GUeS3MnjCux7I@QW9*v4`1rgx{^Dhpmy5_CLoB90yZn|&Yf3EoOK7D>60&9|hfY7`k8lcw8nJAV*KDrLq5l`#$ zQ6-hu^E9lSt}KX?nr)by!txcWlk;5$Bb9HKA)X_vw7wH>b-s*=4u=^B$}vpRWHC)j zcG{6OoHaEu+j$$V=d=zF_7pnH?GLr z&({=F<*cXMy;!L5(;{&`9P0RKQYs!_p9sAS$IKA~zOPELx=-@iJc}8-8|2Ayz*@?S z&y3ntkn$~nU=AmXnkf*M`H0S}f{GK*SL)-di=*5@h-6B|#bZ6q#5Ek5c3{AT9Lq?q z&uiLrwKjM2;l$mXN7%LwVg2d1%2=W)f#^bIc*C< z48l=}$g)qTl$xQGXWL@RdvKW0&a&#H*^VPK!48}ycsFb?Q_ZmsSWTJRIzI#m#iur7 zr6#nC?lyD;)n>}THJ!!UZnro3cM3Y`eYwNKYZ3@Tt6OSDvP>w2q~OR8S@CMiwN0;K z5H4GCBDziPg1|pP-C5QE>UcUd4WDc;60IoS58T;v;`y7PXm5=RSFqxxzvSW547WhK zz|yQa@nzC~W(k_c`acB`nlI);WVdB~=GP+fFHcL%>^?$Z73;Ee}PpPomaoSe!> zTE|I80&zow3hG_zu?cofqm<$_bAGK{3D|C{}Uy zqrtr=yMlu}#?`!SYPYsIU?8r=Zn-_5uC{81hV4#vz3x5ycV7KgJ)kPVIOVjhan!Nn z(Y04ry#2zNq13reWq`SL6amFyzDl5#yCl-98hb$udcoba#|rlZ|4YTorVV1Hq2(8n z=BRQxzhan+rg&X^&Jvh-no%YIm7_W&o72pabAayh7dij@qKYe)Q)~NCtoLttPxzOB z6_`cYlZ{li$zs`$+jk)QL74Lr@5oq$kkNZz(M=Yw2iZ?P@9`v#eYwf~sSsNe$rpLC z9|GIlF-u@T6lQKLjUA!7*Vs+lj>@I{m-eKT=iEH7gF%4Sy(`-@p3&I&Z3~XXPY-0; zbFAeo*rXT7bhJHo4B`5H3d3%=Vxj^7`XCkDDP+0Q*4}-eJK#xFUvMqLW}jzG0AoTvNuJoRJFu038|iSf6d)U8^n;*Fo?%5U)Ez4*>E`4QzC_X5$wwRA88S1)24JQ{?grh zirR^;QNs3d_T0=(Bl2P7h<61xh_83$5F1aQCLkwM_vA+d2gUdCxus2A<$`!KA%9OD z`h?d~B!xUgTZ!aSc=M!d&(?TkH1J-MtYCndr>@SQT%siE&M(6r& z<@%gv4lgh;1Nutk|HE-P8rEC3Pj%C^UoDs#|= zj%D_iUEr^K-9FIvM!e?7arTXA&Wxs9=Wa(F%?&Q)gETRE>_) zqn?=(hmNCp&QTBDCj=jd*`vCIKj#vEuEnXoAeRAg#3+A_;FXR8l$rf8al4;Nx>)+$ zkx~6>WJQ(;aYb%uS9_31TgaQ5T3%>5MdA3SR*_3MX^0(lT2|faYd;ptadjjq2p{!j~+KACE4aIQK@Hz!d(-W(h_2r8VX@CscUuS4$l10os9U^_DC$fK~nb2 zsyC45J>fPqD~y|eX-CwIQ>m2*qD$MxgMl!FBBqH9AUF@92Wer5(3bv%nNTY?XnK%S znpnEaTIi>m=pTEFGU~`_O|w||?1NZ)Bq}D>#(^C)qiT3!*aaIsm zv&D%JjsahRXeOcR1aC=FIe0EhTVYXLW1d`(a5uOXb9i}1xf>iviu z*OPo2cAX=x%N^|5`%d=~z7p>Z^T8-~HQQ&kXy&z8`vWrk!0k~VU=$~U+n2wLE(>qM z$v8Ijv+$1(qKj+Y%={Da4w&1|;> zad#MB;tt|@8*3Y-%L=Y_zRhoqb6aX)xAX0Ta$DvXQE?B~cQx2~JOv86FH1`)-XU740 z!UZ3y)exMmG+3Uri=4+#F#avho@&ZJ0`Q+vh8;KKxwLptMFrpio-GjF!q@nph% zuIk%4S>&B^UewwLFd^|-RW+|zH}?n*jZ9;j9|)Jni3uUmE0-_2c{}9STPeFZ z$Xpn-qv*Z@`zLd@@*`=7MuL%3B>gq*k$ZXhc|$mcpaT~4|K#e_bj&x0M5XL0iG(mO zR!-wqQf2Sk*|7cM+_*>!T`sIOW5cMol|r@X8!j&AT*HtD>`>0bRkaq0ow&GI@oG0dK!SZNEoJN(&2euE66qD|cL_Ar5H{0)T8C?N%% zDUnc^3gy!TiYwYBVP+rWNH>jn3lWwg|yv0?+Vjy27zqxPE#u&kK3C#s%9Co8u-F@5}?vSw`0J~LYcL9ofDVkMYP zR5SrF^VGmHu6XPUkfGS!*Gn;(`^1>=$WaU7qt@MXAM5XRDBdt1Q)fz_BDhs5I@r*C!x@|$qEZ7Q;<9z zutM%Wy|EmcfD8Q^3x)68X)j{PAg%Pt(~PDrD=L(SV|>g4ZXS@6X5}T{Lx&5u>_aN> zOvxk<8FQphu}9&PD8qS?8+gQ*KA_c4Is?foqPJAG1-1gj0?Mk#^sLVx;I4p))+^ZE zat3C7hz@&5V4Q)Ah{f|2Rm7CQ;i-4sIwDhhurHlcFPvnGM5QZ8vgrv@If{5P9Z@sM zx+0?fvZ8h1gvl0*uy1v*zfI^AY1Hw2lG0@Le)GVU#a8wJF{6g}@cvQ;Y(aWfadd^e zIEoFLbw5<^7zq0^|+UU=J%~VzQHdfkfK9 zA`vo?^6`k~4gLiw?nrJn(1{$BDnx{U3%nq27DPXLH#q9#tj|AcucqXoIKV z%ppOhv9Vy?qUiTa{ej6sS)ZE|r^)QTtJXu1t=O6L$~^MdLI1+klUS;I{Pb=v=5ZUl z3mR!&!q%_48R9F2GNMTN?ZOwfB78}T0{h%ibhZHaMSB!3PEp==Z5+KnVnv|%=iSi~ zodWvHPg1!kN7z7oNA&nd$Mr%XxXoj#@Q;o;5reQ?b%Xv~!N-Rx+#OPQgI|A`lz-E4 zHAdCHwqj|8k7WoSBh&K6u~^$m`N!6okCQ z-4nP1?k4f-oS+_52u;v429nJZ=?xTI_g9iLU^y78)PjVFCQ$BuyvaIHQ2v85 zJLKT>3-dn_Px&Bd+2gNEGza>hG8FH>%~1a@;{7+k4QWGrs;s2&k0jEq`3Eo!8)gN7 zXqm1VHkyKl4PuGF>Ho%16hR@DK_sD-i6zC&j=A({3|SUPKC_voFajkCdS`52jgUuWlL!lPpL0Bsr@+CsPX z7czWytzI;do;>{g-11z5zwPZ{0=bZEF4z5aXINe;5@RyZwV2UyT&%{uKWEtHv*vtB zy*S3&RD(uc7VTe3g{J|og}?=BEqV1kq*i)1r8OBz_hy_m?8wVK+H@*vT$1j57;PA$ zY7n=Ac@fAE`_a`V+~|bBN-puf=qP~~{am@{8Ev)4Nom#p>wai|sxST2=}B~Ekxb3l z*v5JS5v=I04_#=lm?&iH$-ft80PEMfyRi|AJA}zqCBrNRf{`%v z@cG99vL6K)T-9Apf@K`XYL)mqlM+hYdp}d2d1$F7>EVJOpTO+V%aC7zBu4-qnFE(IC)m5bCEEtl@suqRfMq1Xo>=tYpF2BoGo@v z%`7jsn79l&cgFE}xqQLG7+uj3j9P+(_z8__O`JO8+QCLJH?YRD z!F2z=5KZvf9HsDZwX~#`k_ay0_mJck*phr<%<$=DlzSDXri^H5I)An}(OY?Bk+X!d zDH>Ig=6yZCU2L0e+PzFtAY{yV;tk|=u~q&=sA#&9bZfaWAc#@luSI%NI9shW*&&%t zifX1JvV*bjtIFOor!<4B1-^_Ewjmia4k$cSM*AA5f>ea18LQQ<>g@r zsxlZoI;Sj!m3+~N###q<(N6iro~&An@d~~TDUQ;P1amsbEjW>p{doEoDy*H{V?mPX zF0BHcvlft!PXk=8jyo#TxAEEfP1rZlaU{dDc0==@W zrj9f^jyn^rMnWAlTO{Dye3>*fSm%oXdU};RD}*X~33l{zC9d$-6Thmf-810E%aU>f z>?qEO5WJ;Z6DLohj{-E$th@ndk4`PD2;KK^(qGL_wY}V7mQh+NBAbpdQxpEc1GDK33GPNsNpf-b&pZBv$%IP zNI%@|;dg|uZs8Pf@IO7I^ixe!<_uh1dOW$8>tpnxQANa`Ki`1qNuDw6wV&Q?@I|*j2u<~@MX!`*P&d#&0vdJ+9H-GfWX>UddJKg>gBy$P z{EtN8ckAiYW`?h8bTIhsEsvZ}B}3)x4cYBZfdCOCWamIa`Dx6aW;FL760L~>1>}@D zNyvF}>xF;CF zL}?G#jc|Vn{+7P+t;O`FseT?^J=smc@G+(RV|JPFpAY@oUowt^O~)`-IZ6-uh1|D7 zoaxu*TBAN-jaC)dd~Rrq*D@vFpeET8Gt#m)^DFJ)YHhDI+HaF)ghTQ0-T(x4?n4niE$(L}8!DJ4^lP8rIu{P1VFiG7|U|5+@^s2k_! zH2>NHS3pA-aA)=W}JW<#_IVz@fe6_BeX%0+ZIYL@3M7XzB1g!?NtdX6lF%3*m^(<2+%+ zd5SA0B24qd??P)@#wqLr(%Q)GK1E6_m3o|Ts~O*{!wlh=+QbJkb;Q{`PwJ<%zEVbQ zDAzU^0}?qa9s?d{LX2))Ry^PC{?0dRBe<8N&0Y3912*_%QtgujjqwU>O~xhpkg6=2el#nr{A; zH<4kRqaY`J`YD24|5wWS0{*IIxs3hj7kK?W$k#rQ?SbPMeU>_2ov{I60oC7#6DE4s z*cLTadZ&jHM}fOx!!N`X0`_p2JlL(*o9m&?%u!XY*O^nz@Xhl4hHy^LTDV*U3Pj%V zfnp|iG54xKM%=T%-uJ(htR@~u8upLFcQDt(2kFR0X?{j9tB}vBV!^6p1{*au_qNK! z;IQ0$|Lg{eySM+g=!R7QA^WKi^=k&{`jGo(zC_Du^R`y{id(~QyV7K=It_;m#Sd19 zdf_R};(BFsnW)CVNCP|+vjn;_(%NS+{mXQd>9S4XPzidfSXepy&Fk%jJTv5GEcJ%! zmA=7OVaTKY$OorKhIVJ6LRUYEkv`3WezG@zD(yfa^vDO}R-teW3v=S5{n>|kYRUg( zj_SBa<&Kb^bp6%U*`~M6$);Cr*rEB3XJ@tb_iIgo_Gd0aacC3N)MwP|JNp_XVee9I zkt?9gI(+(G6>*L$_f4c}QpKFG(1ow0UBorlqQfNooNpmVWYH1o!|oI1+n%Bn_;?&+J9bP`oLmK- z>@25OWxUvQJZ(gS%-C!%PoS_OvD zLmXtM6Cak>Mjefl{IV}6v;3L<=>)$^{YFk{)+hC?d1ODL@?3l5pXIY|lk+WjxUYn} zidb4Fx92h}E^kgo3awNFxUY|MYlswOf$*Vqb>Q;hP>N1%{P5rwMjBDYR zxXdV$bb?#0EVOd^R7sH!!28Jm^?NiB7p@N$zVDA!(vWG#VQA@LDBy66m5k+2c45>? zeiTQv>LatcKWjhzO(0a_B>{Rl*jI7wzEa1G`*n5X7pq~1lO%=(+3C(sA)<~~h2OVR zCPgl<%Qxd!;u(;f0nAU@3Ax!{h>G8%rgl}YH$QQ6X$ApjKd-3h-+xMBcJo8ldS#V0 z9$j!#{H*r>079pos`Broy_pi(y@%5lpEv_WD{)%{PU}XWZiURg2`svjaypexPL9h* z#q~;P5CBZ9$LD&?QOw3!9w>=;$Y+1ltK*2N*ch4yy>RXQgu#cL=HdK;&-cUhya`(7 zNZ9Wc1O9~AQ}d%#3x32m%|CD@@k9LdCB)zIaeRDXTPZL4RIp-xIFY1nN1)8be=Gn6 z*?kG_7f`;20TX2N{dQS&%(8Wq92?n}7$s9Vg4ghX+>Y>q9$QgD5nzdNrmPr!c~-7@ zedMoPT%4RV<>ZiMjImS4bgvld@^@B*>3B0~JbAJcD z?1WEe*tZS@>u;^&E|q?lGl zZBCvMYBz%I-((Fbf#@d#XtKbAAy-Z3!i%KYmPRnCjLeFs08Clfuxk?4O80VYb^-C3 zB^8t$PGuWmZ(W<wZ@L1N?znJQ>;wm;5tc92 ztRZaX%?n#D!{NyTo3;}W1wN;6sKx-QeK>omhuI@5!x{?4BW@q|CI<8IVb;wj3RW`- zd-g+tmEn%>Lz^!WmG%JZujF7+@fgep} zsC+`#OCp!D5>4Dk2qEF<)&*|a*piZ%Yt5qb+7s@cze7Ki*sO|`1 za;wS_s6D`S93ao+ixpW`>^q4d_Z8dF8M^6pA+>=UYh6xoCr& znO^u#QGuF9nl3=$Y9g)`0L{Zm2rVOF_5755Sqd! z5^uR23!1eYTD3EVTISbscS{3``^c0|P~@_+6}-I85wz4}NV}9=Z~PD1Z?OPzS3Rd` zrfrXq=iYHd4}v3!*x8)0vuUf(RmPuWVeD21U#WLVsdo#hcPy!QF7K!pS~WG>a~VFDiDw(<3IKFxc+5dPu$4lFKp=lD881| zx8zZUu=of=?X?vBo5WOa5kr&>#SSY&aEX~pk&U6nuS>7MAX4=|c=yM-lXEn43bLW~M=sf1g%)%cAnW&wW*Kb{ijbv8?Gco_M*VYfCNX6*F(+?f?H zM%3Ss8`jK6I{6jWW;!L8g~XvM2LXy5+dPtWep(h0~BAx9V_2BBB5cM$d{ zJzrt|p;4BzgFpb!p`2eqg&5idk`k!WH56`r^XAs@9lp;E^1|Qe+Z_Gy#n2ZyYSBxqA#=mqNG){IEzxZUZid@fc8eviL`KaqDc%Xgzy10f5Yu92qfsf;!b9c8pXyftF;oph10f~896X1)NOJE2Qext#`>!8QA+*V zUeHnHiJetbK$&yHhnh(Hs;beQsJF)0s?1Sm)HR)?+pJZ{G)fJa;uQm!SYz=GlsaO*?5EcwJ>23wK*b%TMiPf&W6fi^_QSX+`pbzX)MMSC!DN1YD1)JB=(82Ca+ATsBn}X<1KqFqJky3z>vk~!`DrK_o5gX@R%rl}|(AA@$=(>dDNdnno4KwF~tDfDWy z1g=HY<L z%-h&%G-J&NFOw4wrSx#4N}8yK=8dfu7ELthTpe@mK;VfE;x{ghOgaC=Jh6)NRY=Dkea%Ee;E-z*b z4hr(NrC}s2tS5SvN~?10iG2X7 zOgUBV(H^>jIXv)~0-hcVggE0*KF>p~vu;X7TRoAIj1DW@rtx zfmMPlqHX*^LsMWl%7x+*;vSTa5EH9mFsIPh?D2)52qOnzkrn0)&!9}Y&jIjnB^cRG zb4z*1feOhT3_cZ($=#Smcp1(B5u;Z{G9$=wkz2vkI@Hd=bEx1MDJ%8?RZ|}!+IKW~ zJ%Gtn=WllhLqDJqtV)K`g-AwOeWwaqVp@tVqz6+ZWM>1@?%>8!@qu!&?vRz+4#r!~ zfruJnIHF-B{kgojR6mV4x8pH86!}7`5L8YvCznZDH~?Ql$I~up_AoYbXd}vVp|YTj z8E2D`WLT4xe@;IE5Lw9L4sP5Fc?UNnBt03{--`r3At5>A@3kx^Wn#>5SOUjaZ z5xS>d5S6x}utC$n_^Y?A@<)13n`&h1ELj0aXDE+1n4Bg)id6KJPU&4!SfClJm zQarI7oCdTxtRu;-DK)F+uBDO(D`%X&wm=Wj`#46t)exqDtg7p*!LF;@GoWp2Nz*Jl?5Ed-Ea95P^v!`~mGI2bqoljtf~Om{FQ3qi zMp>hkPZ=wGR>Aqp*Ehl8{3#|h3#kF)Zh%bVNXmfd(cHNXC1?b58Kz(^z^hu+jHUVT z@`+hgnOu~1>4i`xjQ05#hFlUCUPO?b| z?)C`i9sm(*y~U$qF`JaDFuoFt*M$O0yM+b-Q?Iw=;$dl$a5h_0zKC&#^BOH3G|nhv zX36jg0O>n#H7|O9xdznPF(vdCm!!nQIPmoEEI!AQ_WS?Ij8z z)+oUXxtT!#dM%ri?%C_M;&WOQHLkaycRszCV~H^50R$QGz@r`WTLvfK{*)L&B90-S z+uIXZ;*Tq$uR@V5TvH5=MujG{+oT>ekUnprTPV#TYm9|tpVqon!Na10i#0(aw6J_q z)iJoW1ob(_TwTDh<$wySfXD>MwAe*nqBl+~|8SPf>9YxN+6uANIEj@oLrr?;`2hMp ziX`=3S$#}=6YBJXsU_sr1Ewx(n6st)9PRWQcqTfya%#E?QAh+Sgq{n3$Bm!?FNI+; zrLl!U@^66u8+^eC)+_!ztfzS4Q&ihKq@A~3L5kKe@4266Rvoj3Z$wocq`)jzK-s7B zZ?hhNsJsFsG_rVFHMF$4rIfy<6g?$P`hls0fD+(dT!1(-ehKG^&M-ZIgMYxX>)VX+ zjl=$F1roOlo*~af)|Qob;MJsuwzpoS2{Zh9yO zp{7dM!W6mw4OKD^%NiuvB{#Z=RFBBwpXm$B(v1|Df8v(Cm-1dJ2?-C9)Cv+S5CrHX zN#Z72JNqB-3=Uo) z?vrgofnI-5#$cb2Q0JqRYp&nt!z;8r_0Qqui;!|?bApB0rwjHzqr3|p8$~lx{9dy}K>Td|L z=x;kSs7OlKDl{lzAKrQ?tZI!;d)hQQrTBCh2)4&PRm^oq0OLv~Gx!M<)AXv|c#s)avkyW(4Ea!ajS6b_fvJ7t@;Hy9n!y_`|`tZ%$X>H?H}qjADu4= z7N!(NZfVG}sC(xS0HP`Tt8 ziy1QBqboevVhg@b<4K0$xa}DWO)qMeIj3w{cv*bH6FAO`wavdvQsIgi@Pv=IYJRk` ziRV&u@gaLfB%~q!U{G~QHu%py2w(P^N&8!`E&RO;|NpE`o_|@h{m-@2YJZD14J3cW zR$X1jJrr9T8(Xoz5~(L`&_x^}D^N-y%9bVjL=k7hMqCdL>37g~!uNtdzVfvu{uhElB~Mb{Xc21OQDYw2C83fHjheSTwsWSzsZ6;ycts88NHeDDj_cBhet3p(*N@u=TolH2^-8_>QKS3vD zIvTN)ok)L>82Qv5?h+v(@VA;rKeJhl>a<(g4C6;R%N5O3a}-*(#e2a<)0zs7KorY_ zUS^#oxhW2T+(AyDIpW2p$7P5>7wxV|R-%T+e9C3Kstgk2Qa!0FHUth-IUOKzM(r5- zE1*I%)xCnTI@)*qjaJ>U&US7qmZo8W73GRVzODsEolx)E|3kz$1L31SGHiZJ5;qxA=j9)_7x*wMg5!Phoq?{raFdqEW^kSnqE~WKK#EH z<2ILrv}=1mm<#i(+=oct#uvx0rctI`7uTn_q$$Lvu+UjXPC|x#rWd3yft#VXuu^@J zzEQ)DmWwR}uVuZx$Bco>#-wMnjy>bmY!QR&U+JMyJE4ZiJ)Dlw&pPX*EGC=#Bwn!` zNh79kPW56Rq4zvYq7IR~&pv~?=;ODrhC0K4?0X5)w|O60-6#6@tlGeh*l_kPKw&xy zu=c;*as@I$cFaKY2vJPQ<6FmEmbl;34X?Z)Mf~*v52WDKLS8RA(mX?&Tfdq!iow9R zmjc>x2=GEwbWgn7f{8Sc2YGwQXs}6zxGS#6!WBDR9Ks&pQZVFM<{yi!ss@VB8HK#A za0tdjwhc4()NoDfpq&HGVJ7>7xj;I0Kythg9}f@%^@%Lk;We!T_5BbZUkE|I((}n? zwNYIa5xD(QW_y$5TYR{$pO4QRZl$dx2>uuf^6xv`x?s9*6L;%7+!>~3VteqkLw>h{ z`u)y1gYYP=4P%~Oh`7Ed6nbvi}R*C1L=Zramrmc4h8xc_g$ z@BS?<81Pr`=Jt=hf`1$6{zszEQP=Un)xh2&;Yp~8M%9tOQiM~Zv?Ak*Subu^q@aq) zYN|}pIVvWl53Ogdr${wloTF@(rb^SdEC638Z=#1Um_?zd;zXixT3`JOFR25e=0+Xjitqdw+I6-Y=_|K)SXjp z>nw^*Gp)|fOCDbUxO?3I)qs%%Rb z?ay^?V(LVtIno@G@hRzgxb@RXGV#``RBGr&GAw$yDk(zF_-{Ffe4k>uwP|uCfFoGxtV!UaxzipIv#z6 zxt4H~6Y&xTIX1Q_IQ!LVLo!Xf!k8vN3n9qqB7XtlZG3m|eq!@pdQo?ojZtf03`v}6 zxYB&udh@vBR`N#`D;y0&0D=f-HRHu2Ut|ilSxn3@pv|F>^0`L*uIYz7bi#;v;{pxy z;dpZBVg@PABch0RlFC)Qdw8~n##^euhsXV~ zE0LK<5d)Ldwry#ulj{A;a!`v^g72) z@m!6botGlNB1L{N!KQ!Z4&Fqvk9Mrw={fDgV^`ISFIL^q)!S4Cf#3PvwV)o#eg58{ z@*>^dZ&aQa+e)eXq5YygbRNZX(WEYW?tAhiTl78?@Qo#aJhQA|_6czs4D``vhPPoLNMBO@}th|Gw!*331>oMVo$6KbT;g@J}e6tMmNK@kL? zwQrf9Ef@5x?Gxz=3;TRk5{=_rqld~ttHWk&l(Z$!p^Y(99=IPX>n^dl3{?D4XVF1v zUB#YW|0&V`39F1(Sg>2&Plje{H1*wFux*I6LzBTB18|4ALD(2&nA*L{e`Y=tW8WQqknw6<75yTUPuXJ+ zc|o%QwsYh=v_2wgN2oUo++{S&BN6bc#sQav-VW;9_Q)nli9Vr@+R@xao~Ey!*#|K3@3ekxjOF2Nr3y}38%}?7L$-1EBa#E`-k!Hz6pt^E*Wl4D`Mq7kSr@sWUMX9d) za}i|=r56zPbFW(qfA1Oc`Hh{mGmARxfM@H*A>^{VT5DTGhXwEhwF`;HHlXXBbk2)@ zhb#DV09Q1A&>&4jW5B(s*yOUyCBE*WE(a8PE|KvNtHK0vPWhnXiXWlF6MhJnqAt~c zb97NW=Z`I+6<@?Po8OC7bEZZ}0J_=m`v>A4-mWdYs8%r22jVMb5KUvt6(%rot z3^XSK+A+ZDb)8@NZW~>rD<&M6UH{3f9dn4j*UHH(LB?ZU>>fhu9yktRLe=8r9Aoq> zt2Y!LP^IW;S>cJpiQXMJsZ}29NZA|B%;^CKYQUlK<~i% zy{C#FOMrJ6x;9=pBxoct-tP5Ay8Wt_V={@C zQMA*!8h)4QM;gzd<1>H9aL?sV6sb#?NsxmxJ04^I2)_u%Y? z59_8$8l~OScQx^u^e!Cct4WyjivG;#8;#$ia&GWtyerG z{Mw%pBST9?TW1GDW1|1ougg~WW4j=S{6#|tSi93+lnMj z*t;_ctF5r9kvj4<_f>Zat(EN{c8K(w#E=VwDejIT<1r`aCg;KXMAY~5?E|F`wFNz= z>!NqnS`injbP`8aqhs?}dY;Kx&~_5mwP@#|s9aTQ^K|Jd$1v;?mX&Msj8YFeT+nCA zIZ>0^yVsr!T9!Xn1!b~r9KPJ1 zuu*rmD?-m%!3e%mFPa0v*7HYuv1sHilvk7eTV&AMNV)1D1`-8|V*d*sh=rJlHiEHi zi!SKGM6x&`1Q}Hs*ee?vpZ!Aj`@u58WJPDYx zH{m0v@)MBx$B>}FZ@u1lmAag;-5uZlWPfaUjzOT@Wa%W-zT-T9cCO!@QW*ebL&(Ji zC_`ebGS83&|56SKW>FVs`Z=N=|JF?GKQkWs-%hBsxs{c^m{sL++rzk^b&* zJdsp3hs%B8)x<^JLK2@uXJ@MG$CCJcX6ADA&&>`{Td;e`{ovJ6G(B{4vIrMaDV>=fdMU==cEcOcE`%$12}&AC6&mpI zq9r;y4bzB8idx531mkyuqlzmJ1-6=wO2W85ZRNz4xpSfO^fEQ76Uh?of9slB{^m`@ z)nZes)5VVp!J^6M_2idgrng1O2RbAk(m%plhfXN5&=gAD)GR_KeCCv7&_mna)BTMC z^EPXh%i`&WawcBxJ$P8A-o@?Z87h)1Ky-%Z9ODJ13Ja zXGNWFMlU=wvq-f)@-A>Euz!I&U$o*CEIF}ZsdeULN}|;`xveV9Y1b;mbT)&pkspZS z&V-l}@5a=@Kg&rvs7e&QBiDy4zB{1O|KEV=fNH6qT?mubt@HblQ!d8V@B86nzQ39Po3AMRcMQ03U;l%+{1=X;H(PuDwNxx zW2Uw`N|e6SAC3m8Q3u!Q>c2d;K@=4oAMz?E`tN8$GkzcAGYL!s`tmtEbHe_=nUes_39v24NgHs`M2E zv6j&7bDK>#qp)IC$ddxx#LEi+PmymW@IHC%N>U8aDu0w(Ep8+^3CS>bhtAzsCl6*Pvi)}VjTQUweFjYFVVi09|x?8%O+C zj7h_hfhV6cQANbkLC;%{9E0eM7SiQHQE2*=MwRGHg3wqSE@ zrs{a9&NV^pqE~du@%0GU5&_TGqlHG|nZAZ9g*z^uLvjxmzb(9fgv$+sGDhQ1xM2U= zN;BL4uYBkK<_5ewA}OPDv&Pya(1iJe2HcYYmWYY-7iq{*nM0MEM_6e>UcGO8* zB>XN5gX??2`V$twz}5pgD90!2b1VA&+cXPdc6&Poki1r=^JVAer^u4y+UooL@=pAV z(q2MuxaV_rG%}@ql?>*rI6^%v73`@izIDpVYi_GBb?Q}YxM?4vGHtUEMO1=a&>udn zMe|SPD0O!o#l0@WyqYY-&y=vgA8T8DNAb{4J?McQ`4qN{LObLvvqLkCCjYFUNZ6)#>RH zV)j{#kwTmTeG5q8Y;=-@NIv2XV`$V@fO`JX6#XO)j<~g91$U!i9{2K}atJBc z=&KrwtnI=GTrA=W>fww^UCc53LFUU zhTGc=$LJ{%){LL%!Ci%l+K{VPN#UZ1G_K&PW7*bS3iwP`(Mh8MWxWpgUCRL6RC26` zfY&?5N?AG4&U|_FD^80f!L^Nq--T*~Z+M0;+kBi;_jScLt{%hn$>l5O`hwJ47_0f( z3?ytQs~Xi<^wnMR3UlMfOkjO`0>8#9ZF&Ng`siyk4H?8jR^U5%{7L{&xWz)}f_0v+ zB6>t?p()%F42w-CDVU}p^pXB5ZAI5%*8za&`?IrFr364@#oNffSY(IqIDvt=??|6l z8c?=?)Pu-6qJ!@)8|q$1I{z7xiJ6DxLMkBsW99t!mX1_>cSkL{qVuV+7WgboA@ zT};$dMA3fEe15X4AIsyNRsOz$&^`L-LcHYtor9e7ax6yfxJ7puE9O#q=O)L9A{kq? z>xyir9wl75`yk>4d-z?dR}OYpu;h7_-G-+`FYJP}3rLISfC0G=O$!w0HA0fduNK3; zAnj!HuqH{JZh=rxy>O}2lv-k-+(4!kG_8TFbAVh!c=qaSK6Kl0teiiU9L}Oaj!ptX zk~TG(f!7W9^|k!@et5!_##P>(`7(KMs2PC&OBnwaMmBnAGFK0!k!By)U)K%(HD#8g zhObd}%(W?KS7*w8T4lkX33}e@T6pSZ!v!~MSF!m@ph&0h2~rU&{S~z}{W>$s{H~g= znsiYh_3UdrEoI5TV;8f8hhcamJ*7j+a<4T~jW+#QcZlH|xFYPTXs0-#lg%{;qDVc{ zsa$%4LEQ~*N5V~*f!cM@GM%X_)P}YTh@~89r$SsDuUvS8O=iOd=1h~w+F4xHaQf9L z9AdFqWp|2s(K*TFLu}n7w$M94jpL(bubRXyVAk2t$bhm~k(|5BNT*P{Qso=(bVBH( zzi<>D+?EZ-x9y#arG*^f8|1O|Z{^w+Y8WU@HKd1XFs1-Zf8uEbD5e1A#(CirLPcxr z@68I4rQP`hHEiYI=VUG_^yt-i!OaH9!_zEe1rq!#W>0vK;ftxXBFXYevumn~CG`N1 z9`(Q|ptZmIWuo-367}=eEOoWo6U8AtNfRF(gmiZCsr0-t<3}CWL{ZaU5iR@_y>d#9 z!D9Zz9)5)5`i%U-YRBp|;57!59~S@Jx!W7HeoKD)>c!&*2!8j%;2j;_6(h!f&R{~Y zD~94k?iTSqb)ZZ1rH>5Iz;okr6}HW&cLLJogxXj_?rR`9qB%^dF`_z5Ks{K|RbzZ! z;U+mrrrcF&45;jtXIvuRq|F&Qy+D+F7s6X0{7MEhkc)`-m34cYDij(kZuiPoAJ`i$ zyP&iJqBg{mJ4nbjEB`u!i^|(`!jY)~Ix7}f6%&dQb6>cZuYBwKk88$niDe7m=ZaZ@ z{oKXX9-S5{_gW9aPQU~J?rnT#bWWl?Z?op5|z*QIT8+(`bzD0fnLdi5`n<&`3#DiUAqs`*Z;{7 zWXytJC_O=2M(;*yH9l!pzRI91kJ2e`_Ax3|K53Sp97)M`H24g-n54oEHl=O1=~lC+ z53}po!=W5(QGu(BPU0EC-TN3_&BPT<`xIpvNwa&F%#5>B4qly_OtG_1);1Sd0@DY>qv!dr1VRhaE|j{l|Kf4DYEt|6JP1Kg7TPxs36Dk_G?w_5P7e z`G1%Hf03Qcj+>Pk;DaCOEe-|*EO>?M_VA1Bz6A_pe#R$4W_KfyT<5E|ns$*K5`Fkt zakVat8af0#|?q^%FNwDWj`USv6MMZyvL;4iaGn&qN=yu3I~b z6nHbZ9f>m>4k4!FYT9i+;|Z{!uFPvd0@WQaycI@zBjhVPmn2jSr;D#2=m?l^gv0NL zt>F=owa9}lg1KUZr6P;<5?GOx593HTO@+uW5zt!N#I!c{z4z}?@%re_X65rs(PQko zVo2GvO)D=rqa7nEbC9Ww7~5(8v41L!{~QkePK^o7Fk=(3mol5`JTSX_2c6OORfazz18Xr#QpPMQRhr(q=2gf>K6 zWT;ZpnW$PX{OhAYy?PtKPyv&pO)(=cX+R&tRq3f%rM5pL@s)!;&>U?sxo^qDxGh#Bvp&_07 zn~3t0YT05zAt>~%I`r=6$=ux3mB`S~nEC!WUqJ{FPHB5`ROE3u$O8?fP4JA3dP%|) z+pAJt4Gfa7-fBDys%MMc_4K^DM)*;p(Cr@2A!Qc7-E|&tt#H~nrgQx z$g0Y>&qo25Ugd%`cq`~y(Lu^cKNQ6cHFE~Vdk15O&2Hl>=3^zM6dolP{O^3u-Rh)v zE7tXMJ&NI^)viaqlqhLbkvGwun#j@v(@I@*9ecKs^fv-6z0H(6P4!APx<%~N zb-G-FKwU)yqBi7g$*j^T=&MkYpkt)LdlVPx%ah`=^*XDCn08hjdZM`p1xJRdH$-*Z zY^}d6G|5meO58O*)M8iE`gnu|ld@#`3X>g}( z`Oi#VScpNu5i{DMx@S(;;i${y?Ve!UcMa3PB^hTj*@ z!O;Z9HgE+Ku9->PV8F)hez$sYE|MZISRBz!@A?L1!1k9V0uY9CTZ6$78P5>#C!&Zc zzoj8eVyj7_c0`g3TF|>eiD4K!FQ4>tIXaoFU}5W7YGOn?P>v%kHa3-yH)1&@pMV5g{a8@!f*!8SkkICn`+fDzfiMkR0Ex%!u9mb10DFE%STXq(;k>Bn|#ITTMr2cR&8k5^7aIXCYjA5^M9+O>&;J&BOdE?=6)jWkJfGW-hUv0 zr)H-=*Tv;iuf6hvW(&RLwzrX)$N#ulB|nrkr0-|0IwX~*8+3qF=17SS+t_&ZxMUEZ zlEfg6Tq6ha)x8;PMngEs!-TS$t98K0w^^!M_eHvi2Os8^FXi98pA?-tmVLMh6Nf8! zMS|*O7H{-MWOzj@S$z}hD93!U;B>clTT5bE`g|lu7u|5ggvi$E3E-1+k*@0?EmL8e z1jOHa^V1`Z^QlzH9rq4e@_bPH#5uAyTttBJ7L^Uk6QbT7;3*kC5q`XK30#nzl2RCV z%be07z1}HyRUmF-McG&0&CwNL%quDlyW*>qK2I|V~nRTsVllCn3kllR)*{1IPxswESQn3yjj_Q$<;-sr& z`zT#_w#M@b)~%d+8v%o+(GliQ)to96RGDK4bPc( zSotGU7iPYefbo9nrkUi(L9wi|!x7Qssm}TmWI!I+mX)H(p5^C4N-Yo;Z0sU~(rB8D z>eci*Oe~zFxCPK9vBusVJKgRI^oM?&s!;aaM!nnb3koO+?DAanffJxGrQ+m1$M??6A zS^~5)h?qxF!ijo`H$Y9s*aC(DLpHUe7lR~CG3Vej6YT*r+6JS%a$-B8Qp0rPMSw&p zB$E9g?Q#WxW%4Am4pUnCfWqCBn>8$|;XE6ocLOg}Y*sFvl!JhvMLKd?aqBwq;EcDm z35Cu2`X)vN_Us0+29IY2RrV%x_)K{-YkbLWiAyY%GC-pyVJfl~RZJ0RD3kjyUj0w! zx%BjEo#WKXyMTd3$o+D5KeRSZWEJ(3E>)O)hIC9NRhV`WmE=OXn&M`U>7fp}Hr-}@ zw5=ih)a3>djCSf$yepQl=Q3ulln0}1Jq*KA0!|l9hWbUlQJFx;<(bEN@mi}fa_a5D zu12JFCPj#8SMLFA21L~NXb_~MqYv_4s{~j)&d}+Aa>GhXDMphZG7~f``FrP`*~Dv% zcGfY}TrJw|m{`O7q8aXW(sOZKw?eC@d@(oqOa_~I!cA-B(^lBT5xqQ>W5@c`u?v#+ zbyCj5l&p6>)NoOo18wC!iA{3LVOoOb7ngN$zw#(|^HGqGVh{GorY9WVw`sKo)xSvw zL*fTSjr)J)78Y3X*O_OUTI!v!n)nQOFyi{1kSbhbyldeVm1k4E7>J4_x2B^unH+Y-taMT5w+h zYz9f*M;iZ?;9i4IKQrf?(GFD3JNj_PkfcQmlVm-L=Kffifkejb2xQOHte! zq*$!3xujIuO2eZ^jxP(O2!)B@Zr-&Z)dm zrSL@DcbwFru=!`k?yUr-4XoPzeFA6iJRJOBALIc+csw`ps7z5gl!^IF8q;C?^#(rb z+*KKnMDv)B{+Sk`y=3=`IZPh|bbd;w6{pjlFu?(h9Ec44NXTFG^I!$h;qstIpxChA z@=#G=rWyHl1z|`>sB2yMj00kS4Mkl?N&eBjs@h2zIeRDvkg3zUyF{f!cc=#ex;Jbg z@V26L!9=$B1SLt;1G4>nMt}>_wfN-rQ@9XJw6|ZoQpE1%{x|G~h@Ed^=YlsP9ui`; zN?|M%Hf;Jd6h(xV?ue3&+K~Jqkx%chO$zR5oy=7{tI9`Q9yX5&omN$}S)BgDYSP<7 zWr-;i$Jl*ILbft=Ps;9EJ&9u0!S1ewO|7gwB`>#Y=og5O_<0Ujj<46fQPEtq>hkV$ zo~_Htu2-GBeviATseJR?;m*JAG1Ex745Af}omVRam@Wi0eX928Hcbc(qPNTgt|Tjt zC-ebt08AW?e}kp9ShFzIEC zt@2!uy={<|#ZSMOh1BNv6}x8@bU~`ULvZfm3S8@e&Uz<(0yucUbGw0WvbjR>%rx@! zugmT$e!PS8M3>&tpLABC-RLWLT-wy$S<$J*Olb2tK|!np%2SfFf7fS4a^20 zXG~*xj7gbHyhM8)|1d-LE`eCdd^1$Lf}kB$;l1T8;)=ZwlFo6BD)_9ec_VG;3v@(y z&;($HMtY-MX@r7?A_gOmL_rlfkNX3a1GFct@vHepT~eo<<)Q@C$EExfS43`VuQTEe zvRsU=HLdRj+m1JX@vn`i-WFpk9&YP%AhHr}xR@Sx9@Z99MMLk_|-V zCV*S+uMaGfv71GSTKdIrc*5%jU)7yNYWh13X`s;VxkmqVkR@~AOyWq z4jeSQW1>88+|RqmPc+MhY2{*D+uu`_u5d=?Ynwfs)ITwl*q5cR4^#*+FE?6prj(8C zSKDLuOec1NHJCbg+N|drDB?IP0pFVRZsvVV$Ex`taSDamYE>$nQqX2EPl~YF$WxJb zgOsw9CLz;~4ni4C*CADmr{stqFksf5Ybh?2T4j8PV_04)6X(yey8JC8dWLx1`Df@^ zDigSpCGOK^ozi&uj-eRU*7p21RCUqWN&)Q5vLJh+AbYsn{xW<$7{AT()RIgxGpFNw zEU?#x`%yZbD=U+z1sL`#=z~Ggvq+y?#YMwql|&gyyC*Ok6Io6qSb=Uss*h~g5g(5` zP$ijAB_^Nw-OW;9K%tkLqSoIvt=#!3=IG)w##>w2=Dc;gAM48ML>ko(-j!Xy_z`n( zR@US@)-N(nX=j;ZIMogWalezdIsf+Irkqhqs1`_Pl58u-C zIB+Z+1L=rbtbAIfTgBYg-tX+W+CR^F&dm~**>S!&a#_KfmB<TOvW}zL_1kFYtAxJ;FHVbANV6} zbg;{RuaP6ppP7xURKdnWTHO~`g_9dD@vxQ>Gb@yk$DV*qZSvWu&UE$u!SY{){!}Pl~C+>FfwoNS!3eLF=)_j9JO%@o`jZtp49>1dGfzaTz5$#aC5nmFM z)9KoPz8ebw^vR1P!NOfGa|KKle~zLWR~_%Re3mk%NVPb+kF3N_UYjcR^w%WIfa=+m zl_benk(w85B8}*_-*(rO2SxQ}8yCu4Stu^^sa0II+7&o0nPsw{>}SA=zD~8gl)TJ% z-}C(f-)`IKVMa4XXS<=J$*3`A+R|GRw6*GE_}!zu+gUvm{P7ukUR&305VS80FE2w( z)@KIS>Cl4+!%ZK|+J2PF2H~9qd8Y((hlEC2?IoplK37q$&Rbc`u>eduqAR_%h93hD zP#3U_;L*S6MLw&s_817iekqasy8;aNf8G}pa`=auw2;1&{=djT|Ej?ht3o&_sbYND zFpOtPfdZ0m{tC`7P6&$oRYDB`pn)&0D4>QY#^2O4)kOqHasy+#6Zgwt*`isa+PT!Z zT2jj{KPe8GdL?)xLfLZrrQ@c#rgW6h=cSu9aUJpCF3ae6#`pXC{l)Y9{k0d*1Dy}( zi`?$>cHZ#GM2fdSJ+Q*~Ld4sEFWO>0ZAX(g4^M%*o5%d3{%>`P(R#&(MQVD}?+ic! zx{Evyq3YOj5#P_4oj{Et6*($8QH9V8q)_tYe%;@6tZ2nD4Uk%UyKEjUm3K$fA=Ws` zyJ%_g&H4EFa{HH%NiLUWmX_<(a@+L5P~mF2gZ+PD8+&ydSD?ti3cKUERiyG73oM8DLi1CjoAu@t+$zwr%c-xL!7V9$JQVrkX4m$U<_zbL3RiC@hRvkp@r4xt7B}J)1y)vhV(M+3wS5z=+;hTHIukN}l7zwK&wioARG;~y}S6DN6Jv10? za&rKv6trM7t0gO&)NDeYr}ul2gIJ~=05H#&!)(SRz6ZMTU{2Jd{!rwgL%B$c=?m@3 zZ#=3Jy`raddQEH>V?gV55+>%P0<9O7vnj8S2*RS*hz#9<+{t@XqlugGSvr4d0#6`i zTn#4us3L_EEJpmDAND$Nnsix~ThD@g1_wS3l{7vHZh$Nt7K5E2YV?EH3Dg8!i}WtX zoHdre1@wnR9dKD(&@kA*w`4{bf-)w@?u$gHSBKmYfu~I|=lGQ)gu=c;9@Yl2jaZ0u z*<5wVDU?x|FMHg>OUzqe&SxsD(4&ZB#EqRG>;TW@E73eC&MY$24kAD`x#EY>XE7Am z2Iy!ssm?#uC)I9X@O-)Q_X&7XCo*I^kc_Kn6KH2co|@T)&F42)5y?P^dFcC85kfUg zqiOnuolcNKO5;F)DMN)_AzB0g83};pXx`pci zf_{lkptHhWHlTHN1+HP5H6wOC)ACAJo^Vs$dMc!k&_Hl(uGr{mr`bSC3Z0=ihBmJb z=^R@%pEPR6>f~Ive@w}{k%TB?O%eW1n5WTXSGabG$f0uFT4N_+>4(BTRd4HV^-thGt#=ToZ^|3Y1?d* zLL1gkmFKNgM(@SX7`D8dep>N?zWf-u6m>dVgQ52CW7#5CHssn^y@3sZ`2xtGdd~dc zt|AA??sgHtshNvkke24Vmly&wlJiUET8gh!HZzq>DK-sWtN826X-FoFKXE*Z+n^9)E>41fqPseL8ljJcd`C?k;j zj;~#p<+OFsU#XNFa3_s!M17XK^8WaryXISlo$!h1I=gZb<1Ha^r*Lglsjx54ko$G! z60c#0yVC}CnCmoFTLdLi=L+^Z%zh@-P6t!vUQ3dN{n>5(hY^Y)ZcCcHG*8%680O~W zSHh@j>qp$R2}10MA{GixN4_%&m?!gO;nZov@)$vm#Lf+0M^V~b15NiIy9gOQX-8K@ z{{!k-9M*>AkECGjQ?5h=n6~Xd6_VNgE-vAl-x`3HYlJ*>>mOQVrldXYlt+@IZ^wcm ze}o-6_FdWEjty{mzxnnX$^7xSFf3>GCNh#u>zj_bQm!~dD`yPeD&&=-3uW@knUpwU zE`ViUIod4{FQ*zvijVoJ;K&cw@aZD3jw~u0F^8qO2~%^y-)Ic{56ipOKcU}5=Gh~* zx$_g2WLn=bDDGS=X!pm^pF1&alQAt1D^x9_SjY*Ck%0=)t8j+*62Vu3k{ZRL@|+Iu z6M-eTB1XXCs<10?M#Bx3*t%#*Zz|0zk-e$;vHd4Vgc){}DWiKf!BpK$rYGpT*7eQe zl9CVHJQ1#kBOch=Z@8`vwRY6suI0C6$KEM<`(l$n@P@%=_Xg2K?35MFNe)Cwp9Oya z;~i9KdQd6)vuWM0)M1nP0i(BDQIaF{fHu^~I|wgGNRc+*jB$lq#Ra^+KrQacrW|7{ zl&wMkH|!C4il02v9FG1<3V-HcQ7C~j-EFUmXHYr5(IZV*?y`y|?$}X9TPt~278%lU zcKLg}X@${T+i>X?y8U{W63naY@2df|AT@PWp%S-?y~oXQpaY(69w<44)@XSHf@^*_ z_yv0&(_$%1lMkWwmJpQ9Axu3;tUl$zyo9%P)C9}9S!pio0fS3~LQkp514=XSwgF=< zFZF4DZ)+IY^TBLW0Rkh9AvrRLFr*5n@1#OxbDyIbc<>iUZvaqb1SkrX8!V$~?M{{6 z9^#mSN07e$=VF}!28Ggu(}Qn0)u_E!eOh=NH(?@@6MNUMNxmeGBu#UwtRBr%J)K9o z)>|~eXvCF2sU&&>H1x@&H8gGR`xTSpi@;4OAfM>CFL|r?n%D2M2Z)xJlxPl7k0%)J zWKd@iUd&f+@l{cPVh>s#8#25-A+?GwfDd-4B(=j}b!ug7QDeNv;n!M2`$ z0H(HKdV}hDUGH3T9A60%-iEJV<=C#??$AzGJ4{u`f0({v34y;En zh}1Nm|4EI)5wj>t`_W-H{kIHr*8e;O6w!Bd`bUHM|B^|mo64PGoG$wEN@u&Zrb=Cscx_0mTC?&Nhp5-vlGF5|S*w~sWJ=}s5@MrISa zjMg|Yz1{O>+i_-#v+>Wj&ljW~!YulIb>V7-ahRYDE7K-Q$@x+1!_a!4MXW!G?D1T;Y_O_otig#u<= zA`6BFVu@WU2C5>E?~mmj{P2?iOL?~)X zZfY&TvS0Qh)|i=F%@c8?iqH1t<|$MbSKcz>;44dP)Lgx&?(;wS!p&Fn0%s zelVhJdNzP!5?FW$JjO~p&%1#SIEgmpF~}HsC7tTxXS+oO_~yI^Ba+3U-09D_d3c=j zUGRl$V${84*H+l#PXOmCAZ*vh_Y5&>ur6lMJluxu;uv}Sc&8n+8g3w!>&-@ryF!ZN zCe~9zy+*6&8{?I_kt8gN(nUXzWFCc+5y2b`uwkCtc zZnF|iZO9@Lb?icA*A=l=^P)=MnZWI|4ip${4;_iwc9CmMPW{UQWR zujh*eu{tGKW>LB8%|q6ox9vado=-0?zP^!R&-1qE!)U0f`z9i}t5sDN>m3NQxr&P# z9EGzZvu9{ZlCfx3+(^6y$5-~;wv{c|O{U37mm7t0gnGxpd*;&<7bW&w_Gt*76mF&8r(>OWn?Idd zMGR;2@c9si3=u{OK(MwW!@zn1=-NdF4Hd@A!3r3yOc`aQDKb0AqW$F6R3bMKvT55q*X-!M(g|8q2)N&N+b2dsdEVldo5@5hvmRLA49vv(=pd zoWQxFg^cvs^Y1qK#WQ0lV<~P%{RlbAP+qzG@k4{1l?KQwLu3VZTXIG)NqRUeh}e8! z-l)$*vwP*Qr9 zG$Dk*@o@)s&9ogBDD35o+k6*i>O&Tpzm?f~xpU4iqCNgmEUXwirq6jDJ{4ua5Q#U# z_>gBDR7AeRJ-lo{KISgXMqIe;MhS%|hPt@g>GU)%Xhwybne-f!52_1f38mVY&MD=d z9_~MKajFrC;pe%COLZw|qsRg{gLom*q?B>!vVs-c)C%{Urg$5m!rMQWQKB9Sn9DLY zL6TwF)iQ?q%K{^&lg?O8&+Hr{Z~A6Fg#z6V8s^W`m_b}nr8taVm`zEIvqepQtu~KO zHh#iD%q&X5CYDlC*RaDL3!Juj4e?+uDS1J@yfSpRJbi{?Wzu9h+)OiPO__+7p|89{8jbxxO|DHMyN0aP%jxhQ@T4A0tAV;UL%kDLOpWtmIA04JSA3G-Jy zonl)}-|t=s={vC4Rs%bF)hst7E!L)S0T-3VLovza)g)EynKPAHjJtAcsSS(sfuM{; zk@Et44Kajq${zjxvIkgUBrl1kO)e-mdC2TQL!H)nGTLHp8E)&Bnmj|wH6`!U$Tyl&F67Y?JngMG~sSa<@;Kz5yWB8&b3;^5hW%PFX`{c zC4+qu=EJH?MAHGu3o)l!AbUajW+`$JDW%+P1|Z|Ikilj+AZ5w8`6LF9&L1Xs^Pn4J zwehFEf{(4caA;Dky(qqIrTN`JhSp0lU##<)p~84O)%C5X^J=z=CpV|{oJ+yqwhBxu zo{0vwdMmPj1{&AZ#k-p_#hS2VYn7&++8s6NUaXr~0ja;WQTnuP7-^glJOm2<#`N8{ z4c!BNyxzsIscoqGEu2v~~Wd?SD zEd;vd#&nB&-l26nCu_WNx*!5E`ZKbc+uGh^!i2XAUipLUL^!wY!U4ZV@gm+5=8+Qm zM|jtZ{pts)8RX{!Zh@QW=vxFp5Q3(IEjSYO<%HSiVn1E9St~t*_ZG|HEA6zX?5vp8 zW+ocE4)6#gA(Kj6vxoj9>cSqKG3OANEpQHy+51xo7+?F~M|9-5#tU76tw3^nyhOp( z)Z&jdNmS7G;|;b+0T43$MuvzArbsF>BZ2lu)HVrL5)I@U_Xalgg3kjq3nnTO;8DH7 zwfzA0%nc|jIgNb!XRU;JR-g!u=q&`pK_HI6(r|!Yr1;#?Ob0Ns!yu4DH)`k1Xhr9F zZae0NcAlN^xtH!Rtq}|T8TUaTxZ0t)BtdI*@3%W$Zd!Vs4(YpE;8?2eI` z(A=}gphoxX3!+3%k<0XTe=lwm=k}N=QZj`H@_D-U7G5;2kQbx?mm(*!Ce`2oq6^ zDU*1yS_Pn`CV(5%jwlW%;l2U5vCcyvqMTs_2{A50H%CT(*y9e*jhHLF0;qG>m@kF5n<7N?2>4#Qo*e zEo}vhsdU%a7V#2r+dIMMa7fRU`2Dzn(aZG*buGm5^Xmk!A|Z7)FTX3hUNkQ*~s-mTKcIB_G%;hRr~d~ z;4X69Ilg?rzCuQ>bnm2>UyR6)Xlmb-E1%MFJA6HJzGkI>AI8B4Wtr894J^yO(z97! zkulpkDun0SO;2Us$>Peo&T}`r?7fg!&I1qg?u_dCD3!pzpN$cS*pW1}H*aT3RSN8nv0tl3Y1;lwB4WJ-AjVEDKsx50SlX!1DPb<)B9I1kH_|Atytcx-gd}Z5@|+V8!uN=NZXWORB%0ns|?LT8?%OE!{b( zx<8@2x!64Pnv?D*1EZn#&K(VNP%Vx}xVTm0u||o$atm9ybo>EJ|Fl^AZ-cYdKfJ}nqxNrJ z^9@>YL0WQQ!o2v%5^8INx&~BuvOKeLK7_-4V(H!%eE;8Fsy&QIZ5EYsJ{F8HmsO?$s0Tn(q_$!O76vQvf<~ z9t0`%)%G3+Z0M?aLhBweD)@@1mcJQ~C3<=F4a{{DXb?&+LxBAgj9!*r^Je&%nRpPj z7g+}nqXY3WFu%#v#>*%2XqOb+RSqP!@fPEVf5aa`Ae&Y6UclH{d9h(3BQ8`(R8>|; zLM?&W6#?`4tTON?H5=9-ur6WM_TbeFtNqLLG`7Ek9e*fV4zy0MT zrN<5U51i4b7O~3 zzr3lwX*f+>O*>T~*ot&b5KTPy;5Le-V3HCr^S-Xpn5qbFw0iN@`vJ+^&v!$Msuw%VPS zY@=Smgs6Rb)pY)@Sc+0*eYR@S*IMve@-en%LoU$7Jg$US`n>U3l!;WqyiVwG?cyu+ zxbU`S`ZLGlA-y&m4v|)-#38gb17ncG_-&pFHIwAFPP|SUFyll~6?> z^4HoUj6ju|?d=^rrNvo-V?5ZSi4fg#j-BVqGeK&TLwjy%woj+_4_b6`5w!OGx8Yg3 z(+={(1EEJJZ2@aB1gj+7(>r*)|4`N=p@nyUUM+oD>2&TFckCG7K6FMN^%k<(wG#M@p+ig2aTN`4=N;f$%JW0CWrejA1_i^ zj?kgcSn01tH1m8oG~>QW9`(F@Mu~PNDnge~P6P4)f4U>MAcL*K_YHI^O1m1IN&6hV z5p$EexRlYu`9(43Q+ZiOw*9-%O^TKGmFh)8loAHYjpP)H1!v}KJN2WWEK)B?DoVp3Pd#}Q{sr_zZ&*1O*#&5{oq^nI-1S^_Dlz1%!L%m zOa`Nuw0*m$F2RA*(V4d{`&5);*jR~v(G=A_t=$qv7?_CjzvY2W^Ti*x!E7SWZ-Nj~ z$gpmeLA-RBulqO1yXB9mv_Mbk2 z06C>_FlEWh41S|TCQq;kQiM!)GQz)Ys=Ax!m}btm9gNpDL|GA^Ky zbL61dw?IzNVWf^?ugz8NpzY~o%MmOTKC&2!$7^T3pIy}_IBMPvkL)ao_YTur<}W_{ z!r7St7%YOYx4)dj4WzeJL16e!r?D2Wb^0@Om*SbXTnvS}B=mq3sfYZV?lzp{+m|)r zI(0_n1ihqQHIff=%%dFgI3DbP>)rNtQeo$(;ItH(Mpcyz@TpIXyiaq+in}kH;twOe zLZ1Vksin=S9EIyIzUQ)^UlCn15{fUon(6nNh>D^6TQ?1{cX;hoAh~t-CU}N?63r&j zyDqk$agGTmpCLk{EU=3HBMP&F?x58nfkCqU6?!UJiW*)qU?!+M`%4yJSX0Q|1__p6 z)%(}YMg!(ZxXCydW=lk@`uqFn6NqW-2?@h7GPlR_zQyw1B3LTmiVJa)z5WoSpbFwW z{l6H_Ub6j08RGq6AIdbASB@CzCHtF@C3L2$&2Gt2HDojUa3_ zDj?Bih!bSk7_-+ViwpB`7Q~a2ktm4D=1C9}qFIq@kw~s-^)X5?U{imj#${kH$Yb=D zVve-O9>yt37BMIy!`dqQVTOq(x@4T#((66tim;gbWcK(n7!{I|jrrGCnoJHU5wh9m zn6E|%08{VSJL+1dGfs;wFuZ)g#|Ny%8fPJL1$G*OlO@G!AYgA=#J<{E$~F_t&wETo zW0+*bW6DP&v;1&(6YVNXP#?WAQJhFYHM37W>4WiYe9VsN%V1O`Nr2sn7*6p zk1B5U_Ntv^3rIl-dFDJ5SB|U0X4Exi&Wpbj5s$dVqUJQt8Ikx&GuO7X?#%i@f~wMm zNK$(biNWCgM~K}xBt4JN1yD(?A~A&tQ(p9g%9a9rUu%^Rm37%r?dj!v<1Lt=JB+^A z`>tLZ5~}lVOUt|$dU_#+>$!tX<2LhX2M2Fr?}sEv93M_prKsWncC_uQl~X~mYZbnq zMSiY@^ianK!G*R!wRFWt`^{E&&sJWNUW~FrE^*{kR&jtijr)23vXGvVsG<*YmjVkt zkB3#y+t)~I-@k8_QHqmQt`tKN7!(&Jdf;24z}gr5Tb>j#dX882AtNK&a{O3WQ2_() zZ!%;3=Y7B)Qn5oT_1XpH$a`)r6zr3Kh>3OVAoPUlIL+5gQoKkjP;TLQfpX+F*I3=V zQl_$i!*wf|7P44(pYgL&9JVqED;}khoTIBF_`>NbE#6~m{RlPQ5kkl}bzKlF#L_`% zCYdfD{wBaz!rQtKQOY`D4f~d8Mf5O^qMw3K#XvLgDUG_T71{)$&r;B*4y-Q+HEq2B z(bj^!x2KJxxHd@Ua!1dB{(MglZDI!ba=W9S^oi*QmfP8)7f2MiQfQ&!>b^ju5@P*G zpBL?eaVQgw%2{VsLCWYB;l6I=BCAYKY=x!(; zoo@A@z}u6$a5?q8m$s@HvVsGff#8Y7*et4D*5|fPsV0@pMOAzG>KEJL#$%R}3T z4&`ulm*c7n9XnG(Stx%O*I2fz@@+$o{CPL)&vefF3b)i=plPureJbde?`XQS+^lS-11LkJaAVR;Ul&6xmo z-b3NY%6`nhed>Ug7U*qolnOMAA#lr&$$i5 zYoEPR*PoBHaPLT!0u&1_i93uqm_Dz_BPRbSx}GKN%kz(A$+WHAR+dP-q+7d>0A0Iv zjG+zfX6n9o9>Cov^qn@~t^wolN-hmAL;usa{-u0E<%F}nWBfr6yDdTU>2+9Q_K#Tg z-$`w9v^{zEU$)`p1BR~Y))k)n(C%QzJgl!W1UyIR)P~qJM}c2j2B;+w`X_mb=mWcYD}Q z*nB?VU$qC?LMQzWt*R(Ov{EfePGoL)l5ALthpT6+XhVt*j#QjV^{b?w8`^Rzm%lh6j&xMEh{~&`E+*I#}+uuRZSZX7u`!O)s-I&JZh}KWt}Vr9w8TC zn}{NpenHVvk~bq6Zg4>Qnco}CDqb~7x4vCRf=aQj6`T$G5(6sgvGA1E)*HQ^6S7w? z8?X8VdRRF$8+g&M{}inXOrm7OC7`!lTDn+cf8}(3YF#*Td6WhjDIcI5p}?&W5Uo${ zwnHwwNRZwlN$(dW7Z<{{{d(Ntqsc~d*j^qKKYk_&7Z5fswrKtaUmr*cA3DBVyNcJmGeK{Z&{OHqG!lIZB`hgmw?-ho25;te$j?Wd3SfH zgx8xXOsKG)?t7KQlt`0l*UA^x6zm8rZWPrT$2}qE+a zDX;SeFnYTnMzhiT(e;a4_M=-8uIdWLZ%G$-rnfc&TiB9V8+ve63ZPXE_&38=ZM%E^ z!Met>>>*eem$6EyX%=a}UzTXjP_Q;F-xBHAkcrrk(smkgUnf)D^d_^{qi+CHCd?7Vu4N#1mU^#vaGs3p|Vk zKAM}U6~-Txj7^mfkdKf}ueu?c8rV$*8&obATa8zE)hqcK#Absw}|tKgu%av5JcUTV{vlS@4iIFB`2%RomZjUdF(QAS#*A|qXq znmPQ2BFwR^82Oo42B#pBl>^pA=Il8+di_hq-$$?bGsbBrt2$QvHL_$;h@92yD+^r; z#v5j6x;>zfH+PFJ#sN`wezY#(W|U%*MZ{iP%X&R%CnOT`W}}v+Ow&4QOwPH?&e^3X z6s?YwF6rVPXs+Q7TK{vD{1fXetO_Q`wSO51^=)~3k2DU>Egf}FG(}#+G(}@k)7CrR zd~HM5$~Eqa3%|*`1WHQj*-~^y)$Y!q(}RBJ<=4yOUOcGgi#N?#Ubd>f%_CNx%5?|H z(d~peuYwA(3nqi7-Qqm0rJl>*8Eq?Lw&6>;2x~*uwxe2)su`7^Iq<~zE)cWm0PCn;;!7a zPmPA?kAF@N#}^YV;(n`5ReaOm{rA(u{{gAXcM{Il*xu1i#M0!yW{2H8k&oQGbuJjn zj1de58vfJ>va7UlHbaZXh6tdFS0jRqpaby+Er@HVT?DTnsM1S_ud;_^tV!6W&(%n* zGJ~$u0+ThyF*~1;o@^AVuHJXfzKPGWU*1hjO18~bZYKrtIg4&RWllZmY+a8=*>J<@ z#ihervU?p`hNZ}6Fqg}3)GDSVo(J=qK^H2DX^JWgIZ-VzS{KdIyiq%hSD!OwoDjee z7V{Kl&1=rOn=~6=%@~T#E^hCbBdFKq!k1?fN*l|j4n-v5_Te&sx80BHtqxa8CLiA1 zFu-{Cgsw=ifPj2*cet;#S*RX)3kVsYqSc<{$P8&99$r`LH$a*@J3T(RT>985IUR*?H`2WG!!TM{NT zxUJ9hF=d#M-wMXaZ=cmr1}CV|sB!GgBfTEa2xPQA5byxf7BOHfKpjMjP(ilH2h9_^ z&8Y~_>ME2>nkx_uzfu_X$kxWo(leU$53T=Z%03lX`r9(&qY5M6xOp=}Evi5VAS%Jl z=c@nCa^BWZCMZ{_KysYIRhx`iPaT9`)c1l{Ugno#D|L_~jbO<17@{dAhxO07k)D-J zNlC;hfn|!r!87&_vIS@TtDe#bff^s?0iy}J8Vztd9YGM4y(a}u=&&+_%SCaSQCag9 zgU`+WtdeDCus%#2f!KD7=zc5BJ;-|xUW50PD8GjYXqKzCOpMLb=daG6Z4BzGkA0?C zN2exvn3B1Jza080fZgLSEGkf;Nn993iBktVx5KEcI3zz1kNiyS&w=8X)6Nl`BcW9* zE5(l73!z|sgdS!Wk2zUT3j>rdm1?+&4uc^u%s4pfKD(S!t5nd=#AyMrR~_YK4MGw~ zu7-L>y|_e|D*#97bcWw6Rd+iU`cb4*8X19+A|RlMF~GFY>{omNJxQrA&g( zue}d0z>gK3-^~_RP^j}C?T79NxGTqB=zEsH!BMnR6h^OK$Z1Q@Jq7XW0s6VpI!qfK z7-WNeOe_e&@@Sg{3BHP*T!B+KsHoCn9Xy3l^Y0jcdwAoM<>gmRQ*)ZnOcWXu(kh`? z{6tZdyV6L7PO#-QntA#tyL}=>xK_1KxI42a_s}GRk^)lZ=YoQCjWk>yFC`tHoMim8 zg!vz-nl&QETo)m8JyL|N;VVKW^J&Yzl42BJt8UtFGjyvPq{WqR(?gR4n*GKx4Z`Kl7 zbT^89x`@#^N~46z1ErJW9jeQ`CGIbo za2=P}siSrIigq!78JmS_;qy$YeM3JLAasOKQJKghsW?2dPpkUdnVeW201-=2xX!6m zK7QbM&q5hXS~x1plfVjgW>uG&qsym)JVQc2P2+b=li3W#t6t?71!^O~p!gMRoH-j+ z+IX6NL+Ui>vfl+#?N@TyD4@MQuXhE@wlJFi^EA7eK}0lD5!Gfj5HLTb8J;;Al&>A3 zSGdk{5jw3OS(d#WKLzjVzdqqjwU&aN$2YRftIp>wbg565APdE7U5)S}dkACI`QnmK zd(@-D7H>fBG?yi?vG_J_M+IO8H-hV!K=kJF&>h8vlz@Xvuzr}GtB=7@k$Q_qE4+4Y ziWWNIiCb6nvb(65&;u8oCHoLqp?R7mc_*dHyk8Z^*|+orwGF^y^qj~$ha#(oP5Bm_7jZ0ZDBRDT-yYJA)r~EncgNsEJoDif!Av z+ifipC%*j;CfBsY1%;}I_W^Dt`9+vn7$fT+r+Pgi7q%Ve`Y{F)3}ql&Co<=lROgYu zW>zdNw0wVgelA6eYl+yn>cWD%o9TMl%-yARWKMJjb_Q-vZPyeAcEVJA2J`*>tHJVs z?)eFsZWeCF0exiqP8c4HimQCSqC)eCJxFn5^y~Jd=}V=?fpp7 zuU#5^II^RS^!*2T;bxoIys@Tc3%j9DhELjp*(|n@nN4r|vlc4vj33@ayn#j27rPA+ zncOntnf*g2Z|>>6WY-dA!8_b1yc62)AyeCRzq3+#hdxZn4S4~twj&}A2>$qT5A(ze zbKC-f7G+3?TrI6(TH5hzGBj;1wSN=ux0&7T5IjoCvew^5mc%}3JrTfh&JC|Sg4VW| zs3lS~vZ|NJkxa?v5N3(P1^Zoj@pbZ)yL>?DFx23c%X%!-f_i|Y%T z@Q2b~*>h@I^jonkh1NB;M#xYVvB3@2b5NW=bfuvE(N6=Q&XIXVAcWo~B}7iq1@>>* z@-o!k;aPR(3{MSZZG&w9cl}Uk9KKGdb36HHhs@H=n_ut~*e7ti#CKPa&u7R3>0cio z1ThUSgsrh<6+%me$la&5_fM?ntk8EF)f@louR-OV7TVndnGL4jWW0EA&fQ2?Sl6W) zoscD+q&aAWyoF6e5>I7}Ul`@V&jvbwYZ=IPAk~=(q*8iy4Gc0BiJK;f-8KTs?IpmF zM^=j%$absZSePXCkY>+gS;gM0}gbY9)Y6BULOl`R-TxxlrNkYKL2tQ6CexW4WP_l}2jHpy9 zb6Aw3dcdOyX|$Y)pn;dLiZV6j za1FotBHkQS^aOvw>!ETbt4h5Ze7Y_MxyDuZdm0sO&*J36_qb{1{u4D*6*YSsW)CDc zoHt)ms}Jf|wTnOo7g_#>uv^Ycbws26C^TPekK{l#L2iTFPTX2zH!TwZVbLvAlWy4- z>~@oWe(epF`h?h?NoPB!7>|bl{w-XE`| zBT<#=y=Y@$7=p-iae#|}3)LNe6wizAql}g4^43i0e^j9VA2s;>%W__iR6%V=l zl4-luA7nF@=C$mF{lF=gOq&U=c(cMGmIpLt&uLqC;a+n zXRvqxEHCu8Xxk{>zeAk-|NH(AMJESaV{4;-NLE=HOMg?S|5wv|L5z%4A3uE1mX(E~ zMT7Su9lSt{N)Nd!yrwWbXpVdJtdPx`BfZ6(uuEL-CzYHZxX&Lx$@F|sxJ?7S&5ewa zHzViUhmRY`Z3qisvMIVM=j{@L6W{rqTdTcM+z0N32JM9;jTQM~?lzPZv0INOqg)`C zpG93>W&#k{MGu<8P)eWqPk8&kq4u#xRd-7GD_2VzKqpHxOkQQr8k`~BkVA*{V^ea< z!uj|3gneuCB!cF1eLWq2$^hpQ=}8<>DBMtJMqo8DyAi`=(J=L1A2!fv&wc&0I^gb8fo{(ZXN<=XYsK5jM(kd%-UgOZwk9KtxPQxT?wBCBn9%V8ILBmGx zj15kKh~d81RS&mu)@lKjZ#dmV?qb<6sTov+&n62})Tk#9LZ?xNXjfZTCo*t>UD)-j z--MAzAR6{p*~K~0M%aZp@kZGFbs~tU8QfEs-AwIsiW_WsTwfJ2<~ ziND%^^O5oY{CEE4{r}Wt9(aksW;Is9_iie{CV^Ng@M_aN5hsBl5bGg+=J`P?L8VHp-StD$L6PjIzjcMW zX@kJ}5Y~~7a*eQ{QziM$X?*Jq(i+LIhqj)^bDfaIvY>NdTt-$961OXZiPRf6$kH?` z6Qv2LrY?mfX<>ecMwVvZs}zbs(HVEVu~Io?Ws{)En?M>%VKp-^tl82asisrkUyEH_&M}Aj>r+Rb-M64}+s=?} z>ggws3i(SU!J$k^e_bO@dia30YO_)qJPR5`o;I$W0=PjjXdn6rLH`Ufm$-err6Zb| zXCbaZFmW~~4#z-+;Q^PdVY{VBoq^0WolV?*RWG@OV+U}rSnY5^l^5+v36s}c<90-A7HyC-PjlC)e+d4C_}O6p4KD{}MLDxF2X{&}$Q%fe{H6;T_of^KIkBQ-4tB&kwe2#huKwFqy)i8HFh3@1ljKlaf_UAm%~TUpmT{Z zWsgApi>!tM+Yo){Sbngj{u|P(UqM=X!e@yy3Kt9Lw9YNZ;Gw<^) z1*Af?YUU=<11M;)_83~Cq!Az{Ov%0VJQED;g=9iOMG;?2CWt92yB83Km$a&?3Ps zm>oaO#duAd1bui+T?BarTv3^fq>wLurxRz`K_V6R@58PTtk8+?QSFE+IpDAjTInbb-XeGE+Z8E%2E4;dO_e#4dk#uI^rbil z@?AhRhj|Dyf}%aiV>hLJ^8rDAL~?t>YeZluxbklnyn>9_GJIkEBfxVBam2uW@5AGN z8{q$gVYmNlAO0({PpAT1kd`pKD|v301;Gre1^9!7)B}==fliUvqW>`9Q;riF8bA>H zb2owy#-d03aA+l_kZ5f>!Gw@mt*4;Kftgk+v@=X?grwO>a{K`QfaIyaZ(%Z&swJVv zbC*5OOW|_ZdT>j6n|%1{WB}8H`DQx!3fYO<$p>K1RS-6hEAJ721(=n_%+Zdep80I~I zj_fsUjJfc87uW*JQgz(WL(j;S#29olO^yd;Am&Rh6c-6YYQtdOfY56YdT@u2Vu6Z3 z=J`BLh36>c9E+q#K~_r9g{UUHyZgk zIYfT-9&{ik$9W|E9XBVvBMzbD-7XBgLzZC-r1sSVf_2jb*#q*NjzTR*DW;Lk^?NOo zuFOaR9Aqe0#N zdT;$2-vBHMg72sufAGE%Ir*+o@TmLxrG8R=jf!X@Efo{9vRNmD)D;^*j6Es@*hR0X z9+1?%(L}6_fTV_ys)H*Y{rEfslQ@x1NKJ{0suu0h!4+2>LBK<2_y{=;hmt6K+w43% zzqVd^AB^{A_Xor3T5OxrXx&L&B96h#Ms2FS*#e3g*n0xgc9CLylm z@1%C!0c*O1S|eZD=y9-Mm)0tHJ1ySt2Gs1+?JAk{5(OpzECUJvfx7PH%+AdszQ^rs!{krGlF2eK+nbzb0 zH}fwg?|2{a;z~`Pg`y>4Z$WX&7v8{7=`{j3tt~5Zh-Dj$*Ubg6?iZb%gRRGGl)h(r z%#1XXTRRcJt%bN^EvAN~SN2b4?_BIHM&XG(Kz^Kkg!y3&wkEA^!Fh+i#*tIB&Q&p; zY&RcnE9Yl9;t;a$-%tlsiPT3kfh`Gk8IeWBzIu`9W`(TcTCS1LC80UE2ajSi%_4m# z2`wq&9wXtS8}75ldg0W|>2YyRfVq8-wfZ@BR5+YwJwos9ygJ)X?C7{fIDnyK-7Gc{ zM|9*i2VZS-?;S(bBJ%^##JV1gQ4so7d))^NpXdSFK>J9f)i`<~({RVhP;$N+ss#3& zbY9iwB#CGTLng+<`q**BL&7s8&Mf*^Kl2Z&-y+@Kp;;1Ed_`i;vm4OcI4__KK^7#r z$M+Mul5CZApbu>^P>JDCTqdF>sV>!NuM8XeJyvKV&Pl>2;*TeczQ(wZ*Kv}licRgd z(I!H(ZHz*H9mhNraq1eLV=gpCJu0b;uw*0ZR0hI*158Y*D?L`*G>b&NKbSi~*I)9M z@rPl2&*lJjB&h=)l{YVjBjG4ZY*>h$`~f27Zb(FzVi@3dFGF&!FB#)!c+bd(+QTWi z`XIhiTJbwk?O^Lk#e>qDU;Vm)cP13-ruvOT*mucjtXlq*lR1q9VXf4t>CTx-FOD&5 z2X2IDw?6W|!=&#iOOo-bDlWz6%*xGJVLYJz%th%>>S0xSD;&>Fx;>-Rsk9v7P}(I= z0ZTE}vA}6|c&bL(hF4GX^8&E4aM7I^*cK8?qE(9==F0I_Iq^`Qu@Du6R1Kkh#1-3z z0<8x~XcnWjW(9O`PAm}_0@*bjVKVBL9m~v*q#7Ctx2U=mRe*Dnc`y`ObFZ@6aVQbV2y2U4~R% zth8(bS+S&<5?*0(lpg4NBpkd)_$m{0SV?fZ$P*hQ>7bMS&#j_sNZJdi)zzhdBO;$Onx{QGZv#31+ES&Lb-& zQFUWf@1-`q-(JNid5{N+F|Dl5Ad)~qh*_rj1E^R3E0VyL2pJ1;;T-nr~x;^V$BHgZ(@SZlE#YP96tz2$xcZ~ThAQ%w8dntdb zrWR4Z=f=@5J(NM$b`qd^92wAPSIfmghN*=YpS}B>z3-{ESF7-)ii3wq=4qCGoilT% zA7a|VsNXX7lHe!k>h~r$ds`&_#e8?3lD=R~|0&9#+vi|SFN`%}Y@cE7`qx=!@Rxc! zvQ_zuGip`(;Cbp@gu17XN8Ir4!!H=s>pZ8h$-bX!A7zf|!yg*AmwR0-VYJ}}^)4WM zotOz>^5Hi-<`bIg?GwEoTw%K5+p4N#w9|;7PmJnI)6YLAKk%z=b$Ef62*Hk*o?&<( z=_!29x*LGuc3q_X84F(oi}Z-ui>}{7OzK1D@rR*g9h`zfKDnPJ6{dded&iV~Fgj)A zRo=zlP!f1f09g}wvQ-DDd;PQsY^GQ%J2zl#K~vb+!V&j+2EVF3DwWNH`uwNdJx$he zAN=>!Owhk&7$ErfsM^8OgxUN*Qm^|TMDhM*(AfE#TmL^Y`#-4k{@=}t{KNP+hrENM zzO|#nzb=RwF%#d^@yLNwfAH}sDL=oirUQ|XB7Q|c;$tEz#G=|s6w>!b&yrrm7uy_+ z_6Ndk3t`yEBRA0=8g<5bT&1tOeYtx5v<>G8n)^FMcFAE*{^5JwVDC1KgtKB7Kk@VE zGk@yfcWbIDA&rN1c3_!5fIdh|7aG(hVC}%Ejc&~y(=Mo>D?v;iL8#Rr)u~RI1rxd) zvuNoTbV*w-Kv<`rt6zDqmG_XFMO#_2iOrBmNVJbSk;?Grygst#qSZ)lNm#=cd*Wll z8cz|uXpCkKj#+^ajfGAV)dzASdMw(g@@p)C4!fC2O?U!yVf83|fd{1?d)bEt-TnSK zdTK8u2@JId4#vRUYA*mv7ji8oLLB|jVl+XNy}ID*!ibvge(hF+1Mw|bo)kaCiL>6` z5^*4!P*%=1$koKJuD=e6Ta25phhrC%`qMVknpy+s1eL?HpMUon)M6?x)@t@VNn!$P z#wEhfivzkXue6`+AGiKD4t8GK@3fBk_s##mZxs0-(sutJ$0~d)WElahO{Hy2P5(=Z zp&`k_5?d8zXzJn89qEc$_I$NQah4enSE;M6HOs$CToK1Eqrit*b2;$0U*8;&Qd_@p~fxGH``=yl6sDQ#j9;@HlI6oq9H9gzKSbPwQ(ou9iIp6=%`WJDv*%JxXA z*I-3}pUSpKi8GN8XwcHm%Jj*%oj63V*iq^ zKhiCYGvq>OvrkapgE)GGI08YZ-)H-<+F9^Wo=&6Wzl3cz1$6S>Da;weg>OcF-uou9 z*%$$N8@M*eTv`Oy!C5&;6VW)s<0O9LEa00zk5cbo?44_>u)rZ|SuAl9miH-S-t@3dzxdnkkSCW=U5h#w<8YAslY zw{(nDUlw_p_XY}3_umq8a6bhmgu+Y0_->Ds)Yv34gV}u2lsMJVXDP_RT_uCL5aY}z zz~TpAU)Kjb0=fTAy+CnHGhA#1$m|Ss5XfQY_T38OJqIHF6lEv9!wn_7v{&QIvXJ%xxGJZdzHf* zF{$WElaZG%+_QlQ3V8ojZicP=5R+bq0dZ)=I`Q1=W05h|Wvae7|45?TTCu|`pdUzL zthpO{;{3In+4SWDj%u%gpFC;2F3~n$3o+Kx%NE!$@7W&#7NG&xOY1fZU2!=Tst&t$}}nK1KdTAjm6EF zKO?o+ndG)5u^~Nm)fTLaF8c@zXMP{ra3w{(VVa8JptBmy$M6UP2M1$uZ)|aPcD!Xq zn7QcShLp7CLyoiuw=$lei9I(Fz|CVI-{`ipJ05r&_WCKjiauUM3O%Qja(8Pn^Wjon zE~3pG$3_-G6p}BX*@MdmM6uuZMR$!LehbIT@77<0zuDod4pWf_&QMkKkn96Wg~l+- zgtcb#+t6dk$=v*kd7u?yZ*821wbH(wf?S-_q*mHq3rnTS zU{m-b^TF1JXMOcg7mS)k{l*LBwW!Hk9uV9?{w z5^uSovSi>Ym$0d7*%#PF^I`I`aff|7+)M|u2@!!g(Mt}s>BW4Hd{A**>-LSZY_4Y$ zDTslw*EFW0~-f zhK1$_31&Au`3$7np;3rz!ZEY66`;Z^=^m4lj2)9JC5Ml zjZ_FiuOrLA2%n8HIb$6`v)UaEss<%+HE3mny$fe#OQ22Pi|-t7U=+dg=;{W5Vm->}+$1o)f*uGoWza+gVi{`h zvyw8w*&-=#_Pm%`F;jWp5|c?ca1+-&x5E*`9nGo(D1Z1UzgQ7P(l~UKkf1fdT{Wl{ zZx0C8SQMb)NUPsE!SF#mss?C9+Y_)3nOZG0o-{Aj=q)vkFsun$Q&M6U!)tqrw=$d# zN;DCpMP1h%Rh|UWy2t8xf>-j-g2n!vL9rDn+dq7V)O}p&W`Du7N#(DpoTfZ@Ke$b0gg-M-m=n zXOp+iJGHu66fOMaiP)xuP#UMUICty--Q||Rkbj3P=Bi#n*qT@|dssYNSgOPUlQ2|$ z)}m~82%S0QF_0n=&cIr{E8X*RvcD$*J^$JAt*2gMYslKqa^(>utj?E4pqOi44MQ#HwDd~e!GFTbyibOwuc^tNluPerZb6z+f)mnn40ixk85s^E35pr zGg)+)Y=@cj#5wSgA4ySXOMd|ywE4#x##?vBo9MmM{;`P8zRMDJrn69{E&r)4)3xsp z-N#Za%<^2+qz6(~zE^R!EgiBZHjtto#ePRS`+_T0ygOblmhOf}$v03*R~gF0*LN2h z%j7_HG(N@f=?7EF&U6H1%KO9Adj#s+n%iWGt}j!U=u0Iz2h&jyQ&-QkCalOn3di?y za0a&=q?-4}@s>M^lrEh@3kd0+tj!QiK7()MEL+1BO^4av@Sm_t(SxBiXk`^i?msoK%3MqE1u2x{DVXwi>0c4eH0C7wpaUXb zh2Bwk>&+_i^7iWZM(w5u7B@ZdnbPUnOsAT*E;Fyso|f=_nB0WxzfP>VXv{UTPAmq^ z*wctvbg`<8qpX!$Sb4CtRHmdA?wOMSb3qSA(^O!k1({$?rmEO-Vx1`PA(u#p>R;mv zp#y=bTTWf$1nK1{P^hAtyzZGmv=1vMLWD|%8Rx2#kMsFRH*1X?{DO|1=nIV;>kjpi z*|1_LehVf1dr*#`{w&F&>aH`5QJ?ey1!;xpJY>luN)M!XRxOX8rR%=Qboz`E3jE`1|>^4y0sfW>t!WB zmmr7|K~S2S2p8%M5m>hzbD^Nj7*97G*0 zCK%Rb$M!p(<>HJwRsbyHB4ey|b@3$Px()F-dxAi{!GCN2{=}ukrpV+ZkA4Lgp1SoA za}J)&7=%ZMGLk{O6}vRpXPW%zKSouD4kL`cf>C&9CvATwzOkz+e?`=_y&?0|Bpfo- zNZ5p>z3~J`_iUf2w+~Xi4wIbkpMR#UBq4Q%mkI}Uj$Yn0Y!zof_N9=A^hqO4%)A1t z0S9T5gn(8|L@4!&Kjrc#^UD)=GtG8O<*>);=_l*w#g4_gkA08xh+Is&e{#FG-L#SJYVw;2^i>wt2kq%WBRec!=a+NLj71Kuy*thNfZrzq(VEBHep7lSP~rf$ zyVvbrN%!FV)EhEmgYNi7*oP4=dVd5wBrovA!esib(g4@msU-)@rBSQCDPdLic~Vkdu1B<70HA`JQz^ZaxDTXY&LN(NL6N-XD!Br zE7c@!_La%?NEA@ILk*86#eVYWCxhm`oBkW=RijPJIUrBwdZ9X6rb~6Vx@`sl2{zyp zl4m@9Kfb0_w;NCjQc63- zX?E25*UK*2W=y+#5$zwK6Z`I`7v4AMeE5F+_n=egfA0lFCj$pZfTNS+ccaMv+aC#u z7K(HH$U#$r2*vU(!y@tsHu>2g1HVGo`+phqNO2v9XDO(y>8)}~geHCMhff}}@BO1= zWb}q7tsch8@|6CZ)by$SXvJaD|u1q1F$T&-2|V-pWFkQ)KR@Jaz|lT)V|W zlcTR;OKXd1zmwWcv@q6zXROSXQG4>JLg5oAtxW>rbdBjrrjJ$1Z4Y2AciFv4VOA-# z<8QC+H<&9lVT&xF&AM(Wz;xpL;P&O0Ewucg!s(}QlbL2tl^)9qkzZ$wT9EDQ_>qk< z1%y8K$^}BxKZctBApsD1hbsh0|2%p!~&`GS3KLeu0f%d}$#Z~fS1+3@KbS2bKXL@wIb7L>Z+w@96^Q? zT;V4N!tKq0TV|mGsPMp20vch*sJ$VW{l^FV>A##>5kMK2paL}MpbhvvP!rQ)FjAtx zQ~F%FIEn5m_+POY?SHM_Rj=m+LPQU^!aHl`9*{>5sNnxBojAiEo7V9)4pgzg$6<+X z_@@20K);&v#}p^~L^pcps%QY-(ZmCD1G#Wg!xc?5;o&8cqvwsJop7g$?hKmc4t!)% zV~sZ;8aCk;2irq6BIIY)^u2zfgT6&vtFK@zkESCE9@1g+3|0W8U z8C!l&Cpr8_$;$shI`LmQt^YDCsP6zUl+m}h_^)hMf{ONcF&kyWa3nDroE}UX+Bxs{ ztXgcupWnCoKUqU1;>8>Nd*(q_BlmkSnJ_T``{;tH`S~<2mT}B7*;c8A+B-Sr%D_F5 zLTmMO6B=G;9=fmdMU|iavtA~HhMKG})QP5*lRQuB9ZxUlpO0HpUm$v9yh_y`uj4C5 zBg}>O_VQF~K?&u^^$cF)%=ROpZuU>Ywb|da;w`b<*~;ObDpXmsV+7<-sigH3GywBO zS9^N4oTCePU?|+@QP(?yQw#(7@e9Pr!cZMnW`_VaOp-J4R|e40xQB`zA3XOn(PLdG zzeJUJ6lPOYYrMv>AePMvJtuX(k|ZapD%0@L3AIYa1=jI=wc}ZB!_$#T6tO>mDa|QjE6j(ddo6TpwLmv1Mvd z0E5Gv*bd>lr__sef!`Xd_Bu|i2VHW<0P^yhTfI8nBExcS2w*^+hMC{0f02#wit%n0 zU&m0P$5u0eF!<-w#_T4V%F5q5Stcx*X{(M)QDR%-kQ1kJLY2*@R_BLzAsU1WcN_$x zAV^OHjBP1;9Q%=<3k_d7AY=+~+~-P3pZ(-$ts-pd?BQ}Dzvb%0Bhgl@o6e%zQJHN* zT=>G=HwwE2MmgU?2Kxf&ViY_T<2=p~<7a2E|IzrqV}~+2ziiFxVP!;(Rv@UKi$7BYNw>LiDQqQXS(H zexk%vd4|zdi&)uL$0<1R=Ox(X#S6~32Ci-(h&5n30>V2!bSAIjN4??8L5eC;Pgqt# z!>SXoSlzFq8(Hk=<@wXc(}z7h&b_%X1j&>F=zK)tOzF z97!`cqw#`Oa+Xh&^FyYPKTzDfq^{_Fy-67BRTHK>QzkXIwtNlfSfyN@nhk`FHx#@y zY?gDxSR0y*6dk@AJRrJ7%^l?vTxknR`jCMpTVQ z+C2IxI^kTYB|x=+bY=;P;+z}gaa;E+>RD=Qx-JPX;04~Xva1Jj=59=B=P)t{^u&x3 zS{V8}L2Ej(WT|)F-U&cm7;GbzTocWp5qqgUBYc7E({dIWcg5sa4B!;l#uK1Vrw}}| zvmE0)_AknT3eY3j`x>+L`$ukD3H2sP7)DO`InGgcZ(j*G?GPUODB_DEth?CGj5&^D z6QV8m{d2x+aGi*|CW(Jdw0yRO%5IjiB%$*3N9Y&I;^B?yE|Vk@brvb9AC*B>IEJHp zCfjEYb-6~{P4D7mn^bl8vU`o?*^L)`l`{_dNq0{uZ4C`yaK(o!9Z9eb(-8z9sNW*rY@ZI;qhI7TYW~WEaf`tB6?}i+ zlK5`mu5*O$UCYJW(di94QN`fe+-x*3q5kCJDgDlH$D?fyGxvo!F!^l+;+{6P-rFqw zNFTZf){=_+GtZQn(+3wr+&Sn-e1w#6nSOkJz5OP#!lVfg>=8PlVzkB-u!8!gW8a+8 zbYClw4bNG6zN&0mu~nJ-Z)r;^Ns_H&$sx7Wr$-N|t$8qZj{- z_ka%U(J%ZiwgvthsQec^kL!w7v;InaGvRNZLfjYMuwcBfH%P=U(tWcQ6hpj|kZli# z>9(E`HY=acw>Q{cFG+eBtLx4bSg9>UBRGzm@Erzl&`7V%7evK80~@QFjTLYa#}KLl1#v?N+5Xm5B3 zV`owLTMUZr8BAuXVo0bEr)gcIS1HD0@>b$-OUf|R%UPFv(sX;#AqBk5zD|jze*#Pl zHJh(3gF2`a3NRvNRJ1eEI8Q609M%NgLd0M<$)NR<={XQ7AZuEOSAK^xxhCU++pWxD zm2491zCux#nPqLTC4hhvM)B8z~M?`2suK!&t zH)>NPham17^u$xUF=k$7CIo)`L~@6`YKDv+kSEJ`eU-c1Af!}lOJoa`(bK+S#1!`U zzBO2QedM&Pn4=efZct7j8a;hhv-e%J4dBwCYowH2(6H%qnA_Sb#!Fb>8j#)d#cx{h z1I;SrMEi0}M5bSA2yXV+#XiDIg!Eiu@R{=yZ5K8^!F!bYT9q%%pOF=#NIL|1Bw2i%x|wv+$Wn`sT zR@ig(&&@S6=GJmYhIK#1Cu$odFsO3Ba<%(11SGGOO07C|SpL+Ti0s$_$-W3I~Sg(tMJJSkj|u=^T#DH79N` z()&u|vRya0E1|dUCt*vn8mHwIl-jOubF0RbgG4)MgfG&RteTw!I+ODbsA}@kxrdyE zelueSKQtdhcICBRL*ufYjj;Z~Rb{rI#!)kPkivrv1~;Tq;1q69BKPT2JVjo}F+&*u ziXsjnNbNI9$DL1s;9}k@UP?5A=Z4Sc8%^}l%XI2C@UHO;KhKIC@11lS;6gLl>ZJlA ze;|uICRPj9C;u)tO`46c1r?r`Des&>YV#~u^C(y%ewZ`rHPj`o((j zB?}o$5o9g{0oY+M0~{x@+#isGtFcs8@}`oxzXN$`XO|(#P6gCAkUYlRtuCt(q&H@) zmT0En$`Zw`WWyJa6bK$gl)4%^R<$<}5%}MKPj($=wmnb3?Rw=Zb0v+J z+mAlRS7wA0qYJUk+?U5E!93nR0+)?0L9M`=NiipGK3y)FYgeagKKs!H{x}d&lQ*iu zyEKM#oqp(>z{?slQ$#LHE6>nt4f;yYHEwm&_E9^F(ER#fhFO)F@#>?={lAH9%B=;Zq^>Y8|It^<_3JFzsXT9u!LH4AymWa}*64 zQJaKZw{Yxb7jzswJ)rW3dxIa~43i5hmA!n-EfS!c+K$)MYqhJ^GeomJMxfs+d&)W} z;XuiC$g>Hb`lW>nn=u@s;fUp^O^$m9pnTCQgWm2yp7IE=JWCUssCtfS)HU$CpxF8r zW9s3znE};1x^;Mi&|`iJ0COF_{52hn9DliH*(JAh5>oy?suTHCub?Ka|1?^VQpH7H8g9lcs+V$#wpyj;1a&ce85F^_C8PyIv;K8o`Br`G5F;S z!ubp|uc`k;#Qm_B7yFX#WH2ZE69VBUiCIoB z`|V~?m-YM^SEK>7f@s1mcKBvd=ETcj-6xlw`zg9r>Q=T_l zIZlDI=a#|Z?P>_ZL|Vz!rC*w&qyRmWfA z$-BUpaX>V)eg9%1r}P2X#*dI2lye{l(lK;9ck!g0zVUuHV3=FCYw66vIhfx)cJdlFhnf7#nzjh&&b zwhF^IC$XkIzp?&a{v40c0Km=Zy1t#BG#o-c$G!`Uz-`5$JY-Q{L$z3e?hWkwEgkRq zzWX(uBM|%&tYPDZ=Y$)U#b6DICd!nXabLi>kxms!&-47zP9_JF*45HHbu;;?GeH&n z5ex3Ounzl`gf!($X zEnoWQT(1!=o8$p05%Et{a`XhLndmN5)vt>VK!Nt3O%oXOr6;7hs=s>Uf51A_x0efy z5UFVy%(`=WdesNpPl>7zV(B>-vr#Y+(v?Y<9$6Ylm^4mbSauLD${!@&+rKzrvmG1? zK9dep)KqvQ*6fES?{~y6M+zQWxePuJ4=_LPM>k(b{rR!u1UiBNX?W6;$|rXwmlS`x zB(=6AHFi4fCuYNL@o-5*C+~773Dd!GIN@&A70!Z_Q&9W0k%h3L)>4W^Fih0GF5~o43;bszK1eWnq^_Rvi zSJtE|e0+RzeG`$>zayt#mf-G)CQl-Le0>u4znwty^Vy;sQz6-2Z135}ZaWD(*;=2k z&oez?r5W7@iJkV3>izT&6X{y=Rw^t=(sEN~YyvaCun2b;5=hO5GmSaI6w0|O)&@Wq z>YW;FC7l}K>4d?RDQU}-8#Twtkr_8MwgyY@+bX(1@uBF=b+r4h&>!o^OPA&>wU~(Y z3N(%eZ|sCEf4SaICxp#GXT_jbT`x#&aSfJ|VPq(Z<|RXbngSR2YAj+4gDY@17t1+Bi0_sz!hZ)76KJR|nyqBjK+Lu)rmp~WpQ>Uyp1?Ws z-Jbp34ipo3AoPueqSVN(yOFH5FzKGoI^vJflP9~4M0Fz?dd7*E-|&49;Xuko$Te8F z@xT;J&81!xn(DBBN4a6Lc`tJy*uS1`wj-CqYX#f$IlRLz?M`wPP!cCVY2{TQq?cGk zGE=vq=VM0ltIq5QL3v3!2U^clVWFOFW*X=3YSlN`tSL6hyL$2G-05EfRGTt*4QGU4 zMKCRR1#$1aQG1Q)FsE9bwn&aBNx8@~jkA^l|529SH%Uku>W~=1gxTPk23O3Um$Le1 zFjHqI;`ruqXJw8&Om$swOQ68|+h;^31+MTRN=#8pfSLlg)mkX-27Js{ zQY(f6Ol$C6WQJ}JKi#d=4Qt_wx%zV(%xw|a`7{S;PaqUYyLIRGw@TFlEq?B%3!!z? zDmbDQQw#bD8Nc6VU;}VqH%fe0Qd)9ekn+emB@VNG6J&WW1iP-D)YX{MeWQCC(_?F7Rt4Lo|D||Xi**Y8IuvJHO z{=`_*kuc;iP)BvTUl&R(KwdRi1$e?OlF(jN-Xh?TK$99$iH)+rTW_qNkp$+fkA9g| z70R~=LRI*z_pVz<)p#xnzdde%{tERcG?>F^dThVFGgB=qTFF7JWDRVxTdO8QxxFg) z4fKRl>NY&sqwZ_1UF{|iWeebhBDN~^YtZ43_BM*|9^$`=*(Vd*o zBddl@4zYFnYYdYwL5CixpLpLS=rjIE#s!>^@g>p$|G7Xz88bIElaI+p>ENyR3JTUk z0G)HF^j-NcVrIK%lGeb7T<$Xm zYOLj1MFMrAr>h4=E$^S%%Wd9Gk;>odQ~o#D;J+8*Jby>|mojp2&@(am*XH8C9Bx%A zkgkeLD4#aQ@sJ7dc(j)IwDLi;381lFVZmYqet~#ld4Ou#^f88ehQ^t0NRX`&&DBmS zvJ|pR)TVt#^r3=QRgH`4C{|h)70pT=rl>3Gmp(h4Fk-2N1xN4OEDk$u$DhYM6I{<* z13KL6pt`}M@Tom*UJ`LT=Vl54RpPSuFX8-C;TldJT(Cm;*Trg7LQ~}|xnKf9O6H`6 zjAe)3_4(!kQdVQ->VUiS zaYM?07A>vrMTwb&w1pb=;&>f*rBN7EC$~&g$f9fR((J*Ab(OB( zDq#L_RazgH_2(<<+N3T0Mce8uOJ%H&HLMZmkL6dnoO(^+G~yLmjA(h51v8M#OIs!j zV{bcoz(DxKl7O;OXx=o%_oXHtpyEWv-7->TTJB3oqZb+-z83+(M(?-kj|4JrRw#Jn z&klK`TBA)=nDpAH>p|Qdux|u|J&7wYw_e_^^$DPIL{u2hn;hneEE>x1*L)D4J)38v z2Dv~4D$J@O0k5LLgP(Z%8z;ljvAO?TDFfLiYS_sr19Qpu==Pm5m5_Go_!%WoQD=0a z)b-Nbg4d$uJ-}IK^}Gp*c(eSCv7;Mwo-T$MDUhJK4^@>8721QTApI$}xLLh6wQUX` z;}MJXE;>p}2uLmngd37XLoO1LnKVtbX-TWho-h;&Fd|OP&uxcs_-7(CP9Bi|egSOBle-(-n zYZSMKr?r#ABeCBcq^ip3QpK%STYGk`I9~1>TFx4mlh%}YtuPlux5e> ziQ*X?L;3KTB;(K#S}LSlwO?4X=)MU=+3BD`_;@S{b5d1Yjy@KKRq z#NlRA7}YBIf-7@JRtHDqW)EK#zcN4p%8kWl2F?&BG%D)2R7UhYC=}x5Jm7#!9?Xu= zB!fn4gjeFFfng2jIe)o!q{M;PCl}%ggIQluJ-2{xj4>HQN6J1F1@%BumuU(3QGnj1TXc@)yT~tyZM>5v>m4y-i5alQ7VY zQ%Ql2Vq(~OLH|vE4Wdyi#6hFJOOQE*RLW2Z|BHTW$U8zvd4s+zdg-ap++;@aD8bX- zEyP2dFnPT`uMhj1m-vxckI6r-y!s!i`jid2xLdbxUQ%KKlnHonyLym!p&(=}xd~U6 zcW+4tWr-4re_R#wv0_P!eqtR|JD*44o2AM_-m_-M(#ojEih%f3KDZMg!}-Q84*Njy zB>c=i`tj88Bv5{~pV*tZ-5vqPEd?V+huK%lEqtJ?aIkFntS+md#%-|%15f#okf9Z+*c^2yYMclEBBYSDFa7%e=XHla&F)`>+ucQ-vEasub9$l;R z%gZ}k*!XAXpfidhaODDb$!pzCR#(h-V4@L)cYw+PiKd&Fkdc}h9M9+>Q?rbZSm}Ey z!XWNC1;NkGF`0JZ9vKDB?pgb$t{DPQSK#gO-s@Xt4LLl?TsO!EuusY;AE-|R zpLkgxW4@z}h1={a?~0x%DHm~q^Dx>^{~qzko;YbeJw0~r-@O$+D&)yODqm1gPJaZqe{{zdzcjKBVJ08P zPh2Y>Rs{*2RVn!6sQqZF1GZN!8Y!uUXkjkp6QFNz!8l(@MU&q*yCYL)9j$xM$XOk; z9yW6VI%_e7*BOa!8pi#>Tz1#hJrt3I2>53$A~A-CcQue+vypZ7q+^GXfC>% z_v4-~^;~K?os{?@Dj+giiXg>yRs@MIOd_T~t7>2kw$;3U>R=2y2XK2bDL#7ZmT?|iizAl&i5*MJ_<2(NI3cwj`*fOw)~M!0 zVkf$6bl- zz_kNmrfiEEj?1_0aqXU??!@l&H6JUuZCr1ho~&?ep_$(K$z{KcL|hg3Tj z`>=?xYv1ko3jn-I&BbQ_ao9CEQ8gkbxjeUTDQ2jfl% zl{!>I`|^aQp;By?N2JVFB2C;k7rh5oW;$YC8EY5GZ~O8gHc`DD>DQPM9J1RU(`FJG zZUEhH(k}%NYm;U2CiapgI#E_;`TG^&fTBYMor!W}dS{Ho%ar>IS)S4QV<`o-*&ku9 zs8)*%dGIv*l$OTd;0i>=t;lBX%>JppJ0qcvv9Ip_=x*`xC9QYxD_FyvoB|dzcl2*q z$@^}LyFyn-DYnG7&A(AJ16AxGwFjD9u{mzQEMBQNeOu;&Ty7YvctW0CrMqSXu4&<_ z;BFwf4Ts&N7{aT9HV?j5v8<^Ua73ab_t+vxV0gSpC>oR$a?thT7bnjOyB_ z4J6%_S419;4WhXZFH9`8avE-Weuo#gZYe~0Sxty-4Nb=-kWb-QFgB-I*%f>jncq@O z{`G4WWsOioeuKQmT9c$m1GXi)R-FNB4OOt#>XF+7WGCi#Id-BggU*JZbaU)^%L1pz z=%Z(TYa4I}*`^+Z%T3r`2zG0He^#(9Ne=1NNv|=~HGQDVZP?!S4@UXc5%{ZJq@nE} zmAN;30xx(uqy*ThGJ1>f!mon2s^HNjwG;5p-`A30qY>|TkB3Yh$6h=YSBqH8ZrVDey=CDB>!6zrapLlic#4Co1$nJI|4piYJ z-04UaedWm!b1fc^qd}VY^Cw^9X1}et&{2S&n1RMJ>KVng=6ZWCCwzC}@@U6IpL|Qi z>0(I|dIHmu+&xMQ-Z{;P7T&{8!-WpJdJ^o)VsrC9ShzeLMFd47hN2Td*2_*6YwrXc zJPR4JnCEzOAGv9&UpU}+-p@k5s*U$7S&ea#QoXz&XCB*5?!X*j%VfTv^z2GGNZ)E1 zI2-lWiQhIhR&i6H{`7!4p*h4AZ!>sd4|8WsYA~Ie7O0W3A#dZ{`O0g7O{=ulS>Dg7 zd+L|ld8odQ+Xjt97_?L!#JY-VL!&vuSD73^t^*L#$3F@eB0cgbV}(rGGc0Zeaq1sp zOu;C_>{q=}wko`0-lxs98th+dT2;*C&|@KH%WNYNzL`7QgzU;>o;z)EZ*^tVO5=Rq zfEh6!!OoBxsV=}&W_4;Yu$J6~1hs?OQiZB0&83*2m8J~QQq(8kfgXgKL|oDw>hOqH z_DKGZ zQ{p9y)-yYAHX=SJVZqS8T=!bs@|A=$*g|*0vTea~mV`5B`K~xc8+@g;;>vk2`G3OS zkphGVWxxOc(Bb?iJ?L*)SEco=j12#oLHoZgSy}Q@HVeG)UK^}-dl>5CFXU8-GsJ*P zzN~oNKN=N*g!l*;pQE~1G1;7rIOH_Kc>1!w01$x&zYCj+;A>w1$$LTU(Kb}9x!D+R zU&Q3-^Z>R-WdJ=tJ;7y?&LW}27-pW$ih<25Xy?95BX)LkID(O{D%tHh9*DYKjy@}W z2ojG6!mDD9hdBbFzfDJc%C?n-#rM8RPG=4as^wRcWj&ftk__U4#GIHRo3NJp7$t=Crw43cfcQOdDBSa zyL{SpQRP-|@Qnd)MbD|g z?xNfZo75o60izMB{9&S&7S8YdW5l8MmEX>dX0BDKyYl|%2AOlBYKHX{U&3m3!wudk zb8oFssa`Z8JN#!auHDri$s4Mt+Q|FKbpLBC|B5P^))&x~=)DTikDuxfVAmCmm}=ga z|A>^Qv~t-x|BjL`|Msu{d-eMNgX8}{J(SWivj1mVc2#nR3^E_qh>rtY?>-q#A4%x= z)~#wbfuCri3LXg>AB_6R=9VobWrv|NT;TlpFh3?H2L+PBFJz1;Vr2}2f}p4_pMa#> zmY$7GY+E{8%eoGRp0sO|9)_JY!=6vCX9NKDyd1ujKT%Rcvx`jlDy@x*T6CyxnuAPC z<*DoZGx7DLjY{}ZM&@tsgQC9zDM5yHb$8k=G^wH4;$~sX&cZ4-k%N94$tE8)(cCgk z=k_DZAFgAWD+=_m(e?XEy?uSCzRN#*Q1;>Z`gg>g-rmk(!nhNFKXdiw>dG!Doznx` z&@!q35y@fz;3m@Ds6~{I<x1Zspg@l_b5sQS?N^To!F!8f zx$B(x1GC-CZYzCX9Wmhv7Sm2IM0fD!#-6iZG`-0NW}L8`x;UOf4nIp=cUW{h6-|K& zFbd*f*X6`-Ul!m+i4X2EJa^k0w;9t8YlbxXLB9qw2PWt929tCrzYO(OJD!{$RP61h zo(tG9w-sq5n!gCx)B#|7{A{J;V4KnnQ0Yxp6}Tz7aVgHdlg5RN%Og>sloQM;x<2Iy zpf+-UU9k^gy~=$PC^-m?Xb=*dP7urm4?{kPa!`zawMxMj!^B880fb|}m-y!HGB8LX zD6iJxiz9W81zC^r8O8$nRDr?ONPHz37?Ht!H!R$Gvi|{LiKFydbNa2+|Wk;E@ z0*N^;0aXj_IW7^Sjoo|?zVBW^neewF zZ?X8d;cU4?O50Ji=N!xxop|qF%Zt3BmW6!)Blm#Md|;kz247Ld8-eI`>g21uegXdF z+Tg$rQI`9jvJkNUY1;lRtJr@}+y5E17XL5Ej2j9RP`MkI{U4%@a%!fsEW)8;z``&Z z485wsiOZ7E2sz?gsjWAFo}~L!MCrf%NA<5xHyNJKH`87}+`j;9eX)ZRM&=T(RP9L> zb0}oi+cyre=jse4T&mvXWv-#l`AAi2mTF)}7=y}hnvYB6up;rd_64dnHklvYD@fM0 zvGl;ah#$e>UzjSv@7zU+_sJa}2ZM$bB^#LJa5lmqaYACdV>*-veje-NoI`Kwq zlUcks%v{CSjoWB5a1xQuZ@w_Y2&Z!A9;QoGDpFWrirCi4NaFg;fhbf94C>r;XbnG~ z__u==&^@FxG^DD3*{JO;!@-aVtmiYIv;?LbHU=}uTFJ#F_fqpao;hMZ*zy-T!XmSn zItz}A77Vdac1K=Hg^%HhwF|Zj2@ryhA{C2n)5|0E(v@8cYR7qfmd${+iFJJ?4X{@| zh}F?~#Oyt}dVTx@8!v_=^v2*@4A1{ZlnlKpJm`H-vUzm&|ChxpO{=9K- zfl%DN_`y-b`bh8w<_EB{3F+NC%@Q3>9xiJe%!@KbHIkmY;5P#3CLR_ZD;04!`X(kN z3_Y*cj@K*KxIBQrK`oJ1d(gb|vXOzS-6hR-=W_?tJBfq>!0tYjQk+{K+MrI<9`{e* z$2)%BGpVrQfh2cW_Ldr2XDDN8Z7;HkBISM&fpzD~DJJvc3-2)K0y%{Aqr8RkuCJBR z^fIN+2!P#z(6eA7s zC1mhWiR7sq;WC2W!@a>3eJM=Tm$XrJ(s zs<@PQ;J>6w0u2g1);9+d|Hp8pza>@vXX4y{+uGG&JvEe2cv_?~sJ*PzIv}T3T6SP8@((VipEAoTBLb-dHLkHLAH>Qk%?P(naz%Q;o*aGNpq3- zz8hqDzrCp;pEGW!7Re9IX7xHgZr2Ch9$&{kS8UHd*Ah7|FWcaurhe%~rl-rR9>YL<|mY*ZWP7R=sQGV*Fm$ks8UUkK(x)le@^Xa%I@!=u+u zE}z^#ws}KLl+J}4sP+mig&cxGFGEJ<7?}}VxedteK{~aH^Y_{TQKjNyX=de$Oc&pr z7i^qe2~T9TQ}S6NDXwsp7p%YtCR$tt07%2`YYEUEGPVKQf4&7^KN=S@tai_DEQeVq z?6n6?!g_<8*RkiigpK)HOg8Isps9Z%XR&fJp&yrt;lRqKaB5;R71;8u+v7&PeBhYz zhcJa%k#TU^Pwy(CDJlUw>T8S+!Zfjf4aBYc((K*8d2Mte=+NehRw*QUyF-BLRi+UC=peidec~Z8| z3nEYdV3@}PWh}1rtVJY$2wDm5v@(|J-8f^}2>O*jfk|2!UcV?YkxNhR;@7j0yT(Y8 zV{cZSp9$f?8wN+Oz)5&NHo(OLc&xP>ooCEw9W*3NeGnHB8x6~68v)RddB$qrHuz=` zR}xrp-z{HH;IRw?5_i(%|`_@;n@)&@G1^={yh zuL}K58L6aX?<(IrS-J+ZC&qbKo|LG;E4%a#I*fWm*=784;xA&b+){QYoA&%tlP}nC z3s@hbMJ<@}FiVaNb2uRQY z(+$fnud4f(AHBJc%j%zu8uiQ?Yw=AB)5(;6u$E#|&h){^>%!IviSKLiA0VsoWgC;p zf#~`Y5P8ecp1bS4!MRf<8+#3)6AK~E0q&IS8>@)ysP#mS)W#Agn*GVMZISqa(}$bH zj@5<|C!T&(c@9h({KpcOkXba)Sq)uzzEa2P5z|h&0bD=lHg)G-$-i5Pn**m;))3h_ zzWdrSgvfJ%Zh_3QX&`d6Hu&x%<+~5?@2foGtJ7sk(du6}jc#AL=Z)@w1DrJiuZ$%i zF7>_-0||(&fn@kI0~q`VLTe=c=X#<*@5y9%cV8;}2Rse_6Ft%}H@?MlIFbvHKSh%p zKbk9&ylqmQZbScwW7KtF6^^*xf2<*hP*?b7Jp}T_%ob3;vHby(M@ytiYzgd?wrO=R zs@+Q5s#?x1IWfC>jO3#pKfZio2`5+BHpWzDddk`Gj#z-~uCCE=dOKyZK&BG+YG{^& zU%EbNlY5}#sxjpx?&Ssz0*mGY>(aHVq``26i87w{k!_^>LyT2w!UnJ&1uoxoR;xwcvQ#& zOJC|+a$LhoL5yvh_0UXEu=F;6@hBn{@G0z|`S1;HKjhb7jnh?9N}6|*`5+?%t&n-~ zl2Dky-D@3_sV<0;ML%iRSAPF8F2ibo`C#)lD|Ede0)`@wAo8Yz{Ip_5dq;Fr5gbM06g!om>{yIJI)#IgqUfHYEhbQSekL<9;{V zV*Y^3x-qF>jH+<0Gc+ZC*Rx<~%m()hyez~5;TE@mU)q?CC=;wQ-TC_q<7$=yEz4>G zi`OaGlh&$Bq3c$6P9U9eq&3_jM0rC_x%)Ox!JeHJm4^}eb|TDAmRCNqipS6Z9TiJ3 zL+b1bt~%o%pwil{no@nHrBj?!$1G;V%HaXAUiN!V&^6kwk2-yCF&;l7f;a054}L@? zacEE8c=HHd(7gn&FszmUn{Z0;)=3SuM1ZE5Mtbl_IjcO(D?V>(r(b2SOE5g=b7@Eo zELlC~$)^kb`spC6Uzb8zhsL8J6=JnIGu%4^v${_TzGBo{)<25W_xLNaqItC}?Zk%? z8@zdPEWn17d&CP)YKsuNcrBOhCnVrhQu1Nzo);CftDI%+#FhvOxM_C279>RVuRsjV z;|2{r)i7JuTu)(uL4V413xUW6oHd3xnIujmprd$`rq&!XUuXkg*u*HFR@B}$@ROGd z)On!P=@g~vfA2X>|AmYtk$GfAk5BQFdAOO zWC&A0`8tp=Oxp&G>Xq4|kNFbl-9$wJ)oA`GxLwM?SxWrMMZFc6C@nLCoM8Rv5o^FF z_Ofqmk5v+qgS*MfR(sLuLy|J;WQhveY1I5j_WX)qVscaFL)U!m7ju*gVJn;!n5+?R zTZ#f@98{8nxxjPSy<)PX;la1vAXQ`shB-Um>G3d!#!+`m4)S_zl(p#aLdW`{y?MLA zwg){Uo5XpuWnt&(QNn%l@R&;IIM849KdUkv6r2>yI(GfTT^s;6182`UvpPM=QQX4z z+O;WYw&TVm;I1}6WGQH@PRA#NZd~eg&ku(tHMOaO&L?cOYEn|79S;wo0&R-|bCXbY z+VAX9YHO0sXU8UrZfH_rzf+6+Zy!ByDTA>yIUKhmfNWigcqW}vNm^0bte|UQ8Of$AwgK9A)^0& z0Fi^68-{f@UyX&+oxKm_|KI=HC;uq2&4Lj3Sg&ZwB3j`P?=agmKSP#NMQ4;&ex zxM|C>uXj=66jgitD7e-1d^;J#-aJ7gWv`IrWJZ9K)|2?HPmZ!sGi#hAMt0cu2QsnX zXMzG%o}D?Fl&lh?QkEb}dHPYA0__nQRt=?k65Y~-L&S;>iMh6R{LxY`dBNT4%hBo! z8Jf>YZZFn)z{KR`!KO&h&i=Lx4bdkQH_;CTZ*`T&-|N0)7KMmS>BAMolFQJ|F<|3$ zUY#FkNv+ofDjJ(F^juk_19VvqKGSg%T+HR>b2mKH_6 zPKySvyr5`|Y%U8w*i+YN-$MXeAkeD^^Gtka_yvEJ}}%1*jQtL_^qk6*M=Dj?;yE^AI7`GA)} zw7M)9HoKRz8GTu z>b`;F5}f&=^O9mE} zZN?Z(Rc4>G-Fa0K4jSxIRcA}-)w}N1lp9gOjz^E}791Ur5Pp8JULq@!Tjr({O|WV% zNTCp>B>FUtd_y2$Uwt!Phx~XQRxDef6SlBhjN2#GdKy4`O}zaNO&LI_6Wo|HOp;ak zHYp(8*NKwJF(=AeBefVscWDcYI zg(5mB$r&Ze*_>$wGx-ttQ^$#`$LKkXsqG^`ahoUNP{5XFHX8yd zv~BlCXJ7m(E$9u3rWX7C<6h9!FOJr>q7QPDP+SkhWo94g0EBoNO9RNwuVW+-@hnmK zxzl>7HdPStdDLlxa3y5KmW#*(Hi!Jlpfa||rY@nO>({D)aqQJI8za!E^KSA<#AWPM zR4@T0rc{c0O7yRV=z?o^kO}0mWPX@!vqzOy>5++q1&iaG zDq@`dNH{ypsCS{)C&eWYTGzZk&`W3|YLWujo?xVo`9peE^&IzZW0s`KILIjR3II@- z)YJ@BRHA~5IYkHW9e+@}(0mIR{M2jV5Rm8IDI3=2sjMkG0ypps+c zJbUn4A94A=c!JgH%{`>GrZI~LX-OoIDRBro*I1`suw?JU>!EtybI+y_7PWOiY^a$4 zUp4a$gOdHP^FFw#4+%Y5<9P;~mb^4~2Bf@y+}#gwZN9CwXdf{w%^%yOUfaCR!~?sc z6|{({`Z^MqJ_Ep&6^thO`!a;M zHkNl{`=SnT7w3^L+TO`v@ibd zR9*|4ylObH>2qp9^7)TcKv_l@gwAifrx)aZk{3*WM_&9@MdH8m|B@snegN_zS01x? zhq3twQDKK+LWBjWh5|RHjXWHj#$DmFrUwDDCYomQ5-BB>Kg-Xo`~lRB{K2PH&7u^_ z*1%z^f>GgFtROvPnUu2iO9g!*E=wh2epDCB55lf`Mm?xz#qfAG#|aupIyDrBGkXR zr*JkHnPulMi_H-&^HA0IXz#v{fA7AL`P=V9z*5h_;Tt{K(a6 z)TI4ClQ62}rDQPa;Jq3kAt5!op{a7XY(-;x1^47Z^TI`wWPwu>HQntIS?K7s51eFA zYRqMl+)v<6V#?XI3H)-+Q6MGGS+d<2ycxE2dVD@WWCt+&PfwmAL?gT9uEg1Eszkx- zOWcKB1kJf|wZr}BSH_F>`Yjq3Xz8Ue!ye5KG|D*~*LSkTDBj0W_ySi_?u4NTt#mjc zk0FX=4S8%KJdn0D1^sG2W6mM<>y^!g5+Q;Jt(tg<56G9CBhd$q4sQKppMkRwxfye; zc%Aw+bzVbY`t6I}%G`JwDOF?Ye1~!k!faL3WcjMJtx^zzaPsE>^O)_pS$0I-!)sS1 z+vgjL7U~TaM{4chq^y=+Z^{ccR~5`pyOX?6R<-{~@Q8GbXf|w$2Uk~YpT{ERs8?wI zR3iJKYK^0JxVpyz@FnJn7&*w=^p4%Ivl?1E?BRJlh;@X%@=9Tt?V=e7K2kX{Hlg#C z;prb0*)Vp6-ibxwI)N4yQMpN>+U5`)0b+qtllmqr5m*(;6J#}a2@b$EBYjVhcbm}quU9R}omshq@KvMZ$Lh*kMk}~>VFE%z|AQG9EHSt@~`3nIN zgwdF4XvRyZu3Zdo!J_DtTV0;>+!(wM(fsjc2bRv7vvDf+$>quW%D;4Aq2SleWZySj z?O=P}bjUttJI=m2=IP-9v<2XSzUW|gp|V1Mt8AP|zdSQuPg@SJH$6!(8%aIu&dg30 z7Fw5ni>$!JhwxjTSg%ZGW^730W^z;exd{&hG-ci+VFg*JLv~UPjL!%O)4iS-na3tQ zOt0m(G&RP*w7k`(H?=4}{{x@0_7BmIgV^(#Omxi27#W!7sE4c*TqLydZe{>3pt3g* zq_n!v|3%t60LivB>!Pb|bG2>Tw!2r`wyo8+?e5jKZQHhOo3Hmi=iIpGz5D-X-*^=< zXT+?k7*&;(IY*9>Uw&Wb`*uleXeZTHRJ82o9Sr7wFF$R3pk5Vd4*n&zH8jVF94wJzWpzIiV z%Hpw={ZtZ<$Zsh%3P#GTsu9dn4K`(@$BokGW+`qW1k^zJh@fUxS;P*>MZ+bF!i8`o z)kYWw=xW9losN(NRv)I#`w1$1LkDRoMPSufs26T(n;(8eHK}=GDW$vBuA4CKfSD3&R8(eJCI4hWz}O|9 z_V&9^A!aSQOT}}7HR@iH*6D5i>21TQg8B^Bk`}3UHdkDg@p@*G-OvIgBexwh`0ixA z5_6c{oc-RMdI7-%-K2=Eh*lbEQKy+-Wd+J`5F&^O@E`L_j;?}CDIsiMn?_tEWY(ik4}`_5-!QX`O1Zx@nlSQuxKlQ7Hk1@ z18GVLJ#={~%6mD$y(?^o{5cu7EyJR{DQ-AM#1Zgp*yhG)Ss4S=7#>hTUz9T`HDTt8hSZItY7>hnv+eFN7Rsy#Vhvp6R$H}Z1#6lI zEfx+kw5e$t4T*E7lB#EMVw0t-Ane&?NHhF%35`vZ*pJ>o-UZzzLej{c!t-1^r6Q2t z{dm_fT^&P8wlE}U2yIu`&q-6J6CshNd+tM=o83p8(5>P4Y^onW9Kf%EEMX3l=Uz6)2|geL*f5; zq%iRBi(g(EB{1ck@11-E#0rfD(+{#yC`6b&8U31qhkj2AD?pq6SVJt4W`^TciE(f5 zN}xO}S&%+^i|`0xgN)Nx)4^| z6aR_zd(y!q+R($!iOi~OV9 zO#D9pB>!#c78un7>Bom2aKt)yj(m^kWCqbHu7VHG@eEv6xi)&(+baHOitX-$Lm|N> zRCGuO-N#DzcXk#Y(p~ux`LlvUZ)%-mq5833QrtnzN#RmhAaP|JMZn(Q5eLO&~KC*2@Q9zG&)6T~77suZ;z4 zQ_G3~j0U&a9x0AV8U-O`Ed0R)=hf|%z;@#c-uswSMt(ZueY6L`2Zsw>vxX~Fx{x#> zf>DMTTVXhyqYM>$V#JHOhikTIDZ)@)vhs%4YeLneV45nV-x|VR%@Y<-rDDX2hER&I zhAI1OEt@r&%1jXonmN*iyM7KNkm^EF_cP~###F{Mz|yGN{hnFt>3Y=mdE311ehHXM zA?=&AlWTv^jRw1u6C6dcO0~^^`)H?kgC^VYZxqAoMXS~Lx2br(bCrK>F6!@hxVpL1 z+E|)78-4c!+kf{1(>j>y85$W{n(5R22l(i}A&%m8zRTRm16O>K^1wOu@0cR!bT!O_ zk)gCfruy}W@qrXpbTeQKYp`RBMy#nDey@W|w>@y%!3>i$q)ex!MAwe?msxM=ye>y? z(N$X^#|Rrnj#qO>v@%$rq^nqz@u0EsSS6j8!M;aCJ3D*6dxM=-(t+rCE501^GQ|X2 zW*$Hrl9Wu7rl(vtbZ@4N9v99}-Bva>O^>k7f3E7$l{VycNSXQfZRjbCTEx=~6>pqc z%c7X`)brGkGa=$C<+(S)63|Y0@@_=#xby7OP<}38db2P;UCcn9US5$7$IH?rQe9dh z-+PfoZGJs5Y!D*-F(w`FgTuJ=7Ol%07qx1v9dmVlalNtXXo1XrZr^+$2uE}CNEH5L zD4t}tdS41%-Fhx~4Eh|f(Y!QCnsJP2kAmF`cPFo=q3!xbf{`d&F-A{qpwHNQJihuK z&L*LNQt(EBwd!J5hXf}r+XX4W-D4Ud@i@V#UI%c zZnSNvYn7hA&LGc#o&cZN*Gt_xV=sS=<1p>EZ*lE(4CsjPTk`to-RYY68SyQ7xvQT8 z@jos+Av%F|j6FH;COi)h{`_@AN*^{e2mUT+|M- zLt+hUfDBknLp?h|!TnGDy-(wP?$gG5SE^Q~a|qCvj+ffS`DDA>-R4v0lkuYL$5oDK zsHs+LI(fCpc^Zdcv{nUi&_V!8_)@B%dDmjq(Cewx@9lERv);k&>?Bi#yl(+O2PDRc zR)r4rin)bnT`iBTMD=<5U-Z9(wTFC;`}QqNZJ_L#y?*26IU%SzUC*R=!rs2{w1MurIez&o82%pI=-; zGgk11`k)|4Ht5T1bXnE7b|qcQvCpk9UfQY@6JnjC%nDddAZTp1#*bjioGM!iExEtp zL5I_EGx?XaS8!ro!mzFgDF2ZX<0?5jzQ|drK915gA)4P@T*C;fUvy!%G~u{2+}ojN zH178ZHaM&{7Y^oP0+S4LvuAiew34Bika|p29+yy0vm$|;Fj3zQF)g!! zF;+}3oNyv9l*V3EXN06NymbcU?0w*Fj8P&*iklX3bQ%|wtggLm6mt<2q(d}2g?$QI z70{Z~RAaCv$&;U80*iAe!>QxSmm;rVo*l0T^T(!lvsKO&QMgjs4Jx=dlTgm)DeT8% zEIh5TsQ>gqoM94PkQQWjs!*oOT-+d0gjfg`Z1anh!lDq#K%8rTY&>-SQO|mZ5j(v} zvPpn*#Ig|F+cQY6jf!szxtO{IVAob$(UI3w!h^M`yfytz5sx;P@m|CL?=Pp~2V;QQ zy2|O1(ikW!K_ZyO1Gv5@47q)n^3#%zR5ml>d}1yc1|U#i$`sle1hdt>sNX@<#6z^Y z4l17NTXnih4X@!E`Nt;s2Tkdg{8k&`^5XJlDx+f|USs!ydi$0ba2!O;q8r@>r4-cF zrJunWr$7hHMFlq9d7~WL{K6b2tZ-`z1#M;+MVTd}6qKVFygz=WV>sWga^dbNGpDB` z{({Gd@LG!IqTIMpcE-A2pfRPmX`%7Uv6Q-!h;YDj3KSF^dgzWE#yy@gVH7(s((5q+ zy%|D-&k44BSn)CYB3-_)%Ukh+*T!JIGy1d&SOX}bbxBS0N)~zqIEp|Y;j3ZeVEaP+ zL=EU8=Tp8#7{C68B1ASLZR`re2JoCmZj^$p?qxlUpgBRVR^t4wJWTwXDcHrm0;`sO z8N#ppsTqqokhBQHCax4wL_j)?KTpeVf{|mn zGGmyZC$Jqp(v5<)vWl1pn|4Tuc5370(NClis$Ia~_0bAlwn2mS_CH#`8-;(K%{7d0 zI2SL<3Du<-t5nrY#MbLqml#_;&fvj7kkcQ-)v_Qem&Ic?t(4SwHPf=B00aLBJ@uOb zENl};+Y8?4#qH#u2-A(JR0CAhpxY{YpjE`oDQh=`pZ;Z5ri|MVS9(cyNH~_o5t@P% zazSoLG$)$JqWQ!}&xrtnu!X9vY0%}`5xqF$j_`AdLF-w)WlDO9a5uNLki_#|guYMP z9SM=da@HIS3R&6%j}_L_k#J+bVC=*g*J*k{piU!Y(n7(Yb+Jk{C>PVb3lSwmA<5)! z4FbM}YdfcjfUl?{!@7A++6D|@MVW`cx_9X+-^J|&``)@R(x;Ka2N4$;axk(1)KHv8 zzO-k{0=dmoE+B4|uAFAe?YKjVnqVl)eW1vvF~Qfc7o(RO9cPigX8wsV5=Kmty_s(z zzRYV$t`}Vi0nHwyX%;Nd&E{?v#gXyXT^Y<9AI)^xlIyXc)X^A%#X@XKElo9jwP;CD zZ>zakD6_=4&^HNHkSHE_D_I`Bg&0D8B^wHv@~vJWGq(sstQQd|I}x<63D~4E9^Ce< zLCTgOF8|8{H$#d~=cwu>-7_I4w0riIsC>SOG~%q2m0TiI#X-#YP>Re|l!b>#45x3K zs&Wb7RfAQ#m5*%`i=tIv>xN zy4@MC{scrXquoUA3B7wwL@$t6VOEhpEj#4s=vNdX&~u|xX*?X3qAw;FWG=3v@J2LK zK?a3*s}SyT_tNwe!`?@Q!7+9ENg=pEhOD$Uj>B%S5O8yZ2aX9i1HkcHZ6^*=m-q{o zbB}m?-oCG6CwKQLs+>5;4AC7I{^PVWd%0Uk+vzG3-qx=Sg+Ty96$g1$;0zvNSt668 z=pZxnC`D3DxxTqm(@R48JmFRt5@{mRe9L}a=4D0HLfJQ%_tH7*P2J9|c`Nq~@DAY( zMN5v5%vL!Qcx7bHpz92YWjVi+-sOi>&9SQMn1~UrInD@(Y0q4bMg3BSK4SRpA}hi+jdA+FmaxLerW!9Mw42Y!#*fP z1K>l_pj4|5@VuvdZAkVKr!AnwCeP=Il^Z&jd!~L>3AWsP?nw3$_5M-+id1~q3SAi3 zf+FS*fD=A?4Gl5lozMGy0$u!OgOyIn=_Z#`S0DOT;w~{ngJu~T8(PMZ1~RWAQU$!e zx`*@K^UmFz4Kh$J$|&TH#qnJ@S46T)9m3E)^PG+PD*Ot8_@XQZIuHvrrakmqBEw8T zlZ9o4oH8X7m#nO%Z}3fM z7x4A-YuZU!PXa!J4d#*^-`@vm<*1^vVv|rYF}D4r{boCwg)!N4N|wZ45J$3jUvi2$|E?Xtb3+v^+@ZF0mzl zdFIQEo{&98;f8YxF-1`I?mkK3^}ONsbQC(!L0t=$3o^0@X6;GJ0GwFTfoNho66C3KMg&Xn39X6x0p^_zkjup9C4TQ4FT}kX3geUN zD*w8(g_%38ugs%QahMl7S5`zq)FZcROsqWAU2PD%nd8|=b4(j{>K4!g+)9c#A=_PV zpBy_I5D#p^vBtji|5L{8iE3ZY!H_$^4`)#{{z)3sv@(SGf)%pwkcvu(*{(k%olEEk z;Q{L^|7Z2|7bp2pOAT9GRq&l7R4Pq0W*$0;(3+V5 zTczZ)Py|vI(n8`MnGs&0VB>klJo7J8avW0OkFw~{BeQ}D`nlPl9m(x&CN!1pF z$7J7WU5B;aUi~KW!jnmPAl4&nX2Vio)?hhaM^M^JSdmu0$c|mdG4|C*JE)ei;qB_^ z$)bv7W(Q1Tp?wl62hvAIo}~08>rQm$a`2h}pDJ>yw9RN&wq9hp*THk_a7~#@XHg-6 z9h#B8jT8SY%NpHQw<4cpv%81UQ%O>^rg#h6%N;H4&H&nnILT*vrp!#!9r};?H@Qx% z^xce&IkDbu$RHHLu>62V|NeS>DYw!>q3^nEa220r2`Pt|V@W75`gnnb-Ft#jL>Ljt zLu^|*!1U^_cw2gTA8XMDHsh(l#fmiU(5&7?ia62aMJYLpk@e< z?E$o6d@Tx#qFcX8VpHF+8%SUDwURaq+fE)7a7dV8Du?jyN_vBAt>5?s~r%|HmDWpbi8~ zip{a&?9qXsQMa8v%o^X`yL39)%cO+~8xi%1wVKu!>hB!i+q(xq5~H%s^PR=ZgS{(p z%Qv&xF&%J$I^7uSBhfd2z8sG)i0hq(k8iz)rL3s24|(nQg|r%7m&mZE>ct=h^|<9N zk}G+N*SD``G9`9H>d0RP>u5;oO>;&pt;$xL{iWLuZJdw=uIS<5@&3l^Glop$vb#{^ z6rVajf66!U{)xu~DDm?&_*<(F9GTPHO*`fwx7ofVm{&Qb`8MfqrW@pE zgp;jM20O@6tlg3K_0cSIs6COgKHk7BxdFZf1ys{dhR%T~o#V0)HeMh2Qdw?i8+LdvPv4n1l;HZxNGd>MBwr{ zE{g9l_5c+@1I>clMF!Zrt@COMlu4|6Z{c_rMasm?L3AkBpUeG@IbW}l+xk9F7Uj^G zIXa@VldQ)2)iXv5^)nn>d({}dwQ%t6WMs%2F>#0Uc}fiW3=ot1UB%5ID)=kvV!7-? z2s!4D5ZAlxzCUOm56N22=`MQjf^JCOPFS^XWH&4`0ut&mBAQ(cR=7bPMI-rSyxYr0 zx7lQPZHR45ASCS1mg~J0NptG;(4oauf+S!rD&L zuoH}mJOX=!8BcY-0-{g-p;gkoqb8=1A>M>F<|RMV+ZGnH(u)VZwi$M%dz!1uCI zGg<);I~fo1)iL|kqPz~SqTisalx9kW9T*p<8IKtCAM6(x^%f4R7BjH>^=GDS&k9i< z(a$tw-UyPob3^9tV}r*cZx=&tKz=GGv0?7(ZW^0P+F>4tmzZDLi5&uBc#Cu07l z*i6cOQf!yizvZ$*RRh7+0T)7}JP&0SkW6^y?AN^+ zR~vM5!yhfc1g{|2?G?}dZ(C2jAB=8ld_7FQu&&BHo3mD`;CI=Q{x-M$R=_BZx#d6f_RtipBM?hptA zz9Mgz2IBzBY`QhKa;|nOL6_fge(Tr|LcRigO!Hscs|JyQ{1nyw6FhxICc+)@!0Q*{ znUI#_E9!agbkDoR@7Qwx?r?oC3%OUFkyZ4EgC+%E>kHlIML1-GsRPg z<_pBPa?6sO$D8G1!#%-k$$ty%#E7bHG;j^#b!;%Mh4`(+G2^sMb5=QBqD%tYA`|~I zzvZ)WMC(9irVDjTwg0W8e6)j1_zRQwlbimKZSMI-5bOZ=H^gsFdT%hL>SrhhRMhFNog>(95MAw$=6l@{ zae0TZdjaRV!Mbxt)4l#&^)B*ebJ+Apf$Gx!q3(c3HhGqacmp{ZJ=BC!fzqq z;J|JGy@7&z+2<3T>zOVDjxS&CPpBT06q-M~AEIu*r~KP<;-<2`*(YVLlO#67+8`>E zXEFDgQ<^L}wcpo?6pUGNws#QG^+D*GgTiyfEl7+@jhe$#b{3O%se_w48XjjV1~9c8 zv?MQc0~;K)&R7$l%Opsef9)qxv$ndvKZl1u&b>ysYso>%uvNvmY(qkjdu;&gB;}b` z?SG_F?!y%3nd5CozAVt?w9Cbk`cjOu+B&c+OUGqN1dB@QW5 zQcVrl9!irkEvOF%w-p)ig7gJYe8tZP z_A;8mr5yP7bp2+SxVQ6k2d3-y(-C!RbX!hQQ!=wjdjD|E^-sc#r3sHX4gsp=&#Od~ zRfVI;%fv}5Og&uyFt|4}&?UeA#aiAmE2L(T5(7w^yW?`eWaprI zD~wXQpa?rwpUB>ZxPcTedASN~y)Fla?F}-6dm8GDx*eF+<(bBjr{^q#{Ng z`+V7zHb^%x7=(f8{Xn)ydXItLEa!$rZ6>EP8}ZE`9*Y>~M5syrLDt3~NrmK%yGvDr z;2wh3iOh>p>6^}@Lj+a1e!jCuJ1pi5;1_*^<^W~Z-wZVa6Z%eUVg%=d3H$>?w|Gc? zECBB2dk4xO?2mQDZ>+Nl>6^MYQzc^WynO`w2jnHJ9UDercTL;Ry;x*#9mF{}y9)N0 zqX)>+J=~k<0tuLRr1jW!$&k`u#*yXA2hGAI2e;2I9LeQyGIzqI+wfhEe5fZTAwrQD=RTQD-jr!66*S|wG_-!B&&l#l$W0j+{Uz$F{# zSEL`~T{0)DAlP)9 z<(reYPoWH1^<9 z8hx^4toySDFt{w!Fg)@%5{tDBOBUHT6-g0)3p+!BPcg+N029S^Q5kP5+hN!)CQqo#OI`qu@?%?F0>_Hy_-vT!sW+PjmYJ?EqxBl@f*DHO0q&+fDnA z3P1mcDr|w`n!k~Ys%V`wUy`^w-VOrWl6X&(AdnrdCt&+ zW4G(43Z4%}`ZP&eY8$%fvJ2EHl=B zpjBjt3@Oa@QZ+#C$g=%+>^54}Yx2i_hRfu%LTfI1Ino0+H7CwQP-kis_Ru-SI=q9@ zVhF*x6FcTbr*%1rRNz%+FKo7t!VeS8g_pQG6Hi>I;dD)Vt38znUeNG ztt-p}PPL))M>MDAU0PE!3C<;ys?Z7?LFjs_91u$~!th>#&FDAv`a=YnYMp{qCO4Cf z-ATNNeeD@=#nG8Xb{>6E@VBTm(pchM9xdL9X|Z9G7E_ z*RYXDATDR+S%smwVSM8)PV-l?ijA6%dGKU8IJHnOhm;~E+=~f(_YUc%#{)Q?l{9Anws((_a{qA`GFD!4Ql>9ed z1UVx)$(SD}2kxX!_!v}qI{1DDLV3f{NTY|jBx+F<>{xC_8O>DJIK?g6t@9G@2R%u^ zz=69#WL$@-Z2LvNap7(tS;BaV{E*VbtP|n@P6+&B`;nBLR_$-)@b7yXb#%R6c2L_Jf1s_?AA%7TZP(?X zI&oH3kRPmnSpXlG1El!-_icS2|9Zw^{ihcAwt}Fgjf0V%{(o_%Cn~JTtbNa2djV|X zT4J-H$B7zZf-&Y)@U->q!1(we6f~o6Bx=KjQPe9WexFJO1ai2q0G`PDi%}T)w=q2D zljCYv>?VUAU)OJNKfwNgPcA&bt+_17fdU~2jn?&L9gkL)tvVlP**skIb%+G2^gRfY zuU0bg2MFju2VOv4^?oj1j>#Aj2$KyK-(Ha7$|BTye$??0D3Zi7#uBT_GD9qcdUB9x z!z*kZFz3u;d2mGn9%!AzGw37~XCq}s;u^t#_;4O$h|W&o$D2Fv?y`XB>7K3UC z_lYI_WfS5N2K%--bEjGEXbtjHn*ZkrDlKwt^k2@>f-q>PRKcktTnr zKSVA^L*3Lk4aIejw%>rJe9mOiK+D(i?&n|ueic!eRPH(;fy4BzyTrcL z^yKomX>xz`)$zpRL--uo-Ge#C%GhW|B~et$o~38B9;O^eJV$1%>9F(MFg`zE2`r%d z#%v`&mXfA4DTP)gz7d}N3vYC(?=-R->4FcN3z0v%JGSxgHksK<#a#H82s}y%s|Il6 zVb!7iU47()PDdP)*gggiD%Vi;C?TLf%2ZkAgke%rQV`Iw-Ws`yV;j-NPM8WaoNA{T zD4x6}iYpZ_w@%8>^we>RwfDf0_kkNqr{}$Nf|a|LA{LWh_T66fH=aR8FK`TgMQHQn8IrP?}E)?=2;_r8xO5fmslTys$!c?%2rS z$(Mw~_8`uc8wCM7zJE!<`t!J>_V&D>12n;gWIMif?tyaZq=&;3Lh!5eqNnV(-03D& z*AfF8Wp$TcCX=+f5 zeZ+P?-yuL9iy!S!Y)^9IHYIvqucF_Q@Pr|Y{6(QQ<5JeS)xu8eAPZui^*&D*0>1|} z^LjX`!SMjmhskIyv1PrWYp!&Md7XM@GvsP7HYIQ1u9dWQteV1YjBKRx}i|#r!?v z+c{ZQlVt&DqlHp~Fzwb#Wn&KRv{hSLXw7gv+N^>%Y8b+>(^kgjP9nf`JF*t0zFqd} zHn+JtlnL_Tv(9=)c7|sutfifPIiRD=jOlNQ^SG=`Caa2sd8H1qDAf~83) z?KwbOMt5@9yLywm`+gIDu3S-gl8KlZwFJC$bbS)UnZ;Z7G%Bmk)=NOP_P;ag{41Sz zMwB6KNOQG=8wRg@{dan(n$sjDmnF&d8^g=bAwncYTXk=1e?`TSu~$95B-XN2o+BqC ztH8A3l~&_P^QfF>lhck;S`$@Yr(0WlCb{^pwDD_N3}^F(k8f`N=cOz-{yd$}r_FtLcPLjUaGoL9fg0w;gBL=Y`j= zT~iRd!Mt6ADm*`=5sID+vyljh(##ZIzs?GlH9MkpIGEM=6>Xa5oN45pS>%?DJ<$+< zTyVH%G2nZ~+EGj>qz}1)y}&ZLo~0*3y6Hf0og6;67`|}(zY+SsA^E?JaTwzmfTbyl>{Zo>xxLBQdjB z{}yARq#ao$&>7CyMCblOGwMKDY@5&t!^nCMc8)2b+O*RV`q{rrktOLVtCe+hfLiwH zuMwgp^G??hhPDZt?S4GEx$Tuzptf~Lu-zsb1xW|xa0 z+TMPTaI-&od3AXIVC&=A*>(CHOt>!;;B~-u=YbOOBnz57tK;LzidMVcrPqLQJtpsB z*;8L0bqbvH123TeV^7j@RqO0c1*(TC-g`4TPDUWj_DuTbh#)!alBwQtqubC5TpL%& z5YcX~xv5RNFMtfrUbbK$N1;-HRzn;ICjSDz`S2rgct+1svPRqodJ5I?Q-b~Gwe z%)M2i?!D0Q@rHKOaVb{z^GZ^l`vf7(=>QD>sShU^iJ#1IUI#pbV6X`3_)kn%fKg8sJ~ z0sj|&i^+Eb+<&4#1)*^z zaE?yE9p5fb`faR#y#V>ghWc;2CjUo6H8g%&YBpbkx6+5u0J}i?Wj9{~n_*g*OA&_( zbEiSUZRhkm68|qlaoM>10Ahj|JQ_)Nr|2)Rp5wi#MOvT0i20@>s8_yl&}^}*;Boy@kw3tOeeh_eU+VR zIA~c;V%pa2LK_?)k(pOBBFk~;fbYh)-6P7LB@2%Syk41e8S*O$YvFIc%($iwy#Luy z|ES5~uR#C*Fto)?N%Zl-4|ZMXXjE8LJRmT2G=mF(2*-qwO2UC$tr=pnTES%^_ zOC#fPbHw$GRW(b~h3=5s_p?9%@#KIjFi9_FaAch~0-#fjA7{{Ho5J)mjtui#+Za6# zeC9*+?hMAgNJ7UDq1n@9fPQj{(bokJx*|spgE??j z7FOh^7MBsBwbFAovZl4MH=+5DRso=I4+jJPe#ei$u;G6_{m7#v-% zfMLPvQO_&+E3w0vRwp5{juPG%Z~b}A@~41FX zvv%b1g|mj`S4eYNc(~;2*ZC&`ibWRX9uO;FZ89x5eU9HI> zf(l-yog1toFTJQL*E89Sor@mmpT%R<|MG?iuk#@$Lrh8THsSD5pg z&&yZb+ru61RJ9dzGBZO_A7I)H^VZ(F7eul91wF}DT8T;Zq7`j#!e&ZOaZYhS?goiy za@N)XQ%?fXK`~j0h(2)1&DY#UN>1vB`t|kVw6k^0234Q2x51}JSw&uRC=1k5b8I-l z4bd4JHyIoyBUe*wSAu4GmKahzM8IbCpD_WL;*Am(fRk#X>UljLfSfrR5Vd%Qor+og zT?<^!ProQmP7Zg* zaiiu_5hTxYx3JB)rli$*)p5WKabZ7sO!MuyF_QaDsQ$=Z{r5#W5#;I#4+xkY4vLT0O%xm&JVT;1gC^atK^*VugJf;*6Nr2-aA=> z{NE!#^Zym5^#43eZS8GrjlR2*j2wPB%T7pAOHheR%ZrsNUQ1I+PV5~hz>-TV*@{am z(=jR2)mJmn)i5xt*gC_=(=pI7?Hy1^Qd3NhPt`HcGcGYQ>>fzaj?z+JOVv!!N-R-M ziZhOUKSf0`A|)wB0}$pX?1%)#;MVf@EzE`C8Oi+nYg&CD|N0h2^8M=n*gj=uWo!9= zmCADb<57S8HTHidvH!I1bmU*2(S~1V-8L+P~`8`~^%}Zs4YK#ZHqs%glN1?cMz$9W~}f7H*4qs#)Kf_p~bb( zfLHB5O#Ww9`l?*XY_>uxDz**Dza#epV=Z~JY|bp%%rr?)b6!BL>7;%wpm9O3 zmX5mgHIoK;T4xi11m1`Btu@&~QIc5ivXB#3+Oy8LyT#7*ZlEU`h@BNb#R=wm&n*v_ zJycZ$nvJKR_xye>DaaoDSt}#w^dYDM(X@N#zu8N70zUGmAswaiHMXYqI=^f!%(D(l z+=GDN*g);UKjzhA)QLO$%kV;cL@7Tg*p+WVL6`0ro8&l8Lzpw2E1ilkUHy0XIHtV_ zc*JpvUy1;Wduz8T@{15<$rWiA(LMM|;4e*{p15DnKk8z%czQDT&Tq+YhfF*j=qsm8 zVzh*PRo%zch|E5uW@sH>x@JE$jFU^(--LG|7Nfod^bs);D13usr48aO5lIGbLb&2> zx!L(%!Tt*M^hm}q!|z!>5~Q@frp5u z;|drdA_DL`AdVaI0g4BXg9q+sBVyIFW$7|56D7y>Gb)LMB|v>)QOxzX8NsY_XARSO4Y|T9p4WnId52acXGrRy z_eCp=xnVqpY{Fu|ZgTMrp9d2voah>*AjAT{nH1qf3^Ar)x}em7po;M*G#HG*_X6$4 zmTVT-cSqIHC_61QxzPJ2GJ2DC9VMLZKyhJ#29`=qO=kwZxXel$3;dNH9a&$JFvrxx zOi;m;_0LIpfKarlyH(gwb*Q1LG#h#N$ilR${MPb1dU4O~dJx~lZFU#CYLj7TSErlX z?~Pl~LN1tk#-C9MG_1-%uE3iXu&?RwJ%@v@VH7`X@nD$bx=PHw4@Qagmj@CSSh0$= zG)YA^K15WM=9j`|{Jh{lUte3@>CcTYaEf7=Kq>runZ5Mln5#V+yzK@?bq(rje#F2W zEmfFTR+`?QX*ghB91b`=Fr!3Hz(hW{%EDR@Mt-^*)QLM;)Yfw(D54GVX(FaiB!xsC zExl2erdv<~8y8|BDl~Xip6?ZP&M=)KOGjo&ExU*6ggvUv(?!k(1R7LZu%!VTm=^=p ziWExCYeKZq+_Cxv#`ZF`a#!=nwF!|`x8}^~0Oh`i1EJ9+cCSf{Zz}7%YJ}c5#s#bh zXDR|>%T#OMF?^X9Is^wTlr{!(5Q^XXofAJzi@D;A&h93K+Z-(xz(*4dQS)E;cofIU>lX=8^`| zW^>#Qf~j$x<@?WP(-%GlvyU4Pzb;NsacpQVdc! z_e<&**(}5{mSr9TYIt#u>7R>RD&Pw8{-1iXgPc2Yn6H?^o!i-w=t{H~(87qfQYvM( zxqUt5uBv%*0UVl+5W)Z$Q9 z3G3%9@&HlRr_!K!Y!EniXxCTgjRz#Gqt9UvE0p;Na2_+%?Aix%?V|#AmP{*3&nrPT z$hW0*sOOliE;m3*&#Si~b7)v-RZSC(B3ED{Q_K!pD-^3@wyEJ)Ew+M?YDtzG{32B_ zC98C!o1`x6jrX|pA(Y8kJ9f^Q!G=VMlg-{7U@E*iUVzN)1X|_?O9`Te2i0*!BxE9Y zgxfgFZ9Cx!B$-17c%>%sHY#2qob4!*CUEPOpAv`6eaWKU5$i`flhU`zYQ}&dM!3z& z=W@p}OyfC*v?JCZ;)mluXl{i7nA+!b0^c4Ev4W_GF1E*wp5{m6mI_WO1n%0bfVa*A z#p+7?5nwj@OhEVz^$a)2oKcSF<-v#KOU00wcU>2k?Ma`JJLdFDNOWwr!BMtTKs)@t zRp1+~2tYqFH+ zTFU&k3nR;LNS}TVR(u^-lhCuFJx28?_!|4e1M1KsoOt`BCteN45O!RQ1fPY9UcLQ> z>0oZ>NEj;lX8T6#1Li^!QRAC~`;_pP#8oOOMAZSNDC8qYvD%pxw4- zf5IkWD6wLo7h&@!%5O`W3~A0la?2glE^(y%@bmjxfd+NwceudQddo+!K$=DMuTa;} z@JJH)omeX+^)SYPcmZ!@uGQnNe&1SrXo4|+!LDtHFv3GJY*hKYixHSxB7TZ5omT-Y zI&b4qF~>^TZ}lHHAOOj&SKik$*AE-pfQenxatlm3!Q*;WnorK(fdg!Fp^_PvNNItH zBYgEr8|q7i)mj-8$+oT6b`1vc%JqhU4JUY;pEm5ON7 zCMrou5{1kb)fneFg8 zHhY3IJ=cGAR)N1%J|SPxHdM`ANA9M(e3F@npKR*1 zReMq=owvB&(Xnglv(|!wo3p#D3*VMs|CW((-~M8>iPOB4($}0%53Mq)+4po(v740a z;eU z>~&*>r|Xjm8~6G9&sljrJ<)ud$F77!!#>D996N8xB%OJyrbeG?ieCFZ z%|_DCwIg0n@TB0o>#8SBGSh#p8oOfMXs5Ds7ai0`Pyf7U`(42;<(JlpIxR1gPp3K_ zo_R*6#&(MIWS8aR&vtmZ)hrvk;!W+jDIYJNxH^4y=;Xo`@`ir5R&VICcPyTv*>Y3q z>Ly*4Me65=%kVCbIk@BdvRnMKDvTza9wWy&o~cniyPJXr#3H~pWq;~ds^cH zty|mNCzWPv$7>0Hm>${CQ2#dL+JdelZyPxE6<=<)QE05HsU7*|#$M`W*|Eiq#W8y; zLo)rAN59OBKYVc2Q$GzG)nU5!A)YZ>VL1+G^@*C>_;uEut=?J~Zt%M)tYi1NOZ!HC zlyNQ7S~F}@_{;Up=N@zM@!for?z1Im8}HIDq;p?P>o3KHj1E6ptSVe#vch53lST2f zP2)v1#&V0?E-r|A8$V{%vc;SW7Wi01PII1rS9G|b<`h%SnA-HQiK^cNQ*z~ob3V@B zkeh5%W1L=i;;A@~h14hI3-*dz9b8uLtI;Ej@Tm@NJ}KrDqx(eorrNdH;RzheZ(rLj zDy+U=K~R58?zb&lUz8rNbf|y5`ZTXz^nI&+A>*#57i|*!va$2WubK$uH^%n!l6H-a zw6KvqqphC(MOXI3kLN#66O26sbsFYoJ`YK{P`-X_3}5ph=LaseBQAxsy!Oal@aw+9 zj8p;3=A^958`Ji=r3r1%=2VcBOdhjr%2zMN(Z0z`gPVQs-7YKK=C{yLM)$!(`-!V< zkK0B>j4EEXX!{Y1c?!V~vq%@m7x>wnX#C`Gswh$jYJR7;V0uHBQMvBC>6HTQ^Bg78{#$tTgZZgnE2P@r z<`_yS?|##+{xUbs>RYL4*S`8PwO02-Yqw@E9MN^@$ghZR6ZdwEd9bkT;VJEF6%S7t zR8tz1b$&-!ua)b7|9sMEEBVIL)-MvjC=@N(T{$}6U*L*K^VT0}d(Vh{YpobwpzC@{ zE<8mo&m-Z~#>eT7fx;I?iJnYW^3v{TxLGQ$AhPwn{=;|?1tEK-l+;9lUt-~5Nn5Ko zs&tIBTNu|m;!K08T;vrcaWBJWY03O^M}7na2ijemjuS>);;*l~dPhDCiUdzzP>v*&!>U9Pq^($zO_*ME_}{NYY=j8ksTo|7Mrq|6a?3QQrd z*fTS4OK@r3=j3*$+{GH--`@R@A$sQO0pGhzEA&^ttACZ8>6B}}^>bl zoC9qxxBVwk<3F!Rcx-w3+5z#|dM8)izpy3z!vpuz=}v)KFZD;Qc^+o5dLi$yE!&8` z0*&bO!PtpwQr3UtK9M02 z^+Yp!L!_SL2gS>Ak(`?;x^;Pp9b;X)l0F|zD@eRRG?lKm6*d>Xru5$PqT?sRoXhq5 zisrmDIQssJYJ*dwmT}qeZ4b^o(qH`H=Kk6uk88OdvR8Jrbcu%#Yr49b`pGYM(s3yHAxaIL7zl*sui*R_N<@LQ;m2oeuvI_9W7S}nX< zqVC7=aSI8>8y&jFC$3F6cTMN`ns`mkqxtL36RbmvT%Ynz`gMFyWHW!4mq@30x|rgT z$b@TaH|!iST>6rs-GmQmX7Q#w{97IGk_w((JGAzR;0ywvUfQZ})Z-nTcYcbvti9QA zZPmR!d-FDaezfc9vAi`RpW0ThJl{ETP3;@$Z`r5nN3P*+{_SKPk$g7d<`)ywg2fR| zfm4^2@r>N8)*;cclV`JNbS7Wyq3|MtGf+q#;hve60eO}~B} zIpf{-(3WjqMwwk$yiQ?koL6UEpt>_Z1%?kOWvQ+ZTNVQI%|#p$b0LK_!{rrZ@y^cggm*F z#oITu7}n%?2y8pzpKShaUhIr8F^`uzdp<0y=HRNCVteURMa0bcjklNE<+hzBPn^3n zd#h;5C!3>$lw_NdPMK-EnS#7KsJy4-$9wLYuTrO%rM~%Vs9OA-m}xCl>bs6wiI^W+ z`YDroDN#r@-(k6`x}eXyryBf9Pdba+{C>T>rB@hNm3nBNZ|dYZb%c8j86&n<)<@(u z$(l#m+P{0AGk^X(&qq?KPfM-yo*rxS+pfAbFfeLf{RzSO&3EF(m7dtueVvoB?nPi! z?9mk>ozdTf4ik3VUinjg&!wFn+wUHawvkHSSI^n}`}YrTK?f?=W2qSv8pD>Yj`L71 ze`dkA&)i$yIfA&b>Z5wAmGR1usQfP{%~u|+SwKF=nYwMh%R&3(ILh0AU9sw8+kX(= z-M&=Taqr#pEjNqyP|{u%nRFCpEYIQ#^Y~s0%q@;v>1^HxbWxJ=Ga^^dSwHza|1&?Wk&Y2oIyz#Zc z+`DGq#7<>Q44rkQ*t?$hYT~Q9pl?c=mCEhT9f?mWo0evlT}-(8I=CZFGhpt?H={?J zYKENV3wfiq)nCx-UFO9jCtoX;XHT-4HN86PDDP9!!i>))^Yg{R3T@+k`801=KN@Cz zW45$@{LVa56~EBwRzZ&Z$>LWwoc*E3RVA1;>+0sJW&`7=qb?OX9ua$U?%1}kF*-j! zG(5Ba;`p%WqxX?(aXhoi7IZy|==?tJtH$B$4`k=)RjKMMxYuF&pw)lT79ro51!0ND zCdrvpx=#N#WXeHu1P{>dv%^%mj%VLbQdMJST@$Ie(;S>jvqUhGe)gRCkL^Y` zw8k}CUmiWh_kq5`@Fn|wH`gADc&`2E-flx9zpss7ICC1B3Z^xgjFHGKei=FA#e8nx zmA()B77{*h)Xpz@y(ad4UeTV$vy!j;Ih!S1YWz0*7@hKiN8y6&EAoSNcYkwCik$J9 zr*6aC79|dMqbsG?sUmIE6z#4w$wunt+Gz=&TBfwdtOIgEa*~8 zk@n<~|9ax3H=$iaYmU!{iaR6BIU_hbr#mb?&wZLwN;o|xF=W}9CUKt5^9l-gbDgW_ z+qC(Fl^eL`n98@k)Fu8t`Rmj3(XvGvI#V1^H;Iq#)Z%GVZYsOV`!3&S($g|{VGZ}E zJ=Ya7EA9w=$}5ZNT1rqF@itPvZ4CF#Ut$Vk#G8=?iB&7Pd}eSZ3w927FZ|WMYMSJB z#izR z#=E}^JgA$aa-6GIPy19-V7drns0)ZpRtt{m!v2%8s5ME?&UX{}p32dgN5~gV^tHK= zZF1S^^BUg=)Sm=vzJ&oNDak9Uoa-egL`v+rX0Fouwes9m|BKaA&%tFA>eBaT3G6Ga zCN^8%*3bOO6SqWEu;JYaw;QS%t`}ZvD?K+$a(QlY>HHcSkGz<=r@s0+<)jGl%liA% zZf$!WthsvIgP4n70z)eI=lV9>4GyW?c?)<>lbK{hGS=V9oM<;Lk#om5{zW_2^Uac(x8#DZ$k~@u^Be_!$8Wpp zoS`G5y1=t`n_6lWzhsnW*xs2r?~~iFHYLyOeBbn4f^g*Yt;Dr!e-wNb3zPgg>AUWS zWd%y7HpNMo+P(gC_tVm|=bId+lJp-Ovx~V_+*sbi7o-w9DFdxp3Km{9k@L#ed)I&k9ENv86oC&6^b`$nE7;&sB}rs9Ev8K&km-y-N9JjR_&! zO{c^v#eR5Rrn{JL!;!;#FP>8WR?9J`&`Crk*W$r%Zd1W&$EJ{f2(Q?-lJZ2aw98r8 zcfq*H8y=e09u`{R<~>i*Ij>HwnakWdG+rw9jL^CI(Bksd*0UarOFPEBRqb%wMC}AkHMdlVPl4Zoy3Bb;1N^P2VF~9?ew?bZw;y+>D;kraigd_2-RS z25l4hs}5Oz^L5{Eg1> z{@H;Wrd*%fnyY;#M%KFL_FJQ(tkS*E$iKq$W-?s+Q+k3R5cXHO^xl0-vymsIHwL(u zoj)<=p>bx^#OscZXS{a_m&fWIT;)@^OrTg4ljI#-!*K_YM;d2S@115^8vTxn_1QV ze7}g?BE_pOsl~-gk%f#u-u&ry>Bg6{p|&-rglk3Hzr#wnTV&A3*1STysn>`?0v^Xh zKbL%S^3=4+39_t@yE%W`ec{-=2A-|3vhnr@3yqd3ITwWshfUrd{6sqT z0X1Iee5}9*gWRdF1m=pn%w4Zuck5Z4^~8rOlg`UF&N^23@~y2&7Uf2^|FJ@+?6wr= z8-Z;v_B-s{eVs>jxHhNklK(W*S1KNtu}HO9FIVz#oZJZ2b(VVBTDp0TNsmTH=zmI7 z+o0p0Wt%eHCcJpbdo^yyM;;wqnw3WlBjy#{2r->(=|eD=YiOhv+WZ{t9{ri%eb_5y zc6E8X&x;SQMUrgSs&w&MZ``B3exmj>=T}zwTRz->XZl|4cIuS~&2s7mQ|U_~Zm#Pt zKQc~sj+*ykp@Bl%7vb9uwIfo+T-xf%JU;DI^;=@MS7vyfznR%J99xM>A}7S!f&<@Y zx)Q~z1NZE+qTOJX0#`g%S_qW<4*6(jcPBNuP(bg-MxV`g4<{BYUVSebeh$-7|V259(2J5a`&5>?Y=K1@3ay1;t-Bwl&*Eb(ezx$=3rC?&I zZNSP<-Os}-&iq`^6nApRv-4dFZzOZ@dd4mfNjK1+QfA-di_C#}DS0evI zix=OYuPd>Td|kC?5r5+bH8uBT0>|DcZCJ8bNMiJa@26c?iOBQJoaLxrsgdPA>C9ul zy!BGmfj%dLFHR3zyt%P_T&~>Y2hT)-Owq$?rA7?GmzL+l7jx&(?WN)|9^Ea=9{T!Y}(t3a)UW znB!iF7NJ8P+MRK=Qei?Q8R>JzZ5p5Br4_%X@6U=@T;rFqymt8|%YY4^rtB`hT~>Vi zcEsoDpUvH-A3a-LInM4kC45&#k#`%H>a(T|6j^bzZynKOxx$9u-5Uj7=2y0k2j??n z>U>)Gm-M@{C+uBAJkQFJQmG>F>qU^!f#G(>B^TpMpPFdOaFSJE|6S6S#LEJ5l``Tl zZ{(hQao9M2)DK%xL(^w6k%Wb#{gVv@c8w?(5BL<(uJrzCdvnWMt*A~1m(U;0mF~)x zU$qZQr+SI3u8LYb#p>*PQbW<>@|}myeC51%jwfWr`IWb3^JnuGTZn!g_E}E+`xRe` z>>?kRt?8<|SG*l~9=$&C`$&t|g^x4IA@>D3q6@rkJ2V{Sq26nqKT*(Ta#D>-QmeKb zkMGKQ?cz041Nmpp^F5iSdM9RhUL3!W2w5#txlBakcZss7Nm;q{g2!Q%+kVN3jGQIp zS=atD#5yx!%h*Y7@D=~MQLpUgm2#$3SXygUYDsRIb~OK{+-|DR@>HIhmhFE2f~8|m zzMiC;Dfr*dd6OqS6m!~VHA9kDnsY*Bsq$V*0)1G#D&e8pU9Hfcr)<=&C-gwt3WrYcPASgn7| z?n*PSe2&*g<<^-2`M*||pUYpnszzX{@wH~bbBFc?AF!dkKi_h#+lg**+#2};cHV7f z`q>e-+hma4ZPe}!Axw9hn59M=0--+-_N_KPs=eFhuI#k*E>sy;QavJaqgC58y_C~Z zs)gdwyrf|l&OA{_nDpd`)Mh)8&d(;NJS}Y^9Mkr9{{DKc)M-(1-n=d63mukbS-#MH zIh#LjVzy1G<MDByaxDIS1}{6(>)%T3RA7(f|E4uLakr9y+N)$#b%ryq?wb zpULr@Y#OB-Ik}T++itkx@RZK1)!I7Ke#i>Vz87z?_3^A7nQ|H(a+$9tSCLg6CcKE| zEQsGZrZ{CAA@LzMm&8a8-U$ci2X5<_zy5-cn{us&s)9NB#ND82OUP@k{5+u8CG%nb zzB`#q*Z=3BR39-{WZq(`$|mv5|LT^g7!ooI1Ehlf!%-jk_i`yXp4r#h zXddb+s~5SgiR1e2i3M@5JAM~_7|R*7txLLCileK0gRyjih*bi3&v(Roj%1*A#y-i$ zZ|A}GUA5gSv-VSvwNg=mtyZVi)N<9-ZD8NkSdOne_d+k-vDy+hv!#X1+j_S(o+s>5 z#g?xoW8fIRmMs;nanuUav!R#xw-~Ec^6xZ>%2+l2W$oP;>yvF(D0K%z;%$$Q*tRQw z_^~kI;1nPT5Jrw1NwCl9uz-K{XJ_ds0;F8z`6J%1I|E-GUA}228UFJP@B>pmnrA-z z{m-jrI!lZU^sQ}_%nWG3O#pnae%FlWkm{*p34}2;?-K|g;h%_PPa>5>RSNSV_kZ!1 z%;kHn@M0dk2>+vbeuK$+UtH-HK=0i-$LtPuXB*EJBdW^y&I;M z31i{E_#jLmz}FZwPYwKA7Y|~f3tT}HKq1q6`S8;3GizWQueAh$z)$lkfuI1iXkMnn zbbm9UMlu6-Tqr)uv?}WV25Oyky>HMSQLe74!jys-!t+fA6#U3R?w-EX0hF|bk1sn0 z@iY^RBacuT51XGc?)&r7N6AJP^lIemM(NqW)L%&R1I~%ZKp!Mt0zm~KEGRk%;l%-z zAV0>`G51_@TT<5LFE%s@YM=BV*YYKq?jL|$7r}w=_$Ick! zXHn|u5#ZRO@cKBK7YT&zAfFe-)7OVYrNYfdbi=}pi+AUJcv}zrdIIwHV>R?`2Jo(q zMx`2XTh$kEQ`E=b!B+xg_|S*USnN{;A4aYLGJi_|Uve2iz89uh}tcODu3b z3Oof3OhIGVH|pX;aaHmJSDx0X=_v!pVNJ0O}_cusz8jE=JH5UA9D}OGe=&UPSQsiWs~4)0A_y&qM-3X%EOI9aU~&l;q|u-+0lNjG}uLHGJ&9hh%&AS z7YN12hv@6d6aypMmw~_}G|!&9crc(sz%T|D78Moq`LZDYE`%Zw>j?aPzOqJGM^{(3 z2ZX*UDw{^`9|=HOFrH&y6a0OKJ!DA&0AhyI;=d|EAFMH35JvI8An-TpGuCiuawAhj zfbGqGvzQwM{+f{7= zOx6fM13HBQUO)50d;&!rxWJU5LGakvh-6dpO zF%Jl}bU^icWM#7iXGh2?h}y5dSU{q=SL>H=K?eGF<~y^g_2Bu`Y`22f;(7PQQCE@2UFaZf=8>6{6kVD-vz za{=!;bktDsh-EC|S!3~ujUG(k(w<)BY5;AHfht-BG1BNKc;LE8(`^u8%KPp!#^AO% zfly%z6M2NX)pPvR=^N%^wwCG};5rrRSJZ(+I`Gi$ZnQIXV8@W3RlBFbB9dGGFw7s$ ziDNor*3;r;ijjD*W3>QeM;?$w8`02t1$-ER0iG^Y86DSPBD5S`7j;k50vI^+#o}Ef zykMl63L_0#0nJup2hGBhMBg|zC3gI-0JI6l85C%YCM!U?LDWEs5BM-6i8iTK&Tj;u zyP!X`Ab6_93XooaCzJvUoJo_48Y5@i<1I8|4 z4aV0UPQqZWzYN|SK}%>H%7aTNBQiN!vH(Wkw@0puP=5j`(-?dkZL5!>;3D2v)YDrU zz_R8zQpu|V03Z$k(4n#hphjN;t{>ARuh0c>31JOjCVhaPB=4zL=>n`<%^H9@eE=PP zL%~A200-By1~7|0fJ1`xsRj3wxK13nsubm>5XHGZMe^yWAEGP!h285A86T=TI&ls6W*fQ-O~C_(i!3 zY48%HLDcMPui-(lvGXK_U^N|mvpjwm6u$+?&j#}7(#(H_c*xt@8tE+|`Y@k5V5$L( z?q^Ex@19@#Z!!gOf$j{&7g=w`@*VbWA3d}N{e+7iMmEUTv*)zW0o2b)CQ)ZYB)}-s zuYfl##=|X29qWmJ`mxSCmA(mRr9l^!zLns?b0r26oneE~070&tc|Ptg2(lPLdQp$Q zd;c`Q#S&q?UW8spWi$-g7n>NXL3c+OY^;soZMicPJo;)oU4AZe8ki^o5-u9)@>T4i z!3raNsHl@%aX$dc3i6i$B3M4``WkS|*WYD|UjO}Lp~WO$5>($76qszg_Gy(qrr7sq zo0UK`JE-XN5KP%>mN3o2tSwFPAeKBW;qwH0QVe<7JUTnU_EPamZqM8Bs>xdH}B4J=W00Se;<7pllh$1H8(xZc3rvH%tqjlyh5E$}*Za;o;LB_-O=vmR=5(r|$ zhW#UCYtr8ni2Ezn=#<*zd$1@`3JV5{5d4E&Y~U~Pbn({h(K3B+t3P76rWvxkAjFU{ zg7 z3ytf`TMj>kum}QoF+$L;D6%XH4cZ_z!D!W|Dyje}2_4GC2rQ4vKY*nl7V?$P)35^w zr+~Yl?s*n=?&42C-Daba6)N_?AO=-j74dSJ4-9ADV0=LZjniNm(~9Iy3hk{L4JZLF zjFuKKh4%R;I%y+o;Rhwd+BjC23~Zg#(nn_p_t~QF0%PZZIC!AFYi1=RFmBj`W{bGU zta5M>R0gx46^G-KCxM6lh90^N!on8)f5(C;C4?adCaE&D zilBs0!Tw5^4wrP{b=kj`q^|@simzuNC4hd^44--NkvU`tXYi#2to?*6oHpQtNcr!hP;Y-vo~~ z^FO}>*^(PP!3kj|!113lgPDLiD<9;X6}N*VnSO6O(P|u*OtoHw>tPJig@{t)Y?qIP4sSK@&?LydLr8|Tdb$?CO z+ZCiAyCFN24cY+~_9zg#J5+z-cW>wram}5*U?$BJy|V7$WL+@8ZK#e>biQ!5(cz>9 zPha?h5;RD%h)lF1ae*g3hXM#iFJH?xx;-U;>XnGJP{X<68491sp~LdNJs7x9~CiXlNBjAE~u=pQ0S(fHRN-^bn0o!0sEo z6)cJb)(mu`1o+TL6m>3GcO8%+7Q64LC*~O`QlTWN3Msdo+4yzv_zP7 zlTAbePcmuHb+D%C`)#o=EjK{uqb62{{Q-DGq|br6O^o4Mhrtxrr&q^}7H1md-;a3& zp?LxZNi^ZbRsAb$`e9R8eDIJFlBa~lF^_# z#!T6l4rLL$jv380xHrQ^Z0?kS-5^@3=-Pw}3shYgtxe3%ojuVSxGsc*gRT(VV23<9 zTv>OE#I%cD_St#2Fob_FbekLyrR{;mut8HmuhRaA#{{3*Iz?NEV*XrkQ_a!+_u|hQ z&juGgau2#%(dhQ(h!^O-1ayzi65a{2jf#8CV*HU)%}#)x3g~D8yeG^yI>6%!RB%Tv|#!*ysKEI-941`c#(yUg^?iu z(oc2n?xXH*2O~}eBN`&%GeU}0foMSOh_Jet*=V!-u|?knrji5d z%PK|b+8b~_FJ^{muu^t@_-eP_7afiJ&80{z&F(^ZY3;qub z4c?a582+i`3z#edOon>V&PD%}A^gqxXXm3k9{@{I1H4Gc;QzqV;9ewiicldBM&lb` zv{0k}14Dy*(S2#_-I&q#07G_2oT;0!!w^ld<8EBHZ2UFL5qQ`F^#sa8mc!X zELR@Z1mjQy7{>(B!$xa%c<6~`94i*f0?&-p1>ygL++v9UH`xvq7{`)@=7g!rH6XJK zq%}PR{)_{Dcp9r?F~GFbwD)7Yw+?vQ6X@8ZpOkPpv4_}mbQ;|aH~T_2t#<(J>Vs>c zZI83?p%dP$O)K8uO?!@?#ylWn)H5OWGs3E7qeo{6h z9dyB_WJ?+a?B04y4%LBVW6!eEPQr6TRk zlw0rtIY955yHo*i6b=C&BgBV9T=r-LSC0qMp|2$|rt4`&xH1=INAB+AwV_g&t^(!@hNT1B{@JrJ!?cOUr-}W{ssS zT5Ul_bQPj^>0k4~w6Qepc~M(D- zR^{f7@7o04fUdmSO1hD{H-l&_EE_tz|s|92{l?^?f-$L z!M(^Wy8gZbF!Tg+9mdlyX}%noyTbQO{U*&Xzp}$aPi2mywdM3;Zu2Sty$Ib`w6!&= zb*R8NT3Zzq?)h-E2SE_v(H*JvKiG#~47)(ANMtyIiplv*l=0J2upXDofM!fZCw^!e zhr_~;>BO05wMe@;jByj-J2ted7Bg%(?jn;Gkx5r=nT(zboO?jn0h&d-YC2=t1siND ztikvEvC}}ndN@MU5E(TC$FqfrtE;x=dt2UrFjiZ@5si8X>NqjBPzUX*tqPnabOfRm zzOv~z1yX=7>F~}LXbef)Rb#X-?eUE4UGza0%M2Zq!Fe`5KfJmQf}~3aNa{Ro=%5VF zxLG)2y1^m3>J5<{Iw*s4Z)%k7mK>%Fx^2eLK^dHdv!dmIHGTDFDGVKy!TC6y)>+$B zAS+yh#HWwM%N5w#Iz;cKU%h6heequi$q1^Re#6_US!_Y#?Fn=E9OujetHP%p{W6j; z9OQymR>m_q`r_WqF5xv6f-`9s^+(m1J5*H0Jz;61&yz1e9hENCzbD)VUmW3;m9}zV zuO|%fG>@DUQ*5{-D>Q7tj1YSt+@<@G?fu>JD;y6wtU)=*X*g($xq=0%F1=^e3}9M* z-0F1;poY8+U#6mQHFE_H9rQB&hdh)M*aV$vMd9%=W?N`;ePZ^r~RC(ff|- z85DiBb9$vVc#k;P7X5r(DT;mc?vr1!^9JxJ;LB`r4ks86u;wS~TFvX(W?^u>JH9?4 ztOX(309Hq5IX9#K2`v4Kaj?@YOw(-_NrBSip+H7ISXsT9ZD_perVS}H;fer1Oh%-h z;OWbVaM2Jcl+Jm@=PrghL7$jl4uc;0nl(C$K$d)jt3 zMCrw1n%pTf8l|!IY-|IW9+C%TcC!K5dqy%dA!+S}uCmDO#gF)R6{PE$O!S0Vb0D~I(-S=78XOA}& z{;Ia0=zp1kG49XqV*0L}(60Q*9_s&%uqOm%rTOSTWo7W5ZTOq9weUqCVFe5csEI01 z{v%fKcWX<2Tc>kFi0h2){{^UE4t{3-%oVza1^O0PE2Zhq2T2(_kq?dRm<#M8fh#ik z0`yP`afTr%Iv(u42#GxI%lHwyMOs93@&5CnBBN$S`0kX7EWjg!%cGHg^~zB2= z`ob|A&}A)jfY5Ju9~Q8PhPAAjd=UAN%Q>wThMOX2;h~!eb`-OS)KihtW-z9s0cJFC zneIoW_jk`Pj!OKCG2BhiBHGX z$I}= zIV2|fZetsaftR~V(#k;#ry=K}6`^_UkQl(O5E%@d>(m3SQ6Rl0m;hbcPOcjg_}?2K z2GRfUqhIB*6{olX`k(%BXdLuiFFXhXbrr+n76Svuz&dcM0{U}8_8<(5z7$Pr1MPD`_@TaM z3wK@OtwQNA(097^Ao!*VB5?=6=ZoM+5App{9@g=@%aK74)g~ynUj~U)LFFb0;#1zC zA~GGXV{F!`9tPkbaC8)S3_qK|y`7dpB*uj7D-`$;iDiYj31<2>I*LY143vF{a5K+< zITP*6Gmw|v2fhscqC|TSwUQ5Z|AGq)#7ya`BXkQ`qDvnkd&@Tq^NVNqVJE`vfE_#N zy(m-R#JYZBGvWL%f*-|4Db$BdTPk69b8lQO+D-uxBH#xtr5!}s2ZD}=A1NTvlZ0HQ zjCF7@ZS~m`4u+t4G{pws!L(2*oEREP3SepiX&Nd7!aAmO3_ZPx0iL=R2tmD7UdH^N zo$bPa&|3IGyE_l@5yTWsUvB@EUdDBEH|^LCQ`D7<2?W#?k56VM_aA=g*ss4nMG-yh znn5QpsUAdEk}KKM8Iiv~p(zNV*USldbZc|~y~>?CF8WBoUKkh`(HK#aXUbSFy;`jhF0y;lpiH{5aiHF-i~| z>PmmsC#a#Lja`;~3bNcBM4C6t@S_+n(K9k2y1*GYVf0}F3ZxC1fV>wd4!yl1(HTDs zcIrAam0|q%MY#eZ%sUr6C?1~9*fGt413#=dd_hH>3`NIx81sz~$~vyBQKogUpn&dc z%o(5WzI?>k*aOgQu!L@kF#;>&$tG;?Dfuw$2YbS?W%SL3LG>vTO&gkicyN74-Pe8% zh|b~>#V4t~-PnbQJlk2KYXn^}>|QaO0O+GI5@NGdqKXWFeS;sgv+Wp!-)Z|1H5A7X^%V)a5v~5^y_ITgs};sOK~L{65) z5WevqP|^P#&3XroK6j^)kpTk?b_jiWyD=HlK-B;Sx+4EA0}OTx8JS*xK>`LI4`85f z-M?jk!OkHvhwM9L@ML}1Ph*L=*TN!02L8;R@leB^XCg z9C)A{!EQ*l4Kh$8eH;aQ28Pk-ioTtmb$v3P12&ogg;94=|A({E-T#s+`skvqwcD{n zZ3w^t`u*Yhq-a=>8pg z61xz+b&rKEg-nLyg&7?Sf2_7a0y`ezC>R)RFUcQfSGYfNqDrQ3WBm-5)OxTn*4;xt z>(c!1A2Wd4%F}zT-Sg|{aXftZ!LUAHq#dtz_#}2vAr*u}YldI=iS}3$D;pSPGs}64 zC|jUcbRD+H=pwvtKZToj8W=-L5S3&?BEjUIzR^bA+Vtouc+D{I8bbsy;SxK5m~i^O zfdOG~mMM{;uR6EnwQ_U&l}ur{kMkxV8!V{1$>(ehz9{xlkF zO?d=k&uVDbEJ92=rHd`tK`sbu@Gm%{4V{uC*t3Do@Z5)wz%kx+$6K$@Vq#hZko<^n z67C>k7AQaRPluZ48my)1AYzL1vjb~IqC)==j=`mG%*#6~o1ma0?4H;kPDzFxxIv_w z5D=Mg3Z&|QAJjp`<#EGd!MF%+9AuPjo(rkOx+uK7J+EvHMMH^+;rrI|K=RQ=TW^UbPG|&pc>JpsVO!Dy&1JLnCwK z1zr0e&jg{DgTl=bp%DGOUtREHu#m>B-mHHd0>P02A#^R$%|cR`beo7Crn~MqlQo}qh%F2k~JizC1I**>bR+3ytx2{?$B|7V{8VW zl64PJ(D(}tGbItdZHQEFMk&>Q?*Vx|7$)MN?>HBU@b~N4L!z&^O^?IM_JA~%fQ7o_ z&dsdh;2dtRTsPK^0(T4oOQ8!~2jJ)eR#Z61Kx<-mLF@sPFDsyOLV=>Uvj#NC5Q|v{ zG}!&1^MtGW@BjtD<)Q=T2{9T=jnsi^IH*dymw3-F!Tq?2LX^6ATX(NL$T0P5Vr{2q z2B5VsLKIPGbvv3DFm_6E5ti zhZ-+90QWJ}o#?8_@I&li)0c4C%^JHlu--069cZCI&c=^I@pTCb2!L{Z5z$@72>$5y zOVi#{hUp`}5~4Wj0qO+MFIt(s_>Wy=$ohX7VKUN1KH26k0)@5BwEih9`8a#n^ktlE z=yiB63~ufa=<|_KnS2#Djvm|tPYM`pt?u@xnnx!k!d#Vv()_R;7|rlmV)`&huL2g%R`67v%`7PiO< z9bQnMj2_7iI|1Fs1DY$YOf9FFR$nv@oG})H3-x&3-)tb$7Z0-)NZ0*H_5SYpwSMGC zX6{HOyQzB(7(207`^cdKawQ&eB-l|jaO+R!oY@Qfz`2$JWwe}_F$xEdJw&_Dae(|u z4J7(9TJGa~-^L>V8ow^n-;0NhVGYO%#z0q3Uw3BLemz(^S%w$9N*%ly`Ytq2i~w#l zQ;?3qeNjaR zFxElN)IiTb*nx>@j5#2N(dT1w2w>!79Dp7qGUT#>ZGW@q+#f_JTAK!x{ZCjS3(Xo& z7c*i2!}XX<5k!Q)=mY<`~eTeYE)qX3od>3AqED5&)Ed| zF}nBXQslXKJJ4VTjNGWvB4@II)#Df4+nfOp>+8`MO_mTBa{%gMRq_7kyy(th1&&0e z!u@Bx5;9spQ1A(P`4Mu&f8dm;9!(5b0K+aZa_z}?j0Mx0ywT1Qa7Myf1zL?{7_x$8 zZow?GZkxX8iwj6p0p5Y`v{`D(4hqu%+o>$5CI&!onn}OLgxnI=z|8)H7k#f#JYpX| z9K51nMt`wRS+IbF=2}KxVWG}5J|8T#2F61JByUJL4FQa)D(h4H{#hoaE*;18amx3I z;!H%RA+9Wf)Ax{{4?l1p1j4lg6xis61Hh;!sF>R5S>t7&yFh*cC=s>M7jHZeJt>eW z#DQC$Uf3141W=VC{QCPy_~3wGmKmDdzl37TKMkOMbcbvt1vhD?%*#rgG{z2DY6AgK z=7TrlKwwrm{LWuE3~s0=SV850G9R)TH)*EKOG(Tfo(1Zzh98B$YKOl~OTdGmr^_hr zE`$>VZ-H9iUg&<48QHBkDMNbf?tNqHr}W+5zj~S+EXxv7`1)`7woSwbLZ2?C3Ctg{ zXKK%{-anJ};Gj$O^BgcydObarQy%oe19Z_r_XA#%*yo?v^0-b2EVVLodcMFQt}DRs zbihNgqW0lrA4v?0Jbf8%p51ZbiX?rk?EN^gkPN{LYxyeS*2y4~Ea(tTMHL6|Vhu9n zVrK5MyhyLjdwyA^jO_nS2qnN>Y4B;WG(zS8Gcw)86p8)ZXL@3SQPUTv8`z!7PoU0* zYJleXjE^9lPa9HzZiw2C30^?W2Yys(s6qoZor%1E8D;!MM*j~UrXl24WZYgrE(hjfE^?>FF{9!dw_+>V8mvzI$WPaG`cP9WpYQrA8Y{ zCx}=j0Q290d9;9-auY92I?;V3Bib-vi;!)Eg(jhutFL(Ph#!h?oZ8z!*~my Rf^(ea5WNU{xPcCV@IP>?U~B*Y literal 0 HcmV?d00001 From 00b2a560d3d8f6fd9918b09e14b884f165bb78f4 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Mon, 27 Jul 2020 00:14:45 +0100 Subject: [PATCH 048/188] Separated out the login, logout, and server switch listeners --- .../olivermartin/multichat/bungee/Events.java | 256 +----------------- .../multichat/bungee/MultiChat.java | 8 + .../bungee/commands/GlobalCommand.java | 5 +- .../bungee/commands/LocalCommand.java | 5 +- .../multichat/bungee/commands/MsgCommand.java | 5 +- .../proxy/common/ProxyDataStore.java | 19 ++ .../common/listeners/ProxyLoginListener.java | 177 ++++++++++++ .../common/listeners/ProxyLogoutListener.java | 107 ++++++++ .../listeners/ProxyServerSwitchListener.java | 30 ++ 9 files changed, 353 insertions(+), 259 deletions(-) create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLoginListener.java create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLogoutListener.java create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyServerSwitchListener.java 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 64718968..a2f9b66b 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Events.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Events.java @@ -2,31 +2,18 @@ import java.util.ArrayList; import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Optional; -import java.util.Set; import java.util.UUID; -import java.util.concurrent.TimeUnit; -import com.olivermartin410.plugins.TChatInfo; import com.olivermartin410.plugins.TGroupChatInfo; -import de.myzelyam.api.vanish.BungeeVanishAPI; -import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.ProxyServer; -import net.md_5.bungee.api.chat.ComponentBuilder; -import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.event.ChatEvent; -import net.md_5.bungee.api.event.PlayerDisconnectEvent; -import net.md_5.bungee.api.event.PostLoginEvent; -import net.md_5.bungee.api.event.ServerSwitchEvent; import net.md_5.bungee.api.plugin.Listener; -import net.md_5.bungee.config.Configuration; import net.md_5.bungee.event.EventHandler; -import net.md_5.bungee.event.EventPriority; import xyz.olivermartin.multichat.bungee.commands.GCCommand; import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; @@ -47,13 +34,11 @@ public class Events implements Listener { public static List mcbPlayers = new ArrayList(); - private static List MCToggle = new ArrayList(); - private static List ACToggle = new ArrayList(); - private static List GCToggle = new ArrayList(); + public static List MCToggle = new ArrayList(); + public static List ACToggle = new ArrayList(); + public static List GCToggle = new ArrayList(); public static Map PMToggle = new HashMap(); - public static Set hiddenStaff = new HashSet(); - public static boolean toggleMC(UUID uuid) { if (MCToggle.contains(uuid)) { @@ -415,8 +400,8 @@ public void onChat(ChatEvent event) { // Message passes through to spigot here - if (hiddenStaff.contains(player.getUniqueId())) { - hiddenStaff.remove(player.getUniqueId()); + if (ds.getHiddenStaff().contains(player.getUniqueId())) { + ds.getHiddenStaff().remove(player.getUniqueId()); } } else { @@ -429,235 +414,4 @@ public void onChat(ChatEvent event) { //TODO? } } - @EventHandler(priority = EventPriority.HIGHEST) - public void onLogin(PostLoginEvent event) { - - ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); - ChannelManager channelManager = MultiChatProxy.getInstance().getChannelManager(); - - ProxiedPlayer player = event.getPlayer(); - UUID uuid = player.getUniqueId(); - boolean firstJoin = false; - - if (player.hasPermission("multichat.staff.mod")) { - - if (!ds.getModChatPreferences().containsKey(uuid)) { - - TChatInfo chatinfo = new TChatInfo(); - chatinfo.setChatColor(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("modchat.ccdefault").toCharArray()[0]); - chatinfo.setNameColor(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("modchat.ncdefault").toCharArray()[0]); - ds.getModChatPreferences().put(uuid, chatinfo); - - } - } - - if (player.hasPermission("multichat.staff.admin")) { - - if (!ds.getAdminChatPreferences().containsKey(uuid)) { - - TChatInfo chatinfo = new TChatInfo(); - chatinfo.setChatColor(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("adminchat.ccdefault").toCharArray()[0]); - chatinfo.setNameColor(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("adminchat.ncdefault").toCharArray()[0]); - ds.getAdminChatPreferences().put(uuid, chatinfo); - - } - } - - PlayerMetaManager.getInstance().registerPlayer(uuid, event.getPlayer().getName()); - - if (!ds.getViewedChats().containsKey(uuid)) { - - ds.getViewedChats().put(uuid, null); - ConsoleManager.log("Registered player " + player.getName()); - - } - - String defaultChannel = MultiChatProxy.getInstance().getContextManager().getGlobalContext().getDefaultChannel(); - boolean forceChannel = MultiChatProxy.getInstance().getContextManager().getGlobalContext().isForceChannel(); - - if (!ChatModeManager.getInstance().existsPlayer(uuid)) { - - boolean globalMode; - - if (!defaultChannel.equalsIgnoreCase("local")) { - globalMode = true; - } else { - globalMode = false; - } - ChatModeManager.getInstance().registerPlayer(uuid, globalMode); - firstJoin = true; - //ConsoleManager.log("Created new global chat entry for " + player.getName()); - - } - - if (forceChannel) { - - boolean globalMode; - if (!defaultChannel.equalsIgnoreCase("local")) { - globalMode = true; - } else { - globalMode = false; - } - ChatModeManager.getInstance().registerPlayer(uuid, globalMode); - - } - - // Set player to appropriate channels - if (ChatModeManager.getInstance().isGlobal(uuid)) { - channelManager.select(uuid, "global"); - } else { - channelManager.select(uuid, "local"); - } - - //BungeeComm.sendPlayerChannelMessage(player.getName(), Channel.getChannel(player.getUniqueId()).getName(), Channel.getChannel(player.getUniqueId()), player.getServer().getInfo()); - - if (UUIDNameManager.existsUUID(uuid)) { - UUIDNameManager.removeUUID(uuid); - } - - UUIDNameManager.addNew(uuid, player.getName()); - - ConsoleManager.log("Refreshed UUID-Name lookup: " + uuid.toString()); - - if ( ConfigManager.getInstance().getHandler("joinmessages.yml").getConfig().getBoolean("showjoin") == true ) { - - // PremiumVanish support, return as early as possible to avoid loading unnecessary resources - if (MultiChat.premiumVanish && MultiChat.hideVanishedStaffInJoin && BungeeVanishAPI.isInvisible(player)) { - return; - } - - String joinformat = ConfigManager.getInstance().getHandler("joinmessages.yml").getConfig().getString("serverjoin"); - String silentformat = ConfigManager.getInstance().getHandler("joinmessages.yml").getConfig().getString("silentjoin"); - String welcomeMessage = ConfigManager.getInstance().getHandler("joinmessages.yml").getConfig().getString("welcome_message"); - String privateWelcomeMessage = ConfigManager.getInstance().getHandler("joinmessages.yml").getConfig().getString("private_welcome_message"); - - ChatManipulation chatman = new ChatManipulation(); - - joinformat = chatman.replaceJoinMsgVars(joinformat, player.getName()); - silentformat = chatman.replaceJoinMsgVars(silentformat, player.getName()); - welcomeMessage = chatman.replaceJoinMsgVars(welcomeMessage, player.getName()); - privateWelcomeMessage = chatman.replaceJoinMsgVars(privateWelcomeMessage, player.getName()); - - boolean broadcastWelcome = true; - if (ConfigManager.getInstance().getHandler("joinmessages.yml").getConfig().contains("welcome")) { - broadcastWelcome = ConfigManager.getInstance().getHandler("joinmessages.yml").getConfig().getBoolean("welcome"); - } - - boolean privateWelcome = false; - if (ConfigManager.getInstance().getHandler("joinmessages.yml").getConfig().contains("private_welcome")) { - privateWelcome = ConfigManager.getInstance().getHandler("joinmessages.yml").getConfig().getBoolean("private_welcome"); - } - - boolean broadcastJoin = !player.hasPermission("multichat.staff.silentjoin"); - for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { - - if (broadcastJoin) { - - if (firstJoin && broadcastWelcome) { - onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', welcomeMessage))); - } - - if (firstJoin && privateWelcome && onlineplayer.getName().equals(player.getName())) { - onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', privateWelcomeMessage))); - } - - onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', joinformat))); - - } else { - - hiddenStaff.add(player.getUniqueId()); - - if (onlineplayer.hasPermission("multichat.staff.silentjoin") ) { - onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', silentformat))); - } - - } - } - } - } - - @EventHandler(priority = EventPriority.LOWEST) - public void onLogout(PlayerDisconnectEvent event) { - - ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); - - ProxiedPlayer player = event.getPlayer(); - UUID uuid = event.getPlayer().getUniqueId(); - - if (hiddenStaff.contains(uuid)) { - hiddenStaff.remove(uuid); - } - - if (mcbPlayers.contains(uuid)) { - mcbPlayers.remove(uuid); - } - - if (MCToggle.contains(uuid)) { - MCToggle.remove(uuid); - } - if (ACToggle.contains(uuid)) { - ACToggle.remove(uuid); - } - if (GCToggle.contains(uuid)) { - GCToggle.remove(uuid); - } - - Configuration config = ConfigManager.getInstance().getHandler("chatcontrol.yml").getConfig(); - - if (config.getBoolean("session_ignore")) { - ChatControl.unignoreAll(uuid); - } - - // Reset their spam data on logout (nothing is stored persistantly) - ChatControl.spamPardonPlayer(uuid); - - if (ds.getViewedChats().containsKey(uuid)) { - ds.getViewedChats().remove(uuid); - } - - PlayerMetaManager.getInstance().unregisterPlayer(uuid); - - ConsoleManager.log("Un-Registered player " + player.getName()); - - if ( ConfigManager.getInstance().getHandler("joinmessages.yml").getConfig().getBoolean("showquit") == true ) { - - String joinformat = ConfigManager.getInstance().getHandler("joinmessages.yml").getConfig().getString("networkquit"); - String silentformat = ConfigManager.getInstance().getHandler("joinmessages.yml").getConfig().getString("silentquit"); - - ChatManipulation chatman = new ChatManipulation(); - - joinformat = chatman.replaceJoinMsgVars(joinformat, player.getName()); - silentformat = chatman.replaceJoinMsgVars(silentformat, player.getName()); - - for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { - - if (!player.hasPermission("multichat.staff.silentjoin")) { - - onlineplayer.sendMessage(new ComponentBuilder(ChatColor.translateAlternateColorCodes('&', joinformat)).create()); - - } else { - - if (onlineplayer.hasPermission("multichat.staff.silentjoin") ) { - onlineplayer.sendMessage(new ComponentBuilder(ChatColor.translateAlternateColorCodes('&', silentformat)).create()); - } - } - } - } - } - - - @EventHandler(priority = EventPriority.LOWEST) - public void onServerSwitch(ServerSwitchEvent event) { - // Tell the new server the player's channel preference - ProxyServer.getInstance().getScheduler().schedule(MultiChatProxy.getInstance().getPlugin(), new Runnable() { - - public void run() { - ProxyLocalCommunicationManager.sendPlayerDataMessage(event.getPlayer().getName(), MultiChatProxy.getInstance().getChannelManager().getChannel(event.getPlayer()), event.getPlayer().getServer().getInfo(), (event.getPlayer().hasPermission("multichat.chat.colour")||event.getPlayer().hasPermission("multichat.chat.color")||event.getPlayer().hasPermission("multichat.chat.colour.simple")||event.getPlayer().hasPermission("multichat.chat.color.simple")), (event.getPlayer().hasPermission("multichat.chat.colour")||event.getPlayer().hasPermission("multichat.chat.color")||event.getPlayer().hasPermission("multichat.chat.colour.rgb")||event.getPlayer().hasPermission("multichat.chat.color.rgb"))); - ProxyLocalCommunicationManager.sendLegacyServerData(event.getPlayer().getServer().getInfo()); - } - - }, 500L, TimeUnit.MILLISECONDS); - - } - } 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 74c81048..89511475 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java @@ -25,6 +25,9 @@ import xyz.olivermartin.multichat.proxy.common.channels.proxy.GlobalStaticProxyChannel; import xyz.olivermartin.multichat.proxy.common.contexts.ContextManager; import xyz.olivermartin.multichat.proxy.common.contexts.GlobalContext; +import xyz.olivermartin.multichat.proxy.common.listeners.ProxyLoginListener; +import xyz.olivermartin.multichat.proxy.common.listeners.ProxyLogoutListener; +import xyz.olivermartin.multichat.proxy.common.listeners.ProxyServerSwitchListener; import xyz.olivermartin.multichat.proxy.common.listeners.communication.ProxyPlayerActionListener; import xyz.olivermartin.multichat.proxy.common.listeners.communication.ProxyPlayerChatListener; import xyz.olivermartin.multichat.proxy.common.listeners.communication.ProxyPlayerMetaListener; @@ -282,6 +285,11 @@ public void onEnable() { getProxy().getPluginManager().registerListener(this, new Events()); getProxy().getPluginManager().registerListener(this, this); + // New listeners (1.10+) + getProxy().getPluginManager().registerListener(this, new ProxyLoginListener()); + getProxy().getPluginManager().registerListener(this, new ProxyLogoutListener()); + getProxy().getPluginManager().registerListener(this, new ProxyServerSwitchListener()); + // Communication Channels getProxy().registerChannel(CommChannels.PLAYER_META); // pmeta getProxy().registerChannel(CommChannels.PLAYER_CHAT); // pchat diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java index 6fed9a65..b2235a1e 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java @@ -9,7 +9,6 @@ import xyz.olivermartin.multichat.bungee.ChatModeManager; import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.DebugManager; -import xyz.olivermartin.multichat.bungee.Events; import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; @@ -97,8 +96,8 @@ public void execute(CommandSender sender, String[] args) { // Send message directly to global chat... ProxyLocalCommunicationManager.sendPlayerDirectChatMessage("global", sender.getName(), message, ((ProxiedPlayer)sender).getServer().getInfo()); - if (Events.hiddenStaff.contains(player.getUniqueId())) { - Events.hiddenStaff.remove(player.getUniqueId()); + if (MultiChatProxy.getInstance().getDataStore().getHiddenStaff().contains(player.getUniqueId())) { + MultiChatProxy.getInstance().getDataStore().getHiddenStaff().remove(player.getUniqueId()); } } else { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java index 51bd9bf3..557de67c 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java @@ -9,7 +9,6 @@ import xyz.olivermartin.multichat.bungee.ChatModeManager; import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.DebugManager; -import xyz.olivermartin.multichat.bungee.Events; import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; @@ -92,8 +91,8 @@ public void execute(CommandSender sender, String[] args) { // Send message directly to local chat... ProxyLocalCommunicationManager.sendPlayerDirectChatMessage("local", sender.getName(), message, ((ProxiedPlayer)sender).getServer().getInfo()); - if (Events.hiddenStaff.contains(player.getUniqueId())) { - Events.hiddenStaff.remove(player.getUniqueId()); + if (MultiChatProxy.getInstance().getDataStore().getHiddenStaff().contains(player.getUniqueId())) { + MultiChatProxy.getInstance().getDataStore().getHiddenStaff().remove(player.getUniqueId()); } } else { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MsgCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MsgCommand.java index 697be498..b880dfd6 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MsgCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MsgCommand.java @@ -16,8 +16,9 @@ import xyz.olivermartin.multichat.bungee.Events; import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.bungee.MultiChat; -import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.bungee.PrivateMessageManager; +import xyz.olivermartin.multichat.common.MultiChatUtil; +import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; /** @@ -247,7 +248,7 @@ public Iterable onTabComplete(CommandSender sender, String[] args) { if ( player.getName().toLowerCase().startsWith( search ) ) { - if (!Events.hiddenStaff.contains(player.getUniqueId())) { + if (!MultiChatProxy.getInstance().getDataStore().getHiddenStaff().contains(player.getUniqueId())) { if (MultiChat.premiumVanish) { if (!BungeeVanishAPI.isInvisible(player)) { matches.add(player.getName()); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyDataStore.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyDataStore.java index 4d4889ff..e8520c15 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyDataStore.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyDataStore.java @@ -2,8 +2,10 @@ import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.UUID; import com.olivermartin410.plugins.TChatInfo; @@ -43,6 +45,9 @@ public class ProxyDataStore { // Who has social spy on? private List socialSpy = new ArrayList(); + // Which staff are hidden? + private Set hiddenStaff = new HashSet(); + public synchronized boolean isChatFrozen() { return this.chatFrozen; } @@ -149,4 +154,18 @@ public void setSocialSpy(List socialSpy) { this.socialSpy = socialSpy; } + /** + * @return the hiddenStaff + */ + public Set getHiddenStaff() { + return hiddenStaff; + } + + /** + * @param hiddenStaff the hiddenStaff to set + */ + public void setHiddenStaff(Set hiddenStaff) { + this.hiddenStaff = hiddenStaff; + } + } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLoginListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLoginListener.java new file mode 100644 index 00000000..1d4b343b --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLoginListener.java @@ -0,0 +1,177 @@ +package xyz.olivermartin.multichat.proxy.common.listeners; + +import java.util.UUID; + +import com.olivermartin410.plugins.TChatInfo; + +import de.myzelyam.api.vanish.BungeeVanishAPI; +import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.ProxyServer; +import net.md_5.bungee.api.chat.TextComponent; +import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.md_5.bungee.api.event.PostLoginEvent; +import net.md_5.bungee.api.plugin.Listener; +import net.md_5.bungee.event.EventHandler; +import net.md_5.bungee.event.EventPriority; +import xyz.olivermartin.multichat.bungee.ChatManipulation; +import xyz.olivermartin.multichat.bungee.ChatModeManager; +import xyz.olivermartin.multichat.bungee.ConfigManager; +import xyz.olivermartin.multichat.bungee.ConsoleManager; +import xyz.olivermartin.multichat.bungee.MultiChat; +import xyz.olivermartin.multichat.bungee.PlayerMetaManager; +import xyz.olivermartin.multichat.bungee.UUIDNameManager; +import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; +import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; + +public class ProxyLoginListener implements Listener { + + @EventHandler(priority = EventPriority.HIGHEST) + public void onLogin(PostLoginEvent event) { + + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + ChannelManager channelManager = MultiChatProxy.getInstance().getChannelManager(); + + ProxiedPlayer player = event.getPlayer(); + UUID uuid = player.getUniqueId(); + + // Set up modchat info + if (player.hasPermission("multichat.staff.mod")) { + + if (!ds.getModChatPreferences().containsKey(uuid)) { + + TChatInfo chatinfo = new TChatInfo(); + chatinfo.setChatColor(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("modchat.ccdefault").toCharArray()[0]); + chatinfo.setNameColor(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("modchat.ncdefault").toCharArray()[0]); + ds.getModChatPreferences().put(uuid, chatinfo); + + } + } + + // Set up adminchat info + if (player.hasPermission("multichat.staff.admin")) { + + if (!ds.getAdminChatPreferences().containsKey(uuid)) { + + TChatInfo chatinfo = new TChatInfo(); + chatinfo.setChatColor(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("adminchat.ccdefault").toCharArray()[0]); + chatinfo.setNameColor(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("adminchat.ncdefault").toCharArray()[0]); + ds.getAdminChatPreferences().put(uuid, chatinfo); + + } + } + + // Register player in volatile meta manager + PlayerMetaManager.getInstance().registerPlayer(uuid, event.getPlayer().getName()); + + // Set up groupchat info + if (!ds.getViewedChats().containsKey(uuid)) { + + ds.getViewedChats().put(uuid, null); + ConsoleManager.log("Registered player " + player.getName()); + + } + + String defaultChannel = MultiChatProxy.getInstance().getContextManager().getGlobalContext().getDefaultChannel(); + boolean forceChannel = MultiChatProxy.getInstance().getContextManager().getGlobalContext().isForceChannel(); + boolean firstJoin = false; + + // Set up chat info + if (!ChatModeManager.getInstance().existsPlayer(uuid)) { + + boolean globalMode; + + if (!defaultChannel.equalsIgnoreCase("local")) { + globalMode = true; + } else { + globalMode = false; + } + ChatModeManager.getInstance().registerPlayer(uuid, globalMode); + firstJoin = true; + + } + + // If we are forcing the channels, then force it + if (forceChannel) { + + boolean globalMode; + if (!defaultChannel.equalsIgnoreCase("local")) { + globalMode = true; + } else { + globalMode = false; + } + ChatModeManager.getInstance().registerPlayer(uuid, globalMode); + + } + + // Set player to appropriate channels in NEW CHANNELS system + if (ChatModeManager.getInstance().isGlobal(uuid)) { + channelManager.select(uuid, "global"); + } else { + channelManager.select(uuid, "local"); + } + + // Remove any old UUID - Name pairings + if (UUIDNameManager.existsUUID(uuid)) { + UUIDNameManager.removeUUID(uuid); + } + + // Register updated entry in UUID - Name map + UUIDNameManager.addNew(uuid, player.getName()); + ConsoleManager.log("Refreshed UUID-Name lookup: " + uuid.toString()); + + // If MultiChat is handling join messages... + if ( ConfigManager.getInstance().getHandler("joinmessages.yml").getConfig().getBoolean("showjoin") == true ) { + + // PremiumVanish support, return as early as possible to avoid loading unnecessary resources + if (MultiChat.premiumVanish && MultiChat.hideVanishedStaffInJoin && BungeeVanishAPI.isInvisible(player)) { + return; + } + + // Load join message formats from config + String joinformat = ConfigManager.getInstance().getHandler("joinmessages.yml").getConfig().getString("serverjoin"); + String silentformat = ConfigManager.getInstance().getHandler("joinmessages.yml").getConfig().getString("silentjoin"); + String welcomeMessage = ConfigManager.getInstance().getHandler("joinmessages.yml").getConfig().getString("welcome_message"); + String privateWelcomeMessage = ConfigManager.getInstance().getHandler("joinmessages.yml").getConfig().getString("private_welcome_message"); + + // Replace the placeholders + ChatManipulation chatman = new ChatManipulation(); // TODO Legacy + joinformat = chatman.replaceJoinMsgVars(joinformat, player.getName()); + silentformat = chatman.replaceJoinMsgVars(silentformat, player.getName()); + welcomeMessage = chatman.replaceJoinMsgVars(welcomeMessage, player.getName()); + privateWelcomeMessage = chatman.replaceJoinMsgVars(privateWelcomeMessage, player.getName()); + + // Check which messages should be broadcast + boolean broadcastWelcome = ConfigManager.getInstance().getHandler("joinmessages.yml").getConfig().getBoolean("welcome", true); + boolean privateWelcome = ConfigManager.getInstance().getHandler("joinmessages.yml").getConfig().getBoolean("private_welcome", false); + boolean broadcastJoin = !player.hasPermission("multichat.staff.silentjoin"); + + // Broadcast + for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { + + if (broadcastJoin) { + + if (firstJoin && broadcastWelcome) { + onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', welcomeMessage))); + } + + if (firstJoin && privateWelcome && onlineplayer.getName().equals(player.getName())) { + onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', privateWelcomeMessage))); + } + + onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', joinformat))); + + } else { + + ds.getHiddenStaff().add(player.getUniqueId()); + + if (onlineplayer.hasPermission("multichat.staff.silentjoin") ) { + onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', silentformat))); + } + + } + } + } + } + +} diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLogoutListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLogoutListener.java new file mode 100644 index 00000000..f5b48476 --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLogoutListener.java @@ -0,0 +1,107 @@ +package xyz.olivermartin.multichat.proxy.common.listeners; + +import java.util.UUID; + +import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.ProxyServer; +import net.md_5.bungee.api.chat.ComponentBuilder; +import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.md_5.bungee.api.event.PlayerDisconnectEvent; +import net.md_5.bungee.api.plugin.Listener; +import net.md_5.bungee.config.Configuration; +import net.md_5.bungee.event.EventHandler; +import net.md_5.bungee.event.EventPriority; +import xyz.olivermartin.multichat.bungee.ChatControl; +import xyz.olivermartin.multichat.bungee.ChatManipulation; +import xyz.olivermartin.multichat.bungee.ConfigManager; +import xyz.olivermartin.multichat.bungee.ConsoleManager; +import xyz.olivermartin.multichat.bungee.Events; +import xyz.olivermartin.multichat.bungee.PlayerMetaManager; +import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; + +public class ProxyLogoutListener implements Listener { + + @EventHandler(priority = EventPriority.LOWEST) + public void onLogout(PlayerDisconnectEvent event) { + + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + ProxiedPlayer player = event.getPlayer(); + UUID uuid = event.getPlayer().getUniqueId(); + + /* + * Remove volatile entries + */ + + if (ds.getHiddenStaff().contains(uuid)) { + ds.getHiddenStaff().remove(uuid); + } + + if (Events.mcbPlayers.contains(uuid)) { + Events.mcbPlayers.remove(uuid); + } + + if (Events.MCToggle.contains(uuid)) { + Events.MCToggle.remove(uuid); + } + if (Events.ACToggle.contains(uuid)) { + Events.ACToggle.remove(uuid); + } + if (Events.GCToggle.contains(uuid)) { + Events.GCToggle.remove(uuid); + } + + Configuration config = ConfigManager.getInstance().getHandler("chatcontrol.yml").getConfig(); + + // If using sessional ignore, then wipe ignores stored + if (config.getBoolean("session_ignore")) { + ChatControl.unignoreAll(uuid); + } + + // Reset their spam data on logout (nothing is stored persistently) + ChatControl.spamPardonPlayer(uuid); + + // Remove viewed group chat preferences + if (ds.getViewedChats().containsKey(uuid)) { + ds.getViewedChats().remove(uuid); + } + + // Unregister player from volatile meta store + PlayerMetaManager.getInstance().unregisterPlayer(uuid); + + ConsoleManager.log("Un-Registered player " + player.getName()); + + // If we are handling the quit messages, then handle them... + if ( ConfigManager.getInstance().getHandler("joinmessages.yml").getConfig().getBoolean("showquit") == true ) { + + // Get the formats + String joinformat = ConfigManager.getInstance().getHandler("joinmessages.yml").getConfig().getString("networkquit"); + String silentformat = ConfigManager.getInstance().getHandler("joinmessages.yml").getConfig().getString("silentquit"); + + // Replace the placeholders + ChatManipulation chatman = new ChatManipulation(); + joinformat = chatman.replaceJoinMsgVars(joinformat, player.getName()); + silentformat = chatman.replaceJoinMsgVars(silentformat, player.getName()); + + // Broadcast + for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { + + if (!player.hasPermission("multichat.staff.silentjoin")) { + + onlineplayer.sendMessage(new ComponentBuilder(ChatColor.translateAlternateColorCodes('&', joinformat)).create()); + + } else { + + if (onlineplayer.hasPermission("multichat.staff.silentjoin") ) { + onlineplayer.sendMessage(new ComponentBuilder(ChatColor.translateAlternateColorCodes('&', silentformat)).create()); + } + + } + + } + + } + + } + +} diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyServerSwitchListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyServerSwitchListener.java new file mode 100644 index 00000000..117dcd00 --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyServerSwitchListener.java @@ -0,0 +1,30 @@ +package xyz.olivermartin.multichat.proxy.common.listeners; + +import java.util.concurrent.TimeUnit; + +import net.md_5.bungee.api.ProxyServer; +import net.md_5.bungee.api.event.ServerSwitchEvent; +import net.md_5.bungee.api.plugin.Listener; +import net.md_5.bungee.event.EventHandler; +import net.md_5.bungee.event.EventPriority; +import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; + +public class ProxyServerSwitchListener implements Listener { + + @EventHandler(priority = EventPriority.LOWEST) + public void onServerSwitch(ServerSwitchEvent event) { + + // Tell the new server the player's channel preference & if it is a legacy server + ProxyServer.getInstance().getScheduler().schedule(MultiChatProxy.getInstance().getPlugin(), new Runnable() { + + public void run() { + ProxyLocalCommunicationManager.sendPlayerDataMessage(event.getPlayer().getName(), MultiChatProxy.getInstance().getChannelManager().getChannel(event.getPlayer()), event.getPlayer().getServer().getInfo(), (event.getPlayer().hasPermission("multichat.chat.colour")||event.getPlayer().hasPermission("multichat.chat.color")||event.getPlayer().hasPermission("multichat.chat.colour.simple")||event.getPlayer().hasPermission("multichat.chat.color.simple")), (event.getPlayer().hasPermission("multichat.chat.colour")||event.getPlayer().hasPermission("multichat.chat.color")||event.getPlayer().hasPermission("multichat.chat.colour.rgb")||event.getPlayer().hasPermission("multichat.chat.color.rgb"))); + ProxyLocalCommunicationManager.sendLegacyServerData(event.getPlayer().getServer().getInfo()); + } + + }, 500L, TimeUnit.MILLISECONDS); + + } + +} From 5cdc2c85aa019694a9881a82ab2eb8003dd5c78a Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Mon, 27 Jul 2020 11:53:02 +0100 Subject: [PATCH 049/188] Fixed broadcast raw message formatting in channels --- .../multichat/proxy/common/channels/local/LocalChannel.java | 5 +++++ .../proxy/common/channels/proxy/GenericProxyChannel.java | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/local/LocalChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/local/LocalChannel.java index c3764843..eff9da2f 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/local/LocalChannel.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/local/LocalChannel.java @@ -4,6 +4,8 @@ import java.util.Set; import java.util.UUID; +import org.bukkit.ChatColor; + import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.chat.TextComponent; @@ -87,6 +89,9 @@ public void sendMessage(ProxiedPlayer sender, String message) { public void broadcastRawMessage(CommandSender sender, String server, String message) { + message = MultiChatUtil.reformatRGB(message); + message = ChatColor.translateAlternateColorCodes('&', message); + for (ProxiedPlayer receiver : ProxyServer.getInstance().getPlayers()) { // Skip sending to this player if they shouldn't receive the message diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/GenericProxyChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/GenericProxyChannel.java index 1cba5d15..e7379020 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/GenericProxyChannel.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/GenericProxyChannel.java @@ -3,6 +3,8 @@ import java.util.Set; import java.util.UUID; +import org.bukkit.ChatColor; + import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.chat.TextComponent; @@ -105,6 +107,9 @@ public void broadcastRawMessage(CommandSender sender, String message) { // If the sender can't speak then return if (!canSpeak(sender)) return; + message = MultiChatUtil.reformatRGB(message); + message = ChatColor.translateAlternateColorCodes('&', message); + for (ProxiedPlayer receiver : ProxyServer.getInstance().getPlayers()) { // Skip sending to this player if they shouldn't receive the message From 80642db3822f41f46c367537a2d8b9ab8cfbc1c0 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Mon, 27 Jul 2020 11:55:30 +0100 Subject: [PATCH 050/188] Fixed wrong ChatColor class --- .../proxy/common/channels/proxy/GenericProxyChannel.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/GenericProxyChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/GenericProxyChannel.java index e7379020..4b5e5a32 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/GenericProxyChannel.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/GenericProxyChannel.java @@ -3,8 +3,7 @@ import java.util.Set; import java.util.UUID; -import org.bukkit.ChatColor; - +import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.chat.TextComponent; From b27256ce57c50bee51dd6984be16d1271c9aad79 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Mon, 27 Jul 2020 11:55:54 +0100 Subject: [PATCH 051/188] Fixed another wrong ChatColor class --- .../multichat/proxy/common/channels/local/LocalChannel.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/local/LocalChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/local/LocalChannel.java index eff9da2f..e114d93e 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/local/LocalChannel.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/local/LocalChannel.java @@ -4,8 +4,7 @@ import java.util.Set; import java.util.UUID; -import org.bukkit.ChatColor; - +import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.chat.TextComponent; From 30e031b277802f3a1a7646afed11a61f227bcdbd Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Mon, 27 Jul 2020 12:48:27 +0100 Subject: [PATCH 052/188] First steps towards using a slightly different system for config manag --- .../olivermartin/multichat/bungee/Events.java | 7 +- .../multichat/bungee/GroupManager.java | 5 +- .../multichat/bungee/MultiChat.java | 11 +- .../multichat/bungee/PlayerMetaManager.java | 11 +- .../bungee/PrivateMessageManager.java | 19 +- .../multichat/bungee/StaffChatManager.java | 13 +- .../bungee/commands/ClearChatCommand.java | 3 +- .../bungee/commands/DisplayCommand.java | 3 +- .../multichat/bungee/commands/GCCommand.java | 3 +- .../bungee/commands/GlobalCommand.java | 7 +- .../bungee/commands/LocalCommand.java | 3 +- .../multichat/bungee/commands/MsgCommand.java | 17 +- .../bungee/commands/ReplyCommand.java | 9 +- .../bungee/commands/StaffListCommand.java | 3 +- .../proxy/common/config/ConfigValues.java | 230 ++++++++++++++++++ 15 files changed, 294 insertions(+), 50 deletions(-) create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/config/ConfigValues.java 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 a2f9b66b..93d72627 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Events.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Events.java @@ -22,6 +22,7 @@ import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; import xyz.olivermartin.multichat.proxy.common.channels.ChannelMode; import xyz.olivermartin.multichat.proxy.common.channels.proxy.ProxyChannel; +import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; /** * Events Manager @@ -151,7 +152,7 @@ public void onChat(ChatEvent event) { } /// - if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean("fetch_spigot_display_names") == true) { + if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean(ConfigValues.Config.FETCH_SPIGOT_DISPLAY_NAMES) == true) { if (player.getServer() != null) { ProxyLocalCommunicationManager.sendUpdatePlayerMetaRequestMessage(player.getName(), player.getServer().getInfo()); } @@ -260,9 +261,9 @@ public void onChat(ChatEvent event) { ProxyLocalCommunicationManager.sendUpdatePlayerMetaRequestMessage(player.getName(), player.getServer().getInfo()); ProxyLocalCommunicationManager.sendUpdatePlayerMetaRequestMessage(target.getName(), target.getServer().getInfo()); - if (!ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList("no_pm").contains(player.getServer().getInfo().getName())) { + if (!ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList(ConfigValues.Config.NO_PM).contains(player.getServer().getInfo().getName())) { - if (!ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList("no_pm").contains(target.getServer().getInfo().getName())) { + if (!ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList(ConfigValues.Config.NO_PM).contains(target.getServer().getInfo().getName())) { if (ChatControl.ignores(player.getUniqueId(), target.getUniqueId(), "private_messages")) { ChatControl.sendIgnoreNotifications(target, player, "private_messages"); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/GroupManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/GroupManager.java index c9ea8aee..4f8d0286 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/GroupManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/GroupManager.java @@ -9,6 +9,7 @@ import xyz.olivermartin.multichat.bungee.commands.GCCommand; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; +import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; /** * Group Chat Management Class @@ -32,8 +33,8 @@ public void createGroup(String groupname, UUID owneruuid, boolean secret, String newgroup.addViewer(owneruuid); newgroup.addAdmin(owneruuid); newgroup.setName(groupname.toLowerCase()); - newgroup.setChatColor(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("groupchat.ccdefault").toCharArray()[0]); - newgroup.setNameColor(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("groupchat.ncdefault").toCharArray()[0]); + newgroup.setChatColor(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString(ConfigValues.Config.GroupChat.CC_DEFAULT).toCharArray()[0]); + newgroup.setNameColor(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString(ConfigValues.Config.GroupChat.NC_DEFAULT).toCharArray()[0]); newgroup.setSecret(secret); newgroup.setPassword(password); newgroup.setFormal(false); 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 89511475..32b668e0 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java @@ -23,6 +23,7 @@ import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; import xyz.olivermartin.multichat.proxy.common.channels.local.LocalChannel; import xyz.olivermartin.multichat.proxy.common.channels.proxy.GlobalStaticProxyChannel; +import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; import xyz.olivermartin.multichat.proxy.common.contexts.ContextManager; import xyz.olivermartin.multichat.proxy.common.contexts.GlobalContext; import xyz.olivermartin.multichat.proxy.common.listeners.ProxyLoginListener; @@ -114,7 +115,7 @@ public void fetchDisplayNames() { public void run() { - if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean("fetch_spigot_display_names") == true) { + if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean(ConfigValues.Config.FETCH_SPIGOT_DISPLAY_NAMES) == true) { for (ProxiedPlayer player : ProxyServer.getInstance().getPlayers()) { if (player.getServer() != null) { @@ -152,7 +153,7 @@ public void run() { try { - if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean("fetch_spigot_display_names") == true) { + if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean(ConfigValues.Config.FETCH_SPIGOT_DISPLAY_NAMES) == true) { ProxiedPlayer player = getProxy().getPlayer(playername); if (player.getServer() != null) { @@ -172,7 +173,7 @@ public void run() { try { - if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean("fetch_spigot_display_names") == true) { + if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean(ConfigValues.Config.FETCH_SPIGOT_DISPLAY_NAMES) == true) { ProxiedPlayer player = getProxy().getPlayer(playername); if (player.getServer() != null) { @@ -193,7 +194,7 @@ public void run() { try { - if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean("fetch_spigot_display_names") == true) { + if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean(ConfigValues.Config.FETCH_SPIGOT_DISPLAY_NAMES) == true) { ProxiedPlayer player = getProxy().getPlayer(playername); if (player.getServer() != null) { @@ -214,7 +215,7 @@ public void run() { try { - if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean("fetch_spigot_display_names") == true) { + if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean(ConfigValues.Config.FETCH_SPIGOT_DISPLAY_NAMES) == true) { ProxiedPlayer player = getProxy().getPlayer(playername); if (player.getServer() != null) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PlayerMetaManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PlayerMetaManager.java index d21ca316..fec84047 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PlayerMetaManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PlayerMetaManager.java @@ -7,6 +7,7 @@ import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.connection.ProxiedPlayer; +import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; public class PlayerMetaManager { @@ -53,17 +54,17 @@ public void updateDisplayName(UUID uuid) { ProxiedPlayer player = ProxyServer.getInstance().getPlayer(uuid); - if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean("fetch_spigot_display_names") == true && player != null) { + if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean(ConfigValues.Config.FETCH_SPIGOT_DISPLAY_NAMES) == true && player != null) { DebugManager.log("[PlayerMetaManager] Fetch Spigot Display Names is true"); - if (ConfigManager.getInstance().getHandler("config.yml").getConfig().contains("set_display_name")) { + if (ConfigManager.getInstance().getHandler("config.yml").getConfig().contains(ConfigValues.Config.SET_DISPLAY_NAME)) { - if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean("set_display_name")) { + if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean(ConfigValues.Config.SET_DISPLAY_NAME)) { DebugManager.log("[PlayerMetaManager] MultiChat is in charge of display names"); - if (ConfigManager.getInstance().getHandler("config.yml").getConfig().contains("display_name_format")) { + if (ConfigManager.getInstance().getHandler("config.yml").getConfig().contains(ConfigValues.Config.DISPLAY_NAME_FORMAT)) { //player.setDisplayName(opm.get().getDisplayName(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("display_name_format"))); DebugManager.log("[PlayerMetaManager] Set as: " + opm.get().getSpigotDisplayname()); @@ -88,7 +89,7 @@ public void updateDisplayName(UUID uuid) { } else { - if (ConfigManager.getInstance().getHandler("config.yml").getConfig().contains("display_name_format")) { + if (ConfigManager.getInstance().getHandler("config.yml").getConfig().contains(ConfigValues.Config.DISPLAY_NAME_FORMAT)) { //player.setDisplayName(opm.get().getDisplayName(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("display_name_format"))); // TODO Maybe new option for "fetch_spigot_displayname"? diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PrivateMessageManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PrivateMessageManager.java index 434ba78e..68a6a986 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PrivateMessageManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PrivateMessageManager.java @@ -10,6 +10,7 @@ import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; +import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; public class PrivateMessageManager { @@ -37,9 +38,9 @@ public void sendMessage(String message, ProxiedPlayer sender, ProxiedPlayer targ message = MultiChatUtil.reformatRGB(message); - String messageoutformat = ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("pmout"); - String messageinformat = ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("pmin"); - String messagespyformat = ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("pmspy"); + String messageoutformat = ConfigManager.getInstance().getHandler("config.yml").getConfig().getString(ConfigValues.Config.PM_OUT_FORMAT); + String messageinformat = ConfigManager.getInstance().getHandler("config.yml").getConfig().getString(ConfigValues.Config.PM_IN_FORMAT); + String messagespyformat = ConfigManager.getInstance().getHandler("config.yml").getConfig().getString(ConfigValues.Config.PM_SPY_FORMAT); String finalmessage = chatfix.replaceMsgVars(messageoutformat, message, sender, target); if (MultiChat.legacyServers.contains(sender.getServer().getInfo().getName())) { @@ -97,9 +98,9 @@ public void sendMessageConsoleTarget(String message, ProxiedPlayer sender) { message = MultiChatUtil.reformatRGB(message); - String messageoutformat = ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("pmout"); - String messageinformat = ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("pmin"); - String messagespyformat = ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("pmspy"); + String messageoutformat = ConfigManager.getInstance().getHandler("config.yml").getConfig().getString(ConfigValues.Config.PM_OUT_FORMAT); + String messageinformat = ConfigManager.getInstance().getHandler("config.yml").getConfig().getString(ConfigValues.Config.PM_IN_FORMAT); + String messagespyformat = ConfigManager.getInstance().getHandler("config.yml").getConfig().getString(ConfigValues.Config.PM_SPY_FORMAT); String finalmessage = chatfix.replaceMsgConsoleTargetVars(messageoutformat, message, (ProxiedPlayer)sender); if (MultiChat.legacyServers.contains(sender.getServer().getInfo().getName())) { @@ -150,9 +151,9 @@ public void sendMessageConsoleSender(String message, ProxiedPlayer target) { CommandSender sender = ProxyServer.getInstance().getConsole(); - String messageoutformat = ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("pmout"); - String messageinformat = ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("pmin"); - String messagespyformat = ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("pmspy"); + String messageoutformat = ConfigManager.getInstance().getHandler("config.yml").getConfig().getString(ConfigValues.Config.PM_OUT_FORMAT); + String messageinformat = ConfigManager.getInstance().getHandler("config.yml").getConfig().getString(ConfigValues.Config.PM_IN_FORMAT); + String messagespyformat = ConfigManager.getInstance().getHandler("config.yml").getConfig().getString(ConfigValues.Config.PM_SPY_FORMAT); String finalmessage = chatfix.replaceMsgConsoleSenderVars(messageoutformat, message, target); sender.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', finalmessage))); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/StaffChatManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/StaffChatManager.java index c54f1915..3301f80e 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/StaffChatManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/StaffChatManager.java @@ -12,6 +12,7 @@ import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; +import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; /** * Staff Chat Manager @@ -28,7 +29,7 @@ public void sendModMessage(String username, String displayname, String server, S message = MultiChatUtil.reformatRGB(message); ChatManipulation chatfix = new ChatManipulation(); - String messageFormat = ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("modchat.format"); + String messageFormat = ConfigManager.getInstance().getHandler("config.yml").getConfig().getString(ConfigValues.Config.ModChat.FORMAT); String original = message; Optional crm; @@ -48,8 +49,8 @@ public void sendModMessage(String username, String displayname, String server, S if (!ds.getModChatPreferences().containsKey(onlineplayer.getUniqueId())) { TChatInfo chatinfo = new TChatInfo(); - chatinfo.setChatColor(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("modchat.ccdefault").toCharArray()[0]); - chatinfo.setNameColor(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("modchat.ncdefault").toCharArray()[0]); + chatinfo.setChatColor(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString(ConfigValues.Config.ModChat.CC_DEFAULT).toCharArray()[0]); + chatinfo.setNameColor(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString(ConfigValues.Config.ModChat.NC_DEFAULT).toCharArray()[0]); ds.getModChatPreferences().put(onlineplayer.getUniqueId(), chatinfo); @@ -86,7 +87,7 @@ public void sendAdminMessage(String username, String displayname, String server, String original = message; ChatManipulation chatfix = new ChatManipulation(); - String messageFormat = ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("adminchat.format"); + String messageFormat = ConfigManager.getInstance().getHandler("config.yml").getConfig().getString(ConfigValues.Config.AdminChat.FORMAT); Optional crm; @@ -105,8 +106,8 @@ public void sendAdminMessage(String username, String displayname, String server, if (!ds.getAdminChatPreferences().containsKey(onlineplayer.getUniqueId())) { TChatInfo chatinfo = new TChatInfo(); - chatinfo.setChatColor(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("adminchat.ccdefault").toCharArray()[0]); - chatinfo.setNameColor(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("adminchat.ncdefault").toCharArray()[0]); + chatinfo.setChatColor(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString(ConfigValues.Config.AdminChat.CC_DEFAULT).toCharArray()[0]); + chatinfo.setNameColor(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString(ConfigValues.Config.AdminChat.NC_DEFAULT).toCharArray()[0]); ds.getAdminChatPreferences().put(onlineplayer.getUniqueId(), chatinfo); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ClearChatCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ClearChatCommand.java index e495d9fb..fb73fc17 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ClearChatCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ClearChatCommand.java @@ -7,6 +7,7 @@ import net.md_5.bungee.api.plugin.Command; import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.MessageManager; +import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; /** * Clear Chat Command @@ -46,7 +47,7 @@ private void clearChatServer(CommandSender sender) { private void clearChatGlobal() { for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { - if (!ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList("no_global").contains(onlineplayer.getServer().getInfo().getName()) ) { + if (!ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList(ConfigValues.Config.NO_GLOBAL).contains(onlineplayer.getServer().getInfo().getName()) ) { for (int i = 1 ; i<151 ; i++ ) { onlineplayer.sendMessage(new ComponentBuilder("").create()); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/DisplayCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/DisplayCommand.java index 73f26b2f..5045c3aa 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/DisplayCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/DisplayCommand.java @@ -13,6 +13,7 @@ import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.bungee.MultiChat; import xyz.olivermartin.multichat.common.MultiChatUtil; +import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; import xyz.olivermartin.multichat.bungee.events.PostBroadcastEvent; /** @@ -51,7 +52,7 @@ public static void displayMessage(String message) { for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { if (onlineplayer.getServer() != null) { - if (!config.getStringList("no_global").contains( + if (!config.getStringList(ConfigValues.Config.NO_GLOBAL).contains( onlineplayer.getServer().getInfo().getName())) { if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { onlineplayer.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(ChatColor.translateAlternateColorCodes('&', message)))); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GCCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GCCommand.java index 2efaca19..715d8ddb 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GCCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GCCommand.java @@ -20,6 +20,7 @@ import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; +import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; /** * Group Chat Messaging Command @@ -123,7 +124,7 @@ public static void sendMessage(String message, String playerName, TGroupChatInfo return; } - String messageFormat = ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("groupchat.format"); + String messageFormat = ConfigManager.getInstance().getHandler("config.yml").getConfig().getString(ConfigValues.Config.GroupChat.FORMAT); message = chatfix.replaceGroupChatVars(messageFormat, playerName, message, groupInfo.getName()); for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java index b2235a1e..ecdc811c 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java @@ -14,6 +14,7 @@ import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; +import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; /** * Global Command @@ -46,11 +47,11 @@ public void execute(CommandSender sender, String[] args) { ProxiedPlayer player = (ProxiedPlayer)sender; String message = MultiChatUtil.getMessageFromArgs(args); - if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean("global") == true) { + if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean(ConfigValues.Config.GLOBAL) == true) { - if (!ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList("no_global").contains(player.getServer().getInfo().getName())) { + if (!ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList(ConfigValues.Config.NO_GLOBAL).contains(player.getServer().getInfo().getName())) { - if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean("fetch_spigot_display_names") == true) { + if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean(ConfigValues.Config.FETCH_SPIGOT_DISPLAY_NAMES) == true) { ProxyLocalCommunicationManager.sendUpdatePlayerMetaRequestMessage(player.getName(), player.getServer().getInfo()); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java index 557de67c..bbfe5fb0 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java @@ -14,6 +14,7 @@ import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; +import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; /** * Local Chat Command @@ -46,7 +47,7 @@ public void execute(CommandSender sender, String[] args) { String message = MultiChatUtil.getMessageFromArgs(args); ProxiedPlayer player = (ProxiedPlayer)sender; - if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean("fetch_spigot_display_names") == true) { + if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean(ConfigValues.Config.FETCH_SPIGOT_DISPLAY_NAMES) == true) { ProxyLocalCommunicationManager.sendUpdatePlayerMetaRequestMessage(player.getName(), player.getServer().getInfo()); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MsgCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MsgCommand.java index b880dfd6..2569d333 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MsgCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MsgCommand.java @@ -20,6 +20,7 @@ import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; +import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; /** * Message Command @@ -74,7 +75,7 @@ public void execute(CommandSender sender, String[] args) { Configuration config = ConfigManager.getInstance().getHandler("config.yml").getConfig(); - if (config.contains("toggle_pm") ? config.getBoolean("toggle_pm") == false : false) { + if (config.contains(ConfigValues.Config.TOGGLE_PM) ? config.getBoolean(ConfigValues.Config.TOGGLE_PM) == false : false) { toggleresult = Events.togglePM(player.getUniqueId(), target.getUniqueId()); MessageManager.sendMessage(sender, "command_msg_no_toggle"); @@ -148,16 +149,16 @@ public void execute(CommandSender sender, String[] args) { if (permittedToMessage) { - if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean("fetch_spigot_display_names") == true) { + if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean(ConfigValues.Config.FETCH_SPIGOT_DISPLAY_NAMES) == true) { ProxyLocalCommunicationManager.sendUpdatePlayerMetaRequestMessage(sender.getName(), ((ProxiedPlayer)sender).getServer().getInfo()); ProxyLocalCommunicationManager.sendUpdatePlayerMetaRequestMessage(target.getName(), target.getServer().getInfo()); } - if (!ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList("no_pm").contains(((ProxiedPlayer)sender).getServer().getInfo().getName())) { + if (!ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList(ConfigValues.Config.NO_PM).contains(((ProxiedPlayer)sender).getServer().getInfo().getName())) { - if (!ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList("no_pm").contains(target.getServer().getInfo().getName())) { + if (!ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList(ConfigValues.Config.NO_PM).contains(target.getServer().getInfo().getName())) { if (ChatControl.ignores(((ProxiedPlayer)sender).getUniqueId(), target.getUniqueId(), "private_messages")) { ChatControl.sendIgnoreNotifications(target, sender, "private_messages"); @@ -183,13 +184,13 @@ public void execute(CommandSender sender, String[] args) { // New console target stuff here! - if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean("fetch_spigot_display_names") == true) { + if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean(ConfigValues.Config.FETCH_SPIGOT_DISPLAY_NAMES) == true) { ProxyLocalCommunicationManager.sendUpdatePlayerMetaRequestMessage(sender.getName(), ((ProxiedPlayer)sender).getServer().getInfo()); } - if (!ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList("no_pm").contains(((ProxiedPlayer)sender).getServer().getInfo().getName())) { + if (!ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList(ConfigValues.Config.NO_PM).contains(((ProxiedPlayer)sender).getServer().getInfo().getName())) { PrivateMessageManager.getInstance().sendMessageConsoleTarget(message, (ProxiedPlayer)sender); @@ -213,13 +214,13 @@ public void execute(CommandSender sender, String[] args) { ProxiedPlayer target = ProxyServer.getInstance().getPlayer(args[0]); - if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean("fetch_spigot_display_names") == true) { + if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean(ConfigValues.Config.FETCH_SPIGOT_DISPLAY_NAMES) == true) { ProxyLocalCommunicationManager.sendUpdatePlayerMetaRequestMessage(target.getName(), target.getServer().getInfo()); } - if (!ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList("no_pm").contains(target.getServer().getInfo().getName())) { + if (!ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList(ConfigValues.Config.NO_PM).contains(target.getServer().getInfo().getName())) { PrivateMessageManager.getInstance().sendMessageConsoleSender(message, target); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ReplyCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ReplyCommand.java index 4f654fca..b3428181 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ReplyCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ReplyCommand.java @@ -14,6 +14,7 @@ import xyz.olivermartin.multichat.bungee.PrivateMessageManager; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; +import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; /** * Reply Command @@ -66,9 +67,9 @@ public void execute(CommandSender sender, String[] args) { ProxiedPlayer target = ProxyServer.getInstance().getPlayer((UUID)ds.getLastMsg().get(((ProxiedPlayer)sender).getUniqueId())); - if (!ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList("no_pm").contains(((ProxiedPlayer)sender).getServer().getInfo().getName())) { + if (!ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList(ConfigValues.Config.NO_PM).contains(((ProxiedPlayer)sender).getServer().getInfo().getName())) { - if (!ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList("no_pm").contains(target.getServer().getInfo().getName())) { + if (!ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList(ConfigValues.Config.NO_PM).contains(target.getServer().getInfo().getName())) { if (ChatControl.ignores(((ProxiedPlayer)sender).getUniqueId(), target.getUniqueId(), "private_messages")) { ChatControl.sendIgnoreNotifications(target, sender, "private_messages"); @@ -89,7 +90,7 @@ public void execute(CommandSender sender, String[] args) { // Console target stuff - if (!ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList("no_pm").contains(((ProxiedPlayer)sender).getServer().getInfo().getName())) { + if (!ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList(ConfigValues.Config.NO_PM).contains(((ProxiedPlayer)sender).getServer().getInfo().getName())) { PrivateMessageManager.getInstance().sendMessageConsoleTarget(message, (ProxiedPlayer)sender); @@ -119,7 +120,7 @@ public void execute(CommandSender sender, String[] args) { ProxiedPlayer target = ProxyServer.getInstance().getPlayer((UUID)ds.getLastMsg().get((new UUID(0L,0L)))); - if (!ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList("no_pm").contains(target.getServer().getInfo().getName())) { + if (!ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList(ConfigValues.Config.NO_PM).contains(target.getServer().getInfo().getName())) { PrivateMessageManager.getInstance().sendMessageConsoleSender(message, target); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/StaffListCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/StaffListCommand.java index b975b09c..e1387505 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/StaffListCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/StaffListCommand.java @@ -12,6 +12,7 @@ import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.bungee.MultiChat; import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; +import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; /** * Staff List Command @@ -72,7 +73,7 @@ public void execute(CommandSender sender, String[] args) { if (onlineplayer2.getServer().getInfo().getName().equals(server)) { - if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean("fetch_spigot_display_names") == true) { + if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean(ConfigValues.Config.FETCH_SPIGOT_DISPLAY_NAMES) == true) { ProxyLocalCommunicationManager.sendUpdatePlayerMetaRequestMessage(onlineplayer2.getName(), onlineplayer2.getServer().getInfo()); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/config/ConfigValues.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/config/ConfigValues.java new file mode 100644 index 00000000..7f9c7607 --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/config/ConfigValues.java @@ -0,0 +1,230 @@ +package xyz.olivermartin.multichat.proxy.common.config; + +public class ConfigValues { + + public static interface Config { + + // Version + + /** + * STRING :: Version of config file + */ + String VERSION = "version"; + + // General + + /** + * BOOL :: Should display names be fetched from spigot + */ + String FETCH_SPIGOT_DISPLAY_NAMES = "fetch_spigot_display_names"; + + /** + * BOOL :: Should MultiChat set display names + */ + String SET_DISPLAY_NAME = "set_display_name"; + + /** + * STRING :: The format MultiChat should use to set display names + */ + String DISPLAY_NAME_FORMAT = "display_name_format"; + + // Private Messaging + + /** + * BOOL :: Should private messaging be enabled + */ + String PM = "pm"; + + /** + * STRING LIST :: List of servers that are excluded from PMs + */ + String NO_PM = "no_pm"; + + /** + * BOOL :: Can players toggle pms with /msg playername? + */ + String TOGGLE_PM = "toggle_pm"; + + /** + * STRING :: Format used for outgoing PMs + */ + String PM_OUT_FORMAT = "pmout"; + + /** + * STRING :: Format used for incoming PMs + */ + String PM_IN_FORMAT = "pmin"; + + /** + * STRING :: Format used for social spy PMs + */ + String PM_SPY_FORMAT = "pmspy"; + + // Chat Channels + + /** + * STRING :: Default channel (local or global) + */ + String DEFAULT_CHANNEL = "default_channel"; + + /** + * BOOL :: Should the default channel be enforced every time a player joins? + */ + String FORCE_CHANNEL_ON_JOIN = "force_channel_on_join"; + + // Global Chat + + /** + * BOOL :: Should global chat be enabled? + */ + String GLOBAL = "global"; + + /** + * STRING LIST :: List of servers to be excluded from global chat + */ + String NO_GLOBAL = "no_global"; + + /** + * STRING :: Format for global chat + */ + String GLOBAL_FORMAT = "globalformat"; + + // Group Chats + + public static interface GroupChat { + + /** + * The prefix for this section of the config file + */ + String PREFIX = "groupchat."; + + /** + * STRING :: Format for group chats + */ + String FORMAT = PREFIX + "format"; + + /** + * STRING :: Default chat colour + */ + String CC_DEFAULT = PREFIX + "ccdefault"; + + /** + * STRING :: Default name colour + */ + String NC_DEFAULT = PREFIX + "ncdefault"; + + } + + // Staff Chats + + public static interface ModChat { + + /** + * The prefix for this section of the config file + */ + String PREFIX = "modchat."; + + /** + * STRING :: Format for mod chat + */ + String FORMAT = PREFIX + "format"; + + /** + * STRING :: Default chat colour + */ + String CC_DEFAULT = PREFIX + "ccdefault"; + + /** + * STRING :: Default name colour + */ + String NC_DEFAULT = PREFIX + "ncdefault"; + + } + + public static interface AdminChat { + + /** + * The prefix for this section of the config file + */ + String PREFIX = "adminchat."; + + /** + * STRING :: Format for admin chat + */ + String FORMAT = PREFIX + "format"; + + /** + * STRING :: Default chat colour + */ + String CC_DEFAULT = PREFIX + "ccdefault"; + + /** + * STRING :: Default name colour + */ + String NC_DEFAULT = PREFIX + "ncdefault"; + + } + + // Other Settings + + /** + * BOOL :: Should staff list be enabled? + */ + String STAFF_LIST = "staff_list"; + + public static interface PrivacySettings { + + /** + * The prefix for this section of the config file + */ + String PREFIX = "privacy_settings."; + + /** + * BOOL :: Should PMs be logged? + */ + String LOG_PMS = PREFIX + "log_pms"; + + /** + * BOOL :: Should staff chat be logged? + */ + String LOG_STAFFCHAT = PREFIX + "log_staffchat"; + + /** + * BOOL :: Should group chat be logged? + */ + String LOG_GROUPCHAT = PREFIX + "log_groupchat"; + + } + + public static interface PremiumVanish { + + /** + * The prefix for this section of the config file + */ + String PREFIX = "premium_vanish."; + + /** + * BOOL :: Should PMs to vanished staff be prevented? + */ + String PREVENT_MESSAGE = PREFIX + "prevent_message"; + + /** + * BOOL :: Should vanished staff be hidden from staff list? + */ + String PREVENT_STAFF_LIST = PREFIX + "prevent_staff_list"; + + /** + * BOOL :: Should join messages be hidden for vanished staff? + */ + String SILENCE_JOIN = PREFIX + "silence_join"; + + } + + /** + * STRING LIST :: List of pre 1.16 servers for RGB code approximation + */ + String LEGACY_SERVERS = "legacy_servers"; + + } + +} From a04526d6dbd5f6302ff6be4583c60928c40be4fb Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Mon, 27 Jul 2020 13:43:05 +0100 Subject: [PATCH 053/188] Attempted to implement the ability to use more channels than local/glob --- .../multichat/bungee/ChatModeManager.java | 4 +-- .../olivermartin/multichat/bungee/Events.java | 21 +++++++++++- .../multichat/bungee/MultiChat.java | 5 +++ .../bungee/commands/ChannelCommand.java | 32 +++++++++++++++++-- .../bungee/commands/GlobalCommand.java | 22 ++++++++++++- .../bungee/commands/LocalCommand.java | 22 ++++++++++++- .../local/common/LocalChatManager.java | 9 ++++-- .../LocalPlayerDataListener.java | 3 ++ .../local/common/storage/LocalDataStore.java | 19 +++++++++++ .../ProxyLocalCommunicationManager.java | 3 +- .../proxy/common/channels/ChannelManager.java | 9 ++++++ .../channels/proxy/ProxyChannelInfo.java | 14 ++++++-- .../proxy/StaffChatStaticProxyChannel.java | 11 +++++++ .../listeners/ProxyServerSwitchListener.java | 24 +++++++++++++- .../ProxyPlayerChatListener.java | 14 +++++++- 15 files changed, 197 insertions(+), 15 deletions(-) create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/StaffChatStaticProxyChannel.java diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatModeManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatModeManager.java index 60fec1b0..7284ddab 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatModeManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatModeManager.java @@ -57,7 +57,7 @@ public void setLocal(UUID uuid) { // TODO //ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), LegacyChannel.getChannel(uuid).getName(), LegacyChannel.getChannel(uuid), player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); - ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), "local", player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); + ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), "local", channelManager.getLocalChannel().getFormat(), player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); } @@ -86,7 +86,7 @@ public void setGlobal(UUID uuid) { MessageManager.sendSpecialMessage(player, "command_channel_show", "GLOBAL"); } - ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), "global", player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); + ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), "global", channelManager.getGlobalChannel().getInfo().getFormat(), player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); } 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 93d72627..da1288fc 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Events.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Events.java @@ -397,7 +397,26 @@ public void onChat(ChatEvent event) { // Let server know players channel preference - ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), channelManager.getChannel(player), player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); + String channelFormat; + + switch (channelManager.getChannel(player)) { + + case "global": + channelFormat = channelManager.getGlobalChannel().getInfo().getFormat(); + break; + case "local": + channelFormat = channelManager.getLocalChannel().getFormat(); + break; + default: + if (channelManager.existsProxyChannel(channelManager.getChannel(player))) { + channelFormat = channelManager.getProxyChannel(channelManager.getChannel(player)).get().getInfo().getFormat(); + } else { + channelFormat = channelManager.getGlobalChannel().getInfo().getFormat(); + } + break; + } + + ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), channelManager.getChannel(player), channelFormat, player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); // Message passes through to spigot here 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 32b668e0..c3f53768 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java @@ -23,6 +23,8 @@ import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; import xyz.olivermartin.multichat.proxy.common.channels.local.LocalChannel; import xyz.olivermartin.multichat.proxy.common.channels.proxy.GlobalStaticProxyChannel; +import xyz.olivermartin.multichat.proxy.common.channels.proxy.ProxyChannelInfo; +import xyz.olivermartin.multichat.proxy.common.channels.proxy.StaticProxyChannel; import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; import xyz.olivermartin.multichat.proxy.common.contexts.ContextManager; import xyz.olivermartin.multichat.proxy.common.contexts.GlobalContext; @@ -398,6 +400,9 @@ public void onEnable() { channelManager.setLocalChannel(new LocalChannel("Local Channel", configYML.getString("globalformat"), ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("local"), channelManager)); MultiChatProxy.getInstance().registerChannelManager(channelManager); + // TODO This is just a test channel + channelManager.registerProxyChannel(new StaticProxyChannel("test", new ProxyChannelInfo("A test channel", "&8[&7TEST&8] &f%DISPLAYNAME%&f: ", false, globalContext, new ArrayList(), "multichat.chat.channel.test", "multichat.chat.channel.test.view"), channelManager)); + /// // Initiate backup routine diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ChannelCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ChannelCommand.java index 9f51e22b..860ad0f5 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ChannelCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ChannelCommand.java @@ -64,7 +64,15 @@ public void execute(CommandSender sender, String[] args) { ChatModeManager.getInstance().setGlobal(((ProxiedPlayer)sender).getUniqueId()); MessageManager.sendSpecialMessage(sender, "command_channel_switch", operand.toUpperCase()); } else { - MessageManager.sendMessage(sender, "command_channel_does_not_exist"); + + if (channelManager.existsProxyChannel(operand)) { + ChatModeManager.getInstance().setGlobal(((ProxiedPlayer)sender).getUniqueId()); + channelManager.select(((ProxiedPlayer)sender).getUniqueId(), operand); + MessageManager.sendSpecialMessage(sender, "command_channel_switch", operand.toUpperCase()); + } else { + MessageManager.sendMessage(sender, "command_channel_does_not_exist"); + } + } break; @@ -139,9 +147,29 @@ public void execute(CommandSender sender, String[] args) { break; } + ProxiedPlayer player = (ProxiedPlayer) sender; + String channelFormat; + + switch (channelManager.getChannel(player)) { + + case "global": + channelFormat = channelManager.getGlobalChannel().getInfo().getFormat(); + break; + case "local": + channelFormat = channelManager.getLocalChannel().getFormat(); + break; + default: + if (channelManager.existsProxyChannel(channelManager.getChannel(player))) { + channelFormat = channelManager.getProxyChannel(channelManager.getChannel(player)).get().getInfo().getFormat(); + } else { + channelFormat = channelManager.getGlobalChannel().getInfo().getFormat(); + } + break; + } + // Update local channel info for (ProxiedPlayer p : ProxyServer.getInstance().getPlayers()) { - ProxyLocalCommunicationManager.sendPlayerDataMessage(p.getName(), channelManager.getChannel(p), p.getServer().getInfo(), (p.hasPermission("multichat.chat.colour")||p.hasPermission("multichat.chat.color")||p.hasPermission("multichat.chat.colour.simple")||p.hasPermission("multichat.chat.color.simple")), (p.hasPermission("multichat.chat.colour")||p.hasPermission("multichat.chat.color")||p.hasPermission("multichat.chat.colour.rgb")||p.hasPermission("multichat.chat.color.rgb"))); + ProxyLocalCommunicationManager.sendPlayerDataMessage(p.getName(), channelManager.getChannel(p), channelFormat, p.getServer().getInfo(), (p.hasPermission("multichat.chat.colour")||p.hasPermission("multichat.chat.color")||p.hasPermission("multichat.chat.colour.simple")||p.hasPermission("multichat.chat.color.simple")), (p.hasPermission("multichat.chat.colour")||p.hasPermission("multichat.chat.color")||p.hasPermission("multichat.chat.colour.rgb")||p.hasPermission("multichat.chat.color.rgb"))); } } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java index ecdc811c..fbae0f3f 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java @@ -90,7 +90,27 @@ public void execute(CommandSender sender, String[] args) { } // Let server know players channel preference - ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), channelManager.getChannel(player), player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); + + String channelFormat; + + switch (channelManager.getChannel(player)) { + + case "global": + channelFormat = channelManager.getGlobalChannel().getInfo().getFormat(); + break; + case "local": + channelFormat = channelManager.getLocalChannel().getFormat(); + break; + default: + if (channelManager.existsProxyChannel(channelManager.getChannel(player))) { + channelFormat = channelManager.getProxyChannel(channelManager.getChannel(player)).get().getInfo().getFormat(); + } else { + channelFormat = channelManager.getGlobalChannel().getInfo().getFormat(); + } + break; + } + + ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), channelManager.getChannel(player), channelFormat, player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); // Message passes through to spigot here diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java index bbfe5fb0..65b26a2a 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java @@ -86,7 +86,27 @@ public void execute(CommandSender sender, String[] args) { } // Let server know players channel preference - ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), channelManager.getChannel(player), player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); + + String channelFormat; + + switch (channelManager.getChannel(player)) { + + case "global": + channelFormat = channelManager.getGlobalChannel().getInfo().getFormat(); + break; + case "local": + channelFormat = channelManager.getLocalChannel().getFormat(); + break; + default: + if (channelManager.existsProxyChannel(channelManager.getChannel(player))) { + channelFormat = channelManager.getProxyChannel(channelManager.getChannel(player)).get().getInfo().getFormat(); + } else { + channelFormat = channelManager.getGlobalChannel().getInfo().getFormat(); + } + break; + } + + ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), channelManager.getChannel(player), channelFormat, player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); // Message passes through to spigot here // Send message directly to local chat... diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalChatManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalChatManager.java index 8d41e49e..571b3687 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalChatManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalChatManager.java @@ -193,8 +193,8 @@ public String getChannelFormat(String channel) { format = config.getLocalChatFormat(); break; - - default: + + case "global": // Global Chat @@ -211,6 +211,11 @@ public String getChannelFormat(String channel) { } break; + + default: + + format = MultiChatLocal.getInstance().getDataStore().getChannelFormats().getOrDefault(channel, MultiChatLocal.getInstance().getDataStore().getGlobalChatFormat()); + break; } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalPlayerDataListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalPlayerDataListener.java index e670e054..1365868a 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalPlayerDataListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalPlayerDataListener.java @@ -39,6 +39,9 @@ protected boolean handleMessage(LocalBungeeObjectMessage message) { playerChannels.put(player.getUniqueId(), channelName); } + String channelFormat = message.readUTF(); + MultiChatLocal.getInstance().getDataStore().getChannelFormats().put(channelName, channelFormat); + boolean colour = message.readBoolean(); logger.debug("Colour: " + colour); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/storage/LocalDataStore.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/storage/LocalDataStore.java index 42d990f8..dac9bfec 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/storage/LocalDataStore.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/storage/LocalDataStore.java @@ -38,6 +38,11 @@ public class LocalDataStore { */ private String globalChatFormat = "&f%DISPLAYNAME%&f: "; + /** + * Channel formats received from the proxy + */ + private Map channelFormats = new HashMap(); + /** * Chat Queues to handle the local global hack */ @@ -246,4 +251,18 @@ public synchronized void setLegacy(boolean legacy) { this.legacy = legacy; } + /** + * @return the channelFormats + */ + public Map getChannelFormats() { + return channelFormats; + } + + /** + * @param channelFormats the channelFormats to set + */ + public void setChannelFormats(Map channelFormats) { + this.channelFormats = channelFormats; + } + } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyLocalCommunicationManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyLocalCommunicationManager.java index f10805c9..c3a4f916 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyLocalCommunicationManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyLocalCommunicationManager.java @@ -276,7 +276,7 @@ public static void sendServerChatMessage(String channel, String message, ServerI } - public static void sendPlayerDataMessage(String playerName, String channel, ServerInfo server, boolean colour, boolean rgb) { + public static void sendPlayerDataMessage(String playerName, String channel, String channelFormat, ServerInfo server, boolean colour, boolean rgb) { //ChannelManager channelManager = MultiChatProxy.getInstance().getChannelManager(); @@ -291,6 +291,7 @@ public static void sendPlayerDataMessage(String playerName, String channel, Serv oout.writeUTF(playerName); // Channel part oout.writeUTF(channel); + oout.writeUTF(channelFormat); oout.writeBoolean(colour); oout.writeBoolean(rgb); //oout.writeBoolean(channelObject.isWhitelistMembers()); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelManager.java index eec1b57e..a0333ec7 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelManager.java @@ -86,6 +86,15 @@ public void setLocalChannel(LocalChannel local) { this.local = local; } + public void registerProxyChannel(ProxyChannel channel) { + proxyChannels.put(channel.getId(), channel); + } + + public void unregisterProxyChannel(String channelId) { + if (channelId.equals("global")) return; + proxyChannels.remove(channelId); + } + public boolean existsProxyChannel(String channelId) { return proxyChannels.containsKey(channelId); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/ProxyChannelInfo.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/ProxyChannelInfo.java index 86862e7f..31906752 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/ProxyChannelInfo.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/ProxyChannelInfo.java @@ -17,7 +17,7 @@ public class ProxyChannelInfo { private String permission; // Permission to view / speak private String viewPermission; // Permission to view only - public ProxyChannelInfo(String desc, String format, boolean unhideable, Context context, List aliases) { + public ProxyChannelInfo(String desc, String format, boolean unhideable, Context context, List aliases, String permission, String viewPermission) { this.desc = desc; this.format = format; @@ -25,9 +25,17 @@ public ProxyChannelInfo(String desc, String format, boolean unhideable, Context this.context = context; this.aliases = aliases; - this.permission = null; - this.viewPermission = null; + this.permission = permission; + this.viewPermission = viewPermission; + + } + + public ProxyChannelInfo(String desc, String format, boolean unhideable, Context context, List aliases, String permission) { + this(desc, format, unhideable, context, aliases, permission, permission); + } + public ProxyChannelInfo(String desc, String format, boolean unhideable, Context context, List aliases) { + this(desc, format, unhideable, context, aliases, null); } /** diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/StaffChatStaticProxyChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/StaffChatStaticProxyChannel.java new file mode 100644 index 00000000..15fe7699 --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/StaffChatStaticProxyChannel.java @@ -0,0 +1,11 @@ +package xyz.olivermartin.multichat.proxy.common.channels.proxy; + +import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; + +public class StaffChatStaticProxyChannel extends StaticProxyChannel { + + public StaffChatStaticProxyChannel(String id, ProxyChannelInfo info, ChannelManager manager) { + super(id, info, manager); + } + +} diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyServerSwitchListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyServerSwitchListener.java index 117dcd00..539963c9 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyServerSwitchListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyServerSwitchListener.java @@ -9,6 +9,7 @@ import net.md_5.bungee.event.EventPriority; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; +import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; public class ProxyServerSwitchListener implements Listener { @@ -19,7 +20,28 @@ public void onServerSwitch(ServerSwitchEvent event) { ProxyServer.getInstance().getScheduler().schedule(MultiChatProxy.getInstance().getPlugin(), new Runnable() { public void run() { - ProxyLocalCommunicationManager.sendPlayerDataMessage(event.getPlayer().getName(), MultiChatProxy.getInstance().getChannelManager().getChannel(event.getPlayer()), event.getPlayer().getServer().getInfo(), (event.getPlayer().hasPermission("multichat.chat.colour")||event.getPlayer().hasPermission("multichat.chat.color")||event.getPlayer().hasPermission("multichat.chat.colour.simple")||event.getPlayer().hasPermission("multichat.chat.color.simple")), (event.getPlayer().hasPermission("multichat.chat.colour")||event.getPlayer().hasPermission("multichat.chat.color")||event.getPlayer().hasPermission("multichat.chat.colour.rgb")||event.getPlayer().hasPermission("multichat.chat.color.rgb"))); + + ChannelManager channelManager = MultiChatProxy.getInstance().getChannelManager(); + String channelFormat; + + switch (channelManager.getChannel(event.getPlayer())) { + + case "global": + channelFormat = channelManager.getGlobalChannel().getInfo().getFormat(); + break; + case "local": + channelFormat = channelManager.getLocalChannel().getFormat(); + break; + default: + if (channelManager.existsProxyChannel(channelManager.getChannel(event.getPlayer()))) { + channelFormat = channelManager.getProxyChannel(channelManager.getChannel(event.getPlayer())).get().getInfo().getFormat(); + } else { + channelFormat = channelManager.getGlobalChannel().getInfo().getFormat(); + } + break; + } + + ProxyLocalCommunicationManager.sendPlayerDataMessage(event.getPlayer().getName(), MultiChatProxy.getInstance().getChannelManager().getChannel(event.getPlayer()), channelFormat, event.getPlayer().getServer().getInfo(), (event.getPlayer().hasPermission("multichat.chat.colour")||event.getPlayer().hasPermission("multichat.chat.color")||event.getPlayer().hasPermission("multichat.chat.colour.simple")||event.getPlayer().hasPermission("multichat.chat.color.simple")), (event.getPlayer().hasPermission("multichat.chat.colour")||event.getPlayer().hasPermission("multichat.chat.color")||event.getPlayer().hasPermission("multichat.chat.colour.rgb")||event.getPlayer().hasPermission("multichat.chat.color.rgb"))); ProxyLocalCommunicationManager.sendLegacyServerData(event.getPlayer().getServer().getInfo()); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyPlayerChatListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyPlayerChatListener.java index e89656d6..6dc2e6fe 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyPlayerChatListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyPlayerChatListener.java @@ -18,6 +18,7 @@ import xyz.olivermartin.multichat.common.communication.CommChannels; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; +import xyz.olivermartin.multichat.proxy.common.channels.proxy.ProxyChannel; /** * Listener for communication over the Player Chat communication channel @@ -104,7 +105,18 @@ public static void onPluginMessage(PluginMessageEvent event) { break; default: - DebugManager.log("{multichat:pchat} Channel: " + channel + ", is not recognised"); + + Optional opProxyChannel = channelManager.getProxyChannel(channel); + + if (opProxyChannel.isPresent()) { + + ProxyChannel proxyChannel = opProxyChannel.get(); + proxyChannel.distributeMessage(player, message, format, otherRecipients); + + } else { + DebugManager.log("{multichat:pchat} Channel: " + channel + ", is not recognised"); + } + return; } From e8d051dbcd1ca9f72d5dc8c35ee5aa7942e8edfa Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Mon, 27 Jul 2020 13:59:07 +0100 Subject: [PATCH 054/188] Prevent players switching to channels unless they have speak permission --- .../multichat/bungee/commands/ChannelCommand.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ChannelCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ChannelCommand.java index 860ad0f5..bae0b477 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ChannelCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ChannelCommand.java @@ -10,6 +10,7 @@ import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; +import xyz.olivermartin.multichat.proxy.common.channels.proxy.ProxyChannel; /** * Chat Channel Command @@ -66,6 +67,14 @@ public void execute(CommandSender sender, String[] args) { } else { if (channelManager.existsProxyChannel(operand)) { + + ProxyChannel proxyChannel = channelManager.getProxyChannel(operand).get(); + + if (!proxyChannel.getInfo().hasSpeakPermission(sender)) { + MessageManager.sendMessage(sender, "command_channel_switch_no_permission"); + return; + } + ChatModeManager.getInstance().setGlobal(((ProxiedPlayer)sender).getUniqueId()); channelManager.select(((ProxiedPlayer)sender).getUniqueId(), operand); MessageManager.sendSpecialMessage(sender, "command_channel_switch", operand.toUpperCase()); From baddf40b2a935d624ab4bb82ac1f16650ec5a0e1 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Mon, 27 Jul 2020 14:04:29 +0100 Subject: [PATCH 055/188] Remove unused class --- .../channels/proxy/StaffChatStaticProxyChannel.java | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/StaffChatStaticProxyChannel.java diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/StaffChatStaticProxyChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/StaffChatStaticProxyChannel.java deleted file mode 100644 index 15fe7699..00000000 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/StaffChatStaticProxyChannel.java +++ /dev/null @@ -1,11 +0,0 @@ -package xyz.olivermartin.multichat.proxy.common.channels.proxy; - -import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; - -public class StaffChatStaticProxyChannel extends StaticProxyChannel { - - public StaffChatStaticProxyChannel(String id, ProxyChannelInfo info, ChannelManager manager) { - super(id, info, manager); - } - -} From 91467c8009863f371ec10bbba5f211f4ff88c642 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Mon, 27 Jul 2020 18:09:20 +0100 Subject: [PATCH 056/188] Moved old fetch display name code to the new server switch listener --- .../multichat/bungee/MultiChat.java | 108 +----------------- .../listeners/ProxyServerSwitchListener.java | 12 ++ 2 files changed, 13 insertions(+), 107 deletions(-) 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 c3f53768..9a7c2f0a 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java @@ -8,12 +8,8 @@ import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.connection.ProxiedPlayer; -import net.md_5.bungee.api.event.PostLoginEvent; -import net.md_5.bungee.api.event.ServerSwitchEvent; -import net.md_5.bungee.api.plugin.Listener; import net.md_5.bungee.api.plugin.Plugin; import net.md_5.bungee.config.Configuration; -import net.md_5.bungee.event.EventHandler; import xyz.olivermartin.multichat.common.communication.CommChannels; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.MultiChatProxyPlatform; @@ -57,7 +53,7 @@ * @author Oliver Martin (Revilo410) * */ -public class MultiChat extends Plugin implements Listener { +public class MultiChat extends Plugin { public static final String LATEST_VERSION = "1.10"; @@ -133,107 +129,6 @@ public void run() { } - @EventHandler - public void onLogin(PostLoginEvent event) { - - fetchDisplayNameOnce(event.getPlayer().getName()); - - } - - @EventHandler - public void onServerSwitch(ServerSwitchEvent event) { - - fetchDisplayNameOnce(event.getPlayer().getName()); - - } - - public void fetchDisplayNameOnce(final String playername) { - - getProxy().getScheduler().schedule(this, new Runnable() { - - public void run() { - - try { - - if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean(ConfigValues.Config.FETCH_SPIGOT_DISPLAY_NAMES) == true) { - - ProxiedPlayer player = getProxy().getPlayer(playername); - if (player.getServer() != null) { - ProxyLocalCommunicationManager.sendUpdatePlayerMetaRequestMessage(player.getName(), player.getServer().getInfo()); - } - - } - } catch (NullPointerException ex) { /* EMPTY */ } - - } - - }, 0L, TimeUnit.SECONDS); - - getProxy().getScheduler().schedule(this, new Runnable() { - - public void run() { - - try { - - if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean(ConfigValues.Config.FETCH_SPIGOT_DISPLAY_NAMES) == true) { - - ProxiedPlayer player = getProxy().getPlayer(playername); - if (player.getServer() != null) { - ProxyLocalCommunicationManager.sendUpdatePlayerMetaRequestMessage(player.getName(), player.getServer().getInfo()); - } - - } - } - - catch (NullPointerException ex) { /* EMPTY */ } - } - - }, 1L, TimeUnit.SECONDS); - - getProxy().getScheduler().schedule(this, new Runnable() { - - public void run() { - - try { - - if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean(ConfigValues.Config.FETCH_SPIGOT_DISPLAY_NAMES) == true) { - - ProxiedPlayer player = getProxy().getPlayer(playername); - if (player.getServer() != null) { - ProxyLocalCommunicationManager.sendUpdatePlayerMetaRequestMessage(player.getName(), player.getServer().getInfo()); - } - - } - - } catch (NullPointerException ex) { /* EMPTY */ } - - } - - }, 2L, TimeUnit.SECONDS); - - getProxy().getScheduler().schedule(this, new Runnable() { - - public void run() { - - try { - - if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean(ConfigValues.Config.FETCH_SPIGOT_DISPLAY_NAMES) == true) { - - ProxiedPlayer player = getProxy().getPlayer(playername); - if (player.getServer() != null) { - ProxyLocalCommunicationManager.sendUpdatePlayerMetaRequestMessage(player.getName(), player.getServer().getInfo()); - } - - } - - } catch (NullPointerException ex) { /* EMPTY */ } - - } - - }, 4L, TimeUnit.SECONDS); - - } - public void onEnable() { MultiChatProxy.getInstance().registerPlugin(this); @@ -286,7 +181,6 @@ public void onEnable() { // Register listeners getProxy().getPluginManager().registerListener(this, new Events()); - getProxy().getPluginManager().registerListener(this, this); // New listeners (1.10+) getProxy().getPluginManager().registerListener(this, new ProxyLoginListener()); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyServerSwitchListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyServerSwitchListener.java index 539963c9..d5cdaa3d 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyServerSwitchListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyServerSwitchListener.java @@ -3,13 +3,16 @@ import java.util.concurrent.TimeUnit; import net.md_5.bungee.api.ProxyServer; +import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.event.ServerSwitchEvent; import net.md_5.bungee.api.plugin.Listener; import net.md_5.bungee.event.EventHandler; import net.md_5.bungee.event.EventPriority; +import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; +import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; public class ProxyServerSwitchListener implements Listener { @@ -43,6 +46,15 @@ public void run() { ProxyLocalCommunicationManager.sendPlayerDataMessage(event.getPlayer().getName(), MultiChatProxy.getInstance().getChannelManager().getChannel(event.getPlayer()), channelFormat, event.getPlayer().getServer().getInfo(), (event.getPlayer().hasPermission("multichat.chat.colour")||event.getPlayer().hasPermission("multichat.chat.color")||event.getPlayer().hasPermission("multichat.chat.colour.simple")||event.getPlayer().hasPermission("multichat.chat.color.simple")), (event.getPlayer().hasPermission("multichat.chat.colour")||event.getPlayer().hasPermission("multichat.chat.color")||event.getPlayer().hasPermission("multichat.chat.colour.rgb")||event.getPlayer().hasPermission("multichat.chat.color.rgb"))); ProxyLocalCommunicationManager.sendLegacyServerData(event.getPlayer().getServer().getInfo()); + + if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean(ConfigValues.Config.FETCH_SPIGOT_DISPLAY_NAMES) == true) { + + ProxiedPlayer player = event.getPlayer(); + if (player.getServer() != null) { + ProxyLocalCommunicationManager.sendUpdatePlayerMetaRequestMessage(player.getName(), player.getServer().getInfo()); + } + + } } }, 500L, TimeUnit.MILLISECONDS); From 69ebef97a03451fc13c51aa0b191471258be0e10 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Mon, 27 Jul 2020 18:50:34 +0100 Subject: [PATCH 057/188] Introduced ProxyChatManager --- .../olivermartin/multichat/bungee/Events.java | 112 +++++++---------- .../multichat/bungee/MultiChat.java | 4 + .../bungee/commands/GlobalCommand.java | 92 ++++++-------- .../bungee/commands/LocalCommand.java | 92 ++++++-------- .../proxy/common/MultiChatProxy.java | 9 ++ .../proxy/common/ProxyChatManager.java | 117 ++++++++++++++++++ .../channels/proxy/ProxyChannelType.java | 10 ++ 7 files changed, 254 insertions(+), 182 deletions(-) create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyChatManager.java create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/ProxyChannelType.java 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 da1288fc..60030f99 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Events.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Events.java @@ -17,6 +17,7 @@ import xyz.olivermartin.multichat.bungee.commands.GCCommand; import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.ProxyChatManager; import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; @@ -133,6 +134,7 @@ public void onChat(ChatEvent event) { ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); ChannelManager channelManager = MultiChatProxy.getInstance().getChannelManager(); + ProxyChatManager chatManager = MultiChatProxy.getInstance().getChatManager(); ProxiedPlayer player = (ProxiedPlayer) event.getSender(); // New null pointer checks @@ -344,94 +346,64 @@ public void onChat(ChatEvent event) { if ((!event.isCancelled()) && (!event.isCommand())) { - //TODO? I removed these checks... I think thats good... if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean("global") == true) { + String message = event.getMessage(); - //TODO ? if (!ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList("no_global").contains(player.getServer().getInfo().getName())) { + if (!chatManager.canPlayerSendChat(player, message)) { + event.setCancelled(true); + return; + } - /*if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean("fetch_spigot_display_names") == true) { - if (player.getServer() != null) { - BungeeComm.sendMessage(player.getName(), player.getServer().getInfo()); - } - }*/ + Optional preProcessedMessage = chatManager.preProcessMessage(player, message); - if ((!MultiChatProxy.getInstance().getDataStore().isChatFrozen()) || (player.hasPermission("multichat.chat.always"))) { + if (!preProcessedMessage.isPresent()) { + event.setCancelled(true); + return; + } - String message = event.getMessage(); + message = preProcessedMessage.get(); + event.setMessage(message); - if (ChatControl.isMuted(player.getUniqueId(), "global_chat")) { - MessageManager.sendMessage(player, "mute_cannot_send_message"); - event.setCancelled(true); - return; - } + DebugManager.log("Does player have ALL colour permission? " + chatManager.hasLegacyColourPermission(player)); + DebugManager.log("Does player have simple colour permission? " + chatManager.hasSimpleColourPermission(player)); + DebugManager.log("Does player have rgb colour permission? " + chatManager.hasRGBColourPermission(player)); - DebugManager.log(player.getName() + "- about to check for spam"); + // Let server know players channel preference - if (ChatControl.handleSpam(player, message, "global_chat")) { - DebugManager.log(player.getName() + " - chat message being cancelled due to spam"); - event.setCancelled(true); - return; - } + String channelFormat; - Optional crm; - - crm = ChatControl.applyChatRules(message, "global_chat", player.getName()); + switch (channelManager.getChannel(player)) { - if (crm.isPresent()) { - message = crm.get(); - event.setMessage(message); + case "global": + channelFormat = channelManager.getGlobalChannel().getInfo().getFormat(); + break; + case "local": + channelFormat = channelManager.getLocalChannel().getFormat(); + break; + default: + if (channelManager.existsProxyChannel(channelManager.getChannel(player))) { + channelFormat = channelManager.getProxyChannel(channelManager.getChannel(player)).get().getInfo().getFormat(); } else { - event.setCancelled(true); - return; - } - - if (!player.hasPermission("multichat.chat.link")) { - message = ChatControl.replaceLinks(message); - event.setMessage(message); - } - - DebugManager.log("Does player have ALL colour permission? " + (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color"))); - - DebugManager.log("Does player have simple colour permission? " + (player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple"))); - - DebugManager.log("Does player have rgb colour permission? " + (player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); - - // Let server know players channel preference - - String channelFormat; - - switch (channelManager.getChannel(player)) { - - case "global": channelFormat = channelManager.getGlobalChannel().getInfo().getFormat(); - break; - case "local": - channelFormat = channelManager.getLocalChannel().getFormat(); - break; - default: - if (channelManager.existsProxyChannel(channelManager.getChannel(player))) { - channelFormat = channelManager.getProxyChannel(channelManager.getChannel(player)).get().getInfo().getFormat(); - } else { - channelFormat = channelManager.getGlobalChannel().getInfo().getFormat(); - } - break; } + break; + } - ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), channelManager.getChannel(player), channelFormat, player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); - - // Message passes through to spigot here + ProxyLocalCommunicationManager.sendPlayerDataMessage( + player.getName(), + channelManager.getChannel(player), + channelFormat, + player.getServer().getInfo(), + chatManager.hasSimpleColourPermission(player), + chatManager.hasRGBColourPermission(player)); - if (ds.getHiddenStaff().contains(player.getUniqueId())) { - ds.getHiddenStaff().remove(player.getUniqueId()); - } + // Message passes through to spigot here - } else { - MessageManager.sendMessage(player, "freezechat_frozen"); - event.setCancelled(true); + if (ds.getHiddenStaff().contains(player.getUniqueId())) { + ds.getHiddenStaff().remove(player.getUniqueId()); } } - //TODO ?} - //TODO? } + } } 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 9a7c2f0a..43fa276a 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java @@ -14,6 +14,7 @@ import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.MultiChatProxyPlatform; import xyz.olivermartin.multichat.proxy.common.ProxyBackupManager; +import xyz.olivermartin.multichat.proxy.common.ProxyChatManager; import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; @@ -297,6 +298,9 @@ public void onEnable() { // TODO This is just a test channel channelManager.registerProxyChannel(new StaticProxyChannel("test", new ProxyChannelInfo("A test channel", "&8[&7TEST&8] &f%DISPLAYNAME%&f: ", false, globalContext, new ArrayList(), "multichat.chat.channel.test", "multichat.chat.channel.test.view"), channelManager)); + ProxyChatManager chatManager = new ProxyChatManager(); + MultiChatProxy.getInstance().registerChatManager(chatManager); + /// // Initiate backup routine diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java index fbae0f3f..c783245c 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java @@ -5,13 +5,12 @@ import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.plugin.Command; -import xyz.olivermartin.multichat.bungee.ChatControl; import xyz.olivermartin.multichat.bungee.ChatModeManager; import xyz.olivermartin.multichat.bungee.ConfigManager; -import xyz.olivermartin.multichat.bungee.DebugManager; import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.ProxyChatManager; import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; @@ -32,6 +31,7 @@ public GlobalCommand() { public void execute(CommandSender sender, String[] args) { ChannelManager channelManager = MultiChatProxy.getInstance().getChannelManager(); + ProxyChatManager chatManager = MultiChatProxy.getInstance().getChatManager(); if ((sender instanceof ProxiedPlayer)) { @@ -55,74 +55,54 @@ public void execute(CommandSender sender, String[] args) { ProxyLocalCommunicationManager.sendUpdatePlayerMetaRequestMessage(player.getName(), player.getServer().getInfo()); } - if ((!MultiChatProxy.getInstance().getDataStore().isChatFrozen()) || (player.hasPermission("multichat.chat.always"))) { - - if (ChatControl.isMuted(player.getUniqueId(), "global_chat")) { - MessageManager.sendMessage(player, "mute_cannot_send_message"); - return; - } - - DebugManager.log(player.getName() + "- about to check for spam"); + if (!chatManager.canPlayerSendChat(player, message)) { + return; + } - if (ChatControl.handleSpam(player, message, "global_chat")) { - DebugManager.log(player.getName() + " - chat message being cancelled due to spam"); - return; - } + Optional preProcessedMessage = chatManager.preProcessMessage(player, message); - Optional crm; + if (!preProcessedMessage.isPresent()) { + return; + } - crm = ChatControl.applyChatRules(message, "global_chat", player.getName()); + message = preProcessedMessage.get(); - if (crm.isPresent()) { - message = crm.get(); - } else { - return; - } - - if (!player.hasPermission("multichat.chat.link")) { - message = ChatControl.replaceLinks(message); - } + // If they had this channel hidden, then unhide it... + if (channelManager.isHidden(player.getUniqueId(), "global")) { + channelManager.show(player.getUniqueId(), "global"); + MessageManager.sendSpecialMessage(player, "command_channel_show", "GLOBAL"); + } - // If they had this channel hidden, then unhide it... - if (channelManager.isHidden(player.getUniqueId(), "global")) { - channelManager.show(player.getUniqueId(), "global"); - MessageManager.sendSpecialMessage(player, "command_channel_show", "GLOBAL"); - } + // Let server know players channel preference - // Let server know players channel preference - - String channelFormat; + String channelFormat; - switch (channelManager.getChannel(player)) { + switch (channelManager.getChannel(player)) { - case "global": + case "global": + channelFormat = channelManager.getGlobalChannel().getInfo().getFormat(); + break; + case "local": + channelFormat = channelManager.getLocalChannel().getFormat(); + break; + default: + if (channelManager.existsProxyChannel(channelManager.getChannel(player))) { + channelFormat = channelManager.getProxyChannel(channelManager.getChannel(player)).get().getInfo().getFormat(); + } else { channelFormat = channelManager.getGlobalChannel().getInfo().getFormat(); - break; - case "local": - channelFormat = channelManager.getLocalChannel().getFormat(); - break; - default: - if (channelManager.existsProxyChannel(channelManager.getChannel(player))) { - channelFormat = channelManager.getProxyChannel(channelManager.getChannel(player)).get().getInfo().getFormat(); - } else { - channelFormat = channelManager.getGlobalChannel().getInfo().getFormat(); - } - break; } - - ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), channelManager.getChannel(player), channelFormat, player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); + break; + } - // Message passes through to spigot here + ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), channelManager.getChannel(player), channelFormat, player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); - // Send message directly to global chat... - ProxyLocalCommunicationManager.sendPlayerDirectChatMessage("global", sender.getName(), message, ((ProxiedPlayer)sender).getServer().getInfo()); + // Message passes through to spigot here - if (MultiChatProxy.getInstance().getDataStore().getHiddenStaff().contains(player.getUniqueId())) { - MultiChatProxy.getInstance().getDataStore().getHiddenStaff().remove(player.getUniqueId()); - } + // Send message directly to global chat... + ProxyLocalCommunicationManager.sendPlayerDirectChatMessage("global", sender.getName(), message, ((ProxiedPlayer)sender).getServer().getInfo()); - } else { - MessageManager.sendMessage(player, "freezechat_frozen"); + if (MultiChatProxy.getInstance().getDataStore().getHiddenStaff().contains(player.getUniqueId())) { + MultiChatProxy.getInstance().getDataStore().getHiddenStaff().remove(player.getUniqueId()); } } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java index 65b26a2a..3792fa0d 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java @@ -5,13 +5,12 @@ import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.plugin.Command; -import xyz.olivermartin.multichat.bungee.ChatControl; import xyz.olivermartin.multichat.bungee.ChatModeManager; import xyz.olivermartin.multichat.bungee.ConfigManager; -import xyz.olivermartin.multichat.bungee.DebugManager; import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.ProxyChatManager; import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; @@ -32,6 +31,7 @@ public LocalCommand() { public void execute(CommandSender sender, String[] args) { ChannelManager channelManager = MultiChatProxy.getInstance().getChannelManager(); + ProxyChatManager chatManager = MultiChatProxy.getInstance().getChatManager(); if ((sender instanceof ProxiedPlayer)) { @@ -51,73 +51,53 @@ public void execute(CommandSender sender, String[] args) { ProxyLocalCommunicationManager.sendUpdatePlayerMetaRequestMessage(player.getName(), player.getServer().getInfo()); } - if ((!MultiChatProxy.getInstance().getDataStore().isChatFrozen()) || (player.hasPermission("multichat.chat.always"))) { - - if (ChatControl.isMuted(player.getUniqueId(), "global_chat")) { - MessageManager.sendMessage(player, "mute_cannot_send_message"); - return; - } - - DebugManager.log(player.getName() + "- about to check for spam"); + if (!chatManager.canPlayerSendChat(player, message)) { + return; + } - if (ChatControl.handleSpam(player, message, "global_chat")) { - DebugManager.log(player.getName() + " - chat message being cancelled due to spam"); - return; - } + Optional preProcessedMessage = chatManager.preProcessMessage(player, message); - Optional crm; + if (!preProcessedMessage.isPresent()) { + return; + } - crm = ChatControl.applyChatRules(message, "global_chat", player.getName()); + message = preProcessedMessage.get(); - if (crm.isPresent()) { - message = crm.get(); - } else { - return; - } - - if (!player.hasPermission("multichat.chat.link")) { - message = ChatControl.replaceLinks(message); - } + // If they had this channel hidden, then unhide it... + if (channelManager.isHidden(player.getUniqueId(), "local")) { + channelManager.show(player.getUniqueId(), "local"); + MessageManager.sendSpecialMessage(player, "command_channel_show", "LOCAL"); + } - // If they had this channel hidden, then unhide it... - if (channelManager.isHidden(player.getUniqueId(), "local")) { - channelManager.show(player.getUniqueId(), "local"); - MessageManager.sendSpecialMessage(player, "command_channel_show", "LOCAL"); - } + // Let server know players channel preference - // Let server know players channel preference - - String channelFormat; + String channelFormat; - switch (channelManager.getChannel(player)) { + switch (channelManager.getChannel(player)) { - case "global": + case "global": + channelFormat = channelManager.getGlobalChannel().getInfo().getFormat(); + break; + case "local": + channelFormat = channelManager.getLocalChannel().getFormat(); + break; + default: + if (channelManager.existsProxyChannel(channelManager.getChannel(player))) { + channelFormat = channelManager.getProxyChannel(channelManager.getChannel(player)).get().getInfo().getFormat(); + } else { channelFormat = channelManager.getGlobalChannel().getInfo().getFormat(); - break; - case "local": - channelFormat = channelManager.getLocalChannel().getFormat(); - break; - default: - if (channelManager.existsProxyChannel(channelManager.getChannel(player))) { - channelFormat = channelManager.getProxyChannel(channelManager.getChannel(player)).get().getInfo().getFormat(); - } else { - channelFormat = channelManager.getGlobalChannel().getInfo().getFormat(); - } - break; } - - ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), channelManager.getChannel(player), channelFormat, player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); + break; + } - // Message passes through to spigot here - // Send message directly to local chat... - ProxyLocalCommunicationManager.sendPlayerDirectChatMessage("local", sender.getName(), message, ((ProxiedPlayer)sender).getServer().getInfo()); + ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), channelManager.getChannel(player), channelFormat, player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); - if (MultiChatProxy.getInstance().getDataStore().getHiddenStaff().contains(player.getUniqueId())) { - MultiChatProxy.getInstance().getDataStore().getHiddenStaff().remove(player.getUniqueId()); - } + // Message passes through to spigot here + // Send message directly to local chat... + ProxyLocalCommunicationManager.sendPlayerDirectChatMessage("local", sender.getName(), message, ((ProxiedPlayer)sender).getServer().getInfo()); - } else { - MessageManager.sendMessage(player, "freezechat_frozen"); + if (MultiChatProxy.getInstance().getDataStore().getHiddenStaff().contains(player.getUniqueId())) { + MultiChatProxy.getInstance().getDataStore().getHiddenStaff().remove(player.getUniqueId()); } } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/MultiChatProxy.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/MultiChatProxy.java index 6f1b347b..528585c0 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/MultiChatProxy.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/MultiChatProxy.java @@ -35,6 +35,7 @@ public static MultiChatProxy getInstance() { private ProxyBackupManager backupManager; private ContextManager contextManager; private ChannelManager channelManager; + private ProxyChatManager chatManager; /* END ATTRIBUTES */ @@ -104,4 +105,12 @@ public void registerChannelManager(ChannelManager channelManager) { this.channelManager = channelManager; } + public ProxyChatManager getChatManager() { + return this.chatManager; + } + + public void registerChatManager(ProxyChatManager chatManager) { + this.chatManager = chatManager; + } + } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyChatManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyChatManager.java new file mode 100644 index 00000000..bcec2b9f --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyChatManager.java @@ -0,0 +1,117 @@ +package xyz.olivermartin.multichat.proxy.common; + +import java.util.Optional; + +import net.md_5.bungee.api.connection.ProxiedPlayer; +import xyz.olivermartin.multichat.bungee.ChatControl; +import xyz.olivermartin.multichat.bungee.DebugManager; +import xyz.olivermartin.multichat.bungee.MessageManager; + +public class ProxyChatManager { + + public ProxyChatManager() { + /* EMPTY */ + } + + /** + * Check if the player has permission to use simple colour codes in chat + * @param player The player to check + * @return true if they have permission + */ + public boolean hasSimpleColourPermission(ProxiedPlayer player) { + return player.hasPermission("multichat.chat.colour.simple") + || player.hasPermission("multichat.chat.color.simple") + || hasRGBColourPermission(player); + } + + /** + * Check if the player has permission to use RGB colour codes in chat + * @param player The player to check + * @return true if they have permission + */ + public boolean hasRGBColourPermission(ProxiedPlayer player) { + return player.hasPermission("multichat.chat.colour.rgb") + || player.hasPermission("multichat.chat.color.rgb") + || hasLegacyColourPermission(player); + } + + /** + * Check if the player has permission to use all colour codes in chat (legacy permission) + * @param player The player to check + * @return true if they have permission + */ + public boolean hasLegacyColourPermission(ProxiedPlayer player) { + return player.hasPermission("multichat.chat.colour") + || player.hasPermission("multichat.chat.color"); + } + + /** + *

Check if this player is allowed to send a chat message

+ *

Possible reasons for not being allowed are: + *

    + *
  • Chat is frozen
  • + *
  • Player is muted by MultiChat
  • + *
  • Player is spamming
  • + *
+ *

+ * @param player The player to check + * @param message The message they are trying to send + * @return true if they are allowed to send a message + */ + public boolean canPlayerSendChat(ProxiedPlayer player, String message) { + + // Check if chat is frozen + if (MultiChatProxy.getInstance().getDataStore().isChatFrozen() && !player.hasPermission("multichat.chat.always")) { + MessageManager.sendMessage(player, "freezechat_frozen"); + return false; + } + + // Check if they are muted by MultiChat + if (ChatControl.isMuted(player.getUniqueId(), "global_chat")) { + MessageManager.sendMessage(player, "mute_cannot_send_message"); + return false; + } + + // Check if they are spamming + if (ChatControl.handleSpam(player, message, "global_chat")) { + DebugManager.log(player.getName() + " - chat message being cancelled due to spam"); + return false; + } + + return true; + + } + + /** + *

Pre-processes a chat message before sending it

+ *

This includes the following: + *

    + *
  • Applying regex rules and actions
  • + *
  • Filtering links if they player does not have permission
  • + *
+ *

+ * @param player The player to check + * @param message The message they are trying to send + * @return the new processed string if they are allowed to send the message, or empty if the message should be cancelled + */ + public Optional preProcessMessage(ProxiedPlayer player, String message) { + + Optional crm; + + crm = ChatControl.applyChatRules(message, "global_chat", player.getName()); + + if (crm.isPresent()) { + message = crm.get(); + } else { + return Optional.empty(); + } + + if (!player.hasPermission("multichat.chat.link")) { + message = ChatControl.replaceLinks(message); + } + + return Optional.of(message); + + } + +} diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/ProxyChannelType.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/ProxyChannelType.java new file mode 100644 index 00000000..bf71da50 --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/ProxyChannelType.java @@ -0,0 +1,10 @@ +package xyz.olivermartin.multichat.proxy.common.channels.proxy; + +public enum ProxyChannelType { + + STATIC, + DYNAMIC, + STAFF, + GROUP + +} From cc6bf2aa5ea1242cabe812b17f14f088b4f16f7e Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Mon, 27 Jul 2020 18:59:05 +0100 Subject: [PATCH 058/188] Further refined ProxyChatManager --- .../olivermartin/multichat/bungee/Events.java | 16 ++++------ .../bungee/commands/GlobalCommand.java | 11 +++---- .../bungee/commands/LocalCommand.java | 11 +++---- .../proxy/common/ProxyChatManager.java | 29 +++++++++++++++++-- 4 files changed, 41 insertions(+), 26 deletions(-) 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 60030f99..644cffde 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Events.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Events.java @@ -346,21 +346,17 @@ public void onChat(ChatEvent event) { if ((!event.isCancelled()) && (!event.isCommand())) { - String message = event.getMessage(); - - if (!chatManager.canPlayerSendChat(player, message)) { - event.setCancelled(true); - return; - } - - Optional preProcessedMessage = chatManager.preProcessMessage(player, message); + String message = event.getMessage(); // Current message + + Optional optionalMessage = chatManager.handleChatMessage(player, message); // Processed message - if (!preProcessedMessage.isPresent()) { + if (!optionalMessage.isPresent()) { + // Player not permitted to send this message, so cancel it event.setCancelled(true); return; } - message = preProcessedMessage.get(); + message = optionalMessage.get(); event.setMessage(message); DebugManager.log("Does player have ALL colour permission? " + chatManager.hasLegacyColourPermission(player)); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java index c783245c..df165e88 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java @@ -55,17 +55,14 @@ public void execute(CommandSender sender, String[] args) { ProxyLocalCommunicationManager.sendUpdatePlayerMetaRequestMessage(player.getName(), player.getServer().getInfo()); } - if (!chatManager.canPlayerSendChat(player, message)) { - return; - } - - Optional preProcessedMessage = chatManager.preProcessMessage(player, message); + Optional optionalMessage = chatManager.handleChatMessage(player, message); // Processed message - if (!preProcessedMessage.isPresent()) { + if (!optionalMessage.isPresent()) { + // Player not permitted to send this message, so cancel it return; } - message = preProcessedMessage.get(); + message = optionalMessage.get(); // If they had this channel hidden, then unhide it... if (channelManager.isHidden(player.getUniqueId(), "global")) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java index 3792fa0d..e0627616 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java @@ -51,17 +51,14 @@ public void execute(CommandSender sender, String[] args) { ProxyLocalCommunicationManager.sendUpdatePlayerMetaRequestMessage(player.getName(), player.getServer().getInfo()); } - if (!chatManager.canPlayerSendChat(player, message)) { - return; - } - - Optional preProcessedMessage = chatManager.preProcessMessage(player, message); + Optional optionalMessage = chatManager.handleChatMessage(player, message); // Processed message - if (!preProcessedMessage.isPresent()) { + if (!optionalMessage.isPresent()) { + // Player not permitted to send this message, so cancel it return; } - message = preProcessedMessage.get(); + message = optionalMessage.get(); // If they had this channel hidden, then unhide it... if (channelManager.isHidden(player.getUniqueId(), "local")) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyChatManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyChatManager.java index bcec2b9f..bae61513 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyChatManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyChatManager.java @@ -58,7 +58,7 @@ public boolean hasLegacyColourPermission(ProxiedPlayer player) { * @param message The message they are trying to send * @return true if they are allowed to send a message */ - public boolean canPlayerSendChat(ProxiedPlayer player, String message) { + private boolean canPlayerSendChat(ProxiedPlayer player, String message) { // Check if chat is frozen if (MultiChatProxy.getInstance().getDataStore().isChatFrozen() && !player.hasPermission("multichat.chat.always")) { @@ -94,7 +94,7 @@ public boolean canPlayerSendChat(ProxiedPlayer player, String message) { * @param message The message they are trying to send * @return the new processed string if they are allowed to send the message, or empty if the message should be cancelled */ - public Optional preProcessMessage(ProxiedPlayer player, String message) { + private Optional preProcessMessage(ProxiedPlayer player, String message) { Optional crm; @@ -114,4 +114,29 @@ public Optional preProcessMessage(ProxiedPlayer player, String message) } + /** + *

Handles the process of getting a message ready to send from the proxy

+ *

This includes the following: + *

    + *
  • Makes sure chat is not frozen
  • + *
  • Makes sure the player is not muted by MultiChat
  • + *
  • Makes sure the player is not spamming
  • + *
  • Applies regex rules and actions to message
  • + *
  • Filters links if they player does not have permission
  • + *
+ *

+ * @param player The player to check + * @param message The message they are trying to send + * @return the new processed string if they are allowed to send the message, or empty if the message should be cancelled + */ + public Optional handleChatMessage(ProxiedPlayer player, String message) { + + if (!canPlayerSendChat(player, message)) { + return Optional.empty(); + } + + return preProcessMessage(player, message); + + } + } From e1c4b0dceb89bbfe16d7d7a49d061f6960c01fa7 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Mon, 27 Jul 2020 23:34:27 +0100 Subject: [PATCH 059/188] First implementation of LocalSpy --- .../multichat/bungee/ChatManipulation.java | 2 +- .../multichat/bungee/CommandManager.java | 16 +++++ .../olivermartin/multichat/bungee/Events.java | 2 +- .../multichat/bungee/GroupManager.java | 2 +- .../multichat/bungee/MessageManager.java | 6 ++ .../multichat/bungee/MultiChat.java | 8 ++- .../bungee/PrivateMessageManager.java | 2 +- .../multichat/bungee/StaffChatManager.java | 2 +- .../multichat/bungee/commands/ACCCommand.java | 2 +- .../bungee/commands/FreezeChatCommand.java | 2 +- .../multichat/bungee/commands/GCCommand.java | 2 +- .../bungee/commands/GroupCommand.java | 2 +- .../bungee/commands/GroupListCommand.java | 2 +- .../bungee/commands/LocalSpyCommand.java | 49 +++++++++++++ .../multichat/bungee/commands/MCCCommand.java | 2 +- .../bungee/commands/ReplyCommand.java | 2 +- .../bungee/commands/SocialSpyCommand.java | 2 +- .../proxy/common/MultiChatProxy.java | 1 + .../proxy/common/channels/ChannelManager.java | 5 ++ .../common/channels/local/LocalChannel.java | 26 +++++-- .../common/listeners/ProxyLoginListener.java | 2 +- .../common/listeners/ProxyLogoutListener.java | 2 +- .../common/{ => storage}/ProxyDataStore.java | 19 ++++- .../files/ProxyAdminChatFileStore.java | 2 +- .../files/ProxyGroupChatFileStore.java | 2 +- .../storage/files/ProxyGroupSpyFileStore.java | 2 +- .../storage/files/ProxyLocalSpyFileStore.java | 69 +++++++++++++++++++ .../files/ProxySocialSpyFileStore.java | 2 +- .../files/ProxyStaffChatFileStore.java | 2 +- multichat/src/main/resources/aliases.yml | 6 ++ multichat/src/main/resources/aliases_fr.yml | 6 ++ multichat/src/main/resources/messages.yml | 6 ++ 32 files changed, 228 insertions(+), 29 deletions(-) create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalSpyCommand.java rename multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/{ => storage}/ProxyDataStore.java (86%) create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyLocalSpyFileStore.java diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatManipulation.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatManipulation.java index 2fa7814e..44c188c1 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatManipulation.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatManipulation.java @@ -7,7 +7,7 @@ import net.md_5.bungee.api.connection.ProxiedPlayer; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; -import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; +import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; /** * LEGACY ** TO BE REMOVED ** Chat Manipulation Class diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/CommandManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/CommandManager.java index 0383c000..89eb1c89 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/CommandManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/CommandManager.java @@ -17,6 +17,7 @@ import xyz.olivermartin.multichat.bungee.commands.HelpMeCommand; import xyz.olivermartin.multichat.bungee.commands.IgnoreCommand; import xyz.olivermartin.multichat.bungee.commands.LocalCommand; +import xyz.olivermartin.multichat.bungee.commands.LocalSpyCommand; import xyz.olivermartin.multichat.bungee.commands.MCCCommand; import xyz.olivermartin.multichat.bungee.commands.MCCommand; import xyz.olivermartin.multichat.bungee.commands.MsgCommand; @@ -49,6 +50,7 @@ public class CommandManager { helpme = new HelpMeCommand(); ignore = new IgnoreCommand(); local = new LocalCommand(); + localspy = new LocalSpyCommand(); mcc = new MCCCommand(); mc = new MCCommand(); msg = new MsgCommand(); @@ -79,6 +81,7 @@ public class CommandManager { private static Command helpme; private static Command ignore; private static Command local; + private static Command localspy; private static Command mcc; private static Command mc; private static Command msg; @@ -418,6 +421,18 @@ public static Command getUsecast() { public static void setUsecast(Command usecast) { CommandManager.usecast = usecast; } + /** + * @return the localspy + */ + public static Command getLocalspy() { + return localspy; + } + /** + * @param localspy the localspy to set + */ + public static void setLocalspy(Command localspy) { + CommandManager.localspy = localspy; + } /** * Generates new instances of all commands @@ -439,6 +454,7 @@ public static void reload() { helpme = new HelpMeCommand(); ignore = new IgnoreCommand(); local = new LocalCommand(); + localspy = new LocalSpyCommand(); mcc = new MCCCommand(); mc = new MCCommand(); msg = new MsgCommand(); 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 644cffde..7f516c74 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Events.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Events.java @@ -18,12 +18,12 @@ import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.ProxyChatManager; -import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; import xyz.olivermartin.multichat.proxy.common.channels.ChannelMode; import xyz.olivermartin.multichat.proxy.common.channels.proxy.ProxyChannel; import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; +import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; /** * Events Manager diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/GroupManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/GroupManager.java index 4f8d0286..30eb1cfc 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/GroupManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/GroupManager.java @@ -8,8 +8,8 @@ import net.md_5.bungee.api.connection.ProxiedPlayer; import xyz.olivermartin.multichat.bungee.commands.GCCommand; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; -import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; +import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; /** * Group Chat Management Class diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MessageManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MessageManager.java index c4541abf..3012fc25 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MessageManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MessageManager.java @@ -177,6 +177,12 @@ public class MessageManager { defaultMessages.put("command_local_enabled_2", "&bYour messages will only go to this server!"); defaultMessages.put("command_local_only_players", "&cOnly players can change their chat state"); + defaultMessages.put("command_localspy_disabled", "&cLocal Spy Disabled"); + defaultMessages.put("command_localspy_enabled", "&bLocal Spy Enabled"); + defaultMessages.put("command_localspy_usage", "&bUsage: /localspy"); + defaultMessages.put("command_localspy_desc", "&bToggles if the user has local spy enabled or disabled"); + defaultMessages.put("command_localspy_only_players", "&cOnly players can toggle localspy"); + defaultMessages.put("command_mcc_usage", "&aUsage: /mcc "); defaultMessages.put("command_mcc_only_players", "&cOnly players can change chat colours!"); defaultMessages.put("command_mcc_updated", "&aMod-Chat colours updated!"); 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 43fa276a..d6426c18 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java @@ -15,7 +15,6 @@ import xyz.olivermartin.multichat.proxy.common.MultiChatProxyPlatform; import xyz.olivermartin.multichat.proxy.common.ProxyBackupManager; import xyz.olivermartin.multichat.proxy.common.ProxyChatManager; -import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; import xyz.olivermartin.multichat.proxy.common.channels.local.LocalChannel; @@ -32,6 +31,7 @@ import xyz.olivermartin.multichat.proxy.common.listeners.communication.ProxyPlayerChatListener; import xyz.olivermartin.multichat.proxy.common.listeners.communication.ProxyPlayerMetaListener; import xyz.olivermartin.multichat.proxy.common.listeners.communication.ProxyServerActionListener; +import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; import xyz.olivermartin.multichat.proxy.common.storage.ProxyFileStoreManager; import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyAdminChatFileStore; import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyAnnouncementsFileStore; @@ -41,6 +41,7 @@ import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyGroupChatFileStore; import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyGroupSpyFileStore; import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyIgnoreFileStore; +import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyLocalSpyFileStore; import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyMuteFileStore; import xyz.olivermartin.multichat.proxy.common.storage.files.ProxySocialSpyFileStore; import xyz.olivermartin.multichat.proxy.common.storage.files.ProxyStaffChatFileStore; @@ -245,6 +246,9 @@ public void onEnable() { fileStoreManager.registerFileStore("multichatuuidname.dat", new ProxyUUIDNameFileStore("MultiChatUUIDName.dat", configDirectory)); + fileStoreManager.registerFileStore("localspyinfo.dat", + new ProxyLocalSpyFileStore("LocalSpyInfo.dat", configDirectory)); + MultiChatProxy.getInstance().registerFileStoreManager(fileStoreManager); // Set up chat control stuff @@ -379,6 +383,7 @@ public void registerCommands(Configuration configYML, Configuration chatcontrolY getProxy().getPluginManager().registerCommand(this, CommandManager.getLocal()); getProxy().getPluginManager().registerCommand(this, CommandManager.getGlobal()); getProxy().getPluginManager().registerCommand(this, CommandManager.getChannel()); + getProxy().getPluginManager().registerCommand(this, CommandManager.getLocalspy()); } // Register staff list command /staff @@ -432,6 +437,7 @@ public void unregisterCommands(Configuration configYML, Configuration chatcontro getProxy().getPluginManager().unregisterCommand(CommandManager.getLocal()); getProxy().getPluginManager().unregisterCommand(CommandManager.getGlobal()); getProxy().getPluginManager().unregisterCommand(CommandManager.getChannel()); + getProxy().getPluginManager().unregisterCommand(CommandManager.getLocalspy()); } // Unregister staff list command /staff diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PrivateMessageManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PrivateMessageManager.java index 68a6a986..193d86b0 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PrivateMessageManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PrivateMessageManager.java @@ -9,8 +9,8 @@ import net.md_5.bungee.api.connection.ProxiedPlayer; import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; -import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; +import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; public class PrivateMessageManager { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/StaffChatManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/StaffChatManager.java index 3301f80e..03a3e373 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/StaffChatManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/StaffChatManager.java @@ -11,8 +11,8 @@ import xyz.olivermartin.multichat.bungee.events.PostStaffChatEvent; import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; -import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; +import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; /** * Staff Chat Manager diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ACCCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ACCCommand.java index c696bccb..e4882b3f 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ACCCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ACCCommand.java @@ -9,7 +9,7 @@ import xyz.olivermartin.multichat.bungee.DebugManager; import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; -import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; +import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; /** * Admin-Chat colour command diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/FreezeChatCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/FreezeChatCommand.java index 4b4fa21e..b981f014 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/FreezeChatCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/FreezeChatCommand.java @@ -7,7 +7,7 @@ import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; -import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; +import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; /** * Freeze Chat Command diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GCCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GCCommand.java index 715d8ddb..a32a1164 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GCCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GCCommand.java @@ -19,8 +19,8 @@ import xyz.olivermartin.multichat.bungee.MultiChat; import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; -import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; +import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; /** * Group Chat Messaging Command diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GroupCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GroupCommand.java index 77819271..b4e1c28b 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GroupCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GroupCommand.java @@ -18,7 +18,7 @@ import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.bungee.UUIDNameManager; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; -import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; +import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; /** * The Group Command diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GroupListCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GroupListCommand.java index e91fbb3e..eb7ca22e 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GroupListCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GroupListCommand.java @@ -5,7 +5,7 @@ import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; -import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; +import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; /** * Group List Command diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalSpyCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalSpyCommand.java new file mode 100644 index 00000000..abc6a7bb --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalSpyCommand.java @@ -0,0 +1,49 @@ +package xyz.olivermartin.multichat.bungee.commands; + +import net.md_5.bungee.api.CommandSender; +import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.md_5.bungee.api.plugin.Command; +import xyz.olivermartin.multichat.bungee.ConfigManager; +import xyz.olivermartin.multichat.bungee.MessageManager; +import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; + +/** + * SocialSpy Command + *

Allows staff members to view private messages sent by players

+ * + * @author Oliver Martin (Revilo410) + * + */ +public class LocalSpyCommand extends Command { + + public LocalSpyCommand() { + super("mclocalspy", "multichat.staff.spy", (String[])ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("localspy").toArray(new String[0])); + } + + public void execute(CommandSender sender, String[] args) { + + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + + if ((sender instanceof ProxiedPlayer)) { + + if (args.length < 1) { + + if (ds.getLocalSpy().contains(((ProxiedPlayer)sender).getUniqueId())) { + ds.getLocalSpy().remove(((ProxiedPlayer)sender).getUniqueId()); + MessageManager.sendMessage(sender, "command_localspy_disabled"); + } else { + ds.getLocalSpy().add(((ProxiedPlayer)sender).getUniqueId()); + MessageManager.sendMessage(sender, "command_localspy_enabled"); + } + + } else { + MessageManager.sendMessage(sender, "command_localspy_usage"); + MessageManager.sendMessage(sender, "command_localspy_desc"); + } + + } else { + MessageManager.sendMessage(sender, "command_localspy_only_players"); + } + } +} diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MCCCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MCCCommand.java index b710add0..07882490 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MCCCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MCCCommand.java @@ -8,7 +8,7 @@ import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; -import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; +import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; /** * Mod-Chat Colour Command diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ReplyCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ReplyCommand.java index b3428181..8aebe14b 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ReplyCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ReplyCommand.java @@ -13,8 +13,8 @@ import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.bungee.PrivateMessageManager; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; -import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; +import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; /** * Reply Command diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/SocialSpyCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/SocialSpyCommand.java index ab14e63e..e0d1111e 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/SocialSpyCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/SocialSpyCommand.java @@ -6,7 +6,7 @@ import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; -import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; +import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; /** * SocialSpy Command diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/MultiChatProxy.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/MultiChatProxy.java index 528585c0..75248eb5 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/MultiChatProxy.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/MultiChatProxy.java @@ -5,6 +5,7 @@ import net.md_5.bungee.api.plugin.Plugin; import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; import xyz.olivermartin.multichat.proxy.common.contexts.ContextManager; +import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; import xyz.olivermartin.multichat.proxy.common.storage.ProxyFileStoreManager; /** diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelManager.java index a0333ec7..bbbef73c 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/ChannelManager.java @@ -125,4 +125,9 @@ public boolean select(UUID uuid, String channelId) { } } + public boolean isLocalSpy(ProxiedPlayer player) { + return MultiChatProxy.getInstance().getDataStore().getLocalSpy().contains(player.getUniqueId()) + && player.hasPermission("multichat.chat.spy"); + } + } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/local/LocalChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/local/LocalChannel.java index e114d93e..2d2bf39f 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/local/LocalChannel.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/local/LocalChannel.java @@ -63,8 +63,8 @@ public void distributeMessage(ProxiedPlayer sender, String message, String forma || manager.isHidden(receiver.getUniqueId(), "local")) // Receiver has hidden this channel continue; - // If receiver is NOT in the other recipients list then leave processing (as this is local only) - if (!otherRecipients.contains(receiver.getUniqueId())) continue; + // If receiver is NOT in the other recipients list then leave processing (as this is local only) (unless they are spying) + if (!otherRecipients.contains(receiver.getUniqueId()) && !manager.isLocalSpy(receiver)) continue; // If receiver ignores sender if (ChatControl.ignores(sender.getUniqueId(), receiver.getUniqueId(), "global_chat")) { @@ -72,8 +72,14 @@ public void distributeMessage(ProxiedPlayer sender, String message, String forma continue; } + String finalMessage = joined; + + if (manager.isLocalSpy(receiver)) { + finalMessage = ChatColor.translateAlternateColorCodes('&', "&8[&7SPY&8] ") + joined; + } + if (MultiChat.legacyServers.contains(receiver.getServer().getInfo().getName())) { - receiver.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(joined))); + receiver.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(finalMessage))); } else { receiver.sendMessage(TextComponent.fromLegacyText(joined)); } @@ -98,13 +104,19 @@ public void broadcastRawMessage(CommandSender sender, String server, String mess || manager.isHidden(receiver.getUniqueId(), "local")) // Receiver has hidden this channel continue; - // If not on specified server then return - if (!receiver.getServer().getInfo().getName().equals(server)) continue; + // If not on specified server then return (unless spying) + if (!receiver.getServer().getInfo().getName().equals(server) && !manager.isLocalSpy(receiver)) continue; + + String finalMessage = message; + + if (manager.isLocalSpy(receiver)) { + finalMessage = ChatColor.translateAlternateColorCodes('&', "&8[&7SPY&8] ") + message; + } if (MultiChat.legacyServers.contains(receiver.getServer().getInfo().getName())) { - receiver.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(message))); + receiver.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(finalMessage))); } else { - receiver.sendMessage(TextComponent.fromLegacyText(message)); + receiver.sendMessage(TextComponent.fromLegacyText(finalMessage)); } } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLoginListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLoginListener.java index 1d4b343b..201ef394 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLoginListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLoginListener.java @@ -21,8 +21,8 @@ import xyz.olivermartin.multichat.bungee.PlayerMetaManager; import xyz.olivermartin.multichat.bungee.UUIDNameManager; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; -import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; +import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; public class ProxyLoginListener implements Listener { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLogoutListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLogoutListener.java index f5b48476..0212f556 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLogoutListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLogoutListener.java @@ -18,7 +18,7 @@ import xyz.olivermartin.multichat.bungee.Events; import xyz.olivermartin.multichat.bungee.PlayerMetaManager; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; -import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; +import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; public class ProxyLogoutListener implements Listener { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyDataStore.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/ProxyDataStore.java similarity index 86% rename from multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyDataStore.java rename to multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/ProxyDataStore.java index e8520c15..ce52e646 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyDataStore.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/ProxyDataStore.java @@ -1,4 +1,4 @@ -package xyz.olivermartin.multichat.proxy.common; +package xyz.olivermartin.multichat.proxy.common.storage; import java.util.ArrayList; import java.util.HashMap; @@ -45,6 +45,9 @@ public class ProxyDataStore { // Who has social spy on? private List socialSpy = new ArrayList(); + // Who has local spy on? + private List localSpy = new ArrayList(); + // Which staff are hidden? private Set hiddenStaff = new HashSet(); @@ -168,4 +171,18 @@ public void setHiddenStaff(Set hiddenStaff) { this.hiddenStaff = hiddenStaff; } + /** + * @return the localSpy + */ + public List getLocalSpy() { + return localSpy; + } + + /** + * @param localSpy the localSpy to set + */ + public void setLocalSpy(List localSpy) { + this.localSpy = localSpy; + } + } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyAdminChatFileStore.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyAdminChatFileStore.java index bf66fc92..6e2bc66f 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyAdminChatFileStore.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyAdminChatFileStore.java @@ -12,7 +12,7 @@ import com.olivermartin410.plugins.TChatInfo; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; -import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; +import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; import xyz.olivermartin.multichat.proxy.common.storage.ProxyGenericFileStore; public class ProxyAdminChatFileStore extends ProxyGenericFileStore { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyGroupChatFileStore.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyGroupChatFileStore.java index 0bd359bf..7bfa4493 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyGroupChatFileStore.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyGroupChatFileStore.java @@ -11,7 +11,7 @@ import com.olivermartin410.plugins.TGroupChatInfo; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; -import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; +import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; import xyz.olivermartin.multichat.proxy.common.storage.ProxyGenericFileStore; public class ProxyGroupChatFileStore extends ProxyGenericFileStore { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyGroupSpyFileStore.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyGroupSpyFileStore.java index d42c153e..e11d9350 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyGroupSpyFileStore.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyGroupSpyFileStore.java @@ -10,7 +10,7 @@ import java.util.UUID; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; -import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; +import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; import xyz.olivermartin.multichat.proxy.common.storage.ProxyGenericFileStore; public class ProxyGroupSpyFileStore extends ProxyGenericFileStore { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyLocalSpyFileStore.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyLocalSpyFileStore.java new file mode 100644 index 00000000..c632b973 --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyLocalSpyFileStore.java @@ -0,0 +1,69 @@ +package xyz.olivermartin.multichat.proxy.common.storage.files; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.util.List; +import java.util.UUID; + +import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; +import xyz.olivermartin.multichat.proxy.common.storage.ProxyGenericFileStore; + +public class ProxyLocalSpyFileStore extends ProxyGenericFileStore { + + public ProxyLocalSpyFileStore(String fileName, File fileDirectory) { + super(fileName, fileDirectory); + } + + @SuppressWarnings("unchecked") + @Override + protected boolean loadFile(File file) { + + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + List result = null; + + try { + + FileInputStream saveFile = new FileInputStream(file); + ObjectInputStream in = new ObjectInputStream(saveFile); + result = (List)in.readObject(); + in.close(); + ds.setLocalSpy(result); + return true; + + } catch (IOException|ClassNotFoundException e) { + + e.printStackTrace(); + return false; + + } + + } + + @Override + protected boolean saveFile(File file) { + + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + + try { + + FileOutputStream saveFile = new FileOutputStream(file); + ObjectOutputStream out = new ObjectOutputStream(saveFile); + out.writeObject(ds.getLocalSpy()); + out.close(); + return true; + + } catch (IOException e) { + + e.printStackTrace(); + return false; + + } + + } + +} diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxySocialSpyFileStore.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxySocialSpyFileStore.java index 8200669d..8e62b1f3 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxySocialSpyFileStore.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxySocialSpyFileStore.java @@ -10,7 +10,7 @@ import java.util.UUID; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; -import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; +import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; import xyz.olivermartin.multichat.proxy.common.storage.ProxyGenericFileStore; public class ProxySocialSpyFileStore extends ProxyGenericFileStore { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyStaffChatFileStore.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyStaffChatFileStore.java index 2b7a7aaf..b892e910 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyStaffChatFileStore.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyStaffChatFileStore.java @@ -12,7 +12,7 @@ import com.olivermartin410.plugins.TChatInfo; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; -import xyz.olivermartin.multichat.proxy.common.ProxyDataStore; +import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; import xyz.olivermartin.multichat.proxy.common.storage.ProxyGenericFileStore; public class ProxyStaffChatFileStore extends ProxyGenericFileStore { diff --git a/multichat/src/main/resources/aliases.yml b/multichat/src/main/resources/aliases.yml index e41ce1fe..c7516d6c 100644 --- a/multichat/src/main/resources/aliases.yml +++ b/multichat/src/main/resources/aliases.yml @@ -98,6 +98,12 @@ local: - local - l +# The localspy command has the following aliases (other than /mclocalspy) +localspy: +- localspy +- localchatspy +- lspy + # The mod chat colour command has the following aliases (other than /mcmcc) mcc: - mcc diff --git a/multichat/src/main/resources/aliases_fr.yml b/multichat/src/main/resources/aliases_fr.yml index a7f1da4e..ffd3bd0b 100644 --- a/multichat/src/main/resources/aliases_fr.yml +++ b/multichat/src/main/resources/aliases_fr.yml @@ -100,6 +100,12 @@ local: - local - l +# La commande 'localspy' possède les alias suivants (autres que /mclocalspy) +localspy: +- localspy +- localchatspy +- lspy + # La commande 'mcc' possède les alias suivants (autres que /mcmcc) mcc: - mcc diff --git a/multichat/src/main/resources/messages.yml b/multichat/src/main/resources/messages.yml index 19d0b1fb..f5716792 100644 --- a/multichat/src/main/resources/messages.yml +++ b/multichat/src/main/resources/messages.yml @@ -165,6 +165,12 @@ command_local_enabled_1: "&3LOCAL CHAT ENABLED" command_local_enabled_2: "&bYour messages will only go to this server!" command_local_only_players: "&cOnly players can change their chat state" +command_localspy_disabled: "&cLocal Spy Disabled" +command_localspy_enabled: "&bLocal Spy Enabled" +command_localspy_usage: "&bUsage: /localspy" +command_localspy_desc: "&bToggles if the user has local spy enabled or disabled" +command_localspy_only_players: "&cOnly players can toggle localspy" + command_mcc_usage: "&aUsage: /mcc " command_mcc_only_players: "&cOnly players can change chat colours!" command_mcc_updated: "&aMod-Chat colours updated!" From d5be1b7d2d62eaf6b9ea71057dc010c11655285b Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Mon, 27 Jul 2020 23:58:28 +0100 Subject: [PATCH 060/188] Fixed bug in message shown for local spy --- .../multichat/proxy/common/channels/local/LocalChannel.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/local/LocalChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/local/LocalChannel.java index 2d2bf39f..37d25b15 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/local/LocalChannel.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/local/LocalChannel.java @@ -81,7 +81,7 @@ public void distributeMessage(ProxiedPlayer sender, String message, String forma if (MultiChat.legacyServers.contains(receiver.getServer().getInfo().getName())) { receiver.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(finalMessage))); } else { - receiver.sendMessage(TextComponent.fromLegacyText(joined)); + receiver.sendMessage(TextComponent.fromLegacyText(finalMessage)); } } From 94de99db8f18a5e77c8cf33cc7b76fdb6afa7edb Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Tue, 28 Jul 2020 00:03:47 +0100 Subject: [PATCH 061/188] Only show [SPY] prefix if NOT on same server when localspy enabled --- .../multichat/proxy/common/channels/local/LocalChannel.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/local/LocalChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/local/LocalChannel.java index 37d25b15..d619cf6d 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/local/LocalChannel.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/local/LocalChannel.java @@ -74,7 +74,7 @@ public void distributeMessage(ProxiedPlayer sender, String message, String forma String finalMessage = joined; - if (manager.isLocalSpy(receiver)) { + if (manager.isLocalSpy(receiver) && !otherRecipients.contains(receiver.getUniqueId())) { finalMessage = ChatColor.translateAlternateColorCodes('&', "&8[&7SPY&8] ") + joined; } @@ -109,7 +109,7 @@ public void broadcastRawMessage(CommandSender sender, String server, String mess String finalMessage = message; - if (manager.isLocalSpy(receiver)) { + if (manager.isLocalSpy(receiver) && !receiver.getServer().getInfo().getName().equals(server)) { finalMessage = ChatColor.translateAlternateColorCodes('&', "&8[&7SPY&8] ") + message; } From 78eecff04de621262681eee1d4924ec4065f45b6 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Tue, 28 Jul 2020 00:10:37 +0100 Subject: [PATCH 062/188] MultiChat v1.10 beta 2 includes local spy --- .../releases/1.10/multichat-1.10-beta.2.jar | Bin 0 -> 635876 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 multichat/releases/1.10/multichat-1.10-beta.2.jar diff --git a/multichat/releases/1.10/multichat-1.10-beta.2.jar b/multichat/releases/1.10/multichat-1.10-beta.2.jar new file mode 100644 index 0000000000000000000000000000000000000000..0b8910b6c0631947e06480f222ccdda1cd4acf28 GIT binary patch literal 635876 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

><+E0?d4GK zo>&Gquj8*xO2o9`3!4f}3@cu)f2O>}tlV|}sPV+5VRXh*)&|;~im!SEpVxZqVhqVq zS3;#yE;E*#sdV;KaojPKOqGq>;h)fmjafYBBKLU6=WSn8L+*dxIU&h$Bym*y3>LY)v(?d#$em)i6nz}E49Kpz?PE5+*?cP{O z?e3(!HWezR&u)XHDb+=$pV7#ak9mRGLNN6owhcH2aU-Uj?`6&rThsVmDdZc3P%LGh zqguD&hiIJw*6W<^$G;3aJ?UgG4n#it-Mf=z9?Ps`CV7iZCKh6G2rj2TW|#?eZz|Pz zTpXV@#iOY$O3oL#mp79)Lo`3pdDpFVVwJAiBmNwQj0Fsy=Q?mxj2^a(_a*Xd$0p`J z%$a6IJcN)q%siQUZM=?3$K>j|yK9^@f~=w4$mXDfga05cUgxtobn3qYqgd-LpHOvMRHC%)q7RFI877S*_q%lI6KDO#+v9ZTh6y;rg{c zskXpA<&@M^xUN+E%4d3f_@Pu&iq}|3-?`KNhJxa9EI7yd`^LbeO&}{C^Xs}kZEBmr zDgwk z^Pp(Dz)LN3Hc>L}{s$dvvu;<`l`;Y7oHseoPe*p7&rW*e4@ooVuXEl6M{%!Q3ZOxkt93|2^ZozZuRDlK+v9a zFhUqw4f5q+_4B-m7LSHRHVymZ=cDP!m|5OnrH z?3@+Z*}c=Qq$xLg!R6Bk((Kn3e2b6R^{-yyq}=&$9lskfS2njCVa3Y7Mma7nrF_r? zX9SCMob(ltr?3J>fJvl@5fB)Hvqzj)0tTWxyWvrE0}#1_7g^>}f)nwF(uCJ?=b==J zDi{%slei%wH_z#X3MAQ5AVZt$p0G?33xMMCeYT!-irN;QsFbbzZvIVjz`leq&;9Em zd=dU{jSc+Y#>Udl!q&#b$;rU%--r2=6zrD%4k_;@yuylAw&efPB5}_MmN#cyXdqTh zwCI+(b|f&>)xIoNA?D?FJ&0X~$yBch&cpt=_WSvGW5nd~;qhY)JY*o{ltm`^T>jdl>(QSyoWjd`Cye8uu2t(Sjmjydac#jwbQ19XQWJvW={86zH8jG z!f^ymDR+?H7n7+HLv|LIGpJkfXqWs1PF#lJVSC0;5BsKeol{DW?vvF=)e%*@oA5ve zv#spq=3C$pE5LdcyZyBYSU~&&&K)LsMUsjUDa-!2^oRVraiqisC?s>&6{Cvt4J4Vwl zmuDK~hIOr0CBGjiHjBc|XwqVOqoqNAu?EzMwwhFr9ks3`pGxuS`CjoL5!}a!xx+G( z`V~^oqI7ZvNLFa3u!1+sHr6Xvv%K_Z2IzM-eTUSG+$^l*#{H_<*EiEjfg#XGizRl1 z^5}RDV)=^5kQKamXWpIgGIR;(H`G7f@imrHJ=otlcdWmK^q&I$zv@;<|58N%G3>4~ zCA-CsysdV@r;Ug}XHG7zL!c6VT1Y655Z@_;^pOc2Z8pdaEuizr*7+yVc_HsM?@`Kg z>=0N8h9*GriF9we=k&MJbw=~n17Dq9i$Mj~S`)CzlbN}uG}i*f6l6{Q#NbJNN5 zS(Xv|a5mJFtxJjbQu!S3U^oUjDMVZOfY50}3lLrX8esRQT?)(D49VIbFxJ$3Q|=C5%KTnTGuMKdzV3vi4y zbgNX&Gc8i2QlxOsJi>L(buM;Z?=CO<^)2?opH{c`-nD~oQ9Cn)9VNQ_V0Vex=7FuSFY8z$?0(X7#ulBH|~?K9uTy0hlJj;HyiHgtt%DO<@<$QoOctY^hlN{D{8 zQmN=JYxLcOC{i+LBQ?xtstsq+zCsL^yk>V-Q@)!`pT+}|J_l2#ny)|NnCCJ^k}`If zz`m^pZWelpyz?N;s_sF~#ENBQKlO>#?}h^Rh?7stqOz3UA31;i&CfCghDn_e(wUv=xa9c!Fr=I&#iQ>dyB8d#+ifH}0IW(vYQ~DH&=p#mrUvq&cy$G{2(q#*{Xqa=)s1ZB6Gx>RSZ**Xfx4@zeGes6Y}*Yf#=9c zOd;R|(%sN1y0r|9kC_t4xn+C3<+xw=6z?o>1JVa2PwI`wNs=-hii27Xd_<%f!#5x^ zgsIZ))r++g^cfetYu3?i5&cRDkBo>8*TsDyl~5^cA8}?nl*S!@m!_p(s7)3_)k7$P z+7S3qOF797pZ%2FyzRwlez{t$hw7Hyv|YK@(jQ2s0A^uY z79Qj)lBE&*_|Y>O+gHVs5UDQ#|Tq&T2j+F}J(Nc$Cau&7X@L*ivdUSkSRlr2(;6HBkRz>lqwDp3u7_c3s{9`H4Kakny{$JLgY*7!QA zL2O3hra479lzOW@jVV>eUrcitD`a(fUV2$OMXL{2;k4odP z2h4N?+QTMeV%;O1PDarjkIF78Xu@efOTP!{UEDAiSk@qa@?BuxHQP5~ESpn3O-#yb#(vI1-vxWElc)0L1b>had9>9l(8)znk?P304tuAary}}|* zHHSZO2qC9eZGd!wd0Kqd)=4cbagd1YNKR@tzz73vco>yzw7=M852@EXj`4#D#Fmpn7H;`mR7BGf9Ym)EzCVrlDE7z?VkQjz5E|k zvHdaZH&$lFfTWm&Tn5#3*oAAev8-x%HI+u`<(lRV^6=Wh+ zN@Xo7urW4k`g7YMm_*FV9+2BO1;HdMK3dJvbFOXn%G)l18BmmeER`N!F33)90Iw@A zcCJt-B92k_0cw+atlOYYxbge7T!}Lf14|3z=1&1&8u_;l%IQp1!2t)@*m7;lpVWo18yHthgu?Q- zT_9un*2?;HR^&v@ULQK&bb?e3qK=gnf-JTn0AOSq1q#0s$RU>AUfB(Hp8IO(siQ}X zOgy$NUpT+)C}B-+i9+5Q*vxv`mwO*2+U|c_sgRyD7~Cw$4UgT(i`=zfwyJcvg-X^CYb#jU&Qm(JGGUc z<+i5EFwoTD>!kz&4t+nHq)mt=H9~|E$ZN|=cxh4JgOJ-%9>iaYl-W?km~t9~L&ci% z8r5MVvRQ--r6FVyvm*iU!y{JFH;3uRUxxSrzUooUkqY}&@1Glpv6jRXD+B<*?SC7E z`_~)DKi>-cmzL|_FCbSM+qPI^D7|cZZs*d)cp@yeNk3L*Q~ z@!9SjLN~LEg;}URF*{GS3bhZQ-buU?eNLus9nHdEu7>;|lOJ_B0n3>#uz09EgWQ^PY&jzkC;;p zwI0V9JxNYTQQXehqftdDk!g@N)`JIWZ%CXQiY~VhaJX45s1>V(a>~_TC81mRRw;K7 z_036z6eOOox09ev$ zi{bFtgy~`ge4p-;LX+I?q{@Z!gXxF}Me&|WC)b8L>WxSUITQw=?=;B(6^Eh?s|~|# z4SDU`PF?z*I^9N`DF&{zu8%mjLr3Ib;j(b-Zhqs`Xy3HLK?KVs0z4jGc3uDdWC6e{ zYN{Z%88M<1-cX8eNU|8A!<4WF{L#L>UD#NIp`<@3&xc(vIy<&bsawsUGNhSxHOSdP z;s|J%76(Q;5ubT~)w%eNTpUW3ZqdA0c`BV9e(qfM3wT;1KSKh6loUtGW@XEy8jMl{ zW&yq-OP3#9n*!>D)2f4Lw0S4qb1jZgOi!@shFF z6)kLWT|3_cZW|=`!}5C7eA`?bdbzTT`(AK(xXrz^v7y;{;=qIn*9+h3(uE)ny_GT*YI&9tsFv0 zQVV-!rYf}x9IcMXq#+POaykps07RGR5Ey78PNEL7iwdeHzfP80EtVasI5M843XC#i z)shN9MBs^hgl`FcGoNHiyBVZZBX~cNVMZ$&k&FL?B$z#rm%-PiZLJb#lqwz}AwfZR za5Ar+tRVb9l)VF!E^V`>-L`G5w(aiKyxZNYZQHhO+qP}nw(Zrn=6Uy?iP^JbzKQSs z0hN&vRdr?6nMa<Y1~~gN%QZxBYxOw;3Avu~m0ThP~%sydYSkmqO&@L&_K*n-z`m zBdcv}H>xC0^4H2oS~Nl5jh|ROOawzkMXWISAZgii1h$xQ;!rehm^Ga@&r4Z;kM|gJ z+M8q$`TlkFaR`}naWzQiDilpE?tU4aZ-RSkN~ag&bSF!v7jCJ~th0KsOKa%ZNLp%~ zGAGhQ^I`~C+K7NT9N(V+R}PJ%-7g|fs-mEi=7_US2zibWWj4IwbgIja4_^=dd-wfY zOf&c4RFYq{f~Ry@u(QL_y0g;9=a>E0ljFS1)YFQjyD3q2G41gsOhV4M+9Yr>+QNby zDvlMtU2n#QYl8^Jg^)}M@vSJrB1?iTY}zGRPzPJW23vc&ewV^h3SAS*H6t`?U+te% zd4BFGCOZ#3O1Q|7zWjH(OGBWC-3YMybJVLni$Q|-1U}O5jw_P*XWjYNR}M5d=@D>Q zje%0YcrMxlYu^mEml4OU6)ogOiGLsg*;hf8DzktPy`M3!L-`^vKhd3(zp#(~cij~R zvH{DKBn~9$Zx^B`~s)OOnGaa!*=C4)l;flFM*Wx_6bGDO@ zg~d(|=C9%8?NJ%)Cu=Y`gD@m|F^T~yh#+BDHTuva={H_jOu8Y}6%s4wfL%Pkr&Eta zVoUKCz{Nl@vt7@4XD2CCcIUg7ACa3V7!vSifzS(L^wVha!L_P|9|x|R>-+8e%prx` z@1H?T#F@Wr{FPzwcca(V`|T44obW<{Ap0nN z7ui<1Y`dOE8+SDMk&@#yBj={TV%K#mh|F(XzxMP5d4+~V@F?&leV?x7!(s1M@og;f zz30}NPhJ5rV>g-DJYE(}&;+Hej?WY@*+~A7FJvVl-j_1jj$cF_tcO zZ3Hjpo0=@R?|fh#NrWl(L|r6X3kx)4e#T|f>!V_EP2w%!#4jOlDcI%4a7H7E)5Bt7 zr)1~hLCjHMcZ2{Ah!Qu_LSXUoO12?J7I6vP4$>zR+-@G7KSp)!GIaA4L}Zp@1tn!@ zUeJO{(u$crcxFucrS+TdkQ!>GTjxXFgoxJY!;~H z9v*7~zyz87tZ7;>Z>EF=mts#Oa=5MBo)C@<6Y;|hgLSahPJDsN7$=QWe_Wy2mHaa(q9qF({{cqNp3AwiAg^Qr7GtZmYuwY- z`YVNp8bWfy>su0b*%0jLX2LsL9-v}34mSjRL^mHfsVj!|&f~3joHPd=c26lBIk16+ zA)xzYT_N;$EN3AwzQ&V2W^Y3NA^WJ`!KX?nO_{ zZd~JyxMJ=_L6}8T$J( z|EU+&_Mby}|DzQK{U1G;nE&Rb^e^nw+R)n8h~E64K?mpQdYA!5B#1peIpTCO*2Fzh z&KGFO(72C!NOP3L6;UtOM7ZX#??L-p`xnH6KlfIRfEoX^qjuU#%{5t*_|aGomO=yF zyZ2zkqN#q>RY_M*5)rq6)+jBnwIXw;5d)Z*IO(Hp?M1x6-u%AfqNaI9 zCx0KbPv7~LRIFj#e|>uIC$L3^{F58>KLr2(x7rE!uk8P8_ejgq7Po!*n}F!Y|G8iT zEV?i{8^l@eK4?59(!#M!}taCzT`=;PY)r^Ng4YE!5_dd_e?ZNO?5A4@G|&;`1?BI)?y%RR{fCBj-6t%g1(_B z;Xpw}nKgC!=WIO-&0V=jp=elZDuOxk;^L_?4R=&M>F7|D%5>b7GiXNFmggfi`>g0; zwR1-LYQvrhDv!m+<-V8$C3`)dhn%J)S|4&y{^r4yrNwbCDyBp|fn(&SnCY8g=G9%D z7IWrRn{@4WC$?923)lxjKWjOL`QuT|`=ghe_xwk5`)x&7B4stk-!(T*POckmxLS87 z3YU@HNvC)T)7w#ougJ?u{@Bm9Nw3}#8+l9v5>aPe-V>7X;VRmD4KxiPrKjYxS(c86@o+Z^g#5vQlE;jLFy^XvY)siW+|i>lo}#tj%4TP%ZO(akdfm_s{mc! zjSo$%%?3&zf=I0;mbbo%q+q+m6_mBe_cP zlHjTlclp?3S2j;x+KKz~>@iq*x0+UaoErIen%-GAtC>xR~UE28NIcqw_&UYR#mEQ=K%N@VSRU)zL zVzO+-pNFTIZ)4-!gpG?t{zE04T#(vfXI<{FJm~9V$(~G-PLVtKr%~pQ z4Dk%s8el#K`3CM$Z^;Z6KGJRXn|+#FRMi_D{e__7MobzcMdn3{Ihm&1u8$AF4l47~ z&9cjQGR*ipgz$q+oT#$sc{x%Qh|9PEsZrbwOO!IFhal#VG4)N7z!TkF_DYG zmb;SV3-rSf8(0WrJ^E7jul{~z;Gb4aR5&e2w8KqhTxeo2n?p8Ue|y>kWA%YW2(2n3 zYQv?gh@IZ;@+issaJ@C@NU`y%o>*$e7B$P;nhW%M_xu%@ zIZj@51pbv}w_>^;y^nI>Epj0Ms!Wka~2_S15@(y|eEejx88xB>vO4YNkk{y`!BdWP#l`k*&Q>4G<9C+bk zvP0ti*NW$YIgfsyDG@Z6tfZ!uyMr!EBwKX{O07 z1=mNk>-!!P(rE|OlV)?^`x5#8?!>}-p$8i_cvtN{jQl?TE1BS3S&3(eWUF7n7=5Qp#;m=tYeF5~QC0u9*AC4&sC{hp5 zK27|OS|Wd+4y!rGK($Ay1fGd#21cyg{c{$M+%vb8E>0Lc&5)o}Q+5e>$`Ml)Y>4|# zfW^aCu&WUqrT*}XLIBk-1>WR zhy?JqiaXsXA^L=t6?i#k0mbZlRZz$toBKHFRFALZ(tSI$%G{LaJ92pqKiyz*4kZei zP>()&p?%}lXb^9)go&^mUj{8~ID-pF@l02hZDEE9yqTu&qvc9dWP;YxWk7GKBx^#; zhqlasCz+_~UNN|6U>6t-W%;0%W}yaDWinGuq&fKFc8>4Fcv09U=OJ-k!OB9R zw^WTCh`imgqOciGthfkJt8m#RuVbDQpjLYT{L%uP#2OcEI4sz{QHE#P?zj1x277Bk zq6(y!ZXZ+|XaZdix~f~1F3$C&n2z3TH8mV<#{erPVphYB7r+}Df4R=tAJ)G_dn!NR z(gwd6w{9|BH$^96MC5dtLKMLvfXWMF_991=r_KcV5=sWK&9z| zX|{F=y|zZ{NzTD+Nu;}2>%Ss1%=%Pxp)$$-Ab|yM) zBDvi*T4c7lHQ0Awj24>8?l7NMPH8`cA|Ih36EQ+4V>KYeDcc$1b-8T8-)$Ypp8i=s ze6+Bxtw*6nA$WOF6dF2U^1A;qFHh5F0lYwB(>{V3n7Eu%FITs~RFXNXLwRoG66>lV z&>QP0t!6|{?dz9EU#AS$U&m|RNgFa$|Cb`AAh(v(46IAQ%1PC%31euOkXlWIMK%sxailiv012ZZM08bN8Vm z%TxBhViAJX;@4AUP_H9K(c!%06PF1G;Bi}YBrJ3SOQidgns2G5hJfhfO zl$xNDMf>j%r4|n8E<43p%3XtmJ>foFSK)nXI#U+pDz4^X!hBTxASZ!(xa5MRSCNB3 zz_?M>pFx5Og~7$4EX>44xCK*JM^IEC-#8s44U94mWeo zD?nDI1!aIE0B}q3?GrHCMPCPH}O;%c9&IctXDrbil z6*SFsd@*6a6+`At8lC*Jt9ATH;^VNAK<7mvcRiNEqR9h5U|Cxr%p6HA14(d$F%!ZCNP0@O2IEwl70hV zhQyC?J9yG=$Q`%8i-^bdLzMVT2Su4fSIb}t8CPm-^bpJrQvCl4uu$F7r@``Wr@I@{ zxMA-}E^c{D?j4$;*kYUTv%xDY5V3$3>e5@9?+I!#Z3@+#bx-|~EzRwk#?BZSP@ z&q=coB4wA+XZ8tFW$^oG)eIQ8$IPz+w#5cM7)K3JZ{C(^eJpflCV%Doixw@86XsK# z)cQcMIL?^!t56)6AF-=X5pBslfJ+8$kWZf_T3F}Q_0w>xla~pRgCd2e(%@NUx1UEpJr1V49xS6_3gF>oHVwNeT(MElR4$RW9Q;Pb zb~n9j0hLWoPHgyDY^F+w)~Z!Tgrf9dL}8BOl(_F5|2W1IMDgH*&`wjTc4v&x+JJGy zjVLo)yJGZ1=(w2A6Nv5*#`+}X_=uig*LZ?&LjH5eK#G0Sf^5=AH@m}1*p-|88Y z&3aPf&dtCV>1en&WT}f9$RvCVDouE?=O(3S+IJBXua^mCM7R|yP<^Vp+uGF}0citf zdhOBgdYkz9x(27S9Ho$HV}%xQDHbR`k4bL`3Lml#>*QhWZmdIz8>$@BN^DG6O{2Uj ztfNEl{f@qQKcPK}^WLExSwbx~r9DTCI!Xx6ocVn0qJ?InCVk+Onf~nCdcY#KlQkAc zj}?CH;go@96<*K+Zny6M2Dg3IRKc=iY>v8uM!{8AGF>oTH^%Q*xVXapvLl{RBQpd+ zoIR9Knr!;c`KSWIyij@VU0%C$$NKGgJcN>0^s)O#xDRDyA&zHVn zZg^cN-|@xo&%r?@C_SuN$}Nr9jQ-Evn|~7Zr=miuU-s#`s>$@*YNN{;+*D~&^YhY6 z$6K+p;~nb6*=lm2cy-ig!GsvA>Wb%AUB>t64t6XL7l8&Z735`tLf}X@Apu&1UZN(f zYj?yVLd}KbNbQbf6HqLlb`et0&2(**U}K0lKZ0hv#P;1lK4n>9LZ7#Cb96Jhn?S*^7@L(1GWo9K!ZLxn}&FN0Yt}l>~tV0ojJ82hBSj4R?*Fwt@-_? zhg-pA4eRxP2zPpIW$SH-@xIQZHpJn~6MuY^EbYRISop%3I{May6MMsNVwl+qJcdIz zZ5xYo%>^(VR7DJoBXi5AFkwzOLY)j|uc4l*N}8O%>t(0lscMCPBJASe(;6)_ZwFz&$8HLljg;hd{KtxP#TvFXJD^6#47F%{|%b3Hc($s-88tIr6?Z z{d#V86Tj$g#`$*=SLnFT-u6u{zcE@YDv@LO|7c`d5x=N&*wlGwaN_Lo($euFptPC* zw^mn7lAi3wPRk#fCHr%JKH_wy!oHoUpV9??jE6&Vgna+Ny{~GjMGr9s81<&{qez9fEW@AIsWTlG%4JDgtwSm-uoC zc!PADKccWMoo4nMn?YbEL?^&=oVU3ye|b1Z^@04nVB1+jXRBKpM>-G2RA#-$U@h&GWkJU(jSP&>8tKGx+z zPdiH$b6T}plc#;KKhi&(Nua|X- z>n3ynRiSAaX2=}#p3be102R~R`R1A`WEx>T-&aFye*t1sZ7f%8K|cB!qvgnJi@rEI z)t^1Q_ghi>rP$ZO=vao`V5ulo3sMxA?twh%8@C~1WSL~5kC#rtxXblmXZg&_)@{4ju96?&7B12b|eUC0{f$rx&EUD?Z52&2}A#rV_|6gj|zu3h8rPlo~ zOqcf`M?JBI8;DOtI&i6VwecuphB`|q5F>S2F!7j}A}lC4VKaox$00}k5>qppwb=Dh zGs5TdPhelG%8DBnK4D3I;21($hmy{Uj>`pSOP`nR!5==KNBob=oxty}QKDphms78Bj@y_Xk)NAb} zPe0{wU38UrMNTkaCdXP0MYKlg;iIvSp_y5w!_x&QjgK^pUXL$`gDp9w_vWo$wUQeX{mny|R4Pf72I5HRDpS{HXPfk6(b!pU z(vPf4FC9JD;>7iH9t=DN6OT&zO`!sQq^V1n9?)?I zrCj`Y(v#HH$&Quq8Uh1O2fTL?1d~M}JV7&|O9ZWB%$N(lRvVCI$kv5erGO(r>W1-> zcn*myWgu?s)WfVQ!5h`3-RVk1_R`}_+KTSF_OP!|K?%s=HGTmO1|$XQJ1SLOqnd1= z7)bLh0%aq~W)(oP@dh1esosPAwB2;sQMiEFM>R+lP~}(AKaV|GRM;P(td^`oW_xx& z#PAX~FOLL0uR*)ZC*SabqG)f;JjgdX_pL+Y*bXJK=~Z3#3Dk%hvE`dFCY+op4&zqt zb{cf##5!$WuYsu}8mLg>2gh*N@-*)7`Jpxpy%1~36j~`G1JI6_pMm@`n=rV9((Af~ zpHnL%QI}SGA7#>0gm%!3y?^ysT#f%@Ntg~i+!@6op$H`$95@nzUjtqP@v*prPbf%s z?@)gHR-x_(QOOsAKkEXwr+Nt;oM>FnXm`d!y@)1K_lDudp%*Ygt@c7M#iB;k;M*@4 zEM$@Io#Fp#neSF4sgZrriAAdJi|{*^Zx%IK6sor-Tn2Sqd18S4z1 zBqoO(B&ixW9Vu~GGxKK%W1qln%ohOb|Fs)cXcw0`=qIZjg>u07YM19aX5s`a&Dg+XcXSq#mmFa&%WmhyGNxsDcT$J?2xUPN1A6ov z#_RSMWVUFFDNJNcI2l?;{+3P@KnzYmj)b^c&_@(bCl!`4c4InX6S*Emkx%LIr=qwl zDom4;T7eW-1eCUFc^jzCT}9Sy1=6aggGR*_eTW|y_)r})!LFV=CSC{2LT{Y1jz8qa zZV<~3eG7_xJ6}dI%YvckRIhQY;4f5Ao(tHA-xO|THGZWw?x4qSh$?n-)VYZu2TrjO zJ$ClRKGGa(o`N_MRr(esyu~|Da9k3%#_eE>@T}LGDYae`NE|^dG~ru1AIzq)chsK( z?`C-y!07|+a)KrM#4UEL@#AOXeJe!oKooc_7P*1}&$)iO^6^c<8r~!=I2CF)7G8`y zP1mWZhPl89Wj`71mN+Ya?8wvIIUn#BFWea$FXk#}thU;Xfd`s*G!Y{{-5k-4o_60+ zg)liUT2pkGzrLO=b9^4HUyaA8?20(2lnYUvX2Ai_a^=s`x0&>=AFw6w7+Ufx{cDq(UHgJh9K|IQTA&Jrqk*udK2&) zDYrhEcBIb-y8whE7M2{GD=jPFS)q6`9{XP~2pRm{?y~IrS3&X%Poa&uI)vHviItWv zPF~*c-$tFT2R+Y&UBOaKg?c&XON9ob{)3K}qE}rc&LZSA ziBD93oP80uW5!BWNXvd?obcW@$W4YI^KojbG&-@sPVU7E-Jv*JPotI_0~Ir{*4-c<+qJ>}eX_^2DqGEs`;O+``lmX-_x zT)O$4f7NQ~QUmUx$njD0Q9E`OCskyrxiqZjc({mA zvi+VM|wkZ@vn$MJ3TZ&z^%qeRlm-yPB%nb?lp ztARGA?;0k_zTM*@OtrtA_Yls=?LqO){9rze?(si%g-Lb%6RN+<3{Jy0x{1j&5JqE# ztl8GHL5lrH&oA`=BTj42rgxSh+R)h0I&Z~hA3WAP`K~CBAWMBl6l2K!YOvz!O2-9~ z^QBTB-Ua+5QCDTPFDdxytukHMV5Gwcg0|Psem-X#(0+Kot-fUIZ2t)LCZX5w7T-oV zMaL~7-3F`cD1b=@#IVXuCT($1eCF@Dnw8i4nnCQq+C-Wn#Ri81w6$%kUpAF1fxJWx zxCx$1gqk6gHQW@OyO=DC>G4Ejwdqs~A~m=+ETTmrF19*@p$VY-B0K4k=yHzQdETOo z(EM9BF3_k|)34{;>WY&eIy}*!j0CN@gL*7hnOMT*{SB-cw7HkL(1{$n$7PAEb?(X= z0;t*YaPZkrNDf{X)mBA0`g#8@(S=6U-k07j4}yf1*y*|B(v}Ppz^StU1HnZ?>Hm?o zOUUO5I0#1-JQ3-R%!*lKMrD2Zldy7m6Av3ku&5rfZW`xYyKUNDvJD9_%f*>wG_XHh>(O+9FZkO2o{#8bB@pmD_*%a}FkSu#WNcE2Ose`?o*Jf%P0 z%AnFOY_cmXQ4Ikbn5H6;4?%=Eug3A#r*(e{2i8EKE!8L}2oO)syco`g&1zrLkn<&bJ{XBm?lP(68+rjVV z=W%b`=IB2HvgeSY@~=oG_YWDC*H7@(#OFjj6W+?#BD{lcE=|0d4CN+syxM`~hO+DtnU2E(_>;LeskEmq-JU`k!20=#~aEr#`s7!EyYVS@#cc8RIuw zes9B1zf$&Mg_HJM@bVVIW<-$!14ywMYdKFibvP!Q4l*uB!&C`0%|UvhlsFWdzQgGg z`T&>T^ThKvP-Lv^%1hlZ_d3oJvQQKp`<3N9@7W|z^B#F$1&(K0It2Oh=cQQgM7$Hl zq`DCe;W^Jk7&|7g)t(e2j=V(BT11zu9jH(>H(FFx8}dmlNUUr_M54qDoAU&9Ku)yz zt9~4={tA2+&n$^<3jIJ?GcX3r4@I%P`?HKVE6O`vmJXYFeFx9BRhXowj=9-cwm8YE zo{x8t$?S8;4@aQc#=4IpHIdwWGfbP!k*qE0M1Z%iK3>ZD6%lAQ?Jl})oRqNqR83WE zki>%=O47goVunET>QgThS)Z{>HQbs~-Ic9VDhHge%6ccF%FDM@B1Jm_n60=tCZ&`7 z3(W{8i7vep;(oOZvCRi|k&8!a&r5B1>$vzh+w^er^aUAf_FCrD3dWv(TTl(BK8lBn zqK{7;e%ohrS>^>2mV5C%Y}vy|2bTktZ%`KqZsRbor*RSo(HX^Cywv@!QR{MDyGZ}M z5Ax67mesgsR&|HY-O(5tE$6bM3DV!+%Ov8zg!Ix3{%GUz=~+`GvSY!Zapi)YdzW&r z-7HnMKQeN=%6JbelCD#{Zk&}1`7anu?~J+IY=ao5sJKQpq#4+N@wHWm13N*f`d4hE z^d<852jJw7`!pefbfcc6p!>T=YjX``Z3?=|Om!6YtxG}kU}+b7d`vG>i0o^)Eyajt zls74G=o(^;or3QcYId-MHV!OWly4~0DR)X9xzra|s3PiEl|eFadmuGQWx#@Naq~uZ6h3V{m13@VvQBT3e*}crm8-FqFNx)JID{qQQkk6rfBUW_RB;Hs zIdTu2P8Vo=`CDFxyuoC^m}>r^Ushh2ur&6#mtCW#dsR&;lj@f0qE-d-V~NU-M#Jqr zvxuLW%!u9xeP%a*P$(KVeHL^NCKO!VqtUozYDJSFbq;oP z2F2hX3X4`Kf-VOm0BVB|f#^gm+qS{H2P|!*RAcFNG8FXrwPx(f8Gag8l`{ng>AdSbRT9{`I7EtK zqEaW+yRS!JBtrAc0E}rGql-oMEx3}oRs7TYwB)oeQkLRa)a@g_KLeE!CEz}~TIeN6 zKC5!QdP9K+npb+ zhonX`odvM)F(@t{l(H$K?YU3E)(5xEyJ&HynsbHDoMeka}ps@PA8kBHK*R zXvv^g=8+Xh_F6%QNyOdx{cs9U=-b?GCq<@4299cZDbsoaaRgHGP%;NfPJ}f=o%*w~ zDg*DJ4xYWVPnxKZ%ZZ7^HIR%M2Ck7B(U+}|t;$}wZU37GiYST!R+{zv#(CY^n*$1n z<)93XN)z8K(^Qw*myd}V-^}%Jw-sp&;dC0IwTTNVr#M3d7*6KzaUMQOwu!r&K3s?d zpFIDHTrfDFMF%Xcm2#wko4^7M*g3FhY_&EIHzGbaCcE{EjMgf|I?i=X+U@>4QO%=h z^G9l_TlgzR8sw!#P&<0zU&<3u5uUk?@$J2h66`l$N51>JU+8ofq&PaP)jV`>9jy=E zP1(#kBa>Wi_YpAoNcqkSGJ4cj1##;wQ28jfLK8l%llRhj&?>&K2n6O z1TUlU2Mg+?D-$oD?u)Fj&-tu6vf1VPbbf@^6j|oRkifyj1h+3#`^27vHD*}Fx2yd0 zlrCdc{8lCgXTXIvcK!Z#>}k6ms(6WNKicQ3dJ9)}N-A?&y&&iOcA4e;wwc0cEJmW6 zEIA$9guV7uV8x;cNeHO!){7@cXhgU9!B4?Sp4^5)N?uU4I3j-Cv;uPV`t^7tkp4Y9 z^$7^Co%Pthkhv+i6HBA@uo`v?k4ft-+8HL7^hBb^UrM{v*)M&QT=8MoA}GzCpuoVQE49nnj+AZuQApw>RbT_h}x6 zU0D$4@397An8)x{KrcED8-M=d+P8WsC9i90$~#e6QE+MD%^cWM`^s{Tiw_HZ9d-Hp z=dVq}$3%UKtAo>3)6!A2MZ%XyX~jI7j`lJ(&#Z^pfMtLK)!rKW+@1b$oHaf3a2eV$;DN38kL_28Vb%lH1$(rN57~C?jRmML~+>L zutKfzzeuI;$U9t2vurZLc}H51Nsc!N8kfIh;^b2J9C=8c7fU`=CxmQA7>zdzanDzC zI+aN^!#CDNX!YLJoHZsXYs8z&Pw55SI0Sx~E2}M&F?g0)71VdMpyM%A5VR9+1b^AK z!hZB{cjhqu(m-w%Rl&ztmf-Ix@`TKmO${S7E=DRLZ&B zn{Z*6d#peLq?!iy1mTf!hp;g_9g|*S#6kPKx|yXGOEwCg4LbAEiC5t)GlgJ2 zQs+;RJ$vLq%AIwO1YwT4^mk)4HzQZnDEix%0;0pIg|2x7dcZHja-SyA>L^N6Qz>rb z=xb$lbF+D$lqI;_?1P7O$rU89&o}+_DTeFgA#?tcmz+G!cizq3?D;Z0@R(WtTHE{F z1zUyS#@}5Gll<-bN%{Q%`>mbj+&hrxd*+V^NvprT=X=-k{!r4g8mdHXT8a8;MbJCEQ~bGh z`l9tbMjXUp^SAfy0#Us5SIxw}`>_c~eaFXHUioju?fmL85FT~xnRjYNbio>7VY3MO zDEue!!7%9vW@=o$q!O<*sgQ!6kV7|#48A*A%FRc-q_#yD@Xzu=c3N~3lc0EwkH=Qc zK2slKDu}S98G%9uNiHQWERu*v0KFT6zFPXZfJ+iycPIaLX9p*DX>QLGOEG|?>B$R2 z3Pe=I0hoE}oJh`&BKuPUI4X@A^!Yy~&E9b_6u~fofV#E+Ujq8SVBP;TI{y!k)+E8m zO-7{P8;GA!E*Jg7tA!kCHOk_oV2lBJG|4f+=Fyh2qj^b(jK@`1BlY!Zb}Fu-(05WP z+nmSl`YqUKGB50;R6_3k2dlspi3_PVIvd-2X}F$WnggIVMFp;hN%4)T6|L?i!AEy4 zFO@`O?lQ2K#=2*En)TNCWhfPPfR>}kFPq%Kt3%FqC1IKmUdN?Z9QbEv=*rrFMQYOvt5RpRd<#6m4aIBbW@^#@L3welN=xnp;|17T24UpKGP0vaMRCN5o8mB)%K)5#F z5<_dbXuE_D4uNF)OzOe?Wd}jCE?%{dWyu^eyy)lRieN_Fj%3ylnHL&4YL94(@}d@B zR;&KtZRTGKWwx%dkGzoV4)5ItT~#pX#hNBJoU@gvk-Plz$E&^uvJoqIJ;&^2VZjBG zuvHBnj%za(g}%;y$*$>B*CTp%q%H$nZRpZ&G}V_HT+VO)I*XxSdIPqfq7&NJ<3kKv z`tOe*(&s0{zbNRkvE=aGe+cM0i2wRn{C5xYe|hn{xqJLu-uKA=^P2za#s6;w!2Q1k zuy(d`GXK{K!hb8&KY;pwROPAL=T+{IeWz_g3fMw0qI-I~Vg5|--X5yj}SH=fsSK`5I0`$$s4;pb>>vs#K&=gqo7nP z9`xWCDB&-#R!ve@FmRVs*^uN9I&*MH>=k9EEf?MhWwmWToGSgY=*kxW>t)%XMo5R= z);;!f(G8CBz2+r4Y2b{E;;WC8t1Cw_t}RW-A1K<*v0E?Z2v57(7>F%Z`5*%)9Cj8F z5RPjdG@Xc#r2P#p*kcKidh|^vtNt&zO6n`iH9`L)u>K8=9Pj$E@fIFY`704iFuFC- z7B_c=Co@97Nxay&4T zT+$5`S~#Au6O_)e;X?5XH?WUz_$JS}6UBjFVC*V&#K#-#q9S(-F@c;#F1!GF)y26v zsjgO#{ky&=tQA$Y3!3rqnL|!IK^QUWKj|Me`;>v~GhaST*g;37DIO?tqI03F@wy3| z5k6On0l*x^NyB*qMRf6WC#C!5AwvtiHu z89xSz8xb(973|;ysXf!6^MjmEt#o6ohUKfvfODD@Irl!mq52#768wJ2^RGpumvk^2mD zE{lYpql2#P@-liCmuYIHpBKDxI3)DD!cv{O{8G)0UWH6poS<&;qN8G78=}hw&zNA5U8A(%Zq?z(VdYI1M1#3_5tH!_f zZbhJ0HR0y(3-bwVX*_5xJwi_}JGpE2`M57qal1kg%XVdKHua(4#110K2&l<0hfB&( zhQ(ghMnhkN6da1JCE^iBF@;wZ9*PXM=G|+#9LZ`FlayPLQ%U$|_@uV8080aNY2<`o z;HFA$WaAb4ewnA|b@bhrgEsvv!^kvBziDMQpP)OUphmW7gV)87-Ka7@dT!@sFjKkb z$RMlACAN*uNYsRT0j%+l9&U71&}1H-2dYCGwtCxg`7^0a0Ey5ZJwEoiAJs=qY{{0z z4&-T3*eYzAF-SXah|CRNK`We1Q{>wI+_ePRp$$WP7B@W{#PU^ayfnZpZI0fU(-g_z z*fbCy9PV0~?UDI?AQcVIbo7jq;H+beLryS~KzZft%a zhwo@}V!bO0$L%*OKVSZRIsC&q;D?VhX!e$iPkyL)D#IRK7m1yAsy?|!)502%#cW-Q z51l0lNk8|s&rIwA?kVoc&_iAgU-kj1jniUw_JP}t6JlfVBok1Ju^Yr_@tX2|Ic9{m z8?4uWWYajhJAk**|o1OhK?YVpRG4rzJo8ykrNBt>GwDH@{af$hn ze_FPpr80BgXv6MFt@Z+dSUMe4BFd3jlFV+Xp}?Xo=8sgyS@2vgFU*EIA2TS{lvb&i zAYiO_=+G{vcWiuLt6r`bAyD2Sg^QH7b0Hzw*@0}Ws2B}m8IV-6B30qk(PBf6^FT>g zQc1?zY5xmRR{3EVs;UPMz%P2AzEG6e(J8N|V7=V~Rbrq4Rh%Z9yseY%rP`uXGJM1} zXy49~OZ`VvGs)Z;l7v#&olBCDWiM?C8N3l}pk~=(yJ&s7q7Yh3UXvrk5lq!U7OL@% zgajQ3(9i1-re0EcQF7>RY|>+q4s`pd<`=9#HL8pp#Db$uSJ$_+Wyb7d=Dgy()i69aMJHSS3YWH}g~MIXc11_m3IKHFw^b(2LE)lxm}Dxah(#SOLZz=YJKWn@+%8 zq`+|Nn1aZ)Xc%u4cp2dg%r{N^0G*FTEve~wdX0VyD+@iXmX;J>+uVO`s5hf7C+fj9 z!7msFWnfwq$FIcvJuM;y$Ppv?%omjqaWxKSvQf=AOninn<(u5 z2xj&fVZYo#an~_Lxm=OQc`rcX^MNck(>a6R^9AsoCB>W<6e^fwL^Ojp)C>5;kc-wK zei#qvF#K6?$QDorc5kSW*Y-C~1&57Iw@C1*z{8JiVlK}#S2b*|A^~}Gu2pu`!X9>Z zm)*$c?oL1WZHOi>7==DvxAba8zuXL-wsc+ir(G8|E06jTa6{igrG&23I$&R|R9AsH zH4ExQW{;$%RaS@LkmXWk%D|;td4mhT01~TycMNsTx1qgNNz-A zJOy3xTlliHG8<2Rfm$JiJFd4HP9Kz^zbYlU^aHc{6+|)CT!7KQO&-Y&W3^|#|@Mq#rtoxk-AxEfS3`X9h;^zo#u%geyQ)A#ifzE_zq6 z&82d-OZDzk1~f%r>w&dCZ%pfCgMb6r%@C7>TdII?e#1bAl}XZlM^DW#%QKZ*g0YJM z#R-Xge<#-*mWELDTOlZM#TbiJ3QWeMPFF47P5%eW7f0hi3P#j-W~q)10aq|$h&_s2 zy(OlzNdMx{IIfpRmA&ZG8T3!omZZF?9edQ`>+M=WfEXH_iAZxJsTgArmwwhDqajaN zV88>M-&GlA|L76#i#+cna$a1PbP3kNF(%kaM~ek_$c05Fd`Q4J=8a(^da8P3QA_*S z(GMv<`T)hPxr%a0&LjV2Xp8XW3#aJqy0rZ(-lc@#r7@Nh(^y8e(FAk)4@{4MqNf$j z`o*wdDrOok40>T;us4yq&Hincp#)oR*r~7^g04ZlBP+{JO0^<u*;1zct= z6SZTYZl*;-GMzg*)6ZLH`2xqSO#1FFidhz?XcPbXb3rHF=(a&4;fT`c_Qq-d6aLJS zMV_Be>zVBSbjB{?KKQ4fYnnl_>g_KR9ceZ=IdFgL!x-0{5+;b|z7!~*fZUK9&$|X6 z=BzVoe#EtRRb92KGD3S6ZizZg5gGUpiZb#S0ZRzRb9xrFc9>OWmImz60I0>0E<65; zP$O4`zRy{eBzdJCQiZZ2)Mgko&fmeRE-Z)J2d#lyr9booMSed$O8cW_k4BZ^bB0YE ztx;DBk$iEO(0Nr#a6r5UFNX+tnMVdVE5W0Mjc95&_cWj@T8@GZYQ z{q|m^Y=is_KWEHD-XHcOBZ(iUtnHPMqgIr2`z3(iz~@R4bFZ~2YgYQAr@Y#GxE=UA93Gll)mUp%h7Mn z6VMsFU&dNDg1>?rm|Ji`3om)&5ATE#Vgu(Q1VLqkTnjSap#Z@jl0MjgeA5lya$gDg z1NT)rE;TSR1$x3tYK3K1hI)s*TAlRJ7PFl+q0Jg2M4!$<<90dXC)4<+g0>=vf%C=J z(IxdwwvZ)+U81)8Y415kdB{elxlJO^;$Q{^$V>hee{cdrVSh^{+Zv8&2YG#RhsxQA$lOVYCe*3f?@zVl7cprYa9AXlAg;#{#5aRcuc#eZwz>|OBoS}`Y zUqAn=73&>|N^?gd!%$LF3N_eS>J~VBZPSyE7bkzDO^x2#kKB`HFb+&VLb~D)+sYPm zyPS}5OaOFh+y=mJeI6EFnZ9ql5qHM#m>vJG9NvXK(qE|G0Y;$c{~hdN`5(b9VK-Y_ zv+u^f{~J?&`43b6)YnOKPZWl#pbb(c+>jJPEF_$TY)))UL8s2$J=V+k!uM4BZ&)vB%f zoKAIgbg86r+XAx6eWwWD}mGVq#HNYbNqJXROzl5moN+?5(Lk#Eog z)Y=-g36@CNAiw3PFM;Nv2gQygWdnIJe{emuLT*Tg2fq)#tspC(z9?_oDAalbjopJT z!$>HhXtFc&{Jf9k=eei^67?T9usCK)k@W<>-MJG%M5Y1II@Q71%&U(;a}Sn4TFV!cFtBQlyDbvl0`bHnBiLjiL zjmm6X=9pS(+%X4mll0#QOH<~Xf>ZPLk-M7nYcV-~7LNWfPNF&{&bS}$`P;rXy z#gm7dYDR(_Ba(PMRmemqByO^BRvZ7CnodnDitm04zfqz|X_hrYPMbpR32sh_d?`G? z>oC=!3V@J75&mm?6r088Ha|A0i#_Fn4_;E5^`{=$` zZuxhXOjru76uBKuBvSq{ShoQ((Qke6;7_>%Kc+cw*a-l@Ms(L#UORKXkjyN(+p?}X zSoynL^mfW4H&KgQkAra;pOU-GLq*GD?FdAI&#FgrCCaBk(bUW8WSH5g4f1b5B0O38 zl&k9ll*Y*T4`vS8q&+p%xctc$n$1HS2ZFqQh5EDjNd;xYAdPAn`Y;9i{@Bx^#Tw*O z12Ek|PtHl8KNLX56)-KLTEkaO823}+$LDC-5{S9Nx&op&;_@e3 zQ<-=N8AC&SaZ}@5!Kmo0%XBu92OZHV>c9U{Ele}>pp5iyw-maA8~*LBe@^4bEnPoS z@*kI2-u@(~CsIrw1b%4bnmX0}yP-Zbb&@*NJ2~nK`sAs_1Kfah(G6MoM%28I11XH^ z1|{ww^S)gGO03iK=f7d#@ZoAq<}0u=2cdKaq~3q4v`QxtMzK66sdpD;jVbEAAuLi_ zs@A?aG}0V*#A+=mIpMh+X(aAly$e%5XMa|NrwcKYjPl%=QZNF3oPpq>(PM2OVX?2>jqCjLWmiqU;O2G*4FJu z_m=b3($~w;zaPATQ>>)ufNC-su(L?V$l^V1_j*mb*6-MC*Kc6qqaVIsXPrm*T$C>| zSNo9YH7JWN>%;G5eVI7i#=Xks`b#)&>FARYAMe`7g&D;%qciGU!smo z=A&4z5S})F4mZ=ebirN?lbFO_4ys}bsg)BM)~ltCru{(7o9R|Uvi~h4GUX^UKC6Z+ zj%s&YEKet@08DdWp5a?(=6^jcZ52iJq&VD3Zd?y6ZG0~cOnYk7>3>8gcRkOOA8aRA zeWn6^V?^!O=Pfpp7@Qh)6=8>kEf5e7Cc)lK95!LY<_Y&|b|SG>Be!#rH%n=rN_vUZ zq2~C#p+7aXZ!DjzS7CaFImc)S!=W{9;8{OZqt%>Pk~O=lEY2w#94q3g5Jr{pYndy5 zOC}aSm(9KwEIWE9gY#TTmxf0|#2NGf8$#ZBu~HWv)$-Jemqd=whHzKOH)P@gk=(U* zzmF@T+i=_K9(Y67IX&-?UKB|a$xSYq>zJAQUWMFWZwnBk8z-*&wmqXV?25+Bn*YQ* zr|P2RfUXY#mOI)$Q@k%-L2dNzo9c^nQf!NoN(clnR?U}eS_p&v;i*V!R%d4XzW0#ZJ#Sq4WV zW0x|@o!on=^iql{_CU&LBBcj2DX6l}KHl7pp@FV4vPv2%HH(i_=ymTFpdelm`*Q3t zB#}il`SO;_Yw=2j;)_6|o<6cNpY&j}d{w%AJCBx<`VMwsa1zQ<+sR?uR94&i^G?lq z$7g;nsxf*k0M-HzH|9b^^y!z1hTPGRqEHG+plTMq>XBKY2#%|+mY;&R@qBlrSXmb- z1q(%7?3ML#4NE4?$|qA|^4t-uL|bf2T4UM#efo-2>Vn{F_pIv;yFcRK(~Ssu*~B)5})hx z9N^d}VZ~fx_U1n-XZyW;X5%Xx!+-ylpt~RYzPi;B6lez9>=%irsz1oVFW%_~7Tnds zxuC*2#|^>j^zfzx2$j{<(u!?$Pax9jK8Y-xz!WnbB&k3|C9GphCh!O zY!|;+?t(*@1J$=|T4=1tXtKPd^j>yCBbi}@P{QFQ0Zs}gN6^89vE^o-dI;cj4M_ z_-uvO86a`PY>u5PIpAl?p79y^RnT%XO0CZW(CmmERyDT!0&q~Fm>;-O$$OMFCEW3+ zrQIdCmhZ}`_(%TXnz+wV-t@@7sHSDXb2vtwan*h2SfX?uenU$rjvVz|C{{k(4q z`(|#+66G6r#~#R>3H3N1rM2;#D9G?ej`l(e)e^(peZyvN&mUY_}$+A=m09ejTe7%kz;s0OQNYY8$Eh zN$KHgbc6g|Bt}vW4aDc>-+$C^wV#R8#NRz{fbR>q|9AEKe@4SZj9gqr9PC}49c=$= z1vjbxuQuvWbR1JtlOPfLMk#ENpE$zvFsxP=v*;Y8WFX3tk|GQztDBfgTDOwSfuEt1 z_f=PZS2D9$$bZx2bKVNL`Dmz`>)`fGXCZ19C60WL)?9Qx?yhnIex`|~7@2!qQB1JM z;O(fk?qQ{>m!)Sbt?y>5mui_2HS&6Nb=rBw+EE+AQZ&E7FUi`cG%fTsQ+h)aliDeF zP_tngiy@zco-x6mb}LP=$l9fAG{Cxqk#ThewqJ6Es!cY_9F9~oSZIcFOd(2Hup=Lb zl@mvDip;Mu>w?P#6rms)kE5weMPm9(d5G+BBB%j3H|8SUi;Q)!rD$c+>?ylQmV61v zPE)TNrB8O&Wt2OuExqdZ)UC20p(rv|43AToTum^I1z{;VWH2wzpm+x3_ZP~k@O*68 zR1~A{FJo88M_3PRn@+Ks2PbSnEF9Gbt)dwVSGQ<9Go01XQ8#v6#T}~fm<8fss3&)_ zL{iW^RT)Pei`Ci{S!5&Qf|$_u!YQU9iU|1948whz?FG=`i&Pr9VG$Apv9ZtqjDw7h zrQm3~Mro2QF1$gH3!LV;N>a+cR3^z8@J@CXh_e*oPuJbNy%4bH#;`7`k=c01q>gfl zxInkicN|I%FanlLT26L`ks$58IKZE?TV}8m@AfF=b4PmXZe0EdlBk#31r5(X*UA^| z$rvx)m&#D-%xXvP86v)b+hnY4R-eocX7)KXAG72t6Rz;pm@;A57N4~Xn1K=#_ilpR z>*ngjpVUx+daE*>B`1wR?8_O>ibdXkPOC%0fQCK(?$n08pTX2PCNmZy0k}$a9-@dL zDp{U032z`pzq%2?r$y>fI$X!vfy;KI=!GN6W8T< z*3lz6>l?Qc2dU5^`W+u<;w!uQ6GTatoAfUzg65vVJm3szyVbh;7{84oQnZT*GZpiz z*VsxZ(cx4KlZQN#yQLr%AKN90PB%XW@DZ3r;FhR8lf$6=xcJVVD6n7EqaPCz@?K)vhY zR_4PRW#=3S2=KP&AhG#NKxlnKr+x;s2=W|W-9863?q7nVBi&$;oj|qIKscqEABInz zn-8CB?5?dvtVlNU*uPEVjGKd2lBCgvjjKzdm$^i*l(oPJM0UUKl}z_Xrat2_@q(blPbZBT|DpI!i4p6LfB5_FxvJ-N>!3M}UFYo_5V zg6*;^*@UFA!r`uTqS&P*e5buvbb_FAfG1A|L5}E&&D+vFOxPr*H5#)c5DpEyTBQG;&6-OgGsqdV@|C(Gy zYBmn2YMB0;m*@5#JjwM%$rY|>wHwd{!eY6(ibC2trS@Vl)?8V98}Q?k+vBv_-PaKV z;ja;%P}m}jo66CKI^o0-1m8dJeQ}HfPnlVL&P-HJNqm4Of3Ha%4u>yq&>nPIMDMK} zZnKwa7iDlXB+*z4wQ~FY58~1zite$?hgB9G!nv^})E5^j(^(7L&wn8ba$bQ^4@q3w zdZ0{_91bz{J7F@iUNxC-Ap!~u5j&QV1S2vMx16a7YS2m<+?Y5Dc5|W(6D(F^Q%LfG zI~(PKn3TH%K7BZk4F*(3&NO}^_ve@_Yp-g_0Xce}R+jo-P2Ig}@?502bjx03w<|)- znL-p~ceu|SbVoxhALUgbTHy5Ji{Y_e*p-#C6LqvHSqz*mNeA|?*(lYRP~0W89Y=Ri za_*Uw!6Zt=N-)tQ9~5~nNl)EQ!kCiQOf#$pA0txUjIp-11{)%-MV%ERW0Xo-_Fbz! zV={A~=HKt$RL|6SGmN)C8qR8OkNmV3U~kbAwNrG*O8hxKA&n*ntl3BMjxG9`Xh*Xg^<|+|H`RdvuhrkZXAPwG^+s` zS(tZ8(L07nBvV)TQV8Y{P%ZFRq0n@7#VLDQ|Ku3Yl=$lLe;g$9+hpL@DtM$^I6T#d zp??+`AbbfY@uHg zA#ob7r;u11CBt)P^D0(Fj}aErQj7QT^OMRCJlW3FfH$unl}4>xd7Y;m$y18#w<&}3 zD0O>gTZZw<-A^`%UPYO3DWb+QF-1KJo1@b}mz~KKM2ugT z_I{a~d!kpMy2uf=xTC*}RZjott4bDX{oDLhF)?%HL7@h<2vhf?O zxM>==$kKdxX;}6n7soyLAHtE^#0w>9U>(@m*SNlD|6kQb|D;zTV&yQuBa+bUy@M8tj6NbaC znCj(mN*oQW{WC@O<*Gcl(B6`nX4EUy{h~MJN#KxNnWBgA8A4t1QyO!_vhP ztmX88pZ^)EK2jKe4!(yf?Y9*F{~Q1PUqki3rf8KmlyCAu`jRN_!&vz(Bf&W!c z&?1^;oF{NJ&g&6FI`i$#{*8oQIg)obV5V(L>4G$=!OXx3+EmpKPir)doYY2Lnm;Q< za(Z!fqMOM%Q}t9CTvw}rm97lfCB~o^EiiOHgxdPO)j@^J%{gxr0+EtT-n)*Q$#UHI zlG;%VOCzglu2|2y&#FpqKY(p&Mk+k9oC9fFuOFcn>DFNAP2Ql!6p$;iqr2Cqof44b z=II`)X6r640w-T-((F6~`B>|I6v6_pBCQ_>7wJ&Zg9VqK5oD#dA|bgJ8x!fCWVk8% zzTIQ)tfq8$2azsr)|PwWY68>TJ{@Rh{;L}L4@fA(@zBBHE&PzbrW&1!359!IVq*0I zK?L&f^XX}$imGTgga)O4mh9y{AH;G}=4YwUFp+lyZu1O#9W*q5{O|z1H^-KyT`b@Oo#?i<+0_lloi`V zASNA8PvxBiamen#&%dlYsc=Jzp%%2E()Wn)Xhw({DA08DX*p5!7^yZ+S=`S|)-1;` z1JN-)3IUv0=1Y6v7_Zk*%~f3TzKPpfk9{-4?g5QcF&V0w_dDk1Mx={qb;Qk;<)btZz3=*b*P~j zPJ9w`#f;P;0|N_G^T*!nJJh`aMG|NI*X~73U*N%+Xk)GIG5$q0^9iN4TFk zyDMp*(1Z>`VmYr1)9VjgAAjbnLNQGp3k}88?0SBGD_JN@c$EIjiRq27IIbI&tD^C! zT+uxlSo&onkXr{^3Vo?&QH6_Z4d?a-GNBs|_Oa0}PqudMB0CCMVc9@M%>~VNaQiZ# zs#q{b*?rjunQd`0?MJeBrZ8-}feFM0{X3o^E*IwY zGw@i^oJ~Gf(f*z7bLh|2&Kro1WzApMAv(HriZA$p8u?F9xaGYirBfJ{L_IdZecSS` z2&<6`Y-Zw$hAQ`WDz{S%cLZ6?TjZ=j~?gLLS5YTi$g1)B}ZRlg5w)T?Il z+!vIL0Lzr0@GWo_?0*mw1oDsU&=lGnI8UkzSLPSSA`A*2aN!T(-vOs*=lBl0RRf|M zW#JRXPwa6+#-G`)1=d2a>@Y*4+tY#kB(k8%=DkXNE|t!q!*>t&tv3S2=K|B7b-9US zVYM>^*rsgnNo`ND%9;jX$3cU8l)l`cvP^6&FKO*vCH=yK0tCygu1B=&RLb^csmDxY zN7?8>$eM=P8Hg{3^iT)PA0-Rw>jejxSf=t|E=zUf3kXun{5E13 zVi_JwG}eiHSqaL53-WfD9b(8{${*-SFW6hC>*;hn$QMo7NRrU(%S3$L@re)c8b_rT z-Eb}H)ztEJj#+vTY8_l*ae%2tGE4W!2(!DUmV7VhA{-NwlJ=GHp~7*fxVnmxGGqp8 zhf<`~sZ|V)+2LG~HM6Xyccgbs;|Rtj6qp>Qz3d_buPG>wR8F^C1wbUIs?CqNnj0lD zCkq!`%~9cL-iNc?{pzSZY_3tF*V@w35t<Ak77m7N^#=aKAYz5psD#-E?k?b0o`@H%FhXU8{OV8qmiuI#kf|LSExKEQe zg0OfC)LH!%WWs=uuk9e>apeDk?10#tC}FM(02(kBAXjP3PBOi9q1SzygG)2`hsI!Z zD*gj{IXBDYdcB5siqV_y^kBPUhI-o!-P?j%4^d_E0jgDOpR_)(IK|G6?gB9B1bq~h z$P}{C33nd?|0^qh)9a*nM)#QU_$@n}e&TEcIW^oES54g@=gpoxxctX8xR%t6>~kqa z@45+CAqDnrT3$`lfumYEJ@!By+4)tGONK}t;oXgOdU=RmLA8iUGpkglGaibh0apHA z$Pbhm6R8YhtmPm0NiTFIqYKKOZCv7P9XpHG#Y6i@B$^4mI*m@ziH*z#r zF4qBiua@+0FJczb?~XH*jhg*t)+S^C#!IH##jJGe0ZhHLl_Sp?6N~T)sa{Ndgv*|=S!K7^Y4DCy@m!)i zH*9*Eakieegnu|@($~9fe(Cc+D5g6V=~{S#hgeu z%H@5uze`zJ3?u_u|KV4by&mh{$Il@>xLr|z%0$t85g6EWm?cpiSH~*SuG>{U(0E;< zvu8NE{8n2IH-xvX1*QBg)AbTI40s+3CFbv7qI&5_`$tjoo-J(sD8Y|Wep&i&?A`-Q z^rJ2)Iqn(&_!qME!Zww+Yvrbje^9cfI{=#rH_QYl_#K5eAv;c-!p*Bv^YalU%`bB+ zQJ8D#7jfK8h(uYQLZwus4|qdLYbUFdw8-$D6^$7B4~!-d^l5B0^fLyRr|+i>IxdFTK_}hy z?3MxkAeqx$&5bmJFW$vVPk2CT!tK;aBx-S6z{EOi^iEp=@2St=zBp1$AO`_H4xVkGaBht(lsIJmA-q~V~^e*64&@s zv9IE^&K!+}M(=~$;zahZk1cYFX0_g=1YhBkHz>%YBzFG#`66P^x0~e#7q|lll*f|> z5lE~~R6W>S;i4UUAbTQHMIKQd)qEjTA@jHC+JZ(Eux9 zJD9y&_%&F)0{9Bzdq&0IIrHJ5vica+LO*I)=wXmVetm@y^hD6LLI@1RDH1MG9PiVS zKgZpm@Z0TY^Anw2gMVse#e*e=<&>jP3*Rub)0UQSJd?hj7`&JUuc?RS>}P zCagFBwb&8-V*@0*Cxc5A$EKpvvE&BYa4mL_Y5Sxb^V3@w4IvhhPl^UMg3jvjTZ}-P ztOiLe`;#nzFv}rV#x(vBcAhXDWCT8*c<0Gr*HU=x;cXe%n6rQMPY!g^0&}!4lXU6~ zE(HZ+i76FGh_}p>JEK8wMPQYlMA&gmhzOQe(YL{M;Ov{doT4s#*QphdFZ5d#@?hj4 zUXj1tuKWH?1=2%IL_O8@|Lgz_UiZcrEMdd}OKrN+@7=hbL&QFH%OlSoFeH@}Bb(oQ zmtv+&BcP*PMX!*mG|!+Xw`tp`v236eh4zRlLI!jA=4z|gzUOjP#JO3GWMG)zLp632 zth(Kz9VLVZGHxGQm%gE9i6KwKn||zm2)$A5#s^RX7dqAg3jTFCnKD4Zu8!8=x#rBbA^hx6OqRW~b zVvX5K9dM{d)!Nakw!1-bzshkwf|Dl^5aIK$X6lI7@I@vI(Gjh6S0_X{=ctm^llEj& zx1nOop(_O{-gk1k^HNMUw`;Rp&iikaw%&~|Gbt@GX3}6j8V`;u4~0hrl%d+Z-_2fE z%rl-u&3`2&6i1|&Iw%2KxUS!0I|2mpKEq*dN<<^ad7&Vh@|cs7M&E~(%{L$@O#-y7 z^7^u|lW)r%QB_zYlASIvBPj~k+Y6n~Xb;StUa=LpTp02)vCOaf>j!;Gn>Qu?6QwWw@&ab%2?F6uLFi^sIkGr}xs)B;lriyi&S z#-~k|lm9BGYw=LK{35B(tyV4HQ}zfste{H?Mbctrmt0KKHBHQ{p{p1D_6sS}N);Q% zqz9QyreMtnkdK<7OIRXc@9Wa0dYL>p(9g+O`3ZfenDn+2>!yNufC|yiI09zS3!ITk zP_0lK7qycX-nIEOyGZ5iypt2qE*@$Okt5D%!*X7G)5xiB)N?iIjrOKYYE#aHORsBY zp5=V9MF4`<5&yEEyIK_|`=PDZ$)oBb5R>7P5}xo6l_1Sb3q%gX&=96)}CcTk6z+bT?1Y=8_@UtlIv+tXjkM3K!DZ#;zAqs5iFl zlT6$;4XVC-9-+|_H?8hEqD97}FB#ys73u1LqsaZfJH;aVob)d$({_JORh)_#nXkn6 z`gfyuejQCpsvz;U@;-dPayYIjh*=W8bRu=Vjn&_{!2=Y8olo0Yh2n%w*;$3NTm*|G zfAWRJoCQ@jHmW_Jp8x>@0FU%;gh&_-bUpCNmYS{GBB~=Q$Lz(4%XXA@i~z@Pv6rYu z=dSH<55`$zkiT^u`SqZBU}?QvJ@f!8dZv+4RzkWm(UY?zGsQLI+YeJv7;_wkAsj7J z`hN419<+M2FjJn(1Uyf5_Z?upgedn2Py&8q-<(m;yC}u}Jn6$(@bv&5YQ(5bI#ya# zKRKjIgPLO*eI$l^WORo!f=qTFOvd69tLkdU4&vc&KWQg}R=WF1 zY7f8NgVg3r4gli$o{(WZg2HOTM_e5+Dl#>^s_gZQrB&jrqP(hy#ZsSnm^KOR0^c!U z3r~n|ex;EzVHvu|ZSkkg$^?SyUEn{WmIiojr|Wn3WjW1%Cu(v2kADi}jO?u(-E56q ztsLzCOW7LKi1I;QK>L!bA0f{;NV$!qBxJ`->>&mp3>gZM3+kOHSRnVQF_az#|{`XxvON2(3QRyg@#WntZtkw_&fYsM}!1 z7_R&bdYva5IK^LRfyye1o+F+VRFs-3U(QrTlZ2^C_sXS*GIE60M7JTyiZ+e;7f*VS zVELp?ea@TG92>kv2$-iohCA2f>7b0aR4JzIkd7lSYvPT+BrhJXNpeteVW1~usIBWs>6r+Jg zU=jH|#JuGM>yUG^syOX%^ly-nLr*)j>W+B5{>6~a)P_@&Ci;LlS3pD1T8(^r^j6Ud zb(sbVaf%MA>aAibu(}Ss{VQxdr zkd7kFZ8b?2Yw9JcZFRaGm!Fk__U|(CHeZ_N2u&jI9G)wnooj`KHyvF8R?%^Ea=g4pSM*W?l8#1tV}bIh8sXheBh;Uf#yJcg#j$Jzi&`<5uKeVfl2J2v@RUF z155D=Neb?1qB$rRHFBOlHK9hCVEC}t$?LAn?l6n>X%mT{WeSQbGcq{_pg*=-9e;V3 zP#h< zBo0IvYBDZcl__s{Kk_~a2&RQLX36qTWo`2Q@+(Fy=t{hQJm~vY;=0>Sc1|&|G0T2 z#=hNXfyKZ)?SrNA*uC8S^o6HD{WX|XuxdTePPcfPE#^7l2nDmga_l(?(IpTH{PRSi zsj{%c7zd;RvoUuFP*7JG8sy4>-KM(9&$p%T$I!a7=9be&v!(0V&_&hbh<-KWCE?|( z$bETr-v+w)P7%}FQ{9YW&d}bV_e5$l?d_f_&qcqZbt3lMarTolnvBLZyqwv*qA^cZ z-8MmYhSxOMF?C_RaI81;CCi(mv?oA4L?xT9d27v5pc=7QX-^iR!|&oeoBycU&J4n_ z>4On@wEMZ@u{>t0A`gC}SBWxu1@+ht<|7bqG|=$}g*=>K8MSN)d zE3$D~jD(kW*~2>*uqGJhOdS%dPq7~WCwX2-PqBy1?(9JQr>3hV)#bw<3ejllEWQtK zF@z3a{xatKRU~bc3Xp)?qFI~dH`$HhuEnc%a#HB4dYi++BbW>)By!`SdD5=4)7n;% zXT@6Dd>m~LcD72bYV!x#hMPuaU=ozfq%@DyEHmH%;82rJ?5kIJ(-|)Wx+<(=4!Rtin>9r$`xr3AqG}uA6_vymW(w{pm0nl!O-+Zn!KzG#=--Xxl4EH zA^Vs0Hb3vB0V zI@jFRUc9H*2)6zIo>LS@8G@RY^X6|^KK#6OBlBstOP*qBI0qM$q;SQ|K^@KA5 z=+_r-^MOBqXdmwdt-WxR24&N=vT z$-4MdZM@2fy!OBfcpv^S7N^lda+w%IYXX7zKyl^;(PH(j@hl9imP4H&=gd!FnhE?$b8zfnh|G<9P4w9+*yw_J&W9Rmr! zR*UXkKpeJ9&I3W#$E++xYu`!0z}o2Er0V;@`hYNK0F7)6P^++)q?eIbHfbk*z@K7f+z zv6r1RyVr`7;w#AW01lWG^K=>bln7jEl;^If(U4%lI+BlGp`z#wB|^nr!dm_H^m9)$ zPPt#%Bp_2H<26vA47J9S(`y~i1s!jYACL-x>(zH{w#h7Qx**R<88ST+2YeFfTwMc} z3@(=rlc$OQRlztJpmW#-`Qt~~e|vuOKMSk)kC{Tw!PM*?!i znT%D&|M|ItX$c#S9KH__hKe78|FzbOXew)B8#%YACl%Fc+N9h_gHvKPXEAGW+(BkH zS6p*1q%+*VoF|pU9`n}pudK+zUBgBTeTdW7;NPw0#iq~EWR}kqAIsg;SLY4-@3$L- zz%Gp99O->HKV_Q3`TVMk2;Gs|hx-s~3S}~u3abeIZiGXY)m-axt*TN%NL$Vt`En=` zwuXqjc`rIUnooUZAQ?5E1niN0W`npyXN0s zu3zp9WjmJ4K3>Cp1|{<+II`Mba(psZM;;HzJ&*-vHvcH7fx+_S-cb zdy*b)9y)VG-<|_!BDY_no<{e$rvy732pm?e$1G3BdMan4#{;{el=+K$%9997Oy#&$ zHDajPK&w7gvm+H4UX-4`6O_8B)~^D?i(Qdk!OszC6l)li3a;maRdStx7?<^*vIFmXm zLOe5=-VyNcp8hF;kQ5W3hQyL-?|@tP{Is%ekfTt&!N+fZgA7x#h% zL_#ByB&<#MUQv!~dCdLr+opJ13M%jBWjkN0dD6`@(>8AF@gScU*bVO%M50JnBKE%# zHPbP6{w&yB&x=ebe3W3kdpY-IgM`9fnyRmxpZ46%={LwV!% zk5Kun`rAlDJP(g13@>W4+0;5z3+-~_o}j(DX5=nRsQ|N)B@4+yQUgYC>4hpTY zY4QTSzkIeJ%E#(wbri>pujc;T!a|r-I8lz_VUsVFG!?Yx8Bt(hZ~HaC6M3mQZ+adD z_89P5g&V{`s@$@ZRlTPKfYjukKnH+r?zqH|#7t+mP*2rkJjA++tg(r%Ru{aSv#mdH zvm3a*f2K^;Rshj0^iN76On%!%Tk`N-+z z1 zSP6hX0^=qb!i9G8{Q2Z69=Un8I2nG?#qK6fp0y;S2*N<37|`%DM+@_MMGVyZrgB`U zD=C=WLrx!lf6e8Yd0%^LK;v4?+!{fDVCmXz_21rd*z>yBhkYaAB(K|ae$w&g)IW&n z;NatGM|J(o&SJvU_tFAn4y5J%S@&g~Vu(kL)3mG{dO+yxVyn z+%FX!Uf;&MVnNN{xldd7TlB@|)B;SLZC3iWCX&Z_kT~8k{-d;bhU^RMe%r@Q(EdB6 zh5dh~v^dz=8QGiuKTyO4z$^J%XBoP}3B@WdUVai|M*}BiC8Qkt-SY!-3JR5p43 z9#zhS!9;_Dd4MdR)Y_3q2^j-<{@0)QT-top*m}zFdPvLsL`zvwlo+DK%%nX6@~w)e zcJspp9t!k;Bgf*agRYux1G=XTZ@1$yJvmX<)Xzc7`P(711X<>~@yX&!Tl$39!rKvD z;^u)-vD4d=Ry&Du=Cb6J>NssH8hZAu|NCFicON*(RK%vO8z zm}o#+2$CYsF4t9gX6h(1JDRa6^nwSd5+W-$W@dB?JD)#vp;5cFv=J06Zs_oqI8)}g zaGcXoBfnZ`w2Ucml-UzSd9y}{tun?3THCWQvcNr?rEbP3r3XDv2X?l%D8=zUI;-n? zopINR0tWQ$fwx>~=p~)g>^2;vMw*AF#!y!Jhx?U-QG+YVhj====2B+FS;KNaYmJvd zk|s-FV5y5?c9L}xf0)S1Er*5ith3o4i$q~kkOx&A zm{L%l2(gnSxSWz+!^;kCDZAY#`iK!*T5A;7Nvr8sJF7by=jEPKo25QNUVYNsLFV%R z=4--`KVbCnh_Z=wJ@nSN;XC~Jw(!n*MA~Fgw1WsVtO}bjTIEhxqFbo1tuyiJrotM)c*Y+LtW!oJpXAKtI2jNlz+;Cu^!aNa>Ua zSbZXm_39<{8@YH!GKKAJqVCxDxB|YuY5iTH$2#ZC!w2Yq(7Nr5X%Eld+~Qh?+EmvL`TRwR@01_%W;rk#42Mb1)aw=qhxH$u~>`jvLjz&I`T?Zern~T_~*W z|Dfz0gKKNFX5pReBs(@%Y}OTKwtsis# zTiv5ak8ZJ)DI}{|wTT=abh0o6*i>|?lH}tXv_=#~TpC^A z8Hk{Bj;^Q;(J(kC)}}{n8eQNU$e??Su4oMLFgzvJW=9;4uILN_F~BC+#Y6;jvV{V^ z#QUy!Z@R$=1T8r|NnzZ;#1OoqbQGZHWXt%t!n+Y|4B@SZ=rCyDu8t!SP;3ejWC-g} z$Ao3QBY%q@4)PddMuO`PpkzEw)q!`jWDV*Agd9s|DJY;00o3M>@Je|(Nk13C1Hzq3 z>?qDq$!KTuhCt;mkr%M}D*by4ITk=roLCc(8cQJf6;u7&a7&m0nFWGU%5oOD8F|7| zuzAp+k7Tmvy0)pX%u>SKu!oM+=IZcDRXJI}=7i8?jwPuS=1>Xs4JE1k38gvCKOU)| z%bZHsDa=_Dbe8juK;$k_7PNDodUr566cvTB1MlpqDKLbbWMxHsIUoZl9ZM*c7R1Po z&E!jwHy&w;n)ff8k%If|9 zVwKd>y(GapRfhd#O;|RQTLzQULS9Jb`}hSG?noxVU#m}c-atkfa<+ys2u)#pNEdP{ z+Z1*Na;Q%|2AkJLUV_8-7|5>~EM8LL{hh3yhsdw!0?G_1x!1GpgiVx}Ly;|NEK!7C z6y%Qtp#TnufOQH8!+4H4t$ay(BP{uxEK~aJ`6sJCG z!Yj-6SBG49q-)U%RxixM$a(KVZKMb}tIkORaw3HG&Jo-!%(M2tv!*_)!ZY{vSBF@* zq1R@uJywK0b4IF@bE(=#y z@+e!in1=(M2S!-}!^aH~kbNQxS6VVD%TpoDjV$!2D68SO1{NR!iRt~6@@$X4v|i{0 z~soY*xiFVUkEdjH2^zP7&*eC7jQIZY}h^YIa)|Pk~Q=+R9HFE zr1!i#2WvR3@31rHFp@RgzD|s`YTco(WiIeUu;oc}$=`%VOOpIV=z)F>lMIW;8Paq$ zhi_P&d*0>P=bNb@iJs#!vd1TNtl6va%TOpI3;u-z%6p-=L(%*L0|3l07g7rG^ylL5`6 zNqeb(C!c{Tl2RR-8LCIs!z=XD4;CZhSEi=v(*|)rH+VD)@fB|Je9a;Fu6veU&Wy8rc zmuAZ4ypD9j#?vpoD{;o8IW=SW*S|=&-3k4iPeF~=bAs+~aWm}t=fC;fAPR|u<+l}_ z5$C`0x$m{w|3fOO!GHLi!#|2g<@{%_<`)zc{Lg3pqdFC;SU6w}qHuR|-bJWbU{V7# zAe>pe&HflxQgsv8s4am767RZNK@svrIBT5K*E8NtRMdb+bAcc5Yaf^)3LuK&$>8;< z2l*2yy(Y-K0)584gN0Fq5hc#oTSVeuYS1XoJ)~ZBHOp-CJU^XWe|a5y{b;x4*L`kH z6{)YXl9H&_clSFqq*UUp2`iq&?gz5DJ?OPMhs2hFF26p$R`l(C1fI4Z`#G*ty&H7C>Dy@DiCL{T4r73Q z4yqid(5Zsg4@1jSsL!@USK)4~+X}1l0nL-n$7#Kn8yH+Gr#o&h=~Mu!Y&ZEgDwv8l z$7o(QP;0TLuHGDVc_VNV!V^aWq)LNJYna7v5sKQ;5agj}(k+WUpM{mhCeedrYDAxI zX0?DeG<|k4Oxh7jleZ}$H44Y?lO!SeiK+IAD|Gu=UuuZ&8bsv!d<(f~U;g=|U;CCC|KC z7l&m06XYpZ2Tx22i{WQId<%|?!yB{fqgmg*i;|nk;fXaW#@YO?pF(18 zDY1lzmBa7DK`UUZNY`kEt$n5JPnZpw8IQ*RjHIqK9u*bXTErJHbl5HG)6LUy_ z!A@wm9oW`rQQB!pDqF!Khf@l%jo?}k4%=>DIvB2z^50pNX-(ZBi--DlI*4$+il|5p zDRi>>{d=sVMTR>}m}Ljh>0&=w(zSoWrelK@tvsOXZlZC*)EtFsffcP@u-HaT;{1%R zTeaAsXL*C>>NW26qlK{4c7$!xc$^b%CUOJGl9ahm+TGK^cl*6QKHHpxelbCMi`-Sz z!ZUerr*?o&YIIS0+YxrNd<%n8VY4(WG7$zn9Pir1b7SS_G%=RZrf@DsNm@wi#>&8F zmHLX}zLKHO)*XILYzwkoty4gXb#AEy%kaAt)IlZ#z%?+++XJT&+aK+UO?8vMPr4CC zN_oWu_iambFjcOf-hWkoN9N71C@SMmF_bW-o?nD|`D6c>$LG#}a(v0Fl}VB6XSm@r zD51|^+QM}+mj^U%ma$+1vX&05NyAVL4xq52GEWm@YoNNlCsCD~{#~R$e|Gm3mRVPE z%#_#^(I)hmqMZsHlK9ecIge`AHm)$XFcPD|bQxb{l8V&CRfY48idBcjE?+4rT0L7| z2A?t*Oddbvk=J8MHpWS%aW{`Qq@naNfTu{lb5HBZ8H!4P=ip#&ROW?8#DFBS*+{;gAIxPqYe30=_4IuRVCS!VKgtBP0)2-!O7T;7x_UH8?2> z7iJ$l=m$KGQVm95KO_%gpEsz9K#I~$IQ~Z7&OW}S%FQTzmGaGa;IS~K+4SuqL6`b~ zO8AR8f)4dwxv*zrNHyyJ{UewTmV{Sg@l2K7uUm|)(p`;9iaV$G%u8mj|r{N>U^#C5S=0Vw7<;Qj)mIFCgG7$W(<3F_{8Bec6e~q1u9Q#3jRXuGls+!H9?R2|P7^{xbKxep2trx{TXR z`k007nL71eCqqBvU^`ndIc0N>i%;I1AYTxlLfD={wN_|x_JUXH4ev>;QR>;qK8N6P zeQwH+vq!?=>{LA?I1T8rLT~T!mVyjwoyZ1QbQ3hC2b*@iJETxCYwxyKa`r=RaW&`Y z%Ltz#wBJAo%XxoWND}K)OI9a+{re8fkvHzM@jFUg1@^xIFULPd$NveAiOQ!6NG5=< z&X^kdf&6mhQV|t72*l84@T4%Hgt09^0%Ynf%Bi$SBHPK9~2yrL>8TgpoH zC}W{{^v&75{4yl$Q2_Z=z8zzxa%3R3Rp?-c3PglneQ%~I2YttNQwB$s@bIH#nB~Et zIJ)w|;@Na55{2L@{^U%CanPLY<&OYbY?XZ=5CFwp)wz|36v_FbkUAqUID=3!ETb`o z81-TyhIyC33`Jn~+co}SMqOYd^f(zw^cZ|m;PErr z)t!A9x`Y$cJYF@Nt`@wK>a;9@du^@=^KbAXM0*>maOH8UmPtJ@g9XnaweKXE&bpjm3g&VFvsS`2o51-U%WMX<6{4SZI?; z{wG3c{Y9<97NO)|*@|4GkXBg1tQ0^GGj$5X!=-W1oL4-kP+oFHq_*;|X9lXcJe@7N z-SAkp@ee7`-)0FV(I`ar^`fgIk9Uwq=^bJb z6H_vsOIqf0Q??gaQake-!L`yU?Ysb4>iHEoW2Kp;R+|S(2fuS5#S#nz!3R? zEPdKE@6O|r&8p;S2Whss=#+{p4ge^DfT!v>EU|8JJ!5~$__V6_fKs-6O)-z%-^kRZfTBL?@rH{KUG%UcviKtAA*6I*HktH4b?3_S zTp*YM`o5+z)p+XV#^Gab6%f(PrzfIs<`bu%tE>qjwB!jJ?pk)ipUWk|tX%En5#?6s|%bEU$hDbT*b7SQj+Ix}-pem9wys0S9! zq$7B|qvSZ=sg|)8GnlUi9lHXyZ4`L+-ESJA(_6=p+D?mhevt5X7hzJj&WxVQ-!^-U z@uU+Vwlst}ZWzv{WTf<|W(XJlsb4g{hlNsj6b{QsFxu!3!xnRykC|{O9>eYwQC`8=_561oeRjrCVh$f7=}M{N@!I z!HEEJ=gJ@cuyZQ6;{j|zBw_myebXW>JHYnb;x6aF4fop3Pcx%g{#vYIn}UyDZMUSE z`8u)9%w%uBL{bBTG;X#9#CB{lz!eO2+GB3Me*H_hpT7oA1OLVwPMH6OH$wjqZ~jMX z#s3=1GF70yL(oyUZQ|+DCrNry{K@o%#93B*#$-VCi3)W6fy#i8%^>=XzIpZfyUvzLj zXSr;59&bHw85HAkLFi`r@)_7{Kb4>_H=8R9G+J(kkj&X>L_d}|J1VT5EH#);ND?XL zGon~AKr>nmGz1#2OjgPI!KWCTIy23#())}ENS)0Za&1aAL}wo+~`1K!7Q z6l}%>4eM*P0Hr{rXO>uo>*gcdU#ZBo@dg3OGtuF%H*-AQq*N5VT%rQy_p7s>v}TrX z5=ZuH-Cb*14*A|jKq`XCM%@Z2?6;-O$=ClywBr>32I_0Jb+Vg8RK>84504m9%I93O z)@YmUG`+ZYqsy=XCK-Dz)9#PsHUK?_NSGs4p@2W~7a^fO^1O$hPclC*>Q$Q_1_hEF zLiW?O7B7O7#Dxm-H}|ubzM|=rl38t-z(f*BXnJ&2G`G7mYa#Ltr`OVb7j*(<9EsP2 z0@VW=WJ#xzxQs8?%w`@hlS*$)=`3N1rV8N@8j}ro_j6c|ev<5^^84eai9>*$3}=2t?lV*e~o~|sH8E*76%F0V1t{zALUTo?z^ORG%J`b;nqM9 zmpe8j$H+JibEEuuW2W&GblHkxP-F=GWf0+1p-2%Jv!fVyQ*kLM;Y_b6$@>f_N#ujI zn0mC!*rIjpVG#(th`*RZycms$uJLXZBSzp>il}%zPtjHcHiH7Em}+Hmt%T88PmRdJ zdJIav6Vw)k#E!CakfG+~cvU9w?~Joc*I=eLshzlv(sQOp#bCWP>?lI-j`34~MG8i- z0m!X&GxJ7opqhH$##rS?XGH8<)}@=g)BwQDV_(g@vpvu}a{}z?KH`{DJ2sjMXY(&01!dBbK)H$|9*7I0ZES z{mtu5z>3c@SbWpa^T&;_2O@2XB8ey(sj28n*&pN&YDLMTy+oPp7_opg=UI zvZpAP9>Z&iwuMjnM&n(&?Zcyp&e*JsOXqhV7c<&`Y9DM?FMbc>OFoEe5;=#(5z4z- z4iA^H<1@(JGQ&Hl4^j&rE0Xo`bKLGQudDKylC8QNi5kax#-Or#CFUZ;=8hPLaJkRj z50<$xNn^e*;k{#TXE@_8JqVKn^h>mq72|q^_{DFh=!^Q|+@h47Rio#K_#({YVHIiV zn9{ifY-v*Sy16CP_$ubFwaEsQ`J_|3NHikcYt%a#dYcEXx0_c)5evCKRy<8K3YbKg zos5~*kCcUIC_%KxeJ5eKTw{1fFG~TrPtGXz;ga)ya-M)H>?3^~ADttg)_A|?9t>^p z)im2wP7yiUV}M9~=p$)3TwVo@Jr)$)n>hPgwAQ1r!{1qe`bPBf^rZ+1Cm)%?gO#x}ms2;~@(KlKGD#Q1u+!zw?AnuMw9bpy z1^v0Arpb)XkLiW4H?~>6W@a=pI?%KhdoD#rrq?a~CCnm@Zt_#BC zifDAa`cXB?pQfY3;9Fhccx!wlTs|R;d7b;3xorSTOq{DOI)<+LeLH_nMo?Kbl>b7~ zT`2$(y=#{cQtbBeiMky|l*+X?+HAAW85iOCMq?ZsSS_nLsDpNCf!<&PFNN5M%lMih zF0Y&qJWmHS|C-U;&Ad=C2)vM=%26KDgk5jPS=jCt&pmK{il7+^q$#{G_=2BQgF-Xt zAjBJqDi?LA4|(k}Z zSefwE9gWMjJ=Qul+zDKrM`BBw-ELMJ?(UKc?Sa*e{GyJ`wVO{~{l1kkO}Aq|#T`2n ztvVEo@C5Bgr@ADe??h7@hn@yZ&W1>uxHJELX zHCe%aalS=)2dC~(+y02Bsqw8A@eO_E=SpZm2O(D8Q8}#g=+}2V%P;VIJKad(Z+)Ka zzxpls{uyoi|KijCf0XUb1z83AYr}9}iv=oyTsDUf_^?(_FlmkeS>IAL7e-2cosU8o zgS0*QU)41XoS1QC4NGNSFC~wma0BX*OCo+}#tP~K&GP5@JX5z=->U69)OUf+?QJV# zefqF95i@D(#_QJg2M3qi$5(&4z#eyrwoyxWTM;#lY4p(ywUHTl;c9K&(~3c> z;YS3moi^uwh7DN1zpmrHd`#&WkPieQ;HHVXYeffgeg}>DS9O&Jzl&6wA0iz4LLiuo z3)Za;wKm1Y{51BdxozggvH+-hcF0h6+?A(AxyMFbR#Xu z`lRG42F(3NkS{DiStd-p0F%H_rzV-mv1f~Hh@Rq+`5ekjjBAk%c9-wszqBap#75lo1CPo*g z9uSnPjD=RRzKP{WUgLDdZ3qjMRHut1Fg|W-EUf(GA8)G|M%5i+@%CGvtb`#EfG;05 z_n9Gy-lnGa)bllLX;mdcU)18Avctw;5j_IFMOb4f-n?#KsG?VlZXoS)7Z<0tDc`h= z-JkEOgB-m>f0f+TY5$4@;V&H>z5laJh)1;?;+@#ipA=+Cc@kp@9Iop@mwy+&R{vSzEX(>~;G}0x=cf750~1^-emv%~e-shMP-hbWSYvwb*8~JjU@#GOcfKMCe2LsMyVy`t#Wa{^kccU z3gk_RPK+JjR~x8?g}VJ-2?O@^xFn6$pV|jtu~h4(Bw~}7{4LlBnzEQ63Rd#l29}x6*n73Jikz`^6sswGW{qq;cp|u(c|xuIf<{fYl@U0n&h^n8@J|)ol63JBfe3a9MqERfs)CmC-xe~7@$Aqh zYFHp1=|>u=Am0m2q9!OlY7N)yHSR*TD+_dq{yKiNOYq!g+jei=#ghJovvuyKx{R@= z-S;MVipY~Nlch+%6WSH{)WAw{?maMXb>}4EN|MWcKFO;%%LOp?o||9bnw%zSn0AZj z4EPZTz2jz?lIyNuQ4;9jrBPfe!u1F>@JOXSAbioM^bX;3^c6GQ`w^1!GxLQZi?CYD zboko@I@Ku@)E#6u_9>4O8hLPh{sLxXNT4efsoleh5|8BtW%cmT?yIrAcHdCc;^l`6 z+@r2;aa6qN?rm+gGlT2?}m`{RTj}OMWrLxWEz4 z2@oW$Umf;r1Ds~29K4`x3~s>Aym3#|M6*B9J!!uu?swO+eobk9g?h_H{}LjM3L$2r zNTVC6aGdRvP(mcH#YV41BE9jTof8gE`~0Is5Rw1Y6V*n?8}3XEP>f#OmBK$7U3Z=N zS&e_7bVUep$r;FP2XPE%fkt|>8SdH|GA{gXi^y9ZK>Ia_b+>#J)6En7zN~atx}<&; ztUwY8#UM_78coPzUbcleucYB%j4y`@O&Yu&(a>N zC_wTZ=KHpF{W+Ps{Pj48<=ebx1MERkJVk0X&qn$`pg-~(`YZki^cyy3xwLmig5lRp z##u9@<8-=YDf|cc;f?&Nm321>dYk6IuU2)Hg7wg?i}|c7j8fJuDTK4|{DIHWpiLDT zShzEpEARw>N7L8WtTc)vB)hFo(N9f7zylfQE*tNvtP2ZzxNDQTz7Y(EpL;2&2JAef zC_N}E`L(IE0$oTEPw3^>NisRMUwuw!w zgY;n07Be@lrY<`wKNjipHn$;#7Yx52I%?&sRAd!eUO zM>FEzif}TV90DuRZ=mXB{0S3y(o;9MJyC^}YuDP0Mr_|oci7OS%py`i=!7z7Ior|Tm%H6geh7v`-fLSQFy zVZ;*+5+W#p#LMQ2ZpE2kZ=|T^ssgq)I0Dy*x#q5TjaLOQVNB; zEqnw``i`{G{d&;5T9$;g^idOQ#|7Exc+$2+?!St1jYq&05-wyxc-_>hQ%3&caHP_r z6WBgOLWW1uk{Xre_}g!bQ`n_SccOU+l<WcZZ^)&W;irtB0RHERyDFs}gfqtMudRcSHNzdd42vO}3L z+vi*{8;M{*Hk?OfU?e286F0do#R-iPJ99?Os>Iy|Q!T4yNPB+W z^wMob!y$B8j=1W*f}6+`rUXSZ*zCJ|^GUZAE_3JK(|dA7h};4M%@aosb9GWyWpe_s(>CMX^z#JHiPLBFYxbMCq*UnIU z(5K6G->?F98ZF?rb+gCBhUlxyY*N|B6uppC1gM&AVmFbLE)YCLBA2nc#upNehW5pN z-G0csz|bEQUWM(HE&t|4UeP3pZ8Gv+sN0;4W9HX1aAm&;aE-m@uby;gOu7_>D=N7# z8)6C%)6BY@q;$6_=bP9gHhOw2tQHd>&(}d+Q5C~Yj56Tle}C}N8BWNtB7Q^RkNm=K z@(aqALn$Aewum+`Y0r@KKAjw7t!+O0@t55jp|AXf_43r82?Dw*LMPU`FBztnIQval%=gHP~r*W?0fqlY1eCfr?#rBuZ?!*pkd7 zeQdJ63f=K>0X>S+2N$CON?QC0P;@|D6NE@kDyz zsFJVe7#+xeGoC^3jtU^n3of#I!N8%~GerofcP#t+)Cb7O*_)Ai@ zNQP4+H?|@L4Q%@>Tf>&r=Si0mY$ikjI?*?Ze)=V?7(IuBPm<&acpAThP+RD47+q_7 zM1APmrf`Ia44R(SzzB0oJsa%`I4&w6LM`S-gh}Z~ z^d6|a>KjbdTZD!^r*~AKSwA-KVWrBkInS!rJNruIZV^n%-D&SxcR)8ucUb^wZRRwI z{_qQVTR?U&gg0wrtOc5dJ}WHzEjT@C4cc)nT=Y%S6Wi6W0+$<@mMc#14S_qGC{6*4 zNa-QqGm8H`0Ie1CdsNIoPN$=2x|K!_K=yE5J>6kGrke`kNzn&kkKK*jXQ~Fk(n2A1 zK)nA!W!BgFfMK$5eSpELm~~#X_;uEZxl)|_3KMA2@Pqr+qIB;3^XI>2ehbXnNdIrF zclfVZ&-)Lt-c--p+Q{;Mjr^6WP@Wn_C|}v>OwTM*%gpN>btcc!$xZ0diTnja)~7ypR_@VPp``9Dhi%JaFi< z*DI-clFsuvexFz3?emVWZBTX=bqTfuL+ZdK9>n^HRP_OHKmy;7@PE)@D ziP9QfN}E-PSjE8v_#cw~lNxogG3yxMDZ|KQfq4lehh92IS@Ao(U2BW8q6#Ig(vc;T z>XJd>G0PRF%&{$1zkxA!6>Y>W=~@+A>3~6{4-AML6#DU*s|Lq8)zwH@dq*!+YV7o= zf2*EVqOkn!H!oP#sU8-HJu166BwnrQm<13XpuqGW5YIz!^AM6aVD~d`bb+*uA7!XRF$mK)kwke5^E=CFt4+i@V@2Fa5+QRXvJ z{7(a8Q-_Tvh$2LbzgzQQ9#8UAB`@K@tkLm|oc5Keb5s&lD_ZF=ySNf^5@K78YK$4i zAikUJ;IwOVXjV`Be>!B;>>K)P*+2|JD5(v60z#FAW%sCOu_+sDG4+aEWZ{LUh^Ln< zV)6EW8_u5)wFeo3V5+BR_nLq^L{*DtqDC|BDXcPP-{P2TjXL#pST58&Nufx)h*tNtcKRx|ree5xn#NT*6lmz|V@kezhN1v; zIdBmcVMiUd2B$LeYDRxia}mI^71#UepogN&Ne^WKSRu(;vI8{UuP@RCct$J}e6h6G z;9!CvaQgI;GRY0G(@Y5eK|*A4&~7NXO*%7`WmFf9gvuUl6_`5)SBQdwM?Z!DzXCt? zLj{fO%afH=fIo;GVFi^63|*2c>4>iQV}VUs8*~XVxPP$%P5S^8-C2XOewRZqu}H_r zEM*N7YbvM_77Kioh!h2;NYj<^LTV!S<)%5jCCVOd$IRN!k}PeOqvS#m!N9TGTY zvuwV?Y<=C+)~P2riOAFOlk;9S7*?*7sZ;r6B5^U@P1f)Wv_O4m+M zBRy0YjfREa1wsN1CBI7wDsaKJ47HN0R^3o5lcpa>E|bQ@lqonrvhP*rfM?8@nze{V z(@fnK#UlUmfCiZrktNp~q5kakg_I^F`e%fAsRdN}kkk zZ#PbTcQT=+5g!*U(h|SJ+N^Y~jhDIE)vkLor8lB%08$haJj4@#K$CN>ZcHr#`)7C( zBLXhK;$Fs~djJp?=rh6)ZhlWnZg)sNnEZ zxLPWl#*6TU;orj$D5)Zj?Pl5GgU0~;1$r4SEA1-fIQjL7Y;NyUsI)yAolh)26%vTfopYH z`32Qao1iPkC@IdAZ4F0ZgalcaEUIbc*y`6ZsKnTvYe^$@1$lvL0y%#=#|~GM)9K%_ z0|M8I!of656pUWeT4bY(C?cwH)Hg5&seyX|4 z6XNiif5|8?!UU#?b<#2%1)A%jJdHLzRKJX|JPJ^-*?b z&@7>Ro}{$6+PFIp(ao$Rw3r#va@I;iBYGHv_bj;L)`U-( zi>jhl&=%)|Xv@cIvO*e*TWckQag?u`2S3-(7Mcz=)TULTO~(cFU=&^+je=k5{St#; zRCXk@tb|~vfvzoGsyM4L|6IvIL`do8dDsIpT1Fcv!;KMP1!eR8vKtHVRL)a-zhpSI zrI7wPGH!6&_mj)>5_g!;`;OR%YA1Ci*6Ye`ldV2mIJVWYj_x;9O-$(DR4IL>aJ3l% zDwb68N6#^c6`PZxJCG^$Ll0o5%%{!5;EQGhDxd4%;ss}MV2jO1h>Xq9j@7P!l{q6g z3=gmR$iiUzr}gC&Qp(Fh=Y7^;gK9@nl)B+qzJ4G<;)?Iw$D{rLf&SB!`#b$x8`TM~ zTf$GRJ-e2lK?$i%kgZUIT+0z|v04)%cO9!Koc0t4^mksCt^uPgrxZKH&f0y)u#Y)P zeU-LgxFZ5We<>3Gba$e=H`sNjpTU-Dmo=ddY<%#>Pj^3 zEpm+7W{%>bih8(56=}B-w);Dl&-1+h(bvKA{QTEsU%trX?z&;G+Xeos6aD@6f$!6m z$n1O7)tY_6dO6B8k7}$slWNwh!1E0E=Em~6!F!gS8DFQX7nGNo8dg-FnlV&VBO^E1 z)09*0m;eF(RUjWrVb3iNIdKnih2!1tO!^h&GU4ik`Sq7eTt1vYL%6D^B93WFuX+SK z-lM0dJyeB=-h#+m4S1UPrW{1O#IS_+@Kge#gJ9@>T=Ev|AWR{i=mL6#xD*nM;dCe) z@x=meizsF0oi!K9C1lnIqOU?z#u{#mG{Mb2HD3gEJ{p{xh@QhiB(^iyUMRyjJTxOi z5;=b3z_1|Y06kuMA{Y*FumE4NDm<%DUNq6 z-H+9$M5D=$vYt|O_%q&cWV=RJj`Rvp^bn*44l0HfGNFyHwqdA;CpxlB%wUHH#Yn_KcTQJu&4>;s7`wLN?}5?GlOt6!)}r|)=ORpgeru0mf)a?bKccI1=ggv?8P}X)}+~tq$~)o zQQ`0}FEp`>e1NP<+!}D23vTI63QxBLZ5cco;#pVSFisEQv_#vbi5lN*vao{_In-X~ z!K&E|c(an(1$ufA#7YdlOvcyi2Ht$4ye;`~_ufvb;mr>IBI{sa8GY?kg%l1V5=`7h zlSnc0X2Svnt+M;WXoB-cW~d8JwhURCdipq8o{iQ=yX%hUq7&;^F^U^@9F^w&?}NmL zyT}!J@l0^?s6OKTOKtBSjeCZ!ZB)ri@<&7cO{;$59ysUVHJw_y%%-% zIkFTY5!EG`zQoC1mGITyq2sUrPP4m+!&r;|?z}O@{%=|z|3BpamPUH^{|avTUlTy4 z@~aM(3AXo^(YN3ywPuYU8V4pC@2KZz70)Ck7zG@M+!h0%SoPF%^@l2KiVr zJ5+AoX@F5_#dT96f_Z3aS)sD%`i}HB{>vBlzI5q0Gj;Q-53$5^g?;PUgM0cp<@v9V zPAix$>nF(!JNLcN8p8wmdHSj5mhIz3;8~H#{ZUI%VZAaVxmeNfDjkH*Ok;h!!%$!hD+fNm)KS zHX}QseQa>oDi?)xXw)*FBtt-9gPj?6S(X!F<#P z6g8PdJB7rGNqHTWZEZ$#7KCYeEB?k9WTPXQ!0Su;e7(+oP7fFRQzuaplVO3b5^gH2 zbMj$X*8&V-*ro_APNgmW2|a)9VL&f|!z`Run>YyZv&e4k9UmH!oH#WoDh6YRHt8LA zaQxO~sG=o%Y5crU1hl*4`P+@yq5xNs1QFc8dM*MkAg~qqZo5t5S1Bnkw)c8@xhZ&@Jm7}4wFz@v!Yd-MRb6Sl+!6cxO-5g`1 zdwUalo|sF?Qb_o&37y8;N-5dxy|Br}Rb+Mo=qGjrDcdPjUjn4VJk;>bl7g&_V$u43QHua- z2{E-tT>1*R#L?)#;2$=($EghS80gPW1TVlA(d$)Z>C#v_eQxZ}-J0}6{$ncW2D2i` z{J$Q@|0o5->5xXQH6%@ri@AQOlk`DuhkKnw5Cq!T?zAcoxog&Yuubl{!X6XVZtMHK z-JgLbbshg*50pLiUD&Em7kxQQB8RG34TH&sPpto7gZAx_l*f!(*tO~NWK!L*t`P55%4cZdX6bYw2V zp5GB~4I9^ZKrilwB27k+Lcgl~T!Px`_>8sbFF8Vrv6QNi*=X~H36*kK;R>z{wQ?}6 zbVsoYUqSD)Seg8C+jvGa5`00bw$p+0u;aa6evMD@gW-y?IzTFCys^v5Dlf2n={Z`r z-DSX#SFziP9msWaoZh`5V8G`>L9Dm=BuoTo_QX8M9lo0GaS!Al_Pa)#wC_mq!0dN6 z_-x**PFnmluT5PB)8Fg^q}`ZQEfG9`3G9I-3otbDi+<^g%9D5d!cFjNfxxx@3`|36 z36bN;KpD7zZlc|@^Aq+|)#jNBfI>^An%s>?n?>D1s)BplSsU;53ft)ed47HxFafuI znv}5FwJ-v}(aVR@N@fh-GVz?-CDIa1CgW|6#iQ0l#;vb6b84W-z3M1{ihN`r&VaR8#I?n)@~PGzfuS8BOs==NrGa0*bDC2We?oB zw%o-a;Ths$*TkK+_F5y%qdVF|0^#`&!BsiX)u(vNwFlHQ#*OB~O^0?=aVyBQmN3@` zv1=3G?jznaTx}e#?nAKa<&a*M)7#9sUa3fnZy`<3oy{EH$OAEM$VoAj8kNdg)gM~I zrL?qRRulU1=3~3kO7ml^EE&zGv-+B6$C|&`HjU(oFIxoO0D=qCb1v30N&ZEyAf(|!38b%>ZacXvy8I{#jSei>h?sQblB$~2>V!gO4z`whZvTrV6sm;!ATMHnb-||^IkRhq%2N0P_Kq}B z!L`H z;PEOsiHjdXS+`PUn(=mT-%&PYU`BMofcs%bLEasnj&6oe)af5mIyVaOJ9Q}mt1xF> za*~@A^z=ZEQD$*+qMbQo^JL^HQPx$^vdqRE(XXxUYSqT`aU&w6CY*~UK16Sk$J3JU#SiYw@JC!p zJje15m;cMy0*NVQIQ!dduBo82V)X({v+%Kqa7<4$XZgG>SCY5O1J&zFt&*h5|~&^GP=I5 zDBd_%1U1&(#vM=ffa*q!1h6SPc|ZW0;okqD>>YzMivn!zPC91CPRF**j%~AJ+r}H) zwr%r`ZQHihH*=@HuWIhCn!0oTp5LeTS$nPZEd0)dGz=VN*A`mJg41yZQRzngL_uo$ zJCl@#`uA5t63}IKf1G=9Ky!^A7#RdruqSwIzc*-?3=33ugZj^DQl95|YK^iL$8?WM z3+nLSHdLo-)rZ7rn-GOEAJO}~WcafZ$hxrf}-1k=y9QqQP?ug zKyi)j62&OkkLe(cXPT_J(3+NEwo2p}o^TR4;C{s?qEWCZr%0=@i*upQQ<_3t%N2yL zLbzc(!}Ijx@(_M1u;K(UKl#J)`5_kHQt%CUIfzf~08{6JhQU4Jc}Oi}jg(Isi;9W= z!FjP@(;>ltW~KO@5rH`OX7>)yaRif7_Sut5HFJ|%gxr=C1Y%&v7WD@ zX3bVEd|-L8Mak_url>Bu4fJ9VsT9;#CKsFYj&}#qm)weY1q&7g31~+56!Ozd5sB_p zyrgIIlz_Kqn6*d1PxdZzDqE|>2Xow(8UpV?-ekNi;k*59VXb7Ws0=>Wxj3_tTFGt- z_t%-^->t}^fGKv4Gg+zz8Ms#U6WtNlX>RD#_UZL`Cp-p4<$)G#iHUvp3RvB}V=_TH zo;*`dM$;9o(GDk9h^v|57c0QL@qGiB?KI`5;e@~%5ri8LRSXGc-^iTQ7bKrC?P*qT znshn-WoS=8YzSJl?Zz#^LVf%_eRnFm-F&FtPD=ZeZ_}L!S8{=gSwIf|*;}9A@z`m= zL*P$lLIG1}zjTYqU1y`dKk)Ro(F>Jj5V{85=!MoHFyMgrV^1$Oqcc6Euu#%K$Csus zHT&)|OURO>>or?lZXaU1qRZqbcIkaMpOTU*+gnfn$n%xt0xE+H<A zXDSagJ4fi5!?Yi~5$jX2E#SVp>0wj5E*HD^H6Qb?X!_K)TgwjD2oJ+t*`dz1=bX!L zH1(US+?JRZQ}{b?JWRZ-xcHY4WvMmS6x9o^mEt4}Gi@vr=$wqn>#wVK``o2-#HM$v zv1M_WC^94EF{}HsLVA9DNihgf;G=LvVRd```IVql&;|R_+H2`n%Ka{}hvrSUbMN6U zNiWy3V-D9DdQD=JHFUHEkEi_hiR~i~oJPMfgyq(5mW`zR=grjk_se+UYP#7qYjFI& z)$X^3t|v<4rPo#z(U%`TAXf)!cmBcjhP+dDm{r-;fOk2gbt^Io%#PdTexa%}YYRXe z^eV^~0rqY`bWM3N=xC)*um7uN=La4>%dl>&;>bywRS`A0# zmk%AZRlCModUIoFl43Y~k&%{V1!-uJdEJ7*>_Tbop0Oje6nlrgt1z@`#V5um_~%6m zRCdAe^cUp6(BYQ04$8awV7v5$4M%3zqcqc_sfnxWe;*&zel0h=z!M8^8CM!dkyf;; zx8f=_i)34Dsf}d}3l|NjO*<+yn-m`Jel$awgA)pja8w3BL-Wm}r1{sGqqi>WW4Q`7 z%F_4xQ=VmtyGdG&9Uxj^p6!znpzcvSlB*IqD4^sZPS9s(n4n0e-oFo~4B_qj#yPCZ zGOo07WV}l?gBfqUE4P+CZ7s~8ErEE17#hE5hbgA)v`3L=KYoyX!}J)QBoHo0`ofKx zO{xu8KkbZEY-!b5g6+0kJG46gN@qB@=8zTl)q#X+Gq2o11rqL|N@C5S-b`^b2Q(BL zOdfWht{gn7Jd~acS)wj1al2>jYEwhOOffjcpEKNap1vAkrNs#--^)m)Xdb-Lys13w z;sR&0&S19mIXX9m1k(j?v+S1-ow4>e(CMGilY@6nA&HH!>GUbW1htJg*jh5u0^oq+ zV27LWQ0IO500eDCq+w$~Ymbo!++SMle-WN^QU>8F1`A&0o9CxG?35ifWtzWS!otbp zF@R0H>dHE%P57~PR^F1~q=8tJDmTs2BiXE-A?`C=%PO6LNEXgiQCb_v;M?|;=^2m$ zk0U{v3Wx&ij8NXF*OE@yOI$+ry@odN-nxM+KLlHTf6NQN?0J4g4b;ZOkKY z(4UWWHv6)r7;^hisa(4|B2+1QY{e)q>vyH=Xf@s_!Ya-rOcs9-K^IIW8-l@5qG?0O zlRv!4v}mIhmW)HcJ_nZKD4Dpfyv5k6a!@^rL1V8+2Pbxiy6jX{Pq0y3*s$Zc--lYm z_OAlGkVY6cdrJI`07aUMZjPaIE@boo~DO#LT04oB9RwLZZU z?3As3D}0Y&$+eu@{qT=nq$*9b5b6gma4#wTBw0VY%wY+xj&RF7L^eOnZ}vC%n#i!&=|t=d*eFP{%&bOXM!4$Ke&MDE_h7TF1JQm)XyU6J4>x)gE8CVeFST ztoo`nk9FyNBdXP5(5JrxCrn+cFQp0)m6LdNR-z=X)NYu6Uco9xkmM%YS{>InqE4Z9J_<08reh92>$GNa`eTl{d*nF&(%x1pwJrh7o1U}sRO()!UMw$QMO)Fiy92E0 z-DFu-a*J_7!ty)U-bJaT#nvXt(4vV+w&gl9MasjA_P_fBPU?Q{Nmwmd z^V$@$Mxuf3ixzLWFty_`gPA5JA(|@i(M1Sj#wdYehCm+_YZYH%$~v3&-|Z?3`dutD z`6b7pS5jHZ+ed1)@#qRRqi@@q;fqD)I>rc{`uP@ z-&FD#nbt`82qz7z|BZYMS4K5~D#j2h%adk^C*lpnkq+_C%3emfQuQ2a%s)dFQO#xY zb5MpBMdYc@ONXAz5dvEICrea|mpsZEuP5^k4hPX#DYC%{Q z8~EpbGZq3}@8nZ#5q3#3@dOyrk$`D<#l-6J0xOVeF@r4ACk%#{Scc9DtGOd(T=Cp% zRx4FtQo7z0-7}5W%Ij2E?4>&J#}s045vv9xo5~tUy$%a7LO}zPyanv0@#dOJp19h0 z@eGgobo09S2i?dOsLzW5k&FmgAAtHbE4W*i8gb6Q)NC%MA72T$Op7@%n%P~E>U!0kZj&}q2q7|d6w zFjIynn%RDD5vFb&E6p`?X(`%7W^Qo)rZd=LR?U#vXDU!Jh&Xj}=&@rxqZGB|HUzQy z8OT|`O%88uMR7oos*qeFa8QBBtq*}TEL#)*=t4mbHl7flTLE1YX|p!P6*y?B&9?;S zj7&LrswfB!e|bFY?r3sc{DZu`PEE9HGkIYLPVXGDc%5vmJTHr*xV`PBMwT3fdd}V< zT_d@M25t*xm&pmN7N^nljM2YfH;YCtak-E@w5iV6owFPE8etDc`?M)GDxm)$5*-@H6(eP#^uys>F=ugPu8&7PI#_~lU6 zO72IrLC#SnSG_WdPCYtOs1=FuHgdcBB?yVCs)-9E!i-Y=%}0{TqTI|$DZG6M40MWa zAuXNK;sH>VU#Jk$8_xrTwP6kn(bSEjnSxp0+~CL?k$H`2cveC(8+llHZ`=(#oy+$7 zl^Cl0_J$#fiVqrA7VB2UuT@`XM0yU=Kp-<6xu5@nIPLqTWa2oamQGg8+wYPD4cp7t zeT7@}Q`ykTLhq2L#s;^=pqP?n8I8VU+Z%F4;l`#;nj%;_~VCGY|@n zC8ye~OC(WDMBtuyy`U2|1GDlol(@z}i$A)Y#F=5sz$DYYi+hr3*Y)FdR2o@ho%ids zfp%6Dm6>qd8Z~m1n@$lnz7X4L@jksl*dIE;7)*hBL~v9)(caVOtd$Q%lSYw$w?+f)+5VrTIqR z^YzA_-o{s6U3vFs$m^w};3!4%hjV^siSfHVsc`;1Qt%Cag?%q_mXF}5z6s1uXwo#A z{dfEF>C1%a?VD$UuW;Xoh(FV=@c&3kT~A~aX8SlkVAUXRVZJ6MjXQAu4K`Tp`&PE- z9=ehjI6>8vl`#bZaW%!e{IQI<5Eii+G9UW3aNLyOTg4pUSL)N1vIzapn%4htbagvl z9!0fPRjo-lzZnIMwY5%qh}lm5COVFe3sfX30xK{J7z2ga%;pqB;je0lY{ef}p(as^tIRAYz+YrTw zw`by`_OM;xJq_QPFw!X9RW`-orq`<(Kuw)$)HKcBUq|b(NHQa7gu^SC= z4mOUEPNoD&BPl^at5hmqVEisJh=z<)l9;y2h!@w{9ySRDI}(FTd}TwIVQW}G#5gy{QkHL^Rme7TyH9mZD5h!(Q~8R=^%>rqZNrbdpUF_(KP49|Ss z{2Hd^AuKbQR&v9Ui^U$$i_C-b&dFCCfWWfM-iW-fNWW5Q@IT4-*36PG2#G2|atJY} zLL^?A=t}h*%sk8y8pQZwjX3uac2Kad&k73{`>RA6eWoJ?Ktmdk!emRU)GWLb7I8kQ;_W|+tq=Se=%2-bM1=qi7NZI|9KU)w8HI@2hxE1H3oRFS&;4#klTwS&m!Ip~CE`R8c9J9T2d#Ix>)m_@hQ-i-6NI4? zYGCl4SbPY?oc+Gi@Ct%G>_Do%R)pG99y%cON>oVmw|~Lpn-bp$alD1T5TV2$kn}>% z2^cy?_DZMzU6Yrx$E=;CPfW?Hi3Y|FdUe+DlKHl~9a85vJF}w9A44x+9zJa&?Lb_d z2TH6ETvu9*t}vDZY-vl4aX)B^wbu$_Jy;!B6s0+S>`AUy+Y_xU23VG@w=I-|#N@^` zn4x3?-Q7SYap~FYSz3S5?-RMaRwZ`9i_H=_Cwd?Rh%x8^*`h?wSQAlSqxa}uSW(Se zg@8iW5r9%aK43g_*(w(JL2#Ia?gxc#4s%F?ktSB=in0pr_ao6ZZO;pM1*P-wiBsx>gEqMs^A zJr#e@YpAcjZc=S<52G;WO^k~uo*6@G0+Ie4IVx*;!2x|Z!?=;j zilpUZ=C}II2KYThMN*_M<4<)IXK5S4p~{z9Ts)hnB3@2^F=aMjR77X&rV7Hvpx-*@ z^}E+a+*iS^>vocuqEwWFZk!upUr8EhZX^lu)KRr~st=mA$)ZcZ&+=+;88ezo)#@&d zA!`gxtk5bQ;wE9$GpPl4+Da*$<$pLxA2Ew2;$X^LLo9Miu2zI1-}1TbV1C@*3jU;CYPK3 zLoBFa{p*=DF=f_(q7l;&vThp#1ksqnNE8MM5X1_s#p(-oNV||{_^+lJo3bJQ(W-oG z-ZHx>uVS^R3SYBUq*b)ls_|G>J-0sBiSbC5)&u zx~T*d6G$Y(CVXq=rjx8HNs$+n9v+v8tAiETj3gpek$8^%#1t zuo^)Hm8;y;6 z%j3ZE#0nJOYe}e3;T)}HUFqY+S0trHKVwS>N4KQX(G!I`h1KUy0?Z4Swwyu?QwL5@;4LYQ zsVqX3;?|6z!dqcj;h2XKU`vftbw>#G!2|WrXh#cK2A*5^<;JhN104pe%I($f34@Z7 zN{6Y&YClnEQECBsvwa6))Ce1_U3|)hSy1fQm>WlahOv#vLf4V6WNZ0ef1(Se$5!F{ zppgzvrej^kH5229X2}2mMZ)#b6fN_%h#DBPqbZ8?4v`hw5i8VNFKr-0g6Y0rp?Q6} zAgb^=$saK*U1DX5Ag4xs=H*#QPQ!BsN0@Z-yj~{Gm<$qI5uB9HsJyAsM=+2m2gy+e zYKKOtBml?T8kTC(4~^=`a?NVlOCxnPO=GHqM%+!x{GS~clFJ2@AxaLOiClsVzb$!r zFSSBjVV6}6A*&0%b$D@>16at8n`HKs=L`^B33+my#C(Mg)<7fSO_>v0_izvvQ&o56 zOm>xFWMjkSIj#=k(Ap#`{VyfuRb)HHo(R#?KHxs1Z7t#_+_JV&H}nbh)NuA0O@at+|bZn0%xiYyY(!oChlbu9W`T# zzp4Am70<7^g2#iLg3tx0yH;A_YrMr;vIq{fiyRNB_6&6rqxdM4+5UlWQc{LUc0m?- zi@^8C{Bk#?dUp=WGOq9xWkaapshaXwk=}7Dm5xG=!-I?50%6kl=-q?lGOP8 z@5{3kYoUW~wH@>=2i;MI9z8bVp9aKv15V7iDv@9+k+q`faP+#9Izq_nWJ$Vs9s@R* zlrmxJ)*LBTH3cZdkm_=4;2puEEwG(Mxn!(TDAai-Lo~8-Dln;Db^p46r6Yv9h009V}u_DsrS0%GS84 zp~o0-u(*SZIFdYhbH*QPaEr2?oB`VmV3{H$f4y~i1WQ=Oe9q6W&A2=JS4E5>j3nEL zmeuCKt;b}nxA}BGzAyRjnx9G}d4@V1oU>^q5zmfxoA`(bMG-cCQb8g}sKXz%IX z^>~Q)_&KE7G;Sn%+aw`;wC_j`Tlpy7QzK;M;VL8h8Lr%FEYIXQ41x!5>K)>f`Vw?1 zpe|9eWHFbSV<*8GPW+CK!YXmX+?!DzM%CA00B@ttVqDfk4XSQ%u;XwMQYU*(y|I;^ zy$>U;5zgZxdKIS@=%YOn7@y>#x1KC%=IpLLD$$-rh5fcho-ct!vw3EB)ykc6vL>oW z=<)ER^@Z~kDMTS$MSo1_T$D(|Myz3SUe-oGj4G(G09N{h+IE5eS_QQH5hEvyH0a07 z5x`R3OWsW*4Xb^1v0>-b5A@=P?&{wa*a3@lnSGjXT^MRPd&n!s4-cze-xFm&GQ|GI zeQyBQ!llf&h_bA5jV%ijMA_l}9xP^QzNpt-$JuN`)E};`=(%cqccH-@yjo*kVFcI! zSe};NYJQ8fF450A4lGXbvnDS`?a3E};9&VqjR3FKwbc%4u#DVtz2KZ?aDh^<`zBv* zNwDOr^RGcQb*V@@12skcnZwNC?BE;zcYfqiEvzsggi#6PyL^L?*Svx4qSG+4GQ|$C zHorv)e82hx+WrZD#YFD?ZA>2`$D!7SH_Ro9deBh?TXOupb#Jta_fY*r z+qI+C70mFGM${bTX!N`}{+Yt-;>TEOZ|4mYD?3*l-fZ6+OND;Yuazt}j)vyZ#a=Hf zY{BBmrg)hWRzx{V98j-;@)bCIbnM9iY?$O7uCWg*^fCEE$@*0*gi}PL-oKW=Bz{6p zSE)-+2ZJSvl=dS}461+?5m?mWR-CMc{$evAU8}`@r$Dn2{i(B6J+%2?j5--K6Xi5y z-6y;fAXbMa_v=vU#K?0-gu5$QWQ36Fi2<+c0`sZfKwFNx;~S}lwCplc{qw{XUdS0< z&~-BiXvKH9%s9arAqs*7a;GulZxQ0xZpt9l8#dEmgfXd}Wc&3nmhK340|P<_5(BMn z>9}(6M@nu77q2Q@v9&7i({rEmZpElnA+wz)Cq0W;O*Z@kv^kQz$B!`^)FFR+loWMF z3BtW}LRHI;-W0ZSPtqC*?H4cFzyIBsbC=LThW);q=KpVhJ9+aEvNwx37*I=vf|| zP7Qs=GkAnmlP|+`VOb;Y#VPIkap==AfEgB%DQuvWa1Tl~)VWKP+zUv|uybEd0 zl+=Mt_;=6-2@Uxa$!Zp-FgW%++a-zB$YUH$n4i6k{xM@4_feF5)Q`J860dG#;_SGVrB(Is>py@ zwvix4qg02QoDC1$L;ULxs+gR}1uo*Se-p|EJO{TjD8EEMTtCJbkn)}fc?CHHXzXQ< zzKojsP+OA=X>Nn5KeNwn2Y7{IB0Ejoz@A6W338ND0kK(DKSdn;28v$LXx=+Xm*)sS z9D z)|2-ubH|tQYAkrBv5m*bk(@~2cR zIJX#vDF*dU6%4~o1rA!%DTy}z7-M8-mn#Y!IH@Z5=( zyt<=iha>dvRtDN9o>x*Uv?AoMN9+`-M-S}*1eL&)@jryp*<%a<@pU#Rx;d(?CIR;m zrrHx4EX2CYkpQ~)z^XcIT_0IT>@ZjMb|vb61mrCqKDcH5vH^ptZ)3MF{K4 z4OH}ALpAj?$K*mnr{g?;qpFL|d{F(i_6?<~-9Fb47{@VFGLO9wO=LsX7OJ-c%|PNB zjJSYBg%l=4ZmbQLD(NlQP^0uLWN%hn08dJOLf=@3pQ5Acg!9c^p?eOh`SvA)fr(V< zMiZry6kOSUWG$>A3aAW{1M<96gEG zkDoTZ5_UnANR#(eULy%!=w1VkIevVCCmSRNDykUBvqI%&*+e}pg|#)Hz8xH@{NT|# zxD`F1IgZ6rlFBcN`#Tju9AQ^?5Cdf3-J-25NTk1LDkC|&Kz(D9pyHl{sk|yypSb5> z!Hd{38tvqpUqHV4?B(QdNU~9BXjOJ{{s3O0k^gC|-_YOnli-Br=$)h|OVf?flP&@d z+^Ncz(#dA#p~L|kQXq>5TZ>xL>Onu^w{a*U5+nRZmE!WkVBpe`1O&q{y!@$P>=P_7 z)F7}`n3>IOM8Mtm1D#-{p>f7(gj&EZ$x3n!VM=zyXIh2~!vf5CR21m!JwW~S(RAR+ z%60)Qy)Y1xdkSQE%D3_ip3AzR_vhrnc5V{bMr>&11 zKNxv67tTtNElQ(t?~-blOQB@O;D#kG&!RTE2*dr*T^r{XPX2Rv?fk4n>Yw{F^163;ni3xv5Bd?esnGw@Z&rk zgDc(1W1!_`*Db%=)`q=@lyUrmM1sbZ77?SMkrruVQ7>J##l^0Q^mw1`(l`jaV!)N1 zgwPcnWkX&tQR$37Bg7L;At>wMx4mnngozfyoQbDCJ~^>Oh;EAo**8hw4zlz{j&9gh z@8rq@wU9)TplD?fD1*8GMJE-G0$*H;Uy~Pbvi;$P!4R0i4Z}Ip}QRZ zl2KJY1OZ_K2@U5;29t{se5~b;%4uOt(T?+S&Z~s>l`Z2KD5&rhAr!=g-;BgFNSGU$ zEXoyb%E2h}Erm2Z9)ZEoi}VOGuAOIK!x6weG0W%{l02oEYE0}pznuDl0CskRb|%zH zC>Y?sF$l=lzyQt*tqYY~HWr1DfEJ}Vro9kiT_2!^cyl}PF3%?6z@uo(MR?F&9x>Ye z96Djo{xG$hsSxyDg~F`r&|8K=^i!&%6-SD6)^$aClxsX+@}>i0Uf87egU2*mbn4%Czi1R^mEJl;Qyrcgi*c1x&c&f zvA;F1prayh6q8dpH3!vh7_K```g0Yt_E%k4Ok-ruZ99XhUkHO+Q_10i_$J+OS^2`? z3qCpp8UqIN(VR%hNV4l+5OlqM)oUr1i;pLHl%H?bH;QsoKZq4H7JnktRaU(Y2D&Yi zJ@4$w+x^ ze@{`#sR$6o?%^k~lDbd7$i7OZR{)guz9mvPajt9@=AGo)+1F7cFA3jmVMP2W%RM#F z+Xj%YbwJO}_u_HUiU>Q27Ke}!0M;wc0Zk5=z|%RkQs=*oFSA=tlqV%u+M3Bvpn`VF zlaNg(XQM#;Z=={Dm|Ri&3f@s^Aj=2;W5JEaCUdqAncnqHziyZxh;nDoD!u<3HzU)) z0qvRDyI6)t)7co6m6U&vGMjx=sVt`IwY%PrTyaqE==cK>-U+|W>NSxkqHEvFhu#SU z!o;Tx><5ZBwLZ8JQMD2u;TqP}k`rAO_xSm4I2R@-r)P~jN@LM< z)C}?ZLJh)Ddv$f7rA2QSPVq+V&*G!>O%q2|Jn3O=$EpV3r3iWX{fp!-SL&O8nOP@+ zIo8EJQxDIKew~oLjCut9PrA+wQUx6-M+~L@o>9!C+UaxJj!QliBTcQ7Hsi9X5%Q4! z*dycvuWv!oX=&8v+>S-9gHVB>z#y$P=m=@~*h5X48QbcRbxT6lac42Bkzk38tV7M& z&{#Igac5KB4W$e=QMCao#R0CB{FtTC+0VC=7Q;rN-<$NJixA+|f$nc7AdKw_zZXMi zQN0^=BSp^&LIz8F_&okZwx1Tr7%r&(wniehOg?`eu*3D0{dvuL(=Ok7ou9O|!huy-V5c9=)y&IejFlQGLwOC_Im=#=iKdy-IrxR({CJ5G$-a z{0!{V4lbp1wo6qXcj!7&J=>-4$Nlq^wQ{l{xXEV{=>0Mgz7i=o&#F$D%5E9iv4v7U z<(R=)aP25+8msQ>oZ5+Ej)!x9z5>S{akTPXElIbOV~Krn zb(F}ABo^#m5ZE)QE<)GVsAd*Yt{`*N*2R?WZ=1^E7ZJb#R*K|A!Gf0%qFU$|m`Jv8 z;wdbjIaKpE7B;Pc-e*vx3Xw}@H%h{`ZxlNvp3mUV2j<46Cq+-C{%oVw;GQj_Z$b*t zm4&)Agld`zAG!=aU<=@43-8vg#g?vpT1c&&g&WeShce+(lDx!&Ey5Jm!NJiW+$S$kBvQay@WPSt7yH7M6K*96MqT-d0b+=J40t1B;9$ zE8k)eKDTJJPH22{-_B4(Dnmeqwdq)u+``l(z-7*!ZBj&x5qwxk_av11hOAn^a-_6M z)6!m>M|CKvIKOp{MFyv6AD0mq2M;}LH}|CW51i+pkRrnsIxZSH#j5zC0CHrdzVspG zT9);>xk`O>t#p&%mp{K!h^I2pj=m7<1N4u4mMAlV(L3%Td-Ef-Y zFppW+y$2Jp05{2aR)6@`@fh${5q0!g8l1c+;McHfN&c1Izo(FTyPan1t}Qf&a4E+2 z8dWO+@eSOd*otKzgmZUgh96}Xi+XLlPd!ubEJI-3R<78WX=0dSb4%!Bt61tw0qm~b ziw%4Nihk2O@%G)DKl;OBHXX8+xBXz<%CE$D7XiFS2}Z)x@|*9A$gXX;A-jf({YAJ{ zZ@|k>wvKrl*uS0aOzMErT3z5=*+AEIvgoB-%fPn7Dn?wcRb54&thj3^vXb~o^Er1b z(I=MWmxFwx3c^pj0}tw>+G`2^k?EHL`&|u*0N1A9`O%kOr3*P|=#ka*7|W#im|{18oz z_C@nq$vgeiScS~1+QC5|#m0#}CkA%Qj?L^_&^Me*{%H%0xkX_BB47rH-P#iL@&4+Q zyTzRRLFAc0w7s<#!)egsx*s%c2U`fKh0{Uy+NxQIn7bOKlvZ6O8WxcpeB3U z=Ca8k(dUlHUS+$KV)-SM=lTsU>5DkLlU(#3>5r(+OT(N-jwcS{OKP*_m$iufqif~f zphp%JE?B-LRprAsoFBY~Q<5 z2l)8$^$NIn-28R}m7XZ>DmhL6$3NGZB;5+@Iq&5fOZc-LO3Fk~Zv+4`gCqJYm=i1s z>CpmH2pvzd85bgB7pDFm>O23|uVshkg;1~qiTRViU!4PXABhlg@*A^lz|?L)!A(KzJpSD`jY_%QJByN9RCA6d=y1;1X5B1lHz-1md^gn6oo)QS824L zA%`}Qp#!IUg-U&7sh_ABB)L|`j@c8{#y}2uX+^)$htLc2#I`XS-7o0^dd0}tx?I>x zmGDzFW3Au27_N1D0mDMN?IzY7*NQ<05odIrEhD+Nptxg)asE1Y>4AgC#slO_-vh5X z?F&XOEgI-D&*`?72{E0qF3`0K-!Xw_(9(u;!ED+Gaxd?;$^(HAAA-*$7pOJ?ZnwgN zqD#u}J;{Ti%dXbDe#E`2b2s}uiP(n}UX4iU#7}npneocYVe$pa$DZRyKY6@E4I5ZP zi~ce+huz(v4MR?|xobN9Jx=;gTe}dpHMoK{q*sKgTl>n`~Iz z2;NXsl}c<4b=@Lb|5XPnRjvzMbr8b5Z8@se`^a77gD%s=U4A?*9 zW{~swK|XeFSKo(UZT;q!3%ZO2-)vi zf^Hq-!dX`DYF*+&yl$Zzgsh^j8+s$CZduxcI9K%=&h(~~<@qhn zdxG1>7qpKlzd!%V^e*&b^greGeK`yCFR3mBx$=hFNX;?%DkF4f#)k6o)bg)%&IL3Y z6&>K*Vu%L!qr{S~ce1lGVy)DItGekU=6U|t1f9}!y$vO0rI@5xa$5Xgy&^<|F6F+u z?3i<<+?Y(Io@DH!oW>ADv6ZQ?;!}MdrER?drRfSRdAGOm@z%iLF{%y@|P8qt%LGq*V+%`G zJ{EH5vX|3DWx&;dg!kjGfB-k>k67`tMjPm2rif#mMQOG!qLZ zpBI)N>!B|Pht*Hg(7pukx z*Io42c%VD`mrw)wt5o1Q$YoS&?jz$#9Oi=^YJPDO(#9IpR9K!(n4qQMOgUy_nZ1+( zu{u6@)A93ANqOXok_wq`;&OK0jTL-p*T$VJ&+rTLd`DMybTb)4_Sl-#3;=|cgsIVA z7!H~VSX3LsXu(ILjWfFkog*4SE~t5{yaUCYfZnvX3NRUvHObFfOAlUpnO0;rM_XaD zuxbtr&|VN^()JN{R+N0F+fBZ>;9kL-NCK>|8d zKr0bGX@8!cf=B9sBSu1dqYBN_xu7ag`4IfEu}4c#KB zn6sajVA0|J(E@4!44BptG#9g2-c5)}SPPADB*Q1Z6LEOgd!WGEu08B6Q_Rz)nOKvV zLf7GEccsCWyZEG%Bxi#$?P5gQu!vL%f5nJ$={dKlwriJm4AQz zW`Y}IrPgnC_M7W**l<8CT0u4uR$Si_e@0b+*Co+JwMlv_uF-;9ezMQM^3 zH&2BX;h>Jtp?Vov&$ZV&Y4`ewMiELt0GpL%pHj?|8!74pIER$*`Ip=p^3HYV*30nE z1jN#90l&6ZMmf2xN48K8zXY^KNfUoRELwyn&Iv;b$Tax~FhdXCsE{C;^8&~ryM@bj zu!I%ua?)Bz!C*VbByXsvTp9i$_e18B+hO+Vi#dVsmt(=R6_zxqm;SC@b^T`506KArabvc2XpNw-wA zBdjh6MA7|&tq(NS)w3lwSBHR7w5TrfMgw2*OA9+MI|yTN{Q5$h(xPl7#{d&WLoYL& zrI>$TWzxe!^J*if8UuCF@a;%;2SM$tc0$AGJ48|l=8XnC3ld6g97tSDvI`O(Tyk++ z<_C5V_lX1&nMiOSQIzlz*s5Rs8bTI9Ac&uk{{a-uTgYsN{I2f=eh-PrOZ@~x{Q(69 z^&{@bhy1rA`u{)w!&IKQv6Y>S@qh70v(#37aTd|Os%cG8C7^SIViOasz{VpgSp?2k z%!T&!_w+f*qIHDKHtU>duJ4h&aUX23njjh$6RH4E?s9jPA_i%d%p$$rUm2+Tw5LbM_OZ(7bz{^P1iCF)}Lav zVQr2}CshR`re*5ToT+Y2;wG9j9pzI}FfEsxzU(gDB6}SpJ)~4_2kdC>_GSo?mcu>Z2{*f8!Q>cw> zY*i!^=}ju5A)et{n9s>|*oB!bP3?+{s*Zrzp9b*X6Wntp*eV2re&>!!_s^hx^#z^) z>)EqqJ8w9g+Bj%UuulkooQ$}oS`B@)$)x~%Htm@BJhPX=dec;_L6HWnI$8j2tHREi zhYLJAbfxY$J)AVx{fTdQmYS-2U$5T5?JQ`*{S%L{5sYgVO$_oI7l3Q~AT1mtpcgtG zmH6v4It)xzUknb(OPFA95|gfpHSX;O|J*dxLG@@1-_k{`oG`F_9dwD&{7{1>j}O`@ zM1m<0ozP&5sUVuya^$15OilULD`EuMVl|R(n+UzLh+q3vQ_FI zC>LUui4e5d^ZE)3(B=Y7UF+CD<22fETg^2B*|1kb1e3rZ6THa4PYiXO&CYJ7F5*2C zRB1UI=4WGEV(%qpT)1gySFcRY+apGfTxn z@V|%5aEV(ZF3VFSQBlS9+V`aIApLBxkQL1`eb^|96XHt13sZrw}1u(oL~N5p~HXoea(WWP4u? z1jd@tg_P;Z+uOXKM%}+GPRRgZ%RF_w!zQyS(Dl0}?yd6APs&|qHw#}s8W=Od zVm2N{BxR4B#_M^LmOqSQ>nMCi{5kgJ^6TPtQ85v(pQVImtg=2a`4y&kMoxRz*r};H ziH((zBX^6#A1lb`cjND5*u(CG-PASSuo7lkYjzb>{dc3e6c<~3^YUC{_Lbpcc8|SG zvCnbb%<(@#<*1tVmgtaJ!7zK@j7RZnWf~yRNVEIr%lWeN#uyObr|SaYVB)&fG!hhi-XvHPILLx&fR^!;x3fBO3JnYW7soYB$(gqj%6feF@<=?Y$~`+KX;I z>DkeHEuG-<4vE2Lt#mqj-gK3WP;=Ke$yD3h2?bYwQkyk~cxYtjc~x}(lBO{`Ihu#! zzWoD;zo@%IUYFP1=_=hv;T^0UVccKFOmv%LSQNY?=gkehzYqZUcPj+~O0o<_746I( zv^88A+Kkn>lKIgz9T9M7&=i|GaJp86SDOsLr$~~mVw$A_bsFK3dQ*+^NG>U(WJFie`yH@BLk=i%ZqPmN#h zLf=gMtw$4>9_8gd*#g~Y4_?TfK$CDoT`f_aHsXBu?BTG$+uV{Z_6j;r*BT1=c~pBx z>#lVTofDRhYjaqGvt9G1768>b(|l)0V@K1Cwel>c|Ej)hcAPaJ{uDHtA?`xyt2==`yb*$w`larw0gcNPI@Qn?C%F)2*0O z!-I6Yl7csPNb?elwu{P*c(W(I+@t|pkGC_@g=@B|=Wo^+GmLBIn#MS|IPf=3eRz(t zMI8UJ;|t5R*<>$A5Fc|QzUhaxER{^I_rE{?J{*l=d7#|fv<98f-7ZgsJcrV}9Fu(a zdBCU!OK?gQR|^wEMKJR7s%k|nY-x6-@3lZ&zFw8;)>*$Wihm9JW0T*EvC$fpik~}3 z7}xe4GHml}Ds@3e+f2jnr^F|UFDbq0)MNkSLs^=~@xetyo}ahz$twy&^v;2dt$Xr} zK?mz~nxeh-uK+HYCppO3uiR8Ag#RCVr-Ye}t;2uoovLSF<2vf+2K$$xoVkuJdLT?u zY%Du0I4WgKGN_`J6k8*8sdL79F>J<0ZOnY`?&~``K>$ni9%P8^^mS43^k^;%ceHo> z=P&|yc1K54Y-Q{pV2kG!-_hIjp6m3+*2l*Ox3A7~rooKWNxtFfA3zIC`GI+`qMftY zglt7L^9i>5bW)`TWvS@2D#Tqd@CL*O3*2bM*iMXUpWKCEv|L1n>eMFtTzMZGYky67 z!E6yL$>7BME3!KP5EZu1DO4G|$XkYK2&h8in1}5^4sdX_g_JguoIt1uPCrsbwGTez zb%lUiQ;4E9TS*g#r<<3w#hsWVHo(#xOE0%9pSo}=%N-$P5jXze6e)6y*fBR02P-)) zk5glgF2ee|`Emow64-)V0k(N65{OGFX3rpm@^}A=nUr$-l-Z=Kfq$+^S&RivP$$9} z`HvmJqAAe{4kr6@0p8F%U;=6h!9)Bjsv9sB+;YI3UJXU%zwxC|;?$*;>(b#5p$8wd zSPIAKhjN?tn3RzrZKY|+%gSaSXq0eZ)nkmX7pBL3C0d8GG-Zp#nXX{$I$X$xx;XGg z7p>3}`QrhQ%rqOuH1UcMY-@C3;%06u&k)U?$StTTvFQ+}>`254p&!DCF4Y|Ro5IGK zct>mBFMq%}YK5w`n={;OlBeqD42$yN2T_z^ypo*{fCN`Fq6pIml#3)Piqbi%?zJiC z&_PqcGc|?)q3RTawO9m8bMi<6uT>m$#Sp|fBT2j)o-qL-LRcM`KgaHwcuA!RN|57E zkec|RwbI0wG^6*x@NGm1f-%`Q*>V&jS@#NKb;f5p%4Od)lc4fGPB`)V3Xq$L2Wo#% z`lzx27SfC*lB_} z1haxhf|JPoMRA*)o$l~r{IZ?fUBY5yXLk!kX7V!&{GkK8;SAvQC^^|vFUA*1&KnA8 ze2tn90@~R3`B{XXHrb^cNeaUMZQl=T$H|5M+rS#{Px$WBhUpY8{pDLk!^`55p$2jzvT)6{o~WsP;=8!PF>c zWENZs2tK7R=3>er&rNil#7*8|kv;xuWSx=ArBeR;=w0+Vh*PX4?GOjgaP6}GLJPA} zeqc-Md34qbib% zWl!G{-Q+RgfDi=sunFrhF3BdiY@RmibP$$QLXIR8F+lE;*LJ^Z?wf^gw-EPyp)o+V zXtH|<(&jN42S==@QJTYAQ~0xkM=mG!58tZ0W1C($%KKM5k7{>x`URHDGXsiWX`nf? zIl>hDurl?k+-p&gUH})Ys6f#5^LG5dFgJ;vC6NJYH;$)b_c{V?6?JBXkp&x$nClq8 zh&O+RHR3x=Q}HRIL<9JeYJSPFy+WrdI^v%{VkmI7t@$o&r;OqQZF6Tlsf=D=t;%Qv z_L!%O_67A@Bk$Da6lit}_tSht-tHm*cWw$+o!)3NRDWe=Ts_>ie3g`=blF`L0xfUo zHv2jn7yN9m@i(8Cy;(+M-Cn;DcxZHl#l#j{g;iz^TX^^692%>%!KfIC!@eNdd- zGmA2`MESDMcR}+p7!RRvKhvp5|M#CyBLKHFx+D0vZ+d`#SKj}_%TZ}tqyHCP=?HXD zFu+QD)S=i!h>8diij*{-d{G~Vyko#r-^Da7O+>IlMeA(UgP=^)vO;tSwrQEi#jf-kDRu4y) zGENm($!&hN$mRirOhg^qtHGC;8aHiXK|<6w?}Xw4^#_2M1wmw> z%G9y5B#KyiUd6pGk0qQU|XDy&sL*rm#|x;eeX5C>I-7sIbsU zNR0x{^4YAF66Z1daVOD`hI!-3%fgMvP2cs?BXxQS-2&4ziULD^g0Uf0sFxZB zL&}yJ0F1S@)$>b^{s?gBx2U{Phb0PL{GyexVQPQ;@)|4JM1XbsZTD9yd`J~4%h_pKsSb5w-mh9+kR~`dXK;XK zmF^F^whw9(--$=3eG4DV&9JNlVUDU8K2bS3CaZ$I-?ltnTO1g8Fb=hFOWBlRAOvhx zo&@r=>j>jKa&j(LQH3-(SjH3K(n&X6UM^V+uZNkb8Dcy#gUPJclSIc8ac9Ru-ZdQ` zI#30pw-Ws^GZM_Hlz1=CJl8@Qbi`EETRC)DWgT02GxZ!(PRL)5VP{PrZ$L0S2n4`8ZWlYDgnA(`u}nsJXc`hte7_1+N^dvbgPNJgj+tkr@4;1!w?hrk?q>=< zAghCF9jmKQ;mMUN5655$2}y`A$JjlT?EJ=HXr4A7cZ9@SK?U7Gd-#2u?05G~>eVzU znUu?HzD{#t7jsbs@Ic8RLG7Jt$|f7WWw(gfrq4RC{ksc~zSvIcHU1SZ4?((nkv52; zlkpdW6hELFt@gzrNy4mzZGm^D%jz)kzCT$O4nV`edTGri zyv#>0t14(KqYLc-F29*~Fgpmw{qAgWl|fkSglmU(>-Nl2sTRM7f4gz_*s^<l^HO6&_1ayK7E9`S)j}TBr-8Mncc@@OSY~e1b#>gr|0i2M=<~*7}LubdMOTL z_>&@v5(!%4T9jCKEYv-pVZG<~1Hi!HKY%3L>5FlyuE1!>Qo1Z1rKoGRd}hN@;Cm=;|HAYaIA%3v z9#d|zNPWk9TA01-QE@~!*TOrEf}2LP+-JG8DfheJ3dAk`nEZ3sndS!}Lo-!+Cq>3( z3Y@EnH`A)VX`~ZGkm{~{N22|aAqI$)ppC*a>2JwHoT+l-^!l)(>pp~!z3dK}EB$hwn^ z{wX4Far}k6A!al*Ih>kiRte9fty z_Zt|!0L-${9ib6xid((`*R4I1r&~P8=L*M6gfBHd50sbPgi!I`he{kuD6MY7s_derO`lV(T{c;Ov4M@!vg(nkmHu` z*O-Ep*d~>cf02wU?g}>RkeX{LG`OP1=lZktLC6XD$$1C;r2~6WGhI$7S+f`qNmR$q zXN%_ml_UrLwk#QAsMlsztUYh3f7N9vM1?o^u*ts4hinnCdzdt{s8 zJy+2k#vhK!&pcPL*0*5|dTOxa8KMiXEDF8Wa%=yhs&N=>Y7Bytf{mKh3Giq6>c|;H z`>q+uCD1kYmJ3FhsxD;~>{lXgqgG!$w|0 z&roQ3G#aEt+~Z5PH^!hZog12Y?CJ_Uvx%9t^ftKo=7SYXb)-pbdkyvy~Ij=*yI!!O+>p%*2G@e>(#H zbA(i~`)@wHs#;%ufT$m`xzd=RRSW*VH>sMS^RUjRn)T`6e&_q;QvvCy@lD}(X2;Sv zS@H&b=GFAP9>M#X&dX~)is@54$-i451J$P_O{dP!T4p{Tv)}$M+tz&37E9WhR(%&+ zaNaMzre23FWTs)Gi2b@Lm|RS!hBeT%De6zU$N*p7m95j9;Q+(N90*1B)2LIkIoG%= zXRVN}l8$@4XvdUg#a*px?3P!pla?2bD!98I>JSxNFG;sbYt^+IJ|aPEKq{npA8KduyAd<0NM zc>_g%+UlziY&3O<{lggZxh5o-H2}SJA$#P^AZX%q{MOuANWIUvIEpri$@n$4kJH|& z4J|DgH%b&|v?`u`GffeOFLibNmJ8ey zPJ~H~2|%w9o=zoa{{ZH1+&h%PWYw*?xD8F#g}9kcuRMPjs}#_gbdjzoV)7gb{N($*{fIMSXC5Lwh+X1c9)} z5-RNQ%dn5;u)oCMNnIZOG&rt&1G-dP_tQ(wc>6~Tb%azp8t!nsWPM(szT zv3CQX{T_KH({4+$Az6qsjh$&zAB@KLXbLC5L9|~Db*uhe6u{M~CB#L&2fh?Xl8Rj( zyF&O{n_Hnwdc0Ax!%A1#aDT}sXVuAnW&+lLIi#cwN+FR(tTyI@f+D{^7jnswx)}SD z4KceKCu=pX2jm~>-gy`44f2<|XZml|J)Zxp{>TXZH+MeORoAa;g3k@(KWW8zv)|^a zm0c7Sxi_fjv?Tmg=S8F<iv?rX*eWBZXU-}yDKfXsOfhm$ zsQu!{Qo)4bun0D_HMM)Cfy9K_-Erfj6);Tw3GCtq(#)AVuSbesGmf@AvY2Bl&@B~V zN=i2gyJ3YJm2UuJiAgG%f4|ZQwUiYtMj%f<=))hzv5PDx7N%F?$DAR10q_;K1Qbrn zhiW$ncKgQK4F~sstj$NNpPgTrEXH<$tB+o6IO7nR1&Jgwp~lIjX+Zo0_cDs^pVm}m zG@)uX#WsGhS>F@jLRXT^R90rJ%#11xEdn@>nv(CvCO1kjUny`ZQE4rhbVpdxkH8=# z8;}ij;Z1t?YC0|?{?Tr5qpxfqs+7dZW9~D5+GT=5QAWE3wx(2l$9yy8SX~c`OqR zJdR%`3NFq_l~X@lX*Jql-KYP7S9qfPgT|2WXIMu4Bl%Ycu)5C0q66se3U?UN{Ava& zu&&t%S;h;OJ{yaj6vEGUBW1L@oZ_hbjShYW%J+vQMVA(fdN`Y8E)S^&&!4*^Aa#W( zO3X7D;0R4sp)3}W|9u?mo|nxclo-j$GBeMXDZXVfgLLtz#lr(+T%9`!uaC&HvxzRu zj)WjjgOHL1Vye!avckeOv8}pfCA!|xx?n3P33E_19t$9NP${kf(n6GJ#G_&i{CXTr zadmlpe;_RBb9`4KMf`+Wj7!W{BBH%NDx3Q<90={wHYAV$NV$bVoN~p?@=tvzU{i7p zunLn2o0rBR7Uik-dt;xH;^yY*`pXIhfCU7LLPKMxlgiVWo{`Dp7)~LJ0#^tPBDIMG zUDDzJT8pI?W%mk%7*g*_T1qMLxxVmwOb9MJH}hoJ*C%>aM1dl`WhDtP=nhJ~&FU8K zN-8Fl@cS3rXnOIDj@?u1?rC`PHEdQ5s+es=aInDIDmcm&T7}fI0A}VpT5jN*r8p%>*=3bqnwS?hq=**pK1IX-syHURpPGwxT#DUuH1V{4D+fX4) zkfL0_aXCkK1Rx(BFkQD@;AJ42?KpS&(*_E^t2v}P=yQdH;HvlUaQ5viLrP+V`zx;lQh;|0@D(Eu$m0*$E{SM+g02SGj-AiKKq&(6X z-8NEUPliQtn~CBB*@EOvD}{QNMTC0(;h=jY>q9rbpXoS$VQ0Z|QyBK{m++j**%0?0 zt@Ip-DY-s&8(AQCgLQSvt^MJnANFte}7WlVhyb z(LN(xD5)5xEld7--qrK#?_=8C(a)YuNITFi#!Pjs9xAQ&=5cGGI-RM+sPs#V)A-%- zh_55jwo1+5yi^mhX|slp0#K-&;?n+KF_N@uJ9QTa703-(=zxesKDaNePuytb{rV59? zCbkCdO>W%{xE(zHlwO`^0M&978ShMOh~aG!09w+`EJWG1#zwsXO|3y%@D~V!=xkI9 z<{x1S53J}$L#iEAH@p>8k4jS=P0y;7> zAl@>o$=XC`-{pcSv2Dntx_xhqydE=}7)=CuV6fUUDo#S2#W+21of2r6MLUexUk3&1 z7UgzM4}>2WL;thMsj!!bueWD0MOK|H$?7CKsjAb|JH;GV1mpz_OwpEkk|zatkn7b~ zu|=gYoQ$^e=5wX!9eFFlAV08(yTz*6M(F;~01!0lIH?k_;6VGX5_P;cOo5(Lv! z0MvVa!b-Ij>WKHPqDE5XO6er^80bu$SGK>lb7a76YQp!JSNE;{^eO2jW%@vgxTzas zT8#+{t|GV(SE|beAw#Cyk|;x$`&*#mN_`?c6ov&JP*!`ods;PokgN|SPbaF9`UgNr z&%sKHjZaUZA37`;tn2H4H$bEj{IQBT-+}fJwo?L({>$3jCX`6%0}H0lD@nA832P0z ziMVjGJKN9IlAyj%xbHSF%sAUGJfBzYHi%$cRgV#0MD3wa$7Z5%q&C=J%TSW$)oe=Z z&_RDfsQuuft5N0?gIbwhb?cZueUh~xI@0tE{Ek9e@&NmyDjb{bJ2>~8?dF6sGxTJ; zJqzKn`wIut>Jv{$%dH6xfpB4qFY;~I{W*Rq)iz|$DG$_U&L_~tHvqGr=nu}21VO+r zIZWh>b*yfJ)~K7`1emW#Wxu~int*Qj(MdB}?M{tl_sWG9?J8xsozXuQ?s8rANer2F zg_vyFSh%66F@wx-KjVa}UF~d0m-76^TkrP->=x|%lmfJ72lEpMYyHrYp*KW&uD0WV zwLF+DC(BiqU?Ra6y1{7U=09KL2dEdTQ|e!!EE`?p4ju3~BwVmaHf<1L@9W<&bL35W z3TT3QUcYnmX~^&E)+D&Spys$Ybp*`B6{m09zRZePBCI~mi5xTTJfiF(0rU|El;@B< z3Sx*w7@}B|LJ4E(d@s}*{Xk9bz^<{cp9^3 z9B6_=hlUbDeAfUA5JU`uLY5&!?p4*?tL0gZ+{n^#F(v71ZvL~hRQ^C&HP@U?_c(81 zE#6t))RfX?$>6!Xr2F`TH}8|9L4!R5j`j}$>FZf0yNpkTLanlT`K8Wp8FON+;QEr=K`>bH#3Gk!l?c!Gp;Fj?D`s^vIt5>HfbTuo3%&odaQw9bTxi4!L_-=YdeNTz_e*;N<|Dfa+9P<0YJsXr z>QXLS$DTo?3yrO-gk)P7bzA8uQA2B#VM19PIW~gVoG9 z_Pdj+c9TC{pj`?^gMdMQJyBCd41k zfNDKIQh1w(lMXj@Hdc#w;G9~4EgHXyt!?Dyb|_R_o?Az0b1g7(c_KM>1^XuJ4m!(f za)D55;EwQEGT6vqxoRyuVadQXRH{_Xv7p5D0AoDBy+@NzgvsS7j&&!2H6A}x7{%jlmU0}d<0l)U@kmS!O^0}jmxTS=-K=TIcygLPME@^xVi$|@h! zoy``A?&DZu@HQIHp*^I%hB-$_?38 z1j*RE0;lr`U}ZH@CJNP#;$7V3XuoZ!&P}!KHZ$7vU08LmX0Dd-h`RnU5<9*`r7bsn z-cBFzO_-1`ieYM$?g*%gSao^h)KJK-a^2Z8IPar49$~e08F7~St2VR|%1-1Jjx~EG z%c-NmN4MgT3SL&OU&!pbhhH>lru?pdFZa7)Rk^3$Ug?Jk;`(E`XkdWc51a-`0X`8( zFZ3rG`w@yB8QR#!12Hb?>e(5q6jM(jV zZMZB+BQFO6E6$IbQ$O!-jda!S(~I=`IPsdmRt)ui;p!=i>`FN~tEjPht^piaUwqjlxYcXk89mjOuPp+Z%^DdR2)(w6jG;WlQe@>e=y45O^&W zJsMKYkfp0bO(5Yj6=JT!&=&r*k$0WO=pC>Ha#{^hkeL zJnc?1cX7;hC;{bz8`J9o0>3l!HEY(hl%ISCIcLsQlvvGFRC$$(UURU~vhG|}){qH# zRk#8hXvAk<(goyA-%&mlP2W56DH+I#pKHYKd0$OBuSK);Hei!D>Vr;{q0sQ8TEb&i76 zhimV4D7wDB21Yh%Y)ubXjmz5(KB~Qn(ym%KMrOj$N~SsRFFv$yteJ48|1LYa7_1dG z1}!0`SjcW$8Eu;*OR(cAkRta)DTm}p%KTyR+h(dzF$uN7f=D*)lz|5I#Hn$zg@rd?TBU~A(L#j40VF= zRPAnYdz4@Hg;4D&t>SmE}J3Gj!QKei$cp5m7%D*p29ZVbRQeya~YV=VgS zXb*aLV?`!=XZ$-;YLy74+jED+Zw<*hGW$nhQ`B6;vuDhwsm&&JlaRUIu^w~iG{v=> zeHZcUGbTISc6D$4_Aj@MZ>C!z*56BO5C8%My@|u-UYNx(2!+_6_1nLdBS2O14;T1M)Y{~p{QK3-dV zrEct-Y$z(&dAq9(*PR(hdu#bR^PGHyE(DB zM&jBKVaV$wEXeCBXxar)5G^GTb?b6=-<)K9jCasE;_L{%vg~v@%8G1dZZEYw@yy?1 zV>VO)S1iq8`yQ*pU8oBHU2Nak*eA-Sx9 zj;8Fp=JPA7g%|hI9>8kALff|~bdUB=Q#N~6R7+mgqfM{%@&4MYHgDjRmsWNN#SOPt z3P*N7&J8R5K8nZ)i}<$2{p=rIO;d;YHt}K-vXQT(fLbB!*c8kc4M^89Zf#<-ovM29 zlyOyU^3xbdV7o0wb*z+Kk+xsOzK1qRhkez0@Y%k%HiPF4h&vR=c#C}kZ$!oc+WM|# zuXVSheaOsURyW>rDMLtySIS;OcZFSyEyv~4Mr2oa%$~s3fZNK`FW$qon2~pso4`*> z-jkdl+rKeGPodXJA4ShZOrLc=DA|usyBHs5*EFAE*O8yHyk}bhTdzN(j`pRA-SG}( zHpHx0t>WJs`3n0=`etjTf1~@b=1*ORKI;nG{p{eEiRqt7*`oa3R93m@CTW`jawl z`6?+4M_H_|L*>sXDn|x{$!YE6zSqz$C+!GyL|vKc2yFO;zlQMbOK&bKK>t0K7CSKk z;viAb04rHZrJvR%;$Y4utrL2Lj#?Wx89n)qFIBO*?lV{rsCI-_ExPSZ7#m(8XW3ncb)^f*277E-c zVp-YyKet;{owDTcUz@E3{D1fC68jG|n186l{|JQ>bhk5bbo?(*uq2iLNq1tm1LFl{ zB7DIk*3((7(M1|(!;|F;(-Q^F`OB9QHjFr1xp1E5fo~KqQ*z$J2ua)|0ebInAE+ZY z8&W(;HYG$USsO?Hz&kJXK0iJ{dtVtb(b+wJ9ygP51TO4EQzUKP(8*!TwU)GaEusr@ zoXdvLEG(Y&NhHbIJhrbpS0GjUF=ZL7iPB9;c+|~R!)mp7~99rw2i!~c<3Ti3Tj-mMq zgriEfr~#VL#}sfT4>5|4Vz-dG25Fr*R{~%F8q7W+`SpPVwd$4NeJAK@)?GVXicLo^ zPZ$|QK1Q7Q&z^T|g3(EAnZ}sJvPk3dg}!=KDM;Bv;oSp#K$_bZ^x+21patcOtiqlt zyF3DGI5Vu^F>6#OnRa|2xhYAYmz<^tp@_}Qju-mXHmJ(GialHkX7q=ikWie!-8uNk zP8VT!6QAy7b2iLC1`V0MyL4Wr5cC3|!16T>Sjwm^m)l7oF-y;OhdFpaJMWf4bio%# zFVqw>Prz*Fh+46N8hoX2r%Q85W5VcBXD&pU&`uGDJKz*go}{Q?Q|kK?Ze%NIP_5pH z;WQTlFf+6`>&PsqR)5mLjsR3MY5(BuZnyh>vk_M4>p;&GWgooi?Jp_&EY=z~#QUR| zo-=cFH&{Nq!obfo*+mAG5)EkVBc^I^3B^%|Nf)C+*7GzJKPFFkX}z_$SfoYzMs>N* z7(u3KkSH4?B_bMwfs%e}kDpV3-l(4?I*EkmDYS3T;jfB0jh|?z)ZS?V%@Xk1NZ$rL zydj*|G)d(Ymnv01A#!&d;APIdB3b?2vkp{34cK6m03-=l1+-Hz$~VcBTj!bLtXnvU zK`7&cVFVkol?~Q!0ih{GgK_XVx-0H%-ZHIMx{X5D=8+pQ6z;vPd*&gQ< zq0Dw?6^hK*p%D!J_=x^hlk_=wE+_tzrf2Z{_CDgvvor;EIcG0HulAb8X2xodCD@v_ zD!Z{n>szKU|)jgwQ1;2V%}Uf#QF4a?V(2h4u)&a!gkRu7zM0h=I%i?Qi9lO zLa}89$x%#ZPJxn=V<2t`lOLAk8ZX_Fh<3hg8YvIUHffd+_Z@;L8+JPr^9GEg!~V~I ztZ4SG9!^`nfBQxP_3vuMf5?E#{I6Q^U#divI;0oQ0ovzJiN`E76GF4tuz19gI+O_M zQNju6u)b&^Tx4XZU8}4EDOp#+fjVfO^9@DSH1P1WAjERc!b(A)6qZh75lZ{9?(96W zYRm62# zbiOtt2U4s;QuJi46=qh%%Em(zvCsnzInI)t16`QmNRu*iY-D-lr|kvpfS-L6=gYShPHeL3IvbSu z7{Ad-kgX(!*+}YJo!sGZk~xqI0z2md-0FpBcf^~?&Wwei7vHu8<(f2H;SH#(N!b?k z%k~&IBkEH5IonZTpc9~kG!oxuMd{*<$Mex^`O6B6A;HljVD#%T#0+2zgo)Y%3!n#X zsYsQP3Jcqa@zvUgGGr&>=GWVGtflC)6~GRK*h~R^PQMYU<<4r-0@DITM3gTPs08_p z5)ckb@A?A>`x4G)kpuUn?4EqXno_^hR+1UE&v&UV8U>y#zGqU*PYT#7L@|y?1&rp9 z;1%apHp)XbKuskx<=9Q`Bv~k;K*K*-o#IZkldAiEr@&PUryr_nM2zUfkIO+HB}3QUU~Gb+x*9!sK< zL4ZB0B9bmmH~QNmiG&ZY++?G;2R)t9d)~e}GOFK1j;=BU1G!;LPQjF5tj&bn9D$DE99AHyQRe5BjXrT$lx8-;l~8=ypuEatMOmNlRNLu*sr=s{+F7 zL6SajHKidmic^G9UrOdjWfWPaWU7V^vnx+{GkhO<=I}vYxwDC@e!!oylS5vEN$bG! z@}p+P@|i8x+H{DH%PA4Xqyp23!Oh z2SVCXkAh$o1U1yHWkifq1KS6VE~x!7r~Wjko6biHJ1vHQkuvOVm!G%9f-1nL`~Jd7 zo*S!D;~@Fr1U)j+7qpll&#i*h0hRD#mfs3Hv}++9#xmU&2u@I-O>5)gtQ9oP`ZB)m z0g`0bP1#PchVe6a-C_j8!ybfwH-Gx#2uwyzE8dh>sT~R~KtEewvKU6Q6IP?HGQvJA z)|raq=@V88I_0%i%Iy$FTLKE8Zw4{q#76bz#MZ%DeOlaqWEr8j((y2yVA5XRnhXPsccuc!xaO{~V+*JKSdHMkbe;7K_6f=h;2FKM_fd zWPO?|F7uq2^@(9rWF%p}RyeH{&(+PI<#K-~u%z3K8Lh$It5qxY7j1VhT;4+U5cB1i zIAq487Uy@A@@Dl(e2IY~jUZLWX3u%c5|Q^aG=y5cEM%zH$U^kDP5CtDU&_7|1b1oa zUU<^q_$_{(oSTke4H%vclEwmhrhE=wu|ZdRyC;#g8Y>_1hu=p`RvCY64>a{>>-8f5mKNvS~VJ?w%<0Hg6b(%hB%ms?HKsH)8itVk@$&C*Pvp2{Q> zFW#KJ3P2flG6I=`bVnZ#ZNqd&(!a1DjnU#o98K)>WpL~awMxw{3kCk+vrIcl+TmZ} z&J0xexJ$I3JkQnoZ+!lltQS%Qn}}IEXm9+_H9bqn-h&`mDBm`&cSiEDd%|+;q>t0< zNcP?2hi6htp5<8!YV(Xy_kwR>JIQu$tvy*Zfa&e!jLUkf+j=Z&AqFHYW ztZujLEgOV~7fV;mj)^E{jov5$GK0(}^3~X6f z`qU=22Ih1w;{DDHbkd)w_0ZdHQY;H zYehCosun$m92OyqEfbv8szt{cR6TBinnS#Wh7jV~8nEc-cSkbR2+liYhBITh2l@voe1 z$Z#JO(3)W-7NDi1F3O0_HH3*3`Dg%9fvwazFh zIYGT4)m4t6X2;MXuZ?IH?ktwY)Aye4Ly>~Eewat!y>JqCd7M66m{b(K?jBqfHG|Uq zvb@uonNpV$;h+jmK8_7bnLAa)lK3sk*<9GH>4ZnPC}m(_MrPP1`CK}1>49C6>xgpd zbidYDZKO_db-sGz=T?HZkr$+rp$n%q)!b(;DePtZr_*rVnb}Fz75*gCgSqa49F^#c ztJ}Xdi+FUkGE{$cEbGp`djEkRWI^l%>nNG3* zzO#UCAO1ATN|dz#+#V>6~LBH#(&sowyVGWV(WQk_-t&-@oYkl zsRhNqp&+fR3O!#b9Aqm}QR4_FsH8^-Ic-;NREgq=&9mxi#*>kp{EMF@w}dwl>!CG? z+M`$5l?uS%Mf_|NFg%2qOL}X9HhF_nUVf%|6Y{VR>|u^#0!rVj6*4Wpvld^7Rl&{} zpntA~7(FspM^x|T{K$ZBV1mr8_)Gg?3JS)!5zmfshl|B=my+Q#lXG2L)JNMF@QHE1 zmvuMS^a0+bKL6dP%BRe^wDf`DC;;)e84SXTyqW*35tN3G{7xZ8r7~IG5cwxuYA|%F zA64m&5}pOpevV+?-Z6GJU5J@KZA3`TFm!YLfn}O31n&h)&dqwj(x30@9VWtG)30vj zR!A}{`_;$^y>YJ@DrAlZ?s_`HvL{Jg2E& z$OG}g)@nq9=Xyt0gkxpIP1DES%8#yrRA0NSep`m+d(N2t#xt%B zI)3-!V=d>VDZxT(#no;$F7D?qAa5;34AgAOiw(gQ&*qYAJHs*#$Y{Tl&i(g(}XyT z&Q1%Pqq0wKu;GN>c2aNS^1$!Vko!lHJEg(=kj2E+NJe*wKJx@gFUiSU7um=G!rK5s z*R+qu!eZhtVR`yUxdjek2YkO2#txBqHD6U zo>)554-sd|#qhUdWdYeP?Vv1e@Vb^MW+AtViDBd7d#y_#QmGzP7jbLpwh{YUry6_unxd;s% zKMoUzg)on`XrShtfP(pN@GKW1N!Q-O4tsPw{&-!X@J&&Qu8=HxXq{?%&Ji})qjuFj z-eoM#ttONX9km_9Wu4abCP=kb-9hJSHT&;cr=qS{HVzZ5Q+yCD9VOecPweXl-QZ8{ zo_0B}2J2Ve=zNzPH@>eryvJC6Vtgbwt!BL0_tK(&P=ssDs2)9+wy9>wajyff8^wlT zRn<5_1`q_Z?DiW2oK6KYf4n2EiNyE5SjRC+^|Qt^>g0#@LZ;plNgyw_BGj>MXyE3$ z09?`9r!6c@{uMW3aUs;L^tJ8TC-`?SIPw3F+a3`&6C-D*|LP8qr1n40Z%xz2NPQzA z!s>y3#k1_{WP;(eQB}(G=#~DyFbntb@Y3Y=%w<&ct=qvot&2L^yVaR{Wy;aGdJnjt zFnV4OLwh@=4;?H-f5^qpPo%HBp0s?n9Bh5w&ej^fRS!@FU(P@8s87$1v?eXmYH=8? z<{O-yC`?7eVN3yz>YV5^7ANBbEA`Gvfh8q_3nCd58*tE(I~ECRb?2kqO-DtIo%jV4!^{RfVH&Iwe76T#^&gDSo5VZl<~s4NdgheWX;Qx0vQdUE@C8hG7a)x zy2sQ4%SHl<35;d^k_EQew3ut4X>RHF=kIy6e(gymM#z*{_Nmz>PzI++GdL{j0KwB1 zMQw-{OpkmjB;Co`NolLmW+#?~#n!HH?0Q$M{{Bt>Pb3GC|H0Zj1!>ZC>)KtmZQHhO zTV1woKV{oCx~j{zZM&+=Hhb6mt+gXIVt@Zy5r3X!bSxkKMiRnr`S3Y}%w*T3w>yl`IsL(%tN|Z9T26E@Iml6Dw+KXo;H zA(}00+EvY?tT2Q~VeCXxGWUE9kI0R23@}5j;mvxHSK!_-xRZZ71MF}?$JH=VBObj`^Dia&C*0aJ&QWq3&Z=vBBRjrS! zLNnAiX0z#isk5Jv&HAoaPz4wqR2F^eMA>PMEFdPunDlv5TY8IdBhvwrUBy2UH!Oc! zzVfb_Tl6?Qu22`8b%Kcq57ofhWWY-2*c|KP111Wa5=otS++Y&;3U_JwaQg9rW`lUJ zQkMtJJ5p$35FD*#J-Xrw+NK@ShmK_hxD#LDHn9?hgXIO0y4&B$Ta zFR_}VwUTUF20Po}6&VTTt;nJw5`~+a&wn5MX349>Ot~06W8fN6S9co!TA3a76bBi& zM#l8{CNoxgEmKI}@eY3lv4~iTvNASQm_njP4rEQnH~_^`mgHoXSPy{rsC8ogDRD_c zKy4VJ)~!kkQ_ZMj{AlU)lU=aLwiN6yHkclwFtdl?d^F6feitr%R! zWYFb;oTgw@-|m7;!@E;p3VkW}g3t8!37%7i3zxURb2z@I-HrfaFk3VWUl-5KAnYwu zx7@U685GvqXJ^lI&KEIj<@#x9L)~C|mI|b>S!E~n!t3b2y5sgl+T0ZSnPW9W`bJ(y zc=3FNG5Ew@e}+q0w6?bW$A*EYhi?Vvxg8hEVD)-~;5n_VNBtc|Sw}c_)cgQQK^KZ< zuUBf2#7Xm17IfgN1(EYCkKT9;3-;;@oQHUx)GiA2wB)LAh4hKMxCoj?;V+@vm9%78 zLawM8v=)F$(JbVQYSz^fI8}3N2C|4GLXea(H0-oGbFc`dmF^-(FpuOdgr-C^IZ{=& z8n?nY;wLF*Xc;Ckzl4pSD7OM+_At!RY2LVExHthrN?BZux&hJ)QF^>a6-pzo7-ya# z6?^zOlx0HJK*%$SX2i-3cMxsRkOzo8ad@8PM^|VI(oddp@NWnLqWcwoHYqKka zo^NFmHn)--2({aZd*qqppI@QvaPdY9-=bhq_J#5% zbC`eiAZ0OyD?n<*bhLqFEC~C$Z3+qn2^0gBRm#!Xwn@_%U7RR#Ajs6>&TCDqIq3Bo zgl=%Xb=z(PoC-#+r$G;yj#+~O#`<0#%d6WieI#Zjl zcgR2TKy7dUJJlj<>17NXGZrYuoeE?6JA!1|!H6Nyg>nIl*?!t-K6S#(GF3(&ITipa zVlCydF#p&}3kjeZ3(PPsj3##gzT{qaNStjob<$`(wOWfD_&E#Z7fJoyDRH3SDuSNS z)JlR%qsYWZvcmZxlU=Jc^7@^b%?bVC3xsvnxdqR+6d9by)8m;dr;Q~h#CwI z#>Y;C%`}hWf&W!`mii>-8E=3FX755MoZ3rPtj!c41c)su%CMAVi54yPQAOV4t4kMT z0k{s{0J+ZSFzEqsTw(dGD#R-U>*=9M4O=sKnfaRZ*%qqf#fW81#9=R~znxQ^ZD>&h7YaFTOGPAK& z6y)aQ@JB*o6&S}H_@Rxq>sP9@_Npsd-7&pLM*TL}i zv}q%Z8zF(}s3M8Lg?2{DpuGUvzBl|b$5m)o?T(X7u=o(F1H6~((C){Uz@_JjLf?)3 zVl;$=5_yRGbua_SUp-)!{P#mH34M}R27RHSryI$K#y+*3JwGuk51I?ElZeV#X_3Zc zH5^+w>8oZmLPQQOCGp`4C?CF(se` z9r>;lWw7Q)4uCz|ff^!GTxav_kRnA|ByHyD!P{2B?C6|E4n1Xfl@ZQ9qp60n4W?nr z$So(lI&WN3HLT3}tl#B@HreQe-ZurGlin}3JdKvG}3n&+{J#)5ybs|4Z~ zl*^1hX462^983Yb@$v_4`VtSCN+dq@LIz0vI@gTNRI@-FJTo;}Nr^LA#aMAdZTwf> z=mRXg6d)lOhT&vIyoUdAYD8P{9z2&sj;$i|dLZAN;xo5Y;{@wrpO(lKWf<&C5MfKJ zt2K;YHo+yZJ*B86K7S=4MktaugaGoCZ0IGScFP`WOwjo_!hg1`z+hk?O3xqS{+0g3 zYr+4YKxcj%ne6{9%We9%GkX6`%#5eObM_MqR9`)N08qV%bY-iHwR)d8l&9 zt7;i%`wQf=k3jX|mX9Tiw@tQR+@pVuW#{$kxFaX+@B60b51kv0KpuJ6yyy%|U&#jM z%A*r;+9VksFC#@)BM>f<63hCKjIna@`PfH`wFif)=Mq84Y9>~SRH1Tb=d{9Bb z#`z#Q=-LZ-Ho&9{n?7|}plHI$fD@7;8oJsKeUV(^f*9A!nnPd*;jUsQ{sp>JR z)hqQbBul!ToxnKbRm11Sohea_ZGzRi;(^d-tfvQ*aJhJ_EcE2&6|r{M$zCjWPfpSq} z$dXpQ{6(xq+dx~f&35}tjs@Y%kknDG=w;hEE_Vu)?tt|wEGa$f3prq|y~{?t*90(^t2q7m7shy56^6JvOhwYB9lzReQ!19cA34EO^4c*~k7#@M;Lupb_quF3C&a4SU-;2W?_=zJwz z8$E_mY#|(5dI7{%M9@C0*TR*O5v;Py>TEPs@OaBfGS;0-v4zmP{jR?L>e^MMRHvM@6+BoHe{yL?>*Y?}T1w^` zVtIgOx4j*RLx}2{(`Mt>#AVg)RXoB(J66uS@hUG})@@uT%t6)4GRe+-TLnVwcze;= z4kY`6qowrYi_QRD3Pq#VMf_VK(p@-ZG`EP`Bn}NbWUXy$Razo<(AzY1%Vm4h{mxN` zMMS(o&rsF(DChQ%#>#OBlNM3TiD*8f=db!MP#5Va=U>!QIC+LXm;?!LeDWCHayvL4 z{N##e>9;oI;YbRl<_UtAyk-hXOr{?cH&PiVc}D8!Vuia4`W7uX5|dzJW2b{f3FWAd zTD)ozGrP|BQJGSOyD%v)g_Ci+CJrIDWLQ9OFTblPsDjbbg|;{q_}Y|xU!ijoEN|5U z&rRhl-CtcZV*NxFTJKRk3Fs?dKYBh-&tCwGKdZ~jBwIAX&7UXi@30gXNiSuthyS*S zyrAC!k9>|#?^m7{)^(xt(U&MdR%hGH`4|r-wb#HGH<@fI(TVFI9{&-k(}RGx1->V0 zcmKr!>_-v8(%Net*MI7xX#CzOW9Y0T4V_+h8d1Ct#3@@*{MZ zm@Eihv%=QiWP;g=#TtzBLAwhgk0$W0_7fJ#4vK|~QVI7=%)l)scCImYRnWZ1RLUEk zW5)31fl_~Y#H2pi0*SIiTI*fYbsb3)Oq__V!V?>-U6O4_&xB&z`la0-9RuQoq`6#x zqpd;DlCK3e>dG<)XhDfRu{HjIFe}1;cwPnsGO3ZP$%it0DNHl z*ud!5^`H6Wm+S~3Y9B=#qZ)J2J__eqJ#H*lOdhu(tuOcqs!z}hX0x}WwaN6y=>=q^ zP9m&kb$CbSgJ2)Zfn>*wL~4OI)7I?*nH`)?t9>~ENO{|Mxr=(x!bJX0iY)WX}`a;FAyaO=65eAGMEOtjTO3YCkJ2z zd_n}CnhMg@GZUt&^a>C+pvnzORTG~`IAx?#(LrklI6|%Mo$_{hcsL_#Rx311N1nVK z)LqY=4>;6k#K&7xb-#v>9sc|j8`A1b9~nYwMEm7!B5i~(fIBoU#f18CSNzkSyBa|FE^ze+Kxsr&%jxYA}2-ew=h73QfZLFHI|5K4|I z6qjGinb#MzgH!IJ^vd=H=PBIk0xj!BbrS$TH)y`a{}2vxf)VDR$lJ>?!?L)C3qB|Y z8>tbG{>zEkGlu1nY1junZLFMf zh_U={^QTXr+zfNGyOo`u9$*JFHo%Aa0mZ*)CYArtOsZV}lV;Lh3HePkX&V2gnV7C5 zZc?pahn9+g7-OmsGgdu~H~9~E%4M>Z=@%&1wBiHyo-Q`QcMf5FTS^l9^Z>aoW)X(@ zR1Vo)se;Y(^Ltt4@l9DvHJ1h$}?Bpdn&fU#zqVir%! zZHt{kB(J#&6RYsW$6|>q9W!OGIKm&mN~{mC`AjlC?7)5lC+Qr@_~JN(BPZ-#JsaDJ zstNN>jbsdg*MLkIrHFN|L`#WA9I9Xr1^;@7wN2UPNx%!;!X71m&@ezISMES-{OT(GkhD~nCYuSYAF z)M4OmLq3o40XnW%^aei3%a${lFi+{{bNi}ef$>=p3dP9$tE0F&_&gjP?EpapMs`0I zUV@0Ec0uUTq%1hM#I|OXDGO1pJagey6;!vr#jL^$4`>5pnyNH4Ih{r_dB3>(xnaJ(#FlV2D(yK+mfNNv0}y$#q@ z+JdYXsj>GX9gJ;zKpyBl*FWnD{>9z9NoK|;z_;_t4eS0Vk zw!w%#V@BfsruFfV#cp;iG9aC!Jh06Zw5OXTx%dw|Gfc_F9g{}5yU$ef+PYj zVO=iDs{a#@E2yFXJOVBf0ZNZNF`q|qz>>RJ{1l#FCX!boY!cIqDYmTjhkPouTCLI- zd1*eS@sBQh#;O7bE6Qv=j?4y;{|G_*NY5Xr-?ftCzpa)2yCKNM(9G=r@<_?ifbzgq z!~5H1lC*YVN2Ql3Xi>iq+-^B`rP$#X{S)NEvSRNj!S_Qf7L9@+qR_53IwLN*oK2j=oxpL9{+4I-8heDq31u}r` zrA+W3uproRgBAQyR(hfpfTmz7w;~B^Vb{rF{dn%hYgne7nc}jqSG&BjV#a9~g`h+T zimug;qd?|eJ6dFINs`On@M)sfOM_OPEvwg~fwKt8o-G#WGR)6-IMzbvr{yay;5q)w zZff#u8u@Qn&|L$L6Fon45bzOyNSG_Yv{eqcq(0LQh%CjS_)KULIbG+c_BGJC95(8p zP2fu#-YJa53T=(S3}reA;?>HQdQ^6G2z?#5`hr`oE;dOkq_aqPVd5t1!YuAq1%Y&i zkS;AE@jIPMQ-wJw`_Ovv$U&*uBTF*Yz?pq^TPN;66;p}wcIQ1Kmqhh0^LNFR{Ol49 zt{|TWwKrzQx>83ct@nd1UWr3M_RpM6>S*xPfx1MaztkDvEmm#8ht}T838I zm*0qpRxGABG-(cP5n7iqLAcN9Pn0!>IrDlvtNk-4)rQye8B|MsDI{$Wr+SD|TnaG8 zWo~6g&=Rn9R5>r2a!7kAPY`1*BvAl(U;xigPT+HM#8*q0o&@zXhzHSS(`9|UEM$>2 zV5f4u_7szKR5h7=YKp>M@%y}_919G{5yCC~n*BT3)9feN0Wy3U0)S4W@^>8kt+n#tJ*wDp!vTcXV z46L*nA8=GuW0aJKzQCfe2b9<6({XUdjkD3gd54}13LBJO;ZwbUY^yS3Z~5iI*kX>X z6e88LkpU+7Bvf*z^3OSMKvl!@s!h8ZiiM7|1GD5oDWeS{8TX?;&=569=0X91Ll;*g zO_0z90!b7It>FZS0<2>}3htl`+4ck|JzicyR!sCkWjBwBemCz5DxYB0lDTsTy4;Kr z{>Q$L~}bDtJnv*kQ-&*u(c1#pYKDPI+3NZA?; z&yp=y(a3|^hf`doAIDR|-!g%+rOOecoI2AdLoA~3Hcsgg)q5e;z#rZ+Zyqg80n_V% zt1Oqa9=*KbsDT-F15YoBQuxzc%PRAXNma$GawTrKPSi|oIYz>6`sB<{53lah*Gt*e zwuz;vEZU}0rvcVnFtJM~-woVW8CV-q@kU=e9)CtmP;sNfQ2}f_>=|YWDI?SgctA`xbEyf)9PRZ$Jvb8%e-y9 zkJ|1tvxsrvu z4PS@19iv*Ja;I2%BSnTj@CNZsQx^;?_TyHiEESb^Q7FD&WIkLW+`QAndkyy*TNJD3 zZ!R26vj@d7ejArk*s;+e6y8wHYYd9DE_E;aEI9M>&O=D zSE1gT5co)Y;bCX(u1Lk|w zI>Fo-1}ZI%;!m8;$PKsDr+DB%89|Xr+;P_MjoELN$`ss=l)J-vo}yy$LQ*lSv% zPU@L=##eQSksEpi2?OE$0%HG9eBijfQOK*uUw1bMo;UB%4*Rgi97F@F2_vuRBVMR^ znZlm|4>AugnBp>utq+P}N+~^@(GCwn{W3Vz)HHyEWNm(8IX_uHpM>iqBp*{uTjp8{ zC&$lq$Zn)ooF%TP;iTyOjX;2)>6+nWWsINuD`hU!sKck^{)ei*fb+v*L{S-l8YE0f z3Fnh*fbyPb_hmE`WSR6Putg2n87e`X@SI3uXM3TqA;M& zG?=!YV}T(tOLcX`+Yz^nd*FNq)SZieM04!OFP*zzbiifh2tqAi1Qi*C47PzPjUv3a z9=mWNSocFs@wl(6>hFGWkjTEkD(|sD_y-PInWf*W2fUx!=T=oa^T$9H^R$^4r>g$# zzorm4ZGJaBe;0bsDF3d|6Zr47-qf5;MGXHhAG-g9@?cQFDlrA65l2dr5%nt8sKe!_ zd(q{y3s*IkgpDypPm|?jXx3qP_vpN@uXI0T)Yf8dsA=TA7qz#~m`K7vA=1SYHJD%9 z`@dgod^|qeEBxpTC%}}ar{7w@U1+7zjq2z&v{vtXfb$J}U-#*ohAKFXHFe}Uw_M1T zbe>U2yGCOK;Oo3(rsVK67f#*-QaNC_fGbbfm@jl~d0et~j$n1fVK;6@FtHCJumI>X z3?9N1O_0Q}muTc7%It#;sfH5y%obTm@;py;BphS5xhS;{dvJ7GW}r;qDZ32H7NrhY(?b*{A(>;B*{QdB1JfmE&lvsj zJ#H?N{vEl*hqIb}_}q&7s;SI_RJ%=M^TFl?hJ8ofd#i_!TrQQXQNFO!WCZV6Ugu02 zvr}~`AE`yTjJ$cY*7y>H)GvSvDZ0CjU=eEg!n6Y0n)aXp*bQ|Z%5W5s9V~afZc>o! z&$u+2`HEDYr3Fw8~%;G@YcR_7GO*bT7a))mD%i=8GAlaB=9bu`rC!Vzrt20r+1Ojo~*>^A6zUf&U3yBbKGYySb_ z8^^R7AW$&3LxQVCz6I_hv0||XFL8Q_;~_}E)f=$olJ0$iCD%ARLhG5T08eU6A&n{X z70be5WKOWR$>32EP9tW5fA9$Y0n=4gjW0Z5&*6~NTbyKz`eRm#=wiUnCBX&VJ|xzU zOoDlIE|6kMprAxRYfxtbBt}Ad^eenJuoU^5?s54ON*+lcNoEY0{{_o-Y}FSTD9EN)_1x?t2PX%5BgDBY;k2p-6YfMS6klyiqWR!T;Rq;7ut|*x<7q0^i25 z2=WL&IlmDVZ1t>iwxUWR)Y=Wj{ZVg55g3hpAWA)@mGxiGlt_k1wMO`$F) zrD6wjCGrYzaA|!VXLaWN-KsCJsi>Dc1%#Jo3h1xlb|Z}}2tU?Vr8selnS7*}%F#mJX%{@BPGyX3WL)D!Y2Mm1 zq`-l0HhAA9)pe4A?&yR0Q>gj9CAbM5Thd2K6_uox1y!jI{KvC1xL*ZTa%Az!jj$uZ zf=%{K2HZYiWhDbFz&y(n%b{+S5({N;fwtCrCA>V2%Q5gSP&RUu_h(wJ+6Cpz#21dD zs}ti9Skj~{zS|joF`U8KsV6eCBT44MWSE4-QFE5fD7>U@}~@YYDgx?@cNyY@N`a9CzbQb@Ttqe{o1eUeQh$)IeSDH54{Qq%PN zu3AxPkcLBrFdD0f%r2MbKq8-JlhgePt@glKOdef~rM`hutf%$| z^lW7%c2YWyf^H<)urS@x7#q9997}$uax8z|lI|3G)N@^5L^gF(R~&imQJ$omGyc!m zC}O%^N|P*bZPEuL9GI7nb&wX#$!ur{acYMGR;2Wh^Kk3z`rOvpkuzN=Tb8O!k;1W~_05_H@W@$Wf~ zXQEi>IqKNnVBdUuqSEvE_NlkY^QG;|08UwnpHeJCQdY~2tP2ZZ^5aRaCA-l^br$eFRh(!6@fz@X2KUyf_o2A%FM0X> zJ2#jqez%xQU&ABiw`Fzr30?OGT-)u=O?Gh+xLP z&2-O>^o6C7!{;CPg7T_5{PhRwEC`MY_YI#;!I3lck2xpvEvN*IjtVCg9H(mTK1ryC z$_Y8b@e9niQ{_&lz=#jyN_J^j&}*~EL~|?_P&DsvlzGRT2UIhvnqJfBbEqAnxp|bwM4d5B&y6{*kYaM7_b__(TX?gcq zTpycbVzTWfimG3$B&tru-V%c0D?<7{kGk>Ww*ILG3-GUC1FIG>l&qF+eSe#gy zX81WW$ZuHPn{Q@E9OA}uLKr^TvvN9yNRP6rBfKq@Ck*%SI%SASyOPTH?s?7Mv1mkb zjYXM-dx}WCvJ)UqJmW`P0x^XL*~CpqqM4-6Mk1`z%m4F{Gm@Q+v-#J`9Zh zwdKcNzX^grfMwfvnwU=d*X@G-&I3k0+UQ@T`K3FO`{e$sM~&{ksCl*Ah3~X$WURG{ zdm7fckZV1cl8zitrWw@*f7e<4ooYBF0_5ckj@*-ZN-Z!7CRHOXho|FD7*LwxaC(|H z#BTp3VcCZkKvDSC>J9w=ma*gv?F`NTXU57=wN^k8LgiaPhc4kgDhbFZYz(M|q+ErD z4np)yPZpe2SYU1p-k{Se75$+2g1JFbL_RS0PrjXYv!tSfT18;tF~8b$zN+&7`uYI- zi7Nv;JTjmlKAa5EFYl})H6dv(M}|UG8||?y4Q)7ST8)>XyN9j-y@4=1TQ`BwYUo5` zSv}+~Cj7c*YC+A6JI4;IHova1DGdpjJHl}i!vvNAjUFbfRIJHsVSZ7SzEZhqmK^sbv(cawu`icxg(qei4q_D} z?Q{$V?(q9Op={-MSCvkVDy9jL-!v_!qYftEL%q;fXOh)lOg~SNq(Y_-4Qh?s#@-Ym zc$|f|)I74R6jP}{wn_{^>D8%KhIJhphsrk^eu*7Drc))i--C&1Y%Vhy-Y>NSy{qPI zy1{WAomD1Jzv&*+E3Ed0y%9;iufO%Y;; zPaP9Rj@AhNz{_L6n*K9=s%WWPC_bJ`nA>tiU1uE3-v@_72Z>BzDJBJGjlek*9NA0j~=vCKSQ4xR=OE2-5KPylA^ofRMjvkqbvS5w~@s?fRo!i^v@a z03vVh1b>*9b7*mnD))S}3trE9npa`vavrTPLy+##2BNfXx6=sE&dMNZjn!=PW}n`9 z1#Plt&U29d-tEY<#h${*LA>_Wp6Qq%7shO&A@o z4edW#BtAZUJ5=8Y0ab{9SG=?TS5J@5_BN*f`({*sbw-gu|5{I_BY|PuhfD{x89`iI zrQDOmB_!1ZwNc+s(Gx>@A>7vX8Tb@qatOx;ZRx@?AUhk$> z(K?k|3q_iu#+<*LT76nlW{Ok~q>G9YpCg~e9(8sSY;n2H7j*u8ZG(FmK7!aM9T?70 z(gEDTJi%rwP!H>^{L`0N<@;#j>|*WYzoQk%={|CyNEO>8IXD~Q3aq5kPEQ1i{Fn)B zUGA>w9tB{}qJ!CXtlD&t;(#9S$uc@ob+Z|T5KV&)JS!`<(HM@{wOSgzPCxr+t*^AV-9)6F^ex#& zpi8=?#1e_6>H^yI=MX}0V>q!^2cqPqW{}EaP-5)i@A^B)P*JQNHT4iD0JsDKj6F4leCdj}=`(P>AgDqI$Usa}#ri%ZW0{7MmpH~K zwO-pGHG4mZipD4mc+zlc=^p409~|)lWro@lzWUlbfgX)$FP*M#5NMq?=v~9mqLuQu(&FY%$G`gMPjbbhbDvKWhu1+51Cwa zBMhN6CQ^Dt2}k-Ebi75@m<^~9Rn2z=O>l-VX?eBi!yko} zW{qp2ee{pq+1m(LgK(m5(-^nl5fq>v7TNNm&0;ZFn+a`&C%l_kaKP-vI<)iemWC{IY(KBChu=+HUNC%vqOvZ(N%F?PIB0 z9ro`vX0vVFk{}IuTCf;-YJ-ftKK|U2pU>j&;v{y~l@$8+jAEqno)pBhnz8GiSA$5B z8bO)A7@Ch<6ml;JJ-0uRs^`&ZYL(x3~`{T zs|RN6cO~0+6>#By0%NDR${g5Qaa0iSU#TwwvNFdz)3)j7E`+CzZg+ky$B9^%T2uvl zbP8Yhh4U5=J-lar0g36&vhMA$?nUuKY@W^1K@vmAEA4t&Ov6z64aa7*p)uk1^VLS` z_hW)>fDMoJ8h(3?EdoQHEykK#(&hK=S^CZQ+rbBrMvw;*JtI_D>c}ZN<*0XQV~6Y7 zk6+Pm2Px{f7^cP|MrZ{&PwJZtN`eUowY~4fGE!hYy2yR%(VN7HmH5rTYY>qee!;TX z?Wp|$VJ`ecl>NB2B%4!IF`QTQaLn|^5(VK;m^a=Up%+3&)fTR_aD!5CKlbE@6!$?zLcFr&psPWfWQY^=e&1u0S8*5 z=;jlMWp?*gvQAP=k*fd#ClRL+=G;ewkW&gI^U=H->q=z6pr9eFO`M_OfSb)Lzhah5#l!vf3b>8yxypKi%rTfwCdVDAWMFGjX;(5$)3mND z&o(1gOWv>({)JhAbP#7EGTf=Eor@Ds2UEui1~nxP2_~-=q}f0NZ#$sJ`I0p$ebn?+ zeaujASBHrOnptIvm!`T(P1X;TfBll^RESTFvjfQ9G=RM%`>AEm910Lt_=ce8Nl%4y-Ax|IQ(`X=Fzqi?iDP%D7OGMg z-{RBk)IIEjPK2fyt75apDt!jwNEkk8wL;tNFWc`$QWl|l4fc&c2sc@dTO~6)X2#^~ zm7El*?s=ti-NO9y<$VeYT3`bI_%ZW+4EukBwyFM0U!JL(shx{61IYJ65Z^7CA3wg= z{nz#XUiiNzfBDaa744l}gq`dSO^m;rGh+X|>_7ezmV86xHbhbRa3~Urs99b0lN;mF z9c(#jg%=>m;`YOf>6(mQdAMdo2AZ&EV8%9uA(k{1Wb zO#uw<8qbbbTpjM082+D65CJ$IgLN;5r*U2z%}*gK`?>a9UNm*S6W>GI-6))LL@xCd zxIIN0>v;Z4*7txhp0CUYs-Lh8u{V$E#_xZWxZUZtnu5uNhP0pn4^&#S>c=J$xqiEScRuGX|GFJOkPO1Jq--IPSGwhp!UL+iYR_xI) zM%}Rovq!JrS+EhZZYl$m)0LQm=>Sr3amIjTa5VEnJK%y9teG@s?_|6DuT<|+?{A!bm3Xy;f%NKDYty9k zBI2v|exmpf|3Y*Uqyg($vQ^%J)iF}AmDB9!R=n^#j=R<9ZfyJA(nzpPV!pWJdw1y9 z$FNtY$0|~O6UnzrN`(Q5^n@7nI2W*P)AL-5ND8k|cny!(Ak#DRW}RBoD3z3lW#qVy z7tJAP=x;uy{S|baVFAv->XE*j4*?|iHos&^d3Zdm4{^dWrbX)YBN1*HwTEEQ5!A|` z(tNJD8^!JCGD>Dxtyr8FRQB;9C)bTugYtP6R?K1R$FtyZx5HZ0v&W`0@PSu&sr2A?_S1`Z-$opi(fX z^*Nprf@Yvs=>avE71AMzTkth(-^+Lbp>xqIuIVG>cg&foOJintSAvC}5H;7|4NCCa zgPw$&Qnct-q;Eg?%RW&7qupY#^oqw(iwCyRDs&_}vYQHJYRhm(enSrp2jJR=(KwQI zd$UR8-Uarzhv!lECJe}7=oxU zfSN3dhGuJxc3%Ab7I*p*v>!+LTPz44rSDh0lz!nWGFE9kyEv6{!ri}yCi@LTWq*H1 zo%DZO{0V;tkpFML!T%*dNZ8mLeY;kF<0k*t2%(|nfun);^~+Qzl6MVtM1CJwN*iaR zzNRsPifp*1YOtaL7skF3YAE_Bfp^TJSdwIgUIs(kqCl{~#xm=73oTVEB99wLiH#-I zFW!4thMT_UTX3Hb_bW|xTC&u!i3}e1>DL*qzg+GaEq~wF&ws!l*aqgVwT1OtPGmFv zrs6wKcjHWH!DZpE;n^GO%wdhLV=`Wqr^l5!&OT80Qf?vs@Q{^%BLaO|2cXEy$+`SG zImcqjuD_Eq^3>)JOg*;{bK$YmOy#%4@>_(wpgyQPZ{#n6v5BP7GnN+2M!hME)|FSl z1}-RHgw$!zfsNzTT9C&_DwiwHNF5NGt}BbK7Sw3eCA@94#c>>w-PqG)=d;FEVUo#X z`HfsS(kNG^@w3|1xU}RpdAczM=0$sBn9XMBiLerB9Dhf_g_vYE`9jTDy?Tw{xKL?LX?P~{>m!lF&O+JPlqOPQQ=bTOjV{;99Ah@mWC z^@n-#BqX=cazvc+rby){OkgA-Ye@YscsGSVFszchvoK+uSJ}5M7so6zF5T z1?adKINTB^gl&d~OSKE?)+Oj#EA%XQQ_{3{vHOl$3g0cc@7>^sOIDph!lFA6+o3OS zbuw~G7`unxy>PTXjg!ecrH%9k(yCD@rnMMzvpWJ+`w^`J3&+&<2XG?C2Ot> zEHOd4&_L82_uyo^n062%i`pVL2~(`&I{7(-$C9Yfil>t041vvGUFiE0ZaDn;HM#$# zTs!3~%gS3|N6ma#?fLiShKB3p3)aR`RWsLOysBU65;OIS*4#q8V(zpqT1`SuLRSGh z9-Ezx|AJCwby-YfG%d-jZbAfsR?2EXj-y0!I@2=dkVxuH!a z&^-g5Ggs5elpG%+F^=!VZ~!6H8A8CErvkxqeR6)$)8cIL68OV!5}L=dq-+nZ?Qr^l zg2uBgWg1(`m>u`v)XKzG;Lj;TuDq%2M5`TnNptjp`HLswul>SK&r^9H?b;oYA3!*fXqaKF)r>Xq?YttoK$p^9%9rwr$(C*)g8j?l|e# zwr$%sI<{@&99>Fyg{m76cj7Mwn>m2a55C}UE@Sy2!u(VJiyGRz0iFzL*PeCuJMBQs-~+4GI859?!% zv~8{3AM*mKm#aCbkW$OI@H=SQS4 zKZM57i9OzP`@a2pNC3N=!^`k}=s3vu9jLy0+$3Hr$V~G6U)e7~CI(Z?Pw5BzkBeLX z-}8aWe-`BbpXy(w@$ICmhW5QdIwiwVW7#2xvqnspIBb$(q9Yu&q6oW=4&1S6!yctP z_)_1t+WB<3Zu)GKo=;4y-fI^YfR5Pn2U5EZ5{_<~lQFtrzvip5=j0^v+h1VkrR};K z&^#uCLd(MQy!m{^mE$yhoauG7De(QAwGGsYW(SR%%6G5Wd9uP%uUk8weK`!HHqzj< zkc^R2+U`O1bL_iapDde7y|dC>PL8bARnv!s5Y)AOJ_3V$n*B#R~Q7)_u73G-M;(PK(rvofNdCx^ph3(+v@}yejn5 zYmUq!U|Q_6G_&Hl+>j^^7Zzd!Pw{i2Zx-xXyc+>JnECL&;c_T^=^>xM=hpJ3Ql+0cNZwv_sHudikejAC}v>A^=+uPx5 zzz7BTSC4xQC_R8&Eu3w_+Sx%?< z8XP=!&Riyr1l00YGm$@rEL(d%Z?qc8FvkAN5>M%_dKzbyhX&~Wsdp;TC8!=dToe`R z*guogaWdDR4l2O&y!o4J;vrrn&Oyg_tzT@pL?#_kZ^)~vMm1BrR3$ysTL}+X$)eU@ zT1?DBa89I@;|rQ;*@Nw_?JT2FgXP`$%Rn`+eJO3U+sd-~e5Rk#E?+ACuM$C&J$K0G zX1e_Hh3eG`)Er3-+ihi&&OK9Fy-XDQ$6>tW3qm@4N7`N8+f7vayDrw>E-nviqHO#j z(P}b$mj4U28>O%1mUX|)&+ghrq)X!JQZ9yfHsBhn(Orzrd`~OszTxG|Ti5q7#Z-TK zn1xr+WR=Z6`pI!fc+B-cjYO+lMj(3x28lP6pqwV?@UU17=<%QN&4o!)9bWtvVqu~> z@qEmUaqvR|q6P>N2*d3PwaimO<^h$(p7|N87gh~qW!3hWY!R3%&^Xqj6 zWeYwI=ht65H3O6tY%iP)qbQ6zu4OMIyt?d&kH%x-=APY(?rElCFb6(<;1?D!%8xYW zxt*EBIq{G5dmCp6=PIa+HrB_+V}$RbjfFeGJM05i>$$)p%8M)|P>voNPzhJG0Sgcc0X+~x z!XJs!Z%U0GVPJd`AakkSgbBo07&5`?zkf=&GPy5cr3U3%e1%l2-ioGrxsEDoX;GPqt^dUUV|M zu5G;O-Ue~I+dh%ICnO%Q;GJIj$U0O1ej-^92IJ3vE}X33`gRMB$;0)DHot8@?Xi)o zX5rwZE#3?Dx6E?hxK)1#(tH=9eDAeA+2s(nzw&=0<8=B$9_fpjd?5TM$V1yUK;-@@ z)ayw9Q$k4pznatk??~?SU#VS_Hk6_2($d#7z>XQK88m-i95t3SNEBTNgqVmnA4(Ls zlrSn`%=kye4cj0}+^qeKcBV|Ts7IrY1hY(p+Ei^(=JK!kN=K*V$!_V}?Vs;+*O&=; znjrEAQCi#ehSQAiG~aXg#n+V^0&prN0gUu=W0n#YJh=9wMFa;nLJ+kMa-Vx|OFvEx zKsxB7U7xE$4PnR_Ta?kgsAWk9>mlSL={`gKth*Jw!cbH)Mx&XP1An!y9|uZRJOE0d zYzf@Rfv-@4Z3XO=ybM}QjL{gOl4R~Cy;<6zwTKLNPs75a*FekIo9+o5#S>8Yn%hT} zT94q&+6oGfLTumkl71Gr#mH#@@1Eq0GjiHcGB=GzN^g>i}yV zY~+4t-cc^TnzTf|zdb9WT|>RQEQaiv&DIiCt&vtuE_QUuzYkAuTT1lj5O3MQ^7wha z;1m3?Iq;@Zr(MuVlvXL{VvZ}Du+V}+?g9i=W8J;S^Ca*&RygIFk?_B7zK8A*)*>&lO3d2-?@8a>ToKp;E z?aK*ch*?ka%!Yhu+m5wI5@DErftY9~;Ky&q%%1c!XOdHHPcV~N3)-<(Xh%cipt`rx9D{`q`P8G<6XBK4S5YN{&mRg_gM=!+)FHGAgN)uB zkz5d5z+c+7nD5PJF4xeXo28zOgf+n5D&Sah1yn1QJ{(~;9_~A53fa8xOzr*BaC16M zvxQ}Rj?GC0GgqRl<<6Tim13Zzy3~%@^sOVKL=&u8#%Z9L*Go;q$Xp;`? zt<^)5!aP-6cA<4o`)BNvcK#fCZnWexp+mh4+zuZJ(h4(hgmgMrq6i$TFXH^g_Whl1 zF3yR&*p-Km99uOE4shPp{+Ndy`T0M=)K*@@Ta7w*2)z4>3Rv}#j$5mp!Kox7M1p>S zy`2|wVBrx*>y99v+G@2OcFMwkrk}+MsdLZ5nk*l6!zfL`Dkz_E>rtmnVq_5Lr_B=CMgn6Yf%#?%b=(b8crd(kT2-)oR<;t%$ z$CF8CSFIF>ZCl%#v&a$9{E&4ymIo#?Nu)XgaF?$ud6~?LSoQQ9ne1y&ZIR0iVeuXm zR~p=Wy|xNW<+ip^LG#HUU0koRWwU#KeA~AwFZ%G^B-M$O=sIy?c9byG_nELWPHZoj zaV9D1qZP>Q;QS0N|Atx*l$_6D+eJ=(m2NcSDAcVUo^j3D6C2$)?pr2Yu>el6{%FZ( za9)Ki`qQYlF?J0%?l_sPO~a#boD9Q^KhErnp;%F3pKBvV?MLGN}NgBfm` z48PH<0S|QDZ=IX9F|3q1!J$+P5@b+xSjQJx}boDrzAFv!! zTG9G{_1)-(FtOLEZj%QtjR`Fp=0gE_bJD^K;`O|jVU(NryilnUi*g6azL~d zNj|AeYMNfa&Pzt9z%y19SW2i>t#Cc)+A&+D!y)0|yn{u#zfQrQU9s9n6E((*bv{5~)zlo5=59KaX zZChc%%qfZEn0;sbtjv5S#yPc7`Q*lE&(MATWpKH5WJelRMJ-ZE&8-~ck`CiYd_;q= zAUvj>xs)hEN$K{Kn2@LPX_T=>C9+1K^%+o%8{)^%Ek#_|GF;NpMxx}MQJ%^Cxm;yV`ypNBp%!{|2b7m! z`fEm-xlG^!OpM7#>i#+lJ(t7xQH{VrJC&A5U1rB1>)F|$GnKHWjjS!NR!m2S=#&?H zrE;qr?8NExd2-E>-J1%%%@1;(hGevj{5z)P`sC+HAa0{e6r&$BVaj;)$txTigUwre zWm{rhZ}dU43a6b)P&rV2OC@JSASMqml=rhO4)`l-N>1eX8ple#q+rZguBwDY-P-1+ zvxPt;#2_Q>+NL^GC*@5~F5BQiFRf!HPJk1XIoG25F-}P%yWqBwlnN{TRF7f`c%(5+ zA|4Q9^I=bdnlh<^is?W9&f#6i(!2gdRPxoF(pS#12-q!-A61uy@rc!RZO&sHHF=4kRn{^ppx&sy^~tUiBu zMYWQw$Z6BD3ZS@tCXVm?DgMHB$Q}K-1ZBr~l#IhDEVn&MY^TaxvO$~r4KmU~-co)Z z<9jSeUKMSv@tP!Ko3P$y_aP|C)<&|w<$pPm#XCMxb6EYA*nZU!K#JYiSI9g*@!i{)s(o*(G4m6b;eZ^g8ZbUWzy)XdRz{0=*$n4kjh@qch-`BG z*a-NdU9>;N{&XJ3w=C)EgTy>AwxS8aO+6l_X&*Q&^9UJwrpaa} zoGIQ7(2-_eOCB$Xc6NxmJu4BI+P)OHsuE8+$-0?iy_sYSu3Bn*d^Pava7hL<+Aicp z3>0Q~c#tgdvdQG&TS@_3fi;dFkwxjEGcTqt}q<)Loy zq=K>|YLl@qGMvlsKdJl3nj*DkCMkDhL~ zs2{pu9IA~rHX~wSDWrAu;T15|QhVI%a+q=29WeN8?cr)PftozFC2$R6lX;ju)s8p! zS5c*F;a>8q(c7w)#sI00XG(G#$A;BX;shWw`ON?ZW9h~K?G0BM^aF~_d5X$@1BjjjA%Bf?Dr_=-S zd#k~2p6Sv$`7%51ndFOUU{jEN!d#40107rowHx9u9md>F#?cC6g-3EUqmbl{p^jy@ z7Sw9;f$OLEWg9`nFu-O*up2r_=+75ZxnYb04zH)hiuc_{b;%fQ^eHJY5pZh9_iLMEM3S5U(ouz( zjdIDG)1Xpx&zvLVL+gAeO|EksyEk>ZKVX2eb|MK`WqyS*Q9-1p5{V@HZ|A>B$>Ot; zZAsB`<5+kW#_@OiQI1hq`sY)c_baNDWQQeXwX0#gAa2&?H<3#B$3;s$f@O9p0ebO? z6J^{q%ASrso_FI{2^u97esS5XY?b2;vW`rl2PtlKzW7CJN$>o%TjO>y#)}yhFM3B~ zG>PX4jtk%y=2-{IZKAz&;Jv>y4zQ2fCrURHB5g-MM$kuAD#sJ4;_IoXGAc4N7-d#@ zsh&%3=PXg|*8l8PKWz~`Q>fSV#q6$OW1Ihb)X7WqiexUTAFCuZT5ks*|~Vy1(= z@ja6*<*qL3lS0(Obzq>~#qv(#?W;Gl#*7x&OX_1knPR)*n2j0Vab`Ml6pz#Q-yHxC z9zsR4rp3I=@lK%g5-W@o>@>cZ_^r|@2sK2;CQNCqv%Q8O68|g~o=ncxh8tv%^?6%?-X^wn)^68Aytk~*?W9tt2ylc}IGsyQpY6j!9R&0mK zIN;>imMmTOW_|cEus2k1Msd`F+1;P2Y)G6trR4v+t5pG???<`)BU|iqyvL;NokBaD zP>8|9uZ|VV4GYa7@$3J|2N3|7ObJOe{;YQ2eX+1Xb zo*a0aX9~*SoVdH4EbVQS7NS7caFb@r&fh}Yi;)cOZF9S;GePZbt~DTHl%Ywd5wTe> z#yVlV*Vsu+Um>@#42@-xMHN`-!o0$*09`dvINB}@Un_oKXe|q0SDoar>|_$)l7(y8 zB}cB)GCH?>$vpIyE!*TvyHJ@k=A5BtwlZ$oY?D4&HBU|qjL?6JwHG*r^I^pa9v<&Vqti50zckXo5ZR)24+ANEaa zT>Uqp{qEve>=XJi_|=+e?I%3lAV6}wZjcOfc|9if6mwwo-UIm^qkC05#y!H=Hhxlv zKU8{ssu&6$5n_t1ZXISRX>q~9)M(iMPjfKm`czWG4Hm8=D(CnW%9Hh*2DbL*8Alaq z?+cuS&0!CxQ*y(V<_xCc=9b7co@^6FwAJ<;DSX(~X^fjg-?${0x1l%OU zXZDo7zU}lL>x!@cD=aXg0%K^;$kdKdFI7#Eg1wB23!q=#V?Xio?x>5Ch7UU%KdDIK zkmt}Qdh7S2;^82`Ai{kaM7%F}j+Zuh2a#L^YJ4Tp*8){qj(@Ku;^Uq&d_C^j;6Hg> zGzer7>(8edA@l!~$NleiMI{{VTKZwf@!|io#?ak#@$W zY)ONEH8nV|UN|Bd%3-#*S&XG0Cv6g65!pItQ{0INY|M_O6KOvg<`z1$(K;4c*hPs} zirZPOM31EDig`Y!YNTVp8GmvqH~31iW$F^DvzX%|PHViz;xYmgBY3a0a@$X_Ge-h! zBXK<^>oSLa^#j1>(rzCz$yBx`=~F9e>$K4SQNp|og)s)zJ;k3uPxWfukLcZ`Rm7J{ z6JJv;0H#=MM(edxD5-RJYrr2XtkP^PD0o~vf(xZD)1gqDiGbts-0f`JHKARw8M?e# z`ykWa*Mnjpe^Da))aO-hRUiA^<`;$gn4g~QmeFWd66HRKYEfQ=!}KH)#RkC$mGGGw zMgF~>QduJ4jAWGW+aUk*N8 z=hyGa#{#5#(9Y&GeVYfz(-&gW*lxOBVUHbR{~MkKStl-r^L;RMT>J^6cU24dhka01 zsFx-a>~~LNe%jwTdD@nP1x(>bmP6k7w+_)*_${c{@grH@pl;6WUUiW|1qyAdiWBd{ zQ_ig%Yi*P*#$jhHR3tWJd%TaTnMV>Z$q8ti%9MAp!;+*{u2{Sap-I3j5=P?@3rz^v zK>q3ZwWzy7IO?ws;OaDMir8f;%2Wk0;YH0?8_B5=sKfB`JD&w$+YryHm+SH6j+i_E1HviLQz^`PdcejWMCL9yvl(kX-ree%zyVa=&|3` z9t|gzJ03n7Fg#VY$-N)CCZ645Sw|`@DbK%_DLKMHR@tiJ%>5TFYuA}0KDp346EW^& zJl9nG-(cjAMGSJxV|U)x<1wAspAz~V!oDu(GjQ-g68_n!q*@Hm!P;pUK-Squl&Dk( zxx;)xJyP_7m}F?%aM9Q`ncHVECtOSPXW|w~>Wt=Y!etY3N1E@JN#aEQ&nw|ham>CI zmz$igO7$OaVY~L|l0%ZE(fQS-B@2po?^b`=E2ay!$P&}_&i!>&pzJybj&U#Vcp8(~ zv=45yByP)6mbsUUPDZqi=_ z-IGvGPQziV13Tk$k@lOxHKQGVYPs5dCT>S2D^f*;ZIh92H!gB{!o}+hL>0n*aW?9_ z@sdTYbDhaDfIpyW9aX_7%J$MMRd ze3CS&A!yo4pMqH~kSP%Y=n^gnTjmfqcv(t46ZO@4i(FGZVs!JNYIpeIum)Zw7>*+s zEk3pI0`*oeC-sqN5z--iXCuaUOlM4ztDFipm`Y2|PbzB)I}r1O2`1$rZ9{-Ggdvr; zsy#-IKLlgiUO3sm@#QHRtA1rC0r|ns%tfVZo}V3>zul<#2VYlWNCdgMi$x6hF!)wO zoAah)$h?Oca>pwZs@=nU%*PzxR(Q`k7mbgcRz@bd?y;INGG=gH4cJK*O$DRbUGEVx z;~`m^E>5`MJ7-V!{Ik3<&Ei?g<>S?Bao{t4gXpAA=@zes&${1>@h(|ec2zOmT>kYH zB#^QX_aR0RqnrJeA&>88p2&5^d85GhQk>WUE^2(s09~om69fFhal|~p9J(*YyC)G& zIrqhVjkl|;rQZrh&Mi)ieA`&RRHhG_b?@Ep)%yC%ucYq16`MW&c^H~;`~^LYQ1#0( zYHqdS*G>4`1GnX&z%2EhrHJF7U!rt6^=3s_D%`esLfk1xQ>IP$R|&S!8g^CR#i*3f z5!6;nxGaW}g9>Y!$kJCs)dDbb}2IwU5e^T&@ZCmIt;TI zHmIw&&(h9_C}gIr9w5Fj!eQV&&SpL<6JEcOF@rWOSz)S9+^&aT<AXuGHQ@=cX` z&Ym^B%W-1mOZut&inRnW+4M?R1VXjHk6_0dRwa%1<)$Q68$GC403zi2CbadFZos3% zaxn8nudD8;j7EJA$aSEEo;MTq3s3Ou;_2+`!A<7EG9sSrj_vzO9D z!&zMd3oyp+Cw6Ik1*@Ww#;H*XNE}ZnR-L0Q^B);$dx3J!11Pwi0bng}=NQha*$%6i z(iDsyR|I<6Nc|q1d*QxKkk&HL4kjwp57sK5VuBn7+BP2sakw+Ibhco#O+tw)%DCN8 zqKi4m4)l(vJ^zrMEG=&vj^UsHt>etD)-IuTwp{WrgX}4IFoXlVbWG^2glpBHfM+he zxdW{0wUIx`=%vK2ho$|=B52K5BOvkA0I7gP#}Rq&ghGcr-3vuf2jk4zTe^60l|yM| zVdP>|idRd=Iu2>A zskN7bhejdFl|QN-NCwZ&(mReAgFQQV&~f)6h+7*9hz-fm&5sUA6(<)Fbc88~(Up~h ze9vQ!woD-&ljd|v)hE7nG-`=R!PNA z_q-jmF7`M#Cm`QTlTa`Z4v{sv!wt$LGTYsgs?-^Xp4cT9Q25U$zw=rC=q;hptAp|F zT`~%io-@*PXo`u}yELuh=}_U=aqW;chZN#<9OMk{&w2v~`f({N0GjNBQ5AP^g#?|MJr`byHUWn5n}8ji>A1RM!euKo6>*g9!8OZ~7p%uR zqfC)un3HZ3@g>rKQ?ee$LqWbuT^PR2SO!u%Y= z!TO&%^Zy;rENANE^mA3CTn3HWX@ zbOQ;mOf%M}w|~XlCeI!2Us@CqBKz>o+jKUPD>DeJPjUDsWKz!hj0pEgFvf*o&7#~3 z=;v7(B3=r0@)VMpSCjGGjKBhmZYgXwkv{#Ei4q8OlwM89_Lk&OJLe|V!N zW)jtzYtxUjf4-w<6aQeZLf7{mA5(Cqj`hV@t9W(%*2=t_tUMW2$9GyB{3v#cw--HM`m`(QIEcS*$V z^zv%vzRokG=Yl=ODa6K;G#7^W|yR4uH1#ZS~i9XGL5SdIIx8 zXS%<9Ox9I&+|&bDU6RZoLE7!<`T3CtCKFC;hR##IFXIM=tmJ?PWp%7hb_?sa*J39RVa;X!(3z zTt&H~m||1{=^t+Tb^Q@EuN!foWE*bz!7unBG>y3FF$=i_6cXF91=|8B@FJ4E+B&GG zz9@zbXhNM1hjCBez9gO%>^e38b#vnSDDu<&nf@p*fFA zV$&w}ie)=T5n2c3d^&f~9v`{-t}i6>Vg#!jbu!cCP+L&8z#)d1huSvkO@D;!Xymgp zZtnH*MZj!_uL{5f{#{13om#%e_uVd`TC1pq)5KROatOzd4pT;w^#(eCJGr*YJldlN zzD{+>>Ve1jjvYj*^BV$hx0KX27|e7Jg^YtNp7EA^EYqyE-?y z5&QJzbeLD#9(`eHPfI!N|d$S$YCX#3juF@Xm(x( z-QpvWXql#qrZIOD0;W&=lFD5|`>fvv>0iB5~5&hN2cfs>EkDg_>u(NxU|-k z4S@t+S}zA-mJP9YX7u?2Mf1c@92jeINLCh^YRcHOh8sqqeT;=;E>9s>xY+n@55pm; zSHQI(e~B}TZQP$C9h>ch&FnU>LB8B#}hrH;EwDqin@mLgeJ z?TgrQ^RZH)jfOxlRTpkVA!}YW?!c7DNfXk2Dq(-lNte)FA9X@D?-DhohQ;U1>}e~4 z>gQPukeu`?pYnSjrJBpHP4P&g%E^7HIFisG3i?eKvI+mE%YdVJTQJg19$4j{N zl?LwLCA9s9!tdJQ#K|_R^-ID6p0i2Fm+7IKvl;1R%jZSUuG? z7#4}>o}0(bm4}gZYv7K*7ZKT2?15I42U|${<}vbZkG;z~F!SLXgP>H5@m>iKeThYm zs)b{8X7-3#?WZu+7j5{$4UY~%`nZq_55>oD;Ud4a6SL;_r9t_i9JY}Ni|FU=U;tj& zkLY);DDI_?Qh$#tv7mfkP3jumk+gku?<)JVpuFu)>QYbsnIJGO(n*rRWn+2FVdl)G zc5yQiWqxIe44W5;ya*fm{=G9POKNzNq8iC$>d*i-gO}!-=!#}s`0Ymi73uZ@2fp81 zw|2v`#}Z1>aN@#v6=HP@;cQyAt9Ilu2W9XPzTy*BY;(mhKNG@^(FuDNmd_I0=AY1K zVn!qX&Cw5tjAm;0Q#EE#{q`GsVZ|-=yV(l)Ry9amCI*M5naxLxa6sdksC_7|$0md9 zDk~*MQpUT*B~soXV9{w;+N6p&=XntPaXES4}t=+B0NX%yCqomN`SI(jx6 zq%msxcLL@r0t6O;NU7T;XKPf z6IW)`CiiMIR%U`zlev9y#xSn9fWX?fm?_+CJ|P%bTsqNqZo(*-GAoMwcY~0X&rk6y z^@JUXT7x~m3{1pEdti_35R=_4dK>kh_sf#jL+zsn+|G(+MXv=dSLCKqW-2B1Yc3PG z#&xiu1vf#bhxhYHO-56;YKanv=lyn{m=5C!kdh;_U4@Tg*32j4*`s+>7e|Xyw3Q;3 zz}J{EZ*WkC6+MuvP4G!8&4e=G$tb+hX@u2jB-FNN%dkl%>!vCVsGF2tr=2mhwYs(X zoOBqtB6lROfZq6krPkP@k$VkpuwfSxMMq@TMKh_yQ`hC9JIY!xJIQOIj~h2>-0?W} zw30i4C@vIi85M)8uvd00R@`E4hOM?1C~|5d$w5%ysh20GH@9{PC;=>3~mSBj`wlG^JI)uai-o(tuN1_P$`=V;k9H%ONsu zpb7ij!&I%Si~;i$@={~Hsld#%)y-?xwyGdYGqeCj**Y#LQH`?YgMHS8Q_-@Bu&U&= zc_Yw5*&o(Z=@T?O{bA$uO4d$rj8p^TRULyGBleXGfDhAY&F+ksD7-iV1I^mu24hQj4@YN-Gd3f6QnWjpJM7fFS_1|9-wm9ZB1vY#tReTF^N(F%l3-9U=>y}&wTDFxK6 z7Em8otETsY=Z^uNFqeeHm=hF80y&xOU1L}{mDCxJ96CeNYVHsUwwMXMQl+@GRDwav zAgPBF1_MvS8)@Yp?;5FbRkYG@Wc*K3hR))*#Py`O=v3wb=CwLj?m%K**@YrYbIuXV zW&{JsGQ6ViHy^@u_MVSAnD_!*sb#KicDu;qg zQnZB@;+2?5$0L`Z+-jq^bb9S#f;B%lQBCx{oc3>jB?~k?r{Gy>PK@Q@KTF9dNFsx6 z)vVF5=|x!7Zn^s3)Vz94qF1LKuv5z0N7nW*P)TCT&NovY?!75`xbc9t`AKpnagi7Z1kbK+|--qVm_0uM++_) zAUM^L!EIGQg}!Io+gG#@P82tfWFZ=Vak<$7Nb*ZU!gMd_0*#^j`rv~YF3Up2d ze0qcQ?~k&dV-r10oZaQ0V>boR|9+<-jt#Fnvqo(pi|i2;mf&ZQub9KFT^NjmpXkOz zf8nGB;!Bf<)13(LXvao_;EqOLI172=2WtV8CaBgjHG(cAvqH!>jF7COkTU+2VpdT6 z(0_(=k>S31KS$uWxje*G23j{-m6d0x(5G`r~zZI(`jv@)1&`<(}n4Yq-h!H&W*p+_WF;jh7=c-dTM4OC%1FUZxOa0EB`% zC_skx9dCccUTF4Ae`J7CBetJ4wxWArgO2i_4kPc0N<{;rj zx@Y_u%X6r7I`5zOMT{XvMysT=g&F}S1Sn0Hn!KMr1s6N9ZfzdUeByZRgS6gOgq!}> z_93i{3=Nqf_Hl2`Q_9w4^h8ISeLMGUuneG+fwGw?=zcg}U(Iq&VN+k36OH!ljaZbT zy|MXENq_x5!Cch3>9wrfPPM2}1HGog{IJZ$KSqWtt2CD!17j3xkZ{o}NfW#XK|tj$ z?JAie6G&E4Bh+q73Rfiza}m~C6R%IqJ*zJQDSwqei9Xm#727n3(kT^4TJS%1qo@$%)ZgjwrJ{|wy#tlr+MD2OB4v&u_w-8)rB zV^Bo6_2`^FSr4e209&N4x-0dosY!}cojh5OFg|55&74V2ynz@jxdwfW^+`ACNPw6g z#in4Xa(=yH0kauUUKMfS z9KaU^?U%g7fh$X(9F?7j5E~-3$uS^aDQ?SU^@0^aUf~3`s1zDM0dFT${CkN<4ixXW zYLNDHL;0`U@-YzcltiM-?meM3t;{m9;p=AQVKJ6TRF4Jp~w@fop)-ZIE0HeLtw zewJ>#qMlREqTe3dQ!=dr43im8nMNZ_{7C{i)Z<%Lvs&Z|oh_K1s1%3ghF5aL5(NkAM)P zIa%bmianj$$s30qeZ{mt>&tN7(SF2Q@VIoo!WmiOhzd^-+hp(M=H_m&N!NCpCx#oB zx|=95>|P*&T(-9Zek(scXk~@gcc}R&$^56|=m2;IX;%Jq>MR&X&z+^_i27=N4%ZP7 zA%njYHiXyy9_6f~+)W;@Eo(<+MLn#M9t!V}QYQhm+8kN^b?NK#BT|PPLwCaFb7B_4P8D9`ZVt5IK{kwU8-? zb3j{_5$L00BjO0V2ABuc%F4LLEmJ#T3M&GxGm?qYNTcF|Wk)A+Pz9(%3*v0lMb14` z9$Gx+8aZp}{HW@Uay4xgJ=+hf1%Dz}T_tf=|8qeonyrSrbQmF;LDY>4YxnJcQ0&DU z&!wiI1&9t&+^&)E9RV~xc{SKiCMWT)jiOQVR7JiOf!l~pn$+&L@?`t*#vX|@EM>WG z!cubXU!v*`2CfG@2G^tBUBUNDaSVQ*W@Orcdz(nRjWT4q=)^GnCKyyTM_~idzyTav zXTuvt%)%?YIiNeB?hVbvaU}h3wtxAB@YGVLJj;%}3TM=#2^U+}n@v`=AhwXoH-}s7SN1k(E;ty~t(sCAED+ z%XVy(mNr^b5<17ZdLY3h5D2n$;} zWwiUc!@$u&x-d`5ZAW~(+ z3f;+nfDUVAOsJGB?!iH;n)sjhHv)YxO3}IBN0Aur|H9tag zOjF4zP*bfU9;A`goabXmNX^@$DYq3Osfz5YwOLh`i=5PDKt`3>vLsUw0$%^hZQN3% zO|t4fT?{5xBFEDU24*+8-tNf4p8<)=?7eJ8nIGL@IKM#bjSA*Lz)U8=z@o{KR#a*x zMD|8bB^?;GU{hi@!Doj@nlO?s$Np`b#HXQS?&LDYN9V8vf{c4mm0dghMMTwon9|Xo z9LgIU0j-4mYV(tUbg1v2B#+FPqyRW&iB!p}D~ih;wsE;fm_gFM(M{#E)&Cs=7gl4kvI<*`35_8yk& zjG(bbxJptc$pq`P%laqcdKmqrtOT8RMo!`5+v1O8w^tdomVdR*%}*+Bw8A8iZ}^2f zqLU|->H;bEV<^y0i?(>R5%*1N%R;c7-va-Z!ldKW73{G{ZFE9&+c2vG8l)$AKH|G8 zOu3Xq^7oki0gIp`8AQ;0vvu%Q!n~cOCOV-L`$QtV-netB209dr%B|ZW+V+)z>9H!a z{-XzY22E8i(v~Bpl_^Aa3XSED6EAThAy0R;tXbjLd${yjt^_RI-MRUDwd`&4uDN+w zQtdfmSSY6#GOAM%?XtfzqrX3$or$p3#D-n7h*N2>4-h%ohnRTMft&2G0{s==16Ve5 zM^zvW_OW2s(}2sH8saucU_!(-g5~}e*kNf+R47!YqdD5x6#8&1tQk>MKddk`4<_-X zL#4PAcOjg~%jW(c*1j>g_GbMuwr$%vu}^HW zihb7rL`hEWbq{TX)>SD&G*GeK%QUl1ZDZv$SP4A1LFI-lQj`CYJGGVmy!I!-&fVz2 zFL?Q(sv0Jo-YB!pP+d%uhgf#6Yow~VqDJgATH^N&S6{9Uin^+%_!RQXn6IwF7PDsN z0rQL2D!M+azC;OD7nb^4CyhK^Ii<(ur;X_2mD>*bToV|oEdvEdB}7=ZVkDFgt`FQ7 zU2;cdx}ZV2UDg$ei9_9>IGZ^al+tqL`7{E{BwatFfsEi?+}z#ZxP#8Pp$nX~w#1H- zs{>r;YRPA=?p+Yz8fz}_93bAZn|z)*Nc031lg^IM#0G#%?PE$5RJp&FD-b!S4g9>X zdNZedORtjuPJIS^8;$mr?RKcJn`24u-eHHps@35f{NPODY}%vI_u#n1M>mo;pQbU1 zJ_n&Nq!*O07P9K9aAYSnqc)`$?&8U*7;lr9|Euez@YW4OsWS+EYQ`H{MsKR-AJ_cj z^Hi=XPgP4W1D?(}t9GDoFc8Kii&rdlvD^+(&nt&l}x|XyIC|2eBwuD@4>=a9lx6?%gEoVP- z`QP`b$M$MZdCQvfTg%EZULtZwR6LETsux}KxZdiL1+njZ$c<8>>hva%MaA!KBAf~r zGkNZUZL`0BM=_V)N-HkCoGR#12He;;i*Ci%SHWVFndo~+d;(T{>)PE2)hw)jF<7XS z)jP%-GsMi|?%du}Eam7}Xs3!~lelQE%w`@_Vet_pX-bYdID zOGWo=@!0yvbCH*f_GdWrY)d*tpuGibMYe1ZN~- zL~i!=r64#rj^ulR*3YmamBqBI$+UbD*@v;U7u}kTti|AiJjmHp7X z>0!xbnqNKXl;QL`Js;~%Cs{nN693|~RADOqh66WNhJc9`v^^_!N@2+cBb^D<6Z9S; zp<+?Vc5qIId(+ev>KxmSR%!2YueApBhCb#V$h{ls?>mJybXTHbaGT)x+>^>1PIeiV zhhXK37d?5#2=)X0*iWT^B?!WKS$DWCWj|Pb9<>wv*dEAxC-s{{b+1v^1!9tS!=-9F zY4F~F2Bn0E?`mwJNO~|paQFk<+XMYl5#C$5jBY}@;r|8dYjpd>eKUy*)#U$9j_AMU zIo)?DKa#(c_1q#U5Ug1X>HmQJu2Y&zmN1h0tWHW;lncDT3+>Gp`&Dm2)&VYl3ICR! z&_W7}_r+()gO|)}f{WJA$qt<-s0NG<$ZOAoa&82%ceUs?$!XcJiWT#nO!6MTGi zbIJV16ZF~-0Q|sY&+dC32HbzhiI6sMXdjkzbdm7GX8SZgtgyMiY~8To(2S?3Mfi|w z#5p{;1UmzfUxun~LY>Z1%ncG2yA6@f?K=dUpjUG`ATYy~HWF@2=xm~aLi(-+u!KKx zVF9zVQRQX#V2LB(*f%IVGT2`m&KIbYjq9|t<0g&Mz=l~D;m&k$?l88xliWaC@(v~U zf`!+|A2|&ve87X)YL;Lz`06=&m#j6RM2Nu$?(G8wX6Jj`X>fKki@I|uEo&Q?yyje0 z_O>nL&llqT33oo(48Uu~$9xlNymEHfGSA1)CS>|?W^YA3)A#`1ie&0Ht6Zxw^<2GQ zJPk;}$R-J>NLm)_eHeWb>5UnE66>WOeG=`x7=04&)g46?>4i-CUV4r~l57i)hLLXf zkH(4giYLj7^eT^b@N9>OyUytsWl5Ee9a*%AZj82R8VkYWG`qz;4 zU;uAP_|k%OC%x-|y%W6@LOn~~RzW>`-eMwOe`i#XZnunXiT4sF`NjJ8P<#;pe-(9p z@VsmxAw@%*A=j$adV#P*ElKolj<^I)MhbevP(ZbEWGL18fUp1dhlFus0yc+b5AzR$ zb^`;BL$hH3jzh5l2G$1C7Ww&ZPYoQ0e$EL}jdbn-l1rq)1Iz<FVH8@pAq&^62w=kRvz^l z9>6c$I}QB^4&p0WTZ43M9q1F}zlCzn1NNS4AV9Po2lfUH{JlN`dk-<_A=$10f1?NX zV_YGGel`buO7-@@KFWi9YBL$FW<$%-Wi7*e4;)b6!xhCd9mpj$C$m|1%k~?JgC78q zY#R_bO|gv!KqTEp4kVQ9Z3`q6?FA2PL2^KL91Yy_8%Tet3q&$Ys{gQHM?=%Ph{wFa) zeL8~p3SFl`KT86r)qi8W!-M#WIiQq2V}gC50QZnQFGD@U1A0Vzub@8pKt6w76Cz(z z27a%9!+yeod`eyGqh7ZJCTWa)Q9b{LepUy3$@TideA1~0<@S-7*nb5 zGu0xi90b#$sWgW6$gWjGy7n;4`Pu7ch}_V^9U?mM_Y?(#*}FnqW8l2X9V#llt4Z;n z>3s0_r!~4tVvzPeDbyL%B`jc;KJF}kF2ffvUU3ak5IGp@NdNghl2AKcqRJ?!X9h!E zsowDrS90JQ3=HVqrH4L}X4_3FI-~U^`hQIs{+a6bk=RYW=G96dwGbfv^Rxaw62Xnv z@P9UP|FyyL&xV(rhKjHN10BjhRa%H>VCw_5VFuBshyt&+=QDyYKhSuQuz@~Z5yJ2f zYh<+t+8qTA#4teF^FR=3tyLBzCP1haf%bWQ$HD_ioG+y5uXHUKKcw`|x&z!hUMk@C zHs?_7`6j+vEogoWTmOv>b)`wgHrNs*Wj#w?j;R6qI!MK8@yw{5KbrmaZ zLnFCQxYl=7tV8_()-UGh>#d-$;-z#p*r6(6B4c|0hDvtMbuC2AGnWx##F;6=+W{y1m*%B80I1#IOZ~4nERp&fSj$g zub9o)L30wLwe!%awcyaKwf>O5wfs=Bwf)evwd63$!FCdHyFGKO_kryz)P0#9;BAE% zjB9lSh-n%I$TppAcQuvvPBs-fNMDd`XnA9I);xAOXkT$oHG zYCS1FOKe76Yiu5E-?U%#p}O`2Ql5PR%P({EvOK&2nqNtGR$q+`ynQHn^#!097ZCf0 zPp1Romi56HmwIsZ%6nk-s{PRP%KQlQs{BCtRlj6Csy>gdPhNX^&)ncU4Piaz`O)}| z83U)+DElxk_&vt?Q9lijR_NY-HHZ1oug`Y}kza(Z>OHzO$9-5f*L=7(_k3XRtbC&K z6akFngcBz%)B6!@IWzH>96)#q^3#fO*c(W3>nq!Kc-dQaaNJb-FKm4Kg>3};8*B{w zt(ncQrQ5S!_kv+&b2Mp7wb&1q3KE9vVZ@PBhgRmsRSprWYP zJr2CBln(?|lHR~+=Xj*JQgrt%k@-$6QTR?Tv4NafWe>_(@dj7f>-4tcu4~xud9lxV zaA(;})Se7goo@`$u6o9_)ZgI}8ep>WPcqoNlXd*L89(10BCH$7@f&8ae`o9{uyl7b zod=wkm%N;xmY|$ji+YqBbl)lqZ9HgB(@x=&h%> zk2e$_&JlWoE_BW&))TLC))8h=tAHY@&PSG2bl~kpx-Y3B>Hm59wVXquCgUk-hLw5c zBAYS^GmW`v?4hz6gP%h^KYFG)JbDT@*aa0IKj>h7c> zjMzMsXNb!d5nq*rvA{@cuW_S`5+TDIC|g$ zH(ZMSGvS2;VWRTk5qVqh(>MPkz?WCJ`VZ8eSTz~zd8!Dy@V5_j znL#?SBI1f}we?IdZ-r3}q8VRCP<2WRuN5x%8`T#%R8li#ec-ON;xCrDs{rZ@lUudy z3ZdkEEQCK;gMjsR_sZnoWWL4aVJhe1nJ@+>f9Ba;7iJ*@t)*`oaN2<=WHwzbn1faw8}QSM z9^dSC@?$UJ>*p0zQnf#wBo_f!o|hYC8w@As(wb`y;YntR6jdBB(<&2uB`JR24=ui9 z^Kz^#@{`mSEtN(~ngYtHtG?uFbb08EW4oGT@h9=IE3b|3)#~l3>i1Ggm?iM<|nMU4K&%0$TuQsR3gJ02boT#3YCVe%Bwcz<7&Q_gUsC#8N$=i<2AdI{I z%G_9WH-r6GBs>T45#rU*;dE7{=#i?&^L!S((h;=6TG9(D*}jN60CG(0WO zrg00|@tKU2$*`Pmb~h@#$Ks2dysN^&mv_l>Gmw`^B%HDi=_5!?2#HAPfkOAxCWgdx zs5N~!0CCP(R4^k{41<{%RGBLx$Si|}8;ldok?P>~5D#?Rd6Pnt6w0#1D`&R+cXX2X z@2m#<+5o>OhEII2=ckz$M9u-f0p?FsnNOCIXI0L3%mRLaSF{NOE&+seMOavS5m9AvidFiiyg#Bv>Dq{~&OD-m5p-cPc0x%)dim zp8qEVR)>AUL{p2)~V(=dM9gK^?+>v`#1I;|S*vH!L#sh2#MD(93t3{B+Ep6!*dSunvHJ8z zD}U%r5LA4iRT_<~nZm$bymcuBMfKfPc&k4B0f3SgYW7oGiw;w33DK(IYj=pn;l8LE zdX(i*ykgzqhW_y=F{Z^bIp*1r0bqyDNW||}IKmmG=YNfGQ+vcXrCpdE7p3QVR*4rF zffYh$3nwbER@@y#ww&;^RT$x+LjOrG3P5&>b_z5rwS^pXm!u2yz_*teyn`o|AOTl4 zvG(d)MrYvZwD@2(~;1oxr*FqBC8EX zU*=qyrYAeB7w%NdcEr1>LE6y%_I&A-cYr?4#kPzDTax?-dmY1WZLUI9aS(gW$?!F* zF!*4u@J`xm&!X`6zUz!8S*)OW_>_p#IdXf_9^&jBOIN5u!O_XjV7+@_epi&z5gjFz z#*R)dG15p4^|o72$V>?PqK-e+WSXjMXUcL!JfRBlCIU9N4u5Fq3-n%yEt3 z{C?_YKBJxvu(O5|A{!$1%^P}oCmG_}vrLG1k*=pF)k`O~)7kE_%>F%Qua@#MgkAO( zy8oQ-5uV?19Mwxc$L)Y2wAtx@llMD=c{?_~Xc=y~zF7f0KWC4Q*e}(FcKRBV#^uM7t1k>`IOAKijdfc|P*uAhg zz&}39k+`*sz9X>c#N_ZKynQDFyAqE;+_vTq_kL&X-VuIIMcniD#Yo-ybBs!c4)>y; z@)3qnLiE5WhBoje=!a%1Kq;1q*Sr-Ag~$Cyg(4SYAry^~6?te8eUFw6HT?Onw;ioR zDUeoRKtSZs|NkIO*wxv^-u8dyld9IrxTa{n2%0PLp&*vj3T<>~WMnhNE0G~m#ndV^ zX&CV^dTEpEwXO}g9Jnx_NuMA+1%-xUW}Pwa_`~CWz6KS~JUNgZprZR_zTK$DopYV1 zvh2S;uStQ@5{PwHH@vjnZLNhpH2d%9#iucBwtg(b>+92UViVtM?s%tWTuGwec4x^} zHKfCku<|mo!)>x>NAveQ{!IUcLn1Q1i+Mnw|K+!?t|-ju+6yhncEFoMF<|zXLto#T zgiX4j^Q}x1QnC&r>OV1}3f+7jP|4*pfPj~N1+|hD7X)-^yo}mRZNcoT7l!Z1fW>f1 zAOB7J-E5n{d=Aa1JOVTPdxKSUszpb9kSj2iW@kaB-%&?j8#Pn8)^_rNm6+Z=WR}EH zgw$f_g~|%KOcZ?$DzeA!0GgDAQVP`Bft~an{6AnVLM%p=m+_&|`6Wjcwda&M(C2 z%U$j>Ud#@~0ToHh^6+&fyI8j7RmJEX3Wor|Be*klvg1Nt2s6B4?k3{3wG*T}s4vD- zpY{NVA6jMVHOV@R^D1M57!{OfdIp$J43kd~mQNVQE5XG*DEEo@{jB}F!e=n>YX)J5 zK9hXUF2e`G406~lCb#PS?G-cXAF$47Bzr)Ah`?3Q+ zDVlVkAycCHVmrlFPYoPkS!~>?g&;C$eehGIlK_llXL$sb=2i|YbFp>0VZt2!J0xn& z?_b$WD#L0hCf{Hd{+-hFf6iv&{g3#Wh?Av_jfuUx-TxqHO{%u?XzFObmz!y;Ir#gc zf_2?0QYq@CP2po8k^V4r;gw1OYCPwE89*CY)>k!YJ_CF!_16UqGTF;yD?{0B-xnx+ zE#`f#UZru8tfq7DL(s`)2F@=xSdKn;k2V_Oet%xG_%pP^ZMLY{oyD3m!2VMiTb{in z9%N*I_s<_myU9WM=y+6TP_rYpm6)35$X`e*QyIWfw%GG%(0IxDIs`1B1!Fb-boe!^ z!H%WXav>?0T)AA@SF6oEE1he3vL}}B`CS;JgFA+n!vq9^2@jP?tu0PMNpcXsUn6 z8s|jq*P(bV`LE08%FwmvZmj*XE+699!Sd|3itLB<-LVq8R{LMip)DTpmU)5Kc8D!EJz zrB32?p2E^SHAT23sgqEZQ?M}#+8;4V$AOz@D7{}M-I)YNsy*E!MVg`a0~TD6yk0YKoRFDNyZsM`d-BHA6C%9) zQqQ0KPDO)sPur;2{PwwIPPXd2Q+0?XVkG%2uJvmv24YMCmwKUU?6Av=#+}St5`Frb z`%tMvshzewZqu~_UQytqJAC`a<+jU%zG^9NF|!D`Ah<=$tT^uKlAOdWWK0?ASuq>! z)}T~Hx=51P83e@n9$rHdb?zM4`yoYXfzfr@Qps$%9Aa)%+Y7|mnWY=PM<4MTV!FAz z$$F@m6~yNST+W||iHUMtso_g{4n@vU$GUT|zlDN-hmK8y<=+*#BZZ9xc+#Jcg?~N8 zS!8;KwG%G0t$S=d=6@fa<`!M3`UqhO6N0pFy>Zt}M_W<4;=f zZ&dUy2q+~W-@re!iLN%1z|q;A+v7g-Fy^i0XDI8{vQ@!R-P%VMBWGhM8%K;sa2>wn zf2-nuB*zij+==b2TTmj{{^*#NdN33ieQeJ_FlyW?JniF;B_xXF3ErSnq&b8tM05m& z`HhfK-McCKslr3 zpWEhkraXX4n(CJ*%8xt|54|b&Pwx^5gt7Y);QxZ+CLBWR@#peI=6ELG*dcw6jN8TK z54HD%d3xa_xP^Wnqr6Gi2VC*S2t2dB50)AxT>%f|7RU-FeJ!r^{4s+`oSuPH1=dGJ zQckF(kOY>Wc|d&R2afBz0X9~F69*7xK=J203lvX7S7QPG%(beD?iH09sB?Z2{!{jb z|Cr~y_=eSqe_QtQ|3|PY>uTd-DPw78`oGXbO?zBbw9m_jA9Z}1nXLKHveLqN5e;z3 ztjV0gO3T14a$2W}bM>*qnBIvu(QE|b(DD*K)S@8ekyZXko%c-=@ihKO^1Rom&y*4~ zPM0gPyJm{vHq(60saKUx&(q!lUl0axrlF|P<5!m7zzWk+)RAjxU0i;UA*T4$sI$lb zl|KnJ%@!l|6^&*hqfHi7ROZi&x7FoZuXU5Hw8`3=w*+2z_gXN;)M`!ktv03(8DMdf zMXNo?NN3HCe^9SGr=g2rW#WRt7{L+ik0Griq5fC#+W^+TGtr)~vm&pI-n}w8$!uvHlN5cN5k8gH`(e0Im6{>r^8Q` zSqy(t1sN4VtX`!pC^ISYDppIUAfvJ>K9O<>7M z(sIfHP_*)QSJtq-vd1T3h5KA9jf+y@6dz@V)g03E&AnN`#j!v@o9GDR3J^cwx_DBh z07=Q+=bZh%k(Qg*d?@JOd~k8)y*ofp949;&KM1@~z z10><4*NrN?OH3hTN=#zSC6qdw&N`vh5bG{E@<4kY?4f&{f`glM>P&)l=nrF+8n-Gk zV}DRQa=+!qA=n=QU~-AHR(;uasv(ieiP)lvAb(i{V3dB)b(EZ$XQ|zw=*1f0SmMYA za?z%$W>*E6V673@wFRz1T-r1xCygAPw4c1Ze^X>w_0-$r=DjY!)b9=0k+EF8A|MP? zgA|IHY)Gh>ofS1IZCR-?6mqLn#Ah4^>0a7KXc1dfUKf4qGvk())XNRE!vVy@k9>jF zyAen!Zu;Gut}3|DB{AV$5zER3ShF^|KSI%S(I%6DRo<#;nK&}sp2Un5!t(;99VMLz znAYAk6$x!RzC;!&9NkNa+{3S1>z30zigrzhm8H0_CTi}4y4nbhJq4Pjr#MDy$tY~L z>wU6XUd1FdoI+6y5?`*#wHw|p-O~1WZ^x9L_%0aX#xvM?EEt6CQPt1a@|@S8T@VUI zN5*W(?X#fI3x%8#-;kMyM=^VfBOW-7x=C{J%oh9%8Gd`_x(th^z=*Jj*MM?DHPG_{ z`^vC2h??=rh5CgIsm45T&9ktYAdnYZDP;VNLhMG#Nl?^cj-_^kS9PV}Zh@|>`>e?kB=q_7F?S84N7ycG z2>t;gLoCzcfM&l!Nw!mv{k zi>(UJa#SdX#QQpKWkD>gbEkw6i4(LxFqHboE_tW27T zls{Nfz=cQ52Tl(d@%sncx~;kC9lo)R;osK3{~5L^TiQCbELzNd`W0h-z^{9B7eIp2*r7Qa457*pnWU6rs_A_FucEN;~FPYFw zv2b1k>Gb9DAiLl;y;G$IEv5ATa`qcWS`J%dMTGL-Q{K?beIr{gU213f)qZ=ZARKxA z4%|a@d`>dv0)JTUcPAw=T&6R0`2eu<-S0|?MDF|MiET%%aQJL1Ckk>9Q#+GnQ@gzA zPoiCsijlSo`lkJ+7bWqTiijUfv;=^>)r43+MRHV9P_?+u&?096f z3M7gjh@D$Wgx~$eg5LEpRN-HG-xhJM1jozru(7H+xW6vU1)HZxUNn;=Q*j-G!iTn5 zb7Hk0P)iNDw3g%bWvsUTK>a!30)cwA=wbbNPytElX|npez}S0QK{z1|YYIO)2usT< zfGpx@GH|jhQhEbxlzUtVp+k6{Wm;D`c7D;HgU2dlaSl~fda6-$1|ompb?e;CKrW?n zCHbk}0q+C8YJ+CxJ&4gRF1HXO}r#5k4(5Wh-l z@>J21F87n|Ot&>IaolX(?)u`~4FA#PmF7oQ1j&STjS zOWw@Cz=hNHh-wu`jI=TQe#!J5E(?NEIBRP%Ix#q_LDL*lHmKqPJFn#GiQ0hs?4SU{ zpBQLewgOS@_ci_abA33d5w}%%R^+{N7`Y!rZV&aBR0r4bGaQ~Gwyj2#*smaR8Upwq zb~~Z^Lw0C&(Tr5?nkfj0U?bDe*vDWeCO)BMW(v)-e>Q|GoCr6^K#NksuvC19vTtEA zlJyN~dv<6Kkh|48~1~b`z3uavZ5mEauF#8|HZ;pz#JgOqnr=0eR zUTV}q0ZB+8RTrS#p96`IModOA5eLO*-A+Dr@WQUaJJsK>&-@FVf<_T_FA4Dz<3TWH z7BZ&c0%lD1KHuAHdg9mJ;US+JcdYa@& z^OI~^SRKyL!`S2)th9-#1ll2u{Y?hs-`0ZIFdrN!ZuNm z!n+(6p?^v;OSG6rnKf?f(B-j83RY7Oxe!`{mEb^1%5H*4%`)wjn_P-z2I+mgQtP$M z;l_~~;F2;nf&I!dbd8QzN$ESt3gPh`MP{f;V@2SI$*@U`Rvj#7ioZ0F6;oLKXzo-) z_b)RW!E&O8Hmb`4Q<>sNQ&~Goj+?8pbY^wGMU}ZdH`5U7z}=2!=EEgcJjSVGSBD|UAVDFAj)T!Tpc8kWu%z?ih@ zG?j)oOaz;HP4%*-zvMGjW%wGmdmhc^>UY}NgMMsmqT!9UUR7Vt_Ti9#w7op@o0APK ztZGM3-V*5X^OBXM$4&hO7fz4eGlA#d`c`FD)#U?*P>Fox*I)&fZiAETf)*r`S7e&C z6JB`^oE$@L)V6nu*nJrJ*@tw!{??zk{N+ zlYAI@>Vh=*i7?0kvNOYppPeEO(Nye~_xULnzeJLKgb?4NS>FN;AJH`*;pgFZ^RFbN zB_v0fCT3)VndB56Qy_LQCgw88Xu%@N2Syl)F(N*|{-FRZirQ1t-;v(GzdL*XXVpmH zKRh*d<~FAPdwrvFqBO67_Gw2IoC;JQslhI4IgWy+9u(*58uu$Aq0-7rW2&=C99;C^%N8?f6}#Y8(q3x(YZ;a<%zd_xB^&ZK2Gz5#n(spY~y$ z&2!B@<~t#$FvwMK80$>u5L!$se%IbY38Ijs59!%^7~yGV!xMDSDhqj{P-h4fiwI$1 zN@1DmHq}s@ot`IAe^+hj7Zl;6*|A3Cu<^{Z0&+{zpfVT0<9Ny5Tk^0=c{kJV8Ea41 zoOK%AW#3rwEcP0SWlZi@>{oe&`2-USiN$q183Q0;IMC85sbQ#xn#a)@+4RQ>F$p-G zAq!ZB9T?%^1l1EPQtnovY7M;+>%lvSxe>DXK2G7i&^Zp{#6xA&H2oj)6heCRAz!RG8g&%02uQNYPH&3Uw0=;trQc`ZAv)_`;?lX~8Hq?a`{IQM?== zzz?sFC?JGj_dBPFO27<+MdAhYb_jmXF3K z4(MS=NaY#+<@`V|aoK;xcmvY=R32WmVMjH1B3hRpS>x;H*%n=?8r3hXK9@3d2DCpzT9c08tnp z4bb&)yqp{|%b7Bf>~rqjx@X3J4ii?rVg2^^VcPw-hl%k&IZXe(Ew25qSS|h|vqX*z zIARkN;&3K9s}Z4}$gV%F`plT1B?4LV<_r(Xv43PlG=Mpjbu4M6S=mNuYnO|iK~SMG z(X4^f>sIN0epYSTd{{qyZZ7B_d`vdw z!j8ee9_S6+dbyD)r6oGv8nQIuGDK#PFG9p`V|k{wjBiJN;7G)H6aHquq+7wLOkk(Q z9V2`wP_BH)=wrvkovM$uf!v7Vn}*{~OW6P2BDAXY!c{v18GvWm-9lpzGBD*!qO}_$ z>T0si`o3uZCEk(tCVZ@8te45U7s0t7-0a3upl((^u#Us>moR2Pc84DOim64&H>C@i zXdu15QWe6WN;CbD{n@Cn0{F>_R9pD;j|c@;qnTBid9hZzsAft~J`9+82t&TBk-S5P zmGj3iT+n!FUh4%enI_UgBQtd@6blQ8dJtdi*_}AotcXfzLSUD2bN%BIma?pgu)E2T9gB^iwzGig*>U zbUA@?4>&D&Q!sn_*-JZ?A=Y9qw0WTL;4aj(62;r4SSN)lpGKGlpBcq*b<%-k`l?Vy|FxLBAG^J z`ZE4=D`Pg+isC{_j7^f)MupgY<9+v8v9;19>VwIqzx zk^xm#1Eb=u=h;mL$}o`>d?KA9I2}1$p@rHSiu(Mh_aUC{qOsjLD4Prc~y1 zv(=N($&jT4EpmK2MSoliFp@K-st7us;Eh+N{z~BVV1S=nz}mVhGTKW27RptG&_$SR zw4u({&xN-cX(+9ewQEo0zbv3Vra69+xWch!PLERkFq1h`NoChf3N>CL$V$w2P?&Md ziK;H8P#EvS3Z^$r%l^|cjnctE6nM>jB4#tNwPi0x)cMNWm&I2yss}sa7igDyzz>by zi`@9~Mid=+TF1h4uk2C*^}wF)K=h6PM2g(Rz3EbVuPg7Kj|fJieY?VV!$dz!K?LVY z<|PEAc2Sq5D?=kaG@18dMcQq|>VUBrE}6>&A>V62)lGL%WN?;uQ2c4YG;H`*E>MJv zRH&C<@z-AfC4!-YG80e5F7(kSSl?l=~F zp7A`w?FH}m8}?u$yH{d91)-YRxV$!G{Hz0(PHs_-s4}Kbh z+?`kYej>qbC+7Fgn6mlH$c(B-_-%AHkHlb$rPoj&N&_#nCKLe)i+ggf@bi{0Q@6)p zeze1{JYY=XYQc#=n}MCcnqITh-DCNmLsI)87MelKSr7}6+B4HSaVL`+}y{9BKUQ3umGQZNl|V-&*e`sEPJD zL8Hiup>W4rxZOeXBKsdns^wW9@QEwRStDU&O;C<)P>U1$Rt>#(fzvC05{C!EqT;#*5b-4H*Q6J^baVF6bn6Zy%W8593DBITs2?rua@!}sg6 zfRMYk!9m)#hd;zZ+V%FRX2(bY>VPyRl)X8Azkw}VhznA;TO4Es2n0DX0$#&?5=wk2 zrh<7C;vCCoDy2vZ9Y{te{UEPG49?rNT?<|oxCk3&C`|+R+u=EN;LQGnUtt_=ZHc*| z*n4?NZo){ZbAbRmMMo2c)K^ygq)0-5z7QVX?qt0ZV}Z;yI)WGZMl)Uca>0I#v>fl| zs85CtdD>n`#`EN^^n#Ancwr(t@PQ=|@t`Kb+~K`aEFjEjLoL!J4j>uMh^%`de{TYA zfb8O)-yyih>makaw*JcKZxq~A z+VFS5^Ne3v6FvB3lT{MRKX2zTMtL$AGBeuvprxg-o`wp2O4Ld4?bTUR`C0r>E?F_e z88)oFybH8DdtcdWTobUKgns-r!8`Lr#8fM5-C`$T+W(kX#8xiCK$-sk{j2~Smd|{`VI;O_G7^%>x-X?4ZgxK5u zBXZs=uTVjTwAaMX8jegEkGqZX(_{iN(!cyvamyU*qfbC4kLYF7S>fdQ?oaun-ITJS zGu-{7i2G!}oP4aVF&(Lx2Z(0*&$yd-hs&jLV?81LRtNQWA#Y|Rxh>#-$l^HPo!+^< z^gGghQbCz+0?gJ3g?lrf*x6Zjp$%N6;SyrD11y)Q{B1^}kbEQEBj+wbJjAtuU>)Ie zKD%oVjuMw#0|4?zl56L)T%?BmkU~x^ecnI1B{+^Htj;IrZf1fV!aQoCl%vt+h|>aO zV8y=U7O4W~m;@-3bKRBj$=vCZ;CyGD>||%Dh|rO7S=9Q@5}xnWU#uB?BYOCqJ`gmx zUi?k9&$IA+MSopNzspjxaavYq9iGyPe#Rypwpr#r+PF@KO0FI3mOIeDsnJ~+AAu{4+t?QDd%VzHTN$;`h}w#TU0k1uvS_9k zYtXSg>|Wm9D%B01{KB!3iT{9%I1;;%(f%vY_8b?za2f2PuZ+S@N5O4B`ChRBYi_1h z^|;Z~@ofLz)BLlDRKt!>2R zzVy!U^*d^7_bHfbf^IXpAFZT$-(1~bF=f>a!i%df{;Z#YzRwYuDVJ$|f_|-uI?Ro` z+#wlmIif8Rd(45_Tu-qWveik%v`MQ#$u5mXam0bw6D~VHeiY5Bkn>c}ZUCely8K(! zEn^}%#GtoPg`O?A0ONhOHN3Q~V?G{BOdk~Gk63+QMUjphPth=w$&ZgYGTA?g6R*20 z+R%?0&{NMo(Uei%@??v*hCwKqA~O2nRANP_U=#W6ilM4*peB; z)u^~w6hv7E_RYt!%BPA?LsY1p!l2*;MXI9*wPdD5l$K@^xNyi(#+|iByS3?) zH>cI3kWNO#TRwx8>4$#$`T230_-I+LL^~{&O@Tw?Gd$kAIPI&+-n$alf|auO6)V#_ z-}?Q8l!e9<{iv59qA74Kzw1?aGR^lb)q-X&e$$?ia4#4x(*m=f^pxFrDW4RrDOZj6 z^h(`OCY>EIbkh z@nf5K8fbl@d?lO@PZY4rw4>x0Vj^g3@na$N+`cz~?uAJBPfDImvYaO}ke9JpFC2Wj zQe6SdY~wh+K(=BwHodqqG*-}Dqfok=(P8W%-pGDxe@@oPywUY_R*r-xg0SIRXC+lhIey6v@l6wDruD9Whf?i-(w9j4f_eJ zhuj3*xVj$;5p|TZkD`iD*sWFAzI7VK&8`~aTw&j%Fvy}^8N8O`k=3_qzr}Z`G-wx^ zOrWYS$XP@%-iBV+0sjyz%}1@TSQ6vN6KKscesnIPV;j`Pb_DuIZl)3S2kGB?v%nDw zV})=Lk9C*QwF{+=|3=w41!)#VSvqao&PuD&HY;ss{%PB`ZQFLGZQHhOPWALeOw2=f z^xU|Q_i@KrH_lr7TTQso89LuaZb4^?j+J^pH56Nn2p&W|q>|c{YOL?B{9DL}988P& ze+mSZ`0N0|x53})5(Vi9?!C5$Z2fWT_yfTWGF-tNE{The|6MLIyRuoA_p#TB0O_#EA$}lm zxD>K2YrZyKJhxCpb5E19d{%_39uw5mQRCZn%kkib9ml_-YLB|xKcy`b{5p3IWT}N0 zNwF?nV><%06I^V|`zS@&^x^z1r2Jtapn8|?qJ`$GJSDqNh~+BF-ESJD$J{t-JCvUp zmqRE=x~D7dIBUHB0GBwjdB+>OsdSk=G4JRW-pMZ>&zlo{ne~Rk3z<8gZrY4YIhl2U zmKk*9UAD%m0AJ)~jXE;I=Am|$Q!UH7na=I7PV#!@x- z6j!Dcziq{<*lyaeXkshVV3?<4-+cprFW_y1G?1q(UFw!TBAPWIJdZ)+4O&TV{y1e4 zy>J0Y`2X?@VC5nGYyQZ=3vAFJ&?Yu*?Y1pT@XjJr%>Cp86UK|AiiX>w%8M%!l$x;h zs5~_avlf*)E4yyYd_8Zu9eL09cvVtrU6q44F8ip>FYW1sd@Wm)oWpk@80 z2Am7pd{hg>1{rcjH0(2R5_fe~c*FDtQwj4j7mLl!rDHM5r&mPPT~I-yMFcX@^$44* zVB9G!8W^fu>7a~F_5QS*Z@Zk*qi`fKm)XqCjKUQQ7v{`!c+X#^110iFfI^MJXI;*D z2IB$S1%>SwlA6~A({NspszBrCQd6)qOX#Pw)`8ec?g8Zp!Ss$C^#NnmZ#er!!FVq@ zyA!_T0<6V3e-&!UCay7Rq;c>a>`opQr?$GW#*H4C=P57 zw8)jqsxFHFNFn#@DLTzntaMMY??u;E?;EzE-x@)m{?~~^18cwB*98>#ta5mqoF4c= z*P;=S(^GopxKw~jam!CwWWWPCX1`w`JtO(y7J?VOC*aw~nf{z^oqk^a(TdPLytl{c z>E2yCI{;fmdw;8;h(qu!dA2!mQsOoiV1P@{r{Ss_5&@@G7D%R|dc#HP%%Q>#V-U_8!krQtx!Yt6`M+?C!zp-mB+d zoBw*198a;k1TqkwxzxC z>SoNDR&9!)ZxK3(o|N{qhUhto@+F?a@Jv>^N`iI`w+yr@e*L0zdH+OZRRyf;wQlMRY zKg*V0mGXXqbDVU2%10224GqMqcei&n!VUBUfE*Bt?>*ioUI}+@49r{}nbt4ETC+Y8 zY~M)Su|LOAJ*6sn*&#Bdp8th$dibr}L$_4=)=}m&Q_;<}pJq|DwJy#Sj&O_k%8EC1 z_K5Wp=L@#RBfC~BTDTJ#>ZUer%e;1hir>@U`$V8GLk z8>sF4;8=>3rJj-=?j8mMcis2@s;pr;4LP6Qf7K20EJ8hMZ$J$)ZS1m=Fgk2NQ|ZjERfMYgoG`95j*01rkv>mwi7~b@YD40 zYH(8w=A5V(g3e?l)hHow7H;#QEa?a_<33Vq(GX;65K*Y_cqr08U~`7^E~sNbDSB1K z*DVSE$qL^dTS7j_0TUq2pAcbJyu34& zU`Vq9mQH2~bi1?Qy4BBbB2H(mEnqHap;|C%eu20P=JP8XVa4aldDuo&s$%GWrQ))XbFdc}3|o&@MqT?KFs z<7uuV)!(hr5pN*WCrfremS)uBXLd?Uohd?;18#B!KK$dMZq(%)Lnd{E{_Zd)EzrbO3#_|Y?M+^C;AESD(HwF8d8dX?>QKkx=BiW+?+lHXz0)RZau z_F!SNz+oe3B5AU@&7_hQG`w(xqWY=Tq*REMd;E9@y~@++E}6QsJ#}^C4{P0ThJza_rT_Ie1FrF)0NW{$OF_n;s-lQ}QPQG< zP2k1|=q(0ZLMO9icmtvgdPFMB9_~32cTbd@=b4NR5C!7&+jYUXUyfgUNXdK9FH`zFZBOrwkz zk2S_D`H^lWE<>Q$FyzpnNyJh@&;)IkGe9Ht)2n~@k_yRyX;9JMs>VrO=H{_1UHJU) ztK+R>!<=h#XuYXcwX~lTbbcu%R!xfdMJHr;i8by? zw_QS~vL-MH5k%QQFcRoY%(<%_IDUEN)C%6T6v8w}7HkXH;T8jDW&>z?VwbqKh}?@c zduC-0r<)+>4&r;OjfaVny>d~fz`&9{w+O`TmB@MD^2rIfI@8k7iZ|OVbLQb3DadGi=pdv`p7OmO4{5PiIN(+{Jv63-5S9 z4mT2f2hAn@R^vL#RM}wlTZs9xMKH~Zy!w_`%3%?&$WX@$)cYf4Nra{0pI}YTl3c;L zQac!E#(Nv(-Em_i^r4f)ZaL=)dO~8Ze&f{<;@+Ia1l^&0SYkoSs&841jd`@|b7z#1 z&Q2I9&aO@v$x~;iEaPm>PFxfF_)roPC~i2$K0Mj&x>XxGziX;QAX3^U65L{FB6l^Y zMaG9y)7?_ePJ$YMa*i6L)5VvmDk))I;L63PS9n@k5jTQD%WmV)2n_lM@b>cc9(GrF zz*rEwG9Y`7^R*uIVVYAMk`-f17nN8&0*}trpnmqQ3JyB*4&)HaO`kXZI>{|4wWYGY z%waT(6OI#_wMd;+if~4ZaS>+1DtY4!Pm14wxXh=AdC~pw=D_^wlJjl0f!p@ark7_} zm;C=DyMJilU$1!E4aZ#hE z8S?Mxi^gTI;Lx{1K%+p&dgVm}f4m%*JwyrDE|cPB=H1fs{aW4L`T2gs1X|hsEq&8O zs98h$H+W@NmneD3jMKmAf~Ss}P6f4}+Cne}?2HpM3Sbs#>o~DjVX{?j1fHMSx zA_L}r1gX6i0N`WZ4t=0cvO-B^G}#yJ9Ml&Z%Q0uq0@luF&fht%IERV_P${`BIu-XO zR-|0*=s<>S>I_Y+Z_$i|wHjLKX940k@RRt2@2HX0qb=Uv{YBM!ns^8#)Z$kprPI@T zSq98jca3|fEN$d##G-Xo+ZQ19nTkFHSr{>kP3N5P`^vpeJc>_zP##)M_Eoe^TbVoJ1IC*D`-?_i7=Bs=x@iEqY*%a*)lz6bT36haQWf{eWyQ zV=P_`bg{s7PB0RI3huQjU&hlHd5Oz%M2?c*64($#<<)qCPQZy}f6y3EK#f3<@3P%P zZ}xvY29(M3c=>&;%99>~L}=Ou11i)&%3!GXagK!|EYMo~m&&LL4jH3<#32YlIVKNq zq@Xv4xaxm_@m|HuUnu_$hxaN|;Wubq$87iiK(^4eZkIDE&ZKFWt2jJY@=EEYc+CQ| z?NDL2i1#(OC6WsMk>s{o7*MzaA28M{JMS_{h9nu+Rsi#o@sb2(rG(j`5Df_?(AlK0 z<;9?>ld)4aZ)FoEgkzSY5mRF|#~F6CNlq*3H)Ct1cp9XHCn#U#oN7k?aJVwTx%m}>7?@cF^lufvaE&Zhr9VWqJ=}a(flfst>KAu3aTYJF@Wi0}8*BRT8W09B&tAENNrBa1Qt+Tw?%^ z8)|&}f%KbVJ1Oa-y4kflkssY-4}TTVP)HF6hGtl2J5{>hk2UXnU#B=ezt zNmq3MWwj5!?KPS} z3bMD{kfnlgnZn?a9o`xNaiW8b%Da21V65&f#J&{UrCR|L8AgBtj>C>mYaWFc3$ zg7Jt5*fyha*2yDxsUtGN?t)QkRqa3;e({?dm2{D~0HlVy#D!U_NP27NcrO$*1UsWQ zvqH70WO>K09NE%UL9Pp~6zg#t8_HQk7R!=xDQ1%;h8W)i+hrr(gT^3@u0% z1n~m%3uUm+w&!t0`Tapcqh1u%rlZqFQOLrC5eY0v!-gy8lUw{ddh`;MO8TgEZLTUR zXuaI7@>)4i4Hei?Hk&{#mv;JiQ_%ih_g4J{>A0fGH9U3r^Umu3uhJ!>BEkGPd@-FAJ%QkIrJS%PWQg@3DQ| zLYptyOrqMtNRYCw1s)*MmsU}8DOrgzz^Uqw%%}(fQHT`7A!5jlCwWfs?rbx!uvi&_ z6oJr7nq{V_d;?R!BI|F-{)7|MZ$NPD=!P z@`&Y_IO;5fsk{km3&5>xr&JJ=%t#10-h;vB6H+a#5$|`A(M5HErakJ<5vfVDid~t4cgt*h86&<}NQtD7XIT-R5cl5^M0GXo zp^!7KsUP^ALFP;+iM9NBg94r*nA`_XCo*zavtb6uQreWP4x+G*^^Svw5l0#u$E~L0 zm7>}^?sV&yYUNy>f0meCtSmENt z>1oFrL_|A4O%y-xMH6nN?!ROJW@+{zW!9s-A$da9I^T&_R1ubF5vbHECRgl(uQ3(l z(Q0#L*A8cT>z+&ktPmKND*so51$;W7u?_7)f>DjJ>^;+*;=%$hn@#*Wyi2z8HtR$EMn-Zzaltv|314D(_5;uQzsUj~;LZ|Mjx&9iuN5WU>7 zM$#~}(u|+G2^ATq#^r5HTT)Jq6wlj^VpWBI>O+TSfYlB^fVMxkpDkA{03K>Be2muh zEwkC$MFjKxlBb%z_m}LQ7#|0W4kZB;YHeMfC$l*ddRsDwJ#e@u8QLw(t;_u_eeDRk zY*TxpCiy#Sa}Zc-x>iGYutNP1)G^$tZUm}~72Kzf!v_}y=!VpI9;;1MN7Wzh^O_px z-$fUp`nW5T&jiwS+iM81aS932Afl9~B>Tvu%iLnZ8GXnrE~~`Ca4z%b%fedF`)G77 zr5*S#(B0uf?Cn~AB3k(n&9 zH8i!D{~F{t+K8%XWH%ZC(i=-!wl(y0kI_sqOMTGdcL||D5kyuHZ0ED8?SnsqsBYO@ znQi;Hp_-kWmyD;|jLDziVZ(i{v`w9bRlG&b-6gw*t6EAb=Gy!!#x2gX(OGpEkG(ml z50iFzGf)T`EIWd)@yuu;p(>U3bBk!)3Hf%Jo_a>P5Usb3E2;8|%zq?8V%q{4PU%Ux zy)0lPUyUk#=r2EQz&jw#6NrjA>wO1KetSXa5lx=iT<$J?go-{2IR49!nyv5AV0RxM z&~ke@ph1zHd6N$O&D#DPD55}6a<=4ga`~h9B^z?Xxnvb6VLw|crj7Eczm8<)`|zPs z3&L-oNb8rY#C@v=?IQy`fFmJpKKi@asSVnYN?m=RsvIqoYCVCGF1Y|G{CGd7(hpRj zXQZ05tw6+Ry(EN^%@zAxKw}uLCT1rA6cHf-@3-;fJ|2#*Fao(v44M1k=<3Pe17f&R zQpC_G_bhSQ-yn}~W;Y}|S{v>Fmo_EmT68+u%h0c}jeQ`82`b>!<=Hj~D~BOjXvk;% zuHv9?p0qikpP+@lzTXIQ2v|n%{*>8V-kZMYY>t(DAbUYM4d%oM?~1fcN-P{3_E`2b zXOq@ou^jAU9C+gC)7)bGK_NB$P21&yN+0p+0#dz9Xxem<9$nN5bD}t*@>{Urld|&6 z@IE~D>DlAO62n5)lK>y4VJgp0I$#C%a#s{AcF$kXzfdVaYZ*CYlI_9c=};I(Z9{9T-tPUK%Dx05D^zwCeb1VJFTLwJ zNTU&tcKGs}&0dg9kEH-+G+KTe_IXKUbTEx4L)m)PCb>SiF_E|0rvhUaCTLujv1(Q# zUEL$xCpf%YPmIuXeI*Y&+9TtOK3BJ=!gY9iR-P$TFDsL5*A&Ch^3Niyi2^q1dcgz4 zCjO+Y_03_~KA2MV4cd3HU}&PFPsYEJ9b^cnb?>M~;Uj=|?Ki~}9y3(7@!zyGV z>V1ER+3^|rCXnt~>V+y8>ei2}=Wj^KIzfm7SCnA|`YKOprFoYVQXIF^oe_nS~qPo9aL)f8ik2c$*W;35% zuAx052Wp|63WF8`U9f$xh3gykB;O){;}zV~cg?T*k#%bM^C-9@4n6J%qD$6z*C*Wa z**j8;pq+fiLw3tB;y>I0Z;lsx$@_a@jgHwCCJHpJ?-#sTI7AMF1tBKVHGv7)umZD! zf69D%Nc5}kk2AX;he-O+UGKB`CLVqSq*_h@pAm{OhZN$rY@7hdy-+E!UHvY=z7{y2=r*Yt6_+_Y&;L z>BaQ46P%_?QV)uB(xZ!T`9$rH*D>=PONcpN=Cj+&HQtP5AjR7;?B)_Dweu+!$Gp{v ztc872!`2&GF_V>Enf#^eq{O^vW^~zSwq;NqiQ|0gaR;mDhK&bJW@kt@1+26n~pzhgAvpFp>|Es-r zsb(o}W+(J_cOYTB8mX;G5K1SukT;@9jVH{!$vx_4(qn9HJp6N7XG<4`d1h|@!^~Ky zxrE}89?5D`35pNh0j8JN8o}=j1%1%wn7TWQmSG?EZT<3MQSpFadcNR?R5_ghLuwTC!SLxuz!ibIeL&R z$g-okH3hFF_Pmq6qfb`LLplY!0WK)h(~;dSO!75)6Ko>s4l_kGv*>PXZSeGVS<%#= zlObi`eOA+;4Qip|&u_tj)m`*TpS;zOcz_+z1G8K`tcIb0pYA?dRkXs#suK5*x8{ZJv82u18WS0bpdsb$knw!JR# zx_B~T++;UJ=0Flt7;a(Yx$Mx0P@g0rr{TK#tZ5GLkOx7;@xIJVvY3|~;P22jBcyQL0+w_xw)^buC^QOrJ*VSa=}!JL%5)U7T-3Wgm?melG%_V?raC^cv+1#AV@cTac`W zu1T7u!xoy5g&nRUm`d4h&3RAKh_5GZ{rk{cs~#DH$=3d5iDG9_A#aX}hn3o;X5#t) zK>ncWEP?2D&4Z4NC}PeGzSj}egs_2A@?X0+w4a(`1P^aQLkx;=~b-_Mc24)TYLMmPG7V-Ht8Ur^f zp$}S%#;$83;_jff*XIk=r7p3lu)4G5?H7oTfCOocE&6kw0HKh+VD4bc1v9FR$|`9A z^{=LGd3X==CT_4+C11m=)_pZ~ZDpQcnwBHKgRd}l4+2Wm`o%t*4Ou;_I znTDyqo>c)eFrS9tbAC2;Vn%TU4k(+C0FU7yI`3IiQ zz%1B>wpgB4R(D#U~ew#!x(!W(er&|2|!kg?Ck&Qb=9q zLSc+cU4p`APFM0THY$JBtMcj?TFJn}&a?d8EAmh|ehg*fxJJkUeLI z$Q&*GEd2YpP?cB3fZuWzP4}xZC!113pfZO_1AX58c1 zY^>l^<2IlSU5DPD3qyGJ92*1^5-uzTTxr`ku2Y@D6k(mYS&=qJs8V~9j; zbb!~Z%kE)Kg`h_h^@&bNm}{P)Swo9)jwSJOsHIA)Sjch9v{cDjDrt?LWxgn znZCs2Z5b;IBb2#pBb~=r7LI-u0&~vxn*0$p@K2<*y&e1U#`>N^^f-|0kyL>}0B8Ay zBfA3#``sp;*fkreYiNAO#ORiFK|b({6WH|y6wfTOTODZ~69nSO?%Y00bfs?HN$C+E zMqp{n0P}|a41$|EE>9z>E}*WDE4HC6oypCb^pSk(llLVWtFzMho9Z`9Ea5zlk2Kdi z8HC=i_*&>UIhcDo;vX5oZi+)+u7nT6e-Yi^A5T%BbE6tjSyQ8H(c0}f3uOjkhTPO9 zd}*Q*E->?6w2x!6NB6KK*N{XuXVws$K8 z6+hP6uy=wRakwnwz(8U1H$-*5Jmrujw!#@Hxlp&qGeu%cG#t55m&E%6O>?lSjZYJ6 zNDffJt6Z*M=g1LI#~(R&wo<^8BeQ}YNjYB~v$rCd9I7|wTE-i}=udH+EHtD!I3=a+ ztq+1rqgmF1T{zoY5V#hOIqb zvuuXYAeoqhe=|qu6cjE!U(3XIt6YA2CbKJru#yGQV%gP2*sNVZTMKPDaLMrw8pSMq z(B@{%rXI1Um|80w!p8H6TE7~kI2|lHq~VTld4Xq4JIN7u16js2JvKcwy&g=(qTTNN z+2Xjio|Lhq({<$!b;bHr)RP*9Ji0F4k{<~ zh8R{^s>50avt(K5^ra|G+l*m;B+xGqjsEKf*#@P7>WO2Uhzvg|Zd%e6b5`qxYDF3D z_ecX$ThMibpA50gN2v)7u0vMsgSW%5D$r$DoT9U1-h|QGWm`q~J3!wGniJfiPiPe) zw`=o?+@cS$85p?7hX?v{pu8H^$wuO0gv5Nse`@o+dAaV9UR%C z@?iny$r&Qt<1FcYu%hhj{nZ<3#dc|&eEZwdUrhr@*YKp5&jr7; z?>hMJ+QBV>Cpw=#VW0RV#p_}Me6E&QuUd-vZL~3;m#KLGAuZr_&4K#zZrz1S6-ZT!PB5(XihlN$iB%n3Q92ju@8<=P)yv*XdGk;l?kqD% z_THJ!rfC9{uuk`bTpE%WL8@j^;0CmdOjzU0;KCY4Eq>8N2Z}`Oh@*rWFd3IF6$i}> zFHu zN%JX5^WId&)l|j*$Z9A0h>3sJfesSgJf$kdm83eF_%@A|at#w-QK_nPWT~zssdyP$ zyUX0i^GU>;LMXH@i!n0u<*4nF0=ueMS@vpCrmg!5)&i6!tFKonOWUXx9X4f{rugVd zUqD;o8fM`G>#>IuGSgz{7%{c-2~r1sKMEkJ^V~=Q4@n>c zUH8-6ifY%=@i;|q^#A-CIc#G{xI|8!X>~h-d^4sj{ z+w9WY?26m$n%nHM+v?`DTmQX7+O1pKtrOa-2K1Yz^j55xqg*f8%bd%88&lQ7F++aoSRMkWO_8qx#TNPYc!EQ^sxMNxy zXYLty;%@iT-BMY1>>PZBy#kr+sp1788UXV}CEgI&i`PB8@$&)=aAh z$h)Np7=5{u%6c*kyK22j&Z$YJ_Joox-WU z?F!2xq?7D+F_`x4O3Ng?%dhrfynt^}XaJ#t&@M$%5%;QT(kQ|+Cpk94GdX!gptp=< zNual|WJ=&yYJwHyM@|ABT zWfGj7`aIQ`tNL$B?9+cpea=9<6e}qRZdz|j?EN~9^OgYu8t|3Jzvats|re54xm>WOH?b6m0Qg!HDf6Q($ewllstMy(J zY-w})qs#Y^KBxH4{|(4vaJ^a;#`))T3jKEu)$jk2LnUtoa5r}N*Utg?Pm3y9K}QZ% z5RG?1juMov*iW8c0DPm^MbB&Dm4u0@+)VN8!wEaZ|IDT_TlALw)sUs0>8_7(H}>~- z`j$jNcbeohC$r)RE#AH^xtV@(bJYrSgf@AR<2veDe4^|D=QEZ;1#{G@L! zx*FqqO&kSqL$j>NKYNzQ!QYv8ZE(`)q9N}x$~zE@N%P9t@~^!^rDEnkudhpcO6}o; zBEMN6+0#RQDJYy?E87XyI^jWimzgL@c^>xDEQsV((4aIvE{5NKaLg$e+)Im&^O&w) zd}>_Ypll%v*Dv7PFV<@cL(9a#R76td4b}UJR%CzV@6w0BSSHGb*D97$i< zRT-W0vFcARM&(#M}Z&+@pALI<^gd*~F@aXhsU$PPyAlg;zcWM}WqwmIV zyCz>8b_!Y~XR*|aRYqetH^qpr_8MBvcX-dIGv}@zQzb?|m+pYOyQE<@jnP~iW#0CR zCi?>aM+66#@N8i7pSwx?&nf?}-Oc|Qv*-WLjtsyCU~25}e_T%07e`cawC`oM6k0-k zBSR@X+IFibG$Q46pcdj^y9rpCX()~<%lCa}vTX)d5+GDX0v_P=5;t%~P^dFT_ev%S zV?S}9aX%!|zie-&RSLpHGTJ)4J3iK5t~@_B`1!xVc5Sqc)R{S)Xe%nmf!Gxr092YR z#+4~3H>uTTwbkUDu`QMNNbH)eALn2%{@ zF;{JQ<7$L4y(&&KPBA+EO+?sGT%?3HtFdk<^69T@bTn0>Wk{^|lrS_;(BdBP(j}~E zqpKxP5~3Ca4oHgh5LK%3#DW=M)j^?VbsG3HBn48e$)j8bA4vg!jV z9KTeX2FDDSqbwbXTf-DmyjP_^GByvuj!21Ga$;IMI_Nw*F# zHZTT4Zm-KHqm2JpG>D?40NklkNTlP}S`vt2i9s0H z+@uJJSSK7fG8dXV>ZDp*GV+7e87sUsTArZ;TAGSaGpb{3I(RO2NEV@*Ovr^c2CJ+BVcqdQ^^ zR_u;ROXw3xlpcxVhmbvHxDz8@TjHEK~ItFFNvER-Yz4ABCw@8 zJ}}+|;mVg=(PhXzmSf(3l_r~Yl-c5MVj*4gj@G5gw~ld18DT$z&qja2X*tf4ulSHe zij5+n#83xQXfqg+%m)gs3B%20o-9;18A9`lY#paWEEjppf^`9phB1R}RuEuImHQyU zgNQVkX#6SLXR(?IUZBf-Sd42Udk^L$kHzYm;={8?JT;4jJ`pfeG;Dy^I83i9$pg<5 zGELhVsdn>?O;=55UplaF6SrG?JOG4{|1Fq>gspqTA z2_+eljtP706b(p2b4ZFh7i8z~W%t&9x&;8H7lClCL}j3~b6|Fp%&b(}tX%DA$TBm9 z{?+d^Ysi+ii4FN0%W~VTE41w5>fX>Hu>4vGoO<$T2m*!xc?&W zj8YR>@JyaJKdVvhzYubRv6ZKqJc0VS#bCASw-91YwnLyR=7@YyCb5Z-vE0bP-4$NC zz_0M~;2N4uDy&;M@x3Y^-I|YB&_#_pR2!g-e6n9^dkM>s$)Y@yPsp%ZgAkNoETd>` zouF7L4zC=hCc zYu_!53~Ej>WW`d^VD6BJr6iEbIm=8`<28-BwbgqY{=kdMmn3hUEt()FsVHiDNAr$x zlzKXKi_IH}e`e*O${| zEexV8e~Ydz;)pE5ODaQ#$(&$#NWF|Ey{L0G9etL-0LAJ zb{0pdUTGM_%$~^Y9o3&)r<5A}KB|Dvv)x8)9=R61cWhW@w`d6LPDyUnn2DNwYv74o z_nTHMuhc_#TkdyXw+^lu`~Wdgg#KoFmO`k7)JQuj?(i2o|2)`w(pMltlx{uulfi7y zokClN<9X%?b9K=mtw4u@4ect5d)q;XbArsXofx_>L)`bX1TQ@9Fz2b)keb4tLUiBR z;0K0wYm9li1{6qjc%6=nxryh(SbSlAZuqG^HSmbq{LRo+)~tuU%L-@TLMjk`J{<0& z34Ae-Vp7UHE3Z%dafaAr@YEXSGaWHKJ#L~$?kj5>p9K9w8ARsfO z|4tft|7X8d4(2WZCu137N5_A{`2Wabmzt*++7kNr^)XXNB08f8`Kv&M0LU5`IxSetl3cj<BKrR8;V{ zFaeT?@q~cH9W!C!Ch9O@&{R}v;SEWsmC+8c{1?P+ivkXmrTduxc)|84z6}EPU40UB zuSqt}ZYEGx6&3`KQL5bL>N@aKDK;xZT=cxmfi>iC?wlA~A*-8Gog=f{su`LLe;M1? zmMp=KV-|@ui_~po3?8Y|NaXoH0f>dujRdjf)Uv}AVEvtaLmAc0>vv>w`SxgKR28?U zS>8`3OkqCMC6bS4AkG8&==i>$QE&^Zi6rZY=V@D8oeojGI#oF%n3aG3)+0&jR$$upJ!=aT-8-t0{CM?6^c zuD_1QkEU^k2zZUbAHap0s8EF}T6cs(ry{w}iYD$Eaq0v_d8aWbB?tG-xx?gOvba!; z!B1K%+dUBqC3O`^F%pBq(*WT1IiML*j}Y}D`r3+eX`0Hml1!K6V{=zNRi8iii!&=J zdmz{<8Q><~kGw{_+Is?X0XpYpQMrG#m<4_%eGgJqAoRjt{xyeaHj^#D1= z|0GL}iqRFD5}O~RpDN5n>$V#$g)JG~^C7EA_Ox@=-a5d`+g11W*Bj%4uRu%RHIAgG z-Yrdml;ZUXJ05f1eL|q;4n^C1y0{ND<|f^7j#RoWl>C9P@Iqk!6FsxQ^kqW%8bG^p zN{VxZ&cTLgUQR(VUENv@r#E;7awObCvnmB+HLEz0yo>aHs-1jnZ ztHB>uvn$PV#nhqoY-z4qB|OEdn^ax_$5yXS+xa`2C1Zq*niWA1G(zIWKtQXI+oCU}`Ji&&5GQs24e!MdD7>_!Fs?W$CMMN6Neg6drrpDhP3DvMftSEB zgtYGWw_ER}55Dq0ugCeh2bc{7?qkKNrqIlf$OXRwy`qARD;+(Rf6#sC3U_V6N_-BT zz!_5a(9=*&%% zg)biA?x58B-w86m4AXM@mG?10y(${6oW-o<-n1f+9B09xKErJ(Zq>fgZ-n0nzF|Js z(n*Wa7XhZ1Q&uAJq}hxQKrz|wP>IWg0!N7)KDB}WLKuJ-Zl)s-6jMBBKdPofqcx=a zk8qB$A)0m=@+LU{wl9uiMCS8I(#Tc!CCNJYUlyAk%>kZXQ}N&n-xK0n*j!1YKnXzMS(P)2+C z^9a1wdA!z9aYW5^;rclji8c-R#e zyCZnX1(KbixpqbR$!@s(N0g_p4>FGceViSWIGLr#%XAL-##KkLI+$k0HBQ?SBi!R% zzLxn=##DeU!M1+j2O@1=Htf)tmGy~!y!zyDGko;^@0u3ilL*|^vh67ZXLilO19jq@ zA*nkQ&7lr6)Sv$KUXCh6=>buHW_##wAsU=KpV1*97!Vk~!n~-}- zbgK^_?zb;*X*WWDrE_;m{((pW7I7>#)#3D@1h6y24&vU@Q~oS)=k;#^pHXDa^$`pxW*`j(`d|nu zM<%7-%+}?6X^CyGkl%RjNqeKkQ6#!9VTwVCrwIv^Luqu+93oWtAJo}-H-lC!-O-G7Ah>Tg4%#CnPOvCduj~Lq#VROk%_W%vZQ_VoQtDOM z9KXszp5r@ot3!IjSo9%ylBw-8vCYY3TjY}(X{NqL;{1kLUIjZCT#o0SXS=J@%!d0nC+qP{xciOgX+qP}nwry70tgJLE`Q_W) z=ZtZ`d(V5j@A|RVk3B}rHP(t5@yx&zY1*F9O%syDZli|5QK6xYRqR>D!}?_2Vk%v~ z>I($B#7erPRiw~l-NTJ=1KTpiQo?a`2-V4Krp1Z3sDu12l6Lx8E{)=wffw!B-k)%( z2W6@TyI1=zS)*Ui*5LHe;CkTT7F$Hk4hr4iI)euu9T9O21=omB^=i$Aedhgv3!s4a zEwGVW8x1|tWg`RK09}43Lz)trl~IbsO_Dfkm4H)=BxiEgfd4Vt?Z3 zq9353C7p>*6ThciOjt?B^7F7G2=|vG_CX);DZ@5`2={}-A|ieSuu*Qi1wev#*_yaC zWZDd*Ea-N;PP1Kk?s#6ke(reg@ZJybJbhOaw+>1K3#FAt&*02UQ(tRR=82!SY{}TB z*$CHm@79$^>~7ionYtfNtDgFbq6mcW>uC(wK``;*V<<)2GpUItKgDj!ZH<)xV3uo? znq>|ROR@l9wLE<*eky+tPr7T?Ub&5E9`cTZC$8dvVeE)Gij)}{FMVJyTe=aZ?33WKZj_(Ilhpe;uk{y&Ws53XtPXMm1Xq`0qX># zpHX~@;gT;|Pn|=Ug>;3@wWqV8^zgw_YgOXTwYOwpxIj`8Y|dk#A{YgKrurLptHGFO z+J)p`TKPwt)>;O6%y1X|u>mi^gv4x|b^A|Nsg-pf5Dglg0Rjnj32&S#@9(IP7m?uM z;!e@6)|u57h%u&o(#5lS?ysAT>kyJuU!xnY%gHn9n4?J4R8W$;g;X8grCXGRQs=M% zk$$sAq-bbdtM`e04g=$fq16kVC&=pqYW^SuzZLSV$t#2H2>I^Htx_JMO45Rur~rBE z7u+meTjOdJEnG+7UiYYy?9t<+tSE_qtoLOUuJ~y!CkcBIjL5qZB$aJvmIVE(fIO9z zu`rtT%|#e}9DQ*X4Pq<1R@dxUgD?7{#s1SUwSWOMh-MXVQ+O36*T-W7>cgKfpKA!U}k6ay*i3niR;>Xn zxLuYkdk+x)$T)|euQfW_t}|_)C$qa41IM=GesR1cM#ji?`)NBkS|o}Vhp9?JTpVeT zlBRwhx>T~daRz6X`$}ORT>$jUXP!O9d^QA5x4{5D zb?qUMkc#WH{ibqq)OmVPcMyPY*BVx7BMpS0Zc)*_7nc`xxxtOZ6*^gMMr_Ow9|)<| z6e1>FRSSd0JEGiwVt&`E}E908=2Iq|4-lTo- z>b?YPg;Z=1+l`0IY>M(0rzi%dY4Hys{i9_!M-bILnjlhu62_rQj+-E1>CvmYh(RTN zkI)qpu@=^dGvUq*xk<1SXW{)gb~XI=#Kt<r4J;}zm#YYGGq4+oS(^U?h@LF#LaT>jg!y4DdgySwnFW`Ttlg`Hbg`<{!bRb>dmBK~J9~}?eVQR9LD$-V zng%vHOBK=HnPR%(%7SNJFySv9*5w41G-9arMe0-mBxn9cG+wZJgS#P;pYY-Sb2PnJ z2whjNQZQO)^_k#s?1!|PYuDlsF?L{sA>B?(uR~TBnmy})_j3}#5&92?4=wZ`(4BWm zT=z_E5ipw4jeg!~#*6j)LAb|c9!135f6--5Z~%EWU>F)Bq?it^m<0A) zd3Ywbd=v;Q^bC3xf3mCjgvyOT+V(j4`HZP6MadV1r_fxV6gedCjw2Rfkf>2dqqGpGq@ED>8nXqRek$k659 zZc0%OL9hCxMD=2UJQ4kvIlXMG#eS0p@$y~qZ6|FdV6XKL@HK`|HL?K1c?GQP5msb7 z!;1+Z8(QDHoO-q^I%V|8nEe!u-(jGJ3g@>d^>Wk-eW8i|opzmZ&q=Gdj{Al9ys!{~ z$0LLfk|M-C+yS-GyZQ3mT7%X*Qwip_m%}A1Ay+8Zf!=C|&u^y$+%1iJr8Cc|^>YH; z@_l$N*!)bhO{mwYKkD?dveF(v;r1w8UTk4L$#>0tZkz^vpNUZSV}WvT2*M6v*hf7n z@UDHVNDDA=FOFbKQ-H$43Y}uLqRb#ULT8A=MOkLZhYB@Jl|~D{2|7^)Qw+$Z3$ZCA zl`zU_oH}HT*pf8O!%LsYgIA8_d06n{G`n3pn3`Ni`K8XVSzLd@9~*L_(hs3Jp!I@V zn+;G>51xe;Mw)ii2V6*Bi(CnB1|_aVCbwag?&@cSkky4uPHAL>I4=dkI8iDzVP=-$ zn9dKM=JBv+)(Eg|#o$^TZL#KEil|_w$Pwv_j_=4o&b|i1dn+fd45r3N9FA&<`;VpOpq3o0^y(Z{lgy7TYiB zIJs8W&4`6*zAfxzR&+4&XSeeH5B{)V0Gz-vFpWp^b6wk5=&&KXZP5XbAc(hM({qp- zyUv`xu$=+`Br-}(VD8w7EdCX7{|HyR;XMnqP zXeT5XP-EAIFksOz$}o^kVLGIevN;pQ4i~)|?#`ZD?@OR^U|S(hR4jNZKn2vW5^?brGg5<+AU=FzU2sDhx+N zA&GJSMFBvqIk9ZmUPh26NcHSV`vV||GtkfJ68EQnXYo%bui6vhU-v=h`KLCH#lENvI!^1npS2pqE8S8 zDTFR8mE~@{e(GjXwK$l3Jgv3ZuO*qEsHCa+j zv|BLhgu8K&UanOtRdR8@Zh!O~c@=)7z9)@FLq*iA?Lv1aAE4-yoF~dGFpBZ$LVn~F z2*yUeXy1OO(ms!RFDSw)ec58&K!l|tRK~06oIxwY1R!dwW({#t&)8S)R7P^yRsT(O z%3;W?X7B#~j`|4?LQ18wQ4@Kx0H0R)0pK4eh@ybT7kC8D*oRMOGLtxco8y9;FYw3D z{1CR7G4mBJrHL@Q&z|ueRr^3A-S!?WCX!0vkUmZ(n(}%8k7%;wMQ&^Z>^N%(A=f;D z%a`yha7-a-$e%kYJez%Bk@jX0guBEKanHKt-7{p@7!u62is!^dC=dtZjfGx6D$ND? zqS;YY@^di8vYc&66N)73w}l`1)nn3|0F5le^AcflK;tDaZHi=aayr<9y)o>b^`=KUg3$R?T9-h@K$jO4icG(a`$^(8Dt9t%H$;(5Oh9+C+fdI>rm z>XyhM(~~*k zj#(O{Zgf#*p`!~OhvnK0?z=3zDf1$hU69Z6 zdxoTM_F9*DdLl#;1$+-#YNj+mC$t>RnXF6MFuzjHR~&bh5RcMh_ScV+SFQ+LdT>#7 zLcDjbTf_^z4AXcQE)xsMk4dzEFi_q@ecveMTHAUvONtwk z`j*zsDl8xc&EY^JV?1d6w*2s2XrO9?Hr2&YGm9b0snI8H2$)+5jb`qfO_~Zj9kBE! z)HeHl?{Yy52@BUvLe=`_12!eaOO?*es|H(p^DNHzWQtogu0>ceO@vN0b(WlXvX)H` zky_hNN#|LHVMlWaBXjjpI|d4{>Zp~Rc1dEow>YwUDKJ6> zvBeIFUL9R=MGHPg{aaM#h|<$p^sLO@fwmAf=@B!#5Ue(cXIrE;k@Sd?S5qOm>WBl@ z%b+3Wg=HQHk*E8^5uMv3W9WSz&tAi8G_lnLy(uxwPyJhvKV~x#!y%zHEX<-&f5Ov8di>+qawfbo&9h1o$&AV-O$$B+SY~+_{+I`Ih(KROW;4Q z|Jm8lfBo;~?m=g3W$t3^V6E@qWNt%e{TFMF;g@fr`A2`-YF z6bpDWpz!)a8F6Xr3meiOC*QIYrTBWc`M&L9%OKR~=U#p_@ElTTlY&T)ZU~i(Q4_XM5PCH}Zpx2Zox~zb%!cTg*w93FQ+Q2E@ZWAqI zPPFZyM0T(Xk9)`P()aU^vt+COQF`Zgeoq}_(7^TBZUAUc9Bh%jU0qbG1D4;n`@tI(j^PBJxE!_ACvzjX?0F@z?^g^*Qt*HoOHiO9GH$Nak zeA!fI>P(|U0K21$mOBR^)=&A)0bCIW*5O?iuTUp5W3i2Y!h$wVGL3Rua%_DYbIjwQ zeE0oK?v9}voUHMw`5&6qjGyGl{#DB*^Q8>`vmQ|WTi?k@-$~y<-_iI#Qn7ze1^!#K z@W0mhS6uMFiJKC({^C{%p5>IuLQh2pXHM#ENlVz)BOoBi+YeZfKoGB-0H^h6Zc!ai zdBFTbCZ`i-$u9_=&-*R5KM;S!h9Ybde~rs=<>1O~APwBGFxWp!@5jPqTw`g$6nNvL&QHPnMF|zVk2sf0t zXGJb)6?I8*%u_q?U5{zVX6@Gl^uQNaCiH>%;yvBo8tmSJ;5^CMCOA;&M~)GyY=OQHa`V@=~t_3c}o#LrF6_B(72ip&>Ci={VF6Y=B14cT1m4NG0L zJHwG$%`<~K%sYx>5|?fk?mlw0i6#~Zi$0HgUT3wpx3;= z8;ufHk}aB26J^E`PtPavs31a)1sv4J)a5L|or@P5s+ut5jow2L+Hw#VR?-Jr6RmYt(SMr1*>U4SWIQb(o}slh2!ieF zC$wlK4n9+YE}5_;Agkmp`tgoy7p5ry#w!uJH^ML=n2M|z2Gn_|na)Y0lzeHwwRmdQ zkb!8~<+Y%qs1cT}S&U3Axd;@u9_2wz)@_DUwrQIU0S!AO>MgQx$_9o$yZE)&K}t8P zg)h@mD^)@^fghh_w~ET*<^!`dam?2o(hV34H>=1ca~drCQI_9|g2?D{opExQ6adQ- zk={l+%M;rPk7Gz@JYayq(rWw8#u?rm?=O#jgvrWq@6ic+^qT{j*K5q52IMXUso-t# zV#ve_Wl9{gd;lclie?6XxEqHnX>)^|jm*IMxek~|s!eWSP7$!89}svXtmAv%RtLpf zERu^O;_koQ0CXqHXv85G3vU4Tf-Wo z+`#Ce`BqGlIQJa{Wg~32<-A!Lcu>zqryuyoi>rB?_O8@vy&ZQ2?;?UgemBK(~J82Zq?^cq`zsd67lQak5OVrA||!#q>ED0EwC^ z??7*5EAtVG-Gg~?iF&!W^ykN8q>a4nz4wtpXqCN7yo z2nBuz<^ndn^zLC`v)9ldPdzzQdc;X1=8T*!s=nj-jO0|GHmwjE-=vP`)`?M*!BMHa z{OHf4qu;;8!^W7{n09^t;U&=OD%$Dk+{bPL*v~$d?7?Woi#Pz zW`|9tG?jyFMUI%#Tp_kv0VAQMl0b4uRwFnW9jsw9W%frgU|1k`=O@>`jq?*|2v~&R zA5%5trS#vjSP;Kfy@L@>W|MFH;*G+7z$laWpz@W%-k*R*8|y4w_gEQIddLsb)!Pn5 zAyJ_DU?gux+kh%ZGU53i@gybpQGSsKLBO$^!bmWWW1#!SV;^ISD@p z!6?xI!(~fhtI*TyyDr5jETv;aI!eS);>e8HP%xju!3+rR^t{ai?++fQCow^|`Vj7_ zN6wqkwZ;Y+heI(!A1%HrlTf}Rb&@JE!wx!fw3aLpbqlmVldzbrPg=f_XiBAv zCT`j{*w)T1Q!5@N0%7m`br&5O82a}^!V1Qb3-6DNiv!BqGA4L#Xh~SYX@^-IF3B=) z%G*B6Wm#p4NC#-*X@`0x8aeS3+d5iy`Z4Q0Vn>S*tQ8*3nr^1{`Zd$H&7d2)8`nNSo8yFwGVgA=$p#Bntf$f(8@&5-W) zXME6l{CjJILwxZ$vu$smtNRnUc7|HBy2QOUf_oK-Oh7-x?S!@$_&HM;3jzHwySboL zKazgyOt_dDw=?}Dc+%rOYFX0V>+5B|!C~3D3%R!yX)NLtgZUIlOpM|{>j|}8-s8K` zow`yWdn%e1Q}Y(T_9oK_%~aM41?Dr_TO=ckMmKF|QC*^Cq`!aiJ%9%nNWFx~q>0ws$c zy23QniL!8XG8joCYlwE`0zs;XjGwWLY8 zqAjwUgiUrMr)9Zf${3?cX+f=S1F+QPYk~k(F3!PFL#neC7KKh%;%ihQ$3#W@TBFO6QAr!LVP2|s^$Clc+ZQsLsz`tnqqBncwW+>!qRVhchq$vn zI`o=#1sy`H37eKfq{V*Wz>1n-??D30BZqT^XSs#J@(Mft>cKSIuYi4b zSZ;`0C!KEnD2z4YOm(f|*u6Ry230bWjHbJPvZQX}=spR+Xf;#Qq%A3fJ|DD@UeBaKBqRI|$NDozKM`xk3TLyH+w#-R0AB@&i2wKHINA;Anqm)0T_O|n+ z|BPcK<+e~vE4wdvS_kQ#R+!hMkNgNis|_~2KA&cR>1BxCspv!I_4t*oI{sWwW&HM> z%=ob_HIjn}sNplO&YdxM6Tm%~WIalBpC}Z5A0(`V>SxnJy-3C|)3vDS32UBSR(zhK zs8Zlpd`1%KBoMMZU04zgeW+LWd_xEsQE`{h*?kb_p<{s8iA$|MA#qpckv9fa^%HOa zU|xgIBs>w$URF!=w9sk9`_YjMS0$n*!@oEqg3ngQq2b8?EM-S1kxvE4n}Yqz+4*^@Dg~tB!S#o zgKls+Lh8D52bX}+Q)3MUXZnhw#b3x}I?0ZVYkEVQyzpYj;aRq#UtGzh7Ox{Q!I+~g z&>KHw&D!AF=8Ju7vUl2EV5XidPoXW?-%-z@@UG^pQ64>==IR_+x8}!p$gWM(3G1|P z%7ErQi0=4uFQi$QXIw0cBjPRuOPilWI^M+%tVepxX$0zl9L_neHX%WxO4c~tVdVDyj`6>rI{2cO#SEI8t zUIu{4d|#1-taL!F>aE8VWX-dd5JGrS4f{~;BpLI$^#awUDYZX8V)jXI5}c|l}0_TC(EB23Ka8 z2^moP=!&SOZfl@BT853}KgiGjc;0c8XQuo~MxX9srGcVM+bb+hRxB}^7bLe;Mg|Ci=Y;J0^JMiykt#n1t;_8;--&)3qwPp_sLpt@V3L%N}5mKz6V=Dqs zUv265akuG+p{FdnV?sNlpdp>Y5vaHN+_) zJy9W^6ha*H^Xn_LiVa-4Nt>)ZWLxoxmvzM_lSptP2hB4Co(@PC7Lr_fmq3&wGvc47 z^-2P0D@`I^w4_pV60;T<^)5l6k)OYCKL0`RsX8Jl!3g{98#>|Ng-!l1b^iYfpZ)K# z4O=7Qe;!VY6|ZE!#&7e~Zmm==SxfN?2#X9kpJF0L&C`Gcropp?mD3XVcu+Yf-HR?X zM?R~Liw&7Edp&-&QvRedQRIz&+S_v7=K2~EY`du2+xreu_dRg$Y&208u*=EAb?=7G z(X%&fbEqcD%~;iU2eiX}h+unHW8H;~o6(&8}iDld-qa-0OwmMno7_bV3ASjUtlx!#f=G^ey;el;G&q(mmDv zgOQT$#?h9|MFY@*ZcNwoeng$#KVT|2|;;t9Z5`Nqv1nbqxi)*EI-C#YegdH;E;n2&-$M&gRNZ`q#;0& zoiw!N#5CbV*IQepbhk5ad!NWQ3!LLXpfk($lK$~^`jKnc5&Zo-|cZv8+u^4Q98 zLvChhkmo_h5faAMH`uN+pW>=^s;fAXzFBrDXCFESYGc3Ui42r`g*eH#QfKQOLY6_e zrAYW?KkMd}KUgoBmkYzquQ)Q)!%;7N@si|Qr#>z+;?tc6gFsYksE++ko;d%Wn z<1FAm3z&!++Za2T8_L<*S{WPtSM=n+G;>1+Ngi3d6o(udm@qXUuWUCMcHd1vu3vIU zQVdh1g8Q1aNfezayFa}g@^d%$IWJsqKM-$M6yqm{qGpBkQX1(=Rb%JVx~1;%#uJ_H z_o=;W!XcVYywBp-b!RWORfim_o}?q<(5gPQ4Zp|f4S?BNN-k;XBr31m(OGRA$p$VgVC!>H4H(bBgz7!uVZtLEoHH z{+6D{^QT4OofWoc?%jT~la`mGUiZB^Y@nZHA1u@+!7`tc&TR!(j};<)rTWdjgN0rP z7-p0a4j+_n%h-VNR0V|A5iRo|EAduESU39LVn z2whyP<+3!!GL4C$?J8v>@=8I2*Xf@Hc4^i?Jf$D9HgNKQ>D<=*jGC*Qj%=>s&L06- zu0dDlUfujDe0obCQ3ReQcrf0386i-SZf@#e=H%+~*H{IQ7ve(V%0uEPvWOB>M>?QI zcFJjxxUHv}AaK1uM|Z_@(C9Zv-S%huPoVuHIm_h3^iTISXtV}&sZ*UN29I>}WjPB$ zw@K5rSi*D^b7qUTfO2hw%yJL?EH!19%>g}b-yUc$ zI^gvANAAS01|;J7Yp*GMHG2KeF>~SnY_CbXE6Pj#A9tFvw&I2gJP#Ul34njlG=Wrl z5zGKTFKNz;ABY(QQBep2jI0Q+oSFiFFBwBz8izNBw|FMRl$d7DlsL+LFY4@3L!76_ zw{+%4e6iK(>GJe@`@Hw#;||A9+zp7S)00m5XNyjnj`$tWq`V{wSKU1gjhu6|}}Mm8^mcDDFuL8K@>(EKu)?rW3x_()BsgIiqKw#I=m6H=1dBm<`G@&6SvA z^B`7$FS+k0LU3oE8xB=^0Q}6F>AOMZ^t~>A-7*t*N^ywZCqj zh4IJR9i(``J8y;imA%phkx1EhLykr>Ar;I%!+zC*kYeKP5Ziz^owl53LfVYC>L2p>X=5__ToLe&!QkK9P+EY&xfC6X87ii-kjcS;zYG^CyQcb-Co@U-v5!$D~%CAr*?aQdnb+C6M}rdm_%cQIPpLO+#ox6--EtIEceHmxW)uhBE%vWtnzc z;NmY3t?HxM_A{Ke#=6F5uOoRUKfd*JZBx|u>5OtF`u6N2sg}yC z;@RuBR6(sVUSO?Y7UB+5JeqH+znnyWS!*} z^XCo`37@i5FXW%ZYl$YDLCLw9x)?`jhn!o`Bq7atcWR)kD)xa|t#Rtxq6b*>Z1+G8 zK>X|$C92_#0LsqLz5_~SzS^({O6-}7qhig|%@&qcETUHi&O0z@%$zvxt$hKNSs*OY zv3}U}58C=aflXNZVOper%s2G{QP(n1SdFtY3L!z@N-=e;q_Ba#aMxSk{sB(0pVq@^zi@yG#NXK`f&a`tDVkf`Ss4r2e&t;a|H||J3kIlY z%VLQl^B88LZ$$d@gA?#)>@v47pf3cmvJ$X^U}_-oLd)>wpn77mYS(T(APVeIK9JqR zDS3yzpcauLc#j$4zDT}c6_j0c9~eg)1Y(L*K1|JQay(@*xdJ}UbNO_?xB1tCHh8}B zl~k782(P1Txj<8Cud(11HWhN6DKsmTYn(M)o^E((mp}oEO(udXjK>oUm8$WB_-75@ z!*f`j&*eRwUm2u9_R!d$YVbYP^RTrd9u8k`BVRyI3Mc7cc<0(*_(L$5ujc@nPm<+HF}4K&y-0H>6F6F?8_~`1TW%> z&U+6IqL$cq0XIQlXR=ZUZ7QQjzrBJcvpy>hj6P=v)(>BdS9CuUBmZ+Q93D<<2_6vS zNdy#+vqh9Z+=G_AMW1KFXM;1z%rq+G3?RLkrzmfE$dO`F0pqmKe8)1itH^rFbWEN-g6Z%7 z?0`kQo($b!wOr*#`ebDOlS6?8p3nap`|>)%{k#5Lrxb}0L1sckqFUThb-0+O_QTh^ zs}&Qy75Hs=fPmw|>QbqqB6st7MxEVEoBBSlz-c#$+0&Og#WITx;aZPC1fL|z6Y&Zd zq+DUQ$(9)rY_1YklI&1lvKHE5JtF-CcRGQQ9GuEzAzsO2=pbRROQ<2mL*^u?UY9@lI={@ zQfim_rEIGp_526Og1Dmy3K=Iw8QzIj6A9#QoZT(S4B2Sz!GQn7lpSz11~dixB?Di+ zUm*yn1ae+G{2oM4zt$8N^MtTR;y9n3|F*t|sP3)=Qb&K&&tMxyo>*My1&0mwcDb@bBl9U|;_|9!cSHkWj3huaQEfFvz~b@1pWaGXL`fa4*KAVwM>*Ev)1e(n)7Uq6U;v8-Na%-`X-zxQ?knQUji0igcm7#^B(-!kF; zNjE$UJQ&+{yU=47{vWzc^@ozyhH3{Zmw%3zX%7$@3*NK`HSA1Oo{XsPBhmSb;HCf0vAp z2))C+Q@qQ0TCi82+#B-Ui$2_^PXh%XX0evyH8`3cZ=YO zA&1i9g!v11wR=1pcHSl(tcHP}6!7%w;o%imQ5XjXTLLZOH_g$^ zWub4^&4+KZd(4UUHpt28sO+i~tSs71%Y(2O8-6o|8ERKdk!9+ffcO}`1vYf=pZkoJ zqR~P&qbd)ep6H`ne}-4VqTOrYx7<|~0P#R-o*U|lAP97q&g+%Im0ZrU9YPQi#78}3 zuH;tLEFM`;GmbFzKFB*JR88DV>hu5i|-GK-_#)ruPuWidbiK;8+Cx zoeJAHpnA+Zo9-kw*&w`bLbl$5J_lk`oS8FtnN~dWEw@oFO20>fo-ESPdDY$IG=^@~ z3(HO4>Ur#bNxrUbIff3VkU^2IL>DcjmJ)|~A)Zs$ZW$t|{8Qg%Pt(6KyrW(@e0+#t zFAjY>3Fr(IYk>yq_~gBc5w7Y=%r)>UL0_4Z8OyIK;rUCPBUgU-l-TE9%^rkn!Qbgo z#c1!kVLjd?%r1R6<_516O44mHK>1Ect>BhL44k%*#l#~JIfdA8 zvK{upu`wmcg_o~yK0zDu=uF%UoGW6Wxm{uJZif}U9$tqNjD~_ohO0g%%yvMJv>rsO z#yM$q9RQ#HL%gue;(&BE0(r3Q8XeJVu%<+|K2T1KA}@%}{F+nlJ^xwB!@VDuQpk;m zwlQx!Zjqt)20oD})S(8TvXp9t1NS9sczW+Nq?P$rB>>-H)!z||7_$I^EfK1o5jOb| zG>oqzcn_VzZD*BtFmV|lE$^Pa%Xs5e~v*Twir4b+(+vIDYj zPlE3$z5n37%BJR`hxxKU8(-CP|MR(z<=?VD(*HGjPT9%a>R**8s_tG&swf{iChoQ= z#EEDjPSA2GXY}dtf@*>oDXf0{5(x?+#T0U{j9uy6oay2_Q+j5VX2TsyLn$i~s*=l1 z7F5m?%`4tNBVJNJ&vIXcEZ#0X>7b@}7j|YrF5kD?PjXymTxWQmj+%XYykPqj z-oypZ=lnZ0p*ReCZD7qz#>ZM=lN?EiwrZ0#7K8o$1$&w`!B^z#x{VHv#1I8vo8C1n zWhPBEZ7(-UOC=e#5SOTs(I9akwv_?fZT2ut6R~dF>%8b!oF2;*W@j=lySWzWg_0MzNcNzPgsLfTUW@~jP*7%?- zh$X`z2J^%9rwM9K=F}b3sMfI}sZ`+F0x|Cv7!@GB<#5MMP22I4;%z+vlb_1)0#ZV& zu^v*X_;9Dg1u4toUd3kT&HVz6^hR-{-if?THFc_FTP3^rJzOqV!FweHra8z5pF(+g z@kK+&BB{cuBB`RP!W-)a){@9mMX@P6#wN|pgUrpq+JN|Cr)s=Lkzi)2stgYmJd3S@ zWQmUSREE^~Mpm$B>_XdikB`zzl0bQ_lTq#=kU$NJt=de)6seYe2`0rCZDXF?6)Lq~ zEo}1&*wOujNpmkzVzBl1h2r!^Gt5DL9oZXDqJ8?Q_Xa_F~W|}HxchDXH z5SMFFJn!=r;4SA-`G2f11aO1eJ}li3gt;07&TWtjWR&J5#uP#QNiaE74~$kN%j~fQ zq>^9TB*B0Hwm1rL`%aYs7gDmlyiL_})`t&G<;LhEGD@%V z!J4BD%;Qt*4e=XP4NjSOox&I@+UP1@ZC+77B+$fP*+AKrVY@xhF5yd7p_3K*b)X4p z6xyMf$+)rw23{%=@9-+_Bv2X0AW>gLw(s)=d0qJhANtg;3lQQoEAQ7*nzUwWBuPov zosBVSGc3GexFk<$ERe;45eZd!C=k7d9dzd#@PE}cHWuuVMhw`RblDg*GwBx4lo;}z zVJ%G+$b{1~E(@9}n!*dQ?~Zobv)wh1y~x|u2C_)^d(u>y3x4qafcoQ2*qc%9JJv7g z!)H%wc<#HJuK zuEP8Hi=68#_mX;Zs5V+ZRMf6JvRFWI&k%XpCNjjtemPotLtQ(m;E%>XkzxCA<>!!&K7uX}4U%AX6&y{WQK?Ho~KY$%({)A?xGbx0f-21@R<=rV7d z-9DSMH2_vx#q*$^NR@pgZhytXh(WLznN+Ucy=1-Pf;Bb3ADV8Q)n!1r#9zEi%-_#; zI&THKgUp&ay+x2Wky;XA)~CXC=!Z^9{-LH zq@g-?w8|DOs3SQAN(Y>~>f`=U zRmJN-S?2S8;xgP|KJrcOfa*7Dp$p1_hE1pmriQM}4k;K!v-WQxo+E$WEhpl|S|u)e z_7aV3O7kBbSokLO?S?shLG2y)gEuqnZKh5zFfy(m=M9eOLa z9hNf+uql3cl-&D+gD^e_4O`>aH3*m-K1Q?~cwk%PVfS8~Y3)%sh`S}izFV}24o))` zec*vqk11+z)$yDM@`gQ*?IybG^eB&60ot_JClL4ORSq5fd~a!Rd)$t2VH7Gx^&;&c zRp9|+hVc@cR!HvRj`=8A5B6^m<>WJ49wZc*Hf|zvR}yZ<(#s%hLW-lDW4Tl0OLJGc zI#bz59#5hC#H$0>^(x-n$w|v(>&X=^xs_XZkD-F2`hdeaUwcM) z2sIzlz<9qS^9D}DI&bL};eZy`=6DONAVL<_GN{hMW>48YCVg3U;$yCXZM$sH_2oKD zl^7!U$JW;Yi%y3zI+$2o*jJf74ta3eN_aIlbO2tCsRl5+zm8W9dD!Br;4h-0I~1!v zv~Y`SPL;-QI>IzQ{kB_l2*Gyo<(vXap^{0x!bJ@gPY092J_39_1}IU~%e$4rU6>>o zx-L-le0iNC7SB49*N0 zxFhw!zCt^M?sdwy`qfI41&E;N!Inw+plX%}pTyz)+`|aZKOj?2n`JlIWMb1M(Y-g* zU9071$+jTurDmHwwJ#jhU_E0EMTd}5(8!Y0qi6FBkE2ZMEsmo~8Adt!5n9>%A%8ps zct<5(>I;`tX+VW)EfA!idGqe)j9p+lxY7`L2V+wWz$tI6;7v4sbv&oPPNp8wRX5-C*VPO?j<#rESr1S>+|{QyYs63!TmM`3kM;Te>ytTMS5#pp11ZDjN$G&Q65Q9(;^_Hs&VsoS%8IqM*{??fIp?JN}fluKE@@c|3r#$ zrt*>?41ph~zaN(sI}qB#%yc#WE1$(*jVWGa7hnk;rHT5v(=;?qEuLe`u~r$cM7sCTC;W6 zO53(=+qP}n=1SYPZQHhOuC&dYwQHZa_nbJjE2?fijMv#?M9k5Dwy%W`eeI@oHXev0 zpX6vJ7KSBDCy+!fm}OW{jy(yrAS>e{rYd4VXo%nGPod{B4cJ3%D8P?=Xf*D*16+=H zs=UHOOrw-apWDP7wWcQ#!E$IMW3%2k=x0%=>}SGd$G9*=3UpXmj*2~-CnqNdtFr=* ziQ8Is=7xY9xQ#;EWpfn@?)D?1l;|b#ao5SDBB(hEh=JQfPs8dn)8ulP(u($J_+26T z$J;Tp{&kYzJ%`DIJO`4 A&OG@-FplbUdqLqum0pvda3ObLjUl^bI$I9{%(pqczhApQ zmq7Ze+;^m_WRPr_;Zc+Il*)|giQL54opXjhNFrV~#aO$d#15e&W$LiT@@NCTGQkGr zpjk&9NZl&6n>ePSmBA=A(@_Ja-!Un!Z)?hASn^O>(4pYUPj{1ow*p4>dJctAc7w=<`7 z>cFq2lkZTf{kyLcnJM$PBIZ&9Mg1y?d2eoqeJnYL23YJ|p^32d1QxM*L6B5NIE?XS zq$ri>%)Eux#TpTZktuuPq%pK>;>QA3bixk%&dz&Nq)xaLqdmh&Q^V%bhOa-8#Sz6t z9F@VCeP5V_qFvJ;flTj3WXVMKUu4AahZArMpRm?1)T~18x3p)YTPz z6*m@sN21KW(|M=p{ciOmq#9360G2t(evAf%)+@a1drd2t#X7~Wm;$Zx?fdpA?Zzu{ z`v?Wm6{ZpZx~Toq3cCuyhUBE!kN$bwNKKK4G!dqvAyB8-=@m^)O~AJx!HsK2dLFTo z`=&^pVOL3LCu_C#u}+!BBD4|((l*1I7B?oHNyceF7yL(}a4mEuNe)7B(}o+?S5Ds-Plw)0!)?b2k-Q=-a6+h+ zt9Cg%*;1^RC$TJRuHPVW4mXtmgQ(hUDrKL8iP1IocWy@J3>eaED_w|9K^%3rXv zW3N|sAf2YdYo+Lny*>%a6(V)KzW|w!R;U3sG(0Apy%yb=7U0qCzXD4H+z@!pW!K4))m#nr2cCrUi8 zmZ6c8wyvom4jn)u=7YzclNGpBvupd#RZqWS82%=4wth=amz%2YV7wk@+t7|shEz^g zPQ;GUXS33UWKK%?;BdHL^MxskbDEAhw1ns}uH&?OJE+NCQ9!+C!EeN7@ujG~265|W zG*#k5p76i+MJ`yXdHB*a2+p90oS_vabd*L4^t5?xoQT<5lIj1g9}~z{@T8KQaY;)* zIFZqVr-1wOQQ;rUo4_BMuo}@odU$dtSlW{k1u@qvyM#L^t|vQb*s+dTRubzDhRTAQ zJ1gN+qjRgb>!PHLqb2X|@^Z+9av?f(w~C*649#WgwF_mdH}=vyACLq}o;%OUbOw13 z`=~J^9N~IlK{fCLu;NQ*5cvaFo_6E!^d&MW3ItgT1le}%lqtxbrAE+?bHZ1fm*+=^ zX>alSVd+Borh^$phd#K0Lai;+gLitWfH4O0Ud`8>%4-hIgVL>IU9Hs@Dn-um059Wn zia554M+{bjkr`yLbX&#WV!$ACN~Z&q_)qu{#4`=e@3x?oB-E?OAVgri2`;>pWBb>$ zReh@+2QXUj>(L+KDUJwEn!VbSk(z?5^x^>55212LyuUu>m*x7GhMHAcnER6_qMTL3py_z~ee%@nt9Sb{$L=3Sf%)374 zjLdlXeEU*+iNbkUe!pqH+32#q)`}bH(7bPDjCoc(z`Z#(+zZ%tHTL|o@EnCtJFBw< zXI^7dZX=c^tvqlU&U^c(7Y%1Wf(H#edhZ@#m9YNN*e@j4X;BLmPTG&;NM=yd;{)Px zRViy^rGH1SqIBxKobaHYklFC1Iq}9!RIIs&bYlv;iR&ITZk_(4u>ZW`;+qQrW1yyR zYCWQ>-wOM^Cu%Y2?J@2xG<^j3iI9rpOi1+e_u>n*t}pD~m>8J?raYl@+#A=I!|o{C zagX?7pyxZ@4MT!h)C*h0^C9L zRiTvaNaR)jq*aN1onRZS=`_mK^=KrfRH_uK<|ly>X0-lCwBp08R@4qVUQ=8_keGpf zM5oA-*duQ2ZLb!!KNY2A+>3LiC&$z*H}cyfoKQE9nY~T@yNFAN4UV`raIA(otx2$~ zrv!j<7=Ll|ZZIr__%r-Hkv555N@`aNULugmX7tqh3Lw&7znRKEhT(?;cMqj?2D#OJ z@+Fw~HA0(6n&8T-U;hEOyN_eL3#D;7=E-GC|Wp zQG9`JL#&zP)sRmw^$6<7dD5*fq%PoplHij_)p^fVc(i;FaPMjmz%tN0sV+V zD}J8;xc~m22#Wvj#f^-)q2>Qkae#Xv9sQsNr$`vBk_Vvq`|&ZSp{)>r^WyD5fC|9* z0hIU_$F7LbQzxk!8e(%xt28u`uT>0}C?szA&gVenEtj^Nm$NlAEw42#yDXOSy>})r z;%YN6%zR#_eD1fOx1W7Sp1ZH77;(AYfc_ww|MU}FXQnk2SDGtSQViD8Tk!LCenq=t>>*riOj1+qP=&}C^!fHIu8KLqxxe=mwqrR0bHU^p9r(`W7X`hBdQ(E zWQh}C7<610m=LWL5om8!S=5|CWmcoU#+QmSb}&64&M(zF_-pu}75^g0Yc2uK<+E#g zwz+6gWV%?ckb-nzrOHxkdO~_QQ9;R|{Cq^Y6Q03GiwB68#CpMidU_NT6cgCdt5-99C|No1F-HF;vp-x1 z2xroz1zQ|E?1t3Slgp|)QKlVNLS>?T=jvBEysg~+lm)|>7-Z$Jr#H)S=#q?4+}CzO zFRgtyxR&zdlMA}@XL$-Fe?LHR`G!Jxw$%lll%#es(Gng?9><>`waHSdrismL z#gTCWzyYdBwea9y$A;+o0H7XC#xBpH90>-v?(IEc04VCc>;=b`f1>dWy8Q8)xaTu#6X)vLHHNJe#Q35XCkP1dnXY9 zmZ-uTOzTb2QrlTvft?ZT`8r!u$^+yj`PzkAp!%os6$!a*LG&R*^6V6aQ1+A$zncGK zsZV=p&P5X8B1}kaH72LoCoxVVZFuq^cu|h2G8r0_LsjreBVQohTlWw8?=!22W<*|g z>O)l6{dH=f1f^{(Gh(So*uzfWLN^(!ZGhojBa*q!@;bzA+aSsmMaytet#EXmcwBw0 z9-+Ytgv_|mc{TF#mtzlIIyFbV#b+}b(BAvqtlMwQ9_1b6NO_~Dd)EKun(EP+6HTdw-2t8eab9X}NRO@xpA5Z5gpc8}WJJ{-tjHKuI;Y}9y$rkHOjCRg z$+kXF$nMX;GqT}3TB^0@*J^VJNE2n5RqEYtQu>*@btv%8rGJJut6;8<-U26s&d?tD z!S_dZ7iy}IK4rVAe9JtoEPC1p&(@Xy3SS81ciLo9ialwb`N?Z~g(2Q5tpl)lfVH`$ zEb%Ly%Dd@~HqCs;D;pM2SsHw@J#C)-C|v^th(RZ92~DN^E7>LJwIod^D8wQ#Y&P+s z5tkDY=5`!5*x3YsA|J+ZOEAxNJ1~YMcnlm7$^j+l${l+fs~pcnl}h(>*(T+ZD)w?Z zONW40Dp&Xj09)wDJ=KA9{Ed)FTH!+f9r2qu7jo~)4U@hXPY)5Ig_NQb`VLz@#)(9T zdRft+)${yk6+lUx!NW=UoW3J~Z-``SvXpLZI+jJka*;d!5nusfs438$_6yFAjTZYz z;V@qI5bR*q3;T44SONTkqJ8!bEuAuh&!7(id5&87xq6jO{f7{f?)|M|-rnIA07f=x zbTfR2?Z$!oU7YvGWhDV8gV4ZsJ}Xsmm4`DzdF1vY8i2a+39uQ?)i2 z*mHI%^VrF^44CCa2<0yXa-VVQVz%Tm(L1{>22DHm@{vq1Jh!k0`?zh86Hyqn-=_Xn z8CPEYCt};xk2NnDaNnG=Y?I7W>F|RU)rMbvSvPnlq@2>1Lg+zTT`sZ!e1!cDEQx~*KjqzkBwokbML~wFs~uzp52_A zG$q&52BG(PZI;-DQuk8fpd+q@J};D=B$fBM^_!Di;WTgYcjmRZuO7L@4$bg&{Q|OR zF|Y_1cJs*+a^w!Ei`=qoOu$tuI+(SwBJ&iA;{iD9rBw|yos;9luW;vrnM`;829gvn zfs*qTVVOWYStbL^=EG--Vvr{FYyZB^^_h>t$zqPoHd%QeelHyup-0OU=4^=3Q3jKN#%1%|8okP9wQ9pQWYIkrL7&Z@0OEiz1LFkShQS zhqpDK@gluxI^6^{(JH*FCc4^`Fwk+W-8J(7e9G7eG|rH!p>$+a)PY;*qK#vm4!2S$ zccrP?cJq4tXkg7jRj*VQp3dwJ+eucbF)O!GcN{)0FIQJIP9NeqAVy5DhSA`^^Lm9+ zU|zbp6==FJlqV8CC%dUurII#ZSZdnugLX#TaZ)L2UsswafU<2`6P%Lh_k?Y{BZ)4f zL<{VRj}hkm)%_5z7%%FBGl2$@kN8rRyc6mhVT!|d8o+fkXXOK;P4Eq4y2j2$V^3D} zf#nxhO-HS7Of0qa2{!&NC%+XUUSWbg$aKZ?0aI39z3LsqG1G;H2~D53Ji0x#<0dyAueoRaz92A4lf>ru=rN9?-g8|X| zO!`Ueh_upPt*5^NKAMr@Y{2@Bxd@o_Y0OgkYo~N{fZ*9{QR=N=ORZSUP6U=1(fNXE zRC|U9$FkJMU{&U}Z##!WlIR_WZPU*BKWHkBl}+oeR9t9c?(ZcbL2_F*VvO}Y=(Rp> zb&8-b_`5H~XwcSbWj%8Le?hX9f4L)W--;_$Z#> z6c()B8iAgxfop67+%KfJ2)DSGxe(P(WUaWBr^C?BtFTTLKB9(F--So!m+7R6DyS8fNXn%$*^{*?C{Ru35GfZ`5IW&qNxKSGOK=P1qgz^OB!Nh#b} zDfm$-8oJV(5Y=D0@|#K{tf36}@9b%4TsWIEKQSVQb~sHt1c-KkwG(6WLe^?u_h~U` zUBah5jpx3X2MFryd28(Ups*7d>U;4%!j6;HaYn#|_hV~+3!G}5wrYd$%A1we-;JPi zZ`56o9h}XR4%Dvhce{pbJR4)!?cuM^t!Id*7o7p@Zr0kBXO^ee?E!6J;nt2)v}aD{ zDwqOTeP~oB@Q&?~bwrZzo^kOIHY)^_AH9CV2v)xW&YkZgek5Voc*Qp0IXZZniOF>S zn2a?DfH9JHV6-n9=%Akv`^XHKPX;9nInwt(MmXX%4A@hUzkW?%{j1_Z;=fbC$vN1% zxeL1)8#+7vEJ*)jT=LJcg_5K!rYh1GP4;bMh^YST(SrlzY_2)pe zS5`_2l-V6!j6Kv6%DP7963~%*huA(jC018f#mOtzq472NgR={R-U1#Bfu>X=cc$n9 zVR20?fqCe1xr}6A))oD=wN6+~(u@z`?Zsh9`h>Sn<_`1O#P9J;thwR+YjE2SsFJ?- zau3`SYneE&nR&(rN}?l{R7+JDGV#t{lA?)~`#MP*Nkh^jk3z|+KmloHAgjTObpN)0 z4CwSghh>S1;ep!|Dh~((as(6nx||$)5zSih6*3M8V@KA>e@Le!=_LSet-kcH*?QhbAE(qEDW?7Sm2QGKVt(~&C`gNE@z)eQ67 z-B!h_o3JypRB1Fszjf@3WzD{Q`}zP7&|GTn)*bPlwz1eW%b7@pij@p8T{_rayFY)^sAEQA1eC@rGOEP#7F@krSlcjnM9qeQ zGQ^qvn1fKah7PKZ;DXMB`>9Q|E%UO-T$KlLo!*)Ndjv{)#oY=3$q3b$u}0B}^a9}7 ziK0+8&@pnnwKFkPmbkk#d*-V>yNpEs|2?u7s}H^h{PtWlzz2J_NkAI)%l zF$el(dEPrdh_rGWanj|um4c6~36i3+ZP8NKfNs(IGXfsQL|_6sbuo6~qa25Uh?F<# zX{w0`31e`XPsk|Xqa7^ZJ6h)}(ydx+FeH6|kW;7-bV1rp0N4hn*Y-D@Ht${*2F*}E zeNpfv4u?*aWh!=rj(aeb{9WicEHE{yS)flC{-l2PdT}wv)I<%i7VP@Y$jAv{I22bO zfsLFID9!<5xSSc(cPQ~;Xg(I!p*Si`sHQ0F7+4k5_^eEQK(>rW`>4S_fXqVUNpaRm z-aGvtN;c88X~Zu$d}u{!@XaBxD}5;4g*VK*k7S!S*j6cJsXg?qNC4whfr_vAsD?5-aEONP=WgWCJEoPV1YpA?IE-~M2$kpJbD z;D4gT{J(c86pZz)Y<^Ic|NAAQqOOSabIDxw&K}U=!G!h^t;5CfC))!;4dm~N1pWq& zl593P?r(f>irM0(GLem>f4_@QEhkDMji>M)g$!0Reoeh2mwhF54^1+gzP$P!G9)Hk z+`8pG&AqcW)8%^g=>gfR<26?6>v3$bIJ+orQ;fWz@@U3Uv1UO~v?@O(MyA1}U$_u_ z#f8LeE-Y&&ypY6n?F^29Cb;HqtPo}q&Vz%E#XW=A90(8`POOfjT(*>)TQ>GA~~CUTFDPk_~EXbbSvLs3+y+)Blnm+L3!~YPIc4 zc;^R5u{2`%Xo`+gfdF0v^?M0pJ`vr9!;ceF0G$QNkh>p>IiQ_|&=jkhm=sBST0;wE zE|L4?>=y-^1hxOUd_3T0eWLwzEq%TJV`74Y6~e46T_aC9?(4DS>ZBak^d-+$Ju)|c z`#Rxc3|697ts0o@-YH)8Aj+K|-$CN+Z(&kYGBnVYKbC93;tKMhPrs4o@d`A|O4S7= zD}zb&G1taQlqZ_^Eer$}cPQ$LnQTP0;hI9}5Xlm%V$ z8v&sK%H!}mGimeE^s$lS#>${B;9Lv@;p8t2RvVT0WmT3k+cyvk>G`YFGaE{@t08lf z($&U{T2D%fm!>pf#8|Ed8UPxyG#X{D_R{lWH0!P1md<-!<$@H+%>D@B2sw~K^8e^j z(YkqUuUb8b9_Z-$*~Fj?F=_0{V@-|0LhOZB9TN4sP9h0|<1C}#vK=*d(FCnGW1+JY zDUF*7xyFy^2`fmC$d_cs-UQSD(DYW@<;Z37m@>8>%%?*I6dHelpi3x(GYd5pX`m33 z1Rj(krpwSN#jOZlO>1?6B5}s;tAG*O*vK*n;Tptb?K9-4Ah={3&nOlK26(@v?y|SUO&)j*yorZ=W?*ks^BTyE1`vj# z&B%awge>B|(|de!cN!M~7&D0U|Ep{pP3t#LCV#l^m2RPm+&~+2?__oY!!Ou^S6Ft7 z5+s{_!AaKVCZ^+bcHd|LYS))V)up~rcpS=^rHXkvGZLPqT^C8UO2DknFng{SY&~K0 zLqzXygv-hU97x+E@HH$qU%RW$Vqm67vmPTij#tcXqtPTcl&~$-*$YRzIgYFxH4msa zHg*%hRz$oDqGB~QTknyePQQ(g7=>8KH*90pcCu2bWKts=U8|Jn(rI2K1?fTLJ!|8+ z+opsMZeC(O9?v%!^V&z3Y3)*W;Ov#JF^JYzKT?5>n>C zxl=rmmp-!PhK2Z(qkDkUE#>YB@M<@HpyLn`t&h>(z;+c;3sh*{=R;IB|aCIb_U^qH2VQ6kj>7gDROFzXP zDJS8WBr#F)TTe)!D)8jEL+{xxb2~L~amPQ|ydz>)_vRHS#z&X!=<44STdf$it&blr z>?YK|N^JjI@kZIv*x^5pH?=m9j{%RuQNA% zH{Xv~{-}73*;$eJ65E`uC)P4-IxrDtkDW#*OF5EOXNXsiB$$vGVq8UFl5_G{Ku+wU z&mDjx(FKo3c!iHR+ei(E4AX`e7UYKJd8{p)v_<4K3NkX4MC6gJ)1iovC&Gop8sZdw7tPr;;W!Efa$S8-^MHONe43f6n z;$p_L%8-Q!o|;qcEJz;vAal~~V+pPo-+MrB9*81ZlMuqh;Uo{zyVU23 zGW{{a-5>`6z%KNMu?rB$HOf>2t-ee}$qMhNh0TivMs}VT_~g(qpk@N@K3dNs!`*787sOnV1}96?AGE$R_)1=HW$lZdSZUVu5RbP!oq= zuTYblrVn^KiZBR78u_`3B!EQ?rJ0O*GHu>2*%g4FjIdFC=$_4X8qiFm8@g0(43}O5N*b@@!D{e+pN48ztr2oLjoK1EHI5xL1&fS zw~%NNPseDrZV)B~YbxUGxRMBVB>+v2OxDpe^`&r)MVTNH{~{?lI1CNxv9@KQAT~h? zk~4Ba2VWFzKjvmg9FhWDmIGKPN+H?E&U-lU6x5X~GNtoG$Ha^)A(^b*Mn+L#(OjR} z-$C87WnvRQy`WH5VuKBUc{>r5svUfmf?XI$f51RNfj23V5so}!z#B&aJAdk6 z3(45lgwZfAIaEjfXOLNiTnbmq-st+F*JvsjpLa;^2 zlzBnial@_ym8N@A1$u&mjj6Cg#%%oAQD*HOQ$a~tT>aNzX!ZOqHf7go{zSD$lR977 z_z~0D=ugC^Pi$4st;R2>^vOeqsj;@NYsH?ZYu5smuzt=qK=Z0kp&aV15_hPwNU}_( zD8)>B^rEd~{~D8tNh1Id(po}mVdANdV7%iG$k$~Y)T3dfq5ARFYo*T7-qhgPzd0=W zo&ER?8?cqXA^8!3)Sy-RLp!Vtg59R7*sUsQ6q|PMskRCujyn1k7ZC zK8k6VvSNN~vl|Ym34Fws!1-E+Sp-(LXa^EbSHMAIVM z=cyrr07y3EUMinws7!SRI!$yArFti~%A1?DUj}jakZ#n!b{>L&;cO9$nu;K2(SApd zB~9D?_%f_%-BD8*#8ui>+JmnU3>Iq`<0wvO_h>ly%4Db6S54(PU46xTqfZwkDuo!d zNR*JjTch#e*v1~pw(D#UYAUUtzd+a?V3+T#vW zg?c2pcl{@txc$p$Li=B8lh~M;oBo&9NBREiKmX62(SJMYpS>4#cP}kv}ex+{SPjhc@|J`()F~{{i_Y3)jMS}uS zx!HX%Ib3LH+oUjHGTww3HBb<3IT9k(GABMPT|%FYg(E}KN(6GzH=H`yM8*b&FX!0a zwq)frIjCo-x^t?s37wz0%2h8&6vW47T~u1QfYl5{P-owa!)ip@enBT{_Hh@MsyqZrHC#!u^AL!=6Q8TNEZ2uJBGWPN zc~EaK7<8YeAnB z==fdkucxboOV8iHRKB4bn5O08N`6aD?=&&B`9Axj7Q~3?x|q|JZn1I>S2bJLj4QaA zilo)C;ihIodse1iWl|mCafWwSIOhFSngs*3-Bj_7*a^HO=B;cXic&3OQY+UczD}Qf zn;a^)kZ}wah{P3ED<(U*ZA_70k02-p^2pV~o>~jo(yZugNFhOGyWUQ_oJlA~saZB%1o7dK1dBoBY;5xq`85osnSfU@EX( zY?=p=S+**JEpx1)i@D4o4td5~y`6pzmKhu@uBJ*FIzC4enUm|_CAz=e{Su0$<-JD&=4 zK;PMLUddE7>lxe#ck^!121S#9<93L0-w zhN0)e;-X!qpW|&F-E^OOC&^Q5A^6^;A|J(8?8A5oWgw*6hDZCxinH~}rMYHLowYX@ zE@ElEY|{cz^uz6;j(0{3gB?6ga+!OWpM-WUZGmZnw&Zp0nYjn(Vg^S4NSe7)2T7U} z6(hc&9F;>tr*O_7vcg#sh(P<5*3`(lu7%7?iI_r*m!tM~d;3udbvY(mX;W7T=dzcC zsiWuyzcU~uYLH!(Uv2Z9hu;vpd-1`;ad-r&EXyx^ui;)K>t0jys)e3P2bKy$fFJ}v4)5L5G%8OnUF_V1UR#H_mowDVq%#o19^|SMPGmdZ!j*Gb^xQ<#Rhdxd*3vyQ&0wNoYL%++4H=9y41f%45L4@uqZrf?DW+Q%RD1RM%QN! zLX?cG3Awz$#x9&go1LAttJ%wr97k3A_ ztcQ^Aa4U|GFAkzME?|2+Rh-pcxVr7^X?-U>`Tl{_Zb)fs?Q+u3c^I^j9glQ1t=5)LB}r(muO_p6+D}jL z0^2Fd>lA&=uRnsMI(~%tIr zxWo98aXL41ck;?p<{aHJ{rL3P{rqd2gI9JM;EPR$(ycBYF;+3_?O1He86Su=o5Nx8 z?wmZa!2dk{#M>;C2A$CE1}#}6B|48jy{|sW?_}5^NkA$@ZoqatmO+c9~O~Fp!~yz=IaURf3eP13GHah0>D( z*#!AgJ;advIO!vPH63)$2?CgE&-T=tty@k;Ixf?2)SV1w!68rzD~+S-r~-n>87s37 ze5D{fdK*q{sE5>LOOmqaG?`*Uah0j&f-|aLEEY zMjS{|p8>)6;e+d8uI6aGnC(qjN~0?@$-e2tH_wXK9~_dS2I?}=j>{0<(88Incq`En z;PH{pfK*{!3Bbeyr(0%`^B!|9MCsN3%*3d0+* zZ^rV*#J>dy$qloQR=7Jq^qS~n3F-=c04?vG!Oae;1KeBCkz48}ZnOpY)G)9|m60$2 zH*!zBpSN6Tml4P}zbuFNB@-lv^aT>S+l|);HL4TKJxC!xj@RQnr|Xe+`;E1Hde^!B zlQZBuT7Rb6f6$wm*8W{7YHc`+QQdWVzlb}-+yy4O-(4!@J`Dg>50R$Ol~w=&HDMpY zM?0L-9^Gc}s5NV0le-ll2JRlHx}UKXV`dMdlW#Mk6{Tj^L&VRKNDv`5AxC2^q9W-) zpxHlc?c+Ew{ylr(n)UAK@B9;MLrR1=nUV;Qaa}m|ntCi5Kdrpc@Yq=aB5~!@710w- zeNRw}_xR9J(S)$b*Z1#suhg2h0-}4HdT`w-*2LuxvbAw9<{c%CdqgA3XXEZRruzjW z$QOnkmGoEkdgYhw*XemvpD?SW`X^NSm?RUQHOXvuBm@Ly9s!pWl)H3NBVP#c_qW}> zc^b&z#0Nc2b$<0DT6~ z*r3{fl_+cu=uJ%~z$edn!lRctCw#Hz`VYMusaGH1&?6ICl&nxDXDMCd*Hw=y69bnz z$0~mk{zHK(LyRfl*F34{x2))QN`WrNn`!h{ZfplpN;YWt-w_gNw910myeBdhg$b{e zy!kcv;o4iz+PtviTPs-z=F_6GJX$++mv7ft-w_VB898k`W>j=*QPaPrJ(+ugs5r|Q zX8ZmT7-!CEY9*m3c$>J`3|u?X}wn8S^!v?Y_g=-6S3~7rCexs%){ky>$ z5sejY$zhWlg|Ai|)038{2Pnw;fPcYk;V}yYkY`^bBT95JaqUk9?X_P6&!0}PFG`5F zh}sqApAS_>I5gCRFl_YU?-v2^#li+ofFtwrj!m zmj0b_*sFD4xcaka>-;YbSVaFP{!ag1uN5h4+y2mYxD!%W)v*u&h^+CAz%>mrVyUTT z1q8&5Ai@uc#HtB|xulm99%pZ(n{e*uco##u6U*Vs;>HOTe3gc>)c;D711u$TIsU!M za=hYpG=0wT{eHvjrKV!6?DTq+EKTyFnMaY0lImAcMMr0D15b)>g&^FrI1MZ|5*^l` zdMlsSIRK9lPX943^c>E)m%Al`VQtO{8$F~SrE_QS*al%xdM}2yIi?@9)4=A@SF8N= z-2@KK6HXIr7^G99utnM1YYf5qfdMWgVvo1OzUZtEI?y23U7*D+M;GHH@nCvQwO1Uv z{E|gt<>auYUWA#+wNXeLE$wh*8$6-AhNa+d?_yyekKo?encIAW6wUAuLl6L59YC3;x zAGT+4+KNKjG!FAoA3`pLD&KoU2V!@0AL@({;cZ}fji~zwraJzzrnRKKbc1O9@riTWAamCuJlKJ~w;}Q{RndI&7`=04{x@O9W?$kI zHJ@IWFKkcX)KFN3YjU4MFwfgAdE%1=H}5jG_PmoAZCI9p(M_FLw$+>=lidgFFf@qW z1vgpZ=!@q50etQ}7}H+pc4HCseBD*Dc#pS3r?H60Rd&*)n?AFH>8}9m$wW`}Yn&a&*7xi@} z3Un`8Xv?kM&Va4l$sYS&%+@el^6hw?VpNb56QEX+ZS^;}q&fjISo#p>@SbakG2nuN zfxtU#?imPm$MRo@Nxby;+s6*3mLDP7o8G3_J-CMnV+{5}C^JWP5kzg5v*3TJ+LE=F zN^W|C=u%LIA#i^-;6cG4=vV3Jf4)#W(EqvK|3A7l|DSe>qLaRp^FN)|suVS45&6-$ z7bdP;)NPRY;gFGwfQ_qAyvgvZiin6XGg_O(4;JcajK_51FPr5LV&daN=gi!mMA3WF zScB|T(_W7!U#A;=zrJ3eb3;|3j$(3n&h!30WsbJwuR=TZoDWrd>kYM|t|yml znoYTbzIL&F%(TWWBcfmrvTK6%R+RyLN@Bn}R1C}&WBYCx4( zaYqi&^46?ivebOL1E&d(Vo{&KyShIX}& zIj4$~@!D0`A1}Uyh9!1R0fZqEQcmp&Nez(NnwXMbgBd1LcLEkxIBg{N1r`jNPzkCo7Y`jRd99}k2qUs8Ytljs?rhOU}`QK>U&~#%B zU$KMUQB;dS->4k1#`>6eQa7*2OuW}bJWGEramad_P#SQBSYLR_r#MEq~f=;lbNR6?tQ6N~_7HwY|Nfm3=?~nXp7-soZ$p=;}nn zCd={zucsoFgf*E;^T-7*Qr}H>P1PaTz@lyG4o7th?*qzoqslZ8UoeJR1P-#VK;`mTbd9zb_4+e0<0IVDbLGapoYjMjxSg9OauR=R%+vuibJ_G*25HIo< z2;qrvEi4a|D4ak}tO0x=_ZAs387ppoT5^}W9e*Yv^><@6+H}1Xa}8Ujex)G8X%(2x z&($++n0dDhRY9evi_}rJ!NR%)w-5E(RkcL>7;IdMw^wwzodFIU4$bl!#qr(fA3RiVPZp`UK6 zti`(AglzmThYs?b4PBttgr*UibW=y{rDZFzm1$Y;cMk~vCdsmjTU)iWK0%!?j&0yA z#}%CxH$U`#nfDfc{5ecbp)mi|yl*O$e%woXyOMZFtq@bQ`;;6ICrS>qM6XMj54_A^ z+IjJ{T9l_6itoe*RJSgSAlay1rhgS36oR8lA_Xl)F@bx78^ktSwQ)jwTvgzZIPk*1EKHA6+M-)S^#Yyk^&Vg_ zW0_aC-u)iw5t4oZofn4(2hm!m|>z-DfNK5*!_qn9d>(9w`IAx2Z#YP$le&)QOGdh1d_^g2ghbUVHjTQoguOT`8-f!v(8>P8f>aBrIFG&SC_7cpXRZ=l z-YvfO=VoKh4A-!n$r;$(KX`*PgGzcY2n2wqQce0AcE0r)*!Rl zq??%=c*-yGFsjrkqw2Gma` z7gZqJVaSFROx#VG6!S8o-2zJOiS^K%v^WNMm_vJZ^?tAsRdTp-hRu?xvV$5abXCd5 z^NOoxDMu2HZICLq*dUA*8e7cVjG*a*%)QJ!lNT5gXHcDPFA< z37HCSi05B|X=-<3hpvsN*ZHSD05=wcc>Fg8sz?ePm?C_h!P31b!$|K!-NsFD2ux}g zwF>6qRk(fs!RTGnZ=bRLVaYxGOO_?We<8oNGIwb{V@{eQwJr((}o0aUh{Q9Ug}xR~ zxw}ZTMSXTCjBM6E#FUNRY8QfR0-k9pTjg2#)^KfJ^OX=7@(rkb@Grr%EG6n-L%?rS zZB2B4arGEWEh+}7#cJjL+*}7DuzYyw?1SQ$i|oDjEe%(H{fkGwCqqWTA`9oS_I~E5 z5$p}=;96wmq*Z^q0q%+#g!BMX+UzewPcdeUppARlHdm z!4{|}ShO%8R`hk7Uu%!XJiK{3{+hsVG{Jsd+TPfPm)@UU-dlC_W%3vdCd5neCJCE| z@mYuSP9iC0lEv1{%*^5kT7-HU^qE72m}v3CrmZO8yU>l7O_s+YgK{{371MwQrkVgH z)!`eYm1P^l>2?CT_=Rd?^c!lS`e4S}FIJCkpf`-eGAbQ7ui#Y5j90}*ZBFPKYu2J@ z0DfPKc7;}h%-eB``7pK7yJ)G-7`gEZ+omQuRwmXdQ+s^4eaj=blENqvga<%PSvCdZ zx+1m`oEuc@;$B`}Ffb7c9xEg>_n;}23 zNdYyJpC^-SYz|#B>}OJ}U=w@ssw0#`iw5qxAXrgDz~mu%1_jatV-HDXp({s3V7q|M z5tbWwvH=e}a104YRum^X=nKzQwC5Y|+nA6=k0&ch9+xGQ(nu8gGZ9mkgiYq{=AVew zFA)IGiUMoOl(fm%SW+QxOcZlTo2NYQ`Q%;v66|H!9D)m;r636*S4P1`R#Y^fYA^;H z(W;4LFgxEitn{@r%GJcc!ANzx?24vuOs1e}&`MWkmX^o}7Pu=MB1@T1ue>S5f3lRv zX5Ty3`+s++&PM*xH$|ym5%OJa%Ps#9LUi=dxa*SvYD`V`SEWXZbvoe#B z+79m32&7vr!?}N6X?@;_u+3q6LbgH5^sqEpV}JxNp$s=*rtB1b;X?tiWF|f9%r5lH zt5b$0AopZd`rG`@rqC^@M515P!!OVy_K+Bp*eG-s9qT$&UeB2)Bkzz{JmLz9UkX#+ z%~RoWA62kJax}9Cl%1(c6t1c)m)X#)k(VJW8eWG}@W3M8oKv6@s(=t(;#Y&c!!|6v z6Mlh{&_t`O&CHYKJz0~Z)<^f53=1~AOxK9al@slJG)3TL*3_25`nrrDm#xQDq4 zWFM|1oaYRh8HBLf6I}EPja( zmVriiw$I!$uC^W=4&61N9^addL~$;GiDZj~Yk(PMA_-L=JO%lyiV7iqj$6T2B2NsS z;~b>)*%++SsZal*4j9q)^XytXg2f&P!vJ=48W|cA#VU~;NS6rcHi+bXrXm0{&?JOQ z3(eCGOOCJJ`&qA}FKERGFLwkSaE4pyDY9PQ_G^-6&EY{s6T_$|( z2&kM<0R_&IQBK+^z-8(;&2w|MOe$tfAE(Y>fxp;49_H=hTXus;WuT&H49(wk=Xt43NbVjG>oUjh&w*{wTH<_xsPKlPE#$F{^-)I>g(~ZTA^)0 z!poqFKL5x*ETFo~2Y$ng`Kf1eKz;uNPl@6I5gh|1XEs&lc{G{{5}B=e%p?uI#!p?hM6ZiYY`*gJin(aQ(Dk8##vGbYk+_0mD2{QPg35@`UA*BoR`^5u6>$C>aU@;>zeOv?h;f zrDU~ZGxwawp|x($JVFs$;x%qo_*y)#8*=GMpx?sRRx@c&L)&K#etfDz?x-)riC01` zaXl!^ERjmk7qF67ZjeA(;@NWb)@z?((bW% z@_Ev-zt}$%HgC;e%rIRe zx*<6}Y7VR_Ic!@7>)crNxZrkwrdSFAl-T1pZW6idAlMKep}atTzeKQDQk|>OS(;3p z?pwAe=LY**;jYp6;+y6qX*5M;N+{qM>zs#lQI7=iedh zHnb?X0PKpl#SOJZu-8Lay=Oq}xaQdV4v~6JndeEr4R{k;mV|@S>;K08`4va!Pd6(+ z{_ReCLM0P_gx{Z>H1=M-3Gn3nVblz7G(qk@t*Ub_s`27 z$5lMx47MJA9o_U+l+z+9}VWDuAuJzLMOzH12qC zAF`10*WGcPiZ12-KbA+)0#>?>2nEWH5VgD~Dhw4(p3tG7kvV!Paj!@^$x)o+43y+I z4ifPy8U3)W0%vM^870h@sf>snzB(I0L{td53KiS-9JmH02L%tK#1qORh~mt3)}TV& zC3##VeKP>}1w4_z&}_rra>3YAe~uFr_*~E-dSvf}@>P&0FRu~N$+bWZKZ7qeg@-vc zW8tYjj;bB3G8a!`E!a|_8xIKyslX#0wNS|dA@fx`y4gWNUtDgVZnZX3*h?6pD=LQ> z{P`4hsUW>z$$o9dD+y_>cGOjEc585|9QO=mNqYDr6;xyyx3Di1!g>TR0*4m_?1H5( z6eL7BDdi-=t=Il!O&+D4#qYiP66bd6T-?FJDt0gljK2hKBV}?zTf3RcK6#a#`+Z*5 z#K12jlU^E%9i%=x`P+15$k-AabH|3Esz6S#k&@fcpT@0R)F}elO49C5vXljT~Y)n?zO>ugqfTTj);#9Uqyj{bgJa z-FiDOG#;&M!Woo)4yj23amHcAWw;`u2kA9aj6M=S8Z-*}c;{JbigSH-97UNs7E{CI z0c-?@)iOXI3|zPo+r?8^R|-t!AP@TmiCxMk$=0DCTrHUc#VFJUp>*s~5i~C!M*JdL&?5#cM7s z+~7vk(OTboKgCJ0%v?BQf-oTniu%lT1*ith{E9O z&S_g(qG3^b^xe9YI&g{)@<7>@m*DhAA?=QkM&!E?Utghk2Vi!8x>LjJ`v0tdSPVLfrnt;K~fg2(#bpOkIO$caBwr)lcm|U6p!m0 z36P)GuI~&~ro)KSd40UK=~X(7G;#>(qi_lU z&Obx$MQ<0OvMZuI-+cAHbwF=yt(_ZO)A~F`c@97l87}qQXFXWnQ7Z85EPbJ|d5R`V z`*_)%$=#&42_w|_7T$osm*SS^N9VJ|J<;r~oA>-g?Z$(#z35#)hD(4{K4Pll?JfR;y6pqSktZ&>0tx!wht{%2LDPWhm- z>rsou>u~^;@*pn0uURZ?KcVCzmda=5w9_AT5`%=E?MkoY;QU05K+k&jX_-o~(;i1{ zV_>VnZo9v)9zpk8Ag3p*eLLHW!uDYOR()Ss{nl+?>DvXKmDYe#T(c=~i^M`6~Va+yJw%gWi!d6b9i-H5`2H(OCrf>z7plDG@h&eF2S^oIm^>tp}1KR;p1aAa?i7vW% z;pt!A1(!c4|Lku5S27+lwl*LqTZexLrS(7u(s?cu;3a>t~rSgbd}B0BBV4Yd(bxqDf(wYsaN; zXLoO}!`Ya6115i;%gJD7vt!ad&HcNv^*to+;FkU4YG5aW@gzMzF1xdJj23DC`zVHP z$zfyxCdT_HMoG?~O06D5kpGn+XwQKXfrxZ~%z-rc8@aPdiq^KHQw+|8{yCtRcQI5OiFAt#JOSZ41O80`9>GTCZC@-i z@m65>3T}mI@{Y$Ax^g0OIUFP9L3qdkAg#WnsAStrkNYs%9gN22X0< zt1BU`_Q_iprmr-F-F7%3skURBryixva0P}m@6&EImu+>CEZ3Z)PiG#O0yKG5?-$eOqux< zBV0RG+T*h>5O}=+<7ljiCm~_5Ca!jP7-jlBb)A=2e3rntsnPx^*;GOH{<>AhhEOG- zlqGDJD>PjVx8HdN8_Y}egZBExA+)R5%%_FIY;i*UPwWg!5l^-5kv*mzF-DO&UV*R95fSs&L_&k*8ZAoBa7Dev!IJQ?B#30nA&O` z`2)p_1s-W&p^gyW3RU+42X$%bSZ$!{M!}4|*wQ_&a36cGOcjc!nsT{@XVjJi@g}1l z+ANni)r#piC<#HOz!8MNWg=3u?9cEId@9NYQ^%Jhax#FzG?zzBs#6c%`dqLCn0}iy z2H+zQSfy~EC&a(|p783%5fOQo7`L-?CE;QipZ-V;)`>U?%;|BYXNM|r#eU`YeNsY+ z<2Q1vLt$l39VLy58sRm`pk}l0c50%jDA2vkA~y-!k0rDOm!-C7RIk?l7&|JWvRuc` zIrUJVNLwv$5e;cr#y1mtl1>%sMx;lv`I->iZ);axOv1s4k@< zuWqz10S(mmS|TdSV6xw=PQj9{KqHf~_!#d7_bs)XoGRbl=8?DcxR5qUt-xlIGt`4F zH~#h9E;9J5q1HjS4HR;~1N@JWKY>%%_cs`Y?D?E^1Z{rSNo!mDQ_S1WMB%a?e`4N* zY~;v!iI>i3Z5)dl{S!&_dLvX$BL_;F#;woFbJ%wpp2(lhn?moIwEI!ORA+KfuaQ)W zA$M=;++KKCdgoGg&kWdp+3QLGER?oW*NJld^T-aL`bXb{0!8xtOlmfH$~g_U%~@(vRueLD`fiusX7wjrZ?Gh zu+~g@huBX9b^B&J+H6^epC|Tr6|NOe+$X>L8?IkRc(lvYmkqmC-zB3X_WP;4OsPE# z${_p+NL(ClYlA6cJ2?=FRi-aydkFJjg}U^kyCmZkdhA0hr>a0+bAfrf_%e*BFQ?D1 zJBVX0?4u9s9l{RUixGhJj@Upppsz`~(6R`$3*imgP>|}$@)Y`h?IU^(ot@S9`{tC0 zlU<)YXUQM$aF7mH5HM)Z4052J5D@zaYmki;HGK#jniS?#*cl+~mO{5uxy>*vvw7|` z|4M#lB)B?xN7%m&G}-AB_(Y!U&(bP@)opeJ3r}8kMFQ7_px*3_y`G z`s(A_cUMHR3x6v#;>rkl0MWgC;2&AS1c*dbr#XI~%q92wi}a@lxF=NlS=V;Eb73|}X`UXoIYk!0X{ zY0S^|xO^DL>b3GrdA^DxT*IX7K4ZirKzI=&uzn&9HwWl!pm9Sxv7idy28ervT1?a1 z!$_sT*!YBf^x58L2h2ZMq*>4vMJ=n|x>KacCV*UDGWfMxBL^3g)*PQddZ(9sc-GdB z5%`RtFV`&a6OQzQf113Dx`rW!#plMvrcd0TPp0ga0(63C%^`hx;}ZS7nDLrGJ7|Bw zP-y0+dAWCop5ePs;=lGt2>j2!*7q$o&Nd(;gTInK|68M5djEp|_qXErkDrm?-&v#o zm-6>-09g4i6B7Cxn656-q3~-_(^rX6>-Mi-7=dMMgrIIXHiazk?Tv12B zbu0GMt8t(nO(F?4lKR9Mo6DB~go1$44;DLY)qXan$1Xhh$d7KZ#+sP#Pz}ApOEctGQaS!!c$xZ6$TMx6Jf7g4&{&S~yDYO|mm0v!+5<15A%b!b)hl*} z3*8r=#Udn^{-Jzdj~UR9?R8{j#cSDOxPcxg!rwa^CK1#3Rag;T*Q;5{7&x&frby$r-GY$TV1DYM)1+2pnj|(TY+(yS{B83;}^w+ag==;@4 z{Dj69V?ri9au;GOdxdlWJZSM`uOzb^Dgowir!XbInMf^KzoUl+)u1_iEvc28$;j!` zS9M9YC{eRTEuDr9Dvd_12-o})x+QPplhi8W?BHZPyGi1rK}u;Q?uki`kTj2 z>a24Z!$APRie|=v=_wLLFyg zm0LLDNzn`TVwAm+-9GR-Bo{~?h60eEbMO>&Ma|%&(T}OQCkiChBxR6v$6Y1DA#6-Z zp0{2l1oVRZwtskkfu*n+N|)=w%Qpik0S6_+T>DR%SEEW#Uf}<#Vazy%xWV`O#rmg7 z;yVA@n)<6X|Hq1&w8arceS~1D-_$1ez)Z|4>vaN*>6-Yu-PJTFT@yfT+-7WvE*Uuoo z#`X5<9tPD4+{mdeV5mQ^|3U9K_4L>+l5k~T;X9`}yh=-p?@sbib^saxBuW~lq^xV- zI?7vObg6F`clT5NQ!)o_yY5$|K}5Fv6>RXaPed){d`X#N=?+crPvY$sg8tRU5Uq$D z?k~W-pW%|94;cER$>p18clk`BznE;n+hMGJv=z$iE)(IKWN=kR$D>!Uws93zlc4>y zftBg2#t`2-+N9qVUHh?3(lpk4Q{0#Qi*GK3y65(X&reElNetw|ZV}x&S28GIL35af zwNJv+OgnZ#U;4u#mF`lCr^XU-6n~A=IxkAQhyVJfIrG8*;4+=bcR_A2m1bw!X<#5m zLFJy^i4=BAs{LuH^=@Uxt5j7USAd90`mrujtae6Euw;4j}wd=j@w`i=T?CCHy=iR?6 zC)+r#bUYDcuj>yzf&a}?9}4p*Om3h9^-wKpdVQvLx-{xtW)maoI$7CjOLwe=;wVc>`od8sfQ0D7_dr7rPW}NXzV2_HkxCB`W_DO+N4rdf zvIbbQ>ZFy3Qv^mITOvQ=<#I_r`xtUr;ZFVmzZeo^Y4^2h&T|`m=t_9^~uzb_fq5z71YnIR~Qs{;N(asoFN6$!V z{p??HV#@Q6OW{b-KY8_5>uYuUn1s}Ek%J^?M{9qS7RC33=y^9?-*(CzH&8(PJ_J&q z>bReNetO=}d7hs2)^>sSqx?a8bLwU+_uC3fjXA%;Kz~`I54klUd_&$x%%*1fktH<84zaiwbobZYocKWrg35 zu45_OW(`TiITxJ7tvfg$t-xQ}=$9Cm){YuE97Uhan2j*aJg#^d14&}EItZvIrXf-u-?)_E4 zCl+bQ>Ssr+r@LKKI`{+Q7~>Uuwkp+6^H`oRbr%15z!c5fRdOxTiOCq^ozeA#vdEnoae${~^ka99 z@5`iF@|4>|lsa7L(L{o!vR$r#j93<1dv z;$J17QC8|tb$vWd$Xg$LdazYTfH`ofszEzVmI-NowU8fI zIza~aE=7HRIVPwL4+?ww(7U2d%FV`BmDWQHOt}1F6ja)yU>AHkj5VD3J0x&dqp60X zcYqP4+W@z?h5n_CqRF=5z`ZnADe^U#3pBF`>!~-Yd$$5e(Fzv2eND~NtMT-(R;{%V zjS*B_K#0RUu9ay$915=~QzIvP%isl*^fTW1LVowy!;WLjSw|sGVs|D8jS23#!dQWb zSS`3nZx4FqZRjfSQBIIi>N=!+XI6`l@G#UhtmQO<6LANL4bT~7UU;mXetoD962ns= z<)~HAcfnYjRD(Si~E2*={Jnz!RVB(=iic6JLxR{n2;r?K}QE?lQOSblV$e#)`aF z19c-~W(RtW5NoF(bsW{u3{H+=tzg{HedOFjjyc_B{UELDkf_n{9%G%9&r}Ub%BO!j z$=bT3tl^-u_^T32mdKmeMq5=U9Lw&({9NL3=y9eV3!-2ib;R{?G<5zrDMR}V&oUg` z`rSuzDI#{vl4i0h=c5rbc#?W?cy?IPsb7gVL`VpsRL#HGrJpSL3=Xq2ya6;Bz%U-@ z2jFQfvu@4qzTiBgu^KRepJ@b~e@?$o=3LmO$Zlv%J5M`Oz+2yUzpA2tHezvNdR2?L z@O^%iCcd+mSUR-e9;X1`YEKkD-~~}&=z!jbe_Jg!cT;`V`?Is2eGQ=S0p}JAMJ!-v z@TKxr_1ItVk!JG+P3}&~kL~9)EMhvD8}ZjM+p3a)6Igck4f&pyJDG!NGWni@S3J^H z4+Pfk+Vs^o-iCa?w9fbVWJd{B*CabL8aI3|#j6R_C-)itFWy5>$PRm@Vo9N~V*b>eS?IM29f18fIk$R#95o zY*hS`WTN{Ms%Oq-J+)t1fn$X|wX;H0sEAR8IsAP+CZ(D}8~O!S>T}FxnMP%AhBVv5 zqNaPt`=hK9&ET-^TBd-g=PhgRngBBhGn5_{-9h;M9jNt$Tyta`5kDg#CpV))AbKxu zP=7LR%1cwSzNIb3&N}eM;f?3oqx`VHHXZumxD}dyQ}pap2%K)usIkAl-X(%AF_!F( z*0E=b1eP6)?WT<8C1Pg59lJshza7DPj<$M$-3MDoOce2=1H5Id=ogA>$%*yeXX7X$ zC(j>9!$p%#tFq-Cq>~Eki%(SbPfg_1P2?d&&5tDXpDyZi^)bAHFGYQLHSHno7xan|)57i}?u$VO_QgBs4d>J$&E*VLOMjeRW)2*kJeozXjPyp39IZ1XL6j6T1qIJU*u-FgYo${ug_vCy@q z-uMS2j^|+h{lrn;!R6)eBv#h?$p&|%?_JB!MxyV-@yz|{&8q-VfFIaXlnUv%7{v^;sU&-ji zEgS)swqG=OQIo!TTA6+F9I|s}K!V{j96}y0!7@MlRhLjI;=*8tuK2N^g>Qgo-dkCJ zWaB&`O3gUqdmU`()|u8%lIo5LtZX_%N+BItA&|$_p!~b1&nR$bZ^cTLUE&eVGqoGT zb3mRG4+2KD=wrYd=Hm9FMlKg!8vsA!s`P;=g8l*{1$nXN9J+)0{oXV)d9|*+^5cbW z3{{K|VFkCRWm3jpB^<4|6vdmTXx132%*ryBw*BnO<9*d2kzrol!*|5nH zXEu5HC-vHp$r-NOx|iW{o4S=CojiA>&oG(P;e&PC>H-o0U)=&^jSM6J5_!CNB2j?Y0{=XY7N zpZJvNirlw ze`hS*8?C``dcm4KO}w4?$M0ihZt8%A+tl=U`tq|FW4V6z!}@HG?Axky1k~R^Wr-s! zD#G5XUpb#W5!xUTL?ceI)&w{@<L3{1m-e|&+vE^4zB<(?J}oKhc`sEdr4Wo8Nmqu`D(k_GiweK z>HNmvUxn?m0~OBmx53|E1y;239fdReQ-lA%j4o3$ad0tl_|NGwoxkWZUSTXuDHIC5 z(4w#`YrzFM{676ENuik@;TVw!q+XZR&u4$}WgmU~`2(@^E_S*JHlvuF7)-_H>|4w9%qd*EJmpTekAuSGt>UAr=yY~Ge zHcFyRW6K0+prA)}jw#^DYnz{ehcb=Ltc#P!MWId9V+uFL$iGrs%=!&&I2h{8ICgQv zBH2X2)TDW_e;t7Vu2y_}K*MAJUw#ZX%=rNUbA8y&2@dR})oa|M3amY*D*(a>8K}n1 zU6A~=;myk-Cng5XHYE>2YZFzXfbR1wr~rYc>QAuy;TKpu)!&n=Pt}0B^yHaSnjkr7 zK`qPaoAC9*J2x@+1|Qvl{mU^K-BnQKy;$kei4%`}3+KV`95d}!e#&iIa1fzA&)FdB zaqn<`OOqhIR9+8+BBi@qU=P_?w^EP2u zzIQ@weMCI{Q6LO|HNScao+#>L>iKjheb^0mWIb~^ZhF6b(k^ed1B=|G_W+4-JCkeh z^@QLn8Xdv5#pM$rRkJ^UU!n+Qq@I;AJCJlT@yxVh*96^V4B){G-v~#y0o+Y70PH{c_?(gg<)k5`oZu z8GCQ>b2ea{NVr6Od2Aa!9WZlfAdw~pWagp&Lq38CXog9;l~5MJy%u07Lyx+wfqGMr zg4sqk&%W_9U_c>OULRSG)6uiiqWXLVh?3jJ`22*8OY7!kD}i4O8%p>53MB(KFm90YftzH zp*+DQ;k>a9(|PfbH@2U3q&~G3KGky1Db1R3O-++^%_Y(^|Ag5F*jhli%0bD)zAY#K zhvZ?GqRhdk0IOE4LWE(gQ1{pjM#X>-m82vB`{owsp{wWcho(>KQ2Z(28lDB=d(dV{ zlgs1K7q?XPo%YI92l@; z*J_@UX}bhIfd;2qAJ4FZ=qU>+drf}K&Lrgz$@n9iYsD@aPsh6Cb2L{OA9jG7y6!qt zW(wP&V+W;IZi1k;AJ0+%u~Rb=UrD1cuw>-)D{lA`cqpdYD1O(NgyUqAQ-iyV-xy<| zw}LEP`Wbpu#J6Bt51<{8zG7GB9msIJ6)Dw@npK<()Rf2yhjs0DjXH%I#rb?ON8`BP z9hr{Cn9>$bq?e9Duo`wv!k=T?Yc0^h9@9r$POHL}D<@{gov%{)T2Im5k5Xs_CT$qfP<6kJKNxWv(v6iIuux=L_X2W^lr9^t%~T zY>eW{yl59ovKSWSp!;OFB`|<>AHheH@IFQmhaDagu z+JPpvg0*9aAo>h%3{)<*8ac>;0uvCH3{sL%8DB&J!@Z#yCv(#2>Klp>%ei-4biQ$pmuwP&oi;d&-z_Xs`320toFtsa~p!~rG7>QiE zrgAd?%O49=aFa&A6paDUqM%cMihjj0(Y}VCX%A*hIKwrOY!k;_$>o!j&Cf|>x`9iE zeJD$typjZ}xyi|+6U&ZM9as%c7Mtw7h!SHRvkodcB82z)6|3I&A2FxX&MxJl(xlfof={??CZ=ywPrmf^ z>SRMWbfER132i~gjwBSfu<{7y^(cLFU3IXXxPf3G){|1D0yq%`)+`J8o-V{w?qiH1 zQ8GSPAs>y>HrC$AnbF~CE%XZBjNo){8JKwxqVuFkV=m}Eg*m2n*BviID|*DcA|-PCHuln@Dyf z9sx{>{>3-XE8!QimGu>w&UGVhH}==rB&&nuUA%?^gkNSSOU{r%JFg)s=m@`f1zlZ* zoVgKyc?mYQ3p#5d{yO`aCVfY~j7DJhCT>90_jtO=JYtqI`DsCU^K}Y&fi3z45Om_! z(ViW-vt=e;6RA{M)q}q_0q5yk>zuCFfBFM6nY@;Mk#RPAp0P1>iy{v*P+F9b(}NNr zrDP{U#YrSGB1YH<53w|u+$Q3FAzR${6HMd=kzdx1#c1b-NY`g313cBg2k>sHdLYX#;YxXiUV<)YKksng?0m;H!w??x zQS7smWHAz{GYD5n$7*GuyE9CrPBntY68)Ier;y3Km|P5-^2||??e8-^Gcz-nlC?0^ zLiz`B*~dtRQRbCh*qlaZvs@tYQ|I3g2k+0gvGVV2eeivm(|@h&|966Ftp4|8@ZZY1 zkh6`MiHVGfqoaYD$v-4@lSn~X2ti~~pYE=&Eezd#)SCm#O^#;qeNa6RyaKbT1DQ8Y zX=nI;xZ{Da7xDr4SXDn`M=I~HeH4A3v-Cb7H4*XHcDkOH|B^6QmKd;~T{gZcl(cGB zO{};5a=w(B-1jY*=lryAL4^o0L_tN-4{ou3nWAAtrA>P=M=6AF>yF230~+20`S$XS zjd)f1e82FD3VNqRyk~cVIa4o*UW-<5*iFq)1W3SWs{Y7ko`Ov+EQAEzlI_PJ@`ku0 zExHiamh^aLVE4D-h1xr3b>v+${qRq7LgoKQs_Or7f^voyCPq&G?i}-@dF9^E5xnuS zO$oU_YM~GHOJjAdFv;{!bQhNsCeEbO->ECSes3&@K0o+Jny6tSLK6DX&&Bss##Ww3 zsedS)qE#fyP4-~7Z3$ zJvZs*44z6G4MZ1P7Aot(mFYRui@$yQ)HAJj69+|BN1a%!BEWHqMAmuENsR0B{Xopa zXQyXr-o>R_`2|>4%efrjKbh#V?eIjrMCOEQc$jVgf**g|q%&N^Am}eIrS3Pf<{)O7 zf*=e-vaN$lTM8|~Qo)S-+%mn=eU_Azy2kOnIO65+AFgXGz1ZXXp%(vtb?nl%W+0pQ z4_oK|pkJ4(YW=l4>Wxg}dpBdiDg}%p-N$1ARAE#K4v=I8OSdcqS+=jxFAgm;gLcb> zlX&F>s%)_Ysswi35u`)mEVpmj$1)-%C3ggMfAUaeI)6Ebc(;k9J9aRe zy$p8pzW{#XBz7%j1j-pTfW}T_RUNf^LroA1Eb|Un*iDx~6${eLlFq8b_&=k`=!T6`p8UejzMao^#a#nR$O^40#%DufJV8WT+3V- zV#pS72n}!)XX!Cm5+u4=X}l1h#NPahX%A&bSfw3%m_A8i9Y)!>CFP~#@76VjM9t57 z1a3`&7RrjhuY8_7NqqjIUkD}J{>3j84}ukY4X^&H!ZaV-m}mJZ^z0@;AqtFqJVjBJ z@pI=rBGDo-aT?DzJE?2DwLzFVE1L=ZtP0I`2+sxn#)b?; znI`&rX?OP!xp5_I|I2B28iWPoSKk2@(aK<@3L|ywlC!~&#UApTr=~l~_QBXrH{oRx zgZJv2c24C!ldXhEgD7nnJq9AsJvZ(Wj`isG**lPxl7jI52KfDq-vrVGHukHOo#5uC zh57kVjWt?^Yqiw`MHENv7k4;Nga8>3D^!WfPH}^E*3GE~dy^-K5HjymdYHX&SOb)8 zI{tAS|(4+mZ^0bRN&MuQ!-3=&)ji7^Y>y$zDEj;Ew0J^X_7Jvrh#$Y-O+vY-D$0Geye#!Ps8CQHZ0yjI{l<`i& z*c-R!*6L1A3MGk7E-Si zq~+Af@i`wTqe;Lht;6|)YW?=AP++Ju>zp&vFy4>J?&iCd*H9D{&@<@uTY$W)9Q-<(K(E4y8a_ zc|F{Pd!B*T`KHy57g{0vd@s(Nml_LpmUTWnwahv-ARA`Td=$feni%@>LLX#&jKDAl zwi?lh6VC-nj`9+FdF1E^2z-HPCe)jc>-Wxyc8`Q;Q+|SM2p8DbyFm}Qu9WB7QgVD< zmFflB1Lv8_ZOSgp5z;b@30EhO(#-bH7sM6Fxd=&@&=r@ZU+zPmQ999AbN0O_9yHaY zG#B6hib+GTcL-pjL&+M#y+j@o#yBS1hnWV@RTFG}=;#%E z2@rmWyI<1_?jcbmZ{QQ{42`3TC&YOD^YsB8@6Bxqr&MlQgRy{|U9$fI$19=VuCfi7 z80{^HZCt`O&@#8e(4Xl5oe|q9L8T)c3t?AvH3 z@Cl79udogTA$UtgVe5@q;IOMh^EW`QbMVj7ZepKRu3LP_mJBJ;=+z#jx5Y!T;Z2#Q|p-qXjI}s zz5U(5XZL^N3BMzc;eWdO{r|rH6u@l_ zY9_PpriUX@yd^DCjD}1Q>bV}!Al2eL*)Egn)w@)rL-PDU5SZ*tq>`iT*O16l%gyaL zF?M=7skhSJ&&Slit%T8mx%=DppX>JB)4reKy*~F@&r-5$bNS2LEWCpYV&&m}*`Y#hrt$ zCYjWDTp$9j!^a)804FspCA4>#X_V&NyK)dkBl5}c9E$=2vCTzL7;tN+P8l| zO8jH$R!I)he$bhghNQr(n zKX<|`4Okm39_apJ;7#IONf}{YxFhVQ@W>oCt8~%WOtFoB)~Y@TiT~ zAh-Vmul<#p_P1aKuW?`#IT%q;@sPxgf z&)W-PSK*Su5+C2=@Ez`>_QR($>Z9d|E`=J8p@iRVDrZY7mD3m6t!3;uzFJs05~*DY zDiwJLs!gLOJy{=(mOLn{&OOf`j9F9z3_#Ld^~7)K%zX>_)GEH&P1>0(9-^gTd7nWX z+OLO?5uT=5*><1Bl&P*11jCRx$9 zGpV|UpR?lx00#{b7B5s$l^%Xns3H%2>FpPE^U$nw4Y4{h&<6)JoH>#sXPg~9x4P4m z_@b_z>0rlHld&!m&u^<>3~C~rZx!s{p!9}!fL8OT*kNKoVzL1n{aIBxX2fhVeUpk! zzOK%Ft?`z#o2XlNUuX8mfPC)xPf-LdzA#6&xF?it5w0xteslwbt~y)MbB9$SN0vPp z8MkxU7oAutzv6pTZp7BPa16YnU3@*vK2`msr0`(P<}S~w^E#7y8$*e@75^@!b_x|? z)?;gl+FEnwfbl@`=Y@Z55+&p?%;A=1C(bnJb{Yq?M1eWivs;1npi)hWhte);9VYb0 z6cpk6R;C~3f`med7(KM_Js8MucgemiZIITXCJaeOX#JUtA!^j=)G{`1AW;nWdYYml zn%+GB*>V9|o1HoW@i7Uo&0beH%;wRel$TrF^=$nGHks|lwDu@}b>x_mkLM6&7+gRX zqp>=`gg2)ME>jX4i9tUiZj?AdbuZU{a|ahxDB&qCZ1uB@b0RFHi$Jm56$Wl{}K8fGHqcptEb3{nS(f6 z_%PBX4)7#oaosAn5vAcVSL@61tObJuBV0bwqE~;*e@om|Ug-=L&pVoK_UDvjveHcP zq!LSg`#ZT+L2+Lr^<7D0dQWftubTqjf43?8r2+iAF3_*>U0-X@nSU_R3FDE=yPuHg zBQ>G@i_12LtRd_{cHcms3;x9OM{TLahF}`_Z?c9zd6uVy5YZ95^2(^88=Po!r#_=4 zVW`ejSPtT^EjX{WG^~th4!nPIssC{6Ja1J~Yl+2O*^Nrjyk9@J@3?-Q;OunlpxlO-u$Q1 ze0}a^1ZkosX+B^wb3^080&}H6kt)TbJa_^aKlrUEpnJuk&uIJ!che6hf7A43RmPk_Y8Hek=kG0ek+a9MoZXpMF;A5=7!WXSeYwX63vo|8?p+9thYUpd%z(zX(hZ(Wsq@^Xx@skCU zb#2NDjLSxPq>TrQl zJxSv^(KtEMu$FgN>LuIFV$t~N0PACr!nvR1X7Yr1xHFA*l3K?8pw4rE_cJ7{k!uea z{C?9g6Qs^Fti@Jde{9)P9%y^wK6MmJId zz6$tI6g9LmtFY64Q=^y+%0JKp{X-!cnajY>9{q6o;TLDT_ZIW9)i5d38 zTrey>v+*Vj4t5tdS60-kh+;oMQ%LP>FcACW0lCy8V9EY_zUgW9RSLmi$9s!{^qo2g z(1eSJ;P|pvDA^FPN(MpJX{4Cg)hDc!Y}zsN<#D*k;J$TWGw-#+Tl>wG+!`}3IrRgT zv`nz=vdQv#(L&i76VqLrfT@EIt0xH7XKO;{&nQ-deEMjzhles`{Bn;t^ishH{IGlS z>zFhWr2-1UggNzexsu%iK9L8szw}Dm4^!5RjtdkzN_T%wz?(aLwM!VVuzZm_Zv3%O z;lO<;TnI64;DO=v9EE4oyT@0PZbA}!$J9ByEATsRo-qusv~6NO&^=cH}IV4lHK{{`k_VCN`Mgsr)i2hKqa$d4PTo^!;mjjr6kg9{Nr z$u-T)age1#y|I?q0P&bL=>+W1esOsUSzlfJpehKo>0f}GWraOG*FeWxi}w#8|LfGxrt*M!XPj2K9n;9m z_Pa||=3PzvJU*U&UFokMi7@Njb9$|i-%sp{gk27dcb=lo790G`&mO_BFMT`^*O9g} z0FJ%t8DY%QJ;|lz*w8pSW1KiH!-;=zB2~V~kgg{&Xu-U?`m@;JJQJt32)!3RJJJ*$ zB#O!z8{o=sc>fuNDHF+nx{!|O8p!z8215|bdT5Sm91ll6Q;4+1trTnCMG9*N{^ULw{zrTx5Ld-#m5U=ZRmjUO5Yu? zE3#VpEwpI<2m7s+1v+T2M*!N-Cq;wMjft&}DaNBzlP708nT!(Q;+&;2;V&7`zisk^ z(-41OZu0TpV5O_f0-5>72X67_hN~T>G#?ay=z@WdxC~AM4eIP2t^HY<5 zf}wX}Q0m1p;r)&>DdBxBY-?01K@sHT9+vGv7^D{HS!Sd~TnI}M@u>u7+klS995J_B z;3=%7Sb{8Y0`)a&{KI6#kW(Hguq`j}4LKti}G>N@!A=j20WBVZ%iu zIR8qjCTG3Gu_%0p+7`qGZ*>%M=qTuKEMO^uy6#|E9B2y!46s%cYJ_)}Vxu3o9y?#t z-5Ne)j~gAoS$E@^4n5wa$Dg9ykrNr^4jQG&N{m}8(jOcuTUyF{Yjee7gxiasA7SNV zyED~n+3G}^H>nYRD|uK+v23BE{C480mPi9;Z*AmYFrXuyMX!`Tuu4SUC}Ydvy2*O7 zjh%7mxwF4daBWgKD^@*H=s71$kB!boYbkTB))9N5V024gI-Qp7$()RLduH1GVug1Gw%Nd5l$?NkhxaZ*@T6LQPO zNjzN7j%Q+>U}Ac}a3HfhHOY=Ufwb0S-sZf=_OMk*o*NBRK!w#(4lB=HzzY?QcfDxc2)x{Z)(D8bD)HJ{P@f3Vfak^*j%__>bL&{bk9S@rr zEy3|ijnwb3;3vuem0tKu2=EzxfL1=|IQ#Jx}sLkr&l&VENA)fj%x|&ju=6s~B_k&nm;;~fD?P%2U zr{(D-a}Xl#ztN7%ve56!c(Of4nuLOsUhGX}`f;QUa6&qQiP+OaIWzCV)cp<%Tt{hQ zsBmd*r89o)Tt9H*l3P^!BV?CUVxE!GI#3riH0)et7jMFz`L7xb{6V_mhisNK$As6< z0p_O6gLuoak40yV+Yxg!M7 zZmv zM!0IMXf=nQB?)LJ4v6B&AB%fy^Mo+ZL|z zwrAdCSJ6oi5+nE0T_jCcEMtLk@(Jdiczf#>eHTc)@(>rUg6^2s+bKs8QYB%~Z@V`8 z&6|;*7t^O|7G3*(OL6>MgF;jB4jjfk&?3|M*L_OkLB%W~zWZl9wuN0Y!`fu=tG17xcGQPo>vemzhs}{!L9A_Z@oj~3U z>bXp$uSV!T=$}<{X8SB7n^yjELorF8xV=W*z*EV)dsiZF0AxM)cbpzlowve=9|>$b zi3!Jhfyv3yAGfK|41-#odxT(!N_$en`57>snClTq^N# z{`@(tKFo3h7@)P)_>58KP2Q@qkChZYiQ~$&eQ?pEdEjc88|CwJSiO9;+!o8&5YZ;| z#z`F(xrVz5YKOr&;9NVn4=0R?Mn3%k}15x{C6r&s?PE^1Kxy6ExcP zURPoBhMM|Y4n{|BwGUj9{mcSCFX8BDt%JN$58feOuN<4XXmSkCTMToFKs+LgA*7JY z{MOx4xol-Bn9){M7ASGv4eVc^V)%b9rMT=6rpj40i-`ms9&C|pP%Jc}q}>4p8i-)ps7w0WTJe(H*U<8!}4 zWc(6aAXJ0)vu2yV4x?6a*N-AQPmv5^7KsY6LKi>j|El`^`4!@8Y53jwu%XT^@j+YV zx^C^ba$}D&Gu1_uj#I z45_JP86K?t&{rmR$JW2BQs$QHdbwO$WhPenu_#RE4bPC)irWy6y^qdJtpM%V56XaB zoMWKUZNt3qYx39*y<4Q%H7#W$1g?(8MSO}HgL=)50Zf>|4c7!HvxC8GK=wVj)04^C zZKgh;+CUe)x1PalEnw@2#S^ihsQ=u$ul8jPTk)0{WBF}H_ajB)rc30bUC$OtMUt!T z1OaHHKWljL0a4)>!h97krB%|Sa{#zn7ub!eNaJ>;c&k(%updAu^H*Kii2%K3-7s~Q zIiFns#p^!$<|(UNLFYy3$*ZSlgxefqN1X1VFa2+w%R@fxNzko@W;mF04-vLj9eTGmh$+h4YWP2 z0-hy&^-3ofBaP_oQun)=iytj`}PH4^bf($cv^wZn!hgh zJ;x2TS$~p5=}TQdzj^w2k`AP(wh0~@L~lP0x&3)F?V}^PWJ?6fpv|ifQJ2OkEMVgn z*?Xsp#|NUC#rHSC!EZuw($R50gK1T>zaal5+%M?3E_0#+0a-ErlSU`-Uu$%BwoZ1| zCf}aF+5eu@q5PjX`yxG^O`07{v%g}zCWgTgKv0ks?XiS1Ax;13wkB)4Nz@7J#{Fvh4dxVX63-Kx?8LdU9d zjaFU7D3!q#r}xYn98+1ArECq_OfohSc8exuCiq+?Sa4hLeyk0|W`GP^v!b9+4&NRZ z4-`MZ&giLF+}NBRH?zk~QzX`0!Jy(=>V&sHQR$|6Ku6lYLRZ$!b>b?5DIf8^n)ExIN{pdWwf(=$-- zZu1tyAOsUaz4ddIBGYn7o)wc?`?qu1NG(cdhQ6w{OUY7eJ6c0UaDUH_GeDsjnEcga z8uawWio@+n!JC=tkZKrE}Y2|KSCuwJTJU7 zYtKb>rC)@xlFZ8j<|j-#2N)evB;kqvdd%*mqm)kbVv^8hZZFX4OyYP0XyI(IdxrE>qBLwh5>j2XCVRA&Cw6{z%fg?$z;5p; z2IiB!Es!;`CdG=~AFtIL`4|d~NA}wY(wrg&xN=3lk3G?toyw2M&6T{!A*pbC$ss9m zzsoVcEO&GZSjA;UYPG|2=2D6jN%&@a%L4-w5WlE47vNr@{mG9eBJB>8((U)B#HboY zSgHp_@WJG{%yub)R)~Z%8X8m_XKs|4;27#%$~WdX6{O?VCteV{z>j7}Dj+ZVB1UmQ zVhD#rdio)f*nVMfrKqhOPCZ2WhAeo7N-8F{;adv&MP@iJHKg4~v_KU=Asg2#jnvEk zyD|TVc+@FVNCS=M^_$;pQ6gAKpP;Mu_w3y&z7bqva;Tvc!gOyh2o)%g$P96uoAEHIFdVcWy7yA^!2!xFG6;t{E?5`5$2+a&(KnB%<)rP_(BD=7d z6vAlfuYbL)te4pk{NIB5$An>lWyXJac>)rM9 z{tK~3bj{5BllQHUr3Rr`Cd6gphILhz%xl0QhfL_6RBCbRX3g$xA)=Sjkk$rhq`sX2 z0c>?3`n77mS6bVjDl}!W1<@NDa9F`S!Dp0i+2TgbiWFRK6k2fov=qEA@lj{W4cD*U zNte=Xv}QgWQnN)h-PXq8mE-Dt;IvoGY(&hPqtLh!55{mg%g|TON)|911 zBV)iZU@{fb9!&EP?@=qticv=BZ;&cpSF@!OX2Lt>7Udp#(3Y`Wq}WzQ{-=fWuCsV$ zS`=(DBnsak1Z+a>-$00p!r!z>g^1_8sSci zv4U+Ij|F9?+OE1!7pLq}HkbAJZ&t}5-5cq|ceJbEd*%F}Z5WaNc8mY!{1};-+gTf% zIR4MYqbi|<`<>~+VI&Fei#;G?Zw)e@dQPO21^B~#)0ov!5zh<$~vP}Y@`GBOaJ@UL82yzgDr`&FYiOZfG9hwH!i zlDWSyab8nyayq$1U*1}jH7~So?`-o;{s=9p5LIr10iTR69g-T6XX`b`=CUnQQJQwr z`gUer06MBgp_a!*O7|S?$CT!#obCOIzy;HLG&q$_`s?7K^GiLN2^a@h5msCDgGhjj zdfW3EC;)A@PU9FJz=@L?(;v~7UvrK?fF_xpwIHZqSYt^F&gi*&5<=le*5>`zxVs=0 zqF5_oXwJRK_82s&Ajq--7F^lZWitMD_{~HWHb!K9q9eSW*Ia^&+TCBO_$!{)9KrC0{3djc}J>rpcwZ?M)R zgDsB@k(M=5TslK*S-5JXat}1rY)RT*>wKDLG}V}TVT#e<5E@@IiJU_}v(4nGJh{Fx zMKs>F+&IFih2_XI=4?~J0GCtSUTi4=%0+kO4?4l(7P>WNPr~U^mAUC=<*!XE?^G3G z1R0aCfr(;B&d3!ftxF_E_sTN=&8|161~OMN17DDoBO{IvI5(bzt&OE}p=~5}HnHSJ zr%1_a_E)Y|Z%u&BCuPG+GcokEHOy2_?ICZ=Kj}%AwI(jj>{_xCbTg-Hr%^}m?-6m^ zY&}EkrW{m*w5i3fD*-4p!rsw^_ZXbkAv|YwWktq-S|AJ(aTCql>f`;!r8# zk%3R;b?}P8IEvGJ6HoRTWYMN*rLT~TUiJdByh4dm-fJQP9 zX12_2g|XxC7qx+nXPut?>4*`K`y+Sy5wMea!xiI27MQaJ-pyP}rOH+GVEnK(e^0{w>-iK!QN09}w5GPWDP-UG(luraAeR>WS0vMzv+IMUliJhEQ0clIN@I!tZK|W)Puc{J$vxOes@MeM7auv7j^IoyZS70 zdY96+K&}PxXYjg}_$vB4G@?r3W}HHgu|Q!AtFgi`T8UzL01Sa*a<~q_8j(usw+H6B z6e^}iLEtL2yOw^g(;xPy*S}x48Y8uG#f9rKB5`mwbWN=9K!lOTbC)FE($GrkczJtD z3z!i&ZjVCAe^E~bf)|#h@O;t>wJ$g&Mz7F%hq1RtG(IBkU$U;<9f}A?prQCl zO2%XB1L_gl`68eT0Mi5$%wC%FmnQ)+UqKQrT9Rb~+a^;maQ8m-M*K-{DbzgVwlcto zO~~o%L}urDg7y*eZ105hs2UkM39WG=o7u%`LwB2;sWOXR`jelZr(^@WSaUbnA=lu= zd^mWn-#&06y@k5g0G)Gio5amjdXUUn)E-#}PDYqosV)~}@P+?|y3=N7$Qzq4u_Mjk zp`4cJfhCx-4$dW}z|2lcN$Zc`j7zXeVIQctFw*Fc6y<$Yg}dphLj$b!!TL0P24cHD z6*v*|4VTcjwpJsI!S)%X(k0!AoX{-aIW6Y^HN0NRl>sbMbLD&THXKo(C>~>lTa1+9 zbh`v4E%;||*v|KWLiCYfKXRqQMj@vZrU~uAV!Om*i923};_*!#BtTcSrp)OB4ud^4DGkoM!n?x>w#sp@cX_fhgPmM(t9t)CE@RBYF0isXh!B$Co# z5(l0EZTd%uHddz6zyWq$cV7pUs= z*&ikWeoy%n(OIf-#(m^$AV8*T9dsSZdiG0X=}-zoI61_xA5Rio#^zTK{6*kpz$Fqm zrK}QoeRyX~=+z-Biw`a6GUg;%sx1?Y+!AL>c`wmxqc|PMK`M?COZo9l&8>%1KWFBD z@wm--Vw_aY5RMTGFy~=K>%4?s!#}{=?oB|{BHI^1Y&``e;MlK1j#%}961uB{mO`za zD`gRutd#w$yN_$Edq%-jfJ1gZYB`3WbG#>Ai0~L0k=f%9aAMqz`nU$K!X1_3?>rUc z+=M4>i^uMk^cC<^Ue*XJ z4pA05VD@!=%E`!4`+R&qVe?m8GjYFn@jeof)Q#l)-H@;Wi)v!b_RyBq3Ww3{cx556&2R&h_he?t$l?&v{-{A6mT0nz}NfCJ{jPUY>F3{!mNE>sW1)T6_K3SNU!j$mV7h=<<97 zhP%7ytA(~*0TFi#CO$r+PqluXk<4zPi!mFK^O^&2+Z=-bO@&b*m!Uk#y4#O4d{*Tu zzAH`jAAv>ZsoA#SyZVOs$LgE+zu4#hC$;rIOQR%B${tMxEmV#oAUGZf8tHcdTp`MU zkvoN^mk07{@Bm|zLZ*%a%8a~vPO^o^i*(4S|`XU(G~Lx~jn<_T)d&efJ{mzvbC zj%_|Cp2fwaSdA%}yl-~EAO7d34m01k=PbJjbHbjoxqyl@D~ZXuI!jmC7W{4LV{&*g zIWrXs3w4WS@zNUY8RjH_wQN7{*ovnjnx=zBPbE40@)W6DjLyn}EZ;J9Gc%_Xg`8r! zAO~!$Whq-oCj@5eu}^p+hqBo~qZ7;{E#pKuCh$DY{fMzBN7yo6xhABPr6|4@2TOVb zuT2K3XQ^CU!AxTry5_O$VvX@HTl4hBrQr8?%S!BN)pEBTW$>XOIYj~ZG{YapOPonyhsc;;w9qhr6wRe?A$u`&08P?kSO!~9EojK;FEI@HPKMp_;I{sUL@Ky zv7VZfnj`I|m=19xQ=%GBJDj=Qb1_mW-dxI}PO+G~7eQBAm~W;W^M;jrLTt`uLQ!2V zN^S@=%A389)~MSeZXAmE+ePv@Nz1V1+^wne37%fX>adDeUu{@7lJL#J$gLfnlJj1e z)l!vgxKhhU?FQ!9%UCYTVm#j_@SV5x1y#iy-gB_t6^cenJR=lgNz-nC#$DD15 zYFnBbJ%@uAt_9}RpaQkYRGpj5lDL$H4Fy82yjEp!RX#^C#`kCwqcpIzUlZOpT8I2) z$14k|Px?$I=j4{A)g<{4su`0oc{R%ZJSX-YY>Z6TJSw45`;B*bVMo-y)}JR8hS+9I zljdAe9fYe8Ltv?=Q4ZzAwUIr8s)gnJMBQ8X;~h%DFUeQ@(S>r-OIB#K{Q&(L_MsyRMEs8|j?QF7w| zBQfmd<`!<;yN-HU5Hi{G1OI{Ob>k-)X@xHBKs8DKDQbuLWTCad<` zEK7atiW5XGr7D2yW54~x(6%lej`HbEzMC~8(lAfiJZDKPg)P&^VK@FxHp#>;e^cYh zrFg}rVgf^Q*q36!b7L=6D#z&|m7if*q@pQC5A&!s-DOu0SL1ooRtGLPRtGbP?m2c( z^3EO1~i9f)jr>U~$zRAp5G%vH4 zx%jx}WJJMgLDuTyV4fVTnxxRwImvwQR`0voG8Fcs5@mHZ6lNe5eE>HcqN5VkCNdO8 zM<=li!MYs@M-~&07N;6{4A1TBgz1SWgU5QUyLQ_6pb`z)88|UC(19iVaJ?}lXKHj& z7^Ss&l?L<1&6BB3*Z}t)_kjG_rWkhOjn!oJ(iLl?H~*CAmSy$W{mPH=M~F4@4>xib zY$|^9VicQji(yD>EQ7^++>&>cYmVJEi`4rsBhaYwl(7v`W)4G!g|tGqA>I=3B!syg z#;ICL=^b2bC$RJ~gN`(WP<_|e^lbuDHJ2&azHUk*0uWs&Q#mwpLVRo%&?#D4v4jxE zDFVW#*}=<-SPRgmA4UX4pNvxhl+r)fnU7iex)CNFxRC?7_KXlb(?OS+>_G0(v7N$0 z2N}f*8DEE!n06tLA?veCA%z&lyr)TQ35E}->n2&>;+2QWB(a2Z9vG0xaeL*HY zJUPMcv*SGG2YJ=-oiNh%Ce!2QiVV`z3K=`B$J2K~?;+KdabWwqe;dVmrKeRIeZo!Y z8B52I4=^?KAoNeYrH6)P)Wp8>Fn+}|IT?o<92YTmoKB|uf!s5w z6O7_&#%4S-;Ulu>;osZof07uOSK(5QFMU`BcL66ly6`(DJ83hrJMjePf% z`50K=b-?j^kP+T}XxwXNm`4%!v4Z|nDkJXcqamPPWDkk1M}+Of>@0@CoTX_Z%${w8 zU3~`~2jlO*eTEG%pN*Vv*^(XmpF}9(|LbG$Ta9uywR5!j&v96zq+^GofW(&uj?oGg zZqq`jTGP^~yv|x7ha?23w+NhT7hiaB)@XCi`YWCqQvPdVVF)LtboP_-a4Q5$e#f5h z+Wt6~%gNOC<@MqM5eRY)i~0}0_Y&_WPG;}m-#$k+GkwTZhZ)f6CpcTH&=bzwsveXx zoDy7OFT?x2se63v=zW*NK*SDHr?#@??EocPT5`?GWUPgzOy)v3-1}D%L6h(ciczr| zc7V(LXMt*!hq76`8+TX?hfB`>&6Qs~zN44^6Sk#?i$Mn(8Z8;Jpymh)V5**P)mVL| zO6kx1xo*0sz}Ds%)z|?-3|gjn4pZ~Jk~H59U7MOBX5QU!v-R}xUtbH|ymd(OD4O=F zAE91w3TZs7lGnS;8wTr+HTeVe+@pURHY5yCpF?Ia&cIGEYNjJ?Vx!j$X%*V?)3K-?L?j- zdJTG;t(!XK44K~YB$nCcq4Lwwn7Zh7V{HqAmD<5WK?-al50pg5yhrZf8}p!;F6Xfk z|BxQk>AMW@|L{rpPCE}^R&W0xenI9fVqxp;=Vqsrr4b(TJVk?f4&~%c1fkaBQXeqGY8t&SVXLiQGlvn&wNbZEyqe@mEI^)vBZ^mRueabyf4Sp;(^Mn!QZuER&V`kWqyQBRRE9J!67Es2o0ihtiJq z#v@aP5LgAWp|8)!sH}$%G2oN1`WY#09a6M@`4 zJQ?h)Ex!3yHU^H)7PbsFF4oQ#M&J2;25UPb18WAO@6MiYPQBCjjHK_D_Wz1kFZ+M- z`~U7K`WFnv(7?$A;Amp}J?6l|z}o3Q|4ob1rYxEuQq9i02^g4ghhE6`K6B()R4^u# zLX!eXXT)uVTdPjy)J%K^0UG~^9gqv4FoJMT47=@>PH?0mLM{;%Fvst*_NvSFJs3(J5z7;0;uuwvHoL-G8)t zD`3_pZb3KpVLe>k18ljrY}Dnf-Un1Q#F??aP|ZRHuzwfhQeJNa_8(5DEZ_SJGC$x$ z{7tzpbWLH{hWI(LYy=Ucj0HuQ07?L6$Mh?H!Zb|I#itFF#yp#Cj zEZgH%?wR#ivuDH}wLBhtwp%y|<`q43u$}@y!*%iQE-;gM`g_Gay7QrEH+sUqdrQmw z{{3cVANR8Ne(z)p|L70O{lC6BN+!-O_W#54sZqUfT2e;)+P0N47Z0$tKo(I4cW{dm z-kB3RYupwx*`)81@`y+`wQCEoR!pRoSN5jqCEU%v4LV@--H(bD9>K=ve`nx2bhmA^ z0LQ3L9+!4>yylDB_1N652fFN2gCj{Zt1EA{(Ecqe)K4Mb|1)9?6FaNe24OU&Qg>q0vii9Qh%52s-Pq@U0HdUbkcq;5zbWI zRX2yxkSAEdx-!y?V-|jLvYgC2T3`7WPU?c5FozC*nx$R|?yA#9!`NR9EA^6vb`V$p zRAPt5gPN@$Nvf0_jTR6VtxBs_k9Kus-Y*F*^#huEW^Ny5l$ZfDLkUK;K&$kT0Nj!C z9t=>$VbcyLb{9wI9&DGfZ+b%H0?D}rTPhjul;-mD5WAIZ-y*aZQr%`PYM?^2_1LjF z7fz*v!>}XQ^eou%M}{X-bQtBO+6`Q8N?blpjRMLHU2BX}U472(a$_@m-ThQE^HLf?lQDkIOISrLQiG~!%!U}x zfJU!s@c?ZRjB5*skWSySwT`IsK6qF5gPrYS7h#|${W>TC!eM1|*N!56y>cV|$1dDE z+Vf3;gh0@OK7Dm_@M#x@by<=AetAk<7?F=qd3rRQQg(_01EnfOzv1th#O@h?!OspI5a@c(_ee^gEdyJZyG|N76!qO^MNg|;~5UJ z^wb!!$Sy#WpE^~}WUd5+0>qN8rW8L5yRllit<#88h-EO65;bL-8rJZ4FyV{bN@?zEW~umU*#-|k4dtw>r?Fq)*MVa zR#jl8w*_7i<*4-fz&bo{qx^eJm>&KTe%TK!AGI>S;mC&#tyAge9U-+$U$xzV%si0( z+0z`TwtWd+aIj?gSrADq^Zpaz=lqx*n(+|M+s^vz&{hIZtd+tp1I3cMcq^%|KsJsO zI7*@>0|81c6#JFAw@UH!N60aMT+*#qc$l_^TeD&xYoY`8*7vomBK|^1Z)0N5vC)F? zp9eeIc5 z>&H;&?Y-v7LfC~3^g^)O5W5vy=pOS!cTlYP2~_YED-W#8_5<>Tkvpgdg-jw4RBw2%VPN zt7Cv-J{_mamOMwX#73!07H3|m%wn_c0%8a;Ph}CYmS7@a5RS+7a;?E=G<2T@a0>Se zzIp-%1Fl*hoJPGLCUl=yBF6Y^*p)n5Y{h5wPp;Fh$Df@Ou`k~zbmW|TNDvc(>R-7l z$|f=^Qi-bO#-*)8KY~Y0Z%xMToqVVmCZjHQj7zFH$hw&x^gYxBhsA`4d^8* z1sb?8dCkrxJ2)W*3M-Gu*rG_C8e^BLwAn$*>%$#2RIeI{WCbRaUwC%0h+c|kU(3_9O#!dBo zM+`P5A5tHy>5#)iaft6=k(rVgDyhxbRH{y)P)~&qIZ-o9CluE~P#z6;g6`b^T;2yi zT(4ku%qLmrOo9VyX{~1NYT$$<8={>o=jB*y-&BcVo262s6b&%b{z?(^ zNyvp%gydpaV77#mM<75iWvI8av+;ScB&6p}>q?S3MlD(|$C5Gk(Z`hg8E zyD>0vWof13{$k_z^`M@2`}5H6dX8z)#`jt-pukZ9o7fO&(md~Ez&#Q!vN33ik4a^y zH5-N2QiDo7Y-1%{jIhZ~rI==ugHf^BIupKRq=lV;uojVnSw5_-P_J`>y94j5XCP9G z#idv0?|X{TGfdr9XK*R^bgwBY&14E9LxND8A+Wm!YPX`aJ3ktpJAyozZS|=cGtjX| zL&MH=QkMV~m78(nUdV2?oPfEXCHYkL>8;SBaj{vlCg zKEq$bM#B^nfhSxlu~yterFW)xZMq=&=v9)6;Ue~=@Js%(_-c0z#QMa>w_VWKPmge2 zHoGlOD(19tP?oO)zoYefHfNcqr}xdhje+c|uEwOqJ}ItsvBzYNBt}rpY#2nW4f*t% zK5B|1e>%1`EkW7_&{%`kn6_@7@HYE3E*d8wziE#kQ}siRrcyf0o~m`P?unq=VSUij zaJAzRf#-002Fr~Zy4iZ&>sFZe(8s+n*8xs$i)AOSY>?%8Xz>Ww&1*z%@9Z|(>lUy6 z?koh+PyU9^=mC^%kk~WcQyfxh8rPW<-ODxTEj>eeSP_>s{w+Ip+f)1u9>;l_Xcf;@R$kxn7L0p z2Y&oJP{v7Mb|vCnD(D@IK&`#t$azrr6|lx$V0I1ST`XuJ$Zu-Q-`YO$Zus#i0<{i^ ztL}dX9|;1T%Heo8gVtp(+msnBcWMS?H!p-)qFmVe2cWfn`2bxa2DFGv0aq8D;`rX09`2QZ||L?REMBH9X*2A_kyj+`09eT)Vsdlz2T_u0$pHa2J{%g>Q)nlE_Z{c zZZA(}@$~b)SI!Xv|J5>+(pc{8GsCVOMuD#vb})0-=mnj8Mwp~lzrN8BwQ3jwrFC%D zXPAuBe;qgQK&NH6(~w;@JcFut)=y14GOPbMs6W;Bh?r$ojVht(TR1X$MW_AsJ!1P# zV`jzh458lnkp8Lh10j_k4+E5z;a+3r`^(Vv59-gIlXn#ApN{I%_2M5exOFP%klyG| z9E@K96th=GK`!sq5@2!UZVCS6rdEUkX+SQZYHf#m*4&!F34(l z#l8GKU6B59a^Qc1qWd4Gi>QUQiL8N*$^X0qXu^6cFK2xDjZ2$~lLHS_AqNZUdQ6cL z1qS?>y-6nJ9VqHw)n(=wKQ$(wk@i1rHBq5f(Q0ey(m7qR>1uUuYYmk2SCoRicr#yL z+1?nnZPVJWb*WOVs?`);|LS<2naWXv+N)!K&h?sk_1k^z{d(psn)SZP`2(Cz@@>bs z!Eb3|LW8@V&g;_QAckIez5{Oc&EhcXU`4oFHKPHG3cd;OX8x8B5#7!(6aE~tHez$-?DU51YMJl3Wm&LK{qo1e3Zn$dl8SnyHAH1>L%8BG#~91rt+^KK_#ot&Vb3E)yqcpiMh#rdu>d(?snQR?NfMIVwt-C}2!w zri&doCAU`)lO5w_%=77vu(XFp>{dIML_w{7 zTZ>5j0SM)ig|&?44{(6g6LEDq8ZvEOlv`=N+H$F7}2O)dT#&|-OKZ&DOeCa$kgx)4*8tbC+m z%c68IgmTSeO?S7*-OwQxn z9o)G!CGQBDWFLvYEX)9wPg>>+o?k`g$;l$Kk_*#U7GNIW5BW>EniB2CLO->iVovN&4g zc?65s4Nk7wbN?!MFE7Yy2uMXz)+Xq~A?{^^iovNC4vfY#DvZ@}3Tx{8|6=W&V|)v? zHhoUpecJ9mZQHhO+qQMu`n7G_w(ZllZClg#es_|YOy*|3n@Q@Aot@gdvXe?x?X{lw zU7-6HQQ}?A*S-?(Yl4A76xGG^a$!f>n|C1$ZVt7m;inpUJyg!M*o!>z-N448Sa*+_ z^5#T5iK_ndVI*vlG>=CVoVbcg{x!yjbj-TFT3tHK79CTXc$$rFrqTLs$j#zf-l`iO zpt!Kj@HK^-jRva4Hpo!P$aEF9i{PuuONl;MhsB_{_M!0@V&Qc*hZ!zm?P?+=nsVl= zEXfHqRUqWDd&a!=LY1{$NF7RJ5(9*UbEk#|o5cC*6R9z)_uBT+fZj@C1)9^P1UgXHlQ*8Jug+FR!6#uk z9=O2z7BYeN*%w1A%X+5%fr%1e`dX*@KiUFnomFV2W5E{?BKJug-DV~<*D42M0KfJ; zC{-b=T4NUJ^G7q&5L6hVU5la19XAifY<0y{8NFvh(+H&E^@KcYI4f$&4@z+;21|+* zf7;IE@h_y4HoOqFn!+)Hs%+t&#k-hCLBmm0 zcf|go^{xr>P>oP^Sn{VCE9BLl!CK1-E7|UR6g_!$$QV0%0zJCVtVk(C>;nBsd9luwyv zL}|&M84KpjALEq%2S9e*4Fyz3X~M0AO7O&mWReo{!3mQIb%P|v z_BP}Xg5ozu;x{qlF61}~b(3**{+3DmNeY|^3A&?fr$de@ZW@0B&ag*O z3hco}z_JEosC7V#{;!`X%Q)7g3;BoWHWWQPUNc&{xVsHEtE{0o0nc~dYE0&MX;j#2 z6QrRf{=Go0`9FrTuMFWy$%;npe;_&1nmH6uK9OIhFok-K^Y$l0g|udSD6zd4!@bJl z@Y%=D`Ihy$_s!lo9wK;sw=lwrrXpTjnd#cY;9u`c?guFHI`RUWTXt1mU;O=|vb#)` zpU7GCS;aRMH(v6Xi4Q9PW{l~ey7}wYlO5r8cg~1Gw43Jpsbo3Bu2DCw-q=?WU*h-a zX7Fp*u`91PhAshk%5K{Mwa?BV6q=z#`*}m~xw%TSerqZrJi;lPjJ$+mJ5rx;+1>6M zG}>K7Hze0R;B`Uur?JH6hKYV}!2a|Y$2x6!C>!u){qkO)wkdsY5VxsZ=Xy{#S3q9< z@xH1hpL17uck}5ct2?qXMmh{$L(z+#f=&OM49@*b)g{Xo`4^<|m_Xe8Fc27OBgfuK z55r;%0K|zLNpTt zV%JQbMR=*VwZI$w;vWgT!REOHo^a8GMcl_9je#Y3NDK8zK`ktTXF~;xk!}f>%#B?D z6%aW2C(*E5bPBr^GEqC?s6wV{33D6aCyTVt+IP|tR#`b)UjB~|5C47)Qa686w>UD{ z8xUEfgAlIXlW#F(3^?=MT)&b&Nb5#2ZrCt-AkSy_yPHYgtuqt*ESbxC_}FmeOB%@N z>buZ$uaD4Nt}Jm*_BNg`!!qn1Gdt2>Srqh>3Dy3>Ew*4h6wH1PUxy+c>G>2!6d8@i zg3?e~6G-8g`8IZo%xNuC^H-#B&Oc`rGuMB?ZL$ua)etWQW!rasnO7Zp=FpawL z5J6*(qf!gW6H4A-(i2iBLqeY)pp4_y=xN<1$Dd%7*Ff|>5tga(E_=ilx1Q_K$rvrw z+nR1DTZ5JpCAPcl9fQiYd$1Y3Z)}t@UcU|PWj+#q!}g*73aLP8b`q-v86ZR;XDnIz zxx|iJIuZng_BmLHm^Nnq4sH+=J6FFgB_lYwjcw^5zskB6jNC znVJ8JjMF1AR~ZHESbo4=e4BL_*!hl~cTlW{eipZWQz>9TVm(D+GJ8BSM)3Ufz8C#Te}2&>)Vg=Z}~R^?Ae9?-xhtaKB}XAX(1#FW(tCXxLEN;k~b~NS*K%o2w;?lUd2b~qB3v|zH)i|ZsCfD!dR^Tx;!U)!u zW$9X^26agSy0s1t!6e+XAai2?)l0o;ckNalwE>QcW@*p7_2=|xq?-;?2SFwqVOwuy ztsPC;15ZTAR{g9I+-wn-K zi7jfB4Iljdv{C?IGOxZW`TSf^63=Eg;922Oj+J2gBOsY5u4qus22y)q)}X}xXxt?SHWaY`w*{S zoNI44KAw>3k)xX$FF)&Xo_DFoJ>nNcouq1oFYxO&u937m=YZlyvbP^|TD$b0G4|tf8G&treJO$9k;@WY<&f-b)#`Qv{@l>hY zAd)6W#-sRk`v`UW^1FB>l2I|lqN8zpMx);ivTh&TXjHsz|NBC`F7S!#1wq{*jp_wb z{TBPdH;L+nUHx`k(nuWG*2u(1!|I?Nv7T;h{d_8Fl zunWh8uY6H*JX|1US4+vtTp40WI7|)T9bo?bO|bj?;Dxe}!{0VQ6BCs1^4i4at(HB% z;_bo(b_?}{k=?@Wi~z(z>nqx1&dYPC%8)Q#5*Q;^@-roFk-3qF0F_Y5-#(gL=`k|)64oyC@~ zZLOZMuuzw;L9pN)TBRL&Hx$=9nOKa;aPHA5qLGLjojAXX$v-**60xX1oX1H5HPC_PM?A<_n2IIRbFGkx^n)s$w1yRx?VLQKv#KFh}hx6fo`83 z4o^s2zS&2?*{SY8O>dPJ^4V3|oC#w{ouBiwV`S8a@X&x>Q{fsHQu#hX<7(Te*zR8( zGKMo}t7Q~>r|)f*XKW= z0xkX^{hgD=CGn*uTY$puDFasWY2h~1M zu+m}U-+Jobj4+)`)Wf&74EF=OmI%jeC4>M7!DU)?<-BVTc@8$Y62mMq4WrvSYp$-y zPKQuobD3E6LA9n&=b{yDgD#!m7wG$ZDbW7h^ z{K`|MRGE1IK4oXNp^guZhfz5P)#h~GA}ur~%v!XEGDNt~?Z(5;aA!uWn&X=+wdV|j z#E}Qk1Fnp-nylsbA2U=d5`*@pd6|U=o3%vy*@IsaH0$qz_g+Qv-6MhUF|hjf8_VeS zN$B4z!|B%j!3W%}IzCz; zAKhh!pzLkoUaZGMJ7BaSTE>}ivobS0y=hu+h@ybr)~H^@{zPS^9ObVM&1VeK@jCW+~=p!SC`U z+Wp2=J?bB|*1R+rNKMFDtDD-+Z<#OEz4}p~_Tilsha7~OR5pLsJ{diB|6Lm($UFNxQ1l)P z62Jx^yl*(sEyma;YlWX#{}BoFr~9wu*`IY;HXk3X{JAauk4XwDvW)nL8z%#_;ze4i zOo*$VXVASZJpk2A+d)Mg_UhpNtDYCQ;&68WDj+Hz7#8 zhVQbe3kwgumYgZ>G_br(jL?CYm%mO4Af3c>k)q~LIc(;0yGa@1ri=`*O05gT8w<~a zv@0rPGq-v>t=F$!aNvCgRiFB&tAaeUVl@NnvU@5~nWq$x{rt-=j1-f_3&9lg2}%(N zrsWg#Vv8$p6a1><9ypwbVEa16#hR6}2=%_=@GI~O^acCFgSk>f>hami{(x^&_(++D z`*nSN%kaS=PAQL|7rv3x%75#QEb^biTK`9WrZf4?71L#Y-=9ZRcg^NuJl^T-O%PJLl3e@=28fT3f zS5If~xY53TxZJ~z^LtO>B>9_Sw*RAI(%4(n%Fki%FXRqDI zz}Us8QWFt+YH3-cTXRXtNOBbd>w*L)0%IeF;H(k#;8H+YSONCA3WG&*-rWWaKLizf z9=0N)xiFseJq(V#q6)-Mzch!H^1>88IzyOpAe>Rj%=QSECP*br4~;o?Xpzf!j8% z%w{wiNOf>*V=X2_Cemko{$BpHG8>=em=JA{q9W=qiX})@CZ&Bcw#`vZB(^{&9|}3= zLq_2-IRT6Az^!B?f*DQ~K##i0plq}d%VSEcT--2$24UG9A;~&`__d+yCsyG@O3%T; zl-aoDiN3m3Bm$FuZO>}J0X@5tE^_!Q&V&9y>WTzQ`Ds7U&9W5u^nEKQtUBT{m8nNN z-!el+G|;$Vm;S21Wx=@$$J1mrZ{QgSMesr{7irl|zA^L0pF@Z$a7D6|Y0LgX6kAfn z{!EIg5sU8k_`z*2oqp2NC4J0P@7GX%t8s;p_Qv@Z8|VR(r*v*}*~M9y%u#$h^;qiR z*ScMV>HRo|0DPxkYYcHi)@3VI`}1UvV#%9s%6$+Fy3{Mqm1qShvGoe_{Zp2t{TDwk{W$#37a0MDLx)$>|ray?k{nH4Dm zfq|eKwW>=G(Use);Y93zH4D*&3Qk}!$2XFISQvKMhwakYB<8KV0cCV?MPz=28<4|D z(pNdypZE))N9Lh8$H^n9=>ZZ7gDee_PKINXTo{R%3)th5nkEIhglgC92jo{?&QH(} z?0AaPqMlUcs{18p2&4(pPsv;n7S5$9k?Jret!jNxh-=DnmKhlcSmi~#t^4q`SuiZNRSIQBTG*w_M#Asg1r5@Ebjxq(f8xXRydhhSx~@(-XlZ+jBcV? zm$**hQ$N_FP6;XjUaTw!sUHKa(&6hR8Jkx~K?ibh#sKzGnU4~5i+Rj}H{y?#h7ugr zj{vb#mn{Wfo_sh=oFtzeC>Qf zox1XKtJ0u|=Ew_kTId>CW=3Qv3QDl6a2d>1u3ncrO||vso0@|FIrlA9R(w(x+BW%d z1AGl7W*;;Vg5qRRV#3%W`XHK7#2eRC%?J~BdNC#81@~xHSO0~l#@q3di;3tLpRVbZ zzG+Ldv)=Ylmrc=n1vHXbM&U!#Y5%#%rU`ux?vWQI6!}86ah-YNh8R}ST1meR8G4W- z3=4N|funrJus4H>BEW>d`KqYNV6cZDqZQhS7J`lF@@Oo8p(VjBv5G>h0pnx`kvtY= zFI~%wKW9#1R-;U*fD~{=rwdK+=44VLb)ZmsNvDHW@`NgJ1t?!kG2a&*mLP8La}(5a z=C3m~Bg&Q}zgI3@-lX%<+Hd7?aVuBKqXlHwemq&`w;3ErtHWMAk~ghZjedlek_(zU z^Xaqzla8)uPQ#QIan5oLU#z(zl~ZRL5@@EF%6AtQ47Ddzymfu-nvkQ$-<^9S#e9@) z>0+2u&)V)!Cam^qz*QaKBJS&QyB~bP^MD?FK|{Rv;YQ|U5h{l|>?dQdg!~ZoOB=dt zsi-}{PWtvzsRKT$eaE)YZBX_Zw5%iy9Ipkc$u6+>)4gk5&9Wn|E@zX+Niu}(t{6bM zM26f{-zqWlf|Q*0AjzM~u~fh;YY<($9h>~Cj7zHf=jkC*x>vlT(h};7bjI$dw9vYe z_XE*pZCJOs7H8N+dQs#Orv&bm$9a!T8cb{@Xge7(sg{)_v%M2il@J#hsg86sWb4Zv zZo)9>v~%~)^X0B9&&}_CQb>P@e<&*A zTeu6KREf2XmbEA`TuwIsh#q@U5>MF8_YfF~r{v4v zb_bll?ry1J5_I>!d0LoqZ<=avMrJ8auH;bT9Y^Bci^!1XmUA65Gv<^_md&X zcQ5}WqjipdPEo{mHXS>4FF#7EwBc5r(Z?GmBz|}|jrt7omH(2cksS$=i}DTC$`OFH zQm@k&{kfy)uu7hh03plP$R0H9#M&7JWzQnhGOglkgQ%NPrA#WJ$(2F<9EVf*gJo}= zZJd0Oeq47zm5o9Br|;g{*2@9j`_`B2z%?x=?)l^wzf_-yIj<^{((;NNb-E zImKsjbyD-at4A}fHhc{_kqyGtUDqh*n${}+{0|iw9 z?Xnn8Ngrh-kWa?FK-Nu2(MfWkDiX`^a$6W{zY>xMmG~wahB0DJ^1O*+Tu~1Exs83= z*~ogE;=WpcoBj6A`v9qd&fHlEiO#<7aRzfazM*sQ+Bj>EHO#yfa|MoQZ$oj@**@ze zgK%G3gpIYbpXS-+*|{cjGac81sg7ji*=`&EsM@@K)7eM~ak8!+ib+>ViZvpeG*AVN zi!Z``wUwPLME zHv>SkQ{<0qGvoM7G$!}n4LDSH^&(w0RLh#_&s|ih4d)avjdaRW3?a!b)x2yGqp-Yy zF$xN9E)ozC0o?F|siUkQkSVVGWbTV$#on@c=#0YY+Q(sKA>y#P`-|X~F_9*-bR^GP zU^@u&nrqC8v$VN|UyJ+^IO`*>1tK>QuBL`?B}yvZM^WXMD_|Cor#ANMg;uRYV22Su z*m`yDCROO2m@4|Ey@0k(f?ob5d=>@KKf8x;bzufl#V&ofKtKQx;*wh+>nw3TW@URC?JbVITGOIoiOu6L7_F&cYZDe=jymD}#}9^g!nFt0w;E*X-|E^#|KlGFb3;p;ZwTxk zA;EuzYLu-Nv6PX0XsC!_*H}7&ZWXjjl4=qvni@4WHTdM23e5gMHJ*~F_cf(&OqldH ze1iGDXim4h_^@5DmV9x%g#xYpqDvO8hq~Yh58$NEQgnL)nSI1vd1wuVoY`gi;T#T${ji;~uWnZM1Jd@LW@-VoVnZZ@QQ|Wsfr8)}U&K`)(Hi>bVSTc9> zA-l>Vr6L*>)jPO}xZ62*?X*GE$`L5ZWn;oeR}wstv3j{Gvy3cBeAphUu#-nVJ=Lrc zxq6U?dJeC*14{CZIFRIX!k9jHoh85Ypy~P!2M=0{M_h4-1@Uy5c@>&j5us=@37%we zcaF?<8-t86OT}wi4`2O9VcSK*@+2o@MSk+@rI2HJ>tIFFmfHIAgyo$Ewr+g6Nux#U zJo_A}@IqcVj64EM&1jPu5um{J6XzKgxS2eu2bvc2b+%F#!V`Xr;gRP>*c*M`9Fc5X zM|{d7%5?nRx_(;?s{rzq3s@;fB&Mfh*{9mBXyK zR#*WGo_ZApm+w|8Uoy+wZUz^enXb+J!%v2H#vA-%?-l>`z7)9No)Wwz2c7~PeYO~$ zF7FK13>^JS+9CDUR;jCpxC2@&j2fD}_JW1Hw$X*W)*BQwPP8y&!|4=Xi&p>jcrKd1 zfG+swt{Z$Z;WW%@YQ3Ouc&=_Vpgfm>VX7cgfl;UcNlY}_^mt%(pYeE2C?@YJNKlIP zj!4r@#C&oj(cNL7f2SbLt?pF`ST!5FwopK6Ac?5Tl7V<4J;pUzoRdH8Omv+VxB!IL z-TDt$tHaIljU$J>%hhL8Dj2GV4QtKpIbmzdE8{D{KyqM=&h%YcI{d& zI*$2wsObuVwePY)(zW5Q)czFRVcv*M9Oaf`K%+QX>-9RiHd9|P`P&}TbP@3*Dn44R zct8O<%a(2nYCsj)`&@CAlH2uMB%gRu&fY)yR4k66e3I{Fsp5MJ{l8lhivOoelcK!T z|FVPr*Wxs(0qLc*(D^wvNyG@rF9sy`!(J|l$Os{qjNb()>|0gvTk<#Ds5ApxYFPar z`%)DIG&wE)8nse_a57{1KcVw&%3fV67na#PYo>2)Cudzt3hrC%uBpWFzjiveu0Hba zx}Vk^zm77#o<5QtX-Ii}Z;XG$4`}$YFFEVzB3`>Mo%XuO(w#pfH;8)a+bX7$YVATZ zxqA^y`#nDX=_W#k1L3ap5HGZ<&{R^tFkdR?@?inZ`~}1~Eg_$ggzT3qK95#?Q}F;% zzzX{A(@9>z3LSa?^pUvOnpI=kNLm0rQFU$%cDOugauxT|rVHi(Q)mEVRH;#0Q z6|Rs;3l13=R*}l=*AfURrxtZLz(XTwC!>dIjxQP{%JTW*mDmnsN_bVLQSR7J_mcE~Rxji`@m(?{_ zLQ-+w-9lPZn@%!XBr&TM)lm&522iiY+YSj(Y<8#d zU7-Wl`t1HVZ6;Z<0;Y1g5FDJq^>iT>#~7Pp%V(6OCo%JK6}SL~msu{FvNuQ4F$~tu z+#r7Lg17!~AE#N$+TXw^diUbFq(r-#^&YULq6-Tpu^Xt5xNC37>X{{zfzT%m1XLt# zev5|-K$7uPC*h9KyK|6-IYx_!Y_c9cMCb+dFeHG{h!ZtkU3ymw#Ha0u0Awzo}g4<^lx+wwF_W5@io>YzmfpCZ2*1%rA3v?9G6ww@uf(GC58PK2CE7I}WuT+~3uRPs7rX{DUYic^0-BpLKgp;75tjCJYW|zW zREIV&*gEiR0z%0tbb-?Ho4tx9XBrx?kG=or&fo9R!&mYTG^FF2fqjs&HJcoUS~2*M z9YX3dEqgr}c%I{q+Yr}zip2z>!GNA2O$Z2+Z9TL$lM%FNUElCABQpFLaw?mDK0|ny z7`0zgU|c`dPY*J7oj!YYw2p~3Y1=CZMi1E0v)nV*oAC2j>eO3KiV^=>aYdiLeIp>( z7i&w{Q2OGZ)~uYw+bHxkOy~F36cK^d=u%YQsSHjnW#CT_9A+N>x^3;- zqALb}=c(3>j?PG&m+F4S@u8JG;T>2IxlKj#HBi1Xw~<-S)5Mi-`vCR52;tqcg%SLz z>)3gLA=u|ZW;NrUb%eQb8&hj~&4QJrn9;y5drA_U_w#BOH%>o&(uz?8*t~A-BXpfhUR=okjBZ@YJi!B3~cd8X$WWBGaIQLMBn2 zijx?W#PFvcqMHq$QA)i!3@`PeIxEOBJAx$^B0h-CU$0m3e4qTut4ujPVmOLQK+U0M zKgBpPBI*b<=|QH5ye$%T>-K6Wi&`U%mq}EPCog0G-e;YpKW-S%lR_lVAG z3gTCWD}`*f1njd>`G#IpnM2vBi;Fo3_Gds?7Fli9@-af(#yaZ|J-abDR)TO;A#K~m zNxix)y>oIj&(E__Mzd_i;{#?$f|2r(uj6(6*q*xt9xUx%Ze(&dWsnYm+(nbcbq;$U zTQ^%ETr@5*FIA+c={;u|kQA#^wzGUHA$3+uz><7{$atJ;va*XNlaP)a zJ&l<^hGb(gm-<6;D#rCz>LU>adJMqV90O?wkeqig#dv`7kW1(K&X+I>b#l>P;&~UX zR-ck4jTvQ8G^=B~Dj92q6bwH6dFF9gLq3j?efcytE%_UNmY@MXtVXzqm^_Hy(X6eK zC02Q`ys(@RWlmxib8}3KYOm3uoI{UBqJV6mx_h;%vsvD3_hx~4}PcacXNfpsm z)ieHjV==GhDY$Y=U*{ybgA=-|xwDQ+A6Yg;B|NiN7rV@aMChsAgRGSld9+ZF^m})m z>?rw)M4TVK%rDv!+O07%?4iu2V6Xh4E}PE3gJl0mLc#q$qXR=h2JixMY4w&7TH5Je z(T8X_0q^HG+GONxf%@7l4bbuJbk5!LWbf}d1|89qbg*)&bMyhLz#UU6j_9K|v;%xC z^8OLao^)IEB3lFP$SZpghYq1H%0b#CtHFMt2@zdkZD?{=%jtE=+}IXW%`8 zG%ng57S?9I&{e3%yI$#3vVSdDm0bx)I?KDH@3AdXN$$+AowfaBK3$Gfe~ecMVYqpvS>FhnT%)rYV9~N#>#(+2`oO=e6Ed$L0%&tG15>x6>M3x(<#b zA6uk05=XiCV52_gqqpgk@yc}3;xEUv4jCyXy(U_Vno|+MqBhCD(?0K0Y$)qkoy5fy z<%%l4fobeAG*@}9=zDq345ji4^Om5`;28R~<~3&Um8 zYJKUkXH2e(^<$BAIYH6d?WjH3iVQ+SWAM%AJsn+xl~Q3!DJFbq{P3f+LPmdujE0}O zNj)J<5n#;6*HDWypAiZquqS1vnc>mJo$0KO4vvS05OMRC2OM@H&l6f{}lY zU4l|`&7K+G(m$En^4S$ubJd=DtuJ9oaWfDOG!84OVh)6Qu&2jgPahcwyo(>m49Z_t zn)IT;9bV<}w3If5ZNRSvwjZKjAG99iNtN>rWL(L%H z@C{@;h4?*3z6Y@cMG zRXb%L4L3M$i7vKsw}J#WESrkAf?fst*@GbTLDPj)qy&lsQpDq}_Egd1>{l^rBB^%Z zDinPj%b#>SiWo*^ANSLbio2GvnW`oTy_Djfght#$0&r|Y8IIVBDVL`9Nr^h;MuAM%M`DBmsV;7(%btgC}p zs*sRdWIX92n}bp-p(c(musS$R%99^eS%j{npuhMHj+wwU@TR?7zK;(!CulFFY2#S> z<4&4JdnBeXWr)v&TicYkkouy=W0po$c8Km`eEx^U2m!pq%e6qReuiBRUkhDqM+%J^ zi6RX$upBLzLFveV!wgpay1%mlx(z~qtzgTIGd)!M0O&Hchym@@ z)7|H<1NyOlY?j1BgLLMbsi{ulS5h9yTCCwqXOp`NbC$F3rtpJjEG^h`=2HnLK_v4c zQ4N>*2PdGO%I+Ki@wRdfVHD_=2??A{#4LYcGYrV}Uo((o^?#-s9}Z%4u&$21SndyE zwns|V{JdWdvS>_2!+PmHMWa?4bTbMg*bkMY*OC&beMY1ymXt+GHVjVjV|O}nce-$} z2i4CE#%x-swT3hXHqK9}{GFQTg0y$BPEuhFtSMw=Qg6A8NmxHB%TsKP-DSL6lmFzE zL>MSx))z}SoA*Krr5t7V5W4VNP&sO3n-j5_svJKa)_cH?!A4JbIcFa@HuOxMBy>=xLrUCCMz_&4GOH9wJ)0F>9~^N?In#VwF}h%%lt>Q*n9uy3>%m z?t1~^u2(GJZZTuZrUJ&W0)WKuc%%>Q=pGO^UE0wlIeMg~BH^xOCh$3qL+)t41QT0m zRE17cDBcdY`fktICYhOz;+z2(P+7A_-7b?hFkC{-zgRVBSe>@GmB_F?|KrX)&o;ZQ zOjE63?`Oy0!5Ldr;zsNG_m_^s4JMEIFnZHrtxo3eJ~AW(l^T7eaA!3lj#>ahv*LOv zwE;J|D<>|JZtvc%ipbZ)a{t>A8N56$s_V9}J=&5d{N}HxT|;|3ACk+X(`JWr(U#8; zp(3{wm1Tx_CM|h?*>fq z%G`Cw-#o@p63T^=>-NYBOj>2~=`cahy)+9ej`B7{=$x^RQrg_Z)3Sdx(lX^YwLZu> zN4JPAaNi6UzdWYhMlzQsW)!=*0nRyOOfvP(23@F+SsuF#22vS@(H+6#35N!!MRwb8 zfGdq+Xl0!bde3@ksI}iV=3wTE=2qm z?i}imV)pHaPgPcvVH1qjNW6x^EBVD!Kbd2zjFLuTXN}gJUK{$W;LVjeMF2I10}#&V zd9_CF0igZ>g!GnfIp+d_@#vlN2Tb=TFv)P+cuU)vFWEYPTgXAb>o3HsU6C8yOXMp? z6mPurfe<$}uK|hc5I2!`2;1=Jo33YiA3~q8Rv-VlUB#)#qdt6}UUpxCsXcGh1G%xC zUDfd7el-jk?x52BBXTK1;o-$pIGT+&sI#0*M*8))lg-mkZ2Aov0yq+6ggqn(`nhGj zc;$L)jgeJ?>R}(p3mzX(T~~ zdyDG$@W-kdS4m_q;i_6+TFCHnQ@jJ~0j{+dOoOv2xHTkF?azyJFU>6L&Be7^mngLu z5REg+c^0jNbPHTt)Ukd#`A*mq@_6+i6OMgb%<6~XF{2;Z=uoU3&^YXBXf}y2+5hPOZ)ro1iQm=7~JqPP^8^+pr)%FC*!7)?bZd+9n?mjpDusVDAW3I3Eb~%5(&oe(|3<7}u^Frx@T!Z+SyljBRz_JS z<#cVfchfNNHF8(V_;@oTsKBY3vT6Af>bgtK({fTJiBTC&H%5mWr@e0*WxJEQx4qrV zP90uzhScy>n$;rFmZ^EjjiTMe#m)3ziCn5CI}#>Is7mjcNa0$j)@?Fsd61Sn=UYd6 zKYRbR$?vt&=&)(O|2bEvTWGJk8nP9SJi4z&Sy3A}0dE1~?EJS&!FG&NIDY|MA`~@V zL{cmtr9d8-#GH~oyH3H9$h(TfnG3>PxMX;)vvHSTyz7q)1IWZi|qt#guTmPI6_ z$o1wcQinq%6cDGaH6Oo@EwLgzsclcBsUL3@AzkN?Zp3LNz-=6Fr3*8vQ!D-$z6vK1 z$88&TF2ovFStH&wNU{Q#uJLwWj`aP^)H>`1Sll^D+__5JIZJ|NbH2*jACy%b2s77Q z#dfSGb1K&c&sympMxEkk>1^BOxk|uD2zF zxFH770S~^I+y)pdaa`p!I^yo#C~{8n6bydAAJ8w%nDBG z<#d1h2XFHIyQ~q}|4Y`$(azk|*6F`xI7AlU`Y&{{5>OcUcJ433;e9?I%mUnwdd{u$<}HBf)6&%y?@z8FMS+X^In&9; z38a&izB_5r`t~H-Q_;R9DpjLWU) zs3L?&guaQIgvfQzODI9yRUuJBTtzhAq%sxE#pxIe2o<94=cxD5Hw0g$M#;Ogo>O!Z zS45J^*NDl%oGb-VLyiy5(g`DC7%5Zfr^a9w;F<7-lm`y_x{|3GSHCZ#s2mmUv}9F; z!_`+Ki=Idtz%D88$B=fkO*lMBmTZ&gTZStUu0KvR{h ztKerb+=QmHCc`h}KOudL!gF!e0e&%6sZkZK7e)63(*pfy9&dcuqLz(2F5KFe=}AI< zlxX0|QQ3_cOT2ft zB@Q*lScL|9&uPN(oqrN1ygchQMdC!k zn>^KwkEyCx2ftB~#l%6?GOZDd)V<4rpC=fkk?Mnu{WF8h*1(3Q_zjozeY*_(-!r&s z|DUI{qOr|)xw-$E*o8`(vPk^s+=@L(7eI-e6sn+O&Y-@u+E|9a&kFr&%DcgDeC_6`hwJhf((v)8pcCbJQCHQ z$v?ERAxrJBx!douplnN3avmJJZ7`=4XN;GROem~?@&&v@?rb`B&@Z)?VvtiGfg3{L zl!%t)m5XS&H@fB!Tl1EoBcjZJ0L-<5Rs0qE>EvRkTJ-wt`W<9oydfErRUU6cLOT8? z-pUTa2v0i%tU1Db?2PRQuE8kpMDEuw4mh2=e_yF_7`hv;jTGN&E25gJAWs?5_nVWw3YDYVbcSH&(e2~Ro* zZx2gt6tuVmrxixJc}3=O+8dt(0Gch@5pe7H)C*QgVhjLnqeGd&2{{b)Xw<}Gfo8o$ z#W?rPxx`d&f;$?)9u{p%G< zc9z-e3x_$x@O{xRyKH)Hh=I2$cfmfv96?|l>&1Y^-!5 zw207J`YRb-jLF1xe;2kSlqfAIE}VR^1gmT-audkOCD?iM__ySrO(cL?_4?j9V1ySoPW z;O_1kVBYM#XTH-jJ$w3`ue(|7YVG<^& zP0t1D?@p)qzj8YN3^B4G^Vh!(Gpeh<+w|UaBx(#`6k;pCZTKsKBPA(5iBMV#lq`Im zSJ$l5;}~JHT0EIvg$I9O@H+Ukt#o=bg;m7Bco4CzW%k6eC_Aw#L+dAOd?0kT>N&yN z={bJxwestBVrKsxdDSpuZS!sInfe~kPHN>=MvEblZk<)Nxl${tn{HK$BRr}SN4BKz z6isdd>R4n(JsrLgl@VAXWKa6l=q*?&V6u;Kqe-M)URR4nPp43AM~x#$;SNttAR*`a z>-#+ZEBJB5bY|7Y~4%!{9yJ$mGdFB4ls7Q$_WhyFn#1 z$8#FWVn&^IW0TJ8b%*6r|H*2AmXIr^2X+AEr~YrKL7hWV{yDt7PKd;Q>=_F7*r$C! znX|sBA9i2fI3ZW-Xnd$0N75OVqG(K;#ZvGNJygji18S)iKMmR)56#kxKhpkiRK!Kr z5z6rA19o!|egZTUZt*-}eMGo=6)vkc&W6Xp+$waP+0yEPXAWP%@6)1d3Xw{v<*>4p z(n843GPTp9@f3_dEL7Qe-o`W(_kiH&RYMQlzceHf{SghImpX_gK{e$i7V<6|mwg?@|Z&vGzq%J$j*ItMH8HyC8LWpz(xIvDkV4SbAK|%8E`b_BXuXQ znmqe&$W8vGbSeF~LO*@_Q$h2dfx1de46Ozcm6dQ3FXF3O*atIY*(4N1=$Henl6K3N zYGP+fL)|`wPqYCdZMhg7xXt>MWvvDlpyxMD2uVok6 z`Z6qFZj}6lKTA&&grcy{SW4vy&}5p5Iy$*Q(fLAbp<$zJl8=?M!aeo-XR2byf5M`! zeRj%Cb;;IV6BX0?$?icwyma$`HO^q>!pMjvBjOrs>K0;5y~N%YuD~47XEc(Efw|t@ z8egrvu_a(Y$%h!+)%^Uc* zi>HkcP1mrRZ-Dd2%Tcg(l|`*i`i>+%9gO2#pg(zM)*2hlEu{y!gV<%LAnf?+*pe1% zoWC1yh0K5FC&xn)2 z0-ugV${@?s)fOVC*alNsCOp(8jsR$|`pZOYVT8?qN1$v$ECQy($nI6##N7bR4t5m6KX+dgo=^l|8KKZAaQ!*K*70U&0e!@$I`zR#zlHenx=VgH+^Xnb| zaMOM+5KJVVZ?yTOeqzb;ymsQ(!{aUYS2`X;w?+PkvISrV18zKbg$56;{o=&ZfNWDzFR(Zwr#eF4itM5e_!)zAK_xGfJOgx!G`$&uPdL6OS3P7~wsRYx? z)%iCFH9?+>20R#hU_rG%JO7pUIODBwqmyeoktXFCd2Cl*1g0@CrM1Wv>r4H0DX6P? zsi6nHH(1cx3mx8|K2V9XH&5}JSsq|xA=&HfBvsl*z>c=gv@;klo?;Zkx;fuWg}DdU zZxBYxJTxqBl=Xe~FdTxOc{I}{-Y&IlODP&>6(h}rJ9oHMxLF>Pj5?I3Vra-9mS_q| zAQf5N(CuaYcJ1I3l9T9lT3GR$?b@i^N~EC{f8 z0N$&kIQ3o`ETolO(bK1>*{AsHZ!{{ta5_AtL6}<~Y+(b4Sa7q~-np`RfG;9#L9?nP zc0E1L`?;06NV)m**d=pw*_67EsG4Ln%Hr<0o20gQG-~;ha>WwJNyDM|xJOXNg!pj|F@EFx)O5S>3rIB& z{;g{M54F($mBIe6O!LpUtY~6j_1l#FzhQh;7DWK{73i{9lZ3AMIgAorq!Ci%jiHQ) zJQ5;)8t#kuZ0Vtk_WT*bnGMVnBH!1Eu1F5DsXnNSoCveV(n5ZDnWhC!mVNH)G1u{o zOalH+AE*n&Xsm{4&{7=j5gz2MvGy(})>b3PLZ2@1F$ZTGi`N{BCcnbghOx|~O19kF ztc|2zYlYKh6Got!QL`ZO&&LtAzBqk#XI>#omnG}#i5$%cetvWh3OimbOdU z^6jSfgOk{PW?Z7XV^yU$X>t7N!UKQ+tB`N9%vgJ~pd1jJa|dnIFp6lmpQ@m$i;)GB z#wfOJ%R5->6|UEwS7Dd$a=bJzp`bdD1{PM`bm93N`5fq$c%cb>54)zugY^>=1n!}B zsm=<0ND&|;5?d5z6Av(ns{`SKXM>*cTQ!L-O(afJi9VR+Y_bokxDFp5REx+<6ihXf1T?R}QoW)Yga*%ecs8ddCi zQg~rF;Y70G;h9V@U|F!~!lPrAp7c4EIvFA{Dys~p=7wR$Em{>@LsXSIduuuwx{(<3lZ?YKzYn>Z0pk!Z2M90gWV zxKFDcp2_}GD?D2+eQqE#9>Ms0wZP@($wzjHN8-adyJUzUMP{TVGHxmHEd0%wOp}m3 zg#^D}e+)B6Dy+QJ0l_-!zY5kWjwTNOAy_Z_m%U-kBgTvROB@ENAm4sz!Aq`x4tN%t z48C~p^}(i%DwLe>D}o76s}9?X-Wyzi0S)L#pu^z>?GK_y@@zLiX_OYV>>v*;HugH=M`NjS9uNeB`Qb>N`Qp# z`UR%T(SE#ZqQP+WHe~Oz;)~O*j6q|N7B5MzCc<1Pd82dvVJom)Z5_}$TuJpfBVjzs zIMi~1LmF>Tp^RTBP7>S(np(h=@BgU)6&=&`gOLesoLU<~(;@GS^&lGC8Pd6zMM4d0 zlAVOW`w_szTWen{kuFIaeowpqJ(}DA8nE7%(&2o%l3HCL)<8fwlH>z@bdC=8I#dAf zGDFSVLTqE=0GqZNqaWLm6a#ENJwZ13YVMuZ!Ig$iFJWpMnKW?a;&JwBWv*oRnxqfO z+ydJ#^12-Saz3L08Zu}D-xYq1xj)=ae`p?FixsStY-NFE^`?1#aTn@R(}K&dG}O8m zl~Qpx?%VWKJexq$s|oh`q$JtMkYpl?_5*UatA+G^hH=r4wLDwqD@s<=m`Dy^LE>Cm z8z-jh)`kAvi5TR;^{T5cFA$~C`H}+Eq^(W%(gL9&Zl#Sx|0tCsc{K zt*zxhR}}mYwded53;z7=f6V{?GaASX$V-TW9{E=#P;o?dn-P`QW~NRC+==qs{T z@Jk>b8nWOw(B!K=XbaQ*52bARFp}C3*D|#mRHQKv@AzQtt#e_=oH&d(J-yGG_wl)X zeB9l@s>0lXk=NntJRj#$r9FtJsJGgEid81j(t_;?1+%ig%a*xwM9C?xF;Du5+;QBw zra_>0V}2jplD?1^#_RaWm*huJJi*8k_`1r7B}pw=9|HEHYVpYy!4gnGHB9p1E<9&C z*29cZ-_m^-T=ckSXVCav#lwZhJcJiTynJ;wfk5wukmr9;)c19^VG74wUhZfZo zqFS$~EridVMCQT7>eJi!TjW&_uMFsv8dPAGWqxWUc8EnWRe*;$25Mv5GPPqFaVjsN z>S^2v=touBYrc?m=<8>z>SvinUw*6sK1VW3d0AAd@bt(t`GjnO2efptEQjj%In6@9 z7{7~%8-c&WG5UpFAtugVJ}!seY4C836|+MX^Dz=8D=+X6mEXuEf?Y{EM$rBYahrli zlq&~XaJ|mdK5PmVM|y@^=zOfAVKBBKVoC+o*U!bxWIQyTOgT#)a)81vd=dLdgw#en z{5f!z$@I=0k6+Yh{bU!y;Q%$?BxRy@3=CZ+YsgMMt(TX+YO;XK68XnIl%Z{u{I4*- zfU`9&%BTCO=XTrS_&=|J%*~EC@^FKk!Ru-UXW;P}c{~RrI{7X;xWAh#O zA9q=xpMM8>k3T;C@AY#n(D(nJOZ5I?|Nrkr{&>tkgaObJaVP1&UQ^t{%-qD$>CcEz zuVihBB7o@AAmMS!X1(-f?qPnGI$y;D+NTt{K$%3lKIJaor&T-I_;l4~VHs|~cNYT= z_Vt}_!ly<~$~1EY%E7af(d(01mfn?n0=UpMV%2ukw_f`uyDGo2{&z&*#CJvkfNkr>OO^s4n~5-6B{lJd{|6tpk^0wVci z5MV!4XU>mcl(*jz^|rp1x$>JWN>0GN(K$k?U4Q(kUABQ8uw45iD$Q=Ct!XOWZ0Be2 zV7f{_{H%`jCb>|*>O|G8Enbm@cy0&_L~=ao;rVxzX}tzJ#4kuLhCV5_05(1GS86FP zZH(BbbZP9^i_iJ~VBCt-DA+lq@MX)YsZkG(NRDL+b0(9;Qw)3}NrmZmAKdXZL>p?{ zfz5L0x_RwfuyL6bp3(Dlk)u-`U$LvNM#Lzmpk_M^cON#fD$Z^Bo+7mNnIn<3hjxmV zn}m>SNnJ5Y`-TfJXf0!NrJOqaov-#n>%}cYjZy^x_vOXcD8B>BA|1)r11O*r|7~}$ z=6^Z>rEOjR0e?E6D;!i_AuU*`oUgg_46u@llT}QY@J52r1Hq7?be0#^tFkmE44flaLZV(0pzqvUO z{GI@}>oEvGK)UqB(U?tb|HWO{+?hsF>2>aj9x}sr%c<>LFR~4z8(#A9Hz={lk!2nq zJ|CY;^GfQbptN9^6;sOQEiCr8@=aDa3*76@w4hQ_i6`!(lp72@Tv1Ko)4;})0eSeq zooDx@JrB&1_VEHFDg+U7$||}7=2#@j=_U`E#N(7sM3_NX6&(m~?Wb0Xp=qlbU5W{c zk)b5^ai;63Zkjr^4+1r{#%dNaEkl4)$719WT|Qwy{BKW?Qex5L_KvpOmlP|_F(n8a zIT5_8{k(B0s*34z}JK3hx_LDn>Fs?CBAojTF* zI!(*gcMXxZdXFN=GQZw~E)h@ekaNqCWrj>#UH07X7E^!x#eY$3z&wP2Xg^8e>|@qx z(ILW9GSR-wA&AhhJkp_-E#+7e=3cU&8XHxUhEN}ui1g%ySH_njTL?+#RVt>QD)}QzzkE4KTyi(GkOF%d6 zl79wwXD~xtwq$i($7jFCT6;5VhaYiB)J1>Q+QYY5`l#kbyNMpKZvW$Bx}A1s%hdL7 z_7h828NgHamfoNj`k^vW_4o(-ZKtr*RZvJwuPadGcOGo0=8MeAKIE)oQs=~YH6}MS zkCV*3WU&(O(#68ST1k~i8wbX*R=xTi9j0`m|B1gy?3XPRV~ZAx%2GoqwW zlY)I*%dA{Drw%`rE7MRmIZHpISV2H^X7T+W>_?aN$Z+@nWIz3Xo&EkjUj}GLHE0p= z?`SOI0@^(L*EP0^jvDCVY?VV;NbqyP=a<|s)>4FBU(4@=V5ueju5vz9$y;&s5GVY4YjT$9II(zt;ys@6__Chu z`~CvI11+Vs^Qnt+VLr_1y6{*lDwbiXBT>c+kY@W@jVq0E zg!RFFEh@5L&-orm2lzBioJJi@b;ggt2CNaTuBL->uEns8Yp~}4Bfr<`_NxVY`=D7f z&ZKpQ$#joq(j_y9FN&uu5~NcxpHZRWibZ&$pg+QBFIg&-hNJabf@LzqD*?v9E;9h{ zA)<Xd? z6D*nat8+L<4cYzajnmk2_0e`aDvPi5gDqMKB(piywEc&Nu_J+LJx+Mc z8?Gz&)OhHKesVmjx3X;B#VFzR()xIuS@T9MF)fm+De>k&kDUr`Kl zQ9kk*tjnXvgOp8dRM9iRQf7vt){O2B2!edMq)auF{>i*=%~^myyzHk~{KpI2^UkUN2lI?^NqBR6{0fe@1 zk(O>n%pERLZ7mJunqJRmm)2em!oW+6`moR1{Yt47k}_Kitf6^Yj_pN3s%Dvi=eY$% z)GMi(8*AlXkI6E&dWl+jTkkv96IVI;I0GA{_7||n&l6+`_~@nfc{ZQT55&d@^t?pppFZM&Vx^$2*RNHhGt&qDH-rbEV>juxMH2v`TZ1o)mXTHpNW zH-ARFik=(3z5gvU(L*pXmO(Lo;BTi~e*V{p7UXjST{RdPI9Y&}i2pNrmC1j?^Zp^h z`jglNjDG(e|1;70OJS(2{~n3+O0Utv3L{UP|M_0T^E47LI1VQQgfb=4Ag%pUpXbD+hG}FpeK$r?_Vi z%wWtgMZM1D@hp4L6Dp?g)%KvC8LAr%xa?JF#F_jD-BXMUpv)uRIa=ZR02a_S?sfN zxbxhoOT@Otx50#L6Fp5D@%pL~ICXA}ND55&5@eDuxabF_f}{ZC?WgWNCgOM)iG9VE zNLZqJbc}wpOQfw0dlu#^ijfAFojD_RDkreq35I^T5^*B@=43XsjuvX6`)S1?IzUT` z$bP11Y@lD1=3YG$(+|4_Vq*me?(b_k(hap+NuK1PR4XCdTxGq4<%8rlQ}RedVf$QJ zA?nN-6trU`2~n1G4;3^wRVXXmO`wI~Zpj80`OqjJs|YR?7`?Y4n-{bN)fLJ(REq3| zcZ_Dq_JoX=IPdo>QGpXl??MZRGveef+_S0FyE@OR$W_jB3EB-3G}r85w>gNEhm?zw zGqB3gyw9;G611D~5cnHPZ1mslw+@gjIYNf$^1ekazzX>;TFk1r&3Xg5Q^yAu=o-;@ z>0v9Sy}7V%S<0xY!vSUEG3JpjtUQIQ103kTYUBq6#owp&q9mDPiAuA(w*cQ zGK@Wc@Z}yy+)?@xJmn>Kl2qB$7{!-*rE#~APxH&Lo`k88b-_bZVu*YZxc+kYK~gu1->RF1o{ON zY4{~DU8ZetvX55C;5*C{CQmmh9XggzZ-51fHEXO{3QyM&%8ioOQqx*rFDARs!*O(S zJ_WQdZr(!%G&OQF#*L$T^ud0WKq zhy>-5l0(9zjrud7{`WW_V4DFSY@y^~ZBtE97BAK%|+ zzaziQ*jz0-ok+7j(CT4o-abk)RfSh$D05U}IRWFSlhj~Xted2%s0vh?f^D!+rEBlf zS#78*0}Q(}NqtyHAIG&G`_K)G*?Sa3MM^A?nZCt(!Ppykno#HE?5N~gU!y=L;iOPv zmzGdRHc`D%-oM#E*}KtPH^}jTZf2e`Pq*qlj3`^EYG^JT|Az^ywL%SZ&Frnz%>pR9 z%%#{{LkT^sn%@$yA)(0fX)e_fkD4R1d`3{c;>^a9?~4aryrzM9d38GVNHvl@@WCDv z5{6pGtJopn%SrLXHFYNutPR&KJJ7|cxG91L!0@UI(YYl(M-79dT=*@VC@n#_V49b@ zWol%yX1qMt9(xWd0mceL)FlPPw?=;$f}O8Z4^$C~W|ru^ywdF3^k*zinP>$YL^_{JepZ{7 z&0+K!NwaMuiIdOqe;2Wt<}CjBrhc3;l%a!q^|hddW@XBK4Y6|fGX_bimSOdmy&x1f zO$T}gEBXtEDpg09IjRu%RYc5hg`r=U{MRNKH9RoPy+mmuX-RPK)`YG<$_S?9Fzs>w zXo$%ysO-KLe z=``@efBV@JHgGcd-{QNfmJ+HM>T8+~E@m<%C2{d5efkk=3i1I`+U_Pw7<<1+OTv%= z*4j)HWBOyOXtGDDM{xH~Z=rR^w3ac}Fobgem zH6OC}iT;(%(gf3s>~uxxHN(O2OAov@=Z~1-k95YM#wZkv6o5tZ(L7cb>f6tqT`Z5D zjn9DlAd(@ipsjIqG>PSHR5J}xRGW?_1`Ohu3hhRe*uW!lW8jU#e&-G_AqLgT&nK!m%>7!27J#?akv)jI)UVT&Y#o_Qq8;H z^^V08Pf%Z?hO$-pSptem1;-(re}D(8N0|l7N?#MI^99^rbcDKIzDEoBT-5Uo-y;`O zwUpQ}#S7dR-mNQZGMKS!QVdhF5nM`G0aGJqyHA0XT9wo-=&38Nvh}`)ouPt?ymJ>J=#xo7^7jdrPIBv_@ zw)v*UTFqGr%7iJY^G!aKC(5yBM%WK=gXlnDphN!a{nezLxf+w;F=fRjlSLhoNfNx1 z3*sxCm&7OP7_-2*+;&%EoSE7@->wDG%iWKXQh8dGwnmo)vKhpdWMQ6t9+&Op^O82n ztkq&%a$&EG5@J+yM){T;E47`I2KpcQ548D-MhI?yJV5;x3#zL!JcOVWXy$K+-Tjw{ z1sRk7gRoRA|0ubGm%~{q2qTp~2u`8L+`fDZ(S*<|$F^kr5|Nrz9dVLpV;1=^=et=M z!yw3dSsL2;1M_?oeMbQmMP{a%#r1r}@hp|Qb=}A732cM*jFHEa<$fMU`%yCxA0hDu zkHI0aY}9VINg$|Iww=86J)N-*j9#E~5we@^&Iqg;^F^lrN9xp+XZmau0|iQ5a|kVc zK=dng4vXUVbwO6CwP8DI=u%nEw9Lfel4b=JGmKlVB8jLB*IW$`Xk@nS3uGdJCb%B@{Y4=`U9cm!b)#3k0bOe*uZsF9NK zIM|XEZG#~69yP@=PW$V?{A}a;ht!i5w1?W~XvBPzHj9hIMCC#z=OVB;LR?rZmxH5^Zp`K54R` zfEJ0K3IIQ+zlWxn$%m?`rcs=BKAUrjw^y^(6X3Cp2oeC^?Un(0WooU}?O-Vwt&E^Q zmNekc^iXlhZO+Z&_MS;AX;Ni$Yv2^wM;T0renzKf+~HU@5;?`ExNk`}*+lMr9UXw| zk4&y*@>k&M-RQ^mOHS)_Co^iwrD-142aRe@Cz0%zm%^qP2(ZX$m99`K;Dq$05mSyLa=EI#`Vo&z zD()2TWa$!#_dGV`E#hVy1?~V(0+5eFV1F>x=9j@pK##IKRALr9Wma>y1s#Q4lXbg| z*?&$PHW*7ZjolhfI|+}&dlR_Ec+-lMoU3=L0hlzEIY4XH{80#nVPEs<25p{r-1i|O zc2EeesV&5kAZZad3_N);KbFHPE|Ae?;g{eU$+<#YS+-#`&JKIk`9YN(5=W$Iqxrry zORdizzM!ASacZAI>c8l3yDR>aYYa*z4lX7R|89-pFZ~Z}KuvO>;qdbiP|!kDMHQj? zmLP6O`=!i}kbl&P+XADZ)tLd}e@g%`%-@rdr`36yj%PiN-)B0y`270ygxAH2jX|k065r<30n9<%mi~XAu%2l%_yzmqCw}OrPWe852&QQ4BEESOql!GVbs4K z9&f}1oPsNsv$?V!pX4b@Z)xp9lrU38F&8NHr$hx7Yfa&O$af$v0NIRXDj~wWkBtexNiN-~%-C)eHLUFwQa}7}&Gb)Q2b~l~pq<1p9$$bW(TI z^v5SyL$|DsrUNt4VFpJbcD)`GZH39eQh+^|by|1;gnz$cS)gN?V4lGcn*VRrx4gbvgQ_Dm77E z4lEd&w3jtE>+LF0X(#6UYHXk*CaZ)6wm++x2h!?5-(=)vN+!idM&f<5jz*VBDKaCr zi?gO^{rqOSPV$0x06_31uEJcLb*u3t0MABReFk>lhJxpt<{1S{d24GeUn`A2yEYQw z7!J=tS3DO}t#nbEB$cK&iCne|U$RdNYwpR$LADU_Ydv`|MZD*M$sh8h3#g8ngmaKc z$zo`d>J;M1Kf^a<_pe8>ei0aAipDqg#%GS->clCGpt|C@o#^xZqpZjdc`|qbN&>w8 zJClGvkKn(TfS>+Oz)2Urh&|L376w8RJ%eUp|1Dot0Ms`y7UrhURf(|7N;C{})7ipF+7j_pME_et)qP?W#+QE>^X~7BD zK|~n5D8dGb%VQ{IfUk`+Za1N|E3dDy7wFa=p#{%$9&v8RzRPZ0@PvNk?pQkSmp*Z?;*4^RE7?joKPU z$dtu4PyCx)FWU`E+ru+4EA#l=X&9n_DH4D=a7MED`%Mgx6o_S*zCy1hCIFB+9I^D- zV|`TN>)tD}!{cDB19>k3U6vcFFt^M~CHspXRg5v89D`u;JxFV;NyN+ss8z7g-y*ev z#y_0h7B{lAHwnP+zvqDz06ye*l};48FDk}s)wo=*@c^nrhvnKP)CoE&?R4_ji8dwl z*_%tJSKPkZ3d%yp@=bgv;2L^OhAnYQ&i35w>d9uaLvpTLhz2~uMaWt5bWU0hb@hNw zd@^nI_YYiskTd8E$8&LZ;BsY@&DHIrmfe~(T+Tlc!wbn61>ryXX^NlgaBH;mvhw95 z$|l9a%i(^rj3&2E$zxiwi;Il)medPA51n#DTkYOsfIuftPm8!eGuogL^jweiVsZXD z>t#-iwKQ0M%bV>m?rZ+C@J?w=l<_F9&<@8nL}TpCFk%aZ)E?IYxx8uH7&L5_-_HkN zgm@jPJgbz@Elfx$M+jS3YG!qXc#m-D_VTIdb)b^m7sH;)r~ez|3APRtu&k5f3g@?K zU1|t?o&udPqW}IA_V1+G%EyX-rP;WkE^^d}D7R(EMTI=_Gi+tXk{aAT2Rhn%+EUjB zOY_vzwb2{(t-Kw`t8{*Ii$sK&U{ID_t1I7D5JxbR%(4%vo;SW8pR3uv%NTS9icQRC z1#>0JiOg@N#!{c4mc(Adau|F!$^yEpk*Co!a|njgA{eb6qDl^|h?n;aQL|;rDj7pK zX5!%ACh#%>J@uRokYJ8R=o{WMFlEeXAUA}~saW*bXp*Aq>~IzdA+Ndki@0K(k3C@( zc8Is$1@i9#xap`*_6MTU;B%)mD9TT&wOx2Z`W`b=Q`sGqK#K z|BeLU$v<#k741Om!{8>_9qlcyUvewlSE%6481jO7&jbVqaCGu>rUQn=;rT zpa5RbaDwUjhzQ~z{0z*4N?oWuBmq*1mB~Btrj8;D14VHA&|n1KpN8!&wPG>K-TeAK zF7z@1bwU|Alx>>ALQUEgUrf`qy0HU53zGSwwoyR|Hb&jBGc|E0DX~$?^G9Q-rv9wS z(v*e+7C>WV$!Fu#aWK3=k)%+U7?`y}KIqXf=(-W*7#w65u#$|)O{nJMoi2983-*zE zP3w2Hs85|{`$YK?(#}^3=eKF=>;oDZ*Y+RyHQQB#iJll*{rnV82Xd`}A+PR%B?;nK zqI|oeMl;R2QJ$xi`ns4JI|YyX3w-zXXG$CYGg$EP?qR?#y!7fbO7HEJlrp=W zM}C9f_3^Q>)!;oN@W%>QI?09ih249MP?OKHzC9C8#2fhUJzD}>@)*NE(4)wBJ_T7x zMXjOsLqs57eKNqSngDlCA*_=a-9VI`A)SaHcqi#I(|dtvK-Xl~{-;ZlwDR3F4M?CO z{H;J${g=wq|8VUkZEI#>1Nvm^{J-ple^#W+m9>;+4_DLp9r>;n^FP+&8kp+T84Fje+8hG86%uByA}So62(p+%L&gRt9JVY}hn3Sxpy3AxSQdWr}k9yd|e}Do_gj#6(E)bp#-j zmdv(j$70S0%h^7}=*^A?7%Su_fCu!_1TQBV6wl=L>cemtM>LV0^U#uB!sww&RKn)n z%IO)H9c+;yj4o*Z)WhcDsB=6R=AKq3GnB=I3F9!t8l!F{nb+Yq#Fwsh#&I=X>Cpj} z)DFeiMH2~n;e2@8FdxwZFc~_X!}aHEQ{&)_zzN^KLm+927OPL=WkXiX%@$*ydt}WL zW`t}B?-6-3f*niOQvR7DpR7VxVRN)(>1tpur!=PbDM)7QD)ym8hzd?KDf!d;TA;zw z_c57(v+DVX@;w*Txm*GoGwH!$3n}fNc0o@BU{ljC=b9}L7MTScL9`^xtS!+)Y97$~ zQS-%6an@wqa&J|iH7%@#xJ8=N*9pb>3GcwG8$q?`<-vlvsY_mfDl@!0k`MX4MaT}L z2f{WrkZO2rjXakNCUR;i2r|1mfVP)So8OP=GTQ#cY2XqC(-Y>DWWWvH2%3Xw6N6If z@;%2D4*B56iR8qOzeNr`ML11`_c~B0T~3DCnsXf6~gxos3Mbh6-w{ho|Xky7B6f zkGi;uY*^-4>XP1U*^b#RvX-WxtQlEA|6y zd9b7ElmFmV>YHQw`$ZtUj%%aHf$)M6(pn1^0LI}u~V>UUcIAX zmS&D`wO$j_OHz@t-)f%sLlT8dJJ4C=ej@>(=mNq8ml5GCA*7vrK8r)wF)oL+j$Yj?g>mhvcDqiNO?k= zGWCAT!Rz2xHZ2gm!~fQJFZC~lls}u51f4;cHjy!LbTlygp9_T)v}|V>QD0YF0)wpR zbPQ-Bs_kXCg-QExphIimiA+v%@}}!3IO@6NLY2tI>#j;agHbbu5_Cli;!@-(hm640 zcv%q;_+n&NuJeJcaG2?U<)ZCIUEE=mSYe(iMRx`CFIc$tr$P2zLJW9645Xn_zvKwV zd93nG{g{;x(TOeeqNHU6E-~?M>JH6KE*}$wf7YU8v3iLo49TNZWr66Bc=P8Uth&P4 z3I@jKkfI6AOh67TEN`WCD&|SMIupCy1a9^ymE`*jFz(~KXz~JUmXA2AHW!NZ{S0mg zm&et^_a%A;S>B<4FT9J3#HMGVee)aaK`wDBVm2j1wNkTUwVUe}8J)-rL<5HL#ZmQ2 zy>;IBWoRl?7szp*#9XrOo2g&F?M?FJJ71Xk2Ip)x{K{_62P*+8SFzsKH+o}-#3ohO z*o|~^u}4&L@9c^25bk-bb>qvCo(CJQLjb=sB)Vmac*ka#olpT@zOF{rk|J_5qb_{w zEcx0u6Zl9QMz*8`N4b_a^Yv_`PS;Yd$_=>Gy$5l-dWVG#g+Q+U8nXBNYs@?BScEL{ z_;ZI=KYWkIw`yRz@~&coY{)lh$Z*tBbH&QkYSDY(B~qpX+bM#%PtU5WlGnbriJxs1 z>?(X6B{o5$MZ>knG52qrolY``2USFIm0g|Mo#}0ZHj-o(Pz+A zlY-{`#i@vWKwZ)zUOg%5#4zd`ISUZ(*h>;vHQYijjS#O8B&?!Ic z^jo>OoM+bVXK=duzPw(dbb;wIw{i149ek0)59!($AWb}WZ4+mAb>H!5`N7Mvl58y# z1R%)~Mr^rlQaCMcK*Ztp%*84XW!$kg@MGG!dwB24Td`zQV?i`l@ zpvo*vs`X(Dp!n(KiIea66i(-|izT8Z@}xjg3(V6cPQUUPX@ zMRi9~k_Z`0q(jYtyMWmcE0APxg{saQ)|XDWA;vq3Zi9XDEs{qR6IM;L$}ZfX&1tXt zr%tZx@&M)l-bz>3JH-_JA>meLWA)OP!DuxFV{;8x4<52U zsQ!*XpHatjwZPJ^Oe=ioy>>^=gJ*`nww*&Zd+c^_*00Sn3=GHWWPCG;^84>eQoiOI z;u-+$e~;BkZ;r=`G5mDgx^hQ*79L^5DZ{ay07=AP!6_jCnyNDe2b!vrI4kgLof)W= zx0Ic1Si-ZBtDk1@o%mPT>EjAJL@yqlPaCgLw<6N0zG^>~FjgT<-GnHxo}&v7fJ~I# zuZ8?*oqHTs^zr=z!nrLI?MM45Ln#X!|SbCN~83qdKl}`YNGeUnFH@W`SreQnXWybCBrGeE!uSW|96L&TZ zEtfc(np;x*0pi{T0{-9}rcpr4=Wgc@b7=74IKZ-9_@E=~-_CA_Q zOmR?ct77iC&%3c07 zxt`)h+qta9E>vCPIa@@8FiAH}6em#l`UeVs|eO~*Gu1j(tEHi*RFQLy~T!4E) zp*qr2KvXJ~Qml%`(H%$Q3k-#QsJ~omd8v6iKdVU62MOh4&H{#dl<0IHn} ztX?ZURcpv}{|PK|m^`>2F|!}uZ#8$Q_1ww4$)ER=`h($@xP=h+*0)T;k60ZQphwTV3V1qKi5ypdfi71uz2uzF;$VcIHQFlA9qDadL zrt}bck!|aPW??7}N0#uqRrlDCirYX2Fj2+bU3z7?0-n`=k8i9&@K(r765Fsnb)r9# zI61@Z-d{IK#*@hwp=tL~)8`0t3^1W5C(JAy#g-%c&mtag_~2xNmRuP|=LEbML+S0u z2PhkgDI2=^+k#P7e^pK%cCxdCiJuG+CYF~P&nyZT-565x{loIYfkMWx2?~h+gSB^z zuC!a*v@3Q}v2EM7ZQHh!idJmfwo|cf+qNpKN;=QpJ-Xlh_1DjM_a6Ocjj{f$`^UQH zyykUY=R6PNznviS|A$+Oy`7n*`TuO()!)6bhfsNqwe>8U3B!f6%8KGpBuq!dlE{)q zP|KxT)-gd@!{&j|q?+0o?&WEm_aPpFsi%L3fIG+~Tq?VX&u`iuW)S1jS1#Z<0#xg_LaNy!+9`_`$yV4p2L3J-qcF;BeMLkO$BK zkD|YNHW$2xSwZXNL?M=8TsRud6!X9qmjVMWD|4JV=%Z z`IrNtNT<*Xb4WebSYWmcY z#qE*9sw-+(xZQMSOsyZ)9IAWYP(wRt=8;w`D6-u{)DACHH;!3 zd4k*FqpAD6$6Trd@g;mL*m3@O;vb-0AZyggXq_oK{j@A3+UL$P=wOV&zSog#f!oaV zSe?RH;;O||V=kRlp<>fxY6_Q)cV<_xCNdKYxYB$;vstjKN5xu+E*|YUa+E-L4{~ZKV-$hPb`wz>r51X-x=5)tIKaek*lwwo z?xlxXmtj|tdQG1`e+DgAo|f1Ry`w)iI7Z+UCElgLaF6NK;U&QWtb`5&7XB&>I0F%k z+sQMgHMgvO<4Xe|$xYDm8_~76tp1Q01Ut)pA63aeTs-QTkuEHv^yD7~G0YkaBFV2y zK!i5MxWH9eIM2aI%C-GW9}SEE4t;SMJ5QLRl@INp8 zJgxNjgPW7m$u|HZKhe&?=6g4V`uPFmuVT2bxo$LlNV}1iWD60*EUS(Z^zz_@>eTu= zq}HcDcAmuUXk8EJ5ma|Xn^BBx8d3UAf1A@em{}HY21eiT(?)GG(>1bzuDfcVv{MN0 z7wm(TF*8-#L+zfcM$3FuJ=c*H zHl4omTk)Mkg-g}-IOcDxruenSnh&bVGL9;4n`dsoCd!o)H^6a=?N@n~W2(>SB=f_t z1tq)bYBxy|QRXGNO`+$Bg1;l1q*J+y`;{e3$Pw~Nowno*m7wRILkTWE8JPldmwzRUix)F z>cH0)#O*)jW7rIt)swdzv2!!S+R}H3UI4K;2ii4okKLiP_UZzx@~1&kKjhS%P*GpW zYM$6{_N*v%H#R!L?0tWnzOOpLvo8)*RR`WZu8!v_Z9opC%!G2uP#585EE{OA8e}yc@sOX zaVn8H+8=2%p}09tVAxd_gkFyRw_jXzKf9%$FvMEM@%JlLqj(h2Jw|nJJ_~S_d|3e=@m~M7$G`- zCk|k`PTjz_8riD#d6mpvY#UheAUC%7rpP113!)ShaozY5Ug;edy()i4!MgRs_$#+A zuHFAN|G?LKu=K);opC=2-rf0;Rgi*qHFeQIu@QB4CeJa#zvbaQkPt?w$f@7_`D9?8&o!&7I^PT1C$xAS*l4U8C2*&~&X&GZE+cV?MI7dEK63zM;1Hn*RG zLR^krCYyN;L@qA*)n{F5V47pRG`M%>N-i z!_0mB6abIK0sHue-z)7R%3APC1zbV;yB1dLKd#o!_BN(ps{8+L0aUi+76mYP8wpG& z#_1rb3Ci;N=_(gLVHiOzfEg*J8b<%raVN!FhBoOEbtex~cI!7YavZ8*FX*4-7VRiT+NKoXpK)XortFLIIrIkN7`s+c?8;v~4m zWx7q0SJ+BIyt{E>Z6`InF#`{+1e2;;qMZ!8x!v7rm11(BB~kvTW(HiM?z6+rFf1NJ zRF)Q#8iv@TkTYze3?elZqN0T0x{IrJ9HBGoGk;(7{duc+5R%l?egRKrVdOf_xc9QM)RO)JD2ogp@{x?|s(V zcS@p7d7j^iFIvGUe_Rrr2H}<=`&AyBuD1mK4jVooUvo9+>ev zU0iAt86sO$-z?B_syezUo| z40bir=kXa@$7a*xm^R3)=3l7~hknP!!>j#KTi%Ok$Udd>3jUXB2J~A>mGMh8%lP`M z{_m>Uf2cY9Wg`6-&7oQS!Wnr5^;1{-3EI=K7Xu{V`&}KiakwjRu|cl^HZ1tq_h4JR z02k8QqoGP&S9dVBCRxjE+XaZJNFK?JU=mxTdn7kJTPdc6^yx$A?xUH}P?`C&pYEjU zY9z)6=a@SkUnph&6W{Blp3jH99Uz;*6WHtnWOLMsS$S(Wt!CXVm3hs9rNqLDN(?n6 zRuuBWQX2K}dr=*q5f=66@{){so3FXwgDYc#8kcQ4-f+~y670kTaV>vwjvA&_>siUQ z85-uQnPMg_)dZ07u7_X@r(KpM`mSX&fN>iOZDIlO*S6iDm zFh7Hm^m@HLy?}Vj8I{XQ(^#(lR4^Ii8A(-$R~R?^ni*G}H4#hLzRY!cSp|HX$`}X@ z+yNU4g9NEJ99A}enP>stL}!ahH7E_cK8=~3k;TVfzhB8I?mEsNXUatsBWA1(cLGEM zfZ9X`1RI@i#EvVGHJ?BySUZ@VMLSy8zontIwqQyo0O!<$gqq08Cqg+M^{sfHCwo`hD-^Hqo>Kd z9kCxqFStzx)V{6sYE~_raP}_29#gZTOT@geJ2^^hW*v83GrV?P^j?c)oKSi-f-0Y8 z$*zfuk@z?3xs4l#&SRlVka{KVX;{;4KF>`6pbHZ*LHGDG-g>w}uEo$P5bVK9x zge^912XY{ml*&gRF%xkS&<}LvSR&(I=Q{#Z%quv}7RE{Ep#9b+r79Af2dkbiK^&4? z+`cYXju>PU!?T*;_s;3X+LGq^W5z2N)Nrof7?SNEOs}w=T~5mkix1~ZxYHMVbOb`N zrd%ocqSY!9ATHYil9BhBjyXwKA=4ADD8I5YN8%0Q+}e?I^Xp(2s4XK6C+_ZBm%?}B z&{S+`Pc7)eWx%!+X*n(pL1lq8k4EG%tN_g-Y(o>>GJy-U=e=+Q(KNc<%-PG-PTUn- zF4-7N(*%8}1umLO5ewN%(S~;8Yu~2t-aTAJlX+)%pYrhe3k{Sgt;k6IOyrhQQ-y1K z@OyR(rj@@G$yUk(pqf2So>7ODUx%R$@Xs33vrN(9YWdRxhd*ZFyMC=7&Bk1fER9OE z@ivh1pw;)gdHfcs#E)gFL*w@o-J?>K>9@xKZV{`Iw$cR`b#cZFI$kyKi`)UbY;S$KIFFWvC!FG#_@X!0^#cVid(42+;kN0;2{eS z|Mb@>{W!X=X4hj&clonpKpB=rnpXP$>MFfmL$iLkElg56`P)ZH zO@Z!v_b=Vz=#9!2i;7#0U0Vp9TUk*k_6Z}5l0E~)rZNcaPWCHW#5=I9TT;|T?~ywN zI^a7vDz>_^80&_7vsXwVau#km^DK$BM9K!)`0h)G8ZuLdD*d`qUIK7DfG|_#ePaz%DZ+ zXh(G_ zEbNLMQTe$daX&hVeqVfpPw;@^c0|}Oy5@g4_ev5L**mW(Vy#OXCM_!sbw*Y*V7<=M z=8&+DYi<+k_*M1>k4-|8Sa*zVxW1>&YFoD0l>eD(Y0Dxu3K}wdO}4;xJ3^kmtk~B? zyikJ4;yfn3LFUMU_JM9C*>j5`$0QSAhg@UbJj;4|Cu`ltQfml@CO9CWm+RHHB)W(< z@75Z31M!a5Ao6RltnNOc(r8c_r0${L*O;+Jz<*FVZ+C7|)QxG=;KZR_ApP_2R&7S4#34Sv&L_sc zTS231P@O(bJjE*0L`0o>WL>O+Dv+Yo zfFJa`pj0@=by2B3GhjBR@UehjET2DsMs8nlGZf|#xGNZxEPgOG_yP6GFIurBE$4@z z*RZWv1{~o)!s8_uSnAqi8CN7!yj*nI2Ye(+5oKYwX%G_LC&15~*@p~EZR(%q)fU~2 zKRjOz0s!&vsYt)sm%63>SHcKy?5g8s8ZF^v6Ae&<(UX!4 zvV{=AE(fJ1MZRVFsqn;Fd27YVl!qA)8D*Jh zG|Kxl_f59<&Clm<8Nbhq6a8;lgYLis&uZ7DG`iYq69AzHzk^R$vmM#umddXh0sfMI%hgl%$i!FfW6r531L?cTwtt*IuW z1#fA31}{n8FOx$lsYWFvxeobuBQ)g&H%;cqv&kN4i3HO#XCcO)YI4uhP_SJz3&A>g zdkw;@#nf(nRM?D7jJIdychZT>z$f}#HA`#rk|eWu;y984H=pFFAJ&sy&XP?=!oY|& zC}FG8S|PX(M$7)!9Zdp6=ILP79L1~Bz}WppkWHxPo{%m)^l%_^FeQWxPgWuY{98)* zPMQYJ%BEf?U|e0vcVm&yPF7>fG|T{9VDF$+F_&VcF|DUGRn`Z%jweVPYZ4rGY1Pc| zGU)e;KAIPt0GyXdzytHi3LT@cqlXgG>A;+(igIA zRvn~lob_#}WyuGrkj{^>*OVIKg%rJqX2NaK8bf>^pw>oJC&vutX1ZKO$E_HKJuNDjm>ho_Z&9a=iWtgLj07;>Yhu*{1Fso)r7^8%;B8WGBaq$gk@~P z2YPR8&%k6Eg9-`KY&BW481(*_fa4yfwIy{A zEnmt-UQlb!a$W~}_t+C9@Ym{11-V6q)_*wTDwy{2*8l9?jn()>$@JSj;Nsae&xJ8$ z=E^F(IvqsAOHxB`aY}9S$WC~~UWYO-PTbM9s0AK1qJBkyRij|snx z;SrH@X#fY(vp>2PW-h{8xWsIfGk1*Xh&A%=*FT0Ek2TFD)&yw9DQpHj#2{804l=G= zVK_&5z#V|F>V)%*weUC!`G$$F>VEn~6HXLK%ansmqzR-L-UJ3nb_!Qvd+HRT4iVTH zWvEfVA7PnU4lzVIPR>~km}ZT1G#z3un70LZdcCFeu;1amQUubU7}Ib#@fGoku&t~l z-B^!5vmU%>-1+K0`|6gGQ~IaO2YC*9rn?*Pzrx3rXW~G3zI~s;Jr371nUyaA>Xa`E zBc9|4LB$zL<&eusT-;|N<{Pk|4Shk5HR3_u`|uLHgJ6!YuD^wCH4#KbVEfqjeD;lneGseU5qmvhY^}|eCM*q@Q6)XSK!8Kq#p@fI_ zT~S3OLYJnBV81X7I0R56Y7`J0JK#oP{B?~7U*wPKIRrz-3&?N9VeSnniR#(lt;?;S z?l-(A)9D>Oe*RxXqpy_b3w%C5CS7ejnA-j>0WLGrCJ;;9yWS?<$c+;HWK(vAhjB`= z3)@WX{n2LWerku%)R58u#?E$>aVKijm2yE=5KHs4wm9=AT>fKNUFrFFAlIE7rYDRP zZBn|jTda^zx9>RZdZNNn1d$t=KiRoqYai5wCkFEiOR=}Yn5&9wBFrv_=0f;zaZk-p zA!CYW;yQ4ela(hJ9`S?c=_uFXj1GVXjHqfw*aigFkFT%I*pwe^ual;Xb|p)*7(d_` z)6gFm+eUPOR~RN|55fn+UTp1>4XKup)NzR0@(;MgFufAjruNvE#L1{O(K znUBV8Qw*~j6?=3+$Ke(8frQ>Uv2XVg`@R%7(k371_Ulu;GN%|LzJU6Q6RrN|88$CD z7ycL$fJ>8Mgkce)nQC^>8-&t%Co3*^i6xb1GgTJSfQ#Ud7b1}sS^CqI-BkGA=ccw;OGMZo zg1;*s&b*QE9WFeQ*Lm7|o5y+jy1SdV=i6#8(ZICp2>_y|Jt3c5sM_aRv_`G@>s}X} zRsYcy%n~FEKZ{ei$w=9e29KMlIKYwtkl5p76>tL8v;Bdnan3d|UyFVHZD6@p2L$%F zeOv6960Gzea(#Yu^+3a0q8g0jECQQbt3@lysp8t?>)RUVL>=vMb+1gr`q`Zpui?7; z;+>6Df6ZtgHkwtm1dMvd;5|cz7N-(I*CF-Pc%CxmD0DU4MuylX zC(mN1I_VUj9@Y7@2F8Ff*b+wJpya@I5;32tbjakg_WMOpKvkiSCyJ*k<`YUKj)yI-7LhHa;&@Bh?=-sBu~oifN^0dDp;c8OJNc!l7n}!)v1joS`#27-I~G{Ye6h zV@mv?Z$mUnqlk7|No2N`ehjZ=Zny+1>=Kq)clz%+iycAjRYJ}6G%sZq%j(yHV78~ z9SM@`I}#q4X!{y&0$~UD#k8HoqExb4g{pQlU)_rhn5}O>!w+j(t0D2`^@{51*zU`V z?G3$~=GYCrxP_B+LRv}I2e zb8+-o$^$tHJQ&JM1cozb$J#fXIxLM;7$j3A$0EvRo( zhz2L=P|x4o%0{c#ozToBvrtrDpF?KoL`k;KB4n!d_DGTMcN&NwAOPvlRRXp%mvaI{A-4Uqly@b98%@>z8#)Tfu{sA52SJEve6OVTJ6jf;6kjl!s$TQY4pR` z+Q(PruKp#Pjv2WP*h=MYq{%|x*0vh=#4!(cN0cOM24#&Ew+vZ{u2;y6ba9Hs1p+Ny zhNUj=4=S-CqhZ#NHG4&NE*AjD%txg?`rOYc#R; z{J5f9(YP$koTEmWQx^~#9U|Uil5?);migr#%1PZ)YvHyFLxi9cL#@G#DFU9eE)a^V zPr?GH&5FyXYpHH@Cox=FOC(XTJ#Vh?ks$dx5nS&X=$-vD+%B;mRe$eZa7iNijw$||~KYV09&hW*bAu*Ha!b`cI=G-dX&HcgMqT~Rqc#72cJBPipEZ~2C4Irf4^ zFCVsTx-TDYa?%6+zuQ*u|A+}dvtny5$98k(7Ok`^GCn; zKUjkl)OcC6>72CvBJR90_hC#9A0+7yBKMKU>~4K@e;KLMemTLbp`^(?21F}5@Aw3= zf4SgMlh{O8_7&$IWTq33-fTT}aLDT93AXu@XzAI*n4_; zdw||Qvc1PdX0Fliy?Mld)JQn#z`=>Fe$GHZb~L zzOxp(P(VdPS%;)n+^T42)ndW;E;v`tQaVifTWuIZD5Mm=KQws9SxoZcXTCU8q??mm zbh5vw0I%hyGX%=i>^1&fDbsJDPsb`H$I5cRt9ax{jKnW}rVpATElmz9yoBCs3 z2kl6#bN*&8r|QLVCbPLD3uA!T^MU~FD`T2|avYYv)yXrI1A~xItqZM8oI|F3kIRKE&k?6KY8_^0 z9V&5}leFTGM@O6uvJS7qsW~sIA?5iI8`M9$m@G8>t+OM0IN^-oF&$@J@dBURB7zD_(V254wYlY_wZB5!hvGXRBV%^02|`oiRd;9#10fs;U?<|~ zm5UCh6z(UULy|6SkQZDrfp1t+zy+W zsavK=v+G@NK)X2JPY(VyP^MosZBA=4DYdROEzzV^!fF&dYEeu%dEwmbBrmANS)r*c zT7Q>AS$KlCg?e9O$*d8B<|XfS>&Rr>6K z=@qp2;0%(i*hc(z!bC?^Ls!EF!foAyC@j)BI6RoJZ4kEiq18Vw=vo{Aydz z4X;!~vK6!3>-DmsfdI^!7>=HbzC6d)I?YJ8jy9VxiaCQ^YP^_oLG@fTb~{8Lo{xNK?r^)5Gp;vq_iwepwSzi zZf;}ONE}Juut}FqGa{F~AlQKwd4((}2m6k3v!h>ix+ZBx4LxI9ldLuk*3Pc;b*K=E zT;>YXk2}e5Fg?PdBQJ?LJ;C$qnBWU9xBqso#O74YfStD>CuXRk6ud z=%KvU)mhjd-;%>1{lmMhw@b}*wQ0HFTbV8u5f+Gv9PmvmBe5mdZ8!a9a|(AFN^VOs zmE_wCCr#?f!KWyL@)(*j<1Fc~n2m{f<;pN$xFHXui;e)xgXT&uKXOng60#1QM@ZlB zq^HVoAAJ$k zPf>xaS?Q~wI=0Tkc1M`8R?$R;awS7PP)j4cHI*OPAaTpV|4<&CR^77y=U(!sh80rKB(5o(&Dz-$f~Q78&zD z7LO_8(nCb zYeIYc;?p^B<-mo~X~iu}XbT8^+OyX4M6WPY*&1z1XiJax6&AorH*Zyz+l?V{yS>QX zW@>Gu3GfEH{NR1LmQ&%JFjM2bq;VXFxU&F`<({Z`g3du;n32@GPg>bSV?k(;%#q&r z1joIPap4vxyLCdUy}hX1c4}?p3BV`61MlfRt9Ia~M)JsPe!d3!4Tu|rfc@Nh1bLYu z(#Z2SJJol}!)JQ*|N3NntmT~TVSdD?v{>Rtejy1Tu;xT3vk*zR{H=0coyC`-u`i#M z410JIpK=0SA1HR$NrlWX{4L6~mjij14FN!XbPt33=1#DP)lSvprrm;ZGGK>>nA5pRts51z!*h8$p&!7 zm_`KS1Y4xl*nl5yVb3fkEOr3xqjts+L%8xFAy?vbAg;G(=o?LTv=Y^c-*%oDa#?`c z0w+bGT15e;3*E#1h~fRbPE-*EUy-K^UTFjMoppx%NnyWQOmfqYa|O#UIy^(J|BM;k zaURl1L)OFYpeF|y3?nlyn`AbUid}m?37%?FL)ZzE@T66zo>O zQd=yk2PC>7{c__Smjfiwa(e&z`QXiLNNgR{rwIE6jSOj+0_OxTI4=uOrX>?yv6jv- zkA417TZC49vf6=_R;aZ`jrGsgj-2B5053=42^VDB0a_PwyW$Z??5^OAv(!~N{{eVy zsB06+n}+P*4%^ZLybaE_l@`$FwdH-k4X?|l*V}Jh0}1v)E@`3|gneZBI{m;<$fPv! z8l*3vzm5+KZF)yHG0%2>1WOxq+JM0q;+Tr(Qtzqddu)uB%_oj-n1D%B)QKcspwqvIqk68z??P4P?xH@XP5;L zXTXkaFy|ZIZoy79MzDTy^z#n?GG@O=YZs_y4XThHF6hqq$6XmIJ&qfbh$LeW5uRrV@r5N8CpZ&#ABShc@s(#}hcKoV9WItOr25TR zCgGF|Z8RCNEHfO6bV&oWot${qubp48W8Q`@&8Ts-U=u6SX{6y3sMY{h&(uwCV9X<1 z(`$f0AGE?OVQ1|7cJjPQcEBIT`n}l$Zbn!BtJ-!ZL3z^C^q@zbK=`Y`O3tai$jQE% zBr$!-*$XJI$f>Ci2%R(;gklb4Xr5@~b@?-M@K{$gJXzPSDeCP#)*ELj-_(=tQ0A9c zn%{thl^Zy}D~fyRM+Gox$s4Fpp|PHS+yHVVF+*Ja{zds@{5$nn?%$a2{ns0kf1y49 zSL*e@2*_Qjch1Nos3SerXD$sS1VF+xAVB*9HoawT6i{q!!(>0gqi}<>xxib^U*l#Z z+*@2An2KaG%WUV_WH(r@?EerhuwAia%dM9OFfE+T{3%@bb9dz;nE)SV`4x5Z^mNtz z{PeKht^4O<$Nv-J$H7Z+Z^-@lRZ?QBUB*zLq6;mz>g|0^vM$4>%Jvx6tBU2=IHw&| zq254FHuDr>slu%dwRKyH@fS8Uo;i{$xc7C$YQm|)xOD#hKyh3M7y{q?ezm}H;d@wC zgUtjk3Z$#6JQOTnIf8M6cktGDdU)rao_hosu42WcOjHhj4-rF>AD1l%)Zlk}QEDV$ zVqN*lYHz9l$d=*n!)yU{9R|subbNXj$iof-yK4!SGxBmVIlRU*=9>kkC!l&~QquF~ zorWh$OVa^Xu_s!uNjSW-JO%Hx0k{<_PD+IbwaJag2~EYurM=r31|CDKGboY6U&voN zPr8!~aO2x7ol-nu?gZeg=00<{6$_kJZGtmzanG(v^JaDcuZNz2bzu+J6O4#%Y0F?s z&Gj)V$t^IKF~<*d&L_1wr>QaO6HvFBAYm--;MAgex&ZU#aaSBNtY+GVHze6C0F-$JC){4KOA8y0G>~=qNHk7VJup?$>y|n%b1QPW28*v(|W>U zfq0hB_N3H@iaU;e^nq#CZu<&${(&l)`dGVd1utuc06+LXN4PR@`$d@prM~&OK-3Ja z6I(LEzO~b3oPd6It+XdSIr0KcGAx@@In)wkN%z!**|JuHOr{8+GV*R{sT1YY2K2z% z8bf5k{4Qf~5F>kaQ*6OekU;LC&~1$Mk_PB;;r=*jEGQYIvrzIp{OHr$b=24STvE;01_mjX7 zy@v(jyvamH{dEBmhqvN4E1q1daa+*IQINTi4lcoxq4o6l9+&a#2is2K5&uw0Ki->U zG$apoydd{mJZXs_Puv~k)x_;pK4mUC=|u_K)Uyz*g0Nt-*=XCC4g<8H^9khxfdeA> zYEpKI=8feayLz~e$Fe_TO}8?cB2pMr*=t8bai)~d64cX}BmHJlqO48qqcEjEo@<6J zsim9Ct1+p~v1`;#-mgBDHC8n1VO?krJcg<~r^hopzc<|ilYM%eB|oF^`S;f%U!wbn zBYc8sU+<^WuYNJxeaI^Qc%W^(eo%fICw;@s>d0(&%d4&s?(C({P8fo)$nB1d`M3qS zOqT=P80q(UK_JT-JUdU0_61c-3W_1y95y0Pj}dFWou%(U;HLg0yvvfL`@iL zm+K%CeF^m(;dI1fK3WZ-Ve0bAlktwV0(_HhN)JUZhXl2_iE5>r=4Cw*s{e<)Mg{pgU2KrS8zuY$tR_6p% zg>!GyT&C6+%8K1P&eG?Ve4m(x3P#lP@?GsjSVMd{z;xiw z(DHWz-}GA@ounEsk}3x#-?{KS8$@|&z?_>Ng&RZ^_>t(Qd6DEhP~qB-IhqudLW)H3 z1Sm%lt#~MErqEH)w7lPNQe@@+0JQC*ZA-Eh)6q{3S(8k%p*(*rHs0 zMLEryqu7#r@k9lpF$voqQLja1v%tV2d#1!D)^w7@9Nv0SK3Q|J`%zVWYZJL_tXb-3 zGf?=YQ4XBFn(z)OAX!J>%-2RJwOd!`%SIFph?^K{d(WY5@GrP-@s3cXw#io!Ag@C~ z--%TxVh)78ZV_7_Mm%tH^qH90CxtAoq>2_}6 z%ZgR{^dv_;m6aY+>udcImD!OMQ&;rFTJ{3DP(v#vY=Ea;UeRn>*O)-R1!=&mDb#~1 zQwKgz{^1p}Sg}ZLqF$^=*vF|#Ms@f?Sl-G+N$QWwk1(x7`Cgy9`)76hq?Yqq+3OB_ zc&{~T;07af1|xJQ@e}{_D);OL|7;^S?NqAZ~qmE@Na=FzD^wf9bn);e)oT&!~Y#}hSGoX zfdB6>=BE1_KVD=K(uHhu>X0x03_2b|G{o8?tk;K(y_pa!}5up;k`erKTedr<8o9 z3*E?kELJKa1xzBRg?r4DnI}Z`=$}dS6a^f;~N5I~Fg|dZSK4NLuZ);A zBMu-L5zvoJkEw$6V1E{Y`0X+JOTCM&kK&mDg0STnKlH}ysEDP(h+(HjiYg4E$Yzvt zGmR=PQbT72SDMIeQq3QuR!1|vmYI0zLR|i&KH0F^F)hA>^35vn2GdDQcAHq=q= zK4g-ox5?fl-GW^r$6K#*oY}{2@j#-1g`=E6oOrzi+(wYQT8>4dOY^AzR*MB7_LYYK z(`dB_eA%vn??wIFpw}(y7QAx1UDh$L=DK|syAg&EETU22Eo%$^5b~<-Njm7og3m)o z^&nb&<9vXcn)%|8w&1)*J(Wv{7da95`61|fw|$^qoptxcjN-kK6;#i)D!?=RwqxMC z15!ri=$+&SE`!aUM(d4`3u@KegxZ?kr8^$Ag!_|w5>N669Ci@emO|1ChS6Ku5rc3({g~c#et&=n?r}!~2cx zZ4f z43>o?1EaCYTGOe^`Whb9FA;x{0#sJ!_jxSSbc=W;Z8M=y+s}>k?347h^tJb2?;8l; zTI&Yue*0N(xX`?+wSir~&9lK|rqDNDY_ijmPtYzMY9>SO#o6?t9`CzJK6l&f zyn9l1W43!4m|C?eDSD8lVI<8>oebGyll0SFa&%LZOp`1ed0I_L!eehqHhgD?gFUOr zh*@I#*j``D-oQu*UdD#bBi9c>1`vLc!M&ICPZGNI?*e@w8i+ zjVUW?sbh9~BCMio05-gk97`yQFbg^PN+k-!_!A*nsHja05y2Q#9dkeQboP6V^0x|Q zDqW|aijnGTD#AOx8W?25m_i}GE7xzcm|Q4cf$C6AdsQ(VF1!>2oqvX*Xcop@lt+TR zl!ellU3iQv^iQ^(u~5!D=j*Xqeoa7@+-eMo=ZW3bUbR2wX!}U(0<)yiV-Ca1sjYTD zw#r~h0kcGsqBmY*3PmJL!}!Oei-5|1R~30+nW^YKM_E*;aiTiQAZ3!8%_}OVMPrAt z?uTO$`w2{G2?aYJG7Eif;Kkx9JiAo2&>FxnX5J(fuUFX0*d7@(_oD9NTaXN38QX3E zBcFv!>P7(`0QPmy3o+r&caN({Y~tm>H0UO(zK@FW6I?OR`V;ek-odfsYY36L|9H7O zj#p#3Iv@+z>@o+foAg1{3c^)ra*b^`xSj07)WpNN_Nk!qat{~!uFn>=N&Y%q#L#zR~ObfbA$O*g=XqBTYSxw!5pHW>j zBIy^9($XiDq}5~Zr`oPP#V0S1>5E2?!6IQ)ybjG3^gn|`TqVZVq`wxl&)+WS|E3A! zUn{(_!(ZS3vIhTa*;U*6i%#{a3%M3oQe5%_l$NGx`4+JyNy;`%QSvMlZWdUyZ^qOa z3MO-_t)pDz^P7H_;t0Cy+qt(dkhM9^PS%}$1@6q&)*|p8@sME~yY~!d&%-Zn_vf3^ zo=>1%CN>N*_DX%Kl>D6&H_5;5?MR^xEH$$(slrMt!wpeto5fRSs8W@i^(h{AonY#2 zjJ}E^VF({9-~bt6=2DyC}Oi!cL6^3}FyiL=y#52#@M6-~y~)4^H^{2ps9Lrf+ST{2kx}<~mjD zS@|5p8m!Q>GeoDEbi2>wU~#7UaNH>nBWw>P&XqH<=sVg?r8uS-Rvc7ILU_dQJHNlP zRuqp<0hjU(VbZaw;r5tbDP{>m4D3~}%hqNKUO}Ij0>Z9085gNqdHrZc;slqEKc8c(EBt2%J6-%6(N?_99Hp=v+(lw1|V-Gm=0*=@f?6iBY>csEWbUggZcHPRCS#_vNI(q;OVf}8EUGg%2~GQQ&%R!!bzkcVP+Px1Vip-TDKog zivBD1vtt9JTOQBz`aFcgQRbpcwt%rK*~jG+X#CGoibebETRJ0LSNN;*SqnECTURjiG1m?au(lrit4wiI|J81hbE#IdjxsOjO~v|flNNkV z;f!ACA^ExUNxPlHBciQv9>M8GWw_fLL4LDtzYqS=$G$)9O=I(c_`3aAkg%`H(-xCBvBTuU6j z{guTZsDxR$A#>n~4g|{XxYUITeCxQx7uHZu`br3mUf%I?RDJ`*n?g+C7aV+paGH@k zV@!NS+UtEbzF~5ea3;VVC0|f*ZCMl5ndmJmR~>LPLxkWTp9zF9rA2%At0uREP8i3# z;nE(wEK>QdqP0+{N8(WDwg8wzN=Zl9xLUz}nRxyXp6G;FMjv5%zzstTz9X1*@M`ER z@}tD*8-yg(jYQiU=oS(nmxy$aESmuuMDJPjVYv%U`tu(bPVe%y!eYOYlfwR%7pU-` zoNE5L2`V_*dw7a^m>Rpf{2x8YUm(^GcoJAxM3(Q=DvTcGAdFFgOHxLipf;6zN<>Zl z=L3dLYB=2K>8#F1$e$v)f53c~&^xP-&Yk@eug-H|L`l^ahKwBLrn`N-Z|rZJk7s)H zyMP>^v|-(~u14C8(_@2Ic5_&4yXKmTEO~a7T5*E3+i$qsbWZ^b77iW97fZLD=bY6~ zM$#Cvl;iPIUk%9%iQc!vRc{a6crQ#d+*&*c_iX(Taw{(PDP8_~Na5HkV*3&0IFqy& zi$G?CSK{eebrxIY6b!HC@@SMd#yldRWI{sxG(O>CCx6;}Y}DAc zZ8x^j*tXH|nO*DN=iK|8{jBG6-)HahCa>lv|5w-ej^DsF3jHY?lP8!zTj6xa7Z}lS zj8^?*#735b28rzjdbtiIE7~)d^r=M;S- z1|xPGpOlk&sjxKD3RpyqfpZ0GA&oUJ3c#4GiLKJk6a1b{lv+i`zRsGLK_*h~d1m-s zox;4vyAh>9Be6bKr<9uthU2I5=d6(TAuYFAh}W8{-wXL#<6UdP13K25@jm0&MtMs7 zdq7Zd!V;aHc4*2#)S(I#+oPopVJ~e3*bW3}2d!?-{9Isw$`?@K?8>V|nN?&+I1d!# zVl3X^>T%OC`_?+4FoPVoDfErh->)S^o7zJG{A(oj24#(K^dAIq4DG3`7pzttW{f+n zEyg$GSCj5%zC2<(D~tdKJw6TWg90uamDrz~YS{O&D#V#na_^I}yoO9-vlhsAwOuS& zgAN%FVD4o)tV2Azx*2tttgBb7tPmLz@V(c|PR~*ZOQdX`YkF57%3hzoD&e!`+%=fP zd%$}fj0j6k&NqE?dBmLZh?L_3$Dy4YM*tt<+;Lq2@yF9|U)HnUIuw{ij!{8Fp=pa8 z9@$Y&FKl9G`x)B@SHEtm31mho`q8;LuA!3k=U+RW9-oovM=5*U-?_f{;Rj)w(zv~t6jRU!OcGh-I_PN*Ff8D+GnEjz%Es(VAaXEd1@2UIjVJifo)xgswi%Yqdz>0IZWDPY=>sw^>toGsMMgr74>bJ32sk-KV(38b0JRwmRgjlix$ zlM6IrBiP&=b-3&CKUttx&^RCrx`ojP^1#bAo*kp6bTqGfZbIQf=PiSr%F9= z*(RB4Y~g4vM6kpR1D-NJAY3MT>3s{1?7vR}?c#8vwKpmjVkR4iNRkrS?XH1h_F<@r zK{+1L0wpVxP$+yCblnQ7I{TJX#uNr8{AW-u^cvXQ41{z>-S9NNTqULS3PSM@L28`3 zOCwAiLxX0b4-FcQJGpirSxv0e=@Sqvrz<5Q%;Kvu=zRWC7bEzR(j``i9_6%gy+8BjBH76c`8F{qVBib*7pnPV*;lpg^vW<9t;*=7|xLD_!;U#utku3Ai;w+23-MVQ%v(*vkxURA z%=G=@ERX1+!btgxW!n*Et;g<24he&O?{Zr;FeH+mnwSasv&;+kuQSl zqW^n)g8vU9RdqCR_*;>p(S^}cH+^HHt-wSr`(WXRQ#u|jpLin&Um!`*EP5mVaPnjF zy#N6L_(dbmnUPnH$ZSYJ=#c0*@oW5UHMMem%@@KBM>;U5{5^y0L^XTZq9xb zoixUbCv9V9_MON#jJuWUAXA2=MC2z@p_|Sq-ARzTeM=31W!^C6Xo&Vz%3QB8R$R;| z-2`q5j>T&tOw4#?z(8&8J%*39Qk&Gq%7iJ_jykm{JZTb(SWa=JbBry#;fOw=cFI#~$f`UDh&of50p;MM5Kg0$kJX z!{D2Zsr@t;X5iAujkOhh-#;0E_guF^Lve*L|0+$EEC0jG7X^Dss2a}y z17()g$N)9?l@^1V^R-w=NjS&0hq(cAd3DT1x;Jyn_Trri#8fZQMkMoE@+u~jUhtj4 z*-9kmeVS+EpX+oR@OwB3{PTw`hfOUuS{)ZSIeLMcNJB_kdmM-n&EvFGT}m})Q_&#T~$iI%#gzX z1k_Y6zy)ql+=Ta#zAA1vLYwaS;dT)8h-(wwQARBZ#IRPXnT;yc(=>KqOnHc1``Agd z<}=EQ!@<|7ASjPu6U`Q89YcwfzH)r<hGnSt)7xvwdf)x;&LDJrla z_v@4#l}tblf_D;J-3r@xqp0bFPXg4pk6PJIWk~#S86yO^Vw(=Low}g9FAtl7$lJh? z4MK7t`kE)qOqtFz0(Pay_$D7=QKB+wtrfQiDbAMqhj^MbWLdt?(G_m17FJ;!Nb4?? zN|U*(TYf4&_$L*hl{L@4mxc3^;gpdcHG%s%8k6`+&UUgC;ew-j2<^70h!4~7TEM8h zR^3qcQ`OMdPpqvbu~!x? zPEtX1IMOh@1Z#FgLnjmc9=@N79OaP90pVKVd>2r2j&Cf+l9~OfHfhG0RysflpKux? z%(_ImCFVCxiK>T@)|#W|gj;u}T%y7;5}~Kn5?VXzzFVzbNj2gZ6&&!YPL28Cg&SO|e3=E_dI3FT3E8!x{U=oxRXdRS;jHD`-J!2IQph2O)rh{S7FIVjFG-aHO_F zoG?{`kAkyOZe9y+fNOd5`45tYE+>qEA#O*+`4Z&Q00PmE$U`CZqxS59cxj4g-$YGB zen!vsULgpJiajXvoWq08+;WNvi$}vdIdJ-rSXBgtNrd0vQyjjG?x4666 z68vR*WI^LB4(3gw&F%3O;?Sqzg(_h<*c78wVV-)-Xi`@lb>V$!3m8ZKwY(g?A$UPUSp5ANOIdntvb>xCJYwR}yPiVChO5KGa>j@V7$?$s zK>|o1I2ZEnLEj|M{+@}`^5y7_lt3Y3BRc|}CkF;FZ4CUOfd#ba7Unq-0W}*vx}M;l zGRkdKZ=XSoBxuLm#oal6`LM4b=i#C{JS}{yJ%~ zLyURMHRWy=o;fnfOg-Ooueexypq7sx39Y*!g(tUKzHFvO@rJoEp*T-56r=7rz$Zw; z17L4v$B*+t+|s;LCPLN9oJtks&TTKVBw}mz^GNymg;IpBVvVQG?n zzyk;(7#~rEFcF6m`wh4W8C#3|!o;8yB|%U#nGPbV&tmxmDYF|Ov*a;A!SntqwiR)I>b_y^R1r+LZAoAebkVfDF zmRC((!?wcSdVISOMI^%~UdfGkYPEAH<6sP9$4@dwz&9=TMirph?7IIahV7dXQS5EqX~t{U-+pri46yk zNs^@UDwRT1n0qEwF}DI!HAVQFNX^F%+BoaB$`8a!eeGCX4H^7kAxTRZrmDH}-Rad}*P zHQ0_R_ws>|(r8jb!Qs=Zj%Dbu2vT(7%2IAdJ_dHf1;`y}C%{!Mc;px#$htzLiq6LvPLP#3xC0@=C#_T7nsARx3 zGnsn8@*?r`qd@v*#ZGF1hBBhCuGW$vQ|2nBjo`H1k`=$Jp;qmY*D>4>5MRPi1sL6w z&0Ke~*Wnx3T>^!V+h4?i1d(^Fq9{xigE{XO?ckI?D9cmHpeh0+dAgK|k3S5XB?&=6 zvKAFG31=`M7=YAbjq|&$3IzN(B=NpjlTMgknSYE>Ya^8r)WPY3t zlY;DwXGxJPcf$>VI;7EH8k{v(bD9wmyf^6=PGL{;tykHOKAe66*LI-WnmdC|wdqA0 zYi|Nr&=g=niyhigU@l|-44-zUlt79H(35ho8aJ0%2ie4zM=FrbTJV<$$2&paGlMuM2!M+Pc! z-ju)grvQ3vg~VhOFtb2x8)ME-X+R>$0w4!C7QtQgVi)acJ@zZ?b?l02R4ZH?MyK=` z=^okP({d+X>M!a%`C6k@90qdQE7vh03Q8CGCdOACPF6OGUX6Cz;xtRZqqlj>FJ?sv zYyLDmIfz=uWTCAGvr~TbpyHVZF|CjQ`iB`zSV?lY#NiRtFp5_M?%Ecr-+&gZ%sDm! zayH0EF#H8*_A{okwCdzYc>(ya#3R0*LdS-yp~P~I2xM3%%K4830YFnQpvQg#IwBLd z#rQ8kZ}~+q^W^;obP~sBEFgW*H@C?UfTQ@$`2)_9fq$ow_$qXYcy@m1t4^VSGKpCV zD|O9#We2vFbhhqFlv&L)sSb+}vU_a zB?9pyA!WY-ZT%mB7A@RJF;x2}K!5)e(2#!udiqa5=XjzdxF~IB3c+n4+^WOQ+ml+=}QqvPxCK>nlSD=XUYE~ zp!NTKK>t@Gdtl=lcN2%-DY&SMiOoL}?|h9XU(7kIw>8;M!Y=QlzEUw^=4-XM4+iHD zhZLiSh+H#EOT^|l*LX_8n3?@dmL#qF*>TX?a3}luPS)HytQ=Ks$=~~Ba{ck!4bj0j zz7AK@njxD{9}Rp5N7EfAUNRgz?$aF4_lVxSpXC2Q-Z+PdE!>|th%gzKWVdbVFhBmK zIl^Ac0;<%O`&s2wxv?;#)F?BN*xnzhY+x?W4Szykg%TnmDLK}?ExE&l@#g-E4*_XuM=)eoX8uw`P%!?Vu99f zUCe;hYWGaV5WY8n41yQ3esYFvQUOjwUE+B4)MB|bszrAB#uG|Ua(++6I--u?eUWq{ zfqXU&H%5`TG=l8HS};&cdBJaa?qGFA!?*tiN^WIki7pXa(mXBURigL8=&(VHQx27W zOI9EDGU4dcc54BzY&vXd?D@z{$C>0jEA4f-)2-3-cpM)u(mB?G1M?^Q(RiW~Fl za>KBx+SYA69i8~O)TXxtMb&$22&(=n+StfE_1Y@GtsFmOC-SLaPiR(Lj+33eMQ*h| zVg2g=04#idY?{WjCv%Dh84Z)@oSWdE3$D zu*{h$Mpm_o>yc|BvgDg@NgG$SSMFZek?d8lb+j72jfP`%OEhn`sdk@ddWRT1)>O*d z26vTi)|75YK6bLKoW)K#P2YGRansOA@A((7CU-N17qgl?Q_<^v(#_0J@$vct!@?(K zV=-T{>zrJDFP)R~WI}@73QlhUH3yk`vTXs?)O%+78)C=d0!TE5FK{1=Qhuf&{u;N2 z)zpLJBMFs6I9XJWWQ)wrFdxPm3LF=ta&bEGx@A>5QhMpZ9d22lX+kCf#G>Y&XJt=Q z?Jz%X%_eEIxS;-WOuu4J>X1Z6q}9jPl4TUn8W5$dCWd3l=1RQ<8VI+J<69znQs3cR zHl!?)nHvX&$3lY)_tC2!0+AxJFOUJTF0T|8i%`CjbYs(qv?(P5Bo7Ce^WadOex>re zbh0j-)I#&-@~eH2S@=WB{MTg4t_H6lMBBvXHMR8*0UmYJG5?_(;}U?%ZI&mbn3#!L z$w8}!#^l%>(>oAFIiCJGEqUzqEn0-{SE)&mv+>2c@#ZBWWJjrz=9% zqTlMePjhjiVp#=yWkKT&18|b~po;$f0;V-LdPEi9R?$)A`z!l{H9EKr)EK2TEZcJ) z^U%&bk9zlpNgp(r=uT?~i@YMW7HiI)>+zIvC3{{GuAYDNGqhKMKh%HOKzU=|KHwWi z@-g@ z^*nPE8moFE7d(dsD3!l%KUjMW%rgA(nh;U^#J>(doO(&m_cmAwKYaYKw$$;Jdx@Lg zK;3hn?8JvfBg@Bs9ZPOoE&??iGYw7*fe~bh&pw4;rTns`KhqN6>Zf*e(&b6a!nJN8 z+x9|t(xCw%AJh$}^NtNFhWl3=-n~dzq=L4jcH`zVRvm_+I@%Ky{r2k!hlYqeAU>*` z<^$Hk)BHPkx0fhuue+@fxGNlVtnJo(C~QMlOnX+b4L>ruRN+4KLONhCszC+xa_-(; zv~=I%Ma!o6JlGDulV9KgGVVeMyNf9J6D3-ABx0K)ny;bgGwiROcsij2BnKo3>cF4G zd_duR>7f{D$+XT|6MEiZR}`{|se06l&!gn=sxR5n$~@0p^hS^P4cE8b&O2dliuxBk z4WEP9?V+zly;Sty5fQb8)?!dkalOA-{8<0EM%)2xQI5QLld?Y{&;Hz<2)X?dZ3JI1 zsD7c!Rh4NISj+2lXZgTYUn#zeTHzJ%nEh%=_M)Eauz*CTPueB24C2G?R0)^L9j+|w zrZNF+40~9*XemfW`U^kb6vQ=P?wA(DE?AC%&pUGb;z+sSUXei@()@Kvt@kb96Vkra z$=cU~&0Fs`^5@Keyl2F>SKM&cXSy%?OrI)9m5{!#Bri8vet-M3Ax^&Ba~BTovjt-Q zU9U~$zacaD$MHOHK44>GV)c(QoZ70IHuxMFOiWtLA1~2FM%wQzt>LT(l%SwRESC`2 zB&(_PkI$n<5dtXo10BiHW?`$|^9ejbw9nP+SS!yv%pux(A+2}sqTk~q>yy&PABmdY zom`*VzKv!iKR-Wh6a5jMJs9QtrBz{RWM!wLTJnh@Npa6Y zi+1MbeU1wVxtr?R|1M5B!|;GXx?LDmYfn^^`6dr^kLyGX zQwnJv%p!6VdWExB`)2J-S+r2+5SL+~A@#!RK2@%wW0pu~S$EyA5Vba|2EkTtm0@qK zja~1MUc4y^x|_W)q-e1xjev__#$Od3NAS)6P#5(=-oe1z=ODJoRr`?d{FYVU9GXkJry!E>rs%18&8ZaBZS-h{RY$J*R4UiQ~o zIqMDMNbjU-6Tv%%I@*J2>S&Y7!*oXIfk`w4zQEGqpMg!Wp}-7IV=v4Y{p~vt%@dRH@Sa0rL{9;0(+vA7o@uZk6o1JUO?AK8RvQw9BKev=Pt0FVh*fCe3 za2iR+Mhv9dD0xiQvQkYM4XDKTEca*wQ#wo+#GLV#R3~#D%;i*ioW%v>39>B-hd#d% zsXxCv)+Yo#s2P1$ZRkZMn1*|S&k9X-jm-NLgOVN4e{bGrZptb?v;Of?_Tm>LE_Y)b ztLxPB#}`Atf^Ypc_~e*4EU>5VcGGW!@t+8J8^`%Xd|!1SDR9V1h9n@(fMtqP2z>S#SC_=iBjk1FYtaD3;fP{y^aV^$i4!Xr1yb8o}TbB1NNi;X$zPSof` z&!0p5es7n$z?X9#khds=<)RSAU8EhzOoof%_GBJUddT6;E1CH4M;}vQnA5NEZNOrs z66+_hjr4oFORRD}@>1nsn;5}aq12#vh{D)0*yc=&cX+fhK4dxa{x4{lR}LRU-@thVT7T&*HCVlc154xvkBAzS&%_rmYU1 zzkdA$PmmHgT_6xfY$$Dwo+V7TCQ%=UiHYAE$2sPz1Oj{ zwi8|A1mB~h4!!e)Xv^2Y5v|84$MKWJr{(pI^dVc{mm9>d_7dFzr|IWT^UUn|W{C31 z5jO0!Cb)P)hY6N&()Y&|%CRjbk5XLI*UmllrywI-q2!9(M96%pqS`MZ1c$3^5bm66 z^8$hOM(I#V0GGVjy$ks6qT@Nk6lYgykD8LOmSS!t>*h5hZ%M0F45>C&a|!@~@KZlY zH5HtCDoJgS$AQP)snZEgJJrbdazi&k|0KsWxSlW zi8CLjHIs=kyug^g6jL^2-F>UW3FKWxmy@lej9kY=k@j~vv?UauMaOjrtYs^vo;ErP z?9%BF-G~-r3V;A94;tmMITaOe!ff&gGjJpv_G0uqdM5J*ir@{`-NaaG+8?n1d%*5> zZK4M@1=$8^lLpj>@Vm_OYu*yI)oJ!?U9IMA-|yiTd(Ocl5OqkK6C>7GYxFA)jhBMB zq8HY&PD1wgKNbwQ-v1l@T@|nmwX1bMnN}=V+N8F1c)j%i))DqqY!Y(s1&$(W z6W*Y{rwzdIitA_P+gl;eoTYG|aH`OYi&6N`Y^~C*6p3$(-Fl}+3U~6iHmn&`E`|8|h?FO>?IZ9FcIfhT3a7M4o z0ylFT5n>L$QA>kJk&$q~i8S~dy=M}pIPhuzCslLTSTqu>r>I+jM&ph{6>7^c59BqH zr>;kJUTsd`rJLOB_Pz?{LpTnPvFR_dE2)GF@561R4y4!(dEz%b$&2xIAw8mt*m3U5 zH9fb8Yx!T3AY1n_5g{Fc1lO(~EZL-tt-)st3x-uLYqk8juGSBnkK{2y9Xl*-4Ug#N zJk!C^{xg5*p;XrZ0U^+ZG)==AR8IPE^GPLe-ehj=gVTf!9lg`+_Plq`Mknr9&|$&&;qTHqqyLG>_0K)me`I;;$G?xxzR9N4 zoPH80{`z&WRzT@XVq%u8=pzJ)d9kcCv`8BHjEg}no+~?i7i?%~=y~JA1IdoC`7M5A z=1VFM;rWS8SiWRRme1hm*(&$_>zO0ixal}?{SW*;c|c-Ce1&B~_WQu}-GpHK9=Z!Zfh^1@0Y%Q=n;**w zJwxKdD%Hq%Lu9;zkRV1+!%;Yb3aDzwltV2;6*KVA!aTz@@DpX`6Wt8f{K{QNn~gE) z!5l#MHeIzUK@c8_@e57nS>myGyfxs-f+tU(S6H5Hugnf#j+1rge8*-66ZEZ7_ffA) z4780xCD=uNRfXA8RU*#rd=Dio%<4k#KTxGA3XGg_bro|3(o?+6J4LdTksIR(hhM}P zTmpK=zSMYtUU``qKTj>qY1%6a|!Q`PbzXt!LYR-D1!oS z#r&MOJV1aYWn~^p_U}WqJ;iVR9w0UGB%I`+_K3`AmFB6u6T_6QF>|`zr4~+t&vMbp z)%85a{Er9`Osw*V>|`hYajhh{rTV!OXptL|Jo#H3Ei_?w99TCGIqyG+j|fEk%4;jd zTUtzW`ou2L2hTI(UuYkbZT-s?+M86vRm@7z$G#oh0cQRxi1orDDr@hMP359qXPO@& z^C3f2NR%eSh(jkcoF!+6QbK7(ET(-QR-B;_U3hzFt-9+Sh{Sp8qb8II&@7cH5UnO2 zf4GVd_vstMgq&Ws2w8(-ULImU5LtE7u%$&i$B8EDx<2haa4a$sVi-#mG}2JuBs|Ec zFyzjeDat)oORP_E%CO;uNN(pRa0R&S!;62EVAD=ay=5SNAf_+Y2uM8m36zY;lmm!g z)SOEm5tZv%>=imY2B)f+#nJ1=)7=5<$)58*d=ICEcE6n0IuedKS*46A(ND<^iXxR6 z*frI9;C!;{hKq`zp*FRP_qfb)@4?K6RVJtW0awGg`!4L!{4{~a%_O^yj15BkXDQO~ zs95D)k?~Ol4}`LSV*fF2&)t<7S>~rbB>s6Ep`VztWG1ar@!OKCSfAMYz2d>=8L=w2 zkV-~VP#Kc5+sH2qLXq6Ul*0ENW(y9fBlvXC`6(Z*+j6(i+D7cE*Q82xGxu-r^D^#n zh$G}e`gJ!WwHj%PbpgWpzl@txj=rj;5W??Tdr`KIh|jLgbVSE9T!q?XBk!~G{vcmU zC`7hjXlvr=V%2O8I;K(FD>*8L%5up3p80{`ctqFJp|_rykXCbSzp4CMQaF4l$iP~O zz0Z!1o9g6ijXf2fEMeETIjY3MO5{tOi;9A>wsh>mwhBVYD9cly0PYC8s#viSMoRa? z2}8(JR=Jr+q;_*~PY#d!%wT!q2DQ7fPRxtA!3g$reabdod{N+7?gRmR0HrMYuHo~P zkIx(L$uY9474n4PTd%jIxOap=j2G8eIe9g_776b`Pp)8LQfW~P?c-(nZ=mnwK za*c1+BD|p#USnlw-!oRW@VB1!r|`P%_G#tTyGHTHSNg7Rm|wZc_w1t$uoKS>9gvkB z8BL>8#rZ_)?1?9GW(klrP)0ZV@oii@KHJ1^c979M=@SyMcd{_FebFN-&)iVXLCq2s z4toG(dV;Vop?QM_qi8#N=Z$}+clPn^(&R`4xJLi#v>9abB)HSZxFZI6vwjqn6c49< z_@jd&g1m}fQQ->|+$QYA6oSvq__wKWY!Nvd^8Nal@G+GOytWs`M{CWwXZGL8c8*`h zZ4G$XhzV>>^uM3N{U1Syh=G&A|1GPt-Zu$}+bDeddWt`~SD&BTH0WP6c01O`c?!^f_EjQ47ks}8S;UZ zZrzzC!}@aYj+ccd{z{5s|Dptr@H*Jcau^rbvsJAwA>z+<73#5p1ZaH8(#X}gV;A{= zK+dpSK#_yQufeka(C-r~209j3BGlSFPRp+3qdyd<@!42Qs!Rw1k%QK9vDgj(lEq_o zHnVppU&6CLrfW)MW7!@`Z1M0$O1TVP5I_AOHww(I?``)dacDbwXzRQX=JIrUCLip? z7}T%AiWeyu=oAxv;&S0+WbolvpKoJn z^`2Z&D<)$b42H#(HWq8hZQ7(|+Ylt$xwG4`F@hFvE}OX&=BT-yo4y-okbYQ3E%(h+l!XXdL<*}PRfeF^Ui^rz z6|neLg9`-iRtl;3dGrD6y@VA73pnVvfwjBf0a*_rmkaVY+4Te!UKtICgf5Jt3RU7*WRw8JX-s4 z0m{x*ViOy?KtGpRhN+#v&k8)o{n&2$*CyhlBSD*9Kks^F`gE}cWv5djo9aJ}jnu#C zK8+QbTcD&|yG(5>l4Us_1|qR|^uzxckmNmAhme+8iV?O5#pO@3a|4D(kvsYGDN;7w zv@Zy7d)H2C<@u6>*N6K3taTRhgdxbZl&ev#zZ9+(taFkbX5Hp!Z!LFcx4R6@oLAJ5^IK$Tz)S8+)-1c3jbx=Z&Ni2$swe8z|i1vG3cNC(@ zkPVCZ;TdnQBHE`5G(K{NE7owd?x;MEA;KmZ4qju&?~|VJht%nSUt2xYymL`W^OJK@ zleumJs4>4Hp(X`9-;l{+eEZDcW!9IvN97N^zOSGY?7ww(e@bwg{wZeF zFj7S{QWcyXK|`q@v@vh78Aj$$8e`siRhF4&UNeT;DA-p4f5LEMK1&dR&>_t)pU(PF zcN{nyj-5y7^7iN1bqX(*@+@%9eet)ui2ox2^Y_ig|98N|5C{6e_#;|QN}=WZWEWWp z=+^&i2vm}eOZfCo3boe}oFyB>uIc%|J_QL5h&BA_|4)eVg=Q21QP5%TFxnz@Uyvw;72b3ciE$! z=t2Y_{z3$GiEQ23GK1Eh%zI+oQh}*^l)H`I-(P_z^D7b~XcsbaGF)WtDp+hM9Weir z6(dphm`aRllB%A63SWN+D}M^z;huTEHr;1eoWFx7{{UkKv>BCltKWk?+wJpE1s<4k ztmA&^G?p-D?TLmzlw=#4G&f0@KImh@pu#Uax6lOv`1kq0FxLRuk5_284KwBmG81t! zG=KfP9GQZV=TNS%KY2F@z4<7$@Nmtgw9i#BSS03^g;J6`B3#zo5c&>f{ti9=D0 zi@YhH=C4c+W9LD^43EKYU}y}q{!A92xfDXx zGuC73Hx4jK#&4Nc<16}3w8t{$&lPG+#(;VH5%d%y);zz#3-Rws5pXRxu`1;sDFBVv;;RJSOKd z-tVbEP6WJ0;Nu-4+XYp&2?tTIf*ZAk-SCrHljSts6K9V~E1BM;snn09`5~ANQaz>K zNm~;aXgix*_}vtp5kn!Od#s-F{)%YU;-k1~q|hea?_W-R7k`*GEth#}S;;IN;9+bh z86I5Bzb3AW==D4o*b|}D?U{qShH;E{7{=h$+#L?dJ+bNCEn1$@QY`f{T8q>uRG{jjz%*~MIyTQg{;HA5; zxLQ+=!-_1`5;(s7glC#_TCu8a)|$o|=0isrVqVOaXLdjc?|_UVjJ8F*YCxr6clbk? zV(jKgbUX6KbY}F+8SZMg_>Y+!NJQ2GBNDl+$US0Sabjtr??k!$izld>i47h7ox=;* zFayfD0mX?Njn70g>A+~l!#Q^yi6#)Sfrm4EPp?T1UZQHKi7g zM)o3U0U^HVx+Yc#gRrJiF2Mw?)tY<|3rBiGz!Y!+%+XRMiI0Sps>55&QDL zV!mq*rp&T#rlrnN63G$}q6I1VcfDt^`c~7@I&)&v{BXd3B`Sd7`;~wA;gsydw35V4 zHcKrFc$M)NJ`yw~XF`2ur2=Q!^?dq|rjjVed9+%}BaRUL<3pe=~YdT1am!(IExmh$duInS;ZOS#fmSzBq-ZGQ5#yg>{3|x3ZiG< z`0NVbbf^=(U&x(88M2vP<}kF3wCTJa_f-d(rC1h}e>^|{)vQn;ScWjLDM~F4>)gw> z1s^(@pM}vV&w>%dR7Prc08|Sfh10bt3)aZ68dcPsC%L;Ta&8Fbw#SKTup>RxgIps=}ZM^o*KtV65vMR(ZM4rbQF@`uU34#*Pq)9Na>$?H4NDA}A zpdEgR8Hb{7X=L~&lj_7gE{I1}IgezdfqZt7_}n*oK$6G08$*UET#sT9n8DI3)i7H` z2vDnEzD#sJXb^I*F#SP~e}omo`&|Y@Pah-_hzjZz)jFCgyYXP%Y@8%-bndVYMzYoa zGIp5Yru?Zfh~SLUuhV4pDY#Oha#{2Dv&}B@OcV2FVfsxc(A2}kJS~?Y-c-!d`w@=) z$7BxjHEVx>Y~4q}Yls)z=X6utWqTUdPr+pwd%dnsHsA5HJ-JfOB7FMN8_i^5-w_*M zsl7BEJCZSOAYQB8GfC(m;4%do#2mR>WfPpseDt-x!56*!14VeE@^G})iobt>i7TR;~j8-wWpSS#J2f-q0(d{RA7b@uR2dKbj2*=cK@5$66UN!1( z^ewhp9@v(EOCaOj+ci)sv&}?oFr6#Rfp34iAwen=39=7wlCc_qi-?_limsHi@HDTF zEQ9@W3nfRMVfIB{8`-P>5KBk@;cKZ8P1BqomW+%3oVPE)vV}+h-Zeyon=!W?G7u+c zDqyf*fO9FEJCc>T5!Uxlj}gb>!Vhv_dAI-nFYo`N5CX<8CKHf1D89=cO;GUCKR5U+ z=gjR#RVadm5Po12RBi~9Ndxj+@?pUY*5wrcb{Ioj)?X6$QC7nsc3^s}I<0#dKm290 zYP-(w3vCC#4VYM?ZNF8e{fwAyXKj2$F}5&h=ZD9y_A&CMEPGnwp?Wl2B53?sflQJm z{v*3mzE2e1T$!xwmz?GiBowWFWMI#>Y~>(Mh{ZO|&yTid9HmaPF$)S|LSZcvc+>Jh znktX+Z@~-|K_~hg9oaj>(yu8jfbt1$499CBu!-4;k}$`CF>qyJ(r-jzupEcWW>6)C z33R9AUJ*=x;-Vb=Bs4HthNWjFN+lv;SUaIPp-ijS9?;AI!T@*%$DyYdYd}$l2ATqwVQR^A z0x0fcIpS**fu?798IxM(@<9g5%2GUZZn_20X4rv+R(Wlslcrlkvo=~j47FrubH)Ab znTi!E)ak&F^KW|T0W7mQ)uF&gDL=aLq{8UWEGZ(3-9??Q_SpLlt-k_4J|xa{c2c@} zcX3$@ngy-sf}+dSnFH`%Eu=w?%htv%EV0fptZn%Ts>5MiiPbz?}crV4ozY(O)y6*w%1JsNTN`^c-BwJFi?JH z|FR3tw%3@h&^!}PFJ*DVN>dL68ODrmj;pv=S1Wm{J}Z#BaHscA1`3qDl`{$uOx^q=41<*L@;!X>5; z2r41)LMb#(%R*bq0J4szLCrEM0hFWvA^H!kx}Rh?`b%SSE30{1{FkZxS)U(+w0H-$ z&3>0H(-(Kkg|z(AVw2OkT{E6m_SY6)jx*O^|FA-U-}W3)YH>4|V!1&Wp*= zZ&zN{yo@6m2aDnLEA-DqiuY()4}~h#zVfmjO0sle8q^gU(^|7JvRqM zkY!fT=6E#|ppLm03$^FwGFb-k2WASOj*0aCCx8y48>@>{cvPk`Z_;m^bn76es;l4v z2ivhwcMJd>ZgXI$Y^ngsb5 zb$^!0Av$MrvR<-Tgr_MCGEHJ$UxA)F4R0BT>i;``E@jk`6jOQ_ej;$p&VR|0k z68buy06n%iBb~4+6V98z;vTD#l^JA5s^M9V7dkQ}za?mWz^D1F8nT3Z*&2ir+Z3`4 zSbbY%zhDv;dVr36YLPz}t4ryo7$gM)wT@g9=rMZJVfU+^LaH8<++MwT)rg~Zc|ZkN zZi{f=Lk{+TOp{9natYnKEGWa`$6SLi_d3ROdLqw6ZqgR#ria#T?&yj)J!9G&QVYLr z^7Pz?`!N(T=lMi?Iy)cJ6D`JP!_FBIB1-N=nI&<+b3%S*u2VcPQGZt0t~IeBaP)Ph z12?^tn}`#Zs)BcOS*CgcURb6|!D~dqd&e5$b!Wn54V#u=pRUL<+SsGjl->QAJT~i+Hv((S++Twi4%{O1RHa2E)!K`ZOw!{mA$$Gz%HJn>QgG8?&B_<7&EC>RLAJxji-LEFV=kuC&r7k zl>&3r3wAJ~5$q(NhRXAIngk$3WuX!r^xfB4P`v3qW^Nz!xGxw>u}*bfR1k_YN^yja zGoTST-eA#EPdxlD-rg~~^LE=7tV$}jZQHhO+qP}nww;P?+qUhbV%)s%KI8P>J;vGH z=iKi5CF7s(^S9P|=9+6xX6|&H^`R1;{Y>MQs4^b9u6~EtAZ3G);~zyB^mu_LY7;_( zu7bMcja@o&xtJ#$H{jdMd?quPKG+`89&}PIED!5Nt0MNrU`8?neDSyFFHjcXbhJ)| zl@#-k(he+KXoZe-M0}M9rZ!^l5P#7FjRn42THmbW_`hWx|F;XAijDoZ)yTJY)5Pfi zR^Sw^91vJwy_wnGLicarwbcQOpnjT%5a#>IhvHF*B_N-5NM4AQd=#(Xv$?z2JK6I; zle|NA_55Iv>~<>tD$A;#QX%#m;#G(#TCB?6G;wL1!|~~K1=>OP#;xSsa3gd?wIo9j zGYC)>%$fn7lrj@4&7emV(-_7O59HHVs+7bxm)4SL)GCA`lPjdJUKG zaP6nK+~#zP#ZVr|ZLn#Gy$D)ue7Lz$lx-QwX|=7xT0^3kOk+rI9U$GBhFUcXXg`SeF&Re~e1*COGiO`gh5xKv{|IaAZz(}k3Ke&fCv**}J%dEx-F-%rM{j2CDR|&i zr%$|+u}Rumn$0E->OA?(lfJZDOm3BC7bcg4(Z6@vNYXq zb4J&*TR#|rn<36wfA3cSyxIo5v0d`@T>@^hSG%&%^(}tM0(%EJu8h%Rdvh3W#Vk5E zT?dB%6BrNpOoDkJEDoG%koN5=E#&S zT=FN>9n4}~QeNX7-f%pAx~dZGx0+J%gejF>#+p}z@Vi&;z_`DsM;RlO0~3BWZoW4!b6{B=8nEqy(+CHeJ2dm*lY!eSTV?4{z_FhnfXLHcMrs${bAMYG8@i+%Z zY*4+Tr@$KNvqDb)=7n#Mw$ZPgCC%j?$`!BUh`6<)m6o z>>!%iy7V;l7M3HsM`HR}I__){09*P)HPO%6x`uT(Xrmd92#M{&5vb_S7z?KK{air! zeE6SHk9oSrmp0kwzy*S~x#mDVgvK(55>w464$RJ+)y8j+#;2Fw-OuvU2 zu7CRy`G1)+{C()=Y^(g`z(@}$#R z@PeIsAo_e}uyed9WUCwr;{!%R(VWscIzaHCz5Xye1+Xr~a(tj+)Uk*A=lkalIFH|K zLibPCKo0;9k`j|Sda-~qx*?-!}5*^%Y1sZiApgs@Nmh{ripdZGZuykC0C!zpCzETVw{{jKpL2b1_vC zC}7hUbZqIOO!ITGJWW?w8(HKAp+(!=$g1x7QI9e}*v>RQRV?tOE*=G-c=@nUl|rgR zW8mhdcIe*a5Pm4PK4#>{sI2k{EFge>QPwn{i`#iFYlRmxWvo_*;~$*~fyUYz2s`P# zPjy5}QjM&I1X!0}%Zqp0Xw^sbRt&_dY(nOS~kED**sX)6j#CV;u5AT=o+lftVHb)pL zIWmrCYK+HJ*V~1|boR^n3yu#!OSlc%75CQX>~fwbVLot7q@s5L61v*v!4Qm7Qi%7) zLOJ!j?2s@i+~B7;JZZxTaWV^bXgOH~>ygv0FC8S;PD~4qz0%XV7>HRg$8d7lnXo`b zHN77cj#^QO-dQ95T@$x}IC(GwAHMKebYi@D(?odKFB?kw2kjK`bPPxc?c4(QlG)-d z__)%S4l*yIiR5VP*FmZ3L|i%^%A+Mz=}uiLs%>x0ZzJAD`yKki&W-d4%B@lS0KVXQ z8s8u*0&8KoZEfo`Krm=&V>(N_t&C(B+P)c)Liz)YJW=vw&CDTH9$`9ZHvH;Ub2@<- zm9b5l7FQG#OXqlejX1_W<13WPIkL=p@M1LJj5x)@2o;=a;SO@m4wH7&9-!b+m9`Uh z5s+(!2Mn)RgArG;Rf!u)w<&DUq}EWj;IQSX{$7Co78lx@E4fCP#cBK)7|l#x9US?V ziJsD=*_}|m8CwQpg*mjufaVh$361^W4W_rFU_D!>BP5~381*Y^F+dI79x1#Ff)lFU;sG>yVRYSp{>~Ver zo<>_2mGvM(W|6B%o8jg9V!;5%X3uCdWV1F@jniffM6VH8FL4ib7xJ=H9cXuUGNji59cL3c zs&tBx3Xa28w{49;SbXxH6!F)shB@@BGPeln9YVv5Js9Uzh8Ygwi?#VTrCUb8L>x9h zUR0~!@syt6JMRC!(bw8wzt#Qzv|E7x-RCX!zwvpCe7ji68(G@u8UEAxZk6JHu*-={ zMVyuXzQ2WF)f1!fcK`+WVZlc8!I=KsJ91D8IGc=IA>(|F(JVgq{%w-A$*lN`2#IC2 zmBHjF+v92?>pOVkoaKjv>sZa7&wdeWPbb2D-oV;9PSfXF`zN6ZuYK?wkq}{z_&4(K zqGY`R3bGm^fL01Gg0l<}`C&EM;5a}#!WNo_VVz~@LJ3ov{)05=LqjToFNY$fj-eS1 zN~QY~ktKc{dq}U_u5i?*tS>^_B>kY%SiRPh)ENs7>~t6UL?>!!q?A$dt2mOc%}zz5 z)Q^gcd1T%=Yr-4gUTJ@0x(V8yQCAI-+L>xYS7pkqZa|axsv|ozpl`Qq zeiDH~3}KO>l;~SdH2O-X-c0!H8JVxYqIGrg)YjJaW+X= z;V*2)h;v2Ku3J>$2~rqcUWZWokzPdL~jw(xZ;jgp)sn%VSIMR#23UX z!ZaC%N}W{dh;~SU!apfxSJ20dOk$Y=vwf7}S{F}d*_2mw9WAkm;*@*Bg8p}^HQ(8! z!9hIBp`A4N?Zib*8Y)UlCHAg8v0^r;{rXQ&$=dNy3MCneq6JDqrGk?wHu1rFD{|^x z=D(P}^VY&PgQJyjE6C-4Ra#h)0tp$7=qgDPI37yKi!;p#z$o4Q@g=%OZj@l$GeldR zcsJ2}O_Zil$guINq2+ZB`us#3mCG2$trE{XH}n{p^6XtC9)d`aS}}7e4tpVfUT6M{ zy@7sG9WR;8dO*Gnbxj}*Qar$&gw(_APc0VNwc~h&RSPB|lR5f3xMI!*n9Jtd_zLOY zB3(*t zvmc|>@*FPBNc)(%k)@_PN#}J!v5EUkyVx2yhuJ)1=RAkim+$A#kH+o?x3#W%ik>26S6nosH(CI%1X=KG@t$70A~CMvJ;M3>2l!re1B4ugX~ z`n^r|@-pRoYXu%7l4!|s3DQ6KcY2hJ3@^&a*6)lIFRM{n8k-KZN+Qh!biGQ<(yUW> zy%?FXhunYhoAS!$_GU3g06dZWp7w+G%g`FG33uyH;&R@iX5(^JmcN@al~2n(hN37b z(Hd^B$0E@mKmPUjd+{qVU3rX41E7U3myBdHP{|RBf&d6w$Ux<(q_`%UmRVl`l!YIm z#g8B5g>=RZ%07iSEZ%0wn5Z@Fi2bfm>gUx+51ii;I$k+k9<6n+a#E8Oz^jhyb{Fix`7dVbBzRsy+=CJRt&x!{&+M9tJg=z7 z4r~to7C;y9lZrqiv)p0L1ThPwmQhkfOphT$%mX>L{h!2| z>J*G_AU|246L%Xcxd1|mp|G9-q5)nZ9rX-1k<&1@5zdOkO|EuJJRVS(5Eub}$z&wt zj-KCT)4NPck@BSuxL zBKI~h2-7al;4KCNuA}hSLqqNn+eXlNO&aqNS^^(U3tSDvl(uVE!*q5{rDBQf7_&iF zsJt&%T2-E%8ZXScPgh!IVyPH>E1MVQYpfUsYNF%<5)m&J*ZVODtLYTA!mjJUuCHE= zCASip85bvJppG5>i*E89grc(nHT#jNu`S$njW$57XqU40a*f-841i`ifn`5a{SEo? zYx&CMhYf;iN)iGQ`I_dqx^~W%pG)wKb4LW2X79DA;~HhMDsBWlh60~!JWwT5=+n&* z(q^1df;SF~Q4v(V4W+UmnwRC--Eywx&k3;s7;B>&j`^>y} z`n{2j%=U=uHYnTu7PgJx)_q|AMr~f4A&nZ(QSKl{?0tTG^4=f+$dp7zA%{;R;MO<7 zx1Bn`CkS9SHWRg2AE8vlRKBgP_+`bqRloq}U3n;pg;Lcl3f&;3aYqxUY{_CVvix72 zb6)KW82QS73Z{d?tEXg&CC$Vk6dt*y9*5&V||2=hMC%@Q}6Gg+Hu5!X0o&* z?PsS6=9ZNB{!X3~iB zJP^|m!Cjl%xr4wn>wSj6Gw)p;YJSulPt)O{k;)D#^>X@MO#lVll8}yAc1;lu=3}2n3iWFmoI9&4Mz4J z#3{bXXRpZwPgtyv9?WM%C;o`b2=N8Vy6x{3KS2B`mjQ0a(2yCjqta`oYt&F52izN$ zYtPCzoWD3p8#v-DzVC&L0o=bEPI>-^E!)Q0*v#ZVxCvD-SH(r7Pn#x|G|1Rr@L}?y zsHV)AR&n@(-*#h!tYW^ph6=7}9fShLM^Fqlruj-18kbw*kvy`G=`CcgiUYV-GK$%+q_B>@C#^zeM#*xMSwInrqH6OsoH4t)8 zTS)lq05rxhpxvg!RSIqi`XcbALgP*uy#A@9Iah zxbosuo}Lna06(VsguEWS+!g;{=_JYUw9D-n9tFaJf6x-v6bNT%QN+NHz$#;>>_8Ol z-vmJZ;7xAkp#`|>WT2lxn9h>_u7(-x14jm>%{r zT1u5=Uc;D}IJ6dE(w7_4Os&c5tT0+B z2_jNNT%gTyM|fEflyZ=;2CjzwBaNt!1O#ImyivnT2UOD91H?k@fDe-5pvG8RX`)$3 zQg8eUCT&DBXikEti5F{QoxEtbq*2t8qF06JQq*%s1~s8hgBs1rMzfQ>5Ixc1yi0CL z$`4rWtOqv+e%dE|w61xZ*F#_-tzzIH!C*)0($PBOzr@dIfN+6T?cdzeSZ}0u6nPi^uSICSzLN?gje=DL;%ec;!T0BPE8N9)+_+GS}#xN!tF| z{HxMli3rrd^I2h*RGTyh{{?;B$d*!l#EaZy2*leAh0rS~8a%|v8a91hedBV21T(kh z$#AaWeL~cL+bFBshn&5NR7YOwE=P7=o6G0$Rh?EB z_~UauiL4VqCM!zc76)6RM10YqK~DCK77Yxxa3Ed?UpK2BeJfpd8jCK5bW9GDgR&|r zNQ}^9@*!1QZ-6`G{7?T*KFh`?ae-O-gBu8WnZM^^? zC}sH+01^s!c+991P6<$OcIoJ;MMCH^A-1hP2lt?1QHdt2zs5l@c0AC<&(lO12u<2- z8aEBsfiSt#!~BeRlRa&a=y|h&B;>ucE_3xi^ov=UJz`|ve1kFz$4x4x#Cji{!A7nA zwX^!_e&6wpTWb}~%z`br;lLMP1@tlf$mvJPWIE;cWO?t~){^4|qappmk__>LDivTeT-H}q!^es{rj3LAvLfEbKW_8TuZ&oq!B7%;OOqfo%< zn*G$xAfa9vRLOhDNObd&5;d=ji$J>sp8n~qXEN_zWI=Z!7$G-uk3W7t!4jYtVlz*^ zY5uZG(`3vJF}~glC9_Kx@Vjp@e+=%bd0(_qnckW{kg27 zva+bO6;^nDp_{CznBc4ScK<4`XOdcF(T?`vutWaR<1X{^+Q&>R#lEoo3~_*8I##=* zqHIo=eH0~R5W+_b26Z)dml)ZQDqpC12RU>Jcrdg`bu%KHy4XiHR-fk5;?Q1(sKGMh z%^s%IDI!L9UkKH?gfd+}jG^@Sj9o&5cr=I0kk9UltV-mfi$NjVhLy2mc5^{FgQO8I_&Ohj60Qt=JcGBohOdN%5F5Uj%-UY2} z+z#$iOL$7W682t{Du`8vKl=Lu8yB%GDr<^)eGmIiJOX8zJF>V#q}I#CTFV8q-Ch=F z_z&Af^c+_`>uK6xi{B^gk*Uob0}ydhHv1!Ami%x$>#O}roRmyRa`C?X*~xH^qvJ(R zS9BgDmPILnFRq#V@Z|#D{#<4rK{TL$mfftFpbK_?F98~a^v)k&E{x#}2dVC(^v6UE z`h-VDjmOB|Rre{T)Y*xk7S#!s<~rZvP9U2`NdyhE^neEe5<3*9jw*uouqR#C@qtZ% ztcpF?n4RYU&Zv9xyS)}2Ytwp6FaN^#@OL@RmTFxkA#Y3(2U~D1JI)EPqEABMvRhR% zPsA8y#G8_b`ggR!GH{}3nxnn8w`rWJl=Vj5E#M$)?I;?%1R&NPDW0h~f2@t8l-plV zwaL(~@H%w;j-;o_0<2cSqkbH>N>fLvqqtcnRX*Y8Rjt2Q@if8E8i?hK95h<1qtuxd z-k28FdpTrLu7sOUSKtpa1tR{PU0e^b%-k#u9$v@_oW(h!Tl?-mWZ0?>`@sdS`@=T_ecp@e1E+ zz8>5crqptNaIGKk5S0*&y1|>cC?h74Aw?TJU$^zWhWE8p{*Js#r<>gr$N{m#$!0Ei zL*KyrHLu*;IdcnX2Hk}cju|)Z#MQtObEqc#4w;PzM87xCh-DXj5egCH17rr5a&FY8 z;Q-CCca9s-6alv_K*nOb$!&gGB*eWoCqnURmr1k_34F`>IG>ECjztInT_{^4*Nb+a zL&|DZkXyJy)=jw5I3!hI=rm#y=0mH5tA!lr>g~T&5-tje(7BM^oyNQ^u3?P=L4!pw@}FB zKT}Z?trQUGV28iRMrJ_{(!%}m^P6%7;becpnFiSv7e!WeIPqh|I8>)hZ6f*E5YZ@l z?t?EG zi$0`bXdsGThaCTE(^4KMi??{E(s;g3(qNtu8+li@b`Vg(bzoc5hlCUC2PGJa71vBo z-iXcvR3R`GVG(HWws3>As4An1HjC41F?2)Hz%(p622<$zLpcnIj0TK=re$UgF?`^* zT~s8bb(*bk=65VnzKNUVU;cW4(4rb{6W1xDEq`J@U`G{+2g&fDqpQ0E93VIAe>p%K z?guJto6ukniz2Z7qKZ1ib($zYrmUord`5<-$TiGab;>B5Xt6{gCx=6%W-nLkDhmVX zg4$R7a6h*>zhn?*SR5uW>2Kc};Q=SPgBGrSGG2^|p~vO=Nj4+t$H*?`d#`wgb6&-paDN$iMsNXsBJ0T1qS1 z8h%o3jr~vVOlE$%ml6x_2h!q45|>$TnBch7A0aQlL(=4%cs=?%cB;pcW62KGe+5%aXee1!H; z=OIN>v)G6DL5Eerb}2cxe21rdLrySAh_voo@BWscs1phrbbm9n@&A^g75$%mGQwt- zM$+G_h<{;ei&We^5f9P4yC&&Iui$ZcbunOnB@z-=;^IS*sQ{$H^RE%@l2&0cCrtJj z8*gSo1@8IHiC-2qAOSWtg79lp2%6#M^A=SBH7+i#t+h8k-G=xqBt|u1U=z>+~Qejdf2H07CuG z7S1w}bt6xf(IwdqRo@JtA^JH>rF{zfp5>UQeC0FZScpYcNrp8bbMjysOzLy>;_xTE z+J^Q(Q(YR-c8b-iawD@#Z%T)q?#$X5GQV>NJx|ur7~sm-Tph8h)ncR#d|AV^sSKR! z6gtYDv&f=od?1ToLs0U|PD7KIXUV0-x>Y@f4A^!h0u$e1VC%ANG0hycHY`<&xMgs|Gt53lmT^_V zSaJ?X`A}4C6VzNJ(qdM>95aXF1%N@MT>i+KDP1jYBgw9QeD#=I`08;NXp0EKv%Nm0 z0sYlVtST;zvZ{1~`D!?;MZ(yt*?0J2gg#;QY1R0u7hCN)1_IGki!K7gKy46I;(AcK z^&tThqz*I~OU|siM`BN1P)1d~V{po(`h!aZd(99ms?^#v&DAWQJpBvvDy9GOXZiF2 z*)wNvL6gG|Z#nBNot^-ILo$>lXGhVbXp(V{Lc3x{I@WqCm-Y#3t5{lVS1&hocHaPP z_8Zzks(LZ~Qf(>NJDp^NS~#8E=r~={TBF%gjs!I2&edw7I^x?FeXOY7*aTq_a{@HUK%MnoLSlKN%vcI= z=c`}%4MJA~<_l~mYM6eJZLyBV0=n|R#b=YIiPf+w55+Jt;+Z^yw>&L-$V{_nbE>P? z?z1#3tGBI%NSV5j>=Bjr$c6;Xvqkem^Q@=+Ke9(zk=I^jj3%ZNL;V>t&9cn%)z*7Y zUoekeZn!cJ85u15U|{0{aljRivdK5V*g$<+Tf2EjdtI#s09CZCMKEE%(* z!haX*V5J}|bzY~TQjV6@D$Guap%6{u#%!su-^N)|nSj!o4p_jp+9(v!o>(_w#8ta6 zCx<5iWwVbG{HBdLM-XgIwEtN4brb<~09Q8Y%tEbBMp&Ezjk%E{Idr=%7eq!P4?(UbjsG7Sdf62nKb&awCg6!rHFf$$P99heHTGF23psGhJWvPqAx z1}j2AbLYdFzmK7xUZWe9_vf^?scZpqSlt1hj6AqmE?+b~!E>6pa^fC4JX4Pk`#E9c z^s#c*PhQ-Iy3J3YZ8jtIvN~48C~C- zGP3bDk@Dy^gC)hE;6DpHMwChCz=hQFQ1feMid8!vixa~*$kYVSdR@*E0Y|Pe*7}8% z>fdgQ%Fnzx=VELYkYin34XpAm?)&`!T;$ZwqN3Q|U=w+F)kMMyy*Oabu|6*zB)oES z*W7mJ`fnD+<9zMgVyKyK){SsB7giwex?tWe+Z8SbA*1jL`*~8Kzi?{_`)Ty7GL17s zxvUw!16e&oHvAcXU}~3Br5Hf|c9C;tVS9qT^GH4M0Q2um9d1~XGXcChW;p_sJ&g(m zF>~UP*@cli|M|&d8DK;YPOX~`m|TlOE5k?d#%$hPmDv`v57u1Q+}=WigZ31&I*23a z>c)O@$Ji%Q1gA|4xeFu!tF2#f1bZD5?-2N2P=@?4v9GnaH%X}iY%7_owxpBXbxQck z)*9om2EC(p}k+pj6&5n_G`!59FzRnCFCcq!D;_WbKlsu7`yBPnXj_K8|p! z!q7K}OgQ`VcAEXIED^(NNUp)|*+gH6%y)uoqxEOb*fK7AZX3h>2XGy{mo)TODJ^$K zU7h^hIz>^-H#lpFq*}n&LRWM_;GE37VM{-ON|4I?ffUJEMV>!V6t?_L9@b?=r;FPH zZgL<$bRHFYzy6j?3O{u~6MsMFPEh{cbMAkr9{9_4;a}#`&TogtzeAw~iGy8#l7*ur zn$!N=bEQz?O^h&Qhg;A`Me+h{Udr0BX}$A-D`Dbp*=ipx47!ep15Sy zd=I+WXj0Txs;MqGTlt_Abs+0HRsSA!*-f2}h&I?@dQcQKEiw;v&r7{lM3SgziuM9RSV)u2q#~V@ z8yoEc8VM48dES15S&2)EngfdAa?kjiJ1rwL%2qlAXbX%2nrYF8rwHcim2L13sLx-I znJm56LpY-l;GiI4Z1H5uMwzKfdS(xXP}5*?td{c?wyYYYSQ(P-w%6`+_E(}R_b)nW zQn;w_z8Ij!an4N}LX6MDYiU76AudS_l$!CF!B6fSvn}Ox@mIX;kn|8-OsI!;YK`>^ z^lBJZD|yv!K#r%F(FX-qS?c0<=L~e~3n8Yf4MWZ;c1_>@d{{WeJWYRvi=d{eia>Xr;16%8_8RQZ!)0(SCq~sMDdB zjA8{QXYS*w<#kS$0|KEXb-rg57PSwCIKyr(C@}XrNitM!lBkp?4?1q<AqCtUbM;cXlV zLYZ!Z2hNMp)6A8rJnYdylISyV*nx_S%*GDaBu0?CN8vy3!^XiOU#a)bBws0uXabQb&s*9VMOb!aU9_Y1>@Z-r zbWFu!VBy!E`Kk8j4MuyzXhlQ2QH(sFv+CgRUVJN_*J}?aazG^COT`*Y-|oEni-CSZc&_;-GC1VNVlHiE@rO=nEERFxhKBHbs+~s%>^mYZlvXEu0N+ z8_c@gQ(j?cAV5z+aWQFE(^#HPOJaY{=*80RG`M9FVV*AAX}GH;jsamTww%lqPstV6 zd&w{CD}Cmk0e$qrxNq%|Vd+a0N9j2;`_mtedtvSk;p7wrlet*GZ$1}v)Va;XQWo;J52 zt8jy)n;;mI4Q}rq;8NYgrnIxs?(KAgdlHt1H$5mIUzQt^LM?=5+qZr6=MwN`O;D*E zNrqC8+`Ts>TfdeSm6cY`E7W5aTn;*x4w5D;O40rB_Wkv0yGeWjz!cY5<5Whyij(RARm>T zX#Ox#H7m_&YtbrOB@$7-D4_-1_QR`1lstO=6|DThsINPiTeD>S3D|m$2dY_jmw78M z;sj3%D<*cR+0ZHJ1`qkupN+68R@9H3i zSNX%ViOwc`im2sLNq0R>{3z0+sbcW~zeozt$^-}shCgB$i|batpeA;E^l|Jd=tQW- zQ{kFk%;dNF_Dm`WE_oN;??T$*a_&|GahYFIGSbj6z!27jQiChUYsCS0GJO?aGuF8H zmLCM8&3vgh-lOUmrm#zq3G+Rm7#~7IYhg8XE8G?ZVaRz`CT%C3`&UB}+@p)jPmPP- zqO2!0RZU)N!Wb?YrFjynryyO?lgP?;F|a`mU4Ihd$2f23hK-rhER0~T0Vk1?oFFC9Z&jrT_w%+A(!U%_fnF{|8~nL9rT6iG>8vuUeU*nh+A znjv-jnukvrz^Z#E!gZ{sS23w&}U+G>l zIcO2C(%NHuL&(-f)M~2xrRlPU+$R!-^u)s5|bw{RX{qCc5gkkvi1v7gkhteYTa(gW^P|qbU0DO?S?$t9 zvm~P6AsI}Bs=LsWTH=dVmezO!YK${8frVF2XzmuJe+}!tHAE4s2e##$=09b(W6-=1 zs_1ObE5G6Cb$2(cJ&IviZP?@oQ|lGsJhL-vs15@1BhC>=CVLe(kDG}QupDArDbtbA zFW*g+imiZVscJYW8k>-J-!l%gH_oN7?Jun)x#c5sU3oTz*#Y@P3mlqQi<{!8R@}wK z3FU!z9LX!cFeo%*kVAwnv$I>~(4ybDMOj%KU(#4!XzuRH7&CDme%$W;ib2ie=kvRX zwCkKZCFr{+_XeUN*BC}#2eoJkNm;}yS9E>3ST1w=(_jix;e-rS5CyS=}j!FGVK;k3QF z-tjYMQN~c_K&*u1(sJvAAp2S*(dDSKCX+-7(w3eDO^%h3&#IWsZD#=BxC_%L1g|u$ z6LnQtDLP(F6_E!n?8}U=G*=5A5;|h@!Pi0!T08QE*EA&qmYI3p*BOq)T<>tss0af) zeF9%7!4b5p)2tw<`jYMJvC;HQTEbO1;IKjpp0pZf@fiF0Qv!}Pw;d;G*xrufn%E=3 zeur38L`k=w?73q=J%C~Kk2Ke=_Yzyf#-lRp)m^a!077%5wXiLlHg`FYcP5(%Pwoky z6s?sfl(Q;)j?HJEZH&pf4P}*8cor)&U3J!`*%7hy*MdW^kT`CuRlE<3)F~2SJCJ8= zOf6gwPvGx0Mq#gWL=Jgw>8`K(yh3rjZQI>b)B|7Ld3!kdYedQxl=8L=x2T;*#_o7~ z`2fP0uMc3a|I%m)4*7#ouJj+EuzEKC$o;MtYX8623&wv1g>+AOmcH=Gd?745H(>z)8M{izv8Zbmr zoj>Ca_+X7)oAs-p7*UzUYeOUTD!M0B)v%d^Jy5I|XZ1_p(#Sn*%GyuEW#s?-5im-` zp~L*6qP)&wQxNqgwJ>9(dJfVRc8R=n>x&0w#t^CERm_sxkWky1k8L%a>ad&GvS5!6 zDL|qmoUJ@qepzEF&EasK(@zSBm79 zP8sU0Srn0BtE3!9c<>nW@6lhDJ~M1q*1n=cbix*I5-;`-!LZ@@1^N7T(RSSz#Nu|` zB6a#BPR>{Ga&!ToZs@o4JXskO&w2AL%1Z{{=2U!!YNR%h_fW{xM=?{5@hc z|21L|{AT&*V$sfK%f}y1<*|hklVc+M`R8p|=7-IV|L*2-2F-?fV{A3-6h(i8xJS}t z;PIL<|GmAn6tx@r2;pAsSalTX0Z5V2b^7|g-a<&l^w-@uTNamcqP@H_-}B({Es8=mNUjaQZNFWbn2 zeRc5_|6grHQ&bMfYM?fgrYw#bC1Iy=66WhM(iI;2E5scFOz#*+k2|U_5QV~coj;;R zZcJzrRHMHlv=L#}uH~sKf|)(gIQ7*2Ch|O^`kBaNn{!S%1a5cH)~K;_p1Q4NOBm3r zZ;kd&%F?AK8Y7S}SPJ#`>*S7azx2>mrbUC+Hd~VRI730P9l?XV)uNbECRz7G0||RG zy<)bV$sTzQmBogK6~n%`b+7@F@m1!Gmqpc`0l~O@(#oOYQfpS(c1)VkfCU0qlM8Cp zb4PDe{nr6T(_{Dkk%}?Y#^J}~BA7KDe^freF8020)jc%W)$-HwO>UFaMU7OApM|Sx zcbg5#7MG6t@BCoNkBMSr;PMeb3DW8_rMk&ls6TJ#kUvQ)fZZNpukU!4*r z1o6rjmwK;z9dCMEwYro)zin&y0GJLa1%H&3Oo;{;OOqS(GgB$0z>`hN7ZlVHnF%W{ z6&?iU4I_~apul-xD;MmyWy-cGO2PG@LT{lEniIkYQxj43Co<^X>)E3%(cBI-(YeWM zk5Y`cx4EVGb};#x!N+z3(?$UdeE)=nRRv7V0tjFJVI1Ns9}L)59y1zWJc3Y;U2(QQiAB)6tgD zEX{sFeW^eM?Xe12tcN|g!>hbny$aHtc0h@$EO;Qy!cI9|vIcIP@F96d00{{MLV?-c zFzaz5`HU}kDGC42&872NQ{F4%YB-uPe^0`}w`8BivoyiJUB4Sy!~$%G%#yMP*i!%b z&_`ddky`}@_~utO+-|=ya1K*Bahd8>Oq*w818rz@@T;LkVxB8E8srNd3v}>Z&_XPM zy5zS)qY6sw0b7M`+n98GO!AN2-0a*Pi||llX;Li7MS`}+;(jH&j7SogHZVXFgQB5q zyT>u+MWH*^?HQ9Qmbw)nUJ_Hjm>`ieoTGegW+`xef%;Ki(i5<|CCp=ZDKA67c65OI zAbCD+kC$sSVACDpJa#|>EO*M8$FA@?Q&qb2gC_>}=h*+252W>Jx3BtYJD89EMbA+9$bo3f44c!4S*0v6^9sF3N)h19-ypCO^{0k>F8Mg=qvmdlc? zlMH7Y5T`nH8YvB<=NtMoR<9Yt8|WKAvED)Ojhj1t5nAUpQPXj{=-|3J-K1Hl!qUMv zPbDQ)6*BvNY&ob;xxoc#?hM{iN+khR)USZ=;B)V^r5?>_#|KkRD#Me>2MpguyrqXi(K1>jrX8)eZ%*?H{A z2sD$pnRTeELf(#8ff+!kaldTJ27|L(zp*sLAFlGv!7z@h*x53j`O-!Hub`uv+1 zc~dBjq5anRbpPAaj{lAY#XoUo-_chFMy58FhDP@PvQ{Zd(E0Y9MI4--;UAa(g(6#7 z>Z|UeH@=qxD}{vki_t7jbsc5De@1%z#IZT;D*g=RPRWaRKLCdNH7}B3U0jlACUEoO zVuORF+rjwi>i71x&ySXn_Foy7PdJ)7H-N+#iohEV7UwWorSxjK*i{T^Kk!sJkd$sQptjF*qXPy&k7O3q{ugQQ7^GRWZ3|{rrEPwh zS!vt0ZQHg{RcYI{ZQHhO+kAQMx!ut>y6<^??%R9+_##%sT03^EZ^ayQ&M}6EBs^Kq zwBY59UcxVv6=UB8p8#l%j-1)wI3UcrEJ$J$M)pqwlaC}ld+#e|EhsSIFoqc9zOZNI zOl|4C2$Pt>hT*?(&+pKB9#7_dS`!H|)}UL8Emo)tM1K0BQdYsQ!2YCJS2%f@(;`Ki zFKZj%bEwL!`;tX$CUraAFcj}WPA0&JDMy3sTK`sLRr5A4utS^!quEC4ky3m`U9`Z- z`C2id3>ZshqWgpCTi-Bv5#I24%sjD}esKQtNPE#Wf6m8{)ILFP`)G*B1ai>x04bT2 zj>yvD8W|tr63?(sc8}F=uG`rNg2YTw-PWUtX2^)u5amNoWf=_}#_=?JcX|mZ9%^0| zR#li%9)<|LQ}3Q~kXICS%tFffmJMF9!?sKmuW^!;u5^)vZpBy$QIR#;r4wIUP0b0; zexTiC5@%P1zW@ztvWW21s;E|Sp-z}BMgdEms)VA#NJK{(h61&MF@jv#ku(?P^FOjS zC0W<@yx%=)yCDB6*Zc4EsQver*Z&!C$M(pq@gW3$!T$ZT7Yh{d!&>0357{QJ6!D^)Bd_|^JW>bb3 ze01%Bg2vHDcIO;$-UU8&E^8)*XJKW1oFFNvAP-h#h?;n8%#X0;yG?F?^()3H!&hKeu=WOBNu;s zj*&9Bl}09~FQ7Lh_sb#zEW=sQe6oEKh$mt*Mg=kY*rGE4zB|+zqV#-?f&BB3tRfW5 zT70S_jJG;_oTseGCe7~?_jh7FPWd@fDMW8HW2Ni=ajF4Zm;WgKMq?iTGJW%ZzB`=1 zRRaIHI~p{hy%ZNPzkZWi+j?N*TIXO0QT8OLKIznLJqsI9}!m9!>8kJ!W{u-4{xm&Fx+d z(XQWRICfrfZoP56&IiGBfowa~WXRQ(y$M7i&byk$$mkLk261I*_at9lT@P^a_gz7I znH7E8wAgx;c!1mL=@DKw=9JIN+xOVsLlxs89K4Y1{Q{4WQp6spCkj|I< zjTKjsnR*9hsB=NNI;$@s)BLy=mq9^tz##(2HzC~db&CeGQ9ylr!-7vmf;ml9r+5;! zq0IEDQKkiaw8M~0a5ENb_qS~dSvdgrFAZ>n7}Eq?f!j>I^n(}B9BNMO+n_1-0rkr= zgtZ%efB*rFY7uzQd%3rIlC4SO&SY9(WjTT3QP97>_T!2iXua#>WbY!TMYJf}xD!_; z4OkQJ+!ckANoVqOf8{dPv_Ngp?0x|2TO6)L@avXO1Ut!SZs9DVND)Z!yz+s@scSkg zrOC17et(d94Z``tCfd1_@n(;?a)H(z^EtoNq8aovy#uLoQx@)vz?n%pZlZ~ay3zM2 zPRd%d72Dj0{OUV7=GC3OOOn1|@d{tLYB~6m8etI8f$<2MalU|1u5lw=LmZB@>Dt$r zH)v#BWB=3!h&{7NdZfo*D=ACPdb#nr$->K!K{b|4)OT~4*&k?u9P9=?;}QOGQK5M{ zQG@l-BuU&YQ>sf?4g9)Htx}enHckOQoMVD}4tpvYU8kKTBnhXxN1;&D{{z4b+!JsB~ON7S^~Z>*v^w?FDb(S<~SwxBQvsQGHR z)a{?fb@;F5&~iZow>)!DC57qk_{Yi3iVCm3YcQ%sRTW<`b{wkt|4d_dWL_Ljd7zQ% z5&tf0k3oQWboz>*NsOya0_lLSC9nqui9yiTLQV*?L7%bTu6d$VyP}x2C1(|%tfXnP zVN+AE=rigoSPR|VgszQMaLM6L69UA;#ax}88<3BxLE*P3P|}A`{6yNIkH&;;K#$se zCoiN3Pkpxxd>PkL2pxWdTAO1oBUSjq^@5~TXxdL{VCOUwXnQFju2pMO_$rS1e=aMu z5a#zr>+FYPs=x=Gj=OW750NAaEQUF>B;rg$l#wV|=c&!wvtVC!@=&|1#}OONpxJs=6&v(pCmxIIg~Ue0n*VjhsaoPja$W zi2P3Y`2M#P!%RhW4~sm2b{_#PuN+*LA$2UbC%O+tMhd}FTnm3yNIQkqn5|~&Uvo9;(9WQWtX^4YKp)Hmo5Ww%&<;2uj4{(a>y$;j zMF%dL<0OA_kA^|iq?rSwcTyH@Mz*Ot_w7cWjP=Lvp1o0A#(ZikS~`LLJisSZxoj#< z7z)4TGoV%+Wfdy88f#ae0seanvgnXehBkpt_wls}U=eLh6~yw!QhX|D*3~%Q29+u# zF3bsCTVGz}FUBrBSc^_>-176DeZu;7lO+2E2h7a=>+s(aQ3$EVcl-;WAiU9$VdcaBsp1TZYXTv?~v+j<% zdDb`Gs5g^J_&kh!rS9n7>#h5{41te68M&<ZE!Ya{@Vl+#lUTr zG9a2tR{Y`z!C>X3l%b=8&zMAQ4nxu%#V1A59oCM2r|%dGi@i%Pvw0uFF`Ru5$wAj1 z9)+#;=g5p32A1tPr;UX84J_(ctU|ikTFnD?|7CjFGuSp=%Wq^`@sgr zN&tyERZZK=M~gHohF6+TN=)u??51%~k}yKhuRVd}y{;C13HhqhVHXH9>xT0@_DG*U z@XGB`g#Lp$62!@DrXi~bbtAzbKWFb(8}`}51@dE~9ZE4M1fdRAptgtzSPn2Bqm6L7 zXfPo3Pvn8gh2v!>V`ze1n>>PlhgYg?`6?xZ?)$RrN3NcqnaYXxQ$9SxQDZ5Z#Y^N7 ze?APM{pN<&&c!QJxDoC4@k5+thb31kon`xGFI+xTmpj~T<%7cNcCS7trbr+Yi4-uq z)0|CMZ293p(b~nNk(4Hj4c%RC5vXNKogaii%5eO(Gcfr>6Bm-!ooBj#5)OK)#@ z+ee;M)zV6}H-AXLONsz#iIR+>`x?S@?q{$~W;b%95ht~DO?1L2LOxxFjEX&A;@3D2 z2b^v`cWS>p`aFkpLNyCiFTZXRn*A)fKf54bjlike6KzDjt2jVDzyy&c(klYd;Ld1R!OOUtu4@-tWVy-gVD#bDd2Z!vLjgoh+DMuDLJ?Gt%+S&%I zVu|&!DkH=dB>QRj;dUC6z~M9Vihe?Mi5FzvqVkurgB2ny%}RM88B7+ZeZptdKiBw< z-^tpyi&+}P9lTj=^IuouX{Sqq((6;C$xNk9TU{ki-T?`d2^_M6Pb3rQQc+i$E58In zim!<9;4g+WiRcH!KXcNNj9B`KHc$*xC9GWrS%ezII1F*d)l`3+=3D>7JUfGd%c}Xu zFn+@L+@(0=;P{4Ui}4%FB@M=~?D8$;VbIUTQ~g`RSV=j_oB4uSxI38mu{97naQ9&3jLrll#nGFehpB*2dL`;EF}BXGJ+Z1HS%C(<~79RT1ft5_LI-w-l+9%F>KT@gi zX0vZ&%>zzk+2#*)5cpVcEbSHj`LRwdKPfV z-YK7ILcgn*g>JaG~MmzNd5D@h6~N8lGg$x&j1(2RN+O?)NhYG8?} z3jNX2XeeGX!-ah=J5mxVAbz4|F_s%&NG+cawInJyR7oZrt}>8pC_OYQ&yiuE9Ph<+ z7USL$HOZzN&RU^0DPi1H^9hW|q3JS;mDR!lSp-pNu#!RurA3~u@IszGFcbe)s8=AL zw)4c_$3l3Kh9^Vb$~(!FTy|w$hsc6we4r$Yy+cP^^0jt&V`3JigK*E3rL5aDR+Zx1 zMo@_Oz3I3{A8t^Y_0>Zx`ra77)0KPS1;rDSB#Yz46U!%vMGlWBb?Ua-IX*9Q#D~L2G2s0ti)~HyN5W%~J!hCY6IwU) zn}`brT~mqY}&c}>Lb@2ROs-yMsZsRugerqVIZRqQ{O=l(%7b?whGX9D6SQYJ}hQ8GNCXSEGA~P zlrU$_CnUGq+zUIo8?@J6{1t8b=^YvU8y^VC$0lNDQR(wHR$r0r;0TxhzV5l5>z^K68^o_H z-4^tOr`sR|tglw8Uo!lteyh)I-TqX&Tk6G!@?7fdkWeH*k&>R*HGw+gwkyzAtEKAp zRI7f*o9z^?Isi&Z75BTc^%r|4rOhbkw{DRGYCH7)ngf#X6lDh+Kt*kVb!qIE^JA|b zll}`%nBfwx)_50j(yc52?}?&gd45;raTi&qXf37xhCHN?-2Q&oA@c*%RzIPQE^?|B zdc&PKE2+72Iqau)x+L1Y%Kxkax<*0J#Rg4_jxmd z>~es6y#bx~8tp=4q&${esvP}^u@+AvnDRmUfF?Ar3H`0*C3;Euz-8dZ5c2H=_x&9% zp5e1SR<{{?T^N2Z$)4-TCE;Dg;luOrl{oVb{HmBj{668^a{5sBTNi0PZ|_;N!1G?G zeKYJg{dKmhRD!1z!1ieufpzO9vce%MVy^>Nz?e29v15N(GyqQRg21ND>SAUc*U%E( zv8{g*cj)4#@e#xZFUd@nqF{uZiCPBr<*lT4Kwd(5{XA!d+eySxQit4o+{z-k)>=WL*V^o!gYJ4xa8pd!kl-M;!dz#~Ye&!wteFA)XfU)Z!bj-gB4?YUOxks>I zi;m}<%)_HU^cr_zn(n)Y5Dl@8w7)kDBtLdQnazW7+~v68;1=QK$G=3Inw34VFOH{e zrG_(0Ulx&_jLM>!)lE$ULgL$=wJw4_O$LCo#m*4y}OE9ide3 z>v$j=reG0JmFe!F#wHP!~$nuKEp;4{>Hs z)c~}cOuPS9^?DZi)vjx#yju@FYM1NyP*^1FGoj>{Y^1f@Kn*lFAZc59rf2py<|!gt zc`hHBnJS%Vj|!+H$}yBA9$xn1D_1WAUWUEg?UO@5f*y+vc%&YamLHsIHM$%8t~cAu zowpmxId884IrgX&ZrQXeDnRbo6KW$*FZTmaE>Ev9!O!^eet4ZCt4kv!X;ZIE@#Xj9 zG5XUCrGH@Qr~*fI)aPaQs^YVyO8RDWwjarG+EBG$x*YYkCK_GVUt4>dhCjBN-9NxO zC)lTc;MV?u`U&5X0CKGjeQdPdmhMZntq-j>+})QBc>?SDiTj$J6j^_cx=eZtutOL7 zL#Fq~02l>XZWw6c$9@VB`cDycpdv_&zCSf++0!8LblLMD;|yziE!rlHZ=umFl6)iC zLIVarfi;$KMQ|=g#!l1JW4zN{4xo*HDrgQ?{uvO{W7)+ zLLB_USbA#);4u^uHirb`$ZhjGY@3hvjh(N9m;4E%3>Z|vr~DwIU!X`kra4qav#4@d zK|yE48~huHE3ZDl5fygoy~_lA_67s(F%8C@?AvMV*O}mpTgwk$kZrq`ZCjLmwVHiZ zm>pz2-G@Zso=zKvQF9G9evBw7X%i8~k>cAQ+N{=rePB63A5oASBAK^=VfpQHK5*E) z+!|7ceA#E{rX>~Br({V?`w7|H|I!Qo0)9|Mf*P(`B3ggzhDw`SisoIKGZPIjyP@Rk z5SfIF71hE7?Cba+br?>&h z@I88dbLT+)oijH<#snNm=mvm0dCJZ7PJJLLjIu9isS-RcL_P|$e*Y3O=|tI+SCI?e zYj);ZX9Fh9^$J-_XIA{o;i6RzsjWd3ahDgCpJd2u{F7*Bhg53_GiW1n^G}x3K*G&PP5v2x@RJ`Ym89z{F7oQ_^Xuwu^KFys>-AU>NTm*_@9++63jRdi znNPg`yLZGQM~%Xwc*kc2LinK?086~rx>)4DIv{HpiYpO^8&<%?Ood%q*)W>AUPMGh z7bwjr0X?Un4c%~^bmD(NPn9Kp0O@%EoRXs>d#|oC`0ybi5aPezj5Uj5*p<1AZgHB# zEFHp9sv)%SO3^s-HWdxKa+cQCWX-o#o49U6 zG`#ql$S$Y2#Ye$qsVvQmg>g$!#({}ta<-+iDeVihb6g?6a=d^{4+$-9^tRYYoyJ0! zzRAF9{@_C;Qi2|aU}RRBURGZ!!;7{}hPTd^s_&D!I^j^8b(~P`FU!^Q``@B56Ekx1LOKoxaso!Dcdn9%3QcWM8R$+HMpL9T%cnCdT5A){XFwQkn4gW^N zaw0qSI7D6E6mf-+ZLj7F zcFW{2C<47cqhU%C5puoKESdPf`63ISTLkD!M3h%G#bZkT?Bw@Vhw1~18awPP=PgRL zh)Qn}x{!-DOCf31Fg&p{FGaV2B;7{4!v~Ce3TrcAE1EjJzx~u}4rj^FSF4$|smRS^ zjfmWNULhy4K{K*fgKSQOXpVFlNH6G?va5oR_J_Y=Ytq9>Nw|)L zFy|>(q++EUD_qr^{p*P2$CZ|063Mk0uE`eFgcQ{jBE$<2Vr1|Z1#)kWOGZ0scgW?B zskX9!0<61s39lbLicExWinSRt3*KI@Gl+_MqdeJ*dWQoZ?72@9dlqBd>4V75u75yM$TYfI-S3g>rG3Ht#7+O*bi)Zy}Xn^|Q?ld-4hMFgGzWq`<JqnZi{(F!mi%9#x*wglp)p|?Lys}tkyPYrdu}MTsFJxNtd1t>;T6P{ogKd$?ig zkX)l7h9urlt?0{-!@Q!cbYCbc(vX1pOwlnu2_k?bLDI~#J=-SIiin|CeevtB#EN1} zerw!GacD|baB2Nq=N|$B{D?CB5~%~I*VZ6J^HT!`s4}(wPqP+0wOSB(J>)d&fw}bM zD~QE-B7Jizu6fW?d>;NJhmZwf7X3 z9m7+c(U%_R7lCD&J((P?V4(c2(idbf)8Tiw+dO)jt*c7Lnyc0f1R8#9y34B((8aXy zuxw!Hy9CXkk-`QCBmGO{{i|456+>|4$jR$=)Q7^;ZT2^7aHl_mz)l@3QnD+Pk(7}C zuJUEG%$PC$<)HjIpU^z|gIVIt-NktVbUqPAs)0GL86R7|p=3y8-k9*TH{!<(2Y}da zpWV)i5P(zP7$?$p+`{;CNcy=tV9z-9B4+4DVrz%<`WGV}pPnLua9vovF zZ-BH8--cyj1;KUg|9UhL+|T$e4v^Ceev}UZvxw+9|L~-VAPGrS0$cw1jB=3zvN&Lj zHZ%O3-YsG17BBN>=oD(u&Q7#i52MdHpr6W-y+*~s8`m-Nz2~5Vc>8xnwt%M3fG;^J=53B0+z_i)n6H5^xj&+2 zg!B)$iPK}D=ZbMv?@b4jGF16Tp!<_y!x`vt^^)R~2mS{Vp*v+{xm6;(mH4K*VZgIa zz?Gy*tO$c?5OWj#y*T}S75=9zT>fj~TiR~GPr-I-pijHq*hcB9zLLH0MB%|jFJGca zk77=Q%kHX5QFKXT?ha`|X{vntU+q*;Efswe zgx#CMxyQHGAsk7Ej<=(}mlmO!h$Jo50$i5;bt+sqP~#VEQqLf{&P@kJ3^8OhGal2o ziYaneF2%C3uW9yS1wK*AKN1!X=P#!%ZE6b|Hx)E(ODdX_%*Gte6vfsS_A3DG;_U8w zZ_YNGtzz@UC@_V^DydVzXiG|*<&zXSp#w2sGp)U~O=`g|>_V(@#~sV2A)6KmVC&{i`}5mi2>jcU3JB=C!RkM*|K4zj?0fuwJE7q>;IOs%x8|k)H|G6* zbsHOFE60Cpf&Wd{{Xf6Nf4=zty}-A<#6MR0FPN!9719%V36XY3@KEIwE={aiaIq$8f z1J(PprMpA!D73Ia2Cq*p567bp$0_Yi@28I2Ep#1_YQ(R_YD2GGCo;r3nUoTGLSxOF zX*CiP%^mqZIAX<+n-DoRdX~iCAhM952{n#+V(<=;_25);S|->qS&X7^x$$68!4E>x z@#+iVmcW7+#I6#wEH&TdebaytnisSGHLX$i{VBQ z8*=kZM-SUQ9UE&VX%uQSSPcY-jF|x^naJUHJZ7uHfMxuOEt>)AHbFu6YJ0IEq-XDI zy^=uUl?Tu8dopFWn)M(Jss;G~P-wZpG-s;#JWZ$h;h737uE%0w-!=(XQ=i)yZRz=X zNA6O5jC5;p!^nyc@imElSkkdu!2SRhmN*xzr6ax3?UdersMC66pv8J%1J-*Tvm4_4 zwj|(ctlwZzY@BL4F)D3JS`<0e+e|1d5Onml1JNSI8e2KK&eF%Un$%`Br)IcDIwwYo z%OVw@(0nH59e{Q$I!ImQ4*`!=eXg}gZN*Y#zm-|47kDGYJtuR0yn!#e(Rl& zP#^^-egTI|j-c83{Pg2*1$p~p7EuQICO#KNRf7;RZuxNun|ROawV<{dQ9^F(D}6_Os3*tWO(pKzFc!~bt@3NKzvw4u2KBK zYL)l{H`Y+j>;7w=-nV)hk^Eqs8t!nwz9FGNtuG|D>DG&UI$B zFD^y+v0g*s45p=ECRSmhDT-N14ja=8GHNNVF9yso%(~`j3W|}$+f5;VY(2fi6Jnv3 z>v^KxMhd0aR(A%&{#g!O!7h048xq*HD)5D{rfTr>ldIJMs6~5k5a)K-Z>!m+T^xVF z^49O?;7C{Tk+u^?4lx%+8vvN(%CO`4n3Iwq`o`#9?ZB|LEc1D0)F6R(Wu$~#Kq6@d zPxW;5&mL?W)jc`XQp~S-_Cz-0Q#X-E+9S7QV#alI&CqmKN2>sy@F@utX3PKX!I^u!JhonBV| z=QOML@_XEZQj5Z|*&Cdeb7LIc?tC_$&LP8P3C-&Ur&Owb#70>Ii<$7zSZQ zo+sa!LnK^whJ6|^)@Aq`!WoPAWYovk>h|Z7^SWA=L)HTBaeRt*cAuTTsq3-!Ksm3w z-KB+RSe-)-Rr|C%F;ddfYtF!oiesP^^%EwX{5|+&l#dHM_cYAHLBh$gqzbjHc6 zYYYa3#AafgXw`yLTuPfq<3W+}_*kMtx0*GdKAKNxb^bp1TZ>|h`9tIkvB~HMSQ3Vk zYWFBqM)@g}TcF}?+A&U1<6RCI*xxRL1Osl(Y+cs~j(ygImJVQ-;EKOp6ISP#RNh#SOP*0;qW`{=vVlDHBA@hqhiGvC5NF%+AaM zrhOhMSfWowz7EN)h(Bc_JnhaEy74Ak8&CeEX+pcAK@fI zIs=!7)91w*C@r)lwa&TxY}FIjjQq7-N@4cZQ;jYf{0f1qEFLYVZ;n)HrZU;0+#%NW zJSDX=G1cvfc*XS_@oGeaNN{oA!NwtZG@5!Bpa=ePX|&x60F!EJcz@SvmnBEPL5-=% z?j)@(`Gs6gK-y#U<9z4t-q4Vs6+H;y(waewYA7IXWZL#zrZgBDGp!`D34Q&e zbM)m)X@rPam3(9sqreHpx%&CTk|xa*HSN)|_Jw1mUS>}dYmz;nnr5gg6A*Yo)8~?; z-!@ilgVxsy2xP!EjE|JZH8mD9diwI9Ez1qG?Ndp|Qw@^zGw8ER7ZiTU_i(28v;V1$ zS*(=`OEUqMWa5{rE*kK{R6w*9L!OCl?o(qLTM&pmN7Du)Y@p$-IEK>s8_pw)LPRnh zYJq@pi&35DB#`YFdh__Hw#h@N`l9&WIvDc2PpTuH3x=CqqY=JomoFX)%5b(L(7O>- zS1hOxRu^i)?AH0$w+ky#pw5)z^*&w92*4=?L|J@F<98tGfg#nGDPV(ZYv~e&`9gQn zr}+6lc$LeaAu_g*KtO*m|5dE}ojd>k9h&~XB0O6o<9{}G7btGY&dH&CUanSXmRQN~ z@q-BWJ0D{qd95<2qe)3o5GtXgXSHgGivLco)b8$*5FrrB+gafqb+c(omUdtBZa(rk z8glJ)O#OWQxFG$bZ3fdYS0}5n&GD1-ew@z1Ya(o8xF&K!>j>@t7CZfM#&D4Yu zoG`hz9!z34Ukt0d6E_*flhsZUk4YAqJrtMrnasN(kvOYPjV3L71UdPQbQ#N^+gDfwTrQds{d8`H|xP~Ym`LOA08^JV^n z!}XtF=bwLr231Wv^ueUG9$*ZrALr$Q}9$S?9h)C`5wLdfAzYj= z((@htwa_>N_12WgG#3HJy^P(J!x<$qD3xzB;`-(ib-$aukD~|wvRtK}(G{;XkT739 z1zA!QC6~?kV`rQ`to4FytL{R)${)&%u+$YrCChtb&0rN+=1E$vsL?J{$_+tQr`0Cr zeyw?WzmH=3?!7N>l^~W}uoHJK<>@q7m)5=F({#2P!5>Ib;ujaPf(_VJ{1LlH$wspi z^FYdSA>7Lr? z>(ae0eE9pcuBI028OC_qN`3PvHEUQL)_o>aNJ>`eUl}Vm3yS9QDa00?HCnOpWHK#7 zo=nU6wWBP_{aVRV5qA2cOcaW3q4F>(Aq}V#W-Ic24+(x{Y6|LRitM^&$<=7{4>xo~ z$$J5%f!yGNriHOn3IOibm2UV!5y6)A3$!OBs^MHGk$0)cS2sdD`p5crQ=$Ktv zvX36;K1OBct^7sC$pj)`b7jpE9ts~apAU~cl0RA5*;YAihd55xJI97RNY0h7r>=un z?3Vlrp{~kEg=X!%vECf;PB=}#7UZ+IEH)-TmxiTS?Hv+9p+uYmtqLZDB;BUVI2Cd% zh(WMx8-t_EJ-5?1qdjz(>5^H%1V+7v__NG7Q;8}b3%O693yP$UW1{mc`nA=134;zP zHTZAq6iQTGM8j;k5$!-fiU!D-7JRdMz8$|CU%sfNYi7yDjOV%1#bg~bK0*j~7)63O z9cZd3ij^JCghX0u*%fPuLm2c+&4f&7yH$my<~RV~K$ISB(6G5U+kQvD3DVb2XaHF# zp#24t-L$lsbb$ zi?|gxR;zIbOsmO#W%ugV8Sa`mQKy8i%l~-2qpe)8F(*avgqA(~`YHqVe!Q)#KlHs8 z>xQoiPdJG@5ObjqqTd*YqC`k6^GvD>dlgtoHXUE8V)p(qgm)cP03`XHcN#oSqD)oD zx&KM~EknHV%+ZNBxI{N;f;thimXmghRw4B3-Q7!Zyca$A8n|zEJUufykJL%zKYKIdT@D)b0jvb_K7ii0mQ3Nt>b^0!evGmQ29rPrX-4L=RQqTU281F_YZmtH7tU3O}|QiG`n4c#L5CBjd_)vkVrRD zc6>H&$fw>}Rikp7^1eo#^IazCeKOOQYjsp5xmF7b-q}PxuS~BAI>@--o>nnQbDFRV zBdOc5LEYftt|!7!REc-7h_~8>_XyCHJ>N`cMz7-Bwbw*Wh9UwIHFPwji-c?n|gqCs69s{>gI0d1x6u z5hdTeF&<##(>_=hi(=77wLs{@=^X0H9v4wSJuywU%^_UA1}oKxgRwnA0ryVw-(?VQ zNt>Dw4p^e1(wZ`j7`Mu~UJVFH^M3k0^4oQLk^r|{Q*FeB=gI(K)-M*pQ3a0d4BK?N zc-s|1sy*OPQMJ0l9qP(<*A|MpqR0F^wRaP9y(+tbN`=Lb26XSaO^v&FI;*0>LMj2v z$8)c$7yhOy>ch(c%5+HH))O#hXpyH@ zNW106f@TGKAT)?bJKr?&pSMwpsSD|*;!rp!D(AQxx)iD ze6toLMAGQO(+xv|b+2cAek~U}#F#DZO&Zw(qS9@PpIui{dz+ahJZ`@ZSGf1|bRg-> zq+btydvIU@)%`cU0xRk1nrXx~+i$N)Yn&eBY-!P()& zQcalup)2AG`o?{>b3!Fo6yEbRhqS9uS49Qa$nASHY1CkvditO&se@VB&9lQt8%r8k zWjj-Fb#HAHo&fXY?V4rs^*LFUoW^*9<;0v@o~JOiZj|fPpw=(6Yx*bBnp=AGaL_wC z^mM-#J^mTUV@ma7(7I{QmX-!8QB2V>E(Po(pz@U=)s$}49631M9yN8~P9oy4s@60? zJ9tf}aCG3mRSb_0$|1D$7*z*Io)IA#i6I>#$eViYB#P&-UEF}KUn0K8LCu!~^kVDZ zdVpY&x2?=S!dMjCfYI$hX+DEtJ_kLAcpHEfh0{@@D1}~&*UgE>U1s&oS-)~tRA6kbE$STqjV#;X zopH#3#H+iYbp2eTo7KdTlT^wP} zT54tJca%%=>n5)iN7EXcOH+l15=&cS@uGED-_u`9dH4u^JO8EBL46#x!D|`73B=Q} z><{Av6QRQrL@)&F4HiP|_W!Fd)PQOV!QmPENX<)ji0l!-!t{$0=4NkHj$6DR!=b1! z=8`9hy6@qO8l$h;%A;e#4nIM)m)4N$8OBp#W2uczVHF8TIn!jq=8?^v>KR66WBvE!8!4X zWHTs}H!XS=s(85=B{MhDkHI_I1bxPpp|Cx87;e}{2J@{+=3C~xu0~A++~l`mIYVHUR1HqXHyXO%Hgl zsk^0DlQr)HTVd8kvzeSk%Im->^PH|GnRlFl(1%2AG}Z!QI?)V-d|uZ-xUIa}VK%aI zj?FINUQX%y(I4#Yoq5M}-dkd(i8P;~H}^`{kR)@ag0j(WQlI$y#~qgg(~O|ai%gsO zT&o;@b@7s#w)%m)4F#0o+LB9fJ1i@Kc)U^=0?mRh>k%p0%i`g)Wc*P<46-#&cE=U; zKC-wOuGDvcx+nxFT$9gkEBp^=5_mento~U>Dmt!j8|Wwm$j{*IY5lCPYQe+yq;f$M zSaYM|c?>D49Rk$3?LtT*2!Z&^diq#rs5_=4p`HSy@Xl^6kUH%C5E@*K6aEEVX~z5> zoK`IdoJ;(!d>K3!?y-9xJiOcWo@~QwZHhVB)!yqGpFbjweOW@#B`@!Ec8VeuN#IuO4=BIL+d^ zTU}+=trUR>$y?K8bzcSB6Z}wz9?+YPErFju{!w*D|~lV{*5Jw>~AL?BTz z3*2NX{l(_!WAlphXup6p%LlC6;$2ejZ99fDuhAUlxWqrv0fsVlI5`q=t%`ldXcU(V zDPkqW-&&a6@EhShnlzmzW-=Jy+!m~S><1wvyYpdB=N6hgh}vFoXAc2*B|uZFrX@RH z82-M1zE{T5fJ%fn^Esb^er3pvR=;9{cm*z)Lf6;p_>pOtg_3+gPRzbO#CI2tHJzqd zI7&}zym<66q>KDDY>3wk)n1Ce+ zHg{l(8s>b9sOLLNsLbJOgj7}Ux~!*LakNlHlW5ZQQNi5e|7)3a2XxVBJh$mZTu4gH z6D>Z-Eb5wPUD09EGb%L^ift}1n`VE{!ktkl`q$06tblVy$m=TA%y#f}>7h80$t)q2 zekj}6d~|vbr_jY85lwGT*n}ZcUxd?Hw52lGT*Xvj2@Z;i_Pi$LY`Wa7$Yy}J#s+>D zj0!%Qi4ue$2{{*!5|kn(MTVRC7jj)}NJ{S?%2fm*90FyCJe}>pT&4G5omu{@nJe*9 zDv%nCtK!~>=968xTjh7Pi`yn`$z%R@=&;giuq(7=R>a4`aQ#7Jp({we|Hax{2FJN2 zTcWlYEtX2m%*@Qpj3s7fv@EcgC5xHKVrFJ$vY44!Pp7+MVrJgl^IqR+MO5gkKeeN3 z?VUR_*UC&>)9Rn*!z9zF#q?9cWQ(CilYm8|0G94^<*lXjK>{|z*z`4$s(gjbFndjz zRPa)j;R4+8uvn8teXtw{ty?eH2Cynj?e!kV+F?CLe(kw1#qkD<7Rqcf*aqoH-11i; zWZyam_~5)EmO(NU%WIl?_nSH=YOd0$sE7SCweyj;!(B2a&CzIEGSki^+eJv+d2q?) z)yod5TLX-j^n$`0?6}sC=|8rov5sz2Ah3CZQwWgNiv=%y7_GLW90}7V@?{gSEv>C4 z%<#8FWF8}v?D{5?S9$V=2^*$;J1wGG3v#z=-+6S7eF0x@cfNQO;*XeYR=1Di1q?{>#=pHN@miu{N`iX=hDiJ=eJ{h`rAoc;7Y&y?;=FYv)Ml+R z64#4j$5MKuX8lTh1~6x*Y8C#eax@Db5`8vQ3KhM{$DG-57iwswhbqrX{r3DtSVElp zw60cFHGXWG78K?;J+yNtICiHO;;ZAA!Ams%6+`v?!T7amqg0F1ORxsisPS1KNUc#kSDW^HA^*T{u0G;nYf42Q1#>x+ zxA2%R3(c0o4rz-dneO?p5f>a_Hq`3NpUoMG&BS1$X{7pfY4KO5vCeEqK>uX$&psjc zqN3tAz)r&Zb+AxI`lAn+!-JQwX))}QDc6A7N?n2?P&U3h>YH5MHjygb6Ag|&(xrQl z2LI!9C}MZSK|cppiIKTKV`+EA_lFs%I|RRp*@^737EfV8M#jpP4wO~+3Mfq1z(U;2 zI?u)03Tofv`ou$9*Y*#H`EO<;wS(ax;pqvc1+w=`vSgDa=#a;Gi?-@>Y#7US`aSfZ zkKn$fQ}&v=1(e}Iiz>do%F*5xUDPu^SMWP-U)v(oJ@|q3Hf%GJg)6;mA^c5ucjB3Z z;a^gahW19aJM&edlbGuClrQ2CG*OJby~w7^irP|Ay{n0b%Ma`1#KUo|XX7@!OvvR? zQsX5ZcrKIlQ(#o;NTjo8C-M!S(R=57q&2Pisv;CekS^A~_<8K8b+*~vuyGQq0}5Zu8&lmhIBG3(tBbKj=<}kgRC17 zdJg!+$S%B|wwOs2`~c;i8;BtM5@nPP@4GIFbG)8g10` z7>zLaeOQr)DL4liXAsV9z>Bw2t>Pry%-&jE*JqcdgX@Rg#(s&nzR=C>Arf)^-C~uClf{X{g%} zi#D){KD_FPqfi6(U9;F3oq`N$m#=CA`gh8r$*rol0AO?wWA=g3n$6?>eR5Cse>;Fi^}in*id)+m0d23zT(z=(tqSz#df$FXLe}8E;J{}jxX=#x)g#x>8X+2C z(2kdVzf1PV87$e?ukRE)>p^5fggITdHD3E0+y|M>US{``f3iBi^7Nwwvsc`k&ARMX zUmmZ`Dy7^N<`uXM)qCtVS2S2O-?fy<)KHM7i!HXCG_jtmuoNvdb`&gK4R!&fjN-oK z!ZI5Nldit^MRN+*5hTuW!&O)>Hzt2mXN&bvT7Cj16(&V#Cc$UW>ucDszu~E`q3iLf zlft`ZJD}IXwHncVd=wMFsHCz1j(&76qo>wnQ? z^_h%eHU*;g^2DO+7Klo_!FDOMeW{;Mkybq=%)znHxpLAmac3mdgoA~nL|!>cuZ+)O z@Rvh&2Mvd)+#w5KS1R(s;n(zw-!GLEsWv9?hwE(=JSv)VnO#EYSTF%aS_6h03NIVD zvsZQi)A;4*UUGqq`I8s{Y`gx_9*1dzO~f9;F@f_Px#$y;s)S^mS7)-&f-XUS7ebL1W}ltW(%`d`V!ttOK=}uuh5kln+pq+w)A3h z)z=vyJxeg}YJv>s+j;^?pQIZ~PBb1O47fQwXV}9u7aPSH+m zF9~W7ahL~Ac8cF$A%>S>&aA*EON9sdcOk}qi$3~idgK3{*Qk#hmjn5nidzI#{vDs- z`I~(;hO7*O-a;}WAu_us>-t$!(y6OtWB6vC$K_XVik(xb7?I}3X<_oW$y@dhx##Em zSCB8__FY{W<5}*=C6uWefHIco+M&`-K@C2}Ve5$ik|>mM$!V-S=bWhP^|vV;1GrQp zMl>E|u3hza0O&~S9Gr%@AW- z`LoIgX)TQ*nm%7Raq4nztlds}nFWQm{4yr%f<*%+3PO*>{I*OHM8o+KmZm^$h>In< z_QS@YN?euHeAWZf6}BCkcII#gJ!ORZFHA2v@V@GPc03dR+m2_l|9!LcKVvFsYijpT zT5w!#T^U;y^@H|F1KD-;yFYSZgE!PuS7in5f>3pWRCwWcSwT@NGfDI%*V?pUTSRY% z0SE8v<&rnZbO-k-Oyc8!XuikItX=o>^>H#;rQx}h6`@~r~{qUw#- zw%SBsU#lUHGfM%b&3Wavyi?avA>Y5h@3$W;v3>3SVR`_5YjUE-SyZ0JT?^8)ihkt) zCPKYmsW&x8D~v*54TE@-bY%Wg=S;fF=(gCWhOX<66H=N})?kWavFO)74NqFOYVD9K z$+{@zkl7$Ay{pk^v(5ybzBF4ezlepp#koG0;qmnkiT1cQYuY59tkajzxtTUlP$bIO z$j^w;L?OP=zz`(ot%N{Zbt#Duf|2}Rq_+ZwGa+D@0d7SLU9wVN^TV}MGGW939P-oiL zSduemcfo48E6U8G7QKcQS^H4C{LZMoTE(oY`jHAo+IJ_e?SjQ)-_{Ye1i#B9MP@Kx z23}D`E3!gm|5l~mmUXnT`K5oWvR_hG*eDPHnq=0J8AhoZ3Hi}mQ51VC?@}A z69oX(>lw#ui_~`RURu-Ya)(T(@Yp3#pPBm^sYlduwD@sdi>}`n_T9En)nzuRDmaKj z?Fz5^;1*Zeh03H<+J2hK{IsRGSUl@{8c>^d9N}jwSx4;Bxm7X z3RcsY_pitnh3wJ!bobj=DI45;vsQyrIiD64RF259?G2b89{ z@n)vbD_HwbMmWb%2RMh&YFMYxE0k)%nqA;fAAjJ3WF`qJf!qQpNe0o0U>KpGpD;%N z(2(H=oTTj>{w1KO4bXYdgeGlPD307MLV+X~7#&kO=rF4LuoLp+(D%w==!?V1AC-(R zJ{F!g!MD)GH-a>9=(T3_NNARP5AZ$T6R2cFjbhL(V!xn!zBSIuJe`gA@vM=TzdxLp z9Hz}DvoIMUu9x)E>*vJ6qzp1OMUnal?8bi#cEP9EjRgt-D}km`+B-Qrk!I%J@CT~^ z1bjRz9{C;cwvB&;nFCue&fEL_q%arTgEvsk9AY0_XkFn zB$lhQlCv2NpBROEGH}ed-w^|kcz}=Waj=oL8lfrpT~clfw@te0?#6tEv%#HA1dKTJ z%cSVSL;LwtRO8k9DcN~zXk*hdIXmQ<>=&WHB-4hX(=R5z0~ycI&JM(Uw)tNd z$Cofze0v^#{;?_S@fGn*SjKtKwn*FZof0vdyRb2*B$`Z=*i4x+{u^ zhGqg@b-1_$u+wmp#s# z4>Aud9u6*||9siMN(H_>?$+WpO~m4QngTdG&RIVNNcZCs{BQv~DC;mh^p`HBj~!=h zEAzA+N!wa?yHiQs09Pu={n(P$!p@@K&$4#aGo%mOO0hW?HO&#Iy_c$cI2eo)VlD+* zbc_kD=>CGf%6~LG26bnRI~&BB-hG|C!d(k3sT0ps1GdiOFz6GaWEw5l0aVT258kZi zhvNkPUoqR~0`@)&<{1)3-P$_F*FjgqB)njSscHa)WTL6#@^JW$xKhM0xPHHrFAV>{ zX1tRwTC;?)>$*RAWtZmxlw$`tgh$wUk14(00J1LAR~hD^z};ZBk*CyPuck>KvSIQS zH}m(A+`R?_Qm3a>5Y2)oS<9H5OG!EEA@iX=V=@0y!N_4|a9%7=!|QZ7>27hD1$_r^ zue_tP72y1ui|AYz(|Rf&J%%61)sT9&t<*-;}N5P@Wi zyp;jGDA1i(lXxc47oS7OURXl}=%>5}hDUf}j3Hmrfy+2G$x~8E{;*Y>H=gyuGD|kb z8(cTKn9XOfdBJx>NR%e&rK6b5fc!*m)DUv$y_DrpCmxP=N1Z~6k;ENXA!gA#@wx%Q z4h7=Zl6R5M+Vgat!Fc9fu;C)G6trCntr$*0XUUi!ui+XsLFtO}^$b>Xv$SKFE+s)f z9D=)NKZpULpR&Jr2D#-z%HB3}iiw0iYX2Gjzr2XZa!(t}PtQ>5uPJKMpkSz9prD|> z#D01GE8qM-{^UQO{{Pl|{10K>KRv_$GOYQWq&6#n=#$nYX{jWoY@QQ1DKreZ37h@{ zkpfxOTuW6d5font+w6pdqxrNts1ZaruL$BsuElIg&b~&M12?0iX;vS2^fd!1NY@xdxsi%Wbu-xG z(|7>Aqm)N%LCD>m-kQPlk{LfQo(Ro`cw?o+&(*nV8+OzlUM`8hl#4m6Kk|+{#GjO-jW~PwB8`2O) z?(cs#7*MS%xrDnB0Blq?q(q}9onF>=Vk1aB+rk#Cp+Cxe#fv*!Z_r#eLyFNR>s3o8 ztZRtqw&OzK)BtQ|BB_HW!5$^49btVOREF@QWR;s#Ze-so|v|SFkV~$`l?cBM(iSr zU>MC*!!qQmcXH-<6hDmhl~4;v;}9k2^XQKw@S-NcB3>a@z2f-`{>R{_-w9^+(T23$ zz-^t^%I`$zhlvvtMzN*Nu3x45G;-D=V%hs%lS-vDd%N76c(fd7+mpKtX+A*UxB(lkc;>IC2FQy1D?*9( zgC5OCEg6G+gm-XPZPn>e#|u43if$juRC#ikBXc&nK{H2S39MoJ)#SST1j@&hq(i8{ z7umw&Ai6y8lR6$J=SZ!Sg~2Au3TPUo3{)O~5vEA#L(w+~XOid%+0_Oi`?x?C6=%bU z!GxW~FTivNuFyOR&*c5!A6}@nUhn3#2yo?+NnmAOJ+s`W|LZX8gVSp;CTnN>KY^wwEB|@c(p9ZtK|p-{a5!r*Y}2b|z(5TJBH3$`evqD3T3~>@vmm^G z@k_W;B)Q#;98Jp@Zfm@8?eyd8{4(dzZ_lmoZIAZIOb;WP?=#$Mk?r#!YyOT`^7NyX z3NDc(hS+cH3@lTG;cojlOr_P*JpK=u5ru4@%%#8(<3+n1&#yV%V8@nI2BMPvFsvv5J}vRO8Au9Y&*4Q*6De!MZS9?H zAWeOk!glYsr}@?Cp)^}5u_Ka&)v?pW>=Pu?2l8?WWRj&&a|%)EYTrQdBcA0T2vSHpBo8o!f=?w$X*XjCvTeewY80q$L7reXH*gy$s4S+*|;t@3UAlq`*Z8|m-MJcu|(jG z3KjOxIuaXcq>)|vt}3MbSsG-#BZ@I~DdUP{D_WNJGnj?L*77X?skJ}S4^xw#5#-;< z=X6&-JprV?35)Sc^gA)7hp zUP56vU!w%4f6GDN_Gbq^1ft-gi?IuVEA4MH z@=;+Wf&ugUDXtphNf?~vCH}fq3;zkmRFrjfCJeEYqGF9~p1fCu-eQO6jbGT+XRW+` zi!f`u*#e?sv*aofsb)(3yfrI6vvNom1`)`4DIWCYKNup;AV{JhveLe$_17(v5e`qce~*+mVttb-iXprYzSmpMlC8U zT9@#&NXvfntMSt1sYG5qb<0#}qeZz@NS;s~av6_7S)$3~o386Kkz8yIpfWcmsH$Ps zZNed29{60{o}Ffb-IQa-U>nTDuuAy3 zeimn(NxbAtlU9wL0XZujVvHvsf~JWWX>#dZwFy&?uyh?)1S7VWp$zgJsb^&3>fFdk z)W-I4lG1N0E*9KYtF3AdJZdOw`CPXMbfi*CVshKLrv}CTH+sY3242TKU>8DfIfWjf z{&XZfIP^^v#<}*;4Q8*wLTpEfhd3Fy?6*%aCWoqf;wKo2U(3fo^^ zwjf49)8M*g6vue%^`;HD3hoU7AIS2j9IKF_4T_*;K}`g>)>=u7r#T-rC;kbg$%JaW z)RL!Q_=(V|edG>Nl{09sRkH>t&hU>dU3MUUkRNe3TS4?8I_NKdc144|gFTjXWr6;N zdIi6f_U{DILwUsBYy|N`cop2l_veRxg}qewxBF5CviN-z}q zELn~I$&z<_c)NK5-vs#yS9`Y~sa>HqgVv)ua+$l3ID(P8{d=O4ou^S02p{XA=!Dmp z0HZs~^u-83-!ElPJC@FGES;kMl_z-kqvfVBaLY7YaWDgVlld`&%%LQrv=Xx|ewL*N z5g5YfiupV*lnAFjjE-V9N7gVI2TWbkIaJ{wWunc(G60Z{4861r<-bVxh-QayiDicA#KCjo0kw>%acx|E*pTcDBwY?#};SuL!<>588h&@ac#C_3%$z zGgLK|QPn@I2(8Cw2x_EIzoMmEBrSx9eRfX}Vj+r&AoRDMXBeL_9vd6Aj;@#M4)6kvc-TZLkG`=W@~%FGacS= zx8w{Pe4-hpN3oh&-(lhYoTRxS0XSr0$n$8QDVxw=y)9u;-X!t>P%}VF0h7TK9PbAkvD0L6=k&IT&L)~ zIDV*H&a|CsQ|@P`O-gUoLZXYTAoW{O8ZrM=vw=?@Ex5^9g2g3akhZj-kY@1O7Fs4h znre-kN=ug)hpLtaQQj;`HC;>_6xm!o_J>k5fJ=2QM=zI|3JYYJn+hvO%2`fS`TInf z`2c0;GZ^wlVSfVI{-66F$*TK-!xHB`+F5R^Px zn@pEnroiGnW?Kgv%;n8WS;dH>f8}l%XfERxQKs?E5sa%@oC}02B+AZMCZ6M1#FMQ+ z;xn;QwSQ~x)IByvgCEU#H}KqGbggMgAVDRxDv8JA>4 zZet7EXgp1cl`_rQ$gppNu5t3s38H}43KoOs8I&gXN)Yq)iMQnju&Q;Hoi6<$>fSUU zRbA_P6Z4LE0u3NFhXIE@&5qM|@ee0&!YZ|UBE{CjrVgNk()DuvUfGQs^6wJt`SG*Shd{7Q05l zI?4+>dF}?*K{8l1{Y?0i=_YB12Xm5_MKRkG)uO2J!lQq%d+ff^_}Rg@eWQl*-rqsb zypGIGbWe%Ki5m*zSr=st-mc|V`s4jiG3MZb&IN>8 z)A#W2(InVg#KYwK#KRQl#KV-I&s0am!_-0aA@fr;DX&TzgdGC(1fyUphZPy*xFQ*c zVi=wd5TGK0Vr9O3znVt8eNB0ebh-Jm0%Z;m;3|0r_ZW(jvt~66F!%CBIV}|Bv=ZXc z_v;4lX*wqqfB&?ejJKiZyhpkt7KR^Y!mW7?#WQAQn%5ZkBcTKfM;wqSZYSq~Y8A{sIR2{v*gaBNkzv;)pX-OAl<_%;ltM{*pNaA7~A zSIW51^_)(IcY{ap4GbQc0XNV`5N5~bQGd$j_aAbYF1z4(eV3?G+nC5#>%7ypEP_A8 z^deGCkfa|2yVDpW-P<<%$I&It7WkpPVva@PphA zb{LreeyPsf+UAH12|dx0G)KXZ(g4bwYUx=?KF&sC?bMVF8{(C$-ECl%%SbzqIcl-} zC<1>l{J55!P*!4~nt^+n*JFaS^Tto_e))jj?*+7rhog69YZ{@{Hhf)!<3oYt0P`dGLaH{1?_fuqe%eY9qAS7?XKufSMN#12T(&vFvC z<}E~`&P!`?iYF{fM@w1)UQ&hPViHDxZ3!m>UsXvK+A?p@kiku>G%m%K!II;@CpX;1XdF~Ht%fdnxek0YmTW$iV=#{v2@jeXR zAr3ywMnmQ+tjy+49mgI09OOe-(RkJ;NsQ71f?kp-U#8KcB(D^8glx+w;nkLjfm!5s z)e%9%2Mq*oEV-2hMp1!|?tfcYb2&NN7;vej3$s-~ugMQj+xuafv_3UUnMH)r$Hayy zq{6e>V7uJnM8Z-&y42Ia{elTf%}A3@smdB_7reY!h5)g=c}Hgw!2{o1IDyTiGeu42 zhQ+2@OK+9P+Q?FY%v{2S}NAACS8AcH!_)>yby!`{MAuZxWvb% zQHA9ysXY%5|Et*V`OxVwCmf3!a31a_e4BSKWyHTM6m#^B_T~jeKmO%c{3Ju_EAGxi zCgC;MwDB=CS$rn}mIv{CUz*lYZB{6Wc=^^D{= zmW8p?pY`s+xMO(@BYU$e8|O{ASvk}%CcX~Q(e;h;(g42oQAuTl>U^5(w*rrB?AOYe zH>zT~daL zL|6SD5Owl_t&{?Mma602n`_ar$|*j%m}l5s8F)5C?M;PyO4@#p%w56inR!!@D}C^1 z>rBvpqSGQ>eqE$1sZDK0Rzw>(IF8dE)|S!{!4KXxbF_ciN-mM6o#@RbJ&hS=F&1~i z(CXRyV|_dblXqr52*LR}6w4hkGNN?)NhM)tBQ*xMy`L=YjV zLj9Pmj^8-q@PJ_+iWdkpRV0Xo8b^}qGshEcF-@_z1+Yeg8>&H>?HsarFlmso1ha-w z_M5-{g8{OmIwOw%j0FV#R^`O>Z)^f<3n%Bl3S$1ffI#5CwZdQB+Y`3R!nY$spmVSYxU%^gw}C)n*DC`Df0TwO7?WbJ#nORiA=0Z`bo| zUj17qspXo@74YB5c`t*PV*V4U3to{x|3ah6i(?d!yQ9h@lGH095O@hFmP2rMB{VzK`jh3Hk&-xG!g{qF{^ngP&F8dpF8@qFl#C$wa(lTW$`llh ztn(3`^Zop9y8P_PePY&9*|@kMR(Pte*#x-j5x>;$IwPtsVQflIM31U@v1d}qp_!Ik zC_`zNQU%Bxph<`e#PcsGCY3cCSbc_XJ-A%~Mcm+Q{N*E`3Ibsu#V@fpA;sC0I1kuX za2hiE&taooy0yKM&N-{!AD~zY&3=y7EvE@!wS!>er!t4ACf!3@mx@??p#b)ABk^z24fchu>BjF89@4@5gGnGPAD&@LE1{L`CWa$(|sdy`8u7SE^2PL(Vm&XK}_02ZZ! z&z$%sxo37%JYVI`NCpgd4_22v%MbW>$mQlxrRjX1m02CXA7brLL- zNGUC=hI>-(cWw-kp*EcTZS8E1sEAjl$D8hyHDSn)u^f%gP;ULrxSs3+RC#fs2lZ$;}gIr*-8IE29V8I-0>%{mT>@*yaYu_F;Wx z8VhoJ_ywhKgDcQupyIRc1B{-Ojb3-zpFCi5D-gW(oS0YGViI>L<>fGK*$EPIz*EiM zeT@eK%Qnv>yE@MS9CXy}>KR6EqgV4Qam!C=f9*q7J7o}lBhT!Tydyl*WIEbTFIXE! zAy<|&UBUD1Gsw;ju~h*hnzp2oKcaPGkFI%HzXZcjo=^r_GGkNQDhd4Y_Oli9^Rqfd zJ6JavZoKeGO}#PGsspiKJ3`S%__8A~w}rj?>QM;!3PlB9==l20Zk=)B(Y*F6tS41Y zY1#u8v_hqTWzAZlE3zLJp65Vk-P_gifcBq5KDTR=pmkZ9-==%NQcH|f6 zu{81#bZiK<2G#Xj$!SQueH|4d|L_%`5h}c3pM%%d$m&y1tgLrHd*nK=xWo7>F}2oX z2~G7WL-_f(Rhqj0S+o5Yh55f3?SGYQA}kxTrNRH&YnciT1z-CzoTS%f`#pv`7CzMa z3#dfKSf=$~C7a932?=Tyjh|HmQ(7hc+E#gL71OSu{S9;4^&6Jco*4A=2POP-S?`C$ zzGkNE!?tV$s2(*=rW1eFY}y`N_V{IbLUhSKV)vf+5;y*o)y3XdQ>wNehazWgsVET+ z!aP-MUB?+_>+Y1b0F&B-dP&8(S-L}CU$lwr|`BmPpX8>btU~{A@fc8_Q#V7 zBAhWxB4kIJ;u0>!AVOWI3YWqRDpyyx#c|bO_gUfga@uKa+vZ*ng+PTF=qFeU1s3k$ zq#f^JAZ6%STbOJwfw;CLK`a=5mKV1M$3fCvG$t8Vful>QcpJ^NWwJeK0PldL6lX=k zkDrBkX`tRe!Z)L`r+;c!#R44|J*35EcZhV^UZzM4`Q7t}h}}kn!rCP7b5qi@^Oe>J zWKPV~cy)P}r^48Ba@s?fFFL{EbGGms!bT5% z*PV) zQA$Q`c!6Wqdl-uWOxF11Yp@CP3YE+>X3{Sz0XdsU2P=)oIfLTdh%=^{1_`fYB(Pi3 zrlDZeZ%+n2hQ%bdjS9@x&}c;p7Mi7!vDtE{o{@vP&?HM@Vo-R6WJ*MVV-a}2;AfL0 zOVS$=Nj!cL-rXkC z4_vQ)7UuItd|((O1~{>jG*SjHj3QRFv>n;!AkJJNtx-FBClE5=LO>5v4AndT?w_42 z$Y4gOAA7OyL>RnsD6J5d@+_W@a55_yjh5dG9GZm0Ow}v0LB>NC2U*8aaHi)I#Z_Tf zy?Vy9yaN+2s*T$LhUh|LotIOGQV~saO&tUxb7l4R@}>6?!||$XHU)|gS2%F3YOV+j z?4yvkxF4acN0=CSCZ=1E{lQOny#x22{;B943Y@*2i@L946W`OY>s(vM3ukp}7`4M)u*g$KYd5jo5MLHp>9M&5@1d}&Fc`6x!UnEM+7gbc*C*jt>z}BG|R1_3TnyM2; zCUkeFX?bI1LVM;69$seJGd06=-tROQ!g_2wn#-KYc=Y{Z*qFs~-YFcGNY#clTGD`v zq%M67(yBju*0F!Q4{v+nTcsssq+!6sYJHGkW3|SpsY4bej0_ih%v8`cvKfZfO%cr6 zyl=siUd)cO9-DHILsetoB)cA(iQy!ylqjky`+=nh10!nALGZX|Qlhp1; zvpCSTk#QO-5^Tvm$+8S5hsL-OA4oT2IBn@`T`jG=P}2aW@#cKx?=Oa?14T*Zf-@+~2{l*-WMWUoIsop|mbIB4^{@`c; z)2cbtNE1~@pH^PlqOqI&eK)Pe`&L*k%JbB(TZedyT9FhEoYXuGSBc0SQ7wwt(^TpH zyegFNHvL7=A&K`q!i)*~Df5RLRs+)y6fprgCD1@O7^NeYjedrpcOMZymTlf31hcDZ z36rU`eo%7zO1|y1`VOkY(e3zXq>v>7d*AE%nx7UrTGiLDf>`R1KK}A3Kgg?!t$pSx z_Gcc{ypG$*Oe^ifOMZeHX@NdP|caPBU;V1maH1Mb*3Lg~9f#@K*7r!xzzmbnH z)UJxVn!{fpJ)oPLi#F@UvBLsfoL1;<&=y-%>3DIzX+;A@eZ$mo*Br14cBAWu?`ouq3-Ib%CYimbOWh?}}JM}3D!1$97F_7O>P++I~%pyWR0{ngs0IuB38W2X% z14837njg}=CYld??iV{d-_g6&bkI1M*nHI{HTR31Yl3%D8#3=`7GjiMmwHd zzsC2i*O_1|>k5=Fkuq%x;TK6dw2@r22b!F@3am)Njj;j+#wCsBrf7Td7Fr?XN9xLQ zbPVcgb$Qb`r}Gg!@2e78V%hK7_TX=>G4G}P(Qbw|^7~){U6UJ*&QU3%*>6RW#8ko1 zLZDQdh)o5v`JecglMpo$YFm9GxlM8m;H3R&uZ$^McZ=(E-`G~#VG_*`Q8b(&r3KEF zPuWi+_Vm>bTBpa3aCN-~XPACF&sJ#|^tP`R=S1;gC)thw&^3_lBql_P23=&lIFS04 zXu=Jk&+~$2J1mFIEW82Ls~}ia=I-Bx_ADl=4zCKXcGp74v7*GT2-L)?KoFosU}x5i zmMknZnR+Gqqf4iFBgE$_$}q1fm9+lCujwF;rf0`)E5quwZ1g<3@{D!P7dsX0oVsNn}ZJ zifM^e3!6C6W+J*5tHivGoyJZSQzepvmmVd4Yu%(;tmy%)`E70AwN7Jo)14v}6S>9g zgS2itq0!P(XVlsZxRuJtq(GA>TPdrKK$ z+q@&Rb>MRmOKfKg_&~3kA?o^WVJ6uD8x1*06ub_agYjDCXq>rgx>{~tP{Ok@e30_( zMF@BdQN`|enP&KpLvr!ORej*960W0gmg_Sit=##CpN$>Loe;4AcR`3hI-;s4j@@OK(ftBArvNF^y&n+k|=R__` z?PJ#O^3zjldG~&jE;v}w_j`FmTx7$#Vp~MT`d!%El7o+@aFC**dgfs134gXX9(%GR z`lyL-Td8nq+7rO1qhGSA8pzDoMw7pZ)g#P@Gm}azO`N5?zb63S0&r&K$o)>&A?!U# z-7fEoK&|$K=IGBFbRsb+<~4h`Ykj-K(qh5(e9GdvXMO85YffAE#?r0c+>mNj{@e!y6cRCh|$j~b{5yP{d=*G+>$gX>{U}t#Vk<2D?Gv$W#yzRNw;BCSr={=c0ETIQ{?L3MmHVs;NX8v zhsI1F^TM@P8qyv;FGa`ffL51Q~a)~&`I`r+n!k#>aB7ZHsoa_(;0e(VhT_* zje&>NF<^(o1Aef-6^9gq zfr1Vw;vE+6TQ^&*Z4aBKSP2Xb_LQBE4PNQYu~;eug8TUabAmw|r+yw=8De2}wvtI)J!Rf4F$ZqNNw#}xTQKd=6&VfqR8cNEHhEZ3}T z;`ljZ=Kq*$Ryk3^`RsCsl_aB+MB>QUO)zc03f>b!MplCa4g!Ho2O$JjS8m#1mBO)F zJ8`SDnfD0tzCSs@q{{c5eixtm>SS3|L|_~tJa=;9=*H(@qqF1j3FAxSRejg~d-sDa zDufqR<%utzx`XWQfM7EM5v-xzhr6gQP(fBY~OjTijrh7=8k!H zSz$<_%@O5h@^yvdn%0^dm8Sv0vaauH0~HA!%{%9F&YG0!YM_l+3nR{caCRt%{J(s9 zkYRP2@DICWVC(i_u{m}6tTc^d(1w!N36PfV-y2`UKz z)j7y7O=zoDR}nI}!^|+q)8a|#!YG^RT2KZI>FT8Xc~G4n*xq#Uzf!+C%nnzjrmm$M z1zCUk;kK5;iUQf9GnNBsXFMHQ2J-8@d_jfC#|f#O+;c^Mqe)KgPFFUV#zTJN#cMV^ zr~+q0$PeA8i7-YwAtioA9at=7t?D~^e~!CWCkF}k9L1Eu%V0?swbz|nxd4|zsp-H# zvdQ2NIU@l}XFa*k@S_bJ18n7bwKh@_Flq?c0a1@Wq}c|W4eY8nt!tSSe}{LbZso*c;#vL8jS z^ao^EB-x%fvcgM<6mHw9R_W?Sii0hTkVCDsYW%r@r+%w3P~AaVxFdWZl;H_x5}P%! ziJjD`JVbUsAY?Ym$hS%{47bsyIG=pt(6$vk#0H0li8MPWSCMlO@~s;3pIbJK1Dsi> zEM_FwiHczk1Ao`$q^q!=f$~af5pJ>I!0Ci%83c*(Bwok|_hTr0XnF@ZvDFmpOrOVzhH(%xP#<8fd^t33)izLIw*Uk5mA}Lup3_f^Sx_l?Yx#jTl6s>Uc+G=D! zS-U~?7j}Bvt}m(tPii;r-DC+e(skkN+)vuhuQ-#c+=7dojf3w%#d)C}BF&;i;O`*i zwO`@+PMYVQ^-;|}yhpZ-3d1`NP&V=sOB!1aE$If+H(PVAST0FEg71n&$;{6%K7Ec@ z^{1`2YasMe!}}kd0Y+KzAL_m24!H`Rz9I>qsQu_m3I|f0Lm>X` z5}ts10@=JA)7nM$neN;o9~iyA+(b^yVk!hScJ=ZgGD_(zXWRZ%V$rBID}!#r1Yv2A zf@XI2+qpJxQjQ>r`&Q4@vHAQsKS06U_hI%Le`asm|CSsf{(sf>{O5d1(#FK>e;Z6y zs)BneJYs!+#Wm1~>HLw05Y)@VZNP*UAzJ~M^Ut4K63+!YxnXjX!Xdt1>`3O%yiWtY z*HtLa-&tTo+C0jz46n32JAx^;zOoHo-#BD;X`9rNR(yKzPEIO-MmNL}zx)3F`u@J= zzJJh&<_5_Lnj&DlMsHy?9BA-nf>VJ{Dhl2kO(_iYK%!Vkrger6=o99&KFLinRxhg} zo{$ax)r>ADWh2#32%BpeJXal{ABGK`x!EZItpUFgfYxRnxEFgV!M`cSRaS;qCM_~75Nu#ysKH=^1QqajA2;IrD~03iOikQ7~$rLh>;*y4bWQoo1EXOE20_P z7Qx@DizophEU#=aFFh$QSczZDNNG!bL|B<7A0YlCC1eyRHI|toY0eA{d}z%TQ&q}4 zPf$suKA#oU1C|8*f&_t>*14$s+`K|+_SN2R#u1aSZ%Tt9Au_;Bvfl$JQUNUSbxo?T z6bQ#*0Zst~hy*evUNgEMWFA5TodMTyej()EZ*;0hl1IA#G{9~6UcS$A*gM_vGOu6_ z9uFv`1&c>aB0P}U%G}KOK`BKcKzxEIA=QnM_p9aO&=t&CZ&}2+Ddrf7Ozo6s^lU7GZdk&z*ON)HH4_- zF&{)Cb-987+@uCxRVXR%^vK;w7wTRbrZ%;D_zr(T4|vz{h${RwEf8{UbpXl=@uT5{ zD=2{BQEs>BB9=W?y;>g_uRIVOJN>%D6_%i>@*L5PivBSiw z(BYS!6E)zWlr>@Eh-t5y-^Sa14Be+HfBOClOo9M$@ID8A0S+-jn5}-1J2U%-=`fq6 z`4jItPXBJmT0X514Lcj$k-umkaWJ5WcV9(@I2veNE!y$hY#^1|;t*S6P2}e&{R%id zbZ9`|*FkB;+7jWuXUB5%eNE5~nfYfLlB%DMVXfdjLbgTr@->`}A63i#bm` zoYU2_J>QvxdVmqz26He$H0bDxFJz#}Fqlb}E__1ItWI1eKjDL&Y@`&HIAPVPcFjlp zDiE|j3vrB*s`Lyo+x^P&u=)>=hA*f|^*nrg6(^H%rAU2@^!b{Aa+2ce$GT>4{pqdg zC(#-pf~5dQtbFv4Gj10s8lX~F2XC&p@HHU%`)7UG5@KpM@q$KW*PQPXUAT9ljnS#t zyqJG!-CD#3$8a;sYb|9#9}e&I(R%~eUO`tNtqVPM%cP!mGn{MViqy-i47)ZxhBFU8 zGFj-I)*8OV=7{?T*C>F7(~AV)O0nGBaTj1VuppQ3nV`jKEEp}Ptcv8nay+bkA+zi( zeRM{BzPadpT!}U&+^6payeSAA0YHbM5Jr(MYriH=KmZ+#Wo z@oZ1*+N?^5X{)$$0VL1fWWHP`VhgtJd;M-MsYhrSDji4GSGNWP?H z7nvY;a$2X~xayb?;>ioz14JpW{Y_-u zJpTFgDVr}f<+d?1i@*CvbD61L=z3YQl4GdUOYiFRA|j%gy$=yy9Pv(saKyJ z{k43>f-Va*<8vFlkYf=wxU`L{QjF%S7vT0_sao~y$u9UCpK^@BTeYCeka82?b2xhW zf<8u;?LAm2H;b8Jt&nhnj!I~a@7^+2dsxr+6}l?WOuN%HoR$o9sFI(KrVeCAh_fd- zDt19!`Y|B;Jq!XlR{x0^j)~a)V54 z_^c#|VveuF4N4QfZV(9@-u#a08SOL-JlTl^iU?j=k|HuK)MQ>CD|!oVHA15Evma7V z`m4JLP806wMTz9C9l-$w`(8nzAN+e}z?)THU538YE?S$pDT!fIRQb;^@%iZ4x+j;q zz93%~@wyd2WggMqLN%G@4l}uPB88QajJeEE`=TJa{6rLXSB=!E#I-+0TwCGbB6Tq> z^GTcD>XAP18%HFef>!^QpTe#m=mcjE1$=joUrD$N-WHq>%7hz`(4TOFwTbLHz=Lc3 zzf*@!xzKE>JQA{F%`bMlueSM^w%gnRWMq<7_1#6y(^7iMnItD@L!A6td@~3o*hBaz z(-6m#5_)PsL9i5BE5T0!s*Q(mj0;F0kij*?HPnGih|ECDMKw%;kQ+>7f^{9a0jW+(%b=jdI7d((*6)%yC&u-03#!XH@R;Ve*RXl1LYG2!04br-b@C z?IIOh01NpBHqRJr2ckfb=31kzMW$WdDOm0g}iog=LMs%5nxE!9D8 zZ&iG_FhQ}pC=qVPRLNI+4l4s?fhG}p&c-Qm?y7X=4lc0JS56Oi9pc zQ>bjd@2Ir5)!#CGq{%Sbna-X9_@}6qCf~sn5W*CA{@l&tWzOjAH457LM z-$CxzWP~d_p|n3yif?F2s98!R`ByWdgBrtTTj8e0ow&wHYTdc-fBuiYu7Amw{B&1(F#lbLMdJVIe`MqIznMTPRXkh~7m>a< z2@R7r5A_iBfZ>4j013w>76$SNJMhJF0s`=xSXVpM{^0>hUFD_p(pWcdY@`XZBCDh_ z-_~y@EE0ONu6#1vzJ7k+?0$Pq{kobk9wiR9=1!;aFge=rnBuD5ZawDyn#ec#T`}kb z#Ega3LZz23-2Jlxv5%&VAJ4!=(5mwcuQtq0A0xV!8ev5w+5cETgvC-T5W9Zaka@ob zDG1H4d-S_g=cnjMl(xL)!i~=gGWQiqdVo(|=qg9(WTT)m;-5wjtw@z{D8Ii@06I#D zT`v)YSkSgn4QkfTVb|V95CT)^FX2y)TIlRHvL z_zq&)qKX@rq@8}~-j7o)JuvB6TiCH)s}DhJ|v^K)J(NuB7|1N z_`(})aPhYp787ZsY=0xbtx0XgjyR8IRS>bSE%7SGOAPx2W_~9C=3+NCO-h(?184TfJn`Z>YKGsx zK<^S!`X!3a+FI_Jkf(@YX{Yk=fdL za@sG3*5L@FnqlguwW)E{3%JNPAr)978q=nN^R60<^wSqI+YS5I2~5v1FxNpO1dH>I zl0h4WMEKdKV}{@t_Z;Qw=!&rgNE4EIV#`qiPRtxT3+eLxtmo;QcPs9sg~@vWRA+C| zK<<-jOS2qOiWDujo<_8tCXPvo+>-mQ?)$IAF-#<^eKP57R83u~Z7TOq0dz}JjlAI_ z2iSuC^!q2pB?8+hxv6o}#yYWWWaq9Ce^xZ4x%w5(<6Z<|sJ#fTlndXmk)ftxO5{4w zTqwRg+?o^v2$ID#9M3gY(^H(^0LUhwJUF)ChSqH*8^xORj6%@t+xW~_rG+*=pLPY< z`XP6 z@1oU?i_eDpUP!sI6;t-e7>j{wez371BHV1)LuP}wVD&{C5YXBB2~flpQv&KcbMRtT z!0d+^y}CedP>GBKzP0E@y*qZkZ*|bIV?oLs@r_jC zWcn}QzT@Lmf6l5(D_+}rIHzZ+l1uyRBq*r5Ug9gA#pz)r_A8N$hgohbX}f%F%A2xb z-Qi_wg$c35d;!MyA3esKeZ`-VHxq?E$<91py5MgB_r{GvPr+zMoN2XdVSx{Ec8ABT zc=VzzHH!2`Epth%GBicT78G+&>qGg1nyvF5H}JrAPtc`G6XZk=*TmTa?O=;K$h@Pe zYRu#$a?~#48@E-!Hh}= z3PGOqFQMd3sOKp%0gTYo&kp#o#{#ccrZNuE&{hpvK)^95$Dce$8(24tjx!22CU|x6 z%3N;?ygRs6Zb#Eehr4endW&})#_AYCI4@+rGYuGV@7N-zeQs3F6^tD+qR=#jj?O@; zLVoSl@=c5yXb<0UR$VCe!|rv=ELM!<(Z?==Q9uZDO6=sg? ze@ZnPkm1N8TA>z`-uV{EQX-aPCBE(!se79r^EC2#;z!HC?8?2_np>X1a+8!CP@P>$ z036q}kZs65C*pZlLOknvQ*uU-JWpuC?+0zO`ClL1_TzmtK>X1)qtsM&#&ifDZ?GE| zmM*JNdDpw%XLActiOJqQ_Dl~9zJdIJZ`3D?+EwwK9}wU0*V$*8zzyn*!9Kfee!)@@ zK=6Oz`s#TI2@|;y5idQ;{NVcl_c8v;goV6C`A8JYhd-0n9JRxC6)MVjm8=}>2-hAQ z*TOuPi)OCi{e!*&MyPvh&hmG$1<=BlW@#6wYX5e9z`%w}`o7KyhRPKn{T8ulF3Kto zJ#)dE<8ezYvV8!0g^0a2z3CE8q*ev9pWBXS{Y6jI4jJT2Ov+m50Ig!KMzUWYdU^6_ zdp@O{FPn!yy&t`dae_uVzG`>=>zgcc7&S|n!Q?Akh@hd%dC&anhUN?ZVNUXk+MEvy z=lcn+`18*{dcQN|mOutS*-LBi|E{)C_`k1h{%c;O;9}-zVER8j5rlOAVoIoLxF9GY zen}&+8=;$qCUB6hh_B7TER!P&ks`)42tg>xmCirJz(^YN8_Sc1p&)i_(|~QsDk>rh znUT8sHmZ(;F5ih|dETyW@2D?%8584?nMvhVG&vY&*LQb5vu$tH|LOkp*hTpzVHcWf zq_gckxX`Gb6;cZR)9_T4Z*CNgHmA4^XswnBO{q;WBW*KY-Pi$_Sfw1eYyww_=|7P-RP`9=z{dgr04u5Yqyw z3@u|M0Q=sVx;Qo1Dp;=iN{LyUtnwNb0zQWtv}WIVLj5ALOuo&zVH#VQy$LW)#k?oxbt`%UNJq=1LM;I&K z4~uImqOh`yH7N@b5=#CXTCg6T;RcTH1Ll1a+459EbU__R9a68$ zNW|~A8`r87dHZY6lqN8gi`ro0ZAA9-TWLm1Tu!Y9m_IJJ3>OL9Lxd4m9md6oSl~^( z_RssND?_{D^%tEJLn>*n0Te<>kX6y<0%f=)@C~aoSanuT|46`MWfGV;w_N>I7OCfsF_}zPTCvvX%D< z&?BQYp>Parw5779wLYrwBhVxvoJMKT?wtSyv*aPdg~>aEVIk4GYk7k!9~$ zD;oNOb}g^|PO44#jU&pF1E=7$nE@x~@)rS|h8p9WCBuqv63$VeGhO_4jfIwH>Sl$^ z&>Q1PwXUgO(@?;L(18L@}xnk4gP0D9#c?RMQv(o>R()^~XyB+pIA)rXGOV%=bmPDe zPJgXWeznv8eI;86vap!aH--q8Z|Q6->D5W@%Pa<(qSwp)w%G=EpCYY#vtZ#WKldw_ zH)Ril(DDB!96R$n&sf&?@$c@tE|J5y2*UlEEYR8IbFzZKP%xFy(-;>EIKA{m#LnA2 zTcf-um4@bk_3o#-;;N@z6(3YQEzP`EAXr;)G&I>>;!hEkEf1+zWVoYX}#W zi$}$J0$w)fXTsTg(6CcOzzPwX_w)_{>aIsRBf-WC=(>+i19~&{YYWmlrf--m1IjzK z&+OYSpu?%sX=+S|u5l`~jauW@qxWY}90u(;=3({$I5lU6IT7(TPmt7S=`I0oUrT}Q zLHNWm1qa)2#5_6=%c<^ff6PcUk*jS=jW^xzT{Z(M7buVtP2fm_$qP*_pci}^<{V+I zT3nl8Nojy`D*OPt>Ew+cz$3>j`a|o^70rW@>9f}#9+*=@I2iPg*>yN11OcffdEb=r znd6y;j+^hF#`Cb&e8R*ia75ReW0^CAv9y~adTnS$oa+d57FH-(tv#Uv22th{5#Q=`~NGt|B_rqD;WenSnsBegd~WNkUadmA}Szc zMOm^uRl2-k3Cg7t6o*dhlRc;E)^!2e+wyM_o?qtr9~alR^{g(yy{dvx%Nv$9##yN* z&L+p}(K0%}G=~}c_ZuHsHfj&cY$b}y3-^e&m*&XR(vr1ItTHvEOAkn`C1fCpG^1%i z&MIudMm&% z`nX)N`Ue5?|A6|U9Yw|3Zkr-PLp{dJi*XIg#!DW;hvd^msS~1_JIT2x%&`t-m<17w zTsG525JsB66DSAHd3K*m=7<&BLwWh&l5gb>3n(C6&?*V6CPq;_x=%hmJ*fm$nY%sN zMeZ>Q?AOiIkIfg=0byy;Day#AB8IK1cvjJnaj|T-Ic^_q?~l!_S;h|X+WV3NDgWid}bh*(Z`);g1%pP$vv8t=YAzZE z&s7!hik=+kp(KMYf@RLJqgNKin!0}`);SAAWQa^ws4~bP)p^R%sKeWWAb z3OB)%r>-pmpcU%J-*OzgdhF>Z{ALwcj#z)6W?DWuf6Ut%VHOC52LaK##4UyA8Q~%h zy%^G~pen~*^2#@af83$(zegg2KlrACe~WM8{15Jsl#`{S**~_i{^?oxuj^8n46T5m zf*3R{bU;u6o0HSHrd)~I(?+E%fhSA^2MHn-E>+&do^Avlp1wI@ywB^C_=#?^miqPg zt3-O+;l5FfS&ca`)gvz6W9vR6-C??q=lkoG1@;-7miE)|1s!_3# zQ-NoOv+;smWVq}qK|HGRs)hsFC8{%@5NPmEBTJgOnX{aiJS(H4O@cIdn$@jVJ0om zp@9S7h{*Si`VN!t&2+Z4lNcp4sF4gy^y-~~iz6}8AKO5ZT!3ee$Agi8U6*I%1v6;E zubMNfAmS=3j(J>Rk4Psb>do9^wGS=N5K?o9^`4;-(8xMrV8?R=fDY4s?GEH%Yv_pG z7Coeh#b#A|Q8^Bg@&-oppD>)Xlc-+AQ z(9=FUR*I|-nXm)6R{t)W@n9T&(C|C*(%MWSb+G@?c1vS&lsp$@dPrG@n4DLu+70av ziV~DFKZy;tNU2zyVNW+)xVq)RMr0ScW_WdJvEsf<`p68)+*dK#sx7b{H4%bR`(c1O zKhfeA)fHKBRwY3My(?0v-b@%`Y1QAQS=_z1F*KbkYHjYM3nt^zMs$N4ybQ*JRR_7U zN`#vPH>AYO>9dQ4zf)0JhcuipncaGcg`epi=h$a)*Z1+LD!JUUZ zWQjmwJ3nTUQ+mkIbmmKRi}q&MkTa2JCB;TXo9$Ye-auC@lgj;()_aEa zX=?ZYrD~9$Uha4_^&TWqD90t{(eQneaz!>H`*q;XI$~9kEuKLgbNZc z^p0Aw;V)5g%mccmc1Id8!o@!UHla8N8m8BM4mc+B&~f0PqXu5M(}j?P^M3-WOK}d^ z8gzQ@W4d5|t-^r1g+9U=`SUit``%>S_#@_2_SX|kw;&Lrz|=)QVqjYS60O1k`$Nt% zg4dwaUoRm8$a}Yo%e-`b8jKs`$pf2};0=qihNO9BGHK>2^%hF}m6vOBee!DK7z_N# zcVDA9Es=Wi@K5qi7H%ky+z<5P@Xx=K|NjJf@!y}W9~^+Av5mdezn(CK|H_uChor1% zP#iFqI2W->EDTL2X5!`rOU$9`ZHi4Acwwy2V4w6(F-mUuB3~z7GG+975<$DB9Qb=T z#JSP_JkfgWE%~&3ZNu~1(jY$9+5Kts0gJ8%Fc~!WMv}#zUk~ek<^%Pm*re#Nz3MvE zhHwMdRVVKq=1=rT&tebiR+IG0-*lK~cjNi+4RZ_TS@Fs~TAtEUyk6OiDIfAus8W>R z_UbgLptp)gw1&qi>GPUZ;}tiac6IZf%#kYwM)9Eudo{xxlN?=X|EZV;%nK#;oWNs*;vklyteEQPe|=mN+K<}bwYDVZW`x;aDEyb<&j*ji zqe@Z65o`Hpv?Z2o`|Fg$asPqp4#ZQmNd6KXmGE@T0C3Pe( z9moY92oc`DhB%EC1D_Auv(}yDvPiGVq`a6U@kPe-Zq}rX79NK(`;*`UG)#Vaf;tFM zNG!H;tt(@Ed7I5kdRoWl`wR3hMT?Zr|&LRn*CBJOdFI#O*pjDkTy(-+rb?6$elG4XZsZk`}&Lppis zlr6nq^D*r(>wTCV3K)w;@b58Ktln8Ys2wf-+@wnp+X*2!g8+Tuq#D~0gtB_cCS7@{ zmZu`pNy!aeJDB4gM3N4w%eteAbJ@GcMdIz0Ilh`!`l+3Y@Of4dRO6XOQmY?`Q7m3# zgSW~4d$~8oq7|9ftdcj&@;ev96ZapQ`z&0^kLp%`$W8&jmdR4wj6;E^b3*;ny|ha+ zw0C@NTe-nt%~@z-8mAHS>cnCPeX#g|`09IS+R5d@hd*??u2d^FAx;)67vMzSu z+`UM8qzKggXw(CX{YWzszk$hXF^4Fr+fj#x1M)$gV5;DQ5)y@1Qs(Krak0j|*a$rR zWF%UG&S})&|8D(ONvJ1_Q);!kPy4Kjn68oS>@*xCW8 z1hON|d+#fe^rpc8Bk-NGXS!@CIF*R1(BN((Yy0eM$1WyLkRWH#S#Y}Ul7kV?!BlEo3rQaMOvde?*#BGO0!IodhogXo5mIQd5vh3D$`$9n9 zTWI$?e1ojKf=q9RZHhI;XGlt`CzF#E)PfVG_1E|d@t+8L-LFr`f7HDB!+PYRKSte% ze_QkN{y*K@e~E^Yg~GZpA{QhxeVyxoZ^47me#`>%?^tHB^%WxEX0zO&nUol@ZpWp& zC^>wIti%D{Z{BZdhIvj?S=KXYq@=C<{a_5pi4XPpN93QtXD&MK6rhXj>!>piKpm2Eal0Amj-G0q*A zwa13dii`Q5Km;^YV^*IH4>>ma1nF#>t1@4>AV(>TX15p8f)6Aq+$hcIsun#(!=C9EJy=Xme?Mk{#9&WB(hgueZ8HCP$*)`0$TPkJV`pjJgsDNQYC2`h}jX* z*&HDLD(Aplm;(@{%xyhXA0;e69QofJ+9oMi(Pl37Dc_5I!!Lx9(Kn^|6}`nEdI~0e zAuG*lv=fI*%kS*FKwStDWFI42&gpyDWW}cwFmsyAYDo4nnRRUZ)*+^oB(B?VP$&+s zzL{s?9$An(eP0R@R0;C=fupj8l9- zk)SsWMX{{tKVm%~_xz()M}yBYt!o3}yQK0%j3CWa&-A^AV=5q{acFCt+77AkHvd+M z;1j#D*N_~T(Dsv>Vrls!2)YMG`eu`6=S#Pm=wa=fRqUDo97GZH*;<>Kh3egZvb%nG zurciln zN9-1&LB`oDP9wu-5p#JoDxYbjC6a`i#Pm(+-D4%6pX?FTaxi*6T*Z#TSY869RDVYU zAHC=q0^vW#v{5W`l)|kd`VA~^0=K@FTu7_{)UxW^#4#gAw2)n0nmLe3y%y3$8uZ+t z0?*+-c>{}bBnKh^vnKjHsIaQtCOsr>wfzhHhN z@bgCE=?aA|g8&Gg7b;dN<&awWnF3KX&W#?Rf{-xS8RrFQUnpsKbfc_uzwh~b@ikaD zJ+^*IXlZSl7=tzE`c>5-Gmv;pt!_6zzfN(#Py1kh!RX?6>z#BdXGxxw*#}|(kJcbk zsgaf@;YUj-*O{IykBO<#AUaa95qdwwu~C`HXJL5L200NJFk z{WHjjq-C&zAY-;6j%;u69={rwbj(SHgk)c2HlSvQMb61mAZ~QG#5^`5?|WsB-LyjgW2uFN5yC)#bjaqddw>Ax`xtU63>xkm%tF7i4#|Mo+*fBPr2 z*PB_V2^PzTl@u+c5&|zv8%=6JcOpg>90r(o5b+wFl12gF0=Q>DV=X0&6LH5FfGM0^ z0uxEd#rO9EdL@i;caTb(cc)aGsfl4BFaomn&b*$`3U0YOP0~9qMkk|wgr!oeW%M`? zp%}QSgdzSoNF(^(Y1KU=V1kM?4DeA5fJxAPL(u^ZlUXL3gvtBry@W=Gv82wAfYF-GFRVk2HL{pdV}yM~xbti;HDcYtJ*H6o2X z2roud10vpHu2WqsL0%lrcF5-=ly`H7!w;7nD19OfLGyV9igd3&h)K^{x&pBqMoL7a zS*RIjjC?+5#xY`s7O%gC0htCL9E@W_w{XKhOFkcnrW3U2)IosRFGDgWzQ zp_GAjvyfgU)_1PXLdczP8D}pD?1fk$Q93PTI2oh{sx;b8BIYf?FBzJ>%`Vz3IGGbpkiz~1hijW{1*-- zQr(6v)gzij98Fi63Z&#q~H9KjXmgj0L zShd&RA@U7jMmTHxV5iGaGfpO8pGPdk_p3S1>`R`r3cJtnS>lEm5nsfnP+{=mQ1v!r z%i`N;Lp8u{BwQr15~vJx=piE-1I<3%`P&B92D?(1nPg2^i5Ca zEW5DW{u&k=1!Q1lBdRFIvuPTl&r;xjMKAt$tx|>b zR9Hm&&Ss|JheaoacSG$->f%3;8&HO5kUcSl%>OH&@yOhopqmzO08+ZQz;?`B>@h9H z@z?K1x-tvOF1@u1}RdC+eu>mA^z`S zu~^jsQ+U$KvaKCoKxr0B-M`ER5`;uGb)Wv=4RX5t;?aRBg8QB74H7bQTlABrwYvxkND4qnqTo~N z8(6ZKKZG}EI!CrOQ=m&}v0nG-x@(1=pG$vz#MVIW0~zB0WFk$_cd~3I=dVi?<=t}o z-jzM!t+huO5-u&1qGkNGXBjfc>shd@m;?;!VoY5CQ7(=YT-!0!I(N~J!{8o$pj&l2 zIzp08qui<~2Rhy7I$lun}QFbP9`DCk% z&XwYuYArcz2Vm_mZT#m!M62Y0p|W~Gf43wHQI#80N2tAiVnz$8tgtxWR{A$b*+M?Vot1R(u( zw(v$446d{Y+J2jZMwMTSI1Us={%|5#{x@71nhIV5>(~53lV2;mRemi14!o-D5Bxf& zTH{3>35{e87#)UcNq|x%?b0zHupD@-0K3VwHU+zpkZQ&rs7T;wO|fPM%*zwiqA;4; zckp^X1>s!n0Ifugvy#uZ>KVTHb&0$m1PNWfKvfv+d6ac95_*NS<_(bfYJgZlN8S>k ze9PnIRawdAW`}@vGE!ldpk@z{{w%1)=Pw_Q%G$glLXZftxSnay_ z@8Lkc_EFu2@*)+5Bap`73mU-FOg$gp(Lmfk#Y?fkADg z0q6q_N{W1bq-#~G=%2;(G%itt_6tH2ddk)Ji7NL8S|WXgdMMLhCZiu*8oJaNPWWXQ z?kkpQ7cs#$X~#9c>*gUO&2U<6n8Z7c2hCHEgn1oNI+)FnZm==Qj_ZCUHvgHwWIGa7 z12I8zvyYKb)C3rA!l|QhD3ggr6(h=9`%4+{YLduXTO4648T*I^AblzKF|1N+r(id(;pIB_jGujOES)EJ zrI$?+I59iS)0ziBnupGSR%k8ZNOI9DF+bPA%7~{UvN&48!-og<-^r8-OZFl!!t4pyYC(J+JU8>{Sw}_eSM?C58yQZqfC;ex z+~gEYoR*sU5`0&nh-0BR+1L(2qST$GGp{!o-%){C%5cI|RQgN%-r zDzsVm{5N*D+~+4z$!p2y=QFYMNmQpY1L(%AO)W;GISm52Or2_?8onM&|zn&ygm*J|23#1*JC5wyi0P$gKmonUAswbN|cJ1a&cR>jHb<+L}qAxDUfse zlc}8ts0R>@OwF!BYjcoU_H3ywW7utI6;PjeCT;&E=ZnE9c~_n>R%@dI1Kk}-Y;y^u zG-6>MxZ+*S3=wp8xzPJtx}hz9d(FSm@hMmz?XcN9q_aEto^jmYz zbORcrvFK~%`%JtR^=8MeCn^4wDdY1GoNwH|Tjyp@zn%94)hz~yezq|iXrY^$XRiXL zL&+otycP2YLJK{EZ1pQ5KeRLUn-l5Am^eC^EzgN{@X*A9!YH@eoYiOpjls48xU>gw~TG48b8w zT|5#qHI7;H4TN3BO-u!FhGlJPj68*`hOg%s@%Ecn0&cIXID zbBM9N8b2M9382rh+QPx1rty(a@t0C_;}mt1oGi_sdbg$iEwXoT%qA^;q-?~ND&vR{ zx-Hq+TGB(KcxE+bV4@L~dBX?pLbt3l6iZ=hgp%4CH=!xSp`sA9EK9wd2e~}EANkl*{OQ2K~xJ-pZdh&}!7L;_bIYlopkZhPox|A46iL$>c+ z)#;yW9O4t>@NB=N^rcV*Y*LY=kE^FT}agz%?%p_9kfKQ02>gIzrn6vDFo3oXZsEB zq?KGCJXwZjUgluYHb9&{Lpqe4G8#^GTYd9nw?H8xeL4KuPpfq;7j>}2=N&%K2m5#A zU-#>Sl90&}P29od*fjUjB^;qO0bl?SctSl)@VQcW6^4I%7%+X32&VPmPqT+&iuZx1 zJYw6Q;a@$}ax?Jdq=U6`F+onYZ(JZxEFSg~;M93BEa6M1iF4soflliwdY;%JYx<9I zcm6&jwdM+hkkIy>`Ne5l;5n0mXg9*L>}DhH5r2fc5S>Zu(-;{(LbOLNnIk&4_i6VV z0Ny|h>l}_)Sf*7wsBGs9H=o>hKRgg)9IdMcd_sKJ!uv2`s(tj!-dyiJsl(+sbNW>4 z@Z@!RGc_;UV2*0vPYE$<)1k))fX)k|6@}NPkPYREM+|$)X)kDh2Y;jpdE$MJP@cj- z?NwfQa~Q%sv#AbZWN?%0THmr+EH+AODb*iGYyBWuE|VA%fwq$5YsiT!JL2jz_x^@Ey(?%;~KHhb({ph*lbs+PV=Pcuz1y2 zcZ!eynWtFY#ctv^!6J3aN{j}(fW1cB!41V&men4ry)7^uHl%0gSrpQkNnzEkQvZ{> zbk1cwFPhI#7s+&5o!yuc9Q=^G%}fNqV0yuKu?}veY|w>0H4%R!Di0$fg1HJhrN(+j+NN}OTIH#9TmGwJQ#eN$nJ7m$L%);NtQBA31QK17A-t9iB*YMdzhv$el=ED4qlYSEHXS&Rhl$iRJSP za^4wkAn{y`20uVTm|Aruo(mwB(>&%1PkFfnmjkY)2a$KcXzd?Acl9u+@@1>ck6KDG z)8-E^DQ#6gXsY;Fc(#v8>hy*PlWV#0%c4cdT@9!F*j58OM*1bw3x9hp-`zD-Ue#*W zMp-=OC@B?fG>xbSlOixUOq;cZGrUle5j3!D3b}@>$w=XpKR#b9D0wmLzW6g$rGVm_ z(iKheI@{gEN!>6|&T{ZlJkkPgZH6fmS`3_|4cH76Hu9t@nU1HbUPdxtGUTl~W|0tH zWRjRXW*nHXf@v(olM!0eKHgx#5ssc&ZG7xkFzprdxb1%^&* zS?5F_J5;6W%5MXE;C#|897c8RkO8%R6WqB~x}Fh$nzM#RYg^6`PN+4>G0WZyv=%FV zj91T-?9`WmNR5_vAE?)vgM>QGL?-i5R57&0?`fYr;dX{=Gtve4TT!qjA~Qo}ja`3i zi81Z;rgw0TVRc+ncC|>a-i_-ULDH1yYS1mk?-eWeiPDxh>w=;09fbCic%IsGSHg$ctS#XW;pJM!rpm;cHe zJ(W{G4ECz>RF*Vl6IVeQG%jelR%rFL@uGf|m~i{!&=qn*$7&G@)dn;w_8?=v5AjO$g=97JLRz{Xhqnt4FbfoqwPwEVQH}+$n}FCl z^?kkw5*YY;V=9sYXd75xw9W@Yq3PMN`apY3yh1;eR%71;cNEG~(x^G{@8aL2mEOJ; zZsGjSMxzi(lTnppVN|HlsY`)__K*o8gPwWMMts$$R8{5Qt>oEtlPlkE@8@Xx2LuD+3xAP3SSXMZnjLCaciwj`zfBy<{P4b z&R2w<=Lf^B!QSmDfL_CWp%!ark4KbhA@lmIt7eY3g?K|hlI)LP;YT|2ek zZmWxc2Y&O8b{%12eKKJ1Z`=#-*yqmZ9zcY;j7MCI+hYI@v>qNyE;GQ_ z4!jD~9YyjotsEg;rwJM@Fwz7|8L>@>!_Yc}qod)R9^>`quGh4q^!RER_zVgu{YG3e zUH}Vi&aWo539KUpB}w!$T{fAhZ9qhq41aDj>XO86>hb0NcpX3w%wBWmmPU!cGD2x9 z2383U`|{|}V{kcf*7|cgfF?-UMQTE4m8z)=H~navBpGM?BxNW=n6)es@aXL*%84?6 z38PO_|Evz$__PL;m!tGT2!9eJbc%XaranoxpTR?v8213Lve5JRN)i-NP=`gF!*orX zQS71gq%Ll}&EGnx`Gxwkj%j5UT*&s^(?M5-;<@mTA#aMXsF7mcq|7zP{>IJ|H3@a)I3>b zzSQk!>eUE5im-N!B)rL{gCrZblE=3)M22?0ZL0pp@tvgOBb}2NEu%r}^zVdU=Ia7j+oMlAerD!%Gy4VQzR&>R z>Zw}Zs993DhaN6lGS$*YQn{E>r5=~fe36ArJF#a|3ijqX2HRk#P^XRts0nw(78G-_ z;5@}Q(a&+{0oI3j)`!<9EH@{{F{#;3uYd*f{u^h6cXYO|AG;9PTtnQY9s>w=_X57< zDY$Tju8ybnG)KvcyeOFIi^=yJL=)y-Q&L^Eh`eHns>mv3nChSeh(c(>p?_fzdWLK@ z>mdHcgeujVYG(JnCSILjxxYj70dE~3cSJU$(05XFWMmrIRr~!&D|ZVGArFlsFJfH5 z?aC{8`99?fQE&xE5LCtM_hq;iiC*+@k1!(kEUGJmrHiJ&V^NlFv6g2bBbD$UjnsdW zVTroi*;#<@V*d-+sQ+Lz2Rw$ z#f5aUc}thgX<@{E`Xd&g8kEidqBO-<7;ko(b=e}Ra-vs6A@G{2I-x}`H#_Jfz6^W& z2V-8UNrH`I3mFX9Hc@HGnLXvRuI28q!O|*5!;eCh}SV(n;5HePz(p`sh^2P&g%qrEqujk*T2?D zWtYXBB#2}BS|J1wBnL-zU%xrvEO&GjWSZV|b5J1|XhH5LW`xbisbIe3PGYwURCe(s ziy_h1T%iL?o3*qPnl|5gz+e1v&?YQz^VthxlJcA0_ez;x&g3i=6;dbI8os|~5A_$9 z#?rE?P1K3woAH$(w{;e{-S(Z-h;NzbmnxPdXl{pUIMz_Zd}bX(9PT!uIl6c}T*DY?svGE?0%d6s&o%xm5*M{+# zLa~IW!YyJ`Ic*k9Ts|Du4^RG}43fUJj4k=vcBR=fT|y^7O2O=l{(9Z5+Nj54I;gJiV$126bP;{)oI&VISLb$xY-8 zN+UgYsE}7q0EaKtw1szMW7*Dq9)0zsE$ow zPf~lso5y~NWrOCy0N{-iA{n}VJ&*lPIvAt|y&*v5sBH_drQOn;7wxlD&|}n)O`jF` zo?*+iO1G$>1lcf&vmgAv6rtw)yLZnShrqXI9xF)sl4lY2o%IFDc~Md|-*M&^Dwber zn^zr;41gAx4&YXtmC01hP1mgUjB$oiWHUzU4;WHI)})`&%eU0o6RpoJy%Ky{P;+Eq zCRiTc@+Q5(OfJd~x5m)2n)f!Nt!SFd#vUu}$I8ESI_$eVIz#9d<9)H@jSo|2A@c5b z!^OM~Ln}S+lrJCki&3QPj)veD7w@zT8Q)qr`ZU(I*)oPW7F;tE$#L96 zoK=_dn`2^P)va-P*?mh*1;HbB zx%hF6^zVfzxy<8mB_L*|_>as?>EB~!VkWNt8%AdT=ZL5P7YsdpZlmy5<(!5F8&4QH zJ=;Q&IaTZ0bY%#YmmT^s%q9m9wst)5fHTyNBRv0 zeEO&<i( z!Tgesp@FjRuB*-Rl=v|EwiePKhS@y!b+;tnh=AQFM~=D+3tET@<+v+ZSXJH}U$`(ih?&u$^j*svzmL=B=NVr`{3dM$Xuy-ueYbyF__7i2CwHT;F)iUT z4vJ>0u|zn3Ol(^B?&=Ztr!7)m*OfN|YqkIq+=O>DPJ1*YOV${%mcd@Yx~0TmDQB4* z1|2#X0S+Nx-(6z)IKE8Pv3nVeW#K(#Z{>DcG%} zPH{986X&PA66;g7hS>D_V?IGOf0pW0Bzi$~v zEH2p{^vSQ3YX&B>3!}z25aKmHD)O9AcCAjl;%%(80dcssda+NN%(rYO)h;Pc^R7~4 zO6OgodB88)Lr0@F2n$SL^V!3iLCfW5`BAcJ?9n-Qe86luii5i2 zRIMkYXLJX0?$vvI)ifk@-uD!e%2*i4|RLMog{;(0G^L~ zfBB>396?JoctGwR6%0v04Yz|+^N?SBJ*xnlPsBxbi@b5duJ}4UhJZ?15W9COxz?gn zrizhEr3<73a!u^jrL)Gj*WhJ>j6;cIc(GNsVr-gh6SsD!2t6gWq@&|Z;WhN%64i_$?{m`lTp-#9w)iH5o zRR3umn|z1Y=2iu`_>j>RUNX%@+Ut54dVm``YI>0qx%`V0C|$TX1NuA>}y=)lD0!HQfOtw#?Q zFbp*8F6x=iWS4BowrE7-FSS$}s7N@YHDrIPdLi-FZ3bCqxKFu3zL|cSj6f>8CS&CHmC@Hvkm% zO)kpn`#pF1p9H|j4o8ykbxQX-jpxhT+EJ?MKx#rylwK92d6D@@&pg*2oUO-%xDX^b zB<>g6&}8#XbYFw56)&f~vKSUSQ)n)5`4tb_YcQ?&Qt8mo3vOU!*z+4^6&jv;2zJAx zBXxm#V3iWXDAW-3hCENGn&g?W-X}vKB0jT_(X`(2D(Lp zXHw-h50UKB$fu_abb9|zvglbpD_zVN5vmwyPnpTOhd`Z?#Y?eu8}xvvvSK1<0^pApl;f5$H+!}S`*Y*4KpB8FDjp@~3B)@W*~5xZ{8c5GR!ME&f0 zk@w}c_jyhnG8+cl&aIMZJ-U=HKTa6YYdwhraUiyfpkyfIj>3pYIr^EWYq|x`TPE#j zJ`;P~uppGz%rMbOY&o*AV5)5M#o_dX$$15MI6x z-m}V@G+5T)v#Gp9H|qC|>xEs`}psk2EjpNxwwAWsac1A1JXju=xe0 z!(9hHunfKToM-q;zrxy{VAo&gzW`YxR~&waB}of%ZjG}W*T=p!}v(B8E3Px~BO z>mQ{Mu^vIRPwkhU=58XDTA7>+YE@op>XVkUcahfuRTEnP>o19&ncPl+gxpwjP?&R-gq=QI›HomG4Q*theKVCk! zI~*i675|Z%ir?~@4oBfU0#nUZg{&WwTtRzSXKu3t-tYLndY!>k5a7R6EK9geCmnb<%Jg90H{-N53clD0s5Vg7m-^ zVFAf?`by0%_>6=E0an+#y{IO@Jf%T2~;0NivO_Y}P z3Zqe4Eq;fP++=ik1LEq-@9nez7Sd_0DU0U&79EC(dkF8Tv~*RDC>D(TFxZl){qk3^ z^#YG3sd?&enLPy+Sv&mxO*^R)=ZO~=RmT<(Y+$+iGafVw#I(Ic#FS%J5SW7UR1m-2 z@@+j4@P7LomDS#S+xj4wE#+CULz3lGpLVN?T)jGDHD}&X&=bvyprip@i^Yq{V(ZiX zo*>lk>fcz!gvp_3R44R;xFRoSOzd~eSR<~Sm<5DDW5!y$7Rqhn*J1E4Ddes*Yq3Mo zR?1#2+=Gxpy4JeeV*$eW_MOEpV(`%JnsVabK_E<_X~Q6mGb76n_IlzA*}2@83gQtSIB1;E{SCG&37L8={QxFw)?6)V;;gq*ex{`w93JOHKHdoYyXK;jOEKcHQ z0 zk#=H$zzyl!B@1h8V|<9D3-OGdcjJ-JEW1g&=~zw^?8SZQn*@SwiVI0R1jhLbo-Q4jCPY;eA37RUkcd{0^oc8g%eegj_LO4qTfU>^ z@lyX-D-;Vg^w{0y`PJ z?=4FM{pU;dS^`+IxnTaGLf}O+AL`MMM~X2v1WeG}W@8`!p{d*oG`H!#zz1`I2{cN7 zwtt*vhU?nrg>8dy;6l`ExHV{^uV647;m zZO4d0=VWqf6fRdoT7R(V|AoL70kM2n>?!Mtb^EE_^g{b7 zX!(l3x*osl;TVppham{r@7UGbn6U#dV>)Rc?(IzMe84fv3R8!a*;g|EvFLDOVoud1 zu)Tc}R;HSr&4BJvK~YyDF3thZdVi(u7-RnPQYDYp?P@Zup;;!{1PA4cLA_pn0ySqX z1=JIU(LuJr7?rV!hd&?(N!;z;C zdfk>TUn3njAHKE$92}3c3NM!q03FkYHe)Pog)cG38f1%l%>)>q_4q!aRh@*M)VEzE z@snK_z0)ap}q=Al+YmY|9RZD*)* zS!7(Kz06TOKceu(s?snH9X;`|JP7DF#%b1+I6(i>M5XA&g(5h3`R zWR26BlAb}kEAzmO5)(S+iOEap0cFV|^)lKSYxQ$O&gOpfSt#IGoFmnz9b;KIe@2PsdI$}Sr2mvhNDC1j< z_pzu)*>_&@_Eu5ErHiLR(UjkSzf^v!+83bvHi`;i!bZZ^1@6%FEgIY`NbqO!UgwY#aEf+9QQbf*()YhY z9kToeYH}bbGyO*>Q~vj$OvcIq6oL2`AhZ3`gIZ4}hmTRA6J+lC`q}=2^GUfzP*QUU zz&LWrl*l7RzwgMLGBcHU>Fyg)=&H~tsJvo+e(DwGmBGLsG&O#=cG}ieSV(KV=fC5z z%67ecd7J_bjV+=T^|VO%u;hGY+b>Y= zI3pfA<`^@2aJqTjw1~1+K+MYml8|Z!MnMYS0PNan0ukJ$^}YHcN;rA;;EyHf&qfqT zCM#s|Je${F)HAby4zuNHDN+d$Q*1Q$9^MlUAa7^xG#PQR_Nf9m1a@^AC&b`@dog8P z(>mmioD_V$PBPV^bx@Htn|0MX-|0B6(=_V03GA1^v0Nu+H;B|(mq+S|uJfQyC7&cN z%!jgqh@oK{a~0ckt+G$bV9dap#xY%RgNp(3@YwTuU8T5V4|RkYV$@#}j8^g4dKzsZ zyOzm7%+jwU=Bm*0cdlR6kQ%Jl?xaVUOLj&fx#{;|+;M&v5#Cng!%bi;fM6s7m*_W+ zj)$3YEjWhF_zXH_NnT~DJ&auCtWD}i(Li9f0KafBQ3r?xH$7gN+njbL;DP`k^?)xX zG`?B4Fnot!dMg17a;Z2i70;y(kC~@x$=@|w!#J`bT&~co3X#`Jqd-XIL?hVuP#UK8 z3{pc_?;B;yip4x+31st`R4C&e3W;%+kLMVL

B&I9nmK=b+(ZkH)ch{aRdGh>D;S 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≉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ⅆNlL<;*N8 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 Uc&k$FDYU21IpqB}prca#AF}n{cK`qY literal 0 HcmV?d00001 From 7e7178bee0585b476a63f93051c952e2f400341b Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Tue, 28 Jul 2020 12:48:39 +0100 Subject: [PATCH 063/188] Attempt to make local spy customisable --- .../proxy/common/ProxyChatManager.java | 55 +++++++++++++++++++ .../common/channels/local/LocalChannel.java | 5 +- .../proxy/common/config/ConfigValues.java | 5 ++ multichat/src/main/resources/config.yml | 21 +++++++ multichat/src/main/resources/config_fr.yml | 21 +++++++ 5 files changed, 105 insertions(+), 2 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyChatManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyChatManager.java index bae61513..7013e736 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyChatManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyChatManager.java @@ -2,10 +2,17 @@ import java.util.Optional; +import org.bukkit.ChatColor; + +import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.connection.ProxiedPlayer; import xyz.olivermartin.multichat.bungee.ChatControl; +import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.DebugManager; import xyz.olivermartin.multichat.bungee.MessageManager; +import xyz.olivermartin.multichat.bungee.PlayerMeta; +import xyz.olivermartin.multichat.bungee.PlayerMetaManager; +import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; public class ProxyChatManager { @@ -139,4 +146,52 @@ public Optional handleChatMessage(ProxiedPlayer player, String message) } + public String getLocalSpyMessage(ProxiedPlayer player, String format, String message) { + + String spyFormat = ConfigManager.getInstance().getHandler("config.yml").getConfig() + .getString(ConfigValues.Config.LOCAL_SPY_FORMAT, "&8[&7SPY&8] %FORMAT%"); + + spyFormat = spyFormat.replace("%FORMAT%", format); + spyFormat = spyFormat.replace("%DISPLAYNAME%", player.getDisplayName()); + spyFormat = spyFormat.replace("%NAME%", player.getName()); + + Optional opm = PlayerMetaManager.getInstance().getPlayer(player.getUniqueId()); + if (opm.isPresent()) { + spyFormat = spyFormat.replace("%PREFIX%", opm.get().prefix); + spyFormat = spyFormat.replace("%SUFFIX%", opm.get().suffix); + spyFormat = spyFormat.replace("%NICK%", opm.get().nick); + spyFormat = spyFormat.replace("%WORLD%", opm.get().world); + } + + spyFormat = spyFormat.replace("%SERVER%", player.getServer().getInfo().getName()); + spyFormat = ChatColor.translateAlternateColorCodes('&', spyFormat); + + // Append message + spyFormat = spyFormat + message; + + return spyFormat; + + } + + public String getLocalSpyMessage(CommandSender sender, String message) { + + String spyFormat = ConfigManager.getInstance().getHandler("config.yml").getConfig() + .getString(ConfigValues.Config.LOCAL_SPY_FORMAT, "&8[&7SPY&8] %FORMAT%"); + + spyFormat = spyFormat.replace("%FORMAT%", ""); + spyFormat = spyFormat.replace("%DISPLAYNAME%", sender.getName()); + spyFormat = spyFormat.replace("%NAME%", sender.getName()); + + spyFormat = spyFormat.replace("%PREFIX%", ""); + spyFormat = spyFormat.replace("%SUFFIX%", ""); + spyFormat = spyFormat.replace("%NICK%", sender.getName()); + spyFormat = spyFormat.replace("%WORLD%", ""); + + spyFormat = spyFormat.replace("%SERVER%", ""); + spyFormat = ChatColor.translateAlternateColorCodes('&', spyFormat); + + return spyFormat + message; + + } + } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/local/LocalChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/local/LocalChannel.java index d619cf6d..ae59b0ae 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/local/LocalChannel.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/local/LocalChannel.java @@ -12,6 +12,7 @@ import xyz.olivermartin.multichat.bungee.ChatControl; import xyz.olivermartin.multichat.bungee.MultiChat; import xyz.olivermartin.multichat.common.MultiChatUtil; +import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; @@ -75,7 +76,7 @@ public void distributeMessage(ProxiedPlayer sender, String message, String forma String finalMessage = joined; if (manager.isLocalSpy(receiver) && !otherRecipients.contains(receiver.getUniqueId())) { - finalMessage = ChatColor.translateAlternateColorCodes('&', "&8[&7SPY&8] ") + joined; + finalMessage = MultiChatProxy.getInstance().getChatManager().getLocalSpyMessage(sender, format, message); } if (MultiChat.legacyServers.contains(receiver.getServer().getInfo().getName())) { @@ -110,7 +111,7 @@ public void broadcastRawMessage(CommandSender sender, String server, String mess String finalMessage = message; if (manager.isLocalSpy(receiver) && !receiver.getServer().getInfo().getName().equals(server)) { - finalMessage = ChatColor.translateAlternateColorCodes('&', "&8[&7SPY&8] ") + message; + finalMessage = MultiChatProxy.getInstance().getChatManager().getLocalSpyMessage(sender, message); } if (MultiChat.legacyServers.contains(receiver.getServer().getInfo().getName())) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/config/ConfigValues.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/config/ConfigValues.java index 7f9c7607..8e189a8a 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/config/ConfigValues.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/config/ConfigValues.java @@ -89,6 +89,11 @@ public static interface Config { */ String GLOBAL_FORMAT = "globalformat"; + /** + * STRING :: Format for local spy + */ + String LOCAL_SPY_FORMAT = "localspyformat"; + // Group Chats public static interface GroupChat { diff --git a/multichat/src/main/resources/config.yml b/multichat/src/main/resources/config.yml index bd06a502..90b6f7b6 100644 --- a/multichat/src/main/resources/config.yml +++ b/multichat/src/main/resources/config.yml @@ -150,6 +150,27 @@ no_global: [] globalformat: "&2[&aG&2] &f%DISPLAYNAME%&f: " +###################### +# Local Chat Formats # +###################### + +# This is the format used for LOCAL SPY +# %FORMAT% = The original format of the message, usually contains prefixes, displayname etc. + +# Additionally, you can use the following placeholders: +# %NAME% = The name of the sender +# %DISPLAYNAME% = The display name of the sender +# %PREFIX% = The prefix of the sender +# %SUFFIX% = The suffix of the sender +# %NICK% = The nickname of the sender +# %SERVER% = The server of the sender +# %WORLD% = The world of the sender + +# Global Chat Format +# Will display as [FORMAT] [MESSAGE] + +localspyformat: "&8[&7SPY&8] %FORMAT%" + ############################################################ # +------------------------------------------------------+ # # | Group Chats | # diff --git a/multichat/src/main/resources/config_fr.yml b/multichat/src/main/resources/config_fr.yml index 4046a3e3..95f185e2 100644 --- a/multichat/src/main/resources/config_fr.yml +++ b/multichat/src/main/resources/config_fr.yml @@ -156,6 +156,27 @@ no_global: [] # Will display as [FORMAT] [MESSAGE] globalformat: "&2[&aG&2] &f%DISPLAYNAME%&f: " +###################### +# Local Chat Formats # +###################### + +# This is the format used for LOCAL SPY +# %FORMAT% = The original format of the message, usually contains prefixes, displayname etc. + +# Additionally, you can use the following placeholders: +# %NAME% = Le nom de l’expéditeur +# %DISPLAYNAME% = Le nom d'affichage de l’expéditeur +# %PREFIX% = Le préfixe de l’expéditeur +# %SUFFIX% = Le suffixe de l’expéditeur +# %NICK% = Le surnom de l’expéditeur +# %SERVER% = Le serveur de l’expéditeur +# %WORLD% = Le monde de l’expéditeur + +# Global Chat Format +# Will display as [FORMAT] [MESSAGE] + +localspyformat: "&8[&7SPY&8] %FORMAT%" + ############################################################ # +------------------------------------------------------+ # # | Chats de groupe | # From bdf2c44649eeee094d52f5e8371dcdc150051726 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Tue, 28 Jul 2020 12:53:01 +0100 Subject: [PATCH 064/188] Fixed wrong use of ChatColor class --- .../olivermartin/multichat/proxy/common/ProxyChatManager.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyChatManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyChatManager.java index 7013e736..841a94ad 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyChatManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyChatManager.java @@ -2,8 +2,7 @@ import java.util.Optional; -import org.bukkit.ChatColor; - +import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.connection.ProxiedPlayer; import xyz.olivermartin.multichat.bungee.ChatControl; From a6d38e640fcccaa6fbf51eaf021af528a09708f2 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Tue, 28 Jul 2020 12:58:18 +0100 Subject: [PATCH 065/188] Don't send spy messages to the player who originally sent the message! --- .../multichat/proxy/common/channels/local/LocalChannel.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/local/LocalChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/local/LocalChannel.java index ae59b0ae..6e1662ff 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/local/LocalChannel.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/local/LocalChannel.java @@ -75,7 +75,9 @@ public void distributeMessage(ProxiedPlayer sender, String message, String forma String finalMessage = joined; - if (manager.isLocalSpy(receiver) && !otherRecipients.contains(receiver.getUniqueId())) { + if (manager.isLocalSpy(receiver) + && !otherRecipients.contains(receiver.getUniqueId()) + && !receiver.getUniqueId().equals(sender.getUniqueId())) { finalMessage = MultiChatProxy.getInstance().getChatManager().getLocalSpyMessage(sender, format, message); } From 53f9ba631c3b623339bdad38954f6b8ba6ac6134 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Tue, 28 Jul 2020 13:04:35 +0100 Subject: [PATCH 066/188] Fix bug where receiver still saw 2 messages if were also sender in spy --- .../proxy/common/channels/local/LocalChannel.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/local/LocalChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/local/LocalChannel.java index 6e1662ff..81b916a2 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/local/LocalChannel.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/local/LocalChannel.java @@ -64,8 +64,12 @@ public void distributeMessage(ProxiedPlayer sender, String message, String forma || manager.isHidden(receiver.getUniqueId(), "local")) // Receiver has hidden this channel continue; + // If receiver is sender then ignore them + if (receiver.getUniqueId().equals(sender.getUniqueId())) continue; + // If receiver is NOT in the other recipients list then leave processing (as this is local only) (unless they are spying) - if (!otherRecipients.contains(receiver.getUniqueId()) && !manager.isLocalSpy(receiver)) continue; + if (!otherRecipients.contains(receiver.getUniqueId()) + && !manager.isLocalSpy(receiver)) continue; // If receiver ignores sender if (ChatControl.ignores(sender.getUniqueId(), receiver.getUniqueId(), "global_chat")) { @@ -76,8 +80,7 @@ public void distributeMessage(ProxiedPlayer sender, String message, String forma String finalMessage = joined; if (manager.isLocalSpy(receiver) - && !otherRecipients.contains(receiver.getUniqueId()) - && !receiver.getUniqueId().equals(sender.getUniqueId())) { + && !otherRecipients.contains(receiver.getUniqueId())) { finalMessage = MultiChatProxy.getInstance().getChatManager().getLocalSpyMessage(sender, format, message); } From cab2be0252060325b587058b6ef42ca18fb224e9 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Tue, 28 Jul 2020 13:26:39 +0100 Subject: [PATCH 067/188] MultiChat v1.10 beta 3 can now customise the local spy format --- .../releases/1.10/multichat-1.10-beta.3.jar | Bin 0 -> 637286 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 multichat/releases/1.10/multichat-1.10-beta.3.jar diff --git a/multichat/releases/1.10/multichat-1.10-beta.3.jar b/multichat/releases/1.10/multichat-1.10-beta.3.jar new file mode 100644 index 0000000000000000000000000000000000000000..c3cd97da49ac99bfab7b3efb6fa3a3a1d4b3b208 GIT binary patch literal 637286 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ȗ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

59x|v-)?^t z52`K@OoUwM)V0Z7uC%M;Foznq6YDQ51UH9~P133Bs~kg6So^9pY3ih203(;2(}5xP z9cM7b5p&A;z~-zE4rS(51(vH8*0zuQu$1wE4ePAYS>r4OhN Date: Wed, 29 Jul 2020 12:06:39 +0100 Subject: [PATCH 068/188] Move to using enums to get config handlers --- .../multichat/bungee/ChatControl.java | 19 ++--- .../multichat/bungee/ConfigManager.java | 38 ++++++++-- .../olivermartin/multichat/bungee/Events.java | 7 +- .../multichat/bungee/GroupManager.java | 5 +- .../multichat/bungee/MessageManager.java | 5 +- .../multichat/bungee/MultiChat.java | 31 ++++---- .../multichat/bungee/PlayerMetaManager.java | 11 +-- .../bungee/PrivateMessageManager.java | 19 ++--- .../multichat/bungee/StaffChatManager.java | 13 ++-- .../multichat/bungee/commands/ACCCommand.java | 3 +- .../multichat/bungee/commands/ACCommand.java | 3 +- .../bungee/commands/AnnouncementCommand.java | 3 +- .../bungee/commands/BulletinCommand.java | 3 +- .../bungee/commands/CastCommand.java | 3 +- .../bungee/commands/ChannelCommand.java | 3 +- .../bungee/commands/ClearChatCommand.java | 5 +- .../bungee/commands/DisplayCommand.java | 5 +- .../bungee/commands/FreezeChatCommand.java | 3 +- .../multichat/bungee/commands/GCCommand.java | 5 +- .../bungee/commands/GlobalCommand.java | 9 +-- .../bungee/commands/GroupCommand.java | 3 +- .../bungee/commands/GroupListCommand.java | 3 +- .../bungee/commands/HelpMeCommand.java | 3 +- .../bungee/commands/IgnoreCommand.java | 3 +- .../bungee/commands/LocalCommand.java | 5 +- .../bungee/commands/LocalSpyCommand.java | 3 +- .../multichat/bungee/commands/MCCCommand.java | 3 +- .../multichat/bungee/commands/MCCommand.java | 3 +- .../multichat/bungee/commands/MsgCommand.java | 19 ++--- .../commands/MultiChatBypassCommand.java | 3 +- .../bungee/commands/MultiChatCommand.java | 71 ++++++++++--------- .../commands/MultiChatExecuteCommand.java | 3 +- .../bungee/commands/MuteCommand.java | 5 +- .../bungee/commands/ReplyCommand.java | 13 ++-- .../bungee/commands/SocialSpyCommand.java | 3 +- .../bungee/commands/StaffListCommand.java | 5 +- .../bungee/commands/UseCastCommand.java | 3 +- .../proxy/common/ProxyChatManager.java | 5 +- .../ProxyLocalCommunicationManager.java | 9 +-- .../proxy/common/config/ConfigFile.java | 25 +++++++ .../common/listeners/ProxyLoginListener.java | 23 +++--- .../common/listeners/ProxyLogoutListener.java | 9 +-- .../listeners/ProxyServerSwitchListener.java | 3 +- .../storage/files/ProxyIgnoreFileStore.java | 5 +- 44 files changed, 257 insertions(+), 166 deletions(-) create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/config/ConfigFile.java 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 2ff6afdf..8b6e78fd 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatControl.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatControl.java @@ -14,6 +14,7 @@ import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.config.Configuration; import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; +import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; public class ChatControl { @@ -56,7 +57,7 @@ public static void setIgnoreMap(Map> ignoreMap) { @SuppressWarnings("rawtypes") public static OptionalapplyChatRules(String input, String chatType, String playerName) { - Configuration config = ConfigManager.getInstance().getHandler("chatcontrol.yml").getConfig(); + Configuration config = ConfigManager.getInstance().getHandler(ConfigFile.CHAT_CONTROL).getConfig(); boolean cancel = false; ProxiedPlayer pp = ProxyServer.getInstance().getPlayer(playerName); @@ -143,7 +144,7 @@ public static void setIgnoreMap(Map> ignoreMap) { public static boolean isMuted(UUID uuid, String chatType) { - Configuration config = ConfigManager.getInstance().getHandler("chatcontrol.yml").getConfig(); + Configuration config = ConfigManager.getInstance().getHandler(ConfigFile.CHAT_CONTROL).getConfig(); if (!config.getBoolean("mute")) return false; @@ -159,7 +160,7 @@ public static boolean isMuted(UUID uuid, String chatType) { public static boolean isMutedAnywhere(UUID uuid) { - Configuration config = ConfigManager.getInstance().getHandler("chatcontrol.yml").getConfig(); + Configuration config = ConfigManager.getInstance().getHandler(ConfigFile.CHAT_CONTROL).getConfig(); if (!config.getBoolean("mute")) return false; @@ -189,7 +190,7 @@ public static void unmute(UUID uuid) { */ public static boolean ignores(UUID sender, UUID target, String chatType) { - Configuration config = ConfigManager.getInstance().getHandler("chatcontrol.yml").getConfig(); + Configuration config = ConfigManager.getInstance().getHandler(ConfigFile.CHAT_CONTROL).getConfig(); if (!ignoreMap.containsKey(target)) return false; @@ -279,7 +280,7 @@ public static void unignoreAll(UUID ignorer) { public static void sendIgnoreNotifications(CommandSender ignorer, CommandSender ignoree, String chatType) { - Configuration config = ConfigManager.getInstance().getHandler("chatcontrol.yml").getConfig(); + Configuration config = ConfigManager.getInstance().getHandler(ConfigFile.CHAT_CONTROL).getConfig(); if (config.getBoolean("notify_ignore")) { MessageManager.sendSpecialMessage(ignorer, "ignore_target", ignoree.getName()); @@ -296,7 +297,7 @@ public static void sendIgnoreNotifications(CommandSender ignorer, CommandSender */ public static void reload() { - Configuration config = ConfigManager.getInstance().getHandler("chatcontrol.yml").getConfig(); + Configuration config = ConfigManager.getInstance().getHandler(ConfigFile.CHAT_CONTROL).getConfig(); if (config.getBoolean("session_ignore")) { @@ -330,7 +331,7 @@ public static boolean handleSpam(ProxiedPlayer player, String message, String ch DebugManager.log(player.getName() + " - checking for spam..."); - Configuration config = ConfigManager.getInstance().getHandler("chatcontrol.yml").getConfig(); + Configuration config = ConfigManager.getInstance().getHandler(ConfigFile.CHAT_CONTROL).getConfig(); if (player.hasPermission("multichat.spam.bypass")) return false; @@ -405,7 +406,7 @@ public boolean checkSpam(String message) { boolean spam = false; long currentTime = System.currentTimeMillis(); - Configuration config = ConfigManager.getInstance().getHandler("chatcontrol.yml").getConfig(); + Configuration config = ConfigManager.getInstance().getHandler(ConfigFile.CHAT_CONTROL).getConfig(); // If the user triggered anti-spam, check if they are still on cooldown if (currentTime - lastSpamTime < (1000 * config.getInt("anti_spam_cooldown"))) return true; @@ -454,7 +455,7 @@ public void resetSpamTriggerCount() { } public long getCooldownSeconds() { - Configuration config = ConfigManager.getInstance().getHandler("chatcontrol.yml").getConfig(); + Configuration config = ConfigManager.getInstance().getHandler(ConfigFile.CHAT_CONTROL).getConfig(); return config.getInt("anti_spam_cooldown") - ((System.currentTimeMillis() - lastSpamTime)/1000); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ConfigManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ConfigManager.java index 7582a4e0..08ffff97 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ConfigManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ConfigManager.java @@ -6,6 +6,8 @@ import java.util.Map; import java.util.Optional; +import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; + /** * Configuration Manager Class *

Manages all access and creation of the config.yml file

@@ -29,36 +31,58 @@ public static ConfigManager getInstance() { // END OF STATIC - private Map handlerMap; + private Map handlerMap; private ConfigManager() { - handlerMap = new HashMap(); + handlerMap = new HashMap(); } /** * Create a new configHandler for a given filename and path + * @param configFile the config file i.e. config.yml + * @param configPath THE PATH WITHOUT THE FILE NAME + */ + public void registerHandler(ConfigFile configFile, File configPath) { + + handlerMap.put(configFile.getFileName(), new ConfigHandler(configPath, configFile.getFileName())); + + } + + /** + * Create a new configHandler for a given RAW filename and path + * (Not recommended, should use registerHandler() instead) * @param fileName filename i.e. config.yml * @param configPath THE PATH WITHOUT THE FILE NAME */ - public void registerHandler(String fileName, File configPath) { + public void registerRawHandler(String fileName, File configPath) { handlerMap.put(fileName, new ConfigHandler(configPath, fileName)); } - public Optional getSafeHandler(String fileName) { + public Optional getSafeHandler(ConfigFile configFile) { - if (handlerMap.containsKey(fileName)) { - return Optional.of(handlerMap.get(fileName)); + if (handlerMap.containsKey(configFile.getFileName())) { + return Optional.of(handlerMap.get(configFile.getFileName())); } return Optional.empty(); } - public ConfigHandler getHandler(String fileName) { + public ConfigHandler getHandler(ConfigFile configFile) { + + if (handlerMap.containsKey(configFile.getFileName())) { + return handlerMap.get(configFile.getFileName()); + } + + return null; + + } + + public ConfigHandler getRawHandler(String fileName) { if (handlerMap.containsKey(fileName)) { return handlerMap.get(fileName); 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 7f516c74..b327fb14 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Events.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Events.java @@ -22,6 +22,7 @@ import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; import xyz.olivermartin.multichat.proxy.common.channels.ChannelMode; import xyz.olivermartin.multichat.proxy.common.channels.proxy.ProxyChannel; +import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; @@ -154,7 +155,7 @@ public void onChat(ChatEvent event) { } /// - if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean(ConfigValues.Config.FETCH_SPIGOT_DISPLAY_NAMES) == true) { + if (ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getBoolean(ConfigValues.Config.FETCH_SPIGOT_DISPLAY_NAMES) == true) { if (player.getServer() != null) { ProxyLocalCommunicationManager.sendUpdatePlayerMetaRequestMessage(player.getName(), player.getServer().getInfo()); } @@ -263,9 +264,9 @@ public void onChat(ChatEvent event) { ProxyLocalCommunicationManager.sendUpdatePlayerMetaRequestMessage(player.getName(), player.getServer().getInfo()); ProxyLocalCommunicationManager.sendUpdatePlayerMetaRequestMessage(target.getName(), target.getServer().getInfo()); - if (!ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList(ConfigValues.Config.NO_PM).contains(player.getServer().getInfo().getName())) { + if (!ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getStringList(ConfigValues.Config.NO_PM).contains(player.getServer().getInfo().getName())) { - if (!ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList(ConfigValues.Config.NO_PM).contains(target.getServer().getInfo().getName())) { + if (!ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getStringList(ConfigValues.Config.NO_PM).contains(target.getServer().getInfo().getName())) { if (ChatControl.ignores(player.getUniqueId(), target.getUniqueId(), "private_messages")) { ChatControl.sendIgnoreNotifications(target, player, "private_messages"); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/GroupManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/GroupManager.java index 30eb1cfc..039a1ab1 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/GroupManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/GroupManager.java @@ -8,6 +8,7 @@ import net.md_5.bungee.api.connection.ProxiedPlayer; import xyz.olivermartin.multichat.bungee.commands.GCCommand; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; @@ -33,8 +34,8 @@ public void createGroup(String groupname, UUID owneruuid, boolean secret, String newgroup.addViewer(owneruuid); newgroup.addAdmin(owneruuid); newgroup.setName(groupname.toLowerCase()); - newgroup.setChatColor(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString(ConfigValues.Config.GroupChat.CC_DEFAULT).toCharArray()[0]); - newgroup.setNameColor(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString(ConfigValues.Config.GroupChat.NC_DEFAULT).toCharArray()[0]); + newgroup.setChatColor(ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString(ConfigValues.Config.GroupChat.CC_DEFAULT).toCharArray()[0]); + newgroup.setNameColor(ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString(ConfigValues.Config.GroupChat.NC_DEFAULT).toCharArray()[0]); newgroup.setSecret(secret); newgroup.setPassword(password); newgroup.setFormal(false); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MessageManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MessageManager.java index 3012fc25..8d70920b 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MessageManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MessageManager.java @@ -8,6 +8,7 @@ import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.config.Configuration; import xyz.olivermartin.multichat.common.MultiChatUtil; +import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; /** * Message Manager @@ -407,7 +408,7 @@ public static String getPrefix() { public static String getMessage(String id) { - Configuration config = ConfigManager.getInstance().getHandler("messages.yml").getConfig(); + Configuration config = ConfigManager.getInstance().getHandler(ConfigFile.MESSAGES).getConfig(); if (config.contains(id)) return config.getString(id); if (!defaultMessages.containsKey(id)) return "&cERROR - Please report to plugin developer - No message defined for: " + id; @@ -432,7 +433,7 @@ public static void sendSpecialMessageWithoutPrefix(CommandSender sender, String private static void updatePrefix() { - Configuration config = ConfigManager.getInstance().getHandler("messages.yml").getConfig(); + Configuration config = ConfigManager.getInstance().getHandler(ConfigFile.MESSAGES).getConfig(); if (config.contains("prefix")) { prefix = config.getString("prefix"); 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 d6426c18..51b3b90b 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java @@ -21,6 +21,7 @@ import xyz.olivermartin.multichat.proxy.common.channels.proxy.GlobalStaticProxyChannel; import xyz.olivermartin.multichat.proxy.common.channels.proxy.ProxyChannelInfo; import xyz.olivermartin.multichat.proxy.common.channels.proxy.StaticProxyChannel; +import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; import xyz.olivermartin.multichat.proxy.common.contexts.ContextManager; import xyz.olivermartin.multichat.proxy.common.contexts.GlobalContext; @@ -115,7 +116,7 @@ public void fetchDisplayNames() { public void run() { - if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean(ConfigValues.Config.FETCH_SPIGOT_DISPLAY_NAMES) == true) { + if (ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getBoolean(ConfigValues.Config.FETCH_SPIGOT_DISPLAY_NAMES) == true) { for (ProxiedPlayer player : ProxyServer.getInstance().getPlayers()) { if (player.getServer() != null) { @@ -157,20 +158,20 @@ public void onEnable() { new File(translationsDir).mkdirs(); } - ConfigManager.getInstance().registerHandler("config.yml", configDirectory); - ConfigManager.getInstance().registerHandler("joinmessages.yml", configDirectory); - ConfigManager.getInstance().registerHandler("messages.yml", configDirectory); - ConfigManager.getInstance().registerHandler("chatcontrol.yml", configDirectory); - ConfigManager.getInstance().registerHandler("aliases.yml", configDirectory); + ConfigManager.getInstance().registerHandler(ConfigFile.CONFIG, configDirectory); + ConfigManager.getInstance().registerHandler(ConfigFile.JOIN_MESSAGES, configDirectory); + ConfigManager.getInstance().registerHandler(ConfigFile.MESSAGES, configDirectory); + ConfigManager.getInstance().registerHandler(ConfigFile.CHAT_CONTROL, configDirectory); + ConfigManager.getInstance().registerHandler(ConfigFile.ALIASES, configDirectory); - ConfigManager.getInstance().registerHandler("messages_fr.yml", new File(translationsDir)); - ConfigManager.getInstance().registerHandler("joinmessages_fr.yml", new File(translationsDir)); - ConfigManager.getInstance().registerHandler("config_fr.yml", new File(translationsDir)); - ConfigManager.getInstance().registerHandler("chatcontrol_fr.yml", new File(translationsDir)); - ConfigManager.getInstance().registerHandler("aliases_fr.yml", new File(translationsDir)); + ConfigManager.getInstance().registerRawHandler("messages_fr.yml", new File(translationsDir)); + ConfigManager.getInstance().registerRawHandler("joinmessages_fr.yml", new File(translationsDir)); + ConfigManager.getInstance().registerRawHandler("config_fr.yml", new File(translationsDir)); + ConfigManager.getInstance().registerRawHandler("chatcontrol_fr.yml", new File(translationsDir)); + ConfigManager.getInstance().registerRawHandler("aliases_fr.yml", new File(translationsDir)); - Configuration configYML = ConfigManager.getInstance().getHandler("config.yml").getConfig(); - Configuration chatcontrolYML = ConfigManager.getInstance().getHandler("chatcontrol.yml").getConfig(); + Configuration configYML = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig(); + Configuration chatcontrolYML = ConfigManager.getInstance().getHandler(ConfigFile.CHAT_CONTROL).getConfig(); configversion = configYML.getString("version"); @@ -295,8 +296,8 @@ public void onEnable() { MultiChatProxy.getInstance().registerContextManager(contextManager); ChannelManager channelManager = new ChannelManager(); - channelManager.setGlobalChannel(new GlobalStaticProxyChannel("Global Channel", configYML.getString("globalformat"), ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("global"), channelManager)); - channelManager.setLocalChannel(new LocalChannel("Local Channel", configYML.getString("globalformat"), ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("local"), channelManager)); + channelManager.setGlobalChannel(new GlobalStaticProxyChannel("Global Channel", configYML.getString("globalformat"), ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("global"), channelManager)); + channelManager.setLocalChannel(new LocalChannel("Local Channel", configYML.getString("globalformat"), ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("local"), channelManager)); MultiChatProxy.getInstance().registerChannelManager(channelManager); // TODO This is just a test channel diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PlayerMetaManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PlayerMetaManager.java index fec84047..062bdb65 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PlayerMetaManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PlayerMetaManager.java @@ -7,6 +7,7 @@ import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.connection.ProxiedPlayer; +import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; public class PlayerMetaManager { @@ -54,17 +55,17 @@ public void updateDisplayName(UUID uuid) { ProxiedPlayer player = ProxyServer.getInstance().getPlayer(uuid); - if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean(ConfigValues.Config.FETCH_SPIGOT_DISPLAY_NAMES) == true && player != null) { + if (ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getBoolean(ConfigValues.Config.FETCH_SPIGOT_DISPLAY_NAMES) == true && player != null) { DebugManager.log("[PlayerMetaManager] Fetch Spigot Display Names is true"); - if (ConfigManager.getInstance().getHandler("config.yml").getConfig().contains(ConfigValues.Config.SET_DISPLAY_NAME)) { + if (ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().contains(ConfigValues.Config.SET_DISPLAY_NAME)) { - if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean(ConfigValues.Config.SET_DISPLAY_NAME)) { + if (ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getBoolean(ConfigValues.Config.SET_DISPLAY_NAME)) { DebugManager.log("[PlayerMetaManager] MultiChat is in charge of display names"); - if (ConfigManager.getInstance().getHandler("config.yml").getConfig().contains(ConfigValues.Config.DISPLAY_NAME_FORMAT)) { + if (ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().contains(ConfigValues.Config.DISPLAY_NAME_FORMAT)) { //player.setDisplayName(opm.get().getDisplayName(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("display_name_format"))); DebugManager.log("[PlayerMetaManager] Set as: " + opm.get().getSpigotDisplayname()); @@ -89,7 +90,7 @@ public void updateDisplayName(UUID uuid) { } else { - if (ConfigManager.getInstance().getHandler("config.yml").getConfig().contains(ConfigValues.Config.DISPLAY_NAME_FORMAT)) { + if (ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().contains(ConfigValues.Config.DISPLAY_NAME_FORMAT)) { //player.setDisplayName(opm.get().getDisplayName(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("display_name_format"))); // TODO Maybe new option for "fetch_spigot_displayname"? diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PrivateMessageManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PrivateMessageManager.java index 193d86b0..e0d9d9a1 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PrivateMessageManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PrivateMessageManager.java @@ -9,6 +9,7 @@ import net.md_5.bungee.api.connection.ProxiedPlayer; import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; @@ -38,9 +39,9 @@ public void sendMessage(String message, ProxiedPlayer sender, ProxiedPlayer targ message = MultiChatUtil.reformatRGB(message); - String messageoutformat = ConfigManager.getInstance().getHandler("config.yml").getConfig().getString(ConfigValues.Config.PM_OUT_FORMAT); - String messageinformat = ConfigManager.getInstance().getHandler("config.yml").getConfig().getString(ConfigValues.Config.PM_IN_FORMAT); - String messagespyformat = ConfigManager.getInstance().getHandler("config.yml").getConfig().getString(ConfigValues.Config.PM_SPY_FORMAT); + String messageoutformat = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString(ConfigValues.Config.PM_OUT_FORMAT); + String messageinformat = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString(ConfigValues.Config.PM_IN_FORMAT); + String messagespyformat = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString(ConfigValues.Config.PM_SPY_FORMAT); String finalmessage = chatfix.replaceMsgVars(messageoutformat, message, sender, target); if (MultiChat.legacyServers.contains(sender.getServer().getInfo().getName())) { @@ -98,9 +99,9 @@ public void sendMessageConsoleTarget(String message, ProxiedPlayer sender) { message = MultiChatUtil.reformatRGB(message); - String messageoutformat = ConfigManager.getInstance().getHandler("config.yml").getConfig().getString(ConfigValues.Config.PM_OUT_FORMAT); - String messageinformat = ConfigManager.getInstance().getHandler("config.yml").getConfig().getString(ConfigValues.Config.PM_IN_FORMAT); - String messagespyformat = ConfigManager.getInstance().getHandler("config.yml").getConfig().getString(ConfigValues.Config.PM_SPY_FORMAT); + String messageoutformat = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString(ConfigValues.Config.PM_OUT_FORMAT); + String messageinformat = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString(ConfigValues.Config.PM_IN_FORMAT); + String messagespyformat = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString(ConfigValues.Config.PM_SPY_FORMAT); String finalmessage = chatfix.replaceMsgConsoleTargetVars(messageoutformat, message, (ProxiedPlayer)sender); if (MultiChat.legacyServers.contains(sender.getServer().getInfo().getName())) { @@ -151,9 +152,9 @@ public void sendMessageConsoleSender(String message, ProxiedPlayer target) { CommandSender sender = ProxyServer.getInstance().getConsole(); - String messageoutformat = ConfigManager.getInstance().getHandler("config.yml").getConfig().getString(ConfigValues.Config.PM_OUT_FORMAT); - String messageinformat = ConfigManager.getInstance().getHandler("config.yml").getConfig().getString(ConfigValues.Config.PM_IN_FORMAT); - String messagespyformat = ConfigManager.getInstance().getHandler("config.yml").getConfig().getString(ConfigValues.Config.PM_SPY_FORMAT); + String messageoutformat = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString(ConfigValues.Config.PM_OUT_FORMAT); + String messageinformat = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString(ConfigValues.Config.PM_IN_FORMAT); + String messagespyformat = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString(ConfigValues.Config.PM_SPY_FORMAT); String finalmessage = chatfix.replaceMsgConsoleSenderVars(messageoutformat, message, target); sender.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', finalmessage))); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/StaffChatManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/StaffChatManager.java index 03a3e373..72592ee5 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/StaffChatManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/StaffChatManager.java @@ -11,6 +11,7 @@ import xyz.olivermartin.multichat.bungee.events.PostStaffChatEvent; import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; @@ -29,7 +30,7 @@ public void sendModMessage(String username, String displayname, String server, S message = MultiChatUtil.reformatRGB(message); ChatManipulation chatfix = new ChatManipulation(); - String messageFormat = ConfigManager.getInstance().getHandler("config.yml").getConfig().getString(ConfigValues.Config.ModChat.FORMAT); + String messageFormat = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString(ConfigValues.Config.ModChat.FORMAT); String original = message; Optional crm; @@ -49,8 +50,8 @@ public void sendModMessage(String username, String displayname, String server, S if (!ds.getModChatPreferences().containsKey(onlineplayer.getUniqueId())) { TChatInfo chatinfo = new TChatInfo(); - chatinfo.setChatColor(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString(ConfigValues.Config.ModChat.CC_DEFAULT).toCharArray()[0]); - chatinfo.setNameColor(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString(ConfigValues.Config.ModChat.NC_DEFAULT).toCharArray()[0]); + chatinfo.setChatColor(ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString(ConfigValues.Config.ModChat.CC_DEFAULT).toCharArray()[0]); + chatinfo.setNameColor(ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString(ConfigValues.Config.ModChat.NC_DEFAULT).toCharArray()[0]); ds.getModChatPreferences().put(onlineplayer.getUniqueId(), chatinfo); @@ -87,7 +88,7 @@ public void sendAdminMessage(String username, String displayname, String server, String original = message; ChatManipulation chatfix = new ChatManipulation(); - String messageFormat = ConfigManager.getInstance().getHandler("config.yml").getConfig().getString(ConfigValues.Config.AdminChat.FORMAT); + String messageFormat = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString(ConfigValues.Config.AdminChat.FORMAT); Optional crm; @@ -106,8 +107,8 @@ public void sendAdminMessage(String username, String displayname, String server, if (!ds.getAdminChatPreferences().containsKey(onlineplayer.getUniqueId())) { TChatInfo chatinfo = new TChatInfo(); - chatinfo.setChatColor(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString(ConfigValues.Config.AdminChat.CC_DEFAULT).toCharArray()[0]); - chatinfo.setNameColor(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString(ConfigValues.Config.AdminChat.NC_DEFAULT).toCharArray()[0]); + chatinfo.setChatColor(ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString(ConfigValues.Config.AdminChat.CC_DEFAULT).toCharArray()[0]); + chatinfo.setNameColor(ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString(ConfigValues.Config.AdminChat.NC_DEFAULT).toCharArray()[0]); ds.getAdminChatPreferences().put(onlineplayer.getUniqueId(), chatinfo); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ACCCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ACCCommand.java index e4882b3f..7581e01f 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ACCCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ACCCommand.java @@ -9,6 +9,7 @@ import xyz.olivermartin.multichat.bungee.DebugManager; import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; /** @@ -21,7 +22,7 @@ public class ACCCommand extends Command { public ACCCommand() { - super("mcacc", "multichat.staff.admin", (String[]) ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("acc").toArray(new String[0])); + super("mcacc", "multichat.staff.admin", (String[]) ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("acc").toArray(new String[0])); } public void execute(CommandSender sender, String[] args) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ACCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ACCommand.java index 0af3f226..8b5efea0 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ACCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ACCommand.java @@ -8,6 +8,7 @@ import xyz.olivermartin.multichat.bungee.Events; import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.common.MultiChatUtil; +import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.bungee.StaffChatManager; /** @@ -20,7 +21,7 @@ public class ACCommand extends Command { public ACCommand() { - super("mcac", "multichat.staff.admin", (String[]) ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("ac").toArray(new String[0])); + super("mcac", "multichat.staff.admin", (String[]) ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("ac").toArray(new String[0])); } public void execute(CommandSender sender, String[] args) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/AnnouncementCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/AnnouncementCommand.java index 92001d9a..c0470ce6 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/AnnouncementCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/AnnouncementCommand.java @@ -11,6 +11,7 @@ import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.common.MultiChatUtil; +import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; /** * Announcement Command @@ -22,7 +23,7 @@ public class AnnouncementCommand extends Command { public AnnouncementCommand() { - super("mcannouncement", "multichat.announce", (String[]) ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("announcement").toArray(new String[0])); + super("mcannouncement", "multichat.announce", (String[]) ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("announcement").toArray(new String[0])); } public void execute(CommandSender sender, String[] args) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/BulletinCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/BulletinCommand.java index 2219e966..6719a35f 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/BulletinCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/BulletinCommand.java @@ -10,6 +10,7 @@ import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.common.MultiChatUtil; +import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; /** * Bulletin Command @@ -21,7 +22,7 @@ public class BulletinCommand extends Command { public BulletinCommand() { - super("mcbulletin", "multichat.bulletin", (String[]) ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("bulletin").toArray(new String[0])); + super("mcbulletin", "multichat.bulletin", (String[]) ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("bulletin").toArray(new String[0])); } @Override diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/CastCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/CastCommand.java index e49ec664..72205c4e 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/CastCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/CastCommand.java @@ -10,6 +10,7 @@ import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.common.MultiChatUtil; +import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; /** * Cast Command @@ -21,7 +22,7 @@ public class CastCommand extends Command { public CastCommand() { - super("mccast", "multichat.cast.admin", (String[]) ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("cast").toArray(new String[0])); + super("mccast", "multichat.cast.admin", (String[]) ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("cast").toArray(new String[0])); } public void showCommandUsage(CommandSender sender) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ChannelCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ChannelCommand.java index bae0b477..086fec16 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ChannelCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ChannelCommand.java @@ -11,6 +11,7 @@ import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; import xyz.olivermartin.multichat.proxy.common.channels.proxy.ProxyChannel; +import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; /** * Chat Channel Command @@ -22,7 +23,7 @@ public class ChannelCommand extends Command { public ChannelCommand() { - super("mcchannel", "multichat.chat.channel", (String[]) ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("channel").toArray(new String[0])); + super("mcchannel", "multichat.chat.channel", (String[]) ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("channel").toArray(new String[0])); } private void showHelp(CommandSender sender) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ClearChatCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ClearChatCommand.java index fb73fc17..612f6a14 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ClearChatCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ClearChatCommand.java @@ -7,6 +7,7 @@ import net.md_5.bungee.api.plugin.Command; import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.MessageManager; +import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; /** @@ -19,7 +20,7 @@ public class ClearChatCommand extends Command { public ClearChatCommand() { - super("mcclearchat", "multichat.chat.clear", (String[]) ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("clearchat").toArray(new String[0])); + super("mcclearchat", "multichat.chat.clear", (String[]) ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("clearchat").toArray(new String[0])); } private void clearChatSelf(CommandSender sender) { @@ -47,7 +48,7 @@ private void clearChatServer(CommandSender sender) { private void clearChatGlobal() { for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { - if (!ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList(ConfigValues.Config.NO_GLOBAL).contains(onlineplayer.getServer().getInfo().getName()) ) { + if (!ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getStringList(ConfigValues.Config.NO_GLOBAL).contains(onlineplayer.getServer().getInfo().getName()) ) { for (int i = 1 ; i<151 ; i++ ) { onlineplayer.sendMessage(new ComponentBuilder("").create()); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/DisplayCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/DisplayCommand.java index 5045c3aa..7b93edec 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/DisplayCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/DisplayCommand.java @@ -13,6 +13,7 @@ import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.bungee.MultiChat; import xyz.olivermartin.multichat.common.MultiChatUtil; +import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; import xyz.olivermartin.multichat.bungee.events.PostBroadcastEvent; @@ -26,7 +27,7 @@ public class DisplayCommand extends Command { public DisplayCommand() { - super("mcdisplay", "multichat.staff.display", (String[]) ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("display").toArray(new String[0])); + super("mcdisplay", "multichat.staff.display", (String[]) ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("display").toArray(new String[0])); } public void execute(CommandSender sender, String[] args) { @@ -48,7 +49,7 @@ public static void displayMessage(String message) { message = ChatControl.applyChatRules(message, "display_command", "").get(); message = MultiChatUtil.reformatRGB(message); - Configuration config = ConfigManager.getInstance().getHandler("config.yml").getConfig(); + Configuration config = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig(); for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { if (onlineplayer.getServer() != null) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/FreezeChatCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/FreezeChatCommand.java index b981f014..c6d7d54f 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/FreezeChatCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/FreezeChatCommand.java @@ -7,6 +7,7 @@ import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; /** @@ -19,7 +20,7 @@ public class FreezeChatCommand extends Command { public FreezeChatCommand() { - super("mcfreezechat", "multichat.chat.freeze", (String[]) ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("freezechat").toArray(new String[0])); + super("mcfreezechat", "multichat.chat.freeze", (String[]) ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("freezechat").toArray(new String[0])); } public void execute(CommandSender sender, String[] args) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GCCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GCCommand.java index a32a1164..b42f9a44 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GCCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GCCommand.java @@ -19,6 +19,7 @@ import xyz.olivermartin.multichat.bungee.MultiChat; import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; @@ -32,7 +33,7 @@ public class GCCommand extends Command { public GCCommand() { - super("mcgc", "multichat.group", (String[]) ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("gc").toArray(new String[0])); + super("mcgc", "multichat.group", (String[]) ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("gc").toArray(new String[0])); } public void execute(CommandSender sender, String[] args) { @@ -124,7 +125,7 @@ public static void sendMessage(String message, String playerName, TGroupChatInfo return; } - String messageFormat = ConfigManager.getInstance().getHandler("config.yml").getConfig().getString(ConfigValues.Config.GroupChat.FORMAT); + String messageFormat = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString(ConfigValues.Config.GroupChat.FORMAT); message = chatfix.replaceGroupChatVars(messageFormat, playerName, message, groupInfo.getName()); for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java index df165e88..9e3bbb76 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java @@ -13,6 +13,7 @@ import xyz.olivermartin.multichat.proxy.common.ProxyChatManager; import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; +import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; /** @@ -25,7 +26,7 @@ public class GlobalCommand extends Command { public GlobalCommand() { - super("mcglobal", "multichat.chat.mode", (String[]) ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("global").toArray(new String[0])); + super("mcglobal", "multichat.chat.mode", (String[]) ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("global").toArray(new String[0])); } public void execute(CommandSender sender, String[] args) { @@ -47,11 +48,11 @@ public void execute(CommandSender sender, String[] args) { ProxiedPlayer player = (ProxiedPlayer)sender; String message = MultiChatUtil.getMessageFromArgs(args); - if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean(ConfigValues.Config.GLOBAL) == true) { + if (ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getBoolean(ConfigValues.Config.GLOBAL) == true) { - if (!ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList(ConfigValues.Config.NO_GLOBAL).contains(player.getServer().getInfo().getName())) { + if (!ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getStringList(ConfigValues.Config.NO_GLOBAL).contains(player.getServer().getInfo().getName())) { - if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean(ConfigValues.Config.FETCH_SPIGOT_DISPLAY_NAMES) == true) { + if (ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getBoolean(ConfigValues.Config.FETCH_SPIGOT_DISPLAY_NAMES) == true) { ProxyLocalCommunicationManager.sendUpdatePlayerMetaRequestMessage(player.getName(), player.getServer().getInfo()); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GroupCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GroupCommand.java index b4e1c28b..749e4ddc 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GroupCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GroupCommand.java @@ -18,6 +18,7 @@ import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.bungee.UUIDNameManager; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; /** @@ -30,7 +31,7 @@ public class GroupCommand extends Command implements TabExecutor { public GroupCommand() { - super("mcgroup", "multichat.group", (String[]) ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("group").toArray(new String[0])); + super("mcgroup", "multichat.group", (String[]) ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("group").toArray(new String[0])); } public void execute(CommandSender sender, String[] args) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GroupListCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GroupListCommand.java index eb7ca22e..2ccf815c 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GroupListCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GroupListCommand.java @@ -5,6 +5,7 @@ import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; /** @@ -17,7 +18,7 @@ public class GroupListCommand extends Command { public GroupListCommand() { - super("mcgroups", "multichat.staff.listgroups", (String[]) ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("groups").toArray(new String[0])); + super("mcgroups", "multichat.staff.listgroups", (String[]) ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("groups").toArray(new String[0])); } public void execute(CommandSender sender, String[] args) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/HelpMeCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/HelpMeCommand.java index 1fba7372..828f1e29 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/HelpMeCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/HelpMeCommand.java @@ -11,6 +11,7 @@ import xyz.olivermartin.multichat.bungee.ConsoleManager; import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.common.MultiChatUtil; +import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; /** * 'Help Me' Command @@ -22,7 +23,7 @@ public class HelpMeCommand extends Command { public HelpMeCommand() { - super("mchelpme", "multichat.chat.helpme", (String[]) ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("helpme").toArray(new String[0])); + super("mchelpme", "multichat.chat.helpme", (String[]) ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("helpme").toArray(new String[0])); } public void execute(CommandSender sender, String[] args) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/IgnoreCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/IgnoreCommand.java index 192c598a..0dea3360 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/IgnoreCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/IgnoreCommand.java @@ -8,11 +8,12 @@ import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; +import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; public class IgnoreCommand extends Command { public IgnoreCommand() { - super("mcignore", "multichat.ignore", (String[])ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("ignore").toArray(new String[0])); + super("mcignore", "multichat.ignore", (String[])ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("ignore").toArray(new String[0])); } @Override diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java index e0627616..8adb1920 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalCommand.java @@ -13,6 +13,7 @@ import xyz.olivermartin.multichat.proxy.common.ProxyChatManager; import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; +import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; /** @@ -25,7 +26,7 @@ public class LocalCommand extends Command { public LocalCommand() { - super("mclocal", "multichat.chat.mode", (String[]) ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("local").toArray(new String[0])); + super("mclocal", "multichat.chat.mode", (String[]) ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("local").toArray(new String[0])); } public void execute(CommandSender sender, String[] args) { @@ -47,7 +48,7 @@ public void execute(CommandSender sender, String[] args) { String message = MultiChatUtil.getMessageFromArgs(args); ProxiedPlayer player = (ProxiedPlayer)sender; - if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean(ConfigValues.Config.FETCH_SPIGOT_DISPLAY_NAMES) == true) { + if (ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getBoolean(ConfigValues.Config.FETCH_SPIGOT_DISPLAY_NAMES) == true) { ProxyLocalCommunicationManager.sendUpdatePlayerMetaRequestMessage(player.getName(), player.getServer().getInfo()); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalSpyCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalSpyCommand.java index abc6a7bb..f4fcc4e2 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalSpyCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/LocalSpyCommand.java @@ -6,6 +6,7 @@ import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; /** @@ -18,7 +19,7 @@ public class LocalSpyCommand extends Command { public LocalSpyCommand() { - super("mclocalspy", "multichat.staff.spy", (String[])ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("localspy").toArray(new String[0])); + super("mclocalspy", "multichat.staff.spy", (String[])ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("localspy").toArray(new String[0])); } public void execute(CommandSender sender, String[] args) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MCCCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MCCCommand.java index 07882490..b34c2de1 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MCCCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MCCCommand.java @@ -8,6 +8,7 @@ import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; /** @@ -20,7 +21,7 @@ public class MCCCommand extends Command { public MCCCommand() { - super("mcmcc", "multichat.staff.mod", (String[]) ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("mcc").toArray(new String[0])); + super("mcmcc", "multichat.staff.mod", (String[]) ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("mcc").toArray(new String[0])); } public void execute(CommandSender sender, String[] args) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MCCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MCCommand.java index 5cd3763a..6f4264f4 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MCCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MCCommand.java @@ -7,6 +7,7 @@ import xyz.olivermartin.multichat.bungee.Events; import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.common.MultiChatUtil; +import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.bungee.StaffChatManager; /** @@ -19,7 +20,7 @@ public class MCCommand extends Command { public MCCommand() { - super("mcmc", "multichat.staff.mod", (String[]) ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("mc").toArray(new String[0])); + super("mcmc", "multichat.staff.mod", (String[]) ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("mc").toArray(new String[0])); } public void execute(CommandSender sender, String[] args) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MsgCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MsgCommand.java index 2569d333..1765f0f1 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MsgCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MsgCommand.java @@ -20,6 +20,7 @@ import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; +import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; /** @@ -32,7 +33,7 @@ public class MsgCommand extends Command implements TabExecutor { public MsgCommand() { - super("mcmsg", "multichat.chat.msg", (String[]) ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("msg").toArray(new String[0])); + super("mcmsg", "multichat.chat.msg", (String[]) ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("msg").toArray(new String[0])); } public void execute(CommandSender sender, String[] args) { @@ -73,7 +74,7 @@ public void execute(CommandSender sender, String[] args) { if (toggleresult == true) { - Configuration config = ConfigManager.getInstance().getHandler("config.yml").getConfig(); + Configuration config = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig(); if (config.contains(ConfigValues.Config.TOGGLE_PM) ? config.getBoolean(ConfigValues.Config.TOGGLE_PM) == false : false) { @@ -149,16 +150,16 @@ public void execute(CommandSender sender, String[] args) { if (permittedToMessage) { - if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean(ConfigValues.Config.FETCH_SPIGOT_DISPLAY_NAMES) == true) { + if (ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getBoolean(ConfigValues.Config.FETCH_SPIGOT_DISPLAY_NAMES) == true) { ProxyLocalCommunicationManager.sendUpdatePlayerMetaRequestMessage(sender.getName(), ((ProxiedPlayer)sender).getServer().getInfo()); ProxyLocalCommunicationManager.sendUpdatePlayerMetaRequestMessage(target.getName(), target.getServer().getInfo()); } - if (!ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList(ConfigValues.Config.NO_PM).contains(((ProxiedPlayer)sender).getServer().getInfo().getName())) { + if (!ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getStringList(ConfigValues.Config.NO_PM).contains(((ProxiedPlayer)sender).getServer().getInfo().getName())) { - if (!ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList(ConfigValues.Config.NO_PM).contains(target.getServer().getInfo().getName())) { + if (!ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getStringList(ConfigValues.Config.NO_PM).contains(target.getServer().getInfo().getName())) { if (ChatControl.ignores(((ProxiedPlayer)sender).getUniqueId(), target.getUniqueId(), "private_messages")) { ChatControl.sendIgnoreNotifications(target, sender, "private_messages"); @@ -184,13 +185,13 @@ public void execute(CommandSender sender, String[] args) { // New console target stuff here! - if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean(ConfigValues.Config.FETCH_SPIGOT_DISPLAY_NAMES) == true) { + if (ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getBoolean(ConfigValues.Config.FETCH_SPIGOT_DISPLAY_NAMES) == true) { ProxyLocalCommunicationManager.sendUpdatePlayerMetaRequestMessage(sender.getName(), ((ProxiedPlayer)sender).getServer().getInfo()); } - if (!ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList(ConfigValues.Config.NO_PM).contains(((ProxiedPlayer)sender).getServer().getInfo().getName())) { + if (!ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getStringList(ConfigValues.Config.NO_PM).contains(((ProxiedPlayer)sender).getServer().getInfo().getName())) { PrivateMessageManager.getInstance().sendMessageConsoleTarget(message, (ProxiedPlayer)sender); @@ -214,13 +215,13 @@ public void execute(CommandSender sender, String[] args) { ProxiedPlayer target = ProxyServer.getInstance().getPlayer(args[0]); - if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean(ConfigValues.Config.FETCH_SPIGOT_DISPLAY_NAMES) == true) { + if (ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getBoolean(ConfigValues.Config.FETCH_SPIGOT_DISPLAY_NAMES) == true) { ProxyLocalCommunicationManager.sendUpdatePlayerMetaRequestMessage(target.getName(), target.getServer().getInfo()); } - if (!ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList(ConfigValues.Config.NO_PM).contains(target.getServer().getInfo().getName())) { + if (!ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getStringList(ConfigValues.Config.NO_PM).contains(target.getServer().getInfo().getName())) { PrivateMessageManager.getInstance().sendMessageConsoleSender(message, target); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MultiChatBypassCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MultiChatBypassCommand.java index a4819d2a..629c05f9 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MultiChatBypassCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MultiChatBypassCommand.java @@ -6,11 +6,12 @@ import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.Events; import xyz.olivermartin.multichat.bungee.MessageManager; +import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; public class MultiChatBypassCommand extends Command { public MultiChatBypassCommand() { - super("mcbypass", "multichat.bypass", (String[]) ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("bypass").toArray(new String[0])); + super("mcbypass", "multichat.bypass", (String[]) ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("bypass").toArray(new String[0])); } @Override 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 f7a66fd1..63009944 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 @@ -17,6 +17,7 @@ import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.channels.local.LocalChannel; import xyz.olivermartin.multichat.proxy.common.channels.proxy.GlobalStaticProxyChannel; +import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.proxy.common.contexts.GlobalContext; /** @@ -29,7 +30,7 @@ public class MultiChatCommand extends Command { public MultiChatCommand() { - super("multichat", "multichat.admin", (String[]) ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("multichat").toArray(new String[0])); + super("multichat", "multichat.admin", (String[]) ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("multichat").toArray(new String[0])); } private void displayHelp(CommandSender sender, int page) { @@ -88,63 +89,63 @@ public void execute(CommandSender sender, String[] args) { MessageManager.sendMessage(sender, "command_multichat_reload_prepare"); // Unregister commands - ((MultiChat)MultiChatProxy.getInstance().getPlugin()).unregisterCommands(ConfigManager.getInstance().getHandler("config.yml").getConfig(), ConfigManager.getInstance().getHandler("chatcontrol.yml").getConfig()); + ((MultiChat)MultiChatProxy.getInstance().getPlugin()).unregisterCommands(ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig(), ConfigManager.getInstance().getHandler(ConfigFile.CHAT_CONTROL).getConfig()); - ConfigManager.getInstance().getHandler("config.yml").startupConfig(); - MultiChat.configversion = ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("version"); + ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).startupConfig(); + MultiChat.configversion = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString("version"); - ConfigManager.getInstance().getHandler("joinmessages.yml").startupConfig(); - ConfigManager.getInstance().getHandler("messages.yml").startupConfig(); - ConfigManager.getInstance().getHandler("chatcontrol.yml").startupConfig(); - ConfigManager.getInstance().getHandler("aliases.yml").startupConfig(); + ConfigManager.getInstance().getHandler(ConfigFile.JOIN_MESSAGES).startupConfig(); + ConfigManager.getInstance().getHandler(ConfigFile.MESSAGES).startupConfig(); + ConfigManager.getInstance().getHandler(ConfigFile.CHAT_CONTROL).startupConfig(); + ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).startupConfig(); - ConfigManager.getInstance().getHandler("messages_fr.yml").startupConfig(); - ConfigManager.getInstance().getHandler("joinmessages_fr.yml").startupConfig(); - ConfigManager.getInstance().getHandler("config_fr.yml").startupConfig(); - ConfigManager.getInstance().getHandler("chatcontrol_fr.yml").startupConfig(); - ConfigManager.getInstance().getHandler("aliases_fr.yml").startupConfig(); + ConfigManager.getInstance().getRawHandler("messages_fr.yml").startupConfig(); + ConfigManager.getInstance().getRawHandler("joinmessages_fr.yml").startupConfig(); + ConfigManager.getInstance().getRawHandler("config_fr.yml").startupConfig(); + ConfigManager.getInstance().getRawHandler("chatcontrol_fr.yml").startupConfig(); + ConfigManager.getInstance().getRawHandler("aliases_fr.yml").startupConfig(); // Reload, and re-register commands CommandManager.reload(); - ((MultiChat)MultiChatProxy.getInstance().getPlugin()).registerCommands(ConfigManager.getInstance().getHandler("config.yml").getConfig(), ConfigManager.getInstance().getHandler("chatcontrol.yml").getConfig()); + ((MultiChat)MultiChatProxy.getInstance().getPlugin()).registerCommands(ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig(), ConfigManager.getInstance().getHandler(ConfigFile.CHAT_CONTROL).getConfig()); 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"); - if (ConfigManager.getInstance().getHandler("chatcontrol.yml").getConfig().contains("link_regex")) { - ChatControl.linkRegex = ConfigManager.getInstance().getHandler("chatcontrol.yml").getConfig().getString("link_regex"); + if (ConfigManager.getInstance().getHandler(ConfigFile.CHAT_CONTROL).getConfig().contains("link_control")) { + ChatControl.controlLinks = ConfigManager.getInstance().getHandler(ConfigFile.CHAT_CONTROL).getConfig().getBoolean("link_control"); + ChatControl.linkMessage = ConfigManager.getInstance().getHandler(ConfigFile.CHAT_CONTROL).getConfig().getString("link_removal_message"); + if (ConfigManager.getInstance().getHandler(ConfigFile.CHAT_CONTROL).getConfig().contains("link_regex")) { + ChatControl.linkRegex = ConfigManager.getInstance().getHandler(ConfigFile.CHAT_CONTROL).getConfig().getString("link_regex"); } } - if (ConfigManager.getInstance().getHandler("config.yml").getConfig().contains("privacy_settings")) { - MultiChat.logPMs = ConfigManager.getInstance().getHandler("config.yml").getConfig().getSection("privacy_settings").getBoolean("log_pms"); - MultiChat.logStaffChat = ConfigManager.getInstance().getHandler("config.yml").getConfig().getSection("privacy_settings").getBoolean("log_staffchat"); - MultiChat.logGroupChat = ConfigManager.getInstance().getHandler("config.yml").getConfig().getSection("privacy_settings").getBoolean("log_groupchat"); + if (ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().contains("privacy_settings")) { + MultiChat.logPMs = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getSection("privacy_settings").getBoolean("log_pms"); + MultiChat.logStaffChat = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getSection("privacy_settings").getBoolean("log_staffchat"); + MultiChat.logGroupChat = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getSection("privacy_settings").getBoolean("log_groupchat"); } // Legacy servers for RGB approximation - if (ConfigManager.getInstance().getHandler("config.yml").getConfig().contains("legacy_servers")) { - MultiChat.legacyServers = ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList("legacy_servers"); + if (ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().contains("legacy_servers")) { + MultiChat.legacyServers = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getStringList("legacy_servers"); } // Set default channel - String defaultChannel = ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("default_channel"); - boolean forceChannelOnJoin = ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean("force_channel_on_join"); + String defaultChannel = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString("default_channel"); + boolean forceChannelOnJoin = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getBoolean("force_channel_on_join"); // Set up global chat //GlobalAChannel channel = LegacyChannel.getGlobalChannel(); - //channel.setFormat(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("globalformat")); + //channel.setFormat(ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString("globalformat")); List noGlobalServers = new ArrayList(); //channel.clearServers(); // Add all appropriate servers to this hardcoded global chat stream - for (String server : ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList("no_global")) { + for (String server : ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getStringList("no_global")) { //channel.addServer(server); noGlobalServers.add(server); } @@ -155,18 +156,18 @@ public void execute(CommandSender sender, String[] args) { GlobalContext globalContext = new GlobalContext(defaultChannel, forceChannelOnJoin, true, noGlobalServers); MultiChatProxy.getInstance().getContextManager().setGlobalContext(globalContext); - MultiChatProxy.getInstance().getChannelManager().setGlobalChannel(new GlobalStaticProxyChannel("Global Channel", ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("globalformat"), ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("global"), MultiChatProxy.getInstance().getChannelManager())); - MultiChatProxy.getInstance().getChannelManager().setLocalChannel(new LocalChannel("Local Channel", ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("globalformat"), ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("local"), MultiChatProxy.getInstance().getChannelManager())); + MultiChatProxy.getInstance().getChannelManager().setGlobalChannel(new GlobalStaticProxyChannel("Global Channel", ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString("globalformat"), ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("global"), MultiChatProxy.getInstance().getChannelManager())); + MultiChatProxy.getInstance().getChannelManager().setLocalChannel(new LocalChannel("Local Channel", ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString("globalformat"), ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("local"), MultiChatProxy.getInstance().getChannelManager())); /// if (ProxyServer.getInstance().getPluginManager().getPlugin("PremiumVanish") != null) { MultiChat.premiumVanish = true; - if (ConfigManager.getInstance().getHandler("config.yml").getConfig().contains("premium_vanish")) { - MultiChat.hideVanishedStaffInMsg = ConfigManager.getInstance().getHandler("config.yml").getConfig().getSection("premium_vanish").getBoolean("prevent_message"); - MultiChat.hideVanishedStaffInStaffList = ConfigManager.getInstance().getHandler("config.yml").getConfig().getSection("premium_vanish").getBoolean("prevent_staff_list"); - MultiChat.hideVanishedStaffInJoin = ConfigManager.getInstance().getHandler("config.yml").getConfig().getSection("premium_vanish").getBoolean("silence_join"); + if (ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().contains("premium_vanish")) { + MultiChat.hideVanishedStaffInMsg = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getSection("premium_vanish").getBoolean("prevent_message"); + MultiChat.hideVanishedStaffInStaffList = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getSection("premium_vanish").getBoolean("prevent_staff_list"); + MultiChat.hideVanishedStaffInJoin = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getSection("premium_vanish").getBoolean("silence_join"); } } else { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MultiChatExecuteCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MultiChatExecuteCommand.java index 6e975f13..f06388b7 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MultiChatExecuteCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MultiChatExecuteCommand.java @@ -10,6 +10,7 @@ import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; +import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; /** * Execute Command @@ -21,7 +22,7 @@ public class MultiChatExecuteCommand extends Command { public MultiChatExecuteCommand() { - super("mcexecute", "multichat.execute", (String[]) ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("execute").toArray(new String[0])); + super("mcexecute", "multichat.execute", (String[]) ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("execute").toArray(new String[0])); } public void execute(CommandSender sender, String[] args) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MuteCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MuteCommand.java index 3c10f189..dadb2353 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MuteCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MuteCommand.java @@ -7,17 +7,18 @@ import xyz.olivermartin.multichat.bungee.ChatControl; import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.MessageManager; +import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; public class MuteCommand extends Command { public MuteCommand() { - super("mcmute", "multichat.mute", (String[])ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("mute").toArray(new String[0])); + super("mcmute", "multichat.mute", (String[])ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("mute").toArray(new String[0])); } @Override public void execute(CommandSender sender, String[] args) { - if (!ConfigManager.getInstance().getHandler("chatcontrol.yml").getConfig().getBoolean("mute")) return; + if (!ConfigManager.getInstance().getHandler(ConfigFile.CHAT_CONTROL).getConfig().getBoolean("mute")) return; if (args.length != 1) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ReplyCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ReplyCommand.java index 8aebe14b..b875c16c 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ReplyCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ReplyCommand.java @@ -10,9 +10,10 @@ import xyz.olivermartin.multichat.bungee.ChatControl; import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.MessageManager; -import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.bungee.PrivateMessageManager; +import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; @@ -26,7 +27,7 @@ public class ReplyCommand extends Command { public ReplyCommand() { - super("mcr", "multichat.chat.msg", (String[])ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("r").toArray(new String[0])); + super("mcr", "multichat.chat.msg", (String[])ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("r").toArray(new String[0])); } public void execute(CommandSender sender, String[] args) { @@ -67,9 +68,9 @@ public void execute(CommandSender sender, String[] args) { ProxiedPlayer target = ProxyServer.getInstance().getPlayer((UUID)ds.getLastMsg().get(((ProxiedPlayer)sender).getUniqueId())); - if (!ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList(ConfigValues.Config.NO_PM).contains(((ProxiedPlayer)sender).getServer().getInfo().getName())) { + if (!ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getStringList(ConfigValues.Config.NO_PM).contains(((ProxiedPlayer)sender).getServer().getInfo().getName())) { - if (!ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList(ConfigValues.Config.NO_PM).contains(target.getServer().getInfo().getName())) { + if (!ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getStringList(ConfigValues.Config.NO_PM).contains(target.getServer().getInfo().getName())) { if (ChatControl.ignores(((ProxiedPlayer)sender).getUniqueId(), target.getUniqueId(), "private_messages")) { ChatControl.sendIgnoreNotifications(target, sender, "private_messages"); @@ -90,7 +91,7 @@ public void execute(CommandSender sender, String[] args) { // Console target stuff - if (!ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList(ConfigValues.Config.NO_PM).contains(((ProxiedPlayer)sender).getServer().getInfo().getName())) { + if (!ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getStringList(ConfigValues.Config.NO_PM).contains(((ProxiedPlayer)sender).getServer().getInfo().getName())) { PrivateMessageManager.getInstance().sendMessageConsoleTarget(message, (ProxiedPlayer)sender); @@ -120,7 +121,7 @@ public void execute(CommandSender sender, String[] args) { ProxiedPlayer target = ProxyServer.getInstance().getPlayer((UUID)ds.getLastMsg().get((new UUID(0L,0L)))); - if (!ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList(ConfigValues.Config.NO_PM).contains(target.getServer().getInfo().getName())) { + if (!ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getStringList(ConfigValues.Config.NO_PM).contains(target.getServer().getInfo().getName())) { PrivateMessageManager.getInstance().sendMessageConsoleSender(message, target); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/SocialSpyCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/SocialSpyCommand.java index e0d1111e..5e6599c6 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/SocialSpyCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/SocialSpyCommand.java @@ -6,6 +6,7 @@ import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; /** @@ -18,7 +19,7 @@ public class SocialSpyCommand extends Command { public SocialSpyCommand() { - super("mcsocialspy", "multichat.staff.spy", (String[])ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("socialspy").toArray(new String[0])); + super("mcsocialspy", "multichat.staff.spy", (String[])ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("socialspy").toArray(new String[0])); } public void execute(CommandSender sender, String[] args) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/StaffListCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/StaffListCommand.java index e1387505..ce884601 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/StaffListCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/StaffListCommand.java @@ -12,6 +12,7 @@ import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.bungee.MultiChat; import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; +import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; /** @@ -24,7 +25,7 @@ public class StaffListCommand extends Command { public StaffListCommand() { - super("mcstaff", "multichat.staff.list", (String[])ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("staff").toArray(new String[0])); + super("mcstaff", "multichat.staff.list", (String[])ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("staff").toArray(new String[0])); } public void execute(CommandSender sender, String[] args) { @@ -73,7 +74,7 @@ public void execute(CommandSender sender, String[] args) { if (onlineplayer2.getServer().getInfo().getName().equals(server)) { - if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean(ConfigValues.Config.FETCH_SPIGOT_DISPLAY_NAMES) == true) { + if (ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getBoolean(ConfigValues.Config.FETCH_SPIGOT_DISPLAY_NAMES) == true) { ProxyLocalCommunicationManager.sendUpdatePlayerMetaRequestMessage(onlineplayer2.getName(), onlineplayer2.getServer().getInfo()); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/UseCastCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/UseCastCommand.java index 3a1c4d16..c2a9e412 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/UseCastCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/UseCastCommand.java @@ -9,6 +9,7 @@ import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; /** * Use Cast Command @@ -20,7 +21,7 @@ public class UseCastCommand extends Command { public UseCastCommand() { - super("mcusecast", "multichat.cast.admin", (String[])ConfigManager.getInstance().getHandler("aliases.yml").getConfig().getStringList("usecast").toArray(new String[0])); + super("mcusecast", "multichat.cast.admin", (String[])ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("usecast").toArray(new String[0])); } public void displayUsage(CommandSender sender) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyChatManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyChatManager.java index 841a94ad..b874e977 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyChatManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyChatManager.java @@ -11,6 +11,7 @@ import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.bungee.PlayerMeta; import xyz.olivermartin.multichat.bungee.PlayerMetaManager; +import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; public class ProxyChatManager { @@ -147,7 +148,7 @@ public Optional handleChatMessage(ProxiedPlayer player, String message) public String getLocalSpyMessage(ProxiedPlayer player, String format, String message) { - String spyFormat = ConfigManager.getInstance().getHandler("config.yml").getConfig() + String spyFormat = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig() .getString(ConfigValues.Config.LOCAL_SPY_FORMAT, "&8[&7SPY&8] %FORMAT%"); spyFormat = spyFormat.replace("%FORMAT%", format); @@ -174,7 +175,7 @@ public String getLocalSpyMessage(ProxiedPlayer player, String format, String mes public String getLocalSpyMessage(CommandSender sender, String message) { - String spyFormat = ConfigManager.getInstance().getHandler("config.yml").getConfig() + String spyFormat = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig() .getString(ConfigValues.Config.LOCAL_SPY_FORMAT, "&8[&7SPY&8] %FORMAT%"); spyFormat = spyFormat.replace("%FORMAT%", ""); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyLocalCommunicationManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyLocalCommunicationManager.java index c3a4f916..ea99d36b 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyLocalCommunicationManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyLocalCommunicationManager.java @@ -11,6 +11,7 @@ import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.DebugManager; import xyz.olivermartin.multichat.common.communication.CommChannels; +import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; /** * Proxy -> Local communication manager @@ -41,8 +42,8 @@ public static void sendGlobalServerData(ServerInfo server) { ObjectOutputStream out = new ObjectOutputStream(stream); - boolean globalChatServer = ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean("global") == true - && !ConfigManager.getInstance().getHandler("config.yml").getConfig().getStringList("no_global").contains(server.getName()); + boolean globalChatServer = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getBoolean("global") == true + && !ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getStringList("no_global").contains(server.getName()); String globalChatFormat = MultiChatProxy.getInstance().getChannelManager().getGlobalChannel().getInfo().getFormat(); out.writeUTF("global"); @@ -74,7 +75,7 @@ public static void sendDisplayNameServerData(ServerInfo server) { * - legacy = legacy server info */ - Configuration configYML = ConfigManager.getInstance().getHandler("config.yml").getConfig(); + Configuration configYML = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig(); ByteArrayOutputStream stream = new ByteArrayOutputStream(); try { @@ -155,7 +156,7 @@ public static void sendLegacyServerData(ServerInfo server) { ObjectOutputStream out = new ObjectOutputStream(stream); boolean isLegacy = - ConfigManager.getInstance().getHandler("config.yml").getConfig() + ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig() .getStringList("legacy_servers") .contains(server.getName()); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/config/ConfigFile.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/config/ConfigFile.java new file mode 100644 index 00000000..297223e5 --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/config/ConfigFile.java @@ -0,0 +1,25 @@ +package xyz.olivermartin.multichat.proxy.common.config; + +public enum ConfigFile { + + CONFIG ("config.yml"), + JOIN_MESSAGES ("joinmessages.yml"), + CHAT_CONTROL ("chatcontrol.yml"), + MESSAGES ("messages.yml"), + ALIASES ("aliases.yml"); + + private String fileName; + + private ConfigFile(String fileName) { + this.fileName = fileName; + } + + /** + * Get the raw file name of this config file + * @return the file name + */ + public String getFileName() { + return this.fileName; + } + +} diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLoginListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLoginListener.java index 201ef394..622877ed 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLoginListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLoginListener.java @@ -22,6 +22,7 @@ import xyz.olivermartin.multichat.bungee.UUIDNameManager; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; +import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; public class ProxyLoginListener implements Listener { @@ -41,8 +42,8 @@ public void onLogin(PostLoginEvent event) { if (!ds.getModChatPreferences().containsKey(uuid)) { TChatInfo chatinfo = new TChatInfo(); - chatinfo.setChatColor(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("modchat.ccdefault").toCharArray()[0]); - chatinfo.setNameColor(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("modchat.ncdefault").toCharArray()[0]); + chatinfo.setChatColor(ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString("modchat.ccdefault").toCharArray()[0]); + chatinfo.setNameColor(ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString("modchat.ncdefault").toCharArray()[0]); ds.getModChatPreferences().put(uuid, chatinfo); } @@ -54,8 +55,8 @@ public void onLogin(PostLoginEvent event) { if (!ds.getAdminChatPreferences().containsKey(uuid)) { TChatInfo chatinfo = new TChatInfo(); - chatinfo.setChatColor(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("adminchat.ccdefault").toCharArray()[0]); - chatinfo.setNameColor(ConfigManager.getInstance().getHandler("config.yml").getConfig().getString("adminchat.ncdefault").toCharArray()[0]); + chatinfo.setChatColor(ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString("adminchat.ccdefault").toCharArray()[0]); + chatinfo.setNameColor(ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString("adminchat.ncdefault").toCharArray()[0]); ds.getAdminChatPreferences().put(uuid, chatinfo); } @@ -121,7 +122,7 @@ public void onLogin(PostLoginEvent event) { ConsoleManager.log("Refreshed UUID-Name lookup: " + uuid.toString()); // If MultiChat is handling join messages... - if ( ConfigManager.getInstance().getHandler("joinmessages.yml").getConfig().getBoolean("showjoin") == true ) { + if ( ConfigManager.getInstance().getHandler(ConfigFile.JOIN_MESSAGES).getConfig().getBoolean("showjoin") == true ) { // PremiumVanish support, return as early as possible to avoid loading unnecessary resources if (MultiChat.premiumVanish && MultiChat.hideVanishedStaffInJoin && BungeeVanishAPI.isInvisible(player)) { @@ -129,10 +130,10 @@ public void onLogin(PostLoginEvent event) { } // Load join message formats from config - String joinformat = ConfigManager.getInstance().getHandler("joinmessages.yml").getConfig().getString("serverjoin"); - String silentformat = ConfigManager.getInstance().getHandler("joinmessages.yml").getConfig().getString("silentjoin"); - String welcomeMessage = ConfigManager.getInstance().getHandler("joinmessages.yml").getConfig().getString("welcome_message"); - String privateWelcomeMessage = ConfigManager.getInstance().getHandler("joinmessages.yml").getConfig().getString("private_welcome_message"); + String joinformat = ConfigManager.getInstance().getHandler(ConfigFile.JOIN_MESSAGES).getConfig().getString("serverjoin"); + String silentformat = ConfigManager.getInstance().getHandler(ConfigFile.JOIN_MESSAGES).getConfig().getString("silentjoin"); + String welcomeMessage = ConfigManager.getInstance().getHandler(ConfigFile.JOIN_MESSAGES).getConfig().getString("welcome_message"); + String privateWelcomeMessage = ConfigManager.getInstance().getHandler(ConfigFile.JOIN_MESSAGES).getConfig().getString("private_welcome_message"); // Replace the placeholders ChatManipulation chatman = new ChatManipulation(); // TODO Legacy @@ -142,8 +143,8 @@ public void onLogin(PostLoginEvent event) { privateWelcomeMessage = chatman.replaceJoinMsgVars(privateWelcomeMessage, player.getName()); // Check which messages should be broadcast - boolean broadcastWelcome = ConfigManager.getInstance().getHandler("joinmessages.yml").getConfig().getBoolean("welcome", true); - boolean privateWelcome = ConfigManager.getInstance().getHandler("joinmessages.yml").getConfig().getBoolean("private_welcome", false); + boolean broadcastWelcome = ConfigManager.getInstance().getHandler(ConfigFile.JOIN_MESSAGES).getConfig().getBoolean("welcome", true); + boolean privateWelcome = ConfigManager.getInstance().getHandler(ConfigFile.JOIN_MESSAGES).getConfig().getBoolean("private_welcome", false); boolean broadcastJoin = !player.hasPermission("multichat.staff.silentjoin"); // Broadcast diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLogoutListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLogoutListener.java index 0212f556..25964aad 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLogoutListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLogoutListener.java @@ -18,6 +18,7 @@ import xyz.olivermartin.multichat.bungee.Events; import xyz.olivermartin.multichat.bungee.PlayerMetaManager; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; public class ProxyLogoutListener implements Listener { @@ -51,7 +52,7 @@ public void onLogout(PlayerDisconnectEvent event) { Events.GCToggle.remove(uuid); } - Configuration config = ConfigManager.getInstance().getHandler("chatcontrol.yml").getConfig(); + Configuration config = ConfigManager.getInstance().getHandler(ConfigFile.CHAT_CONTROL).getConfig(); // If using sessional ignore, then wipe ignores stored if (config.getBoolean("session_ignore")) { @@ -72,11 +73,11 @@ public void onLogout(PlayerDisconnectEvent event) { ConsoleManager.log("Un-Registered player " + player.getName()); // If we are handling the quit messages, then handle them... - if ( ConfigManager.getInstance().getHandler("joinmessages.yml").getConfig().getBoolean("showquit") == true ) { + if ( ConfigManager.getInstance().getHandler(ConfigFile.JOIN_MESSAGES).getConfig().getBoolean("showquit") == true ) { // Get the formats - String joinformat = ConfigManager.getInstance().getHandler("joinmessages.yml").getConfig().getString("networkquit"); - String silentformat = ConfigManager.getInstance().getHandler("joinmessages.yml").getConfig().getString("silentquit"); + String joinformat = ConfigManager.getInstance().getHandler(ConfigFile.JOIN_MESSAGES).getConfig().getString("networkquit"); + String silentformat = ConfigManager.getInstance().getHandler(ConfigFile.JOIN_MESSAGES).getConfig().getString("silentquit"); // Replace the placeholders ChatManipulation chatman = new ChatManipulation(); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyServerSwitchListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyServerSwitchListener.java index d5cdaa3d..2283f305 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyServerSwitchListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyServerSwitchListener.java @@ -12,6 +12,7 @@ import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; +import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; public class ProxyServerSwitchListener implements Listener { @@ -47,7 +48,7 @@ public void run() { ProxyLocalCommunicationManager.sendPlayerDataMessage(event.getPlayer().getName(), MultiChatProxy.getInstance().getChannelManager().getChannel(event.getPlayer()), channelFormat, event.getPlayer().getServer().getInfo(), (event.getPlayer().hasPermission("multichat.chat.colour")||event.getPlayer().hasPermission("multichat.chat.color")||event.getPlayer().hasPermission("multichat.chat.colour.simple")||event.getPlayer().hasPermission("multichat.chat.color.simple")), (event.getPlayer().hasPermission("multichat.chat.colour")||event.getPlayer().hasPermission("multichat.chat.color")||event.getPlayer().hasPermission("multichat.chat.colour.rgb")||event.getPlayer().hasPermission("multichat.chat.color.rgb"))); ProxyLocalCommunicationManager.sendLegacyServerData(event.getPlayer().getServer().getInfo()); - if (ConfigManager.getInstance().getHandler("config.yml").getConfig().getBoolean(ConfigValues.Config.FETCH_SPIGOT_DISPLAY_NAMES) == true) { + if (ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getBoolean(ConfigValues.Config.FETCH_SPIGOT_DISPLAY_NAMES) == true) { ProxiedPlayer player = event.getPlayer(); if (player.getServer() != null) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyIgnoreFileStore.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyIgnoreFileStore.java index dbc7507d..7b937972 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyIgnoreFileStore.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/files/ProxyIgnoreFileStore.java @@ -14,6 +14,7 @@ import net.md_5.bungee.config.Configuration; import xyz.olivermartin.multichat.bungee.ChatControl; import xyz.olivermartin.multichat.bungee.ConfigManager; +import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.proxy.common.storage.ProxyGenericFileStore; public class ProxyIgnoreFileStore extends ProxyGenericFileStore { @@ -26,7 +27,7 @@ public ProxyIgnoreFileStore(String fileName, File fileDirectory) { @Override protected boolean loadFile(File file) { - Configuration config = ConfigManager.getInstance().getHandler("chatcontrol.yml").getConfig(); + Configuration config = ConfigManager.getInstance().getHandler(ConfigFile.CHAT_CONTROL).getConfig(); if (config.getBoolean("session_ignore")) { ChatControl.setIgnoreMap(new HashMap>()); @@ -56,7 +57,7 @@ protected boolean loadFile(File file) { @Override protected boolean saveFile(File file) { - Configuration config = ConfigManager.getInstance().getHandler("chatcontrol.yml").getConfig(); + Configuration config = ConfigManager.getInstance().getHandler(ConfigFile.CHAT_CONTROL).getConfig(); if (config.getBoolean("session_ignore")) return true; From ded0cedb05d31b118bee68e45ea60dac566bf0ce Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Wed, 29 Jul 2020 18:44:31 +0100 Subject: [PATCH 069/188] Add basic support for RGB colours in network join / quit messages --- .../common/listeners/ProxyLoginListener.java | 33 ++++++++++++++----- .../common/listeners/ProxyLogoutListener.java | 20 ++++++++--- 2 files changed, 40 insertions(+), 13 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLoginListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLoginListener.java index 622877ed..25bedfab 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLoginListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLoginListener.java @@ -20,6 +20,7 @@ import xyz.olivermartin.multichat.bungee.MultiChat; import xyz.olivermartin.multichat.bungee.PlayerMetaManager; import xyz.olivermartin.multichat.bungee.UUIDNameManager; +import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; @@ -137,10 +138,10 @@ public void onLogin(PostLoginEvent event) { // Replace the placeholders ChatManipulation chatman = new ChatManipulation(); // TODO Legacy - joinformat = chatman.replaceJoinMsgVars(joinformat, player.getName()); - silentformat = chatman.replaceJoinMsgVars(silentformat, player.getName()); - welcomeMessage = chatman.replaceJoinMsgVars(welcomeMessage, player.getName()); - privateWelcomeMessage = chatman.replaceJoinMsgVars(privateWelcomeMessage, player.getName()); + joinformat = MultiChatUtil.reformatRGB(chatman.replaceJoinMsgVars(joinformat, player.getName())); + silentformat = MultiChatUtil.reformatRGB(chatman.replaceJoinMsgVars(silentformat, player.getName())); + welcomeMessage = MultiChatUtil.reformatRGB(chatman.replaceJoinMsgVars(welcomeMessage, player.getName())); + privateWelcomeMessage = MultiChatUtil.reformatRGB(chatman.replaceJoinMsgVars(privateWelcomeMessage, player.getName())); // Check which messages should be broadcast boolean broadcastWelcome = ConfigManager.getInstance().getHandler(ConfigFile.JOIN_MESSAGES).getConfig().getBoolean("welcome", true); @@ -153,21 +154,37 @@ public void onLogin(PostLoginEvent event) { if (broadcastJoin) { if (firstJoin && broadcastWelcome) { - onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', welcomeMessage))); + if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { + onlineplayer.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(ChatColor.translateAlternateColorCodes('&', welcomeMessage)))); + } else { + onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', welcomeMessage))); + } } if (firstJoin && privateWelcome && onlineplayer.getName().equals(player.getName())) { - onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', privateWelcomeMessage))); + if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { + onlineplayer.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(ChatColor.translateAlternateColorCodes('&', privateWelcomeMessage)))); + } else { + onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', privateWelcomeMessage))); + } } - onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', joinformat))); + if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { + onlineplayer.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(ChatColor.translateAlternateColorCodes('&', joinformat)))); + } else { + onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', joinformat))); + } } else { ds.getHiddenStaff().add(player.getUniqueId()); if (onlineplayer.hasPermission("multichat.staff.silentjoin") ) { - onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', silentformat))); + if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { + onlineplayer.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(ChatColor.translateAlternateColorCodes('&', silentformat)))); + } else { + onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', silentformat))); + } } } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLogoutListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLogoutListener.java index 25964aad..9435e63b 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLogoutListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLogoutListener.java @@ -4,7 +4,7 @@ import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.ProxyServer; -import net.md_5.bungee.api.chat.ComponentBuilder; +import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.event.PlayerDisconnectEvent; import net.md_5.bungee.api.plugin.Listener; @@ -16,7 +16,9 @@ import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.ConsoleManager; import xyz.olivermartin.multichat.bungee.Events; +import xyz.olivermartin.multichat.bungee.MultiChat; import xyz.olivermartin.multichat.bungee.PlayerMetaManager; +import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; @@ -81,20 +83,28 @@ public void onLogout(PlayerDisconnectEvent event) { // Replace the placeholders ChatManipulation chatman = new ChatManipulation(); - joinformat = chatman.replaceJoinMsgVars(joinformat, player.getName()); - silentformat = chatman.replaceJoinMsgVars(silentformat, player.getName()); + joinformat = MultiChatUtil.reformatRGB(chatman.replaceJoinMsgVars(joinformat, player.getName())); + silentformat = MultiChatUtil.reformatRGB(chatman.replaceJoinMsgVars(silentformat, player.getName())); // Broadcast for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { if (!player.hasPermission("multichat.staff.silentjoin")) { - onlineplayer.sendMessage(new ComponentBuilder(ChatColor.translateAlternateColorCodes('&', joinformat)).create()); + if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { + onlineplayer.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(ChatColor.translateAlternateColorCodes('&', joinformat)))); + } else { + onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', joinformat))); + } } else { if (onlineplayer.hasPermission("multichat.staff.silentjoin") ) { - onlineplayer.sendMessage(new ComponentBuilder(ChatColor.translateAlternateColorCodes('&', silentformat)).create()); + if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { + onlineplayer.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(ChatColor.translateAlternateColorCodes('&', silentformat)))); + } else { + onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', silentformat))); + } } } From fbad6c46730533ebfefeac7a96d7637e79e34b62 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Wed, 29 Jul 2020 19:01:55 +0100 Subject: [PATCH 070/188] Moved join messages to ServerConnectedEvent to prevent null pointer --- .../multichat/bungee/MultiChat.java | 2 + .../common/listeners/ProxyLoginListener.java | 127 -------------- .../ProxyServerConnectedListener.java | 156 ++++++++++++++++++ 3 files changed, 158 insertions(+), 127 deletions(-) create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyServerConnectedListener.java 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 51b3b90b..761ebf0c 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java @@ -27,6 +27,7 @@ import xyz.olivermartin.multichat.proxy.common.contexts.GlobalContext; import xyz.olivermartin.multichat.proxy.common.listeners.ProxyLoginListener; import xyz.olivermartin.multichat.proxy.common.listeners.ProxyLogoutListener; +import xyz.olivermartin.multichat.proxy.common.listeners.ProxyServerConnectedListener; import xyz.olivermartin.multichat.proxy.common.listeners.ProxyServerSwitchListener; import xyz.olivermartin.multichat.proxy.common.listeners.communication.ProxyPlayerActionListener; import xyz.olivermartin.multichat.proxy.common.listeners.communication.ProxyPlayerChatListener; @@ -187,6 +188,7 @@ public void onEnable() { // New listeners (1.10+) getProxy().getPluginManager().registerListener(this, new ProxyLoginListener()); + getProxy().getPluginManager().registerListener(this, new ProxyServerConnectedListener()); getProxy().getPluginManager().registerListener(this, new ProxyLogoutListener()); getProxy().getPluginManager().registerListener(this, new ProxyServerSwitchListener()); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLoginListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLoginListener.java index 25bedfab..9b0b7e86 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLoginListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLoginListener.java @@ -4,25 +4,15 @@ import com.olivermartin410.plugins.TChatInfo; -import de.myzelyam.api.vanish.BungeeVanishAPI; -import net.md_5.bungee.api.ChatColor; -import net.md_5.bungee.api.ProxyServer; -import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.event.PostLoginEvent; import net.md_5.bungee.api.plugin.Listener; import net.md_5.bungee.event.EventHandler; import net.md_5.bungee.event.EventPriority; -import xyz.olivermartin.multichat.bungee.ChatManipulation; -import xyz.olivermartin.multichat.bungee.ChatModeManager; import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.ConsoleManager; -import xyz.olivermartin.multichat.bungee.MultiChat; import xyz.olivermartin.multichat.bungee.PlayerMetaManager; -import xyz.olivermartin.multichat.bungee.UUIDNameManager; -import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; -import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; @@ -32,7 +22,6 @@ public class ProxyLoginListener implements Listener { public void onLogin(PostLoginEvent event) { ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); - ChannelManager channelManager = MultiChatProxy.getInstance().getChannelManager(); ProxiedPlayer player = event.getPlayer(); UUID uuid = player.getUniqueId(); @@ -74,122 +63,6 @@ public void onLogin(PostLoginEvent event) { } - String defaultChannel = MultiChatProxy.getInstance().getContextManager().getGlobalContext().getDefaultChannel(); - boolean forceChannel = MultiChatProxy.getInstance().getContextManager().getGlobalContext().isForceChannel(); - boolean firstJoin = false; - - // Set up chat info - if (!ChatModeManager.getInstance().existsPlayer(uuid)) { - - boolean globalMode; - - if (!defaultChannel.equalsIgnoreCase("local")) { - globalMode = true; - } else { - globalMode = false; - } - ChatModeManager.getInstance().registerPlayer(uuid, globalMode); - firstJoin = true; - - } - - // If we are forcing the channels, then force it - if (forceChannel) { - - boolean globalMode; - if (!defaultChannel.equalsIgnoreCase("local")) { - globalMode = true; - } else { - globalMode = false; - } - ChatModeManager.getInstance().registerPlayer(uuid, globalMode); - - } - - // Set player to appropriate channels in NEW CHANNELS system - if (ChatModeManager.getInstance().isGlobal(uuid)) { - channelManager.select(uuid, "global"); - } else { - channelManager.select(uuid, "local"); - } - - // Remove any old UUID - Name pairings - if (UUIDNameManager.existsUUID(uuid)) { - UUIDNameManager.removeUUID(uuid); - } - - // Register updated entry in UUID - Name map - UUIDNameManager.addNew(uuid, player.getName()); - ConsoleManager.log("Refreshed UUID-Name lookup: " + uuid.toString()); - - // If MultiChat is handling join messages... - if ( ConfigManager.getInstance().getHandler(ConfigFile.JOIN_MESSAGES).getConfig().getBoolean("showjoin") == true ) { - - // PremiumVanish support, return as early as possible to avoid loading unnecessary resources - if (MultiChat.premiumVanish && MultiChat.hideVanishedStaffInJoin && BungeeVanishAPI.isInvisible(player)) { - return; - } - - // Load join message formats from config - String joinformat = ConfigManager.getInstance().getHandler(ConfigFile.JOIN_MESSAGES).getConfig().getString("serverjoin"); - String silentformat = ConfigManager.getInstance().getHandler(ConfigFile.JOIN_MESSAGES).getConfig().getString("silentjoin"); - String welcomeMessage = ConfigManager.getInstance().getHandler(ConfigFile.JOIN_MESSAGES).getConfig().getString("welcome_message"); - String privateWelcomeMessage = ConfigManager.getInstance().getHandler(ConfigFile.JOIN_MESSAGES).getConfig().getString("private_welcome_message"); - - // Replace the placeholders - ChatManipulation chatman = new ChatManipulation(); // TODO Legacy - joinformat = MultiChatUtil.reformatRGB(chatman.replaceJoinMsgVars(joinformat, player.getName())); - silentformat = MultiChatUtil.reformatRGB(chatman.replaceJoinMsgVars(silentformat, player.getName())); - welcomeMessage = MultiChatUtil.reformatRGB(chatman.replaceJoinMsgVars(welcomeMessage, player.getName())); - privateWelcomeMessage = MultiChatUtil.reformatRGB(chatman.replaceJoinMsgVars(privateWelcomeMessage, player.getName())); - - // Check which messages should be broadcast - boolean broadcastWelcome = ConfigManager.getInstance().getHandler(ConfigFile.JOIN_MESSAGES).getConfig().getBoolean("welcome", true); - boolean privateWelcome = ConfigManager.getInstance().getHandler(ConfigFile.JOIN_MESSAGES).getConfig().getBoolean("private_welcome", false); - boolean broadcastJoin = !player.hasPermission("multichat.staff.silentjoin"); - - // Broadcast - for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { - - if (broadcastJoin) { - - if (firstJoin && broadcastWelcome) { - if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { - onlineplayer.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(ChatColor.translateAlternateColorCodes('&', welcomeMessage)))); - } else { - onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', welcomeMessage))); - } - } - - if (firstJoin && privateWelcome && onlineplayer.getName().equals(player.getName())) { - if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { - onlineplayer.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(ChatColor.translateAlternateColorCodes('&', privateWelcomeMessage)))); - } else { - onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', privateWelcomeMessage))); - } - } - - if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { - onlineplayer.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(ChatColor.translateAlternateColorCodes('&', joinformat)))); - } else { - onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', joinformat))); - } - - } else { - - ds.getHiddenStaff().add(player.getUniqueId()); - - if (onlineplayer.hasPermission("multichat.staff.silentjoin") ) { - if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { - onlineplayer.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(ChatColor.translateAlternateColorCodes('&', silentformat)))); - } else { - onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', silentformat))); - } - } - - } - } - } } } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyServerConnectedListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyServerConnectedListener.java new file mode 100644 index 00000000..e247d346 --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyServerConnectedListener.java @@ -0,0 +1,156 @@ +package xyz.olivermartin.multichat.proxy.common.listeners; + +import java.util.UUID; + +import de.myzelyam.api.vanish.BungeeVanishAPI; +import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.ProxyServer; +import net.md_5.bungee.api.chat.TextComponent; +import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.md_5.bungee.api.event.ServerConnectedEvent; +import net.md_5.bungee.api.plugin.Listener; +import net.md_5.bungee.event.EventHandler; +import net.md_5.bungee.event.EventPriority; +import xyz.olivermartin.multichat.bungee.ChatManipulation; +import xyz.olivermartin.multichat.bungee.ChatModeManager; +import xyz.olivermartin.multichat.bungee.ConfigManager; +import xyz.olivermartin.multichat.bungee.ConsoleManager; +import xyz.olivermartin.multichat.bungee.MultiChat; +import xyz.olivermartin.multichat.bungee.UUIDNameManager; +import xyz.olivermartin.multichat.common.MultiChatUtil; +import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; +import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; +import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; + +public class ProxyServerConnectedListener implements Listener { + + @EventHandler(priority = EventPriority.HIGHEST) + public void onServerConnected(ServerConnectedEvent event) { + + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + ChannelManager channelManager = MultiChatProxy.getInstance().getChannelManager(); + + ProxiedPlayer player = event.getPlayer(); + UUID uuid = player.getUniqueId(); + + String defaultChannel = MultiChatProxy.getInstance().getContextManager().getGlobalContext().getDefaultChannel(); + boolean forceChannel = MultiChatProxy.getInstance().getContextManager().getGlobalContext().isForceChannel(); + boolean firstJoin = false; + + // Set up chat info + if (!ChatModeManager.getInstance().existsPlayer(uuid)) { + + boolean globalMode; + + if (!defaultChannel.equalsIgnoreCase("local")) { + globalMode = true; + } else { + globalMode = false; + } + ChatModeManager.getInstance().registerPlayer(uuid, globalMode); + firstJoin = true; + + } + + // If we are forcing the channels, then force it + if (forceChannel) { + + boolean globalMode; + if (!defaultChannel.equalsIgnoreCase("local")) { + globalMode = true; + } else { + globalMode = false; + } + ChatModeManager.getInstance().registerPlayer(uuid, globalMode); + + } + + // Set player to appropriate channels in NEW CHANNELS system + if (ChatModeManager.getInstance().isGlobal(uuid)) { + channelManager.select(uuid, "global"); + } else { + channelManager.select(uuid, "local"); + } + + // Remove any old UUID - Name pairings + if (UUIDNameManager.existsUUID(uuid)) { + UUIDNameManager.removeUUID(uuid); + } + + // Register updated entry in UUID - Name map + UUIDNameManager.addNew(uuid, player.getName()); + ConsoleManager.log("Refreshed UUID-Name lookup: " + uuid.toString()); + + // If MultiChat is handling join messages... + if ( ConfigManager.getInstance().getHandler(ConfigFile.JOIN_MESSAGES).getConfig().getBoolean("showjoin") == true ) { + + // PremiumVanish support, return as early as possible to avoid loading unnecessary resources + if (MultiChat.premiumVanish && MultiChat.hideVanishedStaffInJoin && BungeeVanishAPI.isInvisible(player)) { + return; + } + + // Load join message formats from config + String joinformat = ConfigManager.getInstance().getHandler(ConfigFile.JOIN_MESSAGES).getConfig().getString("serverjoin"); + String silentformat = ConfigManager.getInstance().getHandler(ConfigFile.JOIN_MESSAGES).getConfig().getString("silentjoin"); + String welcomeMessage = ConfigManager.getInstance().getHandler(ConfigFile.JOIN_MESSAGES).getConfig().getString("welcome_message"); + String privateWelcomeMessage = ConfigManager.getInstance().getHandler(ConfigFile.JOIN_MESSAGES).getConfig().getString("private_welcome_message"); + + // Replace the placeholders + ChatManipulation chatman = new ChatManipulation(); // TODO Legacy + joinformat = MultiChatUtil.reformatRGB(chatman.replaceJoinMsgVars(joinformat, player.getName())); + silentformat = MultiChatUtil.reformatRGB(chatman.replaceJoinMsgVars(silentformat, player.getName())); + welcomeMessage = MultiChatUtil.reformatRGB(chatman.replaceJoinMsgVars(welcomeMessage, player.getName())); + privateWelcomeMessage = MultiChatUtil.reformatRGB(chatman.replaceJoinMsgVars(privateWelcomeMessage, player.getName())); + + // Check which messages should be broadcast + boolean broadcastWelcome = ConfigManager.getInstance().getHandler(ConfigFile.JOIN_MESSAGES).getConfig().getBoolean("welcome", true); + boolean privateWelcome = ConfigManager.getInstance().getHandler(ConfigFile.JOIN_MESSAGES).getConfig().getBoolean("private_welcome", false); + boolean broadcastJoin = !player.hasPermission("multichat.staff.silentjoin"); + + // Broadcast + for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { + + if (broadcastJoin) { + + if (firstJoin && broadcastWelcome) { + if (MultiChat.legacyServers.contains(event.getServer().getInfo().getName())) { + onlineplayer.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(ChatColor.translateAlternateColorCodes('&', welcomeMessage)))); + } else { + onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', welcomeMessage))); + } + } + + if (firstJoin && privateWelcome && onlineplayer.getName().equals(player.getName())) { + if (MultiChat.legacyServers.contains(event.getServer().getInfo().getName())) { + onlineplayer.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(ChatColor.translateAlternateColorCodes('&', privateWelcomeMessage)))); + } else { + onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', privateWelcomeMessage))); + } + } + + if (MultiChat.legacyServers.contains(event.getServer().getInfo().getName())) { + onlineplayer.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(ChatColor.translateAlternateColorCodes('&', joinformat)))); + } else { + onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', joinformat))); + } + + } else { + + ds.getHiddenStaff().add(player.getUniqueId()); + + if (onlineplayer.hasPermission("multichat.staff.silentjoin") ) { + if (MultiChat.legacyServers.contains(event.getServer().getInfo().getName())) { + onlineplayer.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(ChatColor.translateAlternateColorCodes('&', silentformat)))); + } else { + onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', silentformat))); + } + } + + } + } + } + + } + +} From b9935010eee8190cdbf0f8ebd48a1c5ede13927d Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Wed, 29 Jul 2020 20:51:04 +0100 Subject: [PATCH 071/188] Made it so that welcome messages can be shown even if join msgs disabled --- .../ProxyServerConnectedListener.java | 33 ++++++++++++------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyServerConnectedListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyServerConnectedListener.java index e247d346..ccf88437 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyServerConnectedListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyServerConnectedListener.java @@ -83,7 +83,9 @@ public void onServerConnected(ServerConnectedEvent event) { ConsoleManager.log("Refreshed UUID-Name lookup: " + uuid.toString()); // If MultiChat is handling join messages... - if ( ConfigManager.getInstance().getHandler(ConfigFile.JOIN_MESSAGES).getConfig().getBoolean("showjoin") == true ) { + if (ConfigManager.getInstance().getHandler(ConfigFile.JOIN_MESSAGES).getConfig().getBoolean("showjoin") + || ConfigManager.getInstance().getHandler(ConfigFile.JOIN_MESSAGES).getConfig().getBoolean("welcome") + || ConfigManager.getInstance().getHandler(ConfigFile.JOIN_MESSAGES).getConfig().getBoolean("private_welcome")) { // PremiumVanish support, return as early as possible to avoid loading unnecessary resources if (MultiChat.premiumVanish && MultiChat.hideVanishedStaffInJoin && BungeeVanishAPI.isInvisible(player)) { @@ -121,34 +123,43 @@ public void onServerConnected(ServerConnectedEvent event) { } } - if (firstJoin && privateWelcome && onlineplayer.getName().equals(player.getName())) { + if (firstJoin && privateWelcome + && onlineplayer.getName().equals(player.getName())) { + if (MultiChat.legacyServers.contains(event.getServer().getInfo().getName())) { onlineplayer.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(ChatColor.translateAlternateColorCodes('&', privateWelcomeMessage)))); } else { onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', privateWelcomeMessage))); } + } - if (MultiChat.legacyServers.contains(event.getServer().getInfo().getName())) { - onlineplayer.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(ChatColor.translateAlternateColorCodes('&', joinformat)))); - } else { - onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', joinformat))); + if (ConfigManager.getInstance().getHandler(ConfigFile.JOIN_MESSAGES).getConfig().getBoolean("showjoin")) { + if (MultiChat.legacyServers.contains(event.getServer().getInfo().getName())) { + onlineplayer.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(ChatColor.translateAlternateColorCodes('&', joinformat)))); + } else { + onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', joinformat))); + } } } else { ds.getHiddenStaff().add(player.getUniqueId()); - if (onlineplayer.hasPermission("multichat.staff.silentjoin") ) { - if (MultiChat.legacyServers.contains(event.getServer().getInfo().getName())) { - onlineplayer.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(ChatColor.translateAlternateColorCodes('&', silentformat)))); - } else { - onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', silentformat))); + if (ConfigManager.getInstance().getHandler(ConfigFile.JOIN_MESSAGES).getConfig().getBoolean("showjoin")) { + if (onlineplayer.hasPermission("multichat.staff.silentjoin") ) { + if (MultiChat.legacyServers.contains(event.getServer().getInfo().getName())) { + onlineplayer.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(ChatColor.translateAlternateColorCodes('&', silentformat)))); + } else { + onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', silentformat))); + } } } } + } + } } From cf60bbedf0a777a7f37d0efff8252a3c988f83da Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Wed, 29 Jul 2020 21:31:51 +0100 Subject: [PATCH 072/188] Experiment by expanding the /display command to read JSON text --- .../bungee/commands/DisplayCommand.java | 53 +++++++++++++++---- 1 file changed, 42 insertions(+), 11 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/DisplayCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/DisplayCommand.java index 7b93edec..7e473633 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/DisplayCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/DisplayCommand.java @@ -1,21 +1,24 @@ package xyz.olivermartin.multichat.bungee.commands; +import com.google.gson.JsonParser; + import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.plugin.Command; +import net.md_5.bungee.chat.ComponentSerializer; import net.md_5.bungee.config.Configuration; import xyz.olivermartin.multichat.bungee.ChatControl; import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.ConsoleManager; import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.bungee.MultiChat; +import xyz.olivermartin.multichat.bungee.events.PostBroadcastEvent; import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; -import xyz.olivermartin.multichat.bungee.events.PostBroadcastEvent; /** * Display Command @@ -30,6 +33,24 @@ public DisplayCommand() { super("mcdisplay", "multichat.staff.display", (String[]) ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("display").toArray(new String[0])); } + public static boolean isValidJson(String json) { + + try { + + return new JsonParser().parse(json).getAsJsonObject() != null; + + } catch (Throwable ignored) { + + try { + return new JsonParser().parse(json).getAsJsonArray() != null; + } catch (Throwable ignored2) { + return false; + } + + } + + } + public void execute(CommandSender sender, String[] args) { if (args.length < 1) { @@ -47,26 +68,36 @@ public void execute(CommandSender sender, String[] args) { public static void displayMessage(String message) { - message = ChatControl.applyChatRules(message, "display_command", "").get(); - message = MultiChatUtil.reformatRGB(message); Configuration config = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig(); + message = ChatControl.applyChatRules(message, "display_command", "").get(); + + boolean json = isValidJson(message); + if (!json) message = MultiChatUtil.reformatRGB(message); + for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { - if (onlineplayer.getServer() != null) { - if (!config.getStringList(ConfigValues.Config.NO_GLOBAL).contains( - onlineplayer.getServer().getInfo().getName())) { - if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { - onlineplayer.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(ChatColor.translateAlternateColorCodes('&', message)))); - } else { - onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', message))); - } + + if (onlineplayer.getServer() == null) continue; + + if (config.getStringList(ConfigValues.Config.NO_GLOBAL).contains( + onlineplayer.getServer().getInfo().getName())) continue; + + if (json) { + onlineplayer.sendMessage(ComponentSerializer.parse(message)); + } else { + if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { + onlineplayer.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(ChatColor.translateAlternateColorCodes('&', message)))); + } else { + onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', message))); } } + } // Trigger PostBroadcastEvent ProxyServer.getInstance().getPluginManager().callEvent(new PostBroadcastEvent("display", message)); ConsoleManager.logDisplayMessage(message); + } } From 4f84ded368cb0e69eff2bc09ca0bb54d0479e44f Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Wed, 29 Jul 2020 22:01:21 +0100 Subject: [PATCH 073/188] More experimentation with JSON in the display command (not perfect) --- .../multichat/bungee/commands/DisplayCommand.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/DisplayCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/DisplayCommand.java index 7e473633..9f8269bb 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/DisplayCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/DisplayCommand.java @@ -35,6 +35,8 @@ public DisplayCommand() { public static boolean isValidJson(String json) { + if (!isSafeMinecraftJson(json)) return false; + try { return new JsonParser().parse(json).getAsJsonObject() != null; @@ -51,6 +53,14 @@ public static boolean isValidJson(String json) { } + public static boolean isSafeMinecraftJson(String json) { + try { + return ComponentSerializer.parse(json) != null; + } catch (Throwable ignored) { + return false; + } + } + public void execute(CommandSender sender, String[] args) { if (args.length < 1) { From 2fbeccecbb74c2e37df7e76e004e07bfd4723904 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Thu, 30 Jul 2020 15:04:22 +0100 Subject: [PATCH 074/188] Display command can now use JSON (and injection) (and legacy supported) --- .../bungee/commands/DisplayCommand.java | 49 +----- .../multichat/common/MultiChatUtil.java | 72 +++++++++ .../proxy/common/ProxyJsonUtils.java | 144 ++++++++++++++++++ .../multichat/proxy/common/ProxyUtils.java | 55 +++++++ .../multichat/proxy/common/TranslateMode.java | 30 ++++ 5 files changed, 307 insertions(+), 43 deletions(-) create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyJsonUtils.java create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyUtils.java create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/TranslateMode.java diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/DisplayCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/DisplayCommand.java index 9f8269bb..d988da61 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/DisplayCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/DisplayCommand.java @@ -1,14 +1,9 @@ package xyz.olivermartin.multichat.bungee.commands; -import com.google.gson.JsonParser; - -import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.ProxyServer; -import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.plugin.Command; -import net.md_5.bungee.chat.ComponentSerializer; import net.md_5.bungee.config.Configuration; import xyz.olivermartin.multichat.bungee.ChatControl; import xyz.olivermartin.multichat.bungee.ConfigManager; @@ -17,6 +12,8 @@ import xyz.olivermartin.multichat.bungee.MultiChat; import xyz.olivermartin.multichat.bungee.events.PostBroadcastEvent; import xyz.olivermartin.multichat.common.MultiChatUtil; +import xyz.olivermartin.multichat.proxy.common.ProxyJsonUtils; +import xyz.olivermartin.multichat.proxy.common.ProxyUtils; import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; @@ -33,34 +30,6 @@ public DisplayCommand() { super("mcdisplay", "multichat.staff.display", (String[]) ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("display").toArray(new String[0])); } - public static boolean isValidJson(String json) { - - if (!isSafeMinecraftJson(json)) return false; - - try { - - return new JsonParser().parse(json).getAsJsonObject() != null; - - } catch (Throwable ignored) { - - try { - return new JsonParser().parse(json).getAsJsonArray() != null; - } catch (Throwable ignored2) { - return false; - } - - } - - } - - public static boolean isSafeMinecraftJson(String json) { - try { - return ComponentSerializer.parse(json) != null; - } catch (Throwable ignored) { - return false; - } - } - public void execute(CommandSender sender, String[] args) { if (args.length < 1) { @@ -81,9 +50,7 @@ public static void displayMessage(String message) { Configuration config = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig(); message = ChatControl.applyChatRules(message, "display_command", "").get(); - - boolean json = isValidJson(message); - if (!json) message = MultiChatUtil.reformatRGB(message); + message = ProxyUtils.translateColourCodes(message); for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { @@ -92,14 +59,10 @@ public static void displayMessage(String message) { if (config.getStringList(ConfigValues.Config.NO_GLOBAL).contains( onlineplayer.getServer().getInfo().getName())) continue; - if (json) { - onlineplayer.sendMessage(ComponentSerializer.parse(message)); + if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { + onlineplayer.sendMessage(ProxyJsonUtils.parseMultiple(MultiChatUtil.approximateHexCodes(message))); } else { - if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { - onlineplayer.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(ChatColor.translateAlternateColorCodes('&', message)))); - } else { - onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', message))); - } + onlineplayer.sendMessage(ProxyJsonUtils.parseMultiple(message)); } } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/common/MultiChatUtil.java b/multichat/src/main/java/xyz/olivermartin/multichat/common/MultiChatUtil.java index 84e65ba0..26e775d2 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/common/MultiChatUtil.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/common/MultiChatUtil.java @@ -44,10 +44,82 @@ public static String approximateHexCodes(String message) { message = message.replace(match,"§"+minecraftCode); } + return approximateJsonHexCodes(message); + + } + + private static String approximateJsonHexCodes(String message) { + + message = message.replaceAll("(?i)(\"color\":\")#([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])(\")", "$1&#$2$3$4$5$6$7$8"); + + List allMatches = new ArrayList(); + Matcher m = Pattern.compile("(?i)\\&(x|#)([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])") + .matcher(message); + while (m.find()) { + allMatches.add(m.group()); + } + + for (String match : allMatches) { + + String hexonly; + if (match.contains("#")) { + hexonly = match.split("#")[1]; + } else if (match.contains("x")) { + hexonly = match.split("x")[1]; + } else { + hexonly = match.split("X")[1]; + } + String minecraftCode = hexToMinecraft(hexonly); + message = message.replace(match,getMinecraftCodeName(minecraftCode)); + } + return message; } + public static String getMinecraftCodeName(String code) { + + code = code.toLowerCase(); + + switch (code) { + case "0": + return "black"; + case "1": + return "dark_blue"; + case "2": + return "dark_green"; + case "3": + return "dark_aqua"; + case "4": + return "dark_red"; + case "5": + return "dark_purple"; + case "6": + return "gold"; + case "7": + return "gray"; + case "8": + return "dark_gray"; + case "9": + return "blue"; + case "a": + return "green"; + case "b": + return "aqua"; + case "c": + return "red"; + case "d": + return "light_purple"; + case "e": + return "yellow"; + case "f": + return "white"; + default: + return "white"; + } + + } + public static String hexToMinecraft(String hex) { String rcode = hex.substring(0,2); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyJsonUtils.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyJsonUtils.java new file mode 100644 index 00000000..c27b71bb --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyJsonUtils.java @@ -0,0 +1,144 @@ +package xyz.olivermartin.multichat.proxy.common; + +import java.util.ArrayList; +import java.util.List; + +import com.google.gson.JsonParser; + +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.chat.TextComponent; +import net.md_5.bungee.chat.ComponentSerializer; + +public class ProxyJsonUtils { + + /** + *

Parses a raw string (which might be Json) and returns the BaseComponent[]

+ *

If the string is not Json text, it is treated as legacy text

+ * @param rawMessage The message (which might be Json) to parse + * @return the parsed BaseComponent[] ready for sending + */ + public static BaseComponent[] parse(String rawMessage) { + + if (isValidJson(rawMessage)) { + return ComponentSerializer.parse(rawMessage); + } else { + return TextComponent.fromLegacyText(rawMessage); + } + + } + + /** + *

PROTOTYPE ONLY

+ *

Parses a raw string (which might be Json) and returns the BaseComponent[]

+ *

The parseMultiple method is a prototype using a +++ separator between Json and legacy text

+ *

If the string is not Json text, it is treated as legacy text

+ * @param rawMessage The message (which might contains Json) to parse + * @return the parsed BaseComponent[] ready for sending + */ + public static BaseComponent[] parseMultiple(String rawMessage) { + + String[] split = rawMessage.split("\\+\\+\\+"); + List parsed = new ArrayList(); + + int size = 0; + + for (String s : split) { + BaseComponent[] next = parseCopies(s); + parsed.add(next); + size += next.length; + } + + BaseComponent[] processed = new BaseComponent[size]; + + int counter = 0; + for (BaseComponent[] bca : parsed) { + for (BaseComponent bc : bca) { + processed[counter++] = bc; + } + } + + return processed; + + } + + /** + *

PROTOTYPE ONLY

+ *

Parses a raw string (which might be Json) and returns the BaseComponent[]

+ *

The parseMultiple method is a prototype using a +++ separator between Json and legacy text

+ *

If the string is not Json text, it is treated as legacy text

+ * @param rawMessage The message (which might contains Json) to parse + * @return the parsed BaseComponent[] ready for sending + */ + private static BaseComponent[] parseCopies(String rawMessage) { + + String[] split = rawMessage.split(">>>"); + List parsed = new ArrayList(); + int size = 0; + + for (String s : split) { + + BaseComponent[] next; + + if (isValidJson(s)) { + next = ComponentSerializer.parse(s); + } else { + next = TextComponent.fromLegacyText(s); + } + + parsed.add(next); + size += next.length; + + } + + BaseComponent[] processed = new BaseComponent[size]; + BaseComponent last = null; + + int counter = 0; + for (BaseComponent[] bca : parsed) { + if (last != null) { + bca[0].copyFormatting(last, false); + } + for (BaseComponent bc : bca) { + processed[counter++] = bc; + last = bc; + } + } + + return processed; + + } + + /** + *

Checks if a string is a valid json message or not

+ * @param json The string to check + * @return true if is valid json + */ + public static boolean isValidJson(String json) { + + if (!isSafeMinecraftJson(json)) return false; + + try { + + return new JsonParser().parse(json).getAsJsonObject() != null; + + } catch (Throwable ignored) { + + try { + return new JsonParser().parse(json).getAsJsonArray() != null; + } catch (Throwable ignored2) { + return false; + } + + } + + } + + private static boolean isSafeMinecraftJson(String json) { + try { + return ComponentSerializer.parse(json) != null; + } catch (Throwable ignored) { + return false; + } + } + +} diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyUtils.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyUtils.java new file mode 100644 index 00000000..ab40640d --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyUtils.java @@ -0,0 +1,55 @@ +package xyz.olivermartin.multichat.proxy.common; + +import java.util.HashSet; +import java.util.Set; + +import xyz.olivermartin.multichat.common.MultiChatUtil; + +public class ProxyUtils { + + /** + *

Takes a raw string and translates any colour codes using the & symbol

+ *

Any RGB codes in the format &#abcdef, &xabcdef or &x&a&b&c&d&e&f will also be translated

+ * @param rawMessage The raw message to translate + * @return the translated message + */ + public static String translateColourCodes(String rawMessage) { + return translateColourCodes(rawMessage, TranslateMode.ALL); + } + + /** + *

Takes a raw string and translates formatting codes according to the TranslateMode

+ * @param rawMessage The raw message to translate + * @param mode The TranslateMode to process + * @return the translated message + */ + public static String translateColourCodes(String rawMessage, TranslateMode mode) { + Set modes = new HashSet(); + modes.add(mode); + return translateColourCodes(rawMessage, modes); + } + + /** + *

Takes a raw string and translates formatting codes according to the TranslateMode

+ * @param rawMessage The raw message to translate + * @param modes The TranslateModes to process + * @return the translated message + */ + public static String translateColourCodes(String rawMessage, Set modes) { + + String translatedMessage = rawMessage; + boolean rgb = modes.contains(TranslateMode.ALL) || modes.contains(TranslateMode.COLOUR_ALL); + + // If we are translating RGB codes, reformat these to the correct format + if (rgb) translatedMessage = MultiChatUtil.reformatRGB(translatedMessage); + + // Process each of the translations + for (TranslateMode mode : modes) { + translatedMessage = mode.translate(translatedMessage); + } + + return translatedMessage; + + } + +} diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/TranslateMode.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/TranslateMode.java new file mode 100644 index 00000000..fbe155f1 --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/TranslateMode.java @@ -0,0 +1,30 @@ +package xyz.olivermartin.multichat.proxy.common; + +public enum TranslateMode { + + COLOUR_SIMPLE ("(?i)&(?=[a-f,0-9])"), + COLOUR_ALL ("(?i)&(?=[a-f,0-9,x])"), + FORMAT_UNDERLINE ("(?i)&(?=[n])"), + FORMAT_ITALIC ("(?i)&(?=[o])"), + FORMAT_BOLD ("(?i)&(?=[l])"), + FORMAT_STRIKE ("(?i)&(?=[m])"), + FORMAT_OBFUSCATED ("(?i)&(?=[k])"), + FORMAT_RESET ("(?i)&(?=[r])"), + FORMAT_ALL ("(?i)&(?=[k-o,r])"), + ALL ("(?i)&(?=[a-f,0-9,k-o,r,x])"); + + private String regex; + + private TranslateMode(String regex) { + this.regex = regex; + } + + public String getRegex() { + return this.regex; + } + + public String translate(String rawMessage) { + return rawMessage.replaceAll(this.regex, "§"); + } + +} From 7669ec821fb1753990f5cbaddfc817406840c357 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Thu, 30 Jul 2020 15:27:22 +0100 Subject: [PATCH 075/188] Beta 4 includes quit message fixes & json in display command --- .../releases/1.10/multichat-1.10-beta.4.jar | Bin 0 -> 646931 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 multichat/releases/1.10/multichat-1.10-beta.4.jar diff --git a/multichat/releases/1.10/multichat-1.10-beta.4.jar b/multichat/releases/1.10/multichat-1.10-beta.4.jar new file mode 100644 index 0000000000000000000000000000000000000000..9e7970b22cb8d65b2095394a0dc28391d495d68e GIT binary patch literal 646931 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%0Dp?Qeh#|*7`yKqCx5@zJNT)z} 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 z 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
X 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%0A2obhc$llaVy&HJq8E%3??dnEd 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�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༃nJUO|M-N6TT-TG)yLu#ZC+ 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 Date: Thu, 30 Jul 2020 23:08:30 +0100 Subject: [PATCH 076/188] Slightly improved the new JSON and translations methods --- .../multichat/proxy/common/ProxyUtils.java | 20 ++++--------------- .../multichat/proxy/common/TranslateMode.java | 14 ++++++++----- 2 files changed, 13 insertions(+), 21 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyUtils.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyUtils.java index ab40640d..3892b634 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyUtils.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyUtils.java @@ -1,7 +1,6 @@ package xyz.olivermartin.multichat.proxy.common; -import java.util.HashSet; -import java.util.Set; +import java.util.Arrays; import xyz.olivermartin.multichat.common.MultiChatUtil; @@ -17,28 +16,17 @@ public static String translateColourCodes(String rawMessage) { return translateColourCodes(rawMessage, TranslateMode.ALL); } - /** - *

Takes a raw string and translates formatting codes according to the TranslateMode

- * @param rawMessage The raw message to translate - * @param mode The TranslateMode to process - * @return the translated message - */ - public static String translateColourCodes(String rawMessage, TranslateMode mode) { - Set modes = new HashSet(); - modes.add(mode); - return translateColourCodes(rawMessage, modes); - } - /** *

Takes a raw string and translates formatting codes according to the TranslateMode

* @param rawMessage The raw message to translate * @param modes The TranslateModes to process * @return the translated message */ - public static String translateColourCodes(String rawMessage, Set modes) { + public static String translateColourCodes(String rawMessage, TranslateMode... modes) { String translatedMessage = rawMessage; - boolean rgb = modes.contains(TranslateMode.ALL) || modes.contains(TranslateMode.COLOUR_ALL); + + boolean rgb = Arrays.stream(modes).anyMatch(value -> value.equals(TranslateMode.ALL) || value.equals(TranslateMode.COLOUR_ALL)); // If we are translating RGB codes, reformat these to the correct format if (rgb) translatedMessage = MultiChatUtil.reformatRGB(translatedMessage); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/TranslateMode.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/TranslateMode.java index fbe155f1..e99aec87 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/TranslateMode.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/TranslateMode.java @@ -1,5 +1,8 @@ package xyz.olivermartin.multichat.proxy.common; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + public enum TranslateMode { COLOUR_SIMPLE ("(?i)&(?=[a-f,0-9])"), @@ -13,18 +16,19 @@ public enum TranslateMode { FORMAT_ALL ("(?i)&(?=[k-o,r])"), ALL ("(?i)&(?=[a-f,0-9,k-o,r,x])"); - private String regex; + private Pattern pattern; private TranslateMode(String regex) { - this.regex = regex; + this.pattern = Pattern.compile(regex); } - public String getRegex() { - return this.regex; + public Pattern getPattern() { + return this.pattern; } public String translate(String rawMessage) { - return rawMessage.replaceAll(this.regex, "§"); + Matcher matcher = pattern.matcher(rawMessage); + return matcher.replaceAll("§"); } } From dd6910628b040cbb211a6a4e318fbb41a075307f Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Fri, 31 Jul 2020 00:00:10 +0100 Subject: [PATCH 077/188] Further improved MultiChats JSON handling routines --- .../proxy/common/ProxyJsonUtils.java | 71 +++++++++++-------- 1 file changed, 43 insertions(+), 28 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyJsonUtils.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyJsonUtils.java index c27b71bb..6c351310 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyJsonUtils.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyJsonUtils.java @@ -1,6 +1,7 @@ package xyz.olivermartin.multichat.proxy.common; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import com.google.gson.JsonParser; @@ -38,8 +39,8 @@ public static BaseComponent[] parse(String rawMessage) { public static BaseComponent[] parseMultiple(String rawMessage) { String[] split = rawMessage.split("\\+\\+\\+"); - List parsed = new ArrayList(); + List parsed = new ArrayList(); int size = 0; for (String s : split) { @@ -48,16 +49,9 @@ public static BaseComponent[] parseMultiple(String rawMessage) { size += next.length; } - BaseComponent[] processed = new BaseComponent[size]; - - int counter = 0; - for (BaseComponent[] bca : parsed) { - for (BaseComponent bc : bca) { - processed[counter++] = bc; - } - } + BaseComponent[][] bcaa = new BaseComponent[parsed.size()][]; - return processed; + return merge(false, size, parsed.toArray(bcaa)); } @@ -72,39 +66,60 @@ public static BaseComponent[] parseMultiple(String rawMessage) { private static BaseComponent[] parseCopies(String rawMessage) { String[] split = rawMessage.split(">>>"); + List parsed = new ArrayList(); int size = 0; for (String s : split) { + BaseComponent[] next = parse(s); + parsed.add(next); + size += next.length; + } - BaseComponent[] next; + BaseComponent[][] bcaa = new BaseComponent[parsed.size()][]; - if (isValidJson(s)) { - next = ComponentSerializer.parse(s); - } else { - next = TextComponent.fromLegacyText(s); - } + return merge(true, size, parsed.toArray(bcaa)); - parsed.add(next); - size += next.length; + } - } + /** + * Merge together multiple entirely separate base component arrays + * @param injectFormatting If the formatting from the previous base component should be injected into the next + * @param baseComponentArrays The base component arrays to merge + * @return the concatenated array + */ + public static BaseComponent[] merge(boolean injectFormatting, BaseComponent[]... baseComponentArrays) { + return merge( + injectFormatting, + Arrays.stream(baseComponentArrays).mapToInt(bca -> bca.length).sum(), + baseComponentArrays); + } - BaseComponent[] processed = new BaseComponent[size]; - BaseComponent last = null; + /** + * Merge together multiple entirely separate base component arrays + * @param injectFormatting If the formatting from the previous base component should be injected into the next + * @param size The length of the new array + * @param baseComponentArrays The base component arrays to merge + * @return the concatenated array + */ + public static BaseComponent[] merge(boolean injectFormatting, int size, BaseComponent[]... baseComponentArrays) { + + BaseComponent[] concatenated = new BaseComponent[size]; + BaseComponent previous = null; int counter = 0; - for (BaseComponent[] bca : parsed) { - if (last != null) { - bca[0].copyFormatting(last, false); - } + for (BaseComponent[] bca : baseComponentArrays) { + + if (previous != null && injectFormatting) bca[0].copyFormatting(previous, false); + for (BaseComponent bc : bca) { - processed[counter++] = bc; - last = bc; + concatenated[counter++] = bc; + previous = bc; } + } - return processed; + return concatenated; } From 63ebb8064591db32d2de1441f840acf9c6ab03cf Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Fri, 31 Jul 2020 00:01:21 +0100 Subject: [PATCH 078/188] Fix variable naming --- .../olivermartin/multichat/proxy/common/ProxyJsonUtils.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyJsonUtils.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyJsonUtils.java index 6c351310..cc7c0e63 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyJsonUtils.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyJsonUtils.java @@ -104,7 +104,7 @@ public static BaseComponent[] merge(boolean injectFormatting, BaseComponent[]... */ public static BaseComponent[] merge(boolean injectFormatting, int size, BaseComponent[]... baseComponentArrays) { - BaseComponent[] concatenated = new BaseComponent[size]; + BaseComponent[] merged = new BaseComponent[size]; BaseComponent previous = null; int counter = 0; @@ -113,13 +113,13 @@ public static BaseComponent[] merge(boolean injectFormatting, int size, BaseComp if (previous != null && injectFormatting) bca[0].copyFormatting(previous, false); for (BaseComponent bc : bca) { - concatenated[counter++] = bc; + merged[counter++] = bc; previous = bc; } } - return concatenated; + return merged; } From b00484d6b3734b27c746c72b7ed89aaba2526526 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Fri, 31 Jul 2020 00:03:41 +0100 Subject: [PATCH 079/188] Very minor optimisation of json handling loop --- .../xyz/olivermartin/multichat/proxy/common/ProxyJsonUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyJsonUtils.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyJsonUtils.java index cc7c0e63..15c8389a 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyJsonUtils.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyJsonUtils.java @@ -110,7 +110,7 @@ public static BaseComponent[] merge(boolean injectFormatting, int size, BaseComp int counter = 0; for (BaseComponent[] bca : baseComponentArrays) { - if (previous != null && injectFormatting) bca[0].copyFormatting(previous, false); + if (injectFormatting && previous != null) bca[0].copyFormatting(previous, false); for (BaseComponent bc : bca) { merged[counter++] = bc; From 167ce76672b0e715a16b214107be42919f27f652 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Sun, 2 Aug 2020 13:49:13 +0100 Subject: [PATCH 080/188] Added JSON to PMs (but no validation on user using JSON in the message) --- .../bungee/PrivateMessageManager.java | 184 +++++++++--------- .../proxy/common/ProxyJsonUtils.java | 6 +- 2 files changed, 93 insertions(+), 97 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PrivateMessageManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PrivateMessageManager.java index e0d9d9a1..e6eeecbb 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PrivateMessageManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PrivateMessageManager.java @@ -2,13 +2,12 @@ import java.util.UUID; -import net.md_5.bungee.api.ChatColor; -import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.ProxyServer; -import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.connection.ProxiedPlayer; import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.ProxyJsonUtils; +import xyz.olivermartin.multichat.proxy.common.ProxyUtils; import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; @@ -33,31 +32,63 @@ private PrivateMessageManager() { chatfix = new ChatManipulation(); } - public void sendMessage(String message, ProxiedPlayer sender, ProxiedPlayer target) { + private String getOutFormat() { + return ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString(ConfigValues.Config.PM_OUT_FORMAT); + } - ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + private String getInFormat() { + return ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString(ConfigValues.Config.PM_IN_FORMAT); + } - message = MultiChatUtil.reformatRGB(message); + private String getSpyFormat() { + return ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString(ConfigValues.Config.PM_SPY_FORMAT); + } - String messageoutformat = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString(ConfigValues.Config.PM_OUT_FORMAT); - String messageinformat = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString(ConfigValues.Config.PM_IN_FORMAT); - String messagespyformat = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString(ConfigValues.Config.PM_SPY_FORMAT); + private void displayMessage(ProxiedPlayer player, String message) { - String finalmessage = chatfix.replaceMsgVars(messageoutformat, message, sender, target); - if (MultiChat.legacyServers.contains(sender.getServer().getInfo().getName())) { - sender.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(ChatColor.translateAlternateColorCodes('&', finalmessage)))); + if (MultiChat.legacyServers.contains(player.getServer().getInfo().getName())) { + player.sendMessage(ProxyJsonUtils.parseMultiple(MultiChatUtil.approximateHexCodes(message))); } else { - sender.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', finalmessage))); + player.sendMessage(ProxyJsonUtils.parseMultiple(message)); } - finalmessage = chatfix.replaceMsgVars(messageinformat, message, sender, target); - if (MultiChat.legacyServers.contains(target.getServer().getInfo().getName())) { - target.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(ChatColor.translateAlternateColorCodes('&', finalmessage)))); - } else { - target.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', finalmessage))); - } + } + + private void displayConsoleMessage(String message) { + ProxyServer.getInstance().getConsole().sendMessage(ProxyJsonUtils.parseMultiple(MultiChatUtil.approximateHexCodes(message))); + } + + private void updateLastMessage(UUID sender, UUID target) { + + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + ds.getLastMsg().put(sender, target); + ds.getLastMsg().put(target, sender); + + } + + public void sendMessage(String message, ProxiedPlayer sender, ProxiedPlayer target) { + + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + + // Replace placeholders (SENDER) + String finalmessage = chatfix.replaceMsgVars(getOutFormat(), message, sender, target); + // Translate formats + finalmessage = ProxyUtils.translateColourCodes(finalmessage); + + displayMessage(sender, finalmessage); + + // Replace placeholders (TARGET) + finalmessage = chatfix.replaceMsgVars(getInFormat(), message, sender, target); + // Translate formats + finalmessage = ProxyUtils.translateColourCodes(finalmessage); + + displayMessage(target, finalmessage); + + // Replace placeholders (SPY) + finalmessage = chatfix.replaceMsgVars(getSpyFormat(), message, sender, target); + // Translate formats + finalmessage = ProxyUtils.translateColourCodes(finalmessage); - finalmessage = chatfix.replaceMsgVars(messagespyformat, message, sender, target); for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { if ((onlineplayer.hasPermission("multichat.staff.spy")) @@ -67,27 +98,14 @@ public void sendMessage(String message, ProxiedPlayer sender, ProxiedPlayer targ && (!(sender.hasPermission("multichat.staff.spy.bypass") || target.hasPermission("multichat.staff.spy.bypass")))) { - if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { - onlineplayer.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(ChatColor.translateAlternateColorCodes('&', finalmessage)))); - } else { - onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', finalmessage))); - } + displayMessage(onlineplayer, finalmessage); } } - if (ds.getLastMsg().containsKey(sender.getUniqueId())) { - ds.getLastMsg().remove(sender.getUniqueId()); - } - - ds.getLastMsg().put(sender.getUniqueId(), target.getUniqueId()); - - if (ds.getLastMsg().containsKey(target.getUniqueId())) { - ds.getLastMsg().remove(target.getUniqueId()); - } - - ds.getLastMsg().put(target.getUniqueId(), sender.getUniqueId()); + // Update the last message map to be used for /r + updateLastMessage(sender.getUniqueId(), target.getUniqueId()); ConsoleManager.logSocialSpy(sender.getName(), target.getName(), message); @@ -97,23 +115,25 @@ public void sendMessageConsoleTarget(String message, ProxiedPlayer sender) { ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); - message = MultiChatUtil.reformatRGB(message); + // Replace placeholders (SENDER) + String finalmessage = chatfix.replaceMsgConsoleTargetVars(getOutFormat(), message, (ProxiedPlayer)sender); + // Translate formats + finalmessage = ProxyUtils.translateColourCodes(finalmessage); - String messageoutformat = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString(ConfigValues.Config.PM_OUT_FORMAT); - String messageinformat = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString(ConfigValues.Config.PM_IN_FORMAT); - String messagespyformat = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString(ConfigValues.Config.PM_SPY_FORMAT); + displayMessage(sender, finalmessage); - String finalmessage = chatfix.replaceMsgConsoleTargetVars(messageoutformat, message, (ProxiedPlayer)sender); - if (MultiChat.legacyServers.contains(sender.getServer().getInfo().getName())) { - sender.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(ChatColor.translateAlternateColorCodes('&', finalmessage)))); - } else { - sender.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', finalmessage))); - } + // Replace placeholders (TARGET) (CONSOLE) + finalmessage = chatfix.replaceMsgConsoleTargetVars(getInFormat(), message, (ProxiedPlayer)sender); + // Translate formats + finalmessage = ProxyUtils.translateColourCodes(finalmessage); - finalmessage = chatfix.replaceMsgConsoleTargetVars(messageinformat, message, (ProxiedPlayer)sender); - ProxyServer.getInstance().getConsole().sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', finalmessage))); + displayConsoleMessage(finalmessage); + + // Replace placeholders (SPY) + finalmessage = chatfix.replaceMsgConsoleTargetVars(getSpyFormat(), message, (ProxiedPlayer)sender); + // Translate formats + finalmessage = ProxyUtils.translateColourCodes(finalmessage); - finalmessage = chatfix.replaceMsgConsoleTargetVars(messagespyformat, message, (ProxiedPlayer)sender); for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { if ((onlineplayer.hasPermission("multichat.staff.spy")) @@ -121,26 +141,13 @@ public void sendMessageConsoleTarget(String message, ProxiedPlayer sender) { && (onlineplayer.getUniqueId() != ((ProxiedPlayer)sender).getUniqueId()) && (!(sender.hasPermission("multichat.staff.spy.bypass")))) { - if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { - onlineplayer.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(ChatColor.translateAlternateColorCodes('&', finalmessage)))); - } else { - onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', finalmessage))); - } + displayMessage(onlineplayer, finalmessage); } } - if (ds.getLastMsg().containsKey(((ProxiedPlayer)sender).getUniqueId())) { - ds.getLastMsg().remove(((ProxiedPlayer)sender).getUniqueId()); - } - - ds.getLastMsg().put(((ProxiedPlayer)sender).getUniqueId(), new UUID(0L, 0L)); - - if (ds.getLastMsg().containsKey(new UUID(0L, 0L))) { - ds.getLastMsg().remove(new UUID(0L, 0L)); - } - - ds.getLastMsg().put(new UUID(0L, 0L), ((ProxiedPlayer)sender).getUniqueId()); + // Update the last message map to be used for /r + updateLastMessage(sender.getUniqueId(), new UUID(0L, 0L)); } @@ -148,25 +155,25 @@ public void sendMessageConsoleSender(String message, ProxiedPlayer target) { ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); - message = MultiChatUtil.reformatRGB(message); + // Replace placeholders (SENDER) (CONSOLE) + String finalmessage = chatfix.replaceMsgConsoleSenderVars(getOutFormat(), message, target); + // Translate formats + finalmessage = ProxyUtils.translateColourCodes(finalmessage); - CommandSender sender = ProxyServer.getInstance().getConsole(); + displayConsoleMessage(finalmessage); - String messageoutformat = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString(ConfigValues.Config.PM_OUT_FORMAT); - String messageinformat = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString(ConfigValues.Config.PM_IN_FORMAT); - String messagespyformat = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString(ConfigValues.Config.PM_SPY_FORMAT); + // Replace placeholders (TARGET) + finalmessage = chatfix.replaceMsgConsoleSenderVars(getInFormat(), message, target); + // Translate formats + finalmessage = ProxyUtils.translateColourCodes(finalmessage); - String finalmessage = chatfix.replaceMsgConsoleSenderVars(messageoutformat, message, target); - sender.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', finalmessage))); + displayMessage(target, finalmessage); - finalmessage = chatfix.replaceMsgConsoleSenderVars(messageinformat, message, target); - if (MultiChat.legacyServers.contains(target.getServer().getInfo().getName())) { - target.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(ChatColor.translateAlternateColorCodes('&', finalmessage)))); - } else { - target.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', finalmessage))); - } + // Replace placeholders (SPY) + finalmessage = chatfix.replaceMsgConsoleSenderVars(getSpyFormat(), message, target); + // Translate formats + finalmessage = ProxyUtils.translateColourCodes(finalmessage); - finalmessage = chatfix.replaceMsgConsoleSenderVars(messagespyformat, message, target); for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { if ((onlineplayer.hasPermission("multichat.staff.spy")) @@ -174,26 +181,13 @@ public void sendMessageConsoleSender(String message, ProxiedPlayer target) { && (onlineplayer.getUniqueId() != target.getUniqueId()) && (!(target.hasPermission("multichat.staff.spy.bypass")))) { - if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { - onlineplayer.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(ChatColor.translateAlternateColorCodes('&', finalmessage)))); - } else { - onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', finalmessage))); - } + displayMessage(onlineplayer, finalmessage); } } - if (ds.getLastMsg().containsKey(new UUID(0L, 0L))) { - ds.getLastMsg().remove(new UUID(0L, 0L)); - } - - ds.getLastMsg().put(new UUID(0L, 0L), target.getUniqueId()); - - if (ds.getLastMsg().containsKey(target.getUniqueId())) { - ds.getLastMsg().remove(target.getUniqueId()); - } - - ds.getLastMsg().put(target.getUniqueId(), new UUID(0L, 0L)); + // Update the last message map to be used for /r + updateLastMessage(new UUID(0L, 0L), target.getUniqueId()); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyJsonUtils.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyJsonUtils.java index 15c8389a..56717da6 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyJsonUtils.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyJsonUtils.java @@ -110,11 +110,13 @@ public static BaseComponent[] merge(boolean injectFormatting, int size, BaseComp int counter = 0; for (BaseComponent[] bca : baseComponentArrays) { - if (injectFormatting && previous != null) bca[0].copyFormatting(previous, false); - for (BaseComponent bc : bca) { + + if (injectFormatting && previous != null) bc.copyFormatting(previous, false); + merged[counter++] = bc; previous = bc; + } } From a245f1929163f6102ac4134b312ceca68a619b1b Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Sun, 2 Aug 2020 19:49:11 +0100 Subject: [PATCH 081/188] Prevent players from inserting JSON into %MESSAGE% placeholder --- .../multichat/bungee/ChatManipulation.java | 6 +- .../bungee/PrivateMessageManager.java | 56 ++++++-------- .../proxy/common/ProxyJsonUtils.java | 73 ++++++++++++++++++- 3 files changed, 97 insertions(+), 38 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatManipulation.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatManipulation.java index 44c188c1..57e6ca52 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatManipulation.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatManipulation.java @@ -22,7 +22,7 @@ public class ChatManipulation { public String replaceMsgVars(String messageFormat, String message, ProxiedPlayer sender, ProxiedPlayer target) { - messageFormat = messageFormat.replace("%MESSAGE%", message); + //messageFormat = messageFormat.replace("%MESSAGE%", message); messageFormat = messageFormat.replace("%DISPLAYNAME%", sender.getDisplayName()); messageFormat = messageFormat.replace("%NAME%", sender.getName()); @@ -55,7 +55,7 @@ public String replaceMsgVars(String messageFormat, String message, ProxiedPlayer public String replaceMsgConsoleTargetVars(String messageFormat, String message, ProxiedPlayer sender) { - messageFormat = messageFormat.replace("%MESSAGE%", message); + //messageFormat = messageFormat.replace("%MESSAGE%", message); messageFormat = messageFormat.replace("%DISPLAYNAME%", sender.getDisplayName()); messageFormat = messageFormat.replace("%NAME%", sender.getName()); @@ -85,7 +85,7 @@ public String replaceMsgConsoleTargetVars(String messageFormat, String message, public String replaceMsgConsoleSenderVars(String messageFormat, String message, ProxiedPlayer target) { - messageFormat = messageFormat.replace("%MESSAGE%", message); + //messageFormat = messageFormat.replace("%MESSAGE%", message); messageFormat = messageFormat.replace("%DISPLAYNAME%", "CONSOLE"); messageFormat = messageFormat.replace("%NAME%", "CONSOLE"); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PrivateMessageManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PrivateMessageManager.java index e6eeecbb..2f438b24 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PrivateMessageManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PrivateMessageManager.java @@ -44,18 +44,26 @@ private String getSpyFormat() { return ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString(ConfigValues.Config.PM_SPY_FORMAT); } - private void displayMessage(ProxiedPlayer player, String message) { + private void displayMessage(ProxiedPlayer player, String rawMessage, String replacement) { + + rawMessage = ProxyUtils.translateColourCodes(rawMessage); + replacement = ProxyUtils.translateColourCodes(replacement); if (MultiChat.legacyServers.contains(player.getServer().getInfo().getName())) { - player.sendMessage(ProxyJsonUtils.parseMultiple(MultiChatUtil.approximateHexCodes(message))); - } else { - player.sendMessage(ProxyJsonUtils.parseMultiple(message)); + rawMessage = MultiChatUtil.approximateHexCodes(rawMessage); + replacement = MultiChatUtil.approximateHexCodes(replacement); } + player.sendMessage(ProxyJsonUtils.parsePartialMultiple(rawMessage, "%MESSAGE%", replacement)); + } - private void displayConsoleMessage(String message) { - ProxyServer.getInstance().getConsole().sendMessage(ProxyJsonUtils.parseMultiple(MultiChatUtil.approximateHexCodes(message))); + private void displayConsoleMessage(String rawMessage, String replacement) { + + rawMessage = MultiChatUtil.approximateHexCodes(ProxyUtils.translateColourCodes(rawMessage)); + replacement = MultiChatUtil.approximateHexCodes(ProxyUtils.translateColourCodes(replacement)); + ProxyServer.getInstance().getConsole().sendMessage(ProxyJsonUtils.parsePartialMultiple(rawMessage, "%MESSAGE%", replacement)); + } private void updateLastMessage(UUID sender, UUID target) { @@ -72,22 +80,16 @@ public void sendMessage(String message, ProxiedPlayer sender, ProxiedPlayer targ // Replace placeholders (SENDER) String finalmessage = chatfix.replaceMsgVars(getOutFormat(), message, sender, target); - // Translate formats - finalmessage = ProxyUtils.translateColourCodes(finalmessage); - displayMessage(sender, finalmessage); + displayMessage(sender, finalmessage, message); // Replace placeholders (TARGET) finalmessage = chatfix.replaceMsgVars(getInFormat(), message, sender, target); - // Translate formats - finalmessage = ProxyUtils.translateColourCodes(finalmessage); - displayMessage(target, finalmessage); + displayMessage(target, finalmessage, message); // Replace placeholders (SPY) finalmessage = chatfix.replaceMsgVars(getSpyFormat(), message, sender, target); - // Translate formats - finalmessage = ProxyUtils.translateColourCodes(finalmessage); for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { @@ -98,7 +100,7 @@ public void sendMessage(String message, ProxiedPlayer sender, ProxiedPlayer targ && (!(sender.hasPermission("multichat.staff.spy.bypass") || target.hasPermission("multichat.staff.spy.bypass")))) { - displayMessage(onlineplayer, finalmessage); + displayMessage(onlineplayer, finalmessage, message); } @@ -117,22 +119,16 @@ public void sendMessageConsoleTarget(String message, ProxiedPlayer sender) { // Replace placeholders (SENDER) String finalmessage = chatfix.replaceMsgConsoleTargetVars(getOutFormat(), message, (ProxiedPlayer)sender); - // Translate formats - finalmessage = ProxyUtils.translateColourCodes(finalmessage); - displayMessage(sender, finalmessage); + displayMessage(sender, finalmessage, message); // Replace placeholders (TARGET) (CONSOLE) finalmessage = chatfix.replaceMsgConsoleTargetVars(getInFormat(), message, (ProxiedPlayer)sender); - // Translate formats - finalmessage = ProxyUtils.translateColourCodes(finalmessage); - displayConsoleMessage(finalmessage); + displayConsoleMessage(finalmessage, message); // Replace placeholders (SPY) finalmessage = chatfix.replaceMsgConsoleTargetVars(getSpyFormat(), message, (ProxiedPlayer)sender); - // Translate formats - finalmessage = ProxyUtils.translateColourCodes(finalmessage); for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { @@ -141,7 +137,7 @@ public void sendMessageConsoleTarget(String message, ProxiedPlayer sender) { && (onlineplayer.getUniqueId() != ((ProxiedPlayer)sender).getUniqueId()) && (!(sender.hasPermission("multichat.staff.spy.bypass")))) { - displayMessage(onlineplayer, finalmessage); + displayMessage(onlineplayer, finalmessage, message); } } @@ -157,22 +153,16 @@ public void sendMessageConsoleSender(String message, ProxiedPlayer target) { // Replace placeholders (SENDER) (CONSOLE) String finalmessage = chatfix.replaceMsgConsoleSenderVars(getOutFormat(), message, target); - // Translate formats - finalmessage = ProxyUtils.translateColourCodes(finalmessage); - displayConsoleMessage(finalmessage); + displayConsoleMessage(finalmessage, message); // Replace placeholders (TARGET) finalmessage = chatfix.replaceMsgConsoleSenderVars(getInFormat(), message, target); - // Translate formats - finalmessage = ProxyUtils.translateColourCodes(finalmessage); - displayMessage(target, finalmessage); + displayMessage(target, finalmessage, message); // Replace placeholders (SPY) finalmessage = chatfix.replaceMsgConsoleSenderVars(getSpyFormat(), message, target); - // Translate formats - finalmessage = ProxyUtils.translateColourCodes(finalmessage); for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { @@ -181,7 +171,7 @@ public void sendMessageConsoleSender(String message, ProxiedPlayer target) { && (onlineplayer.getUniqueId() != target.getUniqueId()) && (!(target.hasPermission("multichat.staff.spy.bypass")))) { - displayMessage(onlineplayer, finalmessage); + displayMessage(onlineplayer, finalmessage, message); } } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyJsonUtils.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyJsonUtils.java index 56717da6..2446f622 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyJsonUtils.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyJsonUtils.java @@ -12,13 +12,24 @@ public class ProxyJsonUtils { + static public final String WITH_DELIMITER = "((?<=(%1$s))|(?=(%1$s)))"; + + /** + *

Parses a raw string as legacy text and returns the BaseComponent[]

+ * @param rawMessage The message to parse + * @return the parsed BaseComponent[] ready for sending + */ + public static BaseComponent[] parseAsLegacy(String rawMessage) { + return TextComponent.fromLegacyText(rawMessage); + } + /** *

Parses a raw string (which might be Json) and returns the BaseComponent[]

*

If the string is not Json text, it is treated as legacy text

* @param rawMessage The message (which might be Json) to parse * @return the parsed BaseComponent[] ready for sending */ - public static BaseComponent[] parse(String rawMessage) { + public static BaseComponent[] parseSingle(String rawMessage) { if (isValidJson(rawMessage)) { return ComponentSerializer.parse(rawMessage); @@ -28,6 +39,26 @@ public static BaseComponent[] parse(String rawMessage) { } + public static BaseComponent[] parsePartialSingle(String rawMessage, String placeholder, String replacement) { + + String[] split = rawMessage.split(String.format(WITH_DELIMITER, placeholder), -1); + BaseComponent[][] result = new BaseComponent[split.length][]; + + int counter = 0; + for (String s : split) { + + if (s.equals(placeholder)) { + result[counter++] = parseAsLegacy(replacement); + } else { + result[counter++] = parseSingle(s); + } + + } + + return merge(true, result); + + } + /** *

PROTOTYPE ONLY

*

Parses a raw string (which might be Json) and returns the BaseComponent[]

@@ -55,6 +86,25 @@ public static BaseComponent[] parseMultiple(String rawMessage) { } + public static BaseComponent[] parsePartialMultiple(String rawMessage, String placeholder, String replacement) { + + String[] split = rawMessage.split("\\+\\+\\+"); + + List parsed = new ArrayList(); + int size = 0; + + for (String s : split) { + BaseComponent[] next = parsePartialCopies(s, placeholder, replacement); + parsed.add(next); + size += next.length; + } + + BaseComponent[][] bcaa = new BaseComponent[parsed.size()][]; + + return merge(false, size, parsed.toArray(bcaa)); + + } + /** *

PROTOTYPE ONLY

*

Parses a raw string (which might be Json) and returns the BaseComponent[]

@@ -71,7 +121,26 @@ private static BaseComponent[] parseCopies(String rawMessage) { int size = 0; for (String s : split) { - BaseComponent[] next = parse(s); + BaseComponent[] next = parseSingle(s); + parsed.add(next); + size += next.length; + } + + BaseComponent[][] bcaa = new BaseComponent[parsed.size()][]; + + return merge(true, size, parsed.toArray(bcaa)); + + } + + private static BaseComponent[] parsePartialCopies(String rawMessage, String placeholder, String replacement) { + + String[] split = rawMessage.split(">>>"); + + List parsed = new ArrayList(); + int size = 0; + + for (String s : split) { + BaseComponent[] next = parsePartialSingle(s, placeholder, replacement); parsed.add(next); size += next.length; } From 5127bac327129b76ae7833c15416cbb06c83d771 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Sun, 2 Aug 2020 21:29:20 +0100 Subject: [PATCH 082/188] Refactored the JSON parsing code again --- .../bungee/PrivateMessageManager.java | 4 +- .../bungee/commands/DisplayCommand.java | 4 +- .../proxy/common/ProxyJsonUtils.java | 113 +++++++++--------- 3 files changed, 58 insertions(+), 63 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PrivateMessageManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PrivateMessageManager.java index 2f438b24..5edfe1aa 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PrivateMessageManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PrivateMessageManager.java @@ -54,7 +54,7 @@ private void displayMessage(ProxiedPlayer player, String rawMessage, String repl replacement = MultiChatUtil.approximateHexCodes(replacement); } - player.sendMessage(ProxyJsonUtils.parsePartialMultiple(rawMessage, "%MESSAGE%", replacement)); + player.sendMessage(ProxyJsonUtils.parseMessage(rawMessage, "%MESSAGE%", replacement)); } @@ -62,7 +62,7 @@ private void displayConsoleMessage(String rawMessage, String replacement) { rawMessage = MultiChatUtil.approximateHexCodes(ProxyUtils.translateColourCodes(rawMessage)); replacement = MultiChatUtil.approximateHexCodes(ProxyUtils.translateColourCodes(replacement)); - ProxyServer.getInstance().getConsole().sendMessage(ProxyJsonUtils.parsePartialMultiple(rawMessage, "%MESSAGE%", replacement)); + ProxyServer.getInstance().getConsole().sendMessage(ProxyJsonUtils.parseMessage(rawMessage, "%MESSAGE%", replacement)); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/DisplayCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/DisplayCommand.java index d988da61..c9435bb5 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/DisplayCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/DisplayCommand.java @@ -60,9 +60,9 @@ public static void displayMessage(String message) { onlineplayer.getServer().getInfo().getName())) continue; if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { - onlineplayer.sendMessage(ProxyJsonUtils.parseMultiple(MultiChatUtil.approximateHexCodes(message))); + onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(MultiChatUtil.approximateHexCodes(message))); } else { - onlineplayer.sendMessage(ProxyJsonUtils.parseMultiple(message)); + onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(message)); } } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyJsonUtils.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyJsonUtils.java index 2446f622..08655004 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyJsonUtils.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyJsonUtils.java @@ -15,21 +15,21 @@ public class ProxyJsonUtils { static public final String WITH_DELIMITER = "((?<=(%1$s))|(?=(%1$s)))"; /** - *

Parses a raw string as legacy text and returns the BaseComponent[]

- * @param rawMessage The message to parse + *

Parses a single node of a MultiChat message as legacy text and returns the BaseComponent[]

+ * @param rawMessage The raw message node to parse * @return the parsed BaseComponent[] ready for sending */ - public static BaseComponent[] parseAsLegacy(String rawMessage) { + private static BaseComponent[] parseNodeAsLegacy(String rawMessage) { return TextComponent.fromLegacyText(rawMessage); } /** - *

Parses a raw string (which might be Json) and returns the BaseComponent[]

+ *

Parses a single node of a MultiChat message (which might be Json) and returns the BaseComponent[]

*

If the string is not Json text, it is treated as legacy text

- * @param rawMessage The message (which might be Json) to parse + * @param rawMessage The raw message node (which might be Json) to parse * @return the parsed BaseComponent[] ready for sending */ - public static BaseComponent[] parseSingle(String rawMessage) { + private static BaseComponent[] parseNode(String rawMessage) { if (isValidJson(rawMessage)) { return ComponentSerializer.parse(rawMessage); @@ -39,7 +39,20 @@ public static BaseComponent[] parseSingle(String rawMessage) { } - public static BaseComponent[] parsePartialSingle(String rawMessage, String placeholder, String replacement) { + /** + *

Parses a single node of a MultiChat message (which might be Json) and returns the BaseComponent[]

+ *

If the string is not Json text, it is treated as legacy text

+ *

This method allows for a partially substituted message node

+ *

You can specify a placeholder and its replacement which will be parsed as legacy text within the rest of the node

+ *

This is useful for user %MESSAGE%s which you do not want to be parsed as JSON

+ * @param rawMessage The raw message node (which might be Json) to parse + * @param placeholder The placeholder to be substituted + * @param replacement The replacement value for the placeholder (substituted as legacy text) + * @return the parsed BaseComponent[] ready for sending + */ + private static BaseComponent[] parsePartialNode(String rawMessage, String placeholder, String replacement) { + + if (placeholder == null || replacement == null) return parseNode(rawMessage); String[] split = rawMessage.split(String.format(WITH_DELIMITER, placeholder), -1); BaseComponent[][] result = new BaseComponent[split.length][]; @@ -48,9 +61,9 @@ public static BaseComponent[] parsePartialSingle(String rawMessage, String place for (String s : split) { if (s.equals(placeholder)) { - result[counter++] = parseAsLegacy(replacement); + result[counter++] = parseNodeAsLegacy(replacement); } else { - result[counter++] = parseSingle(s); + result[counter++] = parseNode(s); } } @@ -60,79 +73,58 @@ public static BaseComponent[] parsePartialSingle(String rawMessage, String place } /** - *

PROTOTYPE ONLY

- *

Parses a raw string (which might be Json) and returns the BaseComponent[]

- *

The parseMultiple method is a prototype using a +++ separator between Json and legacy text

+ *

Parses an entire MultiChat message (which might include Json) and returns the BaseComponent[]

*

If the string is not Json text, it is treated as legacy text

- * @param rawMessage The message (which might contains Json) to parse + *

The concatenation operator +++, and injection operator >>>, will also be parsed

+ * @param rawMessage The raw message (which might include Json) to parse * @return the parsed BaseComponent[] ready for sending */ - public static BaseComponent[] parseMultiple(String rawMessage) { - - String[] split = rawMessage.split("\\+\\+\\+"); - - List parsed = new ArrayList(); - int size = 0; - - for (String s : split) { - BaseComponent[] next = parseCopies(s); - parsed.add(next); - size += next.length; - } - - BaseComponent[][] bcaa = new BaseComponent[parsed.size()][]; - - return merge(false, size, parsed.toArray(bcaa)); - - } - - public static BaseComponent[] parsePartialMultiple(String rawMessage, String placeholder, String replacement) { - - String[] split = rawMessage.split("\\+\\+\\+"); - - List parsed = new ArrayList(); - int size = 0; - - for (String s : split) { - BaseComponent[] next = parsePartialCopies(s, placeholder, replacement); - parsed.add(next); - size += next.length; - } - - BaseComponent[][] bcaa = new BaseComponent[parsed.size()][]; - - return merge(false, size, parsed.toArray(bcaa)); - + public static BaseComponent[] parseMessage(String rawMessage) { + return parseConcatenations(rawMessage, null, null); } /** - *

PROTOTYPE ONLY

- *

Parses a raw string (which might be Json) and returns the BaseComponent[]

- *

The parseMultiple method is a prototype using a +++ separator between Json and legacy text

+ *

Parses an entire MultiChat message (which might include Json) and returns the BaseComponent[]

*

If the string is not Json text, it is treated as legacy text

- * @param rawMessage The message (which might contains Json) to parse + *

The concatenation operator +++, and injection operator >>>, will also be parsed

+ *

This method allows for a partially substituted message node

+ *

You can specify a placeholder and its replacement which will be parsed as legacy text within the rest of the node

+ *

This is useful for user %MESSAGE%s which you do not want to be parsed as JSON

+ * @param rawMessage The raw message (which might include Json) to parse + * @param placeholder The placeholder to be substituted + * @param replacement The replacement value for the placeholder (substituted as legacy text) * @return the parsed BaseComponent[] ready for sending */ - private static BaseComponent[] parseCopies(String rawMessage) { + public static BaseComponent[] parseMessage(String rawMessage, String placeholder, String replacement) { + return parseConcatenations(rawMessage, placeholder, replacement); + } - String[] split = rawMessage.split(">>>"); + /* + * Parses the concatenations in a MultiChat message + */ + private static BaseComponent[] parseConcatenations(String rawMessage, String placeholder, String replacement) { + + String[] split = rawMessage.split("\\+\\+\\+"); List parsed = new ArrayList(); int size = 0; for (String s : split) { - BaseComponent[] next = parseSingle(s); + BaseComponent[] next = parseInjections(s, placeholder, replacement); parsed.add(next); size += next.length; } BaseComponent[][] bcaa = new BaseComponent[parsed.size()][]; - return merge(true, size, parsed.toArray(bcaa)); + return merge(false, size, parsed.toArray(bcaa)); } - private static BaseComponent[] parsePartialCopies(String rawMessage, String placeholder, String replacement) { + /* + * Parses the injections in a MultiChat message + */ + private static BaseComponent[] parseInjections(String rawMessage, String placeholder, String replacement) { String[] split = rawMessage.split(">>>"); @@ -140,7 +132,7 @@ private static BaseComponent[] parsePartialCopies(String rawMessage, String plac int size = 0; for (String s : split) { - BaseComponent[] next = parsePartialSingle(s, placeholder, replacement); + BaseComponent[] next = parsePartialNode(s, placeholder, replacement); parsed.add(next); size += next.length; } @@ -219,6 +211,9 @@ public static boolean isValidJson(String json) { } + /* + * Checks if the json can be safely parsed by Minecraft + */ private static boolean isSafeMinecraftJson(String json) { try { return ComponentSerializer.parse(json) != null; From 3cd3f544129a0f053a7a876954af190034cfd3d4 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Sun, 2 Aug 2020 22:20:28 +0100 Subject: [PATCH 083/188] Implemented JSON into message manager --- .../multichat/bungee/MessageManager.java | 56 ++++++++++++++----- .../proxy/common/ProxyJsonUtils.java | 2 +- 2 files changed, 42 insertions(+), 16 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MessageManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MessageManager.java index 8d70920b..0caee278 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MessageManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MessageManager.java @@ -3,11 +3,12 @@ import java.util.HashMap; import java.util.Map; -import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.CommandSender; -import net.md_5.bungee.api.chat.TextComponent; +import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.config.Configuration; import xyz.olivermartin.multichat.common.MultiChatUtil; +import xyz.olivermartin.multichat.proxy.common.ProxyJsonUtils; +import xyz.olivermartin.multichat.proxy.common.ProxyUtils; import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; /** @@ -20,8 +21,6 @@ public class MessageManager { private static Map defaultMessages; - private static String prefix; - static { defaultMessages = new HashMap(); @@ -403,7 +402,18 @@ public class MessageManager { } public static String getPrefix() { + + String prefix; + Configuration config = ConfigManager.getInstance().getHandler(ConfigFile.MESSAGES).getConfig(); + + if (config.contains("prefix")) { + prefix = config.getString("prefix"); + } else { + prefix = defaultMessages.get("prefix"); + } + return prefix; + } public static String getMessage(String id) { @@ -417,28 +427,44 @@ public static String getMessage(String id) { } public static void sendMessage(CommandSender sender, String id) { - updatePrefix(); - sender.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', prefix + MultiChatUtil.reformatRGB(getMessage(id))))); + handleSend(sender, id, getPrefix() + "+++", null); } public static void sendSpecialMessage(CommandSender sender, String id, String special) { - updatePrefix(); - sender.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', prefix + MultiChatUtil.reformatRGB(getMessage(id)).replaceAll("%SPECIAL%", special)))); + handleSend(sender, id, getPrefix() + "+++", special); } public static void sendSpecialMessageWithoutPrefix(CommandSender sender, String id, String special) { - updatePrefix(); - sender.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', MultiChatUtil.reformatRGB(getMessage(id)).replaceAll("%SPECIAL%", special)))); + handleSend(sender, id, "", special); } - private static void updatePrefix() { + private static void handleSend(CommandSender sender, String id, String prefix, String special) { - Configuration config = ConfigManager.getInstance().getHandler(ConfigFile.MESSAGES).getConfig(); + boolean isSpecial = special != null; - if (config.contains("prefix")) { - prefix = config.getString("prefix"); + // Translate format codes + String message = prefix + getMessage(id); + message = ProxyUtils.translateColourCodes(message); + if (isSpecial) special = ProxyUtils.translateColourCodes(special); + + // Handle legacy servers + if (sender instanceof ProxiedPlayer) { + ProxiedPlayer player = (ProxiedPlayer) sender; + if (MultiChat.legacyServers.contains(player.getServer().getInfo().getName())) { + message = MultiChatUtil.approximateHexCodes(message); + if (isSpecial) special = MultiChatUtil.approximateHexCodes(special); + } } else { - prefix = defaultMessages.get("prefix"); + // Handle console + message = MultiChatUtil.approximateHexCodes(message); + if (isSpecial) special = MultiChatUtil.approximateHexCodes(special); + } + + // Parse & send message + if (isSpecial) { + sender.sendMessage(ProxyJsonUtils.parseMessage(message, "%SPECIAL%", special)); + } else { + sender.sendMessage(ProxyJsonUtils.parseMessage(message)); } } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyJsonUtils.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyJsonUtils.java index 08655004..d4fd9787 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyJsonUtils.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyJsonUtils.java @@ -12,7 +12,7 @@ public class ProxyJsonUtils { - static public final String WITH_DELIMITER = "((?<=(%1$s))|(?=(%1$s)))"; + public static final String WITH_DELIMITER = "((?<=(%1$s))|(?=(%1$s)))"; /** *

Parses a single node of a MultiChat message as legacy text and returns the BaseComponent[]

From 10462f28760a4eea8993e5ea5316f9e6450c1fba Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Sun, 2 Aug 2020 23:07:00 +0100 Subject: [PATCH 084/188] Implement JSON in staff chats --- .../multichat/bungee/StaffChatManager.java | 100 +++++++----------- 1 file changed, 37 insertions(+), 63 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/StaffChatManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/StaffChatManager.java index 72592ee5..0aa9a251 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/StaffChatManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/StaffChatManager.java @@ -4,13 +4,13 @@ import com.olivermartin410.plugins.TChatInfo; -import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.ProxyServer; -import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.connection.ProxiedPlayer; import xyz.olivermartin.multichat.bungee.events.PostStaffChatEvent; import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.ProxyJsonUtils; +import xyz.olivermartin.multichat.proxy.common.ProxyUtils; import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; @@ -24,13 +24,24 @@ public class StaffChatManager { public void sendModMessage(String username, String displayname, String server, String message) { + sendStaffChatMessage("mod", username, displayname, server, message); + } - ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + public void sendAdminMessage(String username, String displayname, String server, String message) { + sendStaffChatMessage("admin", username, displayname, server, message); + } - message = MultiChatUtil.reformatRGB(message); + private void sendStaffChatMessage(String id, String username, String displayname, String server, String message) { + + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); ChatManipulation chatfix = new ChatManipulation(); - String messageFormat = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString(ConfigValues.Config.ModChat.FORMAT); + String messageFormat; + if (id.equals("mod")) { + messageFormat = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString(ConfigValues.Config.ModChat.FORMAT); + } else { + messageFormat = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString(ConfigValues.Config.AdminChat.FORMAT); + } String original = message; Optional crm; @@ -45,9 +56,9 @@ public void sendModMessage(String username, String displayname, String server, S for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { - if (onlineplayer.hasPermission("multichat.staff.mod")) { + if (onlineplayer.hasPermission("multichat.staff." + id)) { - if (!ds.getModChatPreferences().containsKey(onlineplayer.getUniqueId())) { + if (id.equals("mod") && !ds.getModChatPreferences().containsKey(onlineplayer.getUniqueId())) { TChatInfo chatinfo = new TChatInfo(); chatinfo.setChatColor(ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString(ConfigValues.Config.ModChat.CC_DEFAULT).toCharArray()[0]); @@ -55,56 +66,7 @@ public void sendModMessage(String username, String displayname, String server, S ds.getModChatPreferences().put(onlineplayer.getUniqueId(), chatinfo); - } - - message = chatfix.replaceModChatVars(messageFormat, username, displayname, server, original, onlineplayer); - if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { - onlineplayer.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(ChatColor.translateAlternateColorCodes('&', message)))); - } else { - onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', message))); - } - - } - } - - // Trigger PostStaffChatEvent - if (username.equalsIgnoreCase("console")) { - ProxyServer.getInstance().getPluginManager().callEvent(new PostStaffChatEvent("mod", ProxyServer.getInstance().getConsole() , original)); - } else { - if (ProxyServer.getInstance().getPlayer(username) != null) { - ProxyServer.getInstance().getPluginManager().callEvent(new PostStaffChatEvent("mod", ProxyServer.getInstance().getPlayer(username) , original)); - } - } - - ConsoleManager.logModChat("(" + username + ") " + original); - - } - - public void sendAdminMessage(String username, String displayname, String server, String message) { - - ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); - - message = MultiChatUtil.reformatRGB(message); - - String original = message; - ChatManipulation chatfix = new ChatManipulation(); - String messageFormat = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString(ConfigValues.Config.AdminChat.FORMAT); - - Optional crm; - - crm = ChatControl.applyChatRules(original, "staff_chats", username); - - if (crm.isPresent()) { - original = crm.get(); - } else { - return; - } - - for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { - - if (onlineplayer.hasPermission("multichat.staff.admin")) { - - if (!ds.getAdminChatPreferences().containsKey(onlineplayer.getUniqueId())) { + } else if (id.equals("admin") && !ds.getAdminChatPreferences().containsKey(onlineplayer.getUniqueId())) { TChatInfo chatinfo = new TChatInfo(); chatinfo.setChatColor(ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString(ConfigValues.Config.AdminChat.CC_DEFAULT).toCharArray()[0]); @@ -114,11 +76,18 @@ public void sendAdminMessage(String username, String displayname, String server, } - message = chatfix.replaceAdminChatVars(messageFormat, username, displayname, server, original, onlineplayer); + if (id.equals("mod")) { + message = chatfix.replaceModChatVars(messageFormat, username, displayname, server, original, onlineplayer); + } else { + message = chatfix.replaceAdminChatVars(messageFormat, username, displayname, server, original, onlineplayer); + } + + message = ProxyUtils.translateColourCodes(message); + if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { - onlineplayer.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(ChatColor.translateAlternateColorCodes('&', message)))); + onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(MultiChatUtil.approximateHexCodes(message))); } else { - onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', message))); + onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(message)); } } @@ -126,14 +95,19 @@ public void sendAdminMessage(String username, String displayname, String server, // Trigger PostStaffChatEvent if (username.equalsIgnoreCase("console")) { - ProxyServer.getInstance().getPluginManager().callEvent(new PostStaffChatEvent("admin", ProxyServer.getInstance().getConsole() , original)); + ProxyServer.getInstance().getPluginManager().callEvent(new PostStaffChatEvent(id, ProxyServer.getInstance().getConsole() , original)); } else { if (ProxyServer.getInstance().getPlayer(username) != null) { - ProxyServer.getInstance().getPluginManager().callEvent(new PostStaffChatEvent("admin", ProxyServer.getInstance().getPlayer(username) , original)); + ProxyServer.getInstance().getPluginManager().callEvent(new PostStaffChatEvent(id, ProxyServer.getInstance().getPlayer(username) , original)); } } - ConsoleManager.logAdminChat("(" + username + ") " + original); + if (id.equals("mod")) { + ConsoleManager.logModChat("(" + username + ") " + original); + } else { + ConsoleManager.logAdminChat("(" + username + ") " + original); + } } + } From 7e08ac824884d08de3a014fcd894178821be975a Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Sun, 2 Aug 2020 23:15:24 +0100 Subject: [PATCH 085/188] Prevent use of JSON in %MESSAGE% in staff chats --- .../olivermartin/multichat/bungee/ChatManipulation.java | 4 ++-- .../olivermartin/multichat/bungee/StaffChatManager.java | 8 +++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatManipulation.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatManipulation.java index 57e6ca52..656e90dd 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatManipulation.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatManipulation.java @@ -120,7 +120,7 @@ public String replaceModChatVars(String messageFormat, String playername, String messageFormat = messageFormat.replace("%DISPLAYNAME%", displayname); messageFormat = messageFormat.replace("%NAME%", playername); messageFormat = messageFormat.replace("%SERVER%", server); - messageFormat = messageFormat.replace("%MESSAGE%", message); + //messageFormat = messageFormat.replace("%MESSAGE%", message); messageFormat = messageFormat.replace("%CC%", "&" + ((TChatInfo)ds.getModChatPreferences().get(target.getUniqueId())).getChatColor()); messageFormat = messageFormat.replace("%NC%", "&" + ((TChatInfo)ds.getModChatPreferences().get(target.getUniqueId())).getNameColor()); return messageFormat; @@ -134,7 +134,7 @@ public String replaceAdminChatVars(String messageFormat, String playername, Stri messageFormat = messageFormat.replace("%DISPLAYNAME%",displayname); messageFormat = messageFormat.replace("%NAME%", playername); messageFormat = messageFormat.replace("%SERVER%", server); - messageFormat = messageFormat.replace("%MESSAGE%", message); + //messageFormat = messageFormat.replace("%MESSAGE%", message); messageFormat = messageFormat.replace("%CC%", "&" + ((TChatInfo)ds.getAdminChatPreferences().get(target.getUniqueId())).getChatColor()); messageFormat = messageFormat.replace("%NC%", "&" + ((TChatInfo)ds.getAdminChatPreferences().get(target.getUniqueId())).getNameColor()); return messageFormat; diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/StaffChatManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/StaffChatManager.java index 0aa9a251..0261c00b 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/StaffChatManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/StaffChatManager.java @@ -83,13 +83,15 @@ private void sendStaffChatMessage(String id, String username, String displayname } message = ProxyUtils.translateColourCodes(message); + String originalTranslated = ProxyUtils.translateColourCodes(original); if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { - onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(MultiChatUtil.approximateHexCodes(message))); - } else { - onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(message)); + message = MultiChatUtil.approximateHexCodes(message); + originalTranslated = MultiChatUtil.approximateHexCodes(originalTranslated); } + onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(message, "%MESSAGE%", originalTranslated)); + } } From 8728b57aaa435fbf748b982d41c2a1f60abec764 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Mon, 3 Aug 2020 11:56:57 +0100 Subject: [PATCH 086/188] Implement JSON to group chats --- .../multichat/bungee/ChatManipulation.java | 2 +- .../multichat/bungee/commands/GCCommand.java | 31 ++++++++++--------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatManipulation.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatManipulation.java index 656e90dd..d8680433 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatManipulation.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatManipulation.java @@ -146,7 +146,7 @@ public String replaceGroupChatVars(String messageFormat, String sendername, Stri ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); messageFormat = messageFormat.replace("%NAME%", sendername); - messageFormat = messageFormat.replace("%MESSAGE%", message); + //messageFormat = messageFormat.replace("%MESSAGE%", message); messageFormat = messageFormat.replace("%CC%", "&" + ((TGroupChatInfo)ds.getGroupChats().get(groupName)).getChatColor()); messageFormat = messageFormat.replace("%NC%", "&" + ((TGroupChatInfo)ds.getGroupChats().get(groupName)).getNameColor()); messageFormat = messageFormat.replace("%GROUPNAME%", groupName.toUpperCase()); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GCCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GCCommand.java index b42f9a44..156d6e7d 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GCCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GCCommand.java @@ -4,10 +4,8 @@ import com.olivermartin410.plugins.TGroupChatInfo; -import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.ProxyServer; -import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.plugin.Command; import xyz.olivermartin.multichat.bungee.ChatControl; @@ -19,6 +17,8 @@ import xyz.olivermartin.multichat.bungee.MultiChat; import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.ProxyJsonUtils; +import xyz.olivermartin.multichat.proxy.common.ProxyUtils; import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; @@ -95,14 +95,11 @@ public void execute(CommandSender sender, String[] args) { } } - public static void sendMessage(String message, String playerName, TGroupChatInfo groupInfo) { + public static void sendMessage(String originalMessage, String playerName, TGroupChatInfo groupInfo) { ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); - ChatManipulation chatfix = new ChatManipulation(); - message = MultiChatUtil.reformatRGB(message); - ProxiedPlayer potentialPlayer = ProxyServer.getInstance().getPlayer(playerName); if (potentialPlayer != null) { if (ChatControl.isMuted(potentialPlayer.getUniqueId(), "group_chats")) { @@ -110,23 +107,26 @@ public static void sendMessage(String message, String playerName, TGroupChatInfo return; } - if (ChatControl.handleSpam(potentialPlayer, message, "group_chats")) { + if (ChatControl.handleSpam(potentialPlayer, originalMessage, "group_chats")) { return; } } Optional crm; - crm = ChatControl.applyChatRules(message, "group_chats", playerName); + crm = ChatControl.applyChatRules(originalMessage, "group_chats", playerName); if (crm.isPresent()) { - message = crm.get(); + originalMessage = crm.get(); } else { return; } String messageFormat = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString(ConfigValues.Config.GroupChat.FORMAT); - message = chatfix.replaceGroupChatVars(messageFormat, playerName, message, groupInfo.getName()); + String message = chatfix.replaceGroupChatVars(messageFormat, playerName, originalMessage, groupInfo.getName()); + + message = ProxyUtils.translateColourCodes(message); + String originalTranslated = ProxyUtils.translateColourCodes(originalMessage); for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { @@ -135,18 +135,18 @@ public static void sendMessage(String message, String playerName, TGroupChatInfo if (potentialPlayer != null) { if (!ChatControl.ignores(potentialPlayer.getUniqueId(), onlineplayer.getUniqueId(), "group_chats")) { if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { - onlineplayer.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(ChatColor.translateAlternateColorCodes('&', message)))); + onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(MultiChatUtil.approximateHexCodes(message), "%MESSAGE%", MultiChatUtil.approximateHexCodes(originalTranslated))); } else { - onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', message))); + onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(message, "%MESSAGE%", originalTranslated)); } } else { ChatControl.sendIgnoreNotifications(onlineplayer, potentialPlayer, "group_chats"); } } else { if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { - onlineplayer.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(ChatColor.translateAlternateColorCodes('&', message)))); + onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(MultiChatUtil.approximateHexCodes(message), "%MESSAGE%", MultiChatUtil.approximateHexCodes(originalTranslated))); } else { - onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', message))); + onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(message, "%MESSAGE%", originalTranslated)); } } @@ -154,6 +154,7 @@ public static void sendMessage(String message, String playerName, TGroupChatInfo } - ConsoleManager.logGroupChat(message); + ConsoleManager.logGroupChat(originalMessage); + } } From 6a936bcaf503f8f0713ba803aa359f4f33ad6b00 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Mon, 3 Aug 2020 12:03:47 +0100 Subject: [PATCH 087/188] Fixed console group chat logging --- .../olivermartin/multichat/bungee/commands/GCCommand.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GCCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GCCommand.java index 156d6e7d..a7c76bd9 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GCCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GCCommand.java @@ -6,6 +6,7 @@ import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.ProxyServer; +import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.plugin.Command; import xyz.olivermartin.multichat.bungee.ChatControl; @@ -154,7 +155,10 @@ public static void sendMessage(String originalMessage, String playerName, TGroup } - ConsoleManager.logGroupChat(originalMessage); - + BaseComponent[] finalMessage = ProxyJsonUtils.parseMessage(MultiChatUtil.approximateHexCodes(message), "%MESSAGE%", MultiChatUtil.approximateHexCodes(originalTranslated)); + String consoleMessage = ""; + for (BaseComponent bc : finalMessage) consoleMessage += bc.toLegacyText(); + ConsoleManager.logGroupChat(consoleMessage); + } } From c7dd8366b1d7d3f18bae11296e720c5b66a6ae93 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Mon, 3 Aug 2020 12:18:13 +0100 Subject: [PATCH 088/188] Fix multiple network join message bug --- .../common/listeners/ProxyLogoutListener.java | 3 +++ .../listeners/ProxyServerConnectedListener.java | 4 ++++ .../proxy/common/storage/ProxyDataStore.java | 17 +++++++++++++++++ 3 files changed, 24 insertions(+) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLogoutListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLogoutListener.java index 9435e63b..bc62fc25 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLogoutListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLogoutListener.java @@ -74,6 +74,9 @@ public void onLogout(PlayerDisconnectEvent event) { ConsoleManager.log("Un-Registered player " + player.getName()); + // Remove player from the "joined network" list + ds.getJoinedNetwork().remove(player.getUniqueId()); + // If we are handling the quit messages, then handle them... if ( ConfigManager.getInstance().getHandler(ConfigFile.JOIN_MESSAGES).getConfig().getBoolean("showquit") == true ) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyServerConnectedListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyServerConnectedListener.java index ccf88437..7bdf05aa 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyServerConnectedListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyServerConnectedListener.java @@ -82,6 +82,10 @@ public void onServerConnected(ServerConnectedEvent event) { UUIDNameManager.addNew(uuid, player.getName()); ConsoleManager.log("Refreshed UUID-Name lookup: " + uuid.toString()); + // If player is only switching server (not joining for first time) then leave now + if (ds.getJoinedNetwork().contains(player.getUniqueId())) return; + ds.getJoinedNetwork().add(player.getUniqueId()); + // If MultiChat is handling join messages... if (ConfigManager.getInstance().getHandler(ConfigFile.JOIN_MESSAGES).getConfig().getBoolean("showjoin") || ConfigManager.getInstance().getHandler(ConfigFile.JOIN_MESSAGES).getConfig().getBoolean("welcome") diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/ProxyDataStore.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/ProxyDataStore.java index ce52e646..e424100c 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/ProxyDataStore.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/storage/ProxyDataStore.java @@ -51,6 +51,9 @@ public class ProxyDataStore { // Which staff are hidden? private Set hiddenStaff = new HashSet(); + // Which players have had their join message processed for the network + private Set joinedNetwork = new HashSet(); + public synchronized boolean isChatFrozen() { return this.chatFrozen; } @@ -185,4 +188,18 @@ public void setLocalSpy(List localSpy) { this.localSpy = localSpy; } + /** + * @return the joinedNetwork + */ + public Set getJoinedNetwork() { + return joinedNetwork; + } + + /** + * @param joinedNetwork the joinedNetwork to set + */ + public void setJoinedNetwork(Set joinedNetwork) { + this.joinedNetwork = joinedNetwork; + } + } From 7ac7785d52f9d441ff1a8da15bbf5b9b299a55e0 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Mon, 3 Aug 2020 14:45:48 +0100 Subject: [PATCH 089/188] Fixed bug with injection copying in first part of component --- .../proxy/common/ProxyJsonUtils.java | 5 +- .../common/listeners/ProxyLogoutListener.java | 32 +++++++----- .../ProxyServerConnectedListener.java | 51 +++++++++---------- 3 files changed, 47 insertions(+), 41 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyJsonUtils.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyJsonUtils.java index d4fd9787..1b89d112 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyJsonUtils.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyJsonUtils.java @@ -167,19 +167,22 @@ public static BaseComponent[] merge(boolean injectFormatting, int size, BaseComp BaseComponent[] merged = new BaseComponent[size]; BaseComponent previous = null; + boolean first = true; int counter = 0; for (BaseComponent[] bca : baseComponentArrays) { for (BaseComponent bc : bca) { - if (injectFormatting && previous != null) bc.copyFormatting(previous, false); + if (!first && injectFormatting && previous != null) bc.copyFormatting(previous, false); merged[counter++] = bc; previous = bc; } + first = false; + } return merged; diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLogoutListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLogoutListener.java index bc62fc25..40f516cb 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLogoutListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLogoutListener.java @@ -2,9 +2,7 @@ import java.util.UUID; -import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.ProxyServer; -import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.event.PlayerDisconnectEvent; import net.md_5.bungee.api.plugin.Listener; @@ -20,11 +18,25 @@ import xyz.olivermartin.multichat.bungee.PlayerMetaManager; import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.ProxyJsonUtils; +import xyz.olivermartin.multichat.proxy.common.ProxyUtils; import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; public class ProxyLogoutListener implements Listener { + private void displayMessage(ProxiedPlayer player, String message) { + + if (player.getServer() == null) return; + + message = ProxyUtils.translateColourCodes(message); + + if (MultiChat.legacyServers.contains(player.getServer().getInfo().getName())) message = MultiChatUtil.approximateHexCodes(message); + + player.sendMessage(ProxyJsonUtils.parseMessage(message)); + + } + @EventHandler(priority = EventPriority.LOWEST) public void onLogout(PlayerDisconnectEvent event) { @@ -86,28 +98,20 @@ public void onLogout(PlayerDisconnectEvent event) { // Replace the placeholders ChatManipulation chatman = new ChatManipulation(); - joinformat = MultiChatUtil.reformatRGB(chatman.replaceJoinMsgVars(joinformat, player.getName())); - silentformat = MultiChatUtil.reformatRGB(chatman.replaceJoinMsgVars(silentformat, player.getName())); + joinformat = chatman.replaceJoinMsgVars(joinformat, player.getName()); + silentformat = chatman.replaceJoinMsgVars(silentformat, player.getName()); // Broadcast for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { if (!player.hasPermission("multichat.staff.silentjoin")) { - if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { - onlineplayer.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(ChatColor.translateAlternateColorCodes('&', joinformat)))); - } else { - onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', joinformat))); - } + displayMessage(onlineplayer, joinformat); } else { if (onlineplayer.hasPermission("multichat.staff.silentjoin") ) { - if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { - onlineplayer.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(ChatColor.translateAlternateColorCodes('&', silentformat)))); - } else { - onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', silentformat))); - } + displayMessage(onlineplayer, silentformat); } } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyServerConnectedListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyServerConnectedListener.java index 7bdf05aa..bb241de0 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyServerConnectedListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyServerConnectedListener.java @@ -3,9 +3,7 @@ import java.util.UUID; import de.myzelyam.api.vanish.BungeeVanishAPI; -import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.ProxyServer; -import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.event.ServerConnectedEvent; import net.md_5.bungee.api.plugin.Listener; @@ -19,12 +17,29 @@ import xyz.olivermartin.multichat.bungee.UUIDNameManager; import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.ProxyJsonUtils; +import xyz.olivermartin.multichat.proxy.common.ProxyUtils; import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; public class ProxyServerConnectedListener implements Listener { + private void displayMessage(ProxiedPlayer player, ProxiedPlayer sender, String senderServer, String message) { + + message = ProxyUtils.translateColourCodes(message); + + if (player.getUniqueId().equals(sender.getUniqueId())) { + if (MultiChat.legacyServers.contains(senderServer)) message = MultiChatUtil.approximateHexCodes(message); + } else { + if (player.getServer() == null) return; + if (MultiChat.legacyServers.contains(player.getServer().getInfo().getName())) message = MultiChatUtil.approximateHexCodes(message); + } + + player.sendMessage(ProxyJsonUtils.parseMessage(message)); + + } + @EventHandler(priority = EventPriority.HIGHEST) public void onServerConnected(ServerConnectedEvent event) { @@ -104,10 +119,10 @@ public void onServerConnected(ServerConnectedEvent event) { // Replace the placeholders ChatManipulation chatman = new ChatManipulation(); // TODO Legacy - joinformat = MultiChatUtil.reformatRGB(chatman.replaceJoinMsgVars(joinformat, player.getName())); - silentformat = MultiChatUtil.reformatRGB(chatman.replaceJoinMsgVars(silentformat, player.getName())); - welcomeMessage = MultiChatUtil.reformatRGB(chatman.replaceJoinMsgVars(welcomeMessage, player.getName())); - privateWelcomeMessage = MultiChatUtil.reformatRGB(chatman.replaceJoinMsgVars(privateWelcomeMessage, player.getName())); + joinformat = chatman.replaceJoinMsgVars(joinformat, player.getName()); + silentformat = chatman.replaceJoinMsgVars(silentformat, player.getName()); + welcomeMessage = chatman.replaceJoinMsgVars(welcomeMessage, player.getName()); + privateWelcomeMessage = chatman.replaceJoinMsgVars(privateWelcomeMessage, player.getName()); // Check which messages should be broadcast boolean broadcastWelcome = ConfigManager.getInstance().getHandler(ConfigFile.JOIN_MESSAGES).getConfig().getBoolean("welcome", true); @@ -120,30 +135,18 @@ public void onServerConnected(ServerConnectedEvent event) { if (broadcastJoin) { if (firstJoin && broadcastWelcome) { - if (MultiChat.legacyServers.contains(event.getServer().getInfo().getName())) { - onlineplayer.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(ChatColor.translateAlternateColorCodes('&', welcomeMessage)))); - } else { - onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', welcomeMessage))); - } + displayMessage(onlineplayer, event.getPlayer(), event.getServer().getInfo().getName(), welcomeMessage); } if (firstJoin && privateWelcome && onlineplayer.getName().equals(player.getName())) { - if (MultiChat.legacyServers.contains(event.getServer().getInfo().getName())) { - onlineplayer.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(ChatColor.translateAlternateColorCodes('&', privateWelcomeMessage)))); - } else { - onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', privateWelcomeMessage))); - } + displayMessage(onlineplayer, event.getPlayer(), event.getServer().getInfo().getName(), privateWelcomeMessage); } if (ConfigManager.getInstance().getHandler(ConfigFile.JOIN_MESSAGES).getConfig().getBoolean("showjoin")) { - if (MultiChat.legacyServers.contains(event.getServer().getInfo().getName())) { - onlineplayer.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(ChatColor.translateAlternateColorCodes('&', joinformat)))); - } else { - onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', joinformat))); - } + displayMessage(onlineplayer, event.getPlayer(), event.getServer().getInfo().getName(), joinformat); } } else { @@ -152,11 +155,7 @@ public void onServerConnected(ServerConnectedEvent event) { if (ConfigManager.getInstance().getHandler(ConfigFile.JOIN_MESSAGES).getConfig().getBoolean("showjoin")) { if (onlineplayer.hasPermission("multichat.staff.silentjoin") ) { - if (MultiChat.legacyServers.contains(event.getServer().getInfo().getName())) { - onlineplayer.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(ChatColor.translateAlternateColorCodes('&', silentformat)))); - } else { - onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&', silentformat))); - } + displayMessage(onlineplayer, event.getPlayer(), event.getServer().getInfo().getName(), silentformat); } } From 66c08ae91c7d7db1c500326656d94edb57fd6aab Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Mon, 3 Aug 2020 14:55:51 +0100 Subject: [PATCH 090/188] Support JSON in bulletins --- .../olivermartin/multichat/bungee/Bulletins.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Bulletins.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Bulletins.java index 077bd4cf..00834dbc 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Bulletins.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Bulletins.java @@ -4,14 +4,14 @@ import java.util.Iterator; import java.util.concurrent.TimeUnit; -import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.ProxyServer; -import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.scheduler.ScheduledTask; import xyz.olivermartin.multichat.bungee.events.PostBroadcastEvent; import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.ProxyJsonUtils; +import xyz.olivermartin.multichat.proxy.common.ProxyUtils; /** * Bulletins Management @@ -74,7 +74,7 @@ public static void stopBulletins() { public static void addBulletin(String message) { synchronized (bulletin) { - bulletin.add(MultiChatUtil.reformatRGB(message)); + bulletin.add(message); } } @@ -112,14 +112,16 @@ public void run() { message = ChatControl.applyChatRules(message, "bulletins", "").get(); + message = ProxyUtils.translateColourCodes(message); + for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { - onlineplayer.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(ChatColor.translateAlternateColorCodes('&',message)))); + onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(MultiChatUtil.approximateHexCodes(message))); } else { - onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&',message))); + onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(message)); } } - + // Trigger PostBroadcastEvent ProxyServer.getInstance().getPluginManager().callEvent(new PostBroadcastEvent("bulletin", message)); From 4f952ec69944493b89d8ec2860d6d2d3bc62682c Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Mon, 3 Aug 2020 15:07:48 +0100 Subject: [PATCH 091/188] Display full JSON formatting in /bulletin list --- .../multichat/bungee/MessageManager.java | 18 ++++++++++++++---- .../bungee/commands/BulletinCommand.java | 2 +- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MessageManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MessageManager.java index 0caee278..1ac9a551 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MessageManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MessageManager.java @@ -427,18 +427,22 @@ public static String getMessage(String id) { } public static void sendMessage(CommandSender sender, String id) { - handleSend(sender, id, getPrefix() + "+++", null); + handleSend(sender, id, getPrefix() + "+++", null, false); } public static void sendSpecialMessage(CommandSender sender, String id, String special) { - handleSend(sender, id, getPrefix() + "+++", special); + handleSend(sender, id, getPrefix() + "+++", special, false); + } + + public static void sendSpecialMessage(CommandSender sender, String id, String special, boolean specialJson) { + handleSend(sender, id, getPrefix() + "+++", special, specialJson); } public static void sendSpecialMessageWithoutPrefix(CommandSender sender, String id, String special) { - handleSend(sender, id, "", special); + handleSend(sender, id, "", special, false); } - private static void handleSend(CommandSender sender, String id, String prefix, String special) { + private static void handleSend(CommandSender sender, String id, String prefix, String special, boolean specialJson) { boolean isSpecial = special != null; @@ -460,6 +464,12 @@ private static void handleSend(CommandSender sender, String id, String prefix, S if (isSpecial) special = MultiChatUtil.approximateHexCodes(special); } + // If we want to treat the "Special" part as Json, then we will parse it here and treat it as a non special message + if (specialJson) { + message = message.replace("%SPECIAL%", special); + isSpecial = false; + } + // Parse & send message if (isSpecial) { sender.sendMessage(ProxyJsonUtils.parseMessage(message, "%SPECIAL%", special)); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/BulletinCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/BulletinCommand.java index 6719a35f..50dd76d9 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/BulletinCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/BulletinCommand.java @@ -47,7 +47,7 @@ public void execute(CommandSender sender, String[] args) { MessageManager.sendMessage(sender, "command_bulletin_list"); while (it.hasNext()) { counter++; - MessageManager.sendSpecialMessage(sender, "command_bulletin_list_item", counter + ": " + it.next()); + MessageManager.sendSpecialMessage(sender, "command_bulletin_list_item", counter + ": +++" + it.next(), true); } } else { From 469aa9b8360cac94c28fe5b85941effcbd586c8b Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Mon, 3 Aug 2020 15:15:24 +0100 Subject: [PATCH 092/188] Implemented JSON into announcements --- .../multichat/bungee/Announcements.java | 18 +++++++++++------- .../bungee/commands/AnnouncementCommand.java | 2 +- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Announcements.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Announcements.java index 58ec0f09..8015902f 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Announcements.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Announcements.java @@ -4,14 +4,14 @@ import java.util.Map; import java.util.concurrent.TimeUnit; -import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.ProxyServer; -import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.scheduler.ScheduledTask; import xyz.olivermartin.multichat.bungee.events.PostBroadcastEvent; import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; +import xyz.olivermartin.multichat.proxy.common.ProxyJsonUtils; +import xyz.olivermartin.multichat.proxy.common.ProxyUtils; /** * Announcements Management @@ -39,11 +39,13 @@ public void run() { message = ChatControl.applyChatRules(message, "announcements", "").get(); + message = ProxyUtils.translateColourCodes(message); + for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { - onlineplayer.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(ChatColor.translateAlternateColorCodes('&',message)))); + onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(MultiChatUtil.approximateHexCodes(message))); } else { - onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&',message))); + onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(message)); } } @@ -94,7 +96,7 @@ public static boolean addAnnouncement(String name, String message) { if (!announcements.containsKey(name.toLowerCase())) { - announcements.put(name.toLowerCase(), MultiChatUtil.reformatRGB(message)); + announcements.put(name.toLowerCase(), message); return true; } else { @@ -137,11 +139,13 @@ public static void playAnnouncement(String name) { message = ChatControl.applyChatRules(message, "announcements", "").get(); + message = ProxyUtils.translateColourCodes(message); + for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { - onlineplayer.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(ChatColor.translateAlternateColorCodes('&',message)))); + onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(MultiChatUtil.approximateHexCodes(message))); } else { - onlineplayer.sendMessage(TextComponent.fromLegacyText(ChatColor.translateAlternateColorCodes('&',message))); + onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(message)); } } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/AnnouncementCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/AnnouncementCommand.java index c0470ce6..19bd258e 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/AnnouncementCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/AnnouncementCommand.java @@ -44,7 +44,7 @@ public void execute(CommandSender sender, String[] args) { String currentItem; while (it.hasNext()) { currentItem = it.next(); - MessageManager.sendSpecialMessage(sender, "command_announcement_list_item", currentItem + ": " + announcementList.get(currentItem)); + MessageManager.sendSpecialMessage(sender, "command_announcement_list_item", currentItem + ": +++" + announcementList.get(currentItem), true); } } else if (Announcements.existsAnnouncemnt(args[0].toLowerCase())) { From 94bb9c1d2be74f16112dd5655ac28d33959111d6 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Mon, 3 Aug 2020 15:22:44 +0100 Subject: [PATCH 093/188] Added %SERVER% placeholder to join / quit / welcome messages (& JSON) --- .../olivermartin/multichat/bungee/ChatManipulation.java | 7 ++++--- .../proxy/common/listeners/ProxyLogoutListener.java | 4 ++-- .../common/listeners/ProxyServerConnectedListener.java | 8 ++++---- multichat/src/main/resources/joinmessages.yml | 4 ++++ multichat/src/main/resources/joinmessages_fr.yml | 3 +++ 5 files changed, 17 insertions(+), 9 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatManipulation.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatManipulation.java index d8680433..106b8c3a 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatManipulation.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ChatManipulation.java @@ -154,10 +154,11 @@ public String replaceGroupChatVars(String messageFormat, String sendername, Stri } - public String replaceJoinMsgVars(String MessageFormat, String sendername) { + public String replaceJoinMsgVars(String messageFormat, String senderName, String serverName) { - MessageFormat = MessageFormat.replace("%NAME%", sendername); - return MessageFormat; + messageFormat = messageFormat.replace("%NAME%", senderName); + messageFormat = messageFormat.replace("%SERVER%", serverName); + return messageFormat; } } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLogoutListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLogoutListener.java index 40f516cb..cbadf57e 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLogoutListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLogoutListener.java @@ -98,8 +98,8 @@ public void onLogout(PlayerDisconnectEvent event) { // Replace the placeholders ChatManipulation chatman = new ChatManipulation(); - joinformat = chatman.replaceJoinMsgVars(joinformat, player.getName()); - silentformat = chatman.replaceJoinMsgVars(silentformat, player.getName()); + joinformat = chatman.replaceJoinMsgVars(joinformat, player.getName(), player.getServer().getInfo().getName()); + silentformat = chatman.replaceJoinMsgVars(silentformat, player.getName(), player.getServer().getInfo().getName()); // Broadcast for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyServerConnectedListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyServerConnectedListener.java index bb241de0..8ff9dcf3 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyServerConnectedListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyServerConnectedListener.java @@ -119,10 +119,10 @@ public void onServerConnected(ServerConnectedEvent event) { // Replace the placeholders ChatManipulation chatman = new ChatManipulation(); // TODO Legacy - joinformat = chatman.replaceJoinMsgVars(joinformat, player.getName()); - silentformat = chatman.replaceJoinMsgVars(silentformat, player.getName()); - welcomeMessage = chatman.replaceJoinMsgVars(welcomeMessage, player.getName()); - privateWelcomeMessage = chatman.replaceJoinMsgVars(privateWelcomeMessage, player.getName()); + joinformat = chatman.replaceJoinMsgVars(joinformat, player.getName(), event.getServer().getInfo().getName()); + silentformat = chatman.replaceJoinMsgVars(silentformat, player.getName(), event.getServer().getInfo().getName()); + welcomeMessage = chatman.replaceJoinMsgVars(welcomeMessage, player.getName(), event.getServer().getInfo().getName()); + privateWelcomeMessage = chatman.replaceJoinMsgVars(privateWelcomeMessage, player.getName(), event.getServer().getInfo().getName()); // Check which messages should be broadcast boolean broadcastWelcome = ConfigManager.getInstance().getHandler(ConfigFile.JOIN_MESSAGES).getConfig().getBoolean("welcome", true); diff --git a/multichat/src/main/resources/joinmessages.yml b/multichat/src/main/resources/joinmessages.yml index 6710e4f6..875599df 100644 --- a/multichat/src/main/resources/joinmessages.yml +++ b/multichat/src/main/resources/joinmessages.yml @@ -29,6 +29,7 @@ showquit: true # USES STANDARD MINECRAFT '&X' COLOUR/FORMAT CODES # %NAME% = The name of the sender +# %SERVER% = The server of the sender # NETWORK join message @@ -55,6 +56,7 @@ welcome: true # Define the welcome message here # USES STANDARD MINECRAFT '&X' COLOUR/FORMAT CODES # %NAME% = The name of the sender +# %SERVER% = The server of the sender welcome_message: "&dWelcome %NAME% to the network for the first time!" @@ -65,4 +67,6 @@ private_welcome: false # Define the private welcome message here # USES STANDARD MINECRAFT '&X' COLOUR/FORMAT CODES # %NAME% = The name of the sender +# %SERVER% = The server of the sender + private_welcome_message: "&5Hi there %NAME%, please make sure you read the /rules!" diff --git a/multichat/src/main/resources/joinmessages_fr.yml b/multichat/src/main/resources/joinmessages_fr.yml index 04a4c5f0..82d160ff 100644 --- a/multichat/src/main/resources/joinmessages_fr.yml +++ b/multichat/src/main/resources/joinmessages_fr.yml @@ -34,6 +34,7 @@ showquit: true # Utilisez les code couleur de minecraft Standard '&X' COLOUR/FORMAT CODES # %NAME% = le nom du joueur +# %SERVER% = le serveur du joueur # Message de connexion sur le réseaux de serveur @@ -61,6 +62,7 @@ welcome: true # Définissez le message de bienvenue ci-dessous # Utilisez les code couleur de minecraft Standard '&X' COLOUR/FORMAT CODES # %NAME% = Le nom du joueur +# %SERVER% = le serveur du joueur welcome_message: "&dBienvenue %NAME% pour votre première connexion sur nos serveurs!" @@ -71,5 +73,6 @@ private_welcome: false # Définissez le message de bienvenue ci-dessous # Utilisez les code couleur de minecraft Standard '&X' COLOUR/FORMAT CODES # %NAME% = Le nom du joueur +# %SERVER% = le serveur du joueur private_welcome_message: "&dSalut %NAME%! S'il vous plaît lire les règles!" From e8fb5c391493315d524b1e171b1d4d634cd82dde Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Mon, 3 Aug 2020 15:24:35 +0100 Subject: [PATCH 094/188] Fix fr translation --- multichat/src/main/resources/joinmessages_fr.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/multichat/src/main/resources/joinmessages_fr.yml b/multichat/src/main/resources/joinmessages_fr.yml index 82d160ff..dd4604fd 100644 --- a/multichat/src/main/resources/joinmessages_fr.yml +++ b/multichat/src/main/resources/joinmessages_fr.yml @@ -73,6 +73,6 @@ private_welcome: false # Définissez le message de bienvenue ci-dessous # Utilisez les code couleur de minecraft Standard '&X' COLOUR/FORMAT CODES # %NAME% = Le nom du joueur -# %SERVER% = le serveur du joueur +# %SERVER% = le serveur du joueurs private_welcome_message: "&dSalut %NAME%! S'il vous plaît lire les règles!" From 7c2bf83fed10dd3c1c5dc06aa3ec0d237f9f6ee4 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Mon, 3 Aug 2020 15:42:01 +0100 Subject: [PATCH 095/188] MultiChat v1.10 beta 5 includes the new JSON support --- .../releases/1.10/multichat-1.10-beta.5.jar | Bin 0 -> 648685 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 multichat/releases/1.10/multichat-1.10-beta.5.jar diff --git a/multichat/releases/1.10/multichat-1.10-beta.5.jar b/multichat/releases/1.10/multichat-1.10-beta.5.jar new file mode 100644 index 0000000000000000000000000000000000000000..7dfcc0d718cfb5a95c630aff5d196a6171e00834 GIT binary patch literal 648685 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
9a@Qc-@l9fHzTfYK(7+V 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≤q)d1jAF~y%5kV zI&p;^Sa7jigGtirs&Y}obE)O+l7?xj9#J43KEW~+5^r?~4*4=I<&=d7KR1hxHOFCp zkKt=Tops8+Lo=tY=`o9070W8IhTCgi0OmC6N`X(yjggMuW35g{v2w-P=j>j0io{zS z|IU5ob410QSlAr5erMYH5+p)Zw!qI4z#SF=>cO#G7u=3^ z*Jp?v5cTXt;ba3{*foe|&q%zSo`0Lo{kA?r!C;r`=QI0S`I_tSI8u}=p2Pk2N@_hg z^+}Vp@@MqfJ$NtWZ29=|G}J4Y)tQZXN`Nzy;)>0q`D%K|F@7XBl<}P-JGXs+Y(Kj? z(#J|=%xDL{LzaZBGr3~tme1l9n^p|ZM2tnGyO_*7ClT_w3;$>khLXefSf3 zcHxHfHl^?4UbE{HEx(qh=#_4ToUK-AN7E(`YNh*J%8B#AEVH`sbCoT?xrS3RP(j{s z-y?;$%o4M3TrJ9Ka5CYD5w$5Ex4UUg{Q6&F{#_VBRK+h{ArS80)f4}dh$U}iZ)EYm zBUVkS-9OF+L!ZfFAY;Ko(5uEe#KE|Y_BG856xOr?Kj4V~B6f;~a*O2JZ7UPn6dEsW zhDBQ-uc4#d{9O;C_ji*Qb%VOQ(WRmdFmO7tKJogz8HezIz0!m=v^bljz~=Nd@&T2x`UWVxUph}y zC?EehtZRn0A!uYM!LgsU$2{8Ep^LEiy+MSI-4JfgG1zmB-#h~cT>SmFNU)rsJ>R!o&Jg9Q3T!&* zwIhj-UQalt8XC2Do0?d~NHQl!gBz4*d@;v)oC`^#AK7#IAj2zo-8R@Lu$(2@*K#AM zdbr_}xqwX58u(Unst7n=h6)2z=kz-wZxqZy3B{n(>Kd1ZXEcA1^|w}@$EO< ziDldKP#0_2aG4DCQvp?bs=gGUK4H#c3e0jIbEj#EQ_2aD(XImuzBqSRC?7Z>_1&HB z;cmV`jO^<@@&FU}PU7KXW)s2%-4=TFOC^MnQ?8iJwXo|t`DmHkBZsu1bB28E7xaXUj~1WV;#GI(gWRf{hc7vB^fRyjP;kG z%|e~ew*XC@YpG5H+SiGmhEjF8X?)c?GdZE;citRjQV3vh(x|$iYZ6`3U$oep^cVCH zT{afJg3mmqEOI~Vdzo8`q(WCqb6iqZUM#=H*l|LxYr4jEu}|;D_+(v8T{Qlm><3^~}}I zDOf%EZOoYF#U&KaxRsj27Fy97y0AM8@&^V2K>2d$s9EOxfuo{+ zL)lX+=<_e8)`5pv7iRt?;e5&$kePHHSHLevLuJ~iEO=@d?rMzJ>jq}VDv|Zw8sl$U zN*dj3`?0D6X}dIhxH#WlJQ4~(az5chrgj@*Ra}xJv`xp165`(fg#%6JgSegg!bH&i z+jAg}|89=!;$Um`e{31K8qY4Mk{BPWY4oJ9OuJASV75a@E6Y?nQg}pUT41&syGh(2 zD?M7)YoIPvtfWJeew6Ja_O<-KA9K$VLuyC>H6;&+Y9D24U3u8}5)JixH1dDiw_dya zCA*gl1AK02zxiAl2KiW+=PRrL1nBWqUHCR+GRc8+x2jp`IE>oKDrK|H`>TL)>ogAP zT&hr^A#^((S?nzKOde)`@qTK}&O(1&FAIcR8ZK?|&Lf79dS!wlI7{0>+F8cf?F8%Ld{ln; zv8a9}P%f@E&H-E6L0ld~XG+v@O;Y{Sp>80`s%;F!U?}%lAT|{qS{~5=j%<3^O{c1L zM`=!&(e7;HBQC?~* zZ~;I{A;CG)QYjWL_?q5>RttlF>V7vA*HX2)4b5DnrQ#!rHBPJ7F-*(Z4W_0w4hI=G znpn8~e!ve;GDnrE{y?Cy@=687=?VL&yKOW78}%Cmkpa5uTHT6#exw?AsJ@3&u!4E% zo_gJwz4*7Qe*-+Fr&l`!qI=U0+Am{6OiJ#cvR%KE-&GXwa`Jy@Mi0SMqQwLpvdiq$ zNdpGwVyOsFEz7&)y)N%&cDNWS>AC}lM*8SH&aiWNoy8_g&Vx(v6~SK9!7ds~(pg~B zAJUR#Xiuoaa+=|@F=N>;6{cqBmWXl=Xp4w-!e4Z-|)@0hn#VX1DlDE9JALLL?Z!VGEe5y9IWXbA=!yd=_ZM{j=+wVHBP z*x&fP72MC$$nyL-E&jQKOuHs z|3I#q>Agn%(0Nbg()a<7Qh0L_b%VFKMC;IlU)az_LZlVyNLyDA!qn$RzVBo+t#reEqFtaZugwZUTa6te zW4;~cihJ_;*VnVqz~A8L3rHvYGF_MwE-G{45}R<+Kex5VbL%7c*=G+W<}@F!&MHo1 z4K+*VmjXtL1rNQs>&-e;Xfr&|bL`oZ%!Qpqu5kNXRDSRY+j6_T_8X*y$OCcC{mOz| zZt>5-{NlSq<`>pzNXMd+sSNKA0OYG+x(-*~#j=6G-1GDU_nRX^`j})!Mo8kmB_3f$ z2gs6s>+%@iZIp(L>dTfYRL2|j1C`& z&Z5{Jd@M8l349Hv8j4K^R@#XBX`O7^hJ+ug-}hft(l%_@-+ig}1jjHcGq4yB?j}C* z-9O&1Z%;kGJ4;;Rk02L0JX***$go5& z0tuZ(orhTR?h!+eDUmIP^J{D>Q2_lyMsT+AMn*t)+fQQA4vkB*1QDHZh+N^@$8%=j z#^k5C6?4g8pMxS^<7%FYz7R_+mb2+$dm1_TigfygY||v2+tQ=$koAHO+*m+Sb`U+} ziKr}3np(&F*u&n$p`u|;sbiw)vn5&1ci_tw*kOTGO=>R<19dM8^vlKHq(ZIia;0-K zJ>@2wJE~9rWcnrSb`?2XSN0HCs*@JLDcndQRy?!?)i|zl3cRX>{!H__u+~AA-b0JU zZ5LX*wehgKt>hUPuMD0Gr9eP!@+p2bM zq#%{L(J9zPvN5ty*u@-VwoU5P4hNPPg>u)+l=P-k_2$Il@8Jllp!njk#176#sd7e} zAQWxT8RcI=qMv@D82K_25!^T9dkR!IbA-&hb5#;J?P^78G$q#rv|Dv|yI^BssU~VT zY;nr(!MKt}585p-_PdJ?J5f}{Xx{z3qjw@rR-@J_EKXUmxjUst#cDg=8QjIY{#O-G~zUCKHovrP-iy z2?M+!I#_KO`tD%DzHk=NS-A15)Xa}^mi5$>`F;vB0HcTIqtgX_Z!21JaAg*VB z-P7OWc<;65htQ?nJO^%X+B(0n_5H3cR4#d9*Lq64?qbbV{D1|UTfhkKN7fzn54hiP zSN9qwuLsIJ9`qYcAr!&`+R%VIYHbJ)Iioe-Aq*G*R+$g4{%hK$69Ac21|1%vd7z+C ztQ?pfOst-Q-8PY1W^l_tX2rk)_oApD1<$A*xBrVtZ{*JW-n$_iE>g~26-YH%iPfJ0 zAd`?_3QU1OxA5`uAFW}2^G1+3G1BealqO)a}RCEkmaYtAP~MUjz=T2NRTG9@%q z8KP2Gdqy1cn!}H31z$68Ko!rY;)rz@MS6A>3^hmxXzQs+KbQenHHJLh2whEGNpb2= zoDs~M$zpeoHY+}*dlq^caQjpf)DwXj)h#w=$r;5Y7j1pS32y;K7^KKRn`!c8KH%~Q z8Tit1&SMLH#0}@oa!ePF!**E|_&N!H{Nb$!%=3Ntv-5ownSiO(%Q=-IP%XS5D(8RJ;$pbWm2nJ#(eB`B+ZH0;e5^`-H|ZI^gWK z)?!#O%gTl|XmfuOGV1=f7VYG|=>!7!9DpwIhpt?qYqfdgT>e7)=6b2rh)cH-uO7M4 zJrvVN!bX6zo7Rc*L&N60hjoA_mzrUQ4k5S<9C~$zx0JB?`?CyC9d?OqK=K-51;_6^ zK~VTq?1Fo8ALSKmYU134#lwwot~*rSt>L#a!e+l0(YiDp#s%5SH-YkZG{A6|I2?o0 zVf6f--Ty<`J9G&GZB3$S+pe^2+qP}nsE z0qr(1noE;?WFPU;HOVe)bE!j!RuIwL$TNx zjLxcsAfq$vwjeLj73KB08r8@LMbA%g{nNtjn9ne8k97o>*fvQwH z-}&v?y7mpgW%(yKxx{pM&AED?D7zlyRACepOIwuFQo~2=`CGt2EO~=S03LFGZM}qU z!8;OWNgS&vg<|{z+kXIJz#v$<;UDUxf&Vw;5&Q=r|6}C&4?u`n+Zq1LR{sY}|9^x~ z({TUi`tVb0q7}itjxs8H03@M_y;)z~6iz`hQe8PzUXBB8*918nbsWzy^%kj(M zmfrgNxp4^qcWC3Ev)&#$U@@7+&_Ka+ndZu#+=|1*Tg|mU-j&T9RmWhoCQFMWb((dk z>Z#aD_~kAw`#}KmvJrwTDz{IIF5=8(tDeGZf$6&haYcDp zaoNOM2yGofrDG(?pM`Q)8l^2OhXs^hwgjQokqr~euCXYKhgc?4l%6suFjH3=RmHE? zq>X>yWP|N6D!sX{&dOtjrNkhW%hZ5WFxn(js-|D%VpLLmpET1H4gIFMIl^K+{DNPB zxPZ`CB2y;V9fE&xR36!DwemA&gulzJ&#?EkGz${oP`*h9awFHeM~0) z*q=EPce+0*c(I;j37A<0)jOd&q(4)C2CBM>HQiw^D zc&!stvW7e<`}k^9rQ=&yZ3$hG&+>$E>MSUyz+zOC{H{<*AKE_xpE;<$7EXtK3`XUK z#Fp8a91RZAnq~-b5)0Bvb#LxNMCAq?R_xD`P05t_4w1ZA86el`mw8cVcHI1}R34w1*s zIWnJZnSZ~*7l))Oorp<$Fs4&i*79uh9zSLuuV?XiV+K2eds-9m1Gr7CLPTRJ`fhI& zvgRvF3kH^<{Uqd00FZVD(No$?5lC#3c(IY7CHBeDW-0YBNE)S8W(vAU%Vp|&7?&wQ zt_@cy(+M1lx2nKLA9f_{^*w3etxPldBGb}~Z&$@^MCG+%Yg5f->J4*qxw3_0DNfn9 zWSNojO=EsBPCjQw8?`z?U>+hmMMOA5ZQxrAPoOXQpAC2TSzie^6Rh0p0 zPgcd`8l0ocxWTDr9UYs4QES|j8d8~?#=xyv5L=yI2Gu0!$@fE`ZB&{)mXw=^Z)1eq zzCj>BrqUO0f81i|1gdidZc-IK5_x2qQ5PydvNf3rQomXItfwn%)k*g38P3Y_aC3m% z!$Ws~+|rGvoXDc;rc9qGh0JywssUaKke%WnWvD&O7DAZ_mPy;4sOL#{)s$bVCGx;z zvbEJVgY@>X3mSpLeEBEMZBNA+6qc+vc^hDqpR2!?VC5WO+{QD!wN@dVJ8zd(3h!j(Xe}keO5P#+`0+Tg}#tXLF zHzxu!8!AfT?t-W^jrYcSHH5({JjTW|YH7N4NPFa}AJNE)6>my1dqBg+es6d6ny4aR zI8p4}P>^&&E@#7C9J^&N8EgNdQ1XPK}B9Ns{2j#~W0e0-xo)yIgJbday;c_CG&oByQ_NVPxT zXa*UJGXLl*LA$R3!X_>d;WyCxIa6kV|cw3u1rs7QK}tE7s_oo7hP2+*-!cd&Y*fH2iv`J=g!HOw?9xb$8Yf3 z-{UmCAG{T&tk-)Fb1kV^ldRrfBwZLEE5uzZ&4JiA2%S9jA-U8#`n4ZY%OP)YF9#0h zj<8j=_T5VSJE~Xqmwo)5zS`|ab1vV&-GyOPwl1uR-uutp_v1e>`?=h7zsHV4^uK|s z`=`yKb^MG(zrX*hKlqb{&Jg>L`mK@w8~y)3_XkS|d?+>+~-W>UWEHT8gdK zqEiO@-(7psh;gQ|mSFUnJj^BqiBaNNe+c-SCyHJ3`v`- zx(^dRh-=3}Bs%Hn>ujVJ374*8g@+)hVl+^;TD+vXtt@8@%f2|U6$odF<^`99tXkmDxn~-%MPMBO5V2DrUO~UENv69a+|dG6wE&RWfD?5-Cf}nC;{2iBc~O zbVFt{5DOyMn(|gPFJeAo7mIk>F1&pgc2H!jm_Y~;>SCG?kEN`m-Kbhx-@+-8YuL2v z$7!G<8Rc|ZqLl9Mydk1L14fh~-fJ^IZ)mke#q_S29AY0R8N zQPP@%>098PKK|gg?n9!1p|DN6(HNAy9iAGrK#)(qmqB~Oev3JE3KUSNpgG1DzXzv% zoc^_eb;96Bz$6F(%$cTFUe8LyGDYu72G!5d(5Z9Q3SpFW9d``_>2t`6mFMeLo1qka z+-kOHYESjc1hXuZwYFb_Q>pf!n(^Z$VS&!W3mGjZGu@e>LR`F{#IP0}+O5Nq9q-=QSByt&^pxM>~n4Y?>aw-)V?yU$q ziUrMUNyGg%ruEkg-OLWzGSSs4cwyGOVV}F1it9IucS{g6L=`NzwQU;rEJ@XJVJuKj zwPjym;*kg9o|?WMf;xlxIDfnNe9X!6iKisXsqi`8ACw;C{?>cu!}h;+w>CoEVmH?^ zvD|Y3w~$TlA~a?P8p)51Z$IAJzR#&9x-%n8-2BGtEcP)kj>CfEu16|F8WmD}Iit{s z+@XIesDh4tjjFane6Lt`al2i#7V(*NCpAr$&fC+%Pi_7PiJt0zN-zABhh zbb=x{CNUc)S~}#SEBv|0EIJ>|o9PKA`%_)I2##cns}%2gjwM-kPy&L*ThwVzj}RB4 zu-oA?`+yGC@@(n5gjvfzBY%­S*`-)54x;$gG@MA)h5A+KS1VP_gfqt|n+cp>7} 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 z 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¬Mss$ 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 z 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

$$O`_9piF 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

x{b_ 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%0A$2~J@Ad%eK5d_m;-AXXU7saP7Xb+h*^cA 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�f1LYObSt!{6T874kmQ_#aT3tNCTmuqp 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℘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 z zWxBkUcJR|6%#^%^J!N!+r&qaxhfSWT9NrdiBId!~r_(l|=Q)67%3(xI?^IV{$7)QN zKg709eq(;M;$+3^=rLB}H~@v~`-UrUPNZvLd@X+mq2n&uwbbq?4Ykx-+E`JTh&A`&C8T0pyDZKy`C zNkEYBoAL|&k*O1rc?M%jg4SrmQu)xdG>Rh+dGc;)UkE)33Li~`4k?h2Jj#$N2YhDk zBt;&8Uq-s8ae8NkeDIj86qVL!NI`+IyzMH~m%LXHH@!RN6+5Gz(WdL}O4+dd27RV| zZnhVeYA0YqmF~=V;|p03=E}v7@hE27k3(U)$Iu|H%=ZsU$B>c6$Nv6CX(obW9ohjJ zARiXX1guWrJ|TL8Nu#cbRDM|lVsDO5X@R3p{`NbPR+qR6&5u;rZ`+6*XjF-InNG!| zot1|q+7cFyENtEx#v2GIy2WZTMrl%$4KvkVN>6 z-&{lDS6pss*1z9@G?=imbH`Oz=rgX(=K#kBKD+MW z*C#H4kK$60og`t;J=O1Q9pILt@1(0DP3m|^2xznIoJ#2X-Nm?ju-@B99kfwMYa|`T zkfO>k8qux?a|u2X_{Z#*Ra=+&b$k9J3imFb8R+D&)% zl?)Y*y?e}RLa9IU@u`cuAQOUkX|3<^?Lbzl+z_7gqSz-EkeyMH@RX#Gp+1W{`AS%^3 z$tW=yrc_OeniZF1JVB`vtk4}lUVQv7_(DUZ54yM&Fy3`Ee#r)f3|QU_SXUt#O(1y_ zC1bG-&zRwb`g}q)@$5~RSS==3)S{N_`QFvy=5WRZ2rlaJ&rEg!nO{6+D@bSlbh7?h zeip`yf|&I2fr$>all^HGIa-i^mO@U09Yu~?e;yC`=a5u5*91_e?L_Yc2|QYens3HJ z{xqd?DMHJAb+6oO+7cQs^0D_~51l-qv8aJ+oGlf4NR>^x9G}q6=V^FVAiNm!E;gS$ zqhz#^kdEhtPe#A(oqDr7Ky8)y(#HILhIIOd1YF9UVAdYL2dz6lWC$L9RgA#sEyP9$ zg<^K5WSE$YX{K~tIyRRwjfn#?j4B`NN&x50lmMvJ=#k4Dr~RYm?|i_aX{~T*`_IZD zi^&?DDvC1-uFQMu>U8W6eLWAXVTApE&6B~t4UT9QDNv3G9SL2b@a{KFvOslxj~-mX#9?MBDPg|XGq4j`ckahOJ!h%;~81bd=NY~ zBbDzZMHWk6zP4)#F11l?MCGPNo3~sBmc=j3JILYVY+jFFv@VLgoHgi+1KQhPxS)JT z4xGkh!i%z235C`VdL(C_yN(=z$9V1Z7`;gb7<(2{ZOM1Sf(>f7Fm4QRJg`8x*Lg7bUGe^33{a6Jf@J1FpWi3ETMOHhg0=*(YVB_9R(Ay6W;-}{0^MeEkvCL4BaBBuz{<#MA(;c$&ew0jFl=&_lwnwsSEAK%7 z%KXer5)i~Xhrjm?trrEq9gEI^GC%8zWYVI{cj_>(!DguY0=_+J)Q}rc95wHbVyTC*+Z#V zPD(B_bCu=WSZ!|k8UNVB{wR#Wn9$4lu-KcBSuaM$Ospqo=RSUK=0{ZAn*8l(gi;y$ zY;*%QpF7eB@*Hhg2fCSk9<)dVwPbt)Y^dVpu)js*tzlI7LpvyI1N~RgZC|hGlD1$vNyQ7)XQlZF!UTEu@Q%@@IwmAH$ zCZc%r533-}esq(xb&Y843W{jDe@magU>v}Hau`94dO@RbNfzKdI3x6 zfaTd<9+o9Ph+&n~De*Xq#IOhvLMM!tbd-q|8X^WH?9azvY%H7}Ea74@I~}PEQHArB z-uZ3D=7ahBV4gM*e%?}P@ Date: Mon, 3 Aug 2020 16:20:26 +0100 Subject: [PATCH 096/188] Move ProxyUtils to MultiChatUtil --- .../multichat/bungee/Announcements.java | 5 +-- .../multichat/bungee/Bulletins.java | 3 +- .../multichat/bungee/MessageManager.java | 5 +-- .../bungee/PrivateMessageManager.java | 9 ++-- .../multichat/bungee/StaffChatManager.java | 5 +-- .../bungee/commands/DisplayCommand.java | 3 +- .../multichat/bungee/commands/GCCommand.java | 7 ++- .../multichat/common/MultiChatUtil.java | 35 +++++++++++++++ .../{proxy => }/common/TranslateMode.java | 2 +- .../multichat/proxy/common/ProxyUtils.java | 43 ------------------- .../common/listeners/ProxyLogoutListener.java | 3 +- .../ProxyServerConnectedListener.java | 3 +- 12 files changed, 53 insertions(+), 70 deletions(-) rename multichat/src/main/java/xyz/olivermartin/multichat/{proxy => }/common/TranslateMode.java (90%) delete mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyUtils.java diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Announcements.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Announcements.java index 8015902f..47bb942d 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Announcements.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Announcements.java @@ -11,7 +11,6 @@ import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.ProxyJsonUtils; -import xyz.olivermartin.multichat.proxy.common.ProxyUtils; /** * Announcements Management @@ -39,7 +38,7 @@ public void run() { message = ChatControl.applyChatRules(message, "announcements", "").get(); - message = ProxyUtils.translateColourCodes(message); + message = MultiChatUtil.translateColourCodes(message); for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { @@ -139,7 +138,7 @@ public static void playAnnouncement(String name) { message = ChatControl.applyChatRules(message, "announcements", "").get(); - message = ProxyUtils.translateColourCodes(message); + message = MultiChatUtil.translateColourCodes(message); for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Bulletins.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Bulletins.java index 00834dbc..acaa4b7d 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Bulletins.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Bulletins.java @@ -11,7 +11,6 @@ import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.ProxyJsonUtils; -import xyz.olivermartin.multichat.proxy.common.ProxyUtils; /** * Bulletins Management @@ -112,7 +111,7 @@ public void run() { message = ChatControl.applyChatRules(message, "bulletins", "").get(); - message = ProxyUtils.translateColourCodes(message); + message = MultiChatUtil.translateColourCodes(message); for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MessageManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MessageManager.java index 1ac9a551..d2fa6b2b 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MessageManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MessageManager.java @@ -8,7 +8,6 @@ import net.md_5.bungee.config.Configuration; import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.ProxyJsonUtils; -import xyz.olivermartin.multichat.proxy.common.ProxyUtils; import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; /** @@ -448,8 +447,8 @@ private static void handleSend(CommandSender sender, String id, String prefix, S // Translate format codes String message = prefix + getMessage(id); - message = ProxyUtils.translateColourCodes(message); - if (isSpecial) special = ProxyUtils.translateColourCodes(special); + message = MultiChatUtil.translateColourCodes(message); + if (isSpecial) special = MultiChatUtil.translateColourCodes(special); // Handle legacy servers if (sender instanceof ProxiedPlayer) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PrivateMessageManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PrivateMessageManager.java index 5edfe1aa..ab916182 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PrivateMessageManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PrivateMessageManager.java @@ -7,7 +7,6 @@ import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.ProxyJsonUtils; -import xyz.olivermartin.multichat.proxy.common.ProxyUtils; import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; @@ -46,8 +45,8 @@ private String getSpyFormat() { private void displayMessage(ProxiedPlayer player, String rawMessage, String replacement) { - rawMessage = ProxyUtils.translateColourCodes(rawMessage); - replacement = ProxyUtils.translateColourCodes(replacement); + rawMessage = MultiChatUtil.translateColourCodes(rawMessage); + replacement = MultiChatUtil.translateColourCodes(replacement); if (MultiChat.legacyServers.contains(player.getServer().getInfo().getName())) { rawMessage = MultiChatUtil.approximateHexCodes(rawMessage); @@ -60,8 +59,8 @@ private void displayMessage(ProxiedPlayer player, String rawMessage, String repl private void displayConsoleMessage(String rawMessage, String replacement) { - rawMessage = MultiChatUtil.approximateHexCodes(ProxyUtils.translateColourCodes(rawMessage)); - replacement = MultiChatUtil.approximateHexCodes(ProxyUtils.translateColourCodes(replacement)); + rawMessage = MultiChatUtil.approximateHexCodes(MultiChatUtil.translateColourCodes(rawMessage)); + replacement = MultiChatUtil.approximateHexCodes(MultiChatUtil.translateColourCodes(replacement)); ProxyServer.getInstance().getConsole().sendMessage(ProxyJsonUtils.parseMessage(rawMessage, "%MESSAGE%", replacement)); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/StaffChatManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/StaffChatManager.java index 0261c00b..6ac93bdd 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/StaffChatManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/StaffChatManager.java @@ -10,7 +10,6 @@ import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.ProxyJsonUtils; -import xyz.olivermartin.multichat.proxy.common.ProxyUtils; import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; @@ -82,8 +81,8 @@ private void sendStaffChatMessage(String id, String username, String displayname message = chatfix.replaceAdminChatVars(messageFormat, username, displayname, server, original, onlineplayer); } - message = ProxyUtils.translateColourCodes(message); - String originalTranslated = ProxyUtils.translateColourCodes(original); + message = MultiChatUtil.translateColourCodes(message); + String originalTranslated = MultiChatUtil.translateColourCodes(original); if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { message = MultiChatUtil.approximateHexCodes(message); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/DisplayCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/DisplayCommand.java index c9435bb5..1e009739 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/DisplayCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/DisplayCommand.java @@ -13,7 +13,6 @@ import xyz.olivermartin.multichat.bungee.events.PostBroadcastEvent; import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.ProxyJsonUtils; -import xyz.olivermartin.multichat.proxy.common.ProxyUtils; import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; @@ -50,7 +49,7 @@ public static void displayMessage(String message) { Configuration config = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig(); message = ChatControl.applyChatRules(message, "display_command", "").get(); - message = ProxyUtils.translateColourCodes(message); + message = MultiChatUtil.translateColourCodes(message); for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GCCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GCCommand.java index a7c76bd9..4336d227 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GCCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GCCommand.java @@ -19,7 +19,6 @@ import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.ProxyJsonUtils; -import xyz.olivermartin.multichat.proxy.common.ProxyUtils; import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; @@ -126,8 +125,8 @@ public static void sendMessage(String originalMessage, String playerName, TGroup String messageFormat = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString(ConfigValues.Config.GroupChat.FORMAT); String message = chatfix.replaceGroupChatVars(messageFormat, playerName, originalMessage, groupInfo.getName()); - message = ProxyUtils.translateColourCodes(message); - String originalTranslated = ProxyUtils.translateColourCodes(originalMessage); + message = MultiChatUtil.translateColourCodes(message); + String originalTranslated = MultiChatUtil.translateColourCodes(originalMessage); for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { @@ -159,6 +158,6 @@ public static void sendMessage(String originalMessage, String playerName, TGroup String consoleMessage = ""; for (BaseComponent bc : finalMessage) consoleMessage += bc.toLegacyText(); ConsoleManager.logGroupChat(consoleMessage); - + } } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/common/MultiChatUtil.java b/multichat/src/main/java/xyz/olivermartin/multichat/common/MultiChatUtil.java index 26e775d2..e8eaa487 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/common/MultiChatUtil.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/common/MultiChatUtil.java @@ -1,12 +1,47 @@ package xyz.olivermartin.multichat.common; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; public class MultiChatUtil { + + /** + *

Takes a raw string and translates any colour codes using the & symbol

+ *

Any RGB codes in the format &#abcdef, &xabcdef or &x&a&b&c&d&e&f will also be translated

+ * @param rawMessage The raw message to translate + * @return the translated message + */ + public static String translateColourCodes(String rawMessage) { + return translateColourCodes(rawMessage, TranslateMode.ALL); + } + + /** + *

Takes a raw string and translates formatting codes according to the TranslateMode

+ * @param rawMessage The raw message to translate + * @param modes The TranslateModes to process + * @return the translated message + */ + public static String translateColourCodes(String rawMessage, TranslateMode... modes) { + + String translatedMessage = rawMessage; + + boolean rgb = Arrays.stream(modes).anyMatch(value -> value.equals(TranslateMode.ALL) || value.equals(TranslateMode.COLOUR_ALL)); + + // If we are translating RGB codes, reformat these to the correct format + if (rgb) translatedMessage = MultiChatUtil.reformatRGB(translatedMessage); + + // Process each of the translations + for (TranslateMode mode : modes) { + translatedMessage = mode.translate(translatedMessage); + } + + return translatedMessage; + + } /** * Reformat the RGB codes into Spigot Native version diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/TranslateMode.java b/multichat/src/main/java/xyz/olivermartin/multichat/common/TranslateMode.java similarity index 90% rename from multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/TranslateMode.java rename to multichat/src/main/java/xyz/olivermartin/multichat/common/TranslateMode.java index e99aec87..d66c823c 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/TranslateMode.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/common/TranslateMode.java @@ -1,4 +1,4 @@ -package xyz.olivermartin.multichat.proxy.common; +package xyz.olivermartin.multichat.common; import java.util.regex.Matcher; import java.util.regex.Pattern; diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyUtils.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyUtils.java deleted file mode 100644 index 3892b634..00000000 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/ProxyUtils.java +++ /dev/null @@ -1,43 +0,0 @@ -package xyz.olivermartin.multichat.proxy.common; - -import java.util.Arrays; - -import xyz.olivermartin.multichat.common.MultiChatUtil; - -public class ProxyUtils { - - /** - *

Takes a raw string and translates any colour codes using the & symbol

- *

Any RGB codes in the format &#abcdef, &xabcdef or &x&a&b&c&d&e&f will also be translated

- * @param rawMessage The raw message to translate - * @return the translated message - */ - public static String translateColourCodes(String rawMessage) { - return translateColourCodes(rawMessage, TranslateMode.ALL); - } - - /** - *

Takes a raw string and translates formatting codes according to the TranslateMode

- * @param rawMessage The raw message to translate - * @param modes The TranslateModes to process - * @return the translated message - */ - public static String translateColourCodes(String rawMessage, TranslateMode... modes) { - - String translatedMessage = rawMessage; - - boolean rgb = Arrays.stream(modes).anyMatch(value -> value.equals(TranslateMode.ALL) || value.equals(TranslateMode.COLOUR_ALL)); - - // If we are translating RGB codes, reformat these to the correct format - if (rgb) translatedMessage = MultiChatUtil.reformatRGB(translatedMessage); - - // Process each of the translations - for (TranslateMode mode : modes) { - translatedMessage = mode.translate(translatedMessage); - } - - return translatedMessage; - - } - -} diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLogoutListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLogoutListener.java index cbadf57e..d9a9c67e 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLogoutListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLogoutListener.java @@ -19,7 +19,6 @@ import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.ProxyJsonUtils; -import xyz.olivermartin.multichat.proxy.common.ProxyUtils; import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; @@ -29,7 +28,7 @@ private void displayMessage(ProxiedPlayer player, String message) { if (player.getServer() == null) return; - message = ProxyUtils.translateColourCodes(message); + message = MultiChatUtil.translateColourCodes(message); if (MultiChat.legacyServers.contains(player.getServer().getInfo().getName())) message = MultiChatUtil.approximateHexCodes(message); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyServerConnectedListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyServerConnectedListener.java index 8ff9dcf3..242e6999 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyServerConnectedListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyServerConnectedListener.java @@ -18,7 +18,6 @@ import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.ProxyJsonUtils; -import xyz.olivermartin.multichat.proxy.common.ProxyUtils; import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; @@ -27,7 +26,7 @@ public class ProxyServerConnectedListener implements Listener { private void displayMessage(ProxiedPlayer player, ProxiedPlayer sender, String senderServer, String message) { - message = ProxyUtils.translateColourCodes(message); + message = MultiChatUtil.translateColourCodes(message); if (player.getUniqueId().equals(sender.getUniqueId())) { if (MultiChat.legacyServers.contains(senderServer)) message = MultiChatUtil.approximateHexCodes(message); From 9289505dd1f5f495f3e1d3929b80e455ed045224 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Mon, 3 Aug 2020 16:57:05 +0100 Subject: [PATCH 097/188] Refine some of the local colour code translations code --- .../multichat/bungee/CastControl.java | 3 +- .../multichat/bungee/ConsoleManager.java | 5 ++- .../multichat/common/MultiChatUtil.java | 2 +- .../multichat/common/TranslateMode.java | 1 + .../local/common/LocalChatManager.java | 30 ++++++++++---- .../local/spigot/LocalSpigotChatManager.java | 23 ----------- .../local/spigot/LocalSpigotMetaManager.java | 41 ++++++++++--------- .../spigot/LocalSpigotPlaceholderManager.java | 4 -- .../local/sponge/LocalSpongeChatManager.java | 15 ------- .../local/sponge/LocalSpongeMetaManager.java | 8 ++-- .../sponge/LocalSpongePlaceholderManager.java | 7 +--- .../common/channels/local/LocalChannel.java | 4 +- .../channels/proxy/GenericProxyChannel.java | 4 +- 13 files changed, 58 insertions(+), 89 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/CastControl.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/CastControl.java index 0cfcf3b8..ba6c6be4 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/CastControl.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/CastControl.java @@ -4,7 +4,6 @@ import java.util.Map; import net.md_5.bungee.api.CommandSender; -import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.channels.local.LocalChannel; import xyz.olivermartin.multichat.proxy.common.channels.proxy.ProxyChannel; @@ -30,7 +29,7 @@ public static void sendCast(String castName, String castMessage, LocalChannel ch } public static void addCast(String castName, String castFormat) { - castList.put(castName.toLowerCase(), MultiChatUtil.reformatRGB(castFormat)); + castList.put(castName.toLowerCase(), castFormat); } public static void removeCast(String castName) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ConsoleManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ConsoleManager.java index 9ea08d79..0945652c 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ConsoleManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ConsoleManager.java @@ -3,7 +3,6 @@ import java.util.Arrays; import java.util.stream.Stream; -import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.TextComponent; @@ -80,7 +79,9 @@ public static void logSocialSpy(String p1, String p2, String message) { private static void logToConsole(String message, String unformattedMessage) { BaseComponent[] first = TextComponent.fromLegacyText( - ChatColor.translateAlternateColorCodes('&', MessageManager.getMessage("console_main_prefix") + MultiChatUtil.approximateHexCodes(MultiChatUtil.reformatRGB(message)))); + MultiChatUtil.approximateHexCodes( + MultiChatUtil.translateColourCodes( + MessageManager.getMessage("console_main_prefix") + message))); BaseComponent[] second = TextComponent.fromLegacyText(unformattedMessage); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/common/MultiChatUtil.java b/multichat/src/main/java/xyz/olivermartin/multichat/common/MultiChatUtil.java index e8eaa487..784eb6fd 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/common/MultiChatUtil.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/common/MultiChatUtil.java @@ -49,7 +49,7 @@ public static String translateColourCodes(String rawMessage, TranslateMode... mo * @param message * @return message reformatted */ - public static String reformatRGB(String message) { + private static String reformatRGB(String message) { // Translate RGB codes return message.replaceAll("(?i)\\&(x|#)([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])", "&x&$2&$3&$4&$5&$6&$7"); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/common/TranslateMode.java b/multichat/src/main/java/xyz/olivermartin/multichat/common/TranslateMode.java index d66c823c..146df625 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/common/TranslateMode.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/common/TranslateMode.java @@ -14,6 +14,7 @@ public enum TranslateMode { FORMAT_OBFUSCATED ("(?i)&(?=[k])"), FORMAT_RESET ("(?i)&(?=[r])"), FORMAT_ALL ("(?i)&(?=[k-o,r])"), + SIMPLE ("(?i)&(?=[a-f,0-9,k-o,r])"), ALL ("(?i)&(?=[a-f,0-9,k-o,r,x])"); private Pattern pattern; diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalChatManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalChatManager.java index 571b3687..13eb1617 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalChatManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalChatManager.java @@ -8,6 +8,8 @@ import java.util.Set; import java.util.UUID; +import xyz.olivermartin.multichat.common.MultiChatUtil; +import xyz.olivermartin.multichat.common.TranslateMode; import xyz.olivermartin.multichat.local.common.config.LocalConfig; import xyz.olivermartin.multichat.local.common.config.RegexChannelForcer; import xyz.olivermartin.multichat.local.common.storage.LocalDataStore; @@ -193,7 +195,7 @@ public String getChannelFormat(String channel) { format = config.getLocalChatFormat(); break; - + case "global": // Global Chat @@ -211,11 +213,11 @@ public String getChannelFormat(String channel) { } break; - - default: - - format = MultiChatLocal.getInstance().getDataStore().getChannelFormats().getOrDefault(channel, MultiChatLocal.getInstance().getDataStore().getGlobalChatFormat()); - break; + + default: + + format = MultiChatLocal.getInstance().getDataStore().getChannelFormats().getOrDefault(channel, MultiChatLocal.getInstance().getDataStore().getGlobalChatFormat()); + break; } @@ -306,7 +308,21 @@ public String reformatRGB(String message) { } - public abstract String translateColourCodes(String message, boolean rgb); + public String translateColourCodes(String message, boolean rgb) { + + if (rgb) { + message = MultiChatUtil.translateColourCodes(message); + } else { + message = MultiChatUtil.translateColourCodes(message, TranslateMode.SIMPLE); + } + + if (MultiChatLocal.getInstance().getDataStore().isLegacy()) { + message = MultiChatUtil.approximateHexCodes(message); + } + + return message; + + } public abstract String processExternalPlaceholders(MultiChatLocalPlayer player, String message); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotChatManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotChatManager.java index d76849ac..1369e95f 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotChatManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotChatManager.java @@ -1,37 +1,14 @@ package xyz.olivermartin.multichat.local.spigot; import org.bukkit.Bukkit; -import org.bukkit.ChatColor; import me.clip.placeholderapi.PlaceholderAPI; -import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.local.common.LocalChatManager; -import xyz.olivermartin.multichat.local.common.MultiChatLocal; import xyz.olivermartin.multichat.local.common.MultiChatLocalPlayer; import xyz.olivermartin.multichat.local.spigot.hooks.LocalSpigotPAPIHook; public class LocalSpigotChatManager extends LocalChatManager { - @Override - public String translateColourCodes(String message, boolean rgb) { - - if (rgb) { - message = MultiChatLocal.getInstance().getChatManager().reformatRGB(message); - - // LEGACY HACK - if (MultiChatLocal.getInstance().getDataStore().isLegacy()) { - message = message.replaceAll("(?i)&(?=[a-f,0-9,k-o,r,x])", "§"); - message = MultiChatUtil.approximateHexCodes(message); - } - - return ChatColor.translateAlternateColorCodes('&', message); - } else { - message = message.replaceAll("(?i)&(?=[a-f,0-9,k-o,r])", "§"); - return message; - } - - } - @Override public String processExternalPlaceholders(MultiChatLocalPlayer player, String message) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotMetaManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotMetaManager.java index 898cb470..0aff5614 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotMetaManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotMetaManager.java @@ -24,12 +24,16 @@ public String getPrefix(UUID uuid) { Chat vaultChat = opVault.get(); - // LEGACY HACK - if (MultiChatLocal.getInstance().getDataStore().isLegacy()) { - return MultiChatUtil.approximateHexCodes(vaultChat.getPlayerPrefix(Bukkit.getServer().getPlayer(uuid))); - } + // Get prefix + String prefix = vaultChat.getPlayerPrefix(Bukkit.getServer().getPlayer(uuid)); - return MultiChatUtil.reformatRGB(vaultChat.getPlayerPrefix(Bukkit.getServer().getPlayer(uuid))); + // Translate prefix + prefix = MultiChatUtil.translateColourCodes(prefix); + + // Deal with legacy servers + if (MultiChatLocal.getInstance().getDataStore().isLegacy()) prefix = MultiChatUtil.approximateHexCodes(prefix); + + return prefix; } @@ -46,12 +50,16 @@ public String getSuffix(UUID uuid) { Chat vaultChat = opVault.get(); - // LEGACY HACK - if (MultiChatLocal.getInstance().getDataStore().isLegacy()) { - return MultiChatUtil.approximateHexCodes(vaultChat.getPlayerSuffix(Bukkit.getServer().getPlayer(uuid))); - } + // Get suffix + String suffix = vaultChat.getPlayerSuffix(Bukkit.getServer().getPlayer(uuid)); + + // Translate suffix + suffix = MultiChatUtil.translateColourCodes(suffix); + + // Deal with legacy servers + if (MultiChatLocal.getInstance().getDataStore().isLegacy()) suffix = MultiChatUtil.approximateHexCodes(suffix); - return MultiChatUtil.reformatRGB(vaultChat.getPlayerSuffix(Bukkit.getServer().getPlayer(uuid))); + return suffix; } @@ -98,20 +106,14 @@ public String getDisplayName(UUID uuid) { logger.debug("[LocalSpigotMetaManager] Format with placeholders = " + displayNameFormat); logger.debug("[LocalSpigotMetaManager] Format with placeholders (using & only) = " + displayNameFormat.replaceAll("(?i)§(?=[a-f,0-9,k-o,r,x])", "&")); - displayNameFormat = MultiChatUtil.reformatRGB(displayNameFormat); - - logger.debug("[LocalSpigotMetaManager] Format after reformatting RGB = " + displayNameFormat); - logger.debug("[LocalSpigotMetaManager] Format after reformatting RGB (using & only) = " + displayNameFormat.replaceAll("(?i)§(?=[a-f,0-9,k-o,r,x])", "&")); - - displayNameFormat = displayNameFormat.replaceAll("(?i)&(?=[a-f,0-9,k-o,r,x])", "§"); + displayNameFormat = MultiChatUtil.translateColourCodes(displayNameFormat); logger.debug("[LocalSpigotMetaManager] FINAL = " + displayNameFormat); logger.debug("[LocalSpigotMetaManager] FINAL (using & only) = " + displayNameFormat.replaceAll("(?i)§(?=[a-f,0-9,k-o,r,x])", "&")); - // LEGACY HACK - if (MultiChatLocal.getInstance().getDataStore().isLegacy()) { + // Handle legacy servers + if (MultiChatLocal.getInstance().getDataStore().isLegacy()) displayNameFormat = MultiChatUtil.approximateHexCodes(displayNameFormat); - } player.setDisplayName(displayNameFormat); player.setPlayerListName(displayNameFormat); @@ -119,6 +121,7 @@ public String getDisplayName(UUID uuid) { } return player.getDisplayName(); + } } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotPlaceholderManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotPlaceholderManager.java index 35b6fba6..10a56029 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotPlaceholderManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotPlaceholderManager.java @@ -2,7 +2,6 @@ import java.util.UUID; -import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.local.common.LocalPlaceholderManager; import xyz.olivermartin.multichat.local.common.MultiChatLocalPlatform; @@ -15,9 +14,6 @@ public LocalSpigotPlaceholderManager() { @Override public String buildChatFormat(UUID uuid, String format) { - // Reformat any hex codes in the format - format = MultiChatUtil.reformatRGB(format); - // RESPECT OTHER PLUGIN'S DISPLAY NAMES FIRST! (Allows for factions etc.) format = format.replace("%DISPLAYNAME%", "%1$s"); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongeChatManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongeChatManager.java index 269402f9..97fdc69f 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongeChatManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongeChatManager.java @@ -7,7 +7,6 @@ import org.spongepowered.api.text.serializer.TextSerializers; import me.rojo8399.placeholderapi.PlaceholderService; -import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.local.common.LocalChatManager; import xyz.olivermartin.multichat.local.common.MultiChatLocal; import xyz.olivermartin.multichat.local.common.MultiChatLocalPlayer; @@ -15,20 +14,6 @@ public class LocalSpongeChatManager extends LocalChatManager { - @Override - public String translateColourCodes(String message, boolean rgb) { - - if (rgb) { - message = MultiChatLocal.getInstance().getChatManager().reformatRGB(message); - message = message.replaceAll("(?i)&(?=[a-f,0-9,k-o,r,x])", "§"); - message = MultiChatUtil.approximateHexCodes(message); - return TextSerializers.formattingCode('§').serialize(TextSerializers.FORMATTING_CODE.deserialize(message)); - } else { - return TextSerializers.formattingCode('§').serialize(TextSerializers.FORMATTING_CODE.deserialize(message)); - } - - } - @Override public String processExternalPlaceholders(MultiChatLocalPlayer player, String message) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongeMetaManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongeMetaManager.java index 77323c31..19d9309a 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongeMetaManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongeMetaManager.java @@ -24,7 +24,7 @@ public String getPrefix(UUID uuid) { Player player = opPlayer.get(); if (player.getOption("prefix").isPresent()) { - return MultiChatUtil.approximateHexCodes(MultiChatUtil.reformatRGB(player.getOption("prefix").get())); + return MultiChatUtil.approximateHexCodes(MultiChatUtil.translateColourCodes(player.getOption("prefix").get())); } else { return ""; } @@ -45,7 +45,7 @@ public String getSuffix(UUID uuid) { Player player = opPlayer.get(); if (player.getOption("suffix").isPresent()) { - return MultiChatUtil.approximateHexCodes(MultiChatUtil.reformatRGB(player.getOption("suffix").get())); + return MultiChatUtil.approximateHexCodes(MultiChatUtil.translateColourCodes(player.getOption("suffix").get())); } else { return ""; } @@ -92,9 +92,7 @@ public String getDisplayName(UUID uuid) { displayNameFormat = displayNameFormat.replaceAll("%NAME%", player.getName()); displayNameFormat = displayNameFormat.replaceAll("%PREFIX%", getPrefix(uuid)); displayNameFormat = displayNameFormat.replaceAll("%SUFFIX%", getSuffix(uuid)); - displayNameFormat = MultiChatUtil.reformatRGB(displayNameFormat); - displayNameFormat = displayNameFormat.replaceAll("(?i)&(?=[a-f,0-9,k-o,r,x])", "§"); - + displayNameFormat = MultiChatUtil.translateColourCodes(displayNameFormat); displayNameFormat = MultiChatUtil.approximateHexCodes(displayNameFormat); // TODO Sponge doesn't seem to like this... So we tend to work around it by sending back our original string diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongePlaceholderManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongePlaceholderManager.java index 78413187..878b637d 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongePlaceholderManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongePlaceholderManager.java @@ -2,7 +2,6 @@ import java.util.UUID; -import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.local.common.LocalPlaceholderManager; import xyz.olivermartin.multichat.local.common.MultiChatLocalPlatform; @@ -14,10 +13,8 @@ public LocalSpongePlaceholderManager() { @Override public String buildChatFormat(UUID uuid, String format) { - // Reformat any hex codes in the format - format = MultiChatUtil.reformatRGB(format); - format = processMultiChatPlaceholders(uuid, format).replaceAll("(?i)&(?=[a-f,0-9,k-o,r,x])", "§"); - format = MultiChatUtil.approximateHexCodes(format); + format = processMultiChatPlaceholders(uuid, format);//.replaceAll("(?i)&(?=[a-f,0-9,k-o,r,x])", "§"); + //format = MultiChatUtil.approximateHexCodes(format); return format; } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/local/LocalChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/local/LocalChannel.java index 81b916a2..863d3259 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/local/LocalChannel.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/local/LocalChannel.java @@ -4,7 +4,6 @@ import java.util.Set; import java.util.UUID; -import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.chat.TextComponent; @@ -100,8 +99,7 @@ public void sendMessage(ProxiedPlayer sender, String message) { public void broadcastRawMessage(CommandSender sender, String server, String message) { - message = MultiChatUtil.reformatRGB(message); - message = ChatColor.translateAlternateColorCodes('&', message); + message = MultiChatUtil.translateColourCodes(message); for (ProxiedPlayer receiver : ProxyServer.getInstance().getPlayers()) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/GenericProxyChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/GenericProxyChannel.java index 4b5e5a32..20389bc4 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/GenericProxyChannel.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/GenericProxyChannel.java @@ -3,7 +3,6 @@ import java.util.Set; import java.util.UUID; -import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.chat.TextComponent; @@ -106,8 +105,7 @@ public void broadcastRawMessage(CommandSender sender, String message) { // If the sender can't speak then return if (!canSpeak(sender)) return; - message = MultiChatUtil.reformatRGB(message); - message = ChatColor.translateAlternateColorCodes('&', message); + message = MultiChatUtil.translateColourCodes(message); for (ProxiedPlayer receiver : ProxyServer.getInstance().getPlayers()) { From 2ce2a8024d82548045fb3212dbd37eaef7863436 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Mon, 3 Aug 2020 17:16:54 +0100 Subject: [PATCH 098/188] Fixed issue in placeholder managers --- .../local/spigot/LocalSpigotPlaceholderManager.java | 4 ++++ .../local/sponge/LocalSpongePlaceholderManager.java | 5 ++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotPlaceholderManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotPlaceholderManager.java index 10a56029..ad173c0b 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotPlaceholderManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotPlaceholderManager.java @@ -3,6 +3,7 @@ import java.util.UUID; import xyz.olivermartin.multichat.local.common.LocalPlaceholderManager; +import xyz.olivermartin.multichat.local.common.MultiChatLocal; import xyz.olivermartin.multichat.local.common.MultiChatLocalPlatform; public class LocalSpigotPlaceholderManager extends LocalPlaceholderManager { @@ -20,6 +21,9 @@ public String buildChatFormat(UUID uuid, String format) { // PROCESS REST ACCORDING TO MULTICHAT'S PLACEHOLDERS format = processMultiChatPlaceholders(uuid, format); + // Translate codes + format = MultiChatLocal.getInstance().getChatManager().translateColourCodes(format, true); + // Adds the message on the end, respecting any changes from other plugins. return format + "%2$s"; // TODO This bit should not be added here, should be added in a different part (As sponge does not add here) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongePlaceholderManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongePlaceholderManager.java index 878b637d..cfa86bb4 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongePlaceholderManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongePlaceholderManager.java @@ -2,7 +2,9 @@ import java.util.UUID; +import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.local.common.LocalPlaceholderManager; +import xyz.olivermartin.multichat.local.common.MultiChatLocal; import xyz.olivermartin.multichat.local.common.MultiChatLocalPlatform; public class LocalSpongePlaceholderManager extends LocalPlaceholderManager { @@ -14,7 +16,8 @@ public LocalSpongePlaceholderManager() { @Override public String buildChatFormat(UUID uuid, String format) { format = processMultiChatPlaceholders(uuid, format);//.replaceAll("(?i)&(?=[a-f,0-9,k-o,r,x])", "§"); - //format = MultiChatUtil.approximateHexCodes(format); + format = MultiChatLocal.getInstance().getChatManager().translateColourCodes(format, true); + format = MultiChatUtil.approximateHexCodes(format); return format; } From 45d0972ffc1842dd3be67e8197f5ced2244f4136 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Mon, 3 Aug 2020 17:39:59 +0100 Subject: [PATCH 099/188] Better incorporation of the &r reset code --- .../multichat/common/MultiChatUtil.java | 2 +- .../multichat/common/TranslateMode.java | 15 +++++++-------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/common/MultiChatUtil.java b/multichat/src/main/java/xyz/olivermartin/multichat/common/MultiChatUtil.java index 784eb6fd..2bc157f0 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/common/MultiChatUtil.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/common/MultiChatUtil.java @@ -51,7 +51,7 @@ public static String translateColourCodes(String rawMessage, TranslateMode... mo */ private static String reformatRGB(String message) { // Translate RGB codes - return message.replaceAll("(?i)\\&(x|#)([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])", "&x&$2&$3&$4&$5&$6&$7"); + return message.replaceAll("(?i)\\&(x|#)([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])", "&r&x&$2&$3&$4&$5&$6&$7"); } public static String approximateHexCodes(String message) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/common/TranslateMode.java b/multichat/src/main/java/xyz/olivermartin/multichat/common/TranslateMode.java index 146df625..8431e3b3 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/common/TranslateMode.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/common/TranslateMode.java @@ -5,14 +5,13 @@ public enum TranslateMode { - COLOUR_SIMPLE ("(?i)&(?=[a-f,0-9])"), - COLOUR_ALL ("(?i)&(?=[a-f,0-9,x])"), - FORMAT_UNDERLINE ("(?i)&(?=[n])"), - FORMAT_ITALIC ("(?i)&(?=[o])"), - FORMAT_BOLD ("(?i)&(?=[l])"), - FORMAT_STRIKE ("(?i)&(?=[m])"), - FORMAT_OBFUSCATED ("(?i)&(?=[k])"), - FORMAT_RESET ("(?i)&(?=[r])"), + COLOUR_SIMPLE ("(?i)&(?=[a-f,0-9,r])"), + COLOUR_ALL ("(?i)&(?=[a-f,0-9,r,x])"), + FORMAT_UNDERLINE ("(?i)&(?=[r,n])"), + FORMAT_ITALIC ("(?i)&(?=[r,o])"), + FORMAT_BOLD ("(?i)&(?=[r,l])"), + FORMAT_STRIKE ("(?i)&(?=[r,m])"), + FORMAT_OBFUSCATED ("(?i)&(?=[r,k])"), FORMAT_ALL ("(?i)&(?=[k-o,r])"), SIMPLE ("(?i)&(?=[a-f,0-9,k-o,r])"), ALL ("(?i)&(?=[a-f,0-9,k-o,r,x])"); From a6c38526b3ae0b2ccc6aaf3197da201df2a82e1e Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Mon, 3 Aug 2020 18:10:07 +0100 Subject: [PATCH 100/188] Allow /nick command to be used on offline players --- .../local/common/commands/NickCommand.java | 22 +++++++++---------- .../spigot/commands/SpigotNickCommand.java | 20 ++++++++--------- .../sponge/MultiChatLocalSpongePlugin.java | 2 +- .../sponge/commands/SpongeNickCommand.java | 14 ++++++------ 4 files changed, 27 insertions(+), 31 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/commands/NickCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/commands/NickCommand.java index b8494b6c..530e8e33 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/commands/NickCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/commands/NickCommand.java @@ -13,15 +13,13 @@ public abstract class NickCommand { //private static final Pattern simpleNickname = Pattern.compile("^[a-zA-Z0-9&_]+$"); private static final Pattern simpleNickname = Pattern.compile("^([a-zA-Z0-9_]|(?i)(\\&[0-9A-FL-ORX]))+$"); - public boolean executeNickCommand(MultiChatLocalPlayer targetPlayer, MultiChatLocalPlayer sender, String proposedNick) { + public boolean executeNickCommand(UUID targetUniqueId, MultiChatLocalPlayer sender, String proposedNick) { proposedNick = MultiChatLocal.getInstance().getChatManager().reformatRGB(proposedNick); - UUID targetUUID = targetPlayer.getUniqueId(); - LocalNameManager lnm = MultiChatLocal.getInstance().getNameManager(); - if (targetPlayer.getUniqueId() != sender.getUniqueId()) { + if (targetUniqueId != sender.getUniqueId()) { if (!sender.hasPermission("multichatlocal.nick.others")) { sender.sendBadMessage("You do not have permission to nickname other players!"); return true; @@ -29,18 +27,18 @@ public boolean executeNickCommand(MultiChatLocalPlayer targetPlayer, MultiChatLo } if (proposedNick.equalsIgnoreCase("off")) { - lnm.removeNickname(targetUUID); - MultiChatLocal.getInstance().getProxyCommunicationManager().updatePlayerMeta(targetUUID); + lnm.removeNickname(targetUniqueId); + MultiChatLocal.getInstance().getProxyCommunicationManager().updatePlayerMeta(targetUniqueId); sender.sendGoodMessage("The nickname has been removed!"); return true; } - if (!checkPermissions(targetPlayer, sender, proposedNick)) { + if (!checkPermissions(targetUniqueId, sender, proposedNick)) { return true; } - lnm.setNickname(targetUUID, proposedNick); - MultiChatLocal.getInstance().getProxyCommunicationManager().updatePlayerMeta(targetUUID); + lnm.setNickname(targetUniqueId, proposedNick); + MultiChatLocal.getInstance().getProxyCommunicationManager().updatePlayerMeta(targetUniqueId); sender.sendGoodMessage("The nickname has been set!"); return true; @@ -48,7 +46,7 @@ public boolean executeNickCommand(MultiChatLocalPlayer targetPlayer, MultiChatLo } - private boolean checkPermissions(MultiChatLocalPlayer targetPlayer, MultiChatLocalPlayer sender, String proposedNick) { + private boolean checkPermissions(UUID targetUniqueId, MultiChatLocalPlayer sender, String proposedNick) { LocalNameManager lnm = MultiChatLocal.getInstance().getNameManager(); LocalConfig config = MultiChatLocal.getInstance().getConfigManager().getLocalConfig(); @@ -140,8 +138,8 @@ private boolean checkPermissions(MultiChatLocalPlayer targetPlayer, MultiChatLoc return false; } - String targetNickname = lnm.stripAllFormattingCodes(lnm.getCurrentName(targetPlayer.getUniqueId(), false)); - String targetName = lnm.getName(targetPlayer.getUniqueId()); + String targetNickname = lnm.stripAllFormattingCodes(lnm.getCurrentName(targetUniqueId, false)); + String targetName = lnm.getName(targetUniqueId); if (lnm.existsNickname(proposedNick) && !targetNickname.equalsIgnoreCase(lnm.stripAllFormattingCodes(proposedNick)) ) { sender.sendBadMessage("Sorry, this nickname is already in use!"); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/commands/SpigotNickCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/commands/SpigotNickCommand.java index 4543b332..0027b3e2 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/commands/SpigotNickCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/commands/SpigotNickCommand.java @@ -1,10 +1,14 @@ package xyz.olivermartin.multichat.local.spigot.commands; +import java.util.Optional; +import java.util.UUID; + import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import xyz.olivermartin.multichat.local.common.MultiChatLocal; import xyz.olivermartin.multichat.local.common.MultiChatLocalPlayer; import xyz.olivermartin.multichat.local.common.commands.MultiChatLocalCommandSender; import xyz.olivermartin.multichat.local.common.commands.NickCommand; @@ -30,26 +34,20 @@ public boolean onCommand(CommandSender sender, Command command, String label, St return false; } - MultiChatLocalPlayer targetPlayer; - if (args.length == 1) { - targetPlayer = senderPlayer; - - return executeNickCommand(targetPlayer, senderPlayer, args[0]); + return executeNickCommand(senderPlayer.getUniqueId(), senderPlayer, args[0]); } else { - Player target = sender.getServer().getPlayer(args[0]); + Optional targetUniqueId = MultiChatLocal.getInstance().getNameManager().getUUIDFromName(args[0]); - if (target == null) { - mccs.sendBadMessage(args[0] + " is not currently online so cannot be nicknamed!"); + if (!targetUniqueId.isPresent()) { + mccs.sendBadMessage(args[0] + " has never joined the server so cannot be nicknamed!"); return true; } - targetPlayer = new MultiChatLocalSpigotPlayer(target); - - return executeNickCommand(targetPlayer, senderPlayer, args[1]); + return executeNickCommand(targetUniqueId.get(), senderPlayer, args[1]); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/MultiChatLocalSpongePlugin.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/MultiChatLocalSpongePlugin.java index ffbe6d2f..51366b10 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/MultiChatLocalSpongePlugin.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/MultiChatLocalSpongePlugin.java @@ -177,7 +177,7 @@ public void onServerStart(GameStartedServerEvent event) { CommandSpec nicknameCommandSpec = CommandSpec.builder() .description(Text.of("Sponge Nickname Command")) .arguments( - GenericArguments.onlyOne(GenericArguments.player(Text.of("player"))), + GenericArguments.onlyOne(GenericArguments.string(Text.of("player"))), GenericArguments.remainingJoinedStrings(Text.of("message"))) .permission("multichatlocal.nick.self") .executor(new SpongeNickCommand()) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/commands/SpongeNickCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/commands/SpongeNickCommand.java index b1ba9baf..b91b447c 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/commands/SpongeNickCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/commands/SpongeNickCommand.java @@ -1,6 +1,7 @@ package xyz.olivermartin.multichat.local.sponge.commands; import java.util.Optional; +import java.util.UUID; import org.spongepowered.api.command.CommandException; import org.spongepowered.api.command.CommandResult; @@ -9,6 +10,7 @@ import org.spongepowered.api.command.spec.CommandExecutor; import org.spongepowered.api.entity.living.player.Player; +import xyz.olivermartin.multichat.local.common.MultiChatLocal; import xyz.olivermartin.multichat.local.common.MultiChatLocalPlayer; import xyz.olivermartin.multichat.local.common.commands.MultiChatLocalCommandSender; import xyz.olivermartin.multichat.local.common.commands.NickCommand; @@ -28,25 +30,23 @@ public CommandResult execute(CommandSource src, CommandContext args) throws Comm MultiChatLocalPlayer senderPlayer = new MultiChatLocalSpongePlayer((Player)src); - Optional opTarget = args.getOne("player"); + Optional opTargetName = args.getOne("player"); - if (!opTarget.isPresent()) { + if (!opTargetName.isPresent()) { mccs.sendBadMessage("That player could not be found!"); return CommandResult.success(); } - Player target = opTarget.get(); + Optional targetUniqueId = MultiChatLocal.getInstance().getNameManager().getUUIDFromName(opTargetName.get()); - if (target == null) { + if (!targetUniqueId.isPresent()) { mccs.sendBadMessage("That player could not be found!"); return CommandResult.success(); } String nickname = args.getOne("message").get(); - MultiChatLocalPlayer targetPlayer = new MultiChatLocalSpongePlayer(target); - - boolean status = executeNickCommand(targetPlayer, senderPlayer, nickname); + boolean status = executeNickCommand(targetUniqueId.get(), senderPlayer, nickname); if (status) { return CommandResult.success(); From a0f69c2924787629529043437277d006bcfec91a Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Mon, 3 Aug 2020 18:13:42 +0100 Subject: [PATCH 101/188] Prevent error if player not online --- .../multichat/local/common/commands/NickCommand.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/commands/NickCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/commands/NickCommand.java index 530e8e33..ac66ad94 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/commands/NickCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/commands/NickCommand.java @@ -28,7 +28,7 @@ public boolean executeNickCommand(UUID targetUniqueId, MultiChatLocalPlayer send if (proposedNick.equalsIgnoreCase("off")) { lnm.removeNickname(targetUniqueId); - MultiChatLocal.getInstance().getProxyCommunicationManager().updatePlayerMeta(targetUniqueId); + //MultiChatLocal.getInstance().getProxyCommunicationManager().updatePlayerMeta(targetUniqueId); sender.sendGoodMessage("The nickname has been removed!"); return true; } @@ -38,7 +38,7 @@ public boolean executeNickCommand(UUID targetUniqueId, MultiChatLocalPlayer send } lnm.setNickname(targetUniqueId, proposedNick); - MultiChatLocal.getInstance().getProxyCommunicationManager().updatePlayerMeta(targetUniqueId); + //MultiChatLocal.getInstance().getProxyCommunicationManager().updatePlayerMeta(targetUniqueId); sender.sendGoodMessage("The nickname has been set!"); return true; From ea283ec7765252a233a0218ba43b0df7332c92f7 Mon Sep 17 00:00:00 2001 From: Gadse Date: Mon, 3 Aug 2020 21:06:41 +0200 Subject: [PATCH 102/188] ACCCommand overhaul and implementation of common regex util class. --- .../multichat/bungee/commands/ACCCommand.java | 83 ++++++------------- .../multichat/common/RegexUtil.java | 9 ++ 2 files changed, 36 insertions(+), 56 deletions(-) create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/common/RegexUtil.java diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ACCCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ACCCommand.java index 7581e01f..6cdea059 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ACCCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ACCCommand.java @@ -8,6 +8,7 @@ import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.DebugManager; import xyz.olivermartin.multichat.bungee.MessageManager; +import xyz.olivermartin.multichat.common.RegexUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; @@ -22,73 +23,43 @@ public class ACCCommand extends Command { public ACCCommand() { - super("mcacc", "multichat.staff.admin", (String[]) ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("acc").toArray(new String[0])); + super("mcacc", "multichat.staff.admin", ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("acc").toArray(new String[0])); } public void execute(CommandSender sender, String[] args) { + if (!(sender instanceof ProxiedPlayer)) { + MessageManager.sendMessage(sender, "command_acc_only_players"); + return; + } + DebugManager.log("[ACCCommand] Command sender is a player"); - ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); - - // Check correct arguments if (args.length != 2) { + MessageManager.sendMessage(sender, "command_acc_usage"); + return; + } + args[0] = args[0].toLowerCase(); + args[1] = args[1].toLowerCase(); - if ((sender instanceof ProxiedPlayer)) { - MessageManager.sendMessage(sender, "command_acc_usage"); - } else { - MessageManager.sendMessage(sender, "command_acc_only_players"); - } - - } else if ((sender instanceof ProxiedPlayer)) { - - DebugManager.log("[ACCCommand] Command sender is a player"); - - TChatInfo chatinfo = new TChatInfo(); - ProxiedPlayer player = (ProxiedPlayer)sender; - - // Convert args to lowercase - args[0] = args[0].toLowerCase(); - args[1] = args[1].toLowerCase(); - - if ((args[0].equals("a")) || (args[0].equals("b")) || (args[0].equals("c")) || (args[0].equals("d")) - || (args[0].equals("e")) || (args[0].equals("f")) || (args[0].equals("0")) || (args[0].equals("1")) - || (args[0].equals("2")) || (args[0].equals("3")) || (args[0].equals("4")) || (args[0].equals("5")) - || (args[0].equals("6")) || (args[0].equals("7")) || (args[0].equals("8")) || (args[0].equals("9"))) { - - if ((args[1].equals("a")) || (args[1].equals("b")) || (args[1].equals("c")) || (args[1].equals("d")) - || (args[1].equals("e")) || (args[1].equals("f")) || (args[1].equals("0")) || (args[1].equals("1")) - || (args[1].equals("2")) || (args[1].equals("3")) || (args[1].equals("4")) || (args[1].equals("5")) - || (args[1].equals("6")) || (args[1].equals("7")) || (args[1].equals("8")) || (args[1].equals("9"))) { - - DebugManager.log("[ACCCommand] Colour codes are valid"); - - chatinfo.setChatColor(args[0].charAt(0)); - chatinfo.setNameColor(args[1].charAt(0)); - - ds.getAdminChatPreferences().remove(player.getUniqueId()); - ds.getAdminChatPreferences().put(player.getUniqueId(), chatinfo); - - DebugManager.log("[ACCCommand] Preferences updated"); - - MessageManager.sendMessage(sender, "command_acc_updated"); - - } else { - - MessageManager.sendMessage(sender, "command_acc_invalid"); - MessageManager.sendMessage(sender, "command_acc_invalid_usage"); - - } + if (!RegexUtil.COLOR_LEGACY.matcher(args[0]).matches() || !RegexUtil.COLOR_LEGACY.matcher(args[1]).matches()) { + MessageManager.sendMessage(sender, "command_acc_invalid"); + MessageManager.sendMessage(sender, "command_acc_invalid_usage"); + return; + } - } else { + DebugManager.log("[ACCCommand] Colour codes are valid"); - MessageManager.sendMessage(sender, "command_acc_invalid"); - MessageManager.sendMessage(sender, "command_acc_invalid_usage"); + ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); + TChatInfo chatinfo = new TChatInfo(); + ProxiedPlayer player = (ProxiedPlayer)sender; - } + chatinfo.setChatColor(args[0].charAt(0)); + chatinfo.setNameColor(args[1].charAt(0)); - } else { + ds.getAdminChatPreferences().remove(player.getUniqueId()); + ds.getAdminChatPreferences().put(player.getUniqueId(), chatinfo); - MessageManager.sendMessage(sender, "command_acc_only_players"); + DebugManager.log("[ACCCommand] Preferences updated"); - } + MessageManager.sendMessage(sender, "command_acc_updated"); } } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/common/RegexUtil.java b/multichat/src/main/java/xyz/olivermartin/multichat/common/RegexUtil.java new file mode 100644 index 00000000..2ed40bdc --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/common/RegexUtil.java @@ -0,0 +1,9 @@ +package xyz.olivermartin.multichat.common; + +import java.util.regex.Pattern; + +public class RegexUtil { + public static final Pattern COLOR_LEGACY = Pattern.compile("(?i)[a-f0-9]"); + public static final Pattern FORMAT = Pattern.compile("(?i)[k-or]"); + public static final Pattern COLOR_LEGACY_FORMAT = Pattern.compile("(?i)[a-fk-or0-9]"); +} From 92871a8d6424cc01f59b27f86259e2b5d05e4171 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Mon, 3 Aug 2020 20:46:46 +0100 Subject: [PATCH 103/188] Experiments with player tagging --- .../multichat/bungee/MultiChat.java | 3 + .../proxy/common/MultiChatProxy.java | 10 +++ .../proxy/common/channels/TagManager.java | 64 +++++++++++++++++++ .../channels/proxy/GenericProxyChannel.java | 4 ++ 4 files changed, 81 insertions(+) create mode 100644 multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/TagManager.java 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 761ebf0c..172516f8 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MultiChat.java @@ -17,6 +17,7 @@ import xyz.olivermartin.multichat.proxy.common.ProxyChatManager; import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; +import xyz.olivermartin.multichat.proxy.common.channels.TagManager; import xyz.olivermartin.multichat.proxy.common.channels.local.LocalChannel; import xyz.olivermartin.multichat.proxy.common.channels.proxy.GlobalStaticProxyChannel; import xyz.olivermartin.multichat.proxy.common.channels.proxy.ProxyChannelInfo; @@ -308,6 +309,8 @@ public void onEnable() { ProxyChatManager chatManager = new ProxyChatManager(); MultiChatProxy.getInstance().registerChatManager(chatManager); + MultiChatProxy.getInstance().registerTagManager(new TagManager()); + /// // Initiate backup routine diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/MultiChatProxy.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/MultiChatProxy.java index 75248eb5..8fe35e58 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/MultiChatProxy.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/MultiChatProxy.java @@ -4,6 +4,7 @@ import net.md_5.bungee.api.plugin.Plugin; import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; +import xyz.olivermartin.multichat.proxy.common.channels.TagManager; import xyz.olivermartin.multichat.proxy.common.contexts.ContextManager; import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; import xyz.olivermartin.multichat.proxy.common.storage.ProxyFileStoreManager; @@ -37,6 +38,7 @@ public static MultiChatProxy getInstance() { private ContextManager contextManager; private ChannelManager channelManager; private ProxyChatManager chatManager; + private TagManager tagManager; /* END ATTRIBUTES */ @@ -114,4 +116,12 @@ public void registerChatManager(ProxyChatManager chatManager) { this.chatManager = chatManager; } + public TagManager getTagManager() { + return this.tagManager; + } + + public void registerTagManager(TagManager tagManager) { + this.tagManager = tagManager; + } + } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/TagManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/TagManager.java new file mode 100644 index 00000000..db3e6789 --- /dev/null +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/TagManager.java @@ -0,0 +1,64 @@ +package xyz.olivermartin.multichat.proxy.common.channels; + +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import net.md_5.bungee.api.ChatMessageType; +import net.md_5.bungee.api.ProxyServer; +import net.md_5.bungee.api.connection.ProxiedPlayer; +import xyz.olivermartin.multichat.common.MultiChatUtil; +import xyz.olivermartin.multichat.proxy.common.ProxyJsonUtils; + +public class TagManager { + + public static final String REGEX = "(?i)@([A-Z0-9_]{3,})"; + + private Pattern tagPattern; + + public TagManager() { + tagPattern = Pattern.compile(REGEX); + } + + public void handleTags(String message, String tagger) { + notifyTaggedPlayers(getTaggedPlayers(getPotentialTags(message)), tagger); + } + + private List getPotentialTags(String message) { + + List potentialTags = new ArrayList(); + Matcher tagMatcher = tagPattern.matcher(message); + + while (tagMatcher.find()) { + potentialTags.add(tagMatcher.group(1)); + } + + return potentialTags; + + } + + private List getTaggedPlayers(List potentialTags) { + + List taggedPlayers = new ArrayList(); + + for (String potentialTag : potentialTags) { + ProxiedPlayer potentialPlayer = ProxyServer.getInstance().getPlayer(potentialTag); + if (potentialPlayer != null) taggedPlayers.add(potentialPlayer); + } + + return taggedPlayers; + + } + + private void notifyTaggedPlayers(List taggedPlayers, String tagger) { + for (ProxiedPlayer taggedPlayer : taggedPlayers) { + notifyPlayer(taggedPlayer, tagger); + } + } + + private void notifyPlayer(ProxiedPlayer player, String tagger) { + player.sendMessage(ChatMessageType.ACTION_BAR, ProxyJsonUtils.parseMessage(MultiChatUtil.translateColourCodes("&6You were mentioned by %SPECIAL%"), "%SPECIAL%", MultiChatUtil.translateColourCodes(tagger))); + } + +} diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/GenericProxyChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/GenericProxyChannel.java index 20389bc4..bd8cb7b9 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/GenericProxyChannel.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/GenericProxyChannel.java @@ -13,6 +13,7 @@ import xyz.olivermartin.multichat.bungee.events.PostBroadcastEvent; import xyz.olivermartin.multichat.bungee.events.PostGlobalChatEvent; import xyz.olivermartin.multichat.common.MultiChatUtil; +import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; import xyz.olivermartin.multichat.proxy.common.channels.ChannelManager; @@ -60,6 +61,9 @@ public void distributeMessage(ProxiedPlayer sender, String message, String forma String senderServer = sender.getServer().getInfo().getName(); String joined = format + message; + // TODO This is just a test + if (sender.hasPermission("multichat.chat.tag")) MultiChatProxy.getInstance().getTagManager().handleTags(message, sender.getName()); + for (ProxiedPlayer receiver : ProxyServer.getInstance().getPlayers()) { // Skip sending to this player if they shouldn't receive the message From 6c91a76ee8752a048d77b5c991d1d186614e03cb Mon Sep 17 00:00:00 2001 From: Gadse Date: Mon, 3 Aug 2020 21:56:26 +0200 Subject: [PATCH 104/188] ACCommand overhaul --- .../multichat/bungee/commands/ACCommand.java | 105 +++++++----------- 1 file changed, 42 insertions(+), 63 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ACCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ACCommand.java index 8b5efea0..948e78db 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ACCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ACCommand.java @@ -7,77 +7,56 @@ import xyz.olivermartin.multichat.bungee.DebugManager; import xyz.olivermartin.multichat.bungee.Events; import xyz.olivermartin.multichat.bungee.MessageManager; -import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.bungee.StaffChatManager; /** * Admin-Chat command *

Allows the user to toggle / send a message to admin-chat

- * - * @author Oliver Martin (Revilo410) * + * @author Oliver Martin (Revilo410) */ public class ACCommand extends Command { - public ACCommand() { - super("mcac", "multichat.staff.admin", (String[]) ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("ac").toArray(new String[0])); - } - - public void execute(CommandSender sender, String[] args) { - - boolean toggleresult; - - if (args.length < 1) { - - if ((sender instanceof ProxiedPlayer)) { - - DebugManager.log("[ACCommand] Command sender is a player"); - - ProxiedPlayer player = (ProxiedPlayer)sender; - toggleresult = Events.toggleAC(player.getUniqueId()); - - DebugManager.log("[ACCommand] AC new toggle state: " + toggleresult); - - if (toggleresult == true) { - MessageManager.sendMessage(sender, "command_ac_toggle_on"); - } else { - MessageManager.sendMessage(sender, "command_ac_toggle_off"); - } - - } else { - - MessageManager.sendMessage(sender, "command_ac_only_players"); - - } - - } else if ((sender instanceof ProxiedPlayer)) { - - DebugManager.log("[ACCommand] Command sender is a player"); - - String message = MultiChatUtil.getMessageFromArgs(args); - - ProxiedPlayer player = (ProxiedPlayer)sender; - StaffChatManager chatman = new StaffChatManager(); - - DebugManager.log("[ACCommand] Next line of code will send the message, if no errors, then it worked!"); - - chatman.sendAdminMessage(player.getName(), player.getDisplayName(), player.getServer().getInfo().getName(), message); - chatman = null; - - } else { - - DebugManager.log("[ACCommand] Command sender is the console"); - - String message = MultiChatUtil.getMessageFromArgs(args); - - StaffChatManager chatman = new StaffChatManager(); - - DebugManager.log("[ACCommand] Next line of code will send the message, if no errors, then it worked!"); - - chatman.sendAdminMessage("CONSOLE", "CONSOLE", "#", message); - chatman = null; - - } - } + public ACCommand() { + super("mcac", "multichat.staff.admin", ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("ac").toArray(new String[0])); + } + + public void execute(CommandSender sender, String[] args) { + if (args.length > 0) { + // Default sender values + String name = "CONSOLE"; + String displayName = "CONSOLE"; + String serverName = "#"; + + // Change values if sender is a player + if (sender instanceof ProxiedPlayer) { + ProxiedPlayer player = (ProxiedPlayer) sender; + name = player.getName(); + displayName = player.getDisplayName(); + serverName = player.getServer().getInfo().getName(); + } + + // Send message + DebugManager.log("[ACCommand] Attempting to send a staff chat message as " + name + "."); + StaffChatManager staffChatManager = new StaffChatManager(); + staffChatManager.sendAdminMessage(name, displayName, serverName, String.join(" ", args)); + return; + } + + // Console can't toggle AC + if (!(sender instanceof ProxiedPlayer)) { + MessageManager.sendMessage(sender, "command_ac_only_players"); + return; + } + + // Toggle AC for player + DebugManager.log("[ACCommand] Sender is a player, toggling AC..."); + + ProxiedPlayer player = (ProxiedPlayer) sender; + boolean toggleresult = Events.toggleAC(player.getUniqueId()); + + DebugManager.log("[ACCommand] AC new toggle state: " + toggleresult); + MessageManager.sendMessage(sender, "command_ac_toggle_" + (toggleresult ? "on" : "off")); + } } From f2e530d398fd570a6e46b9c353a908c6a2c495af Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Mon, 3 Aug 2020 21:32:52 +0100 Subject: [PATCH 105/188] Allow console to use nick command --- .../local/common/commands/NickCommand.java | 60 +++++++++++++++---- .../spigot/commands/SpigotNickCommand.java | 40 ++++++++----- .../sponge/commands/SpongeNickCommand.java | 16 ++--- 3 files changed, 81 insertions(+), 35 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/commands/NickCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/commands/NickCommand.java index ac66ad94..4f74a189 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/commands/NickCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/commands/NickCommand.java @@ -28,7 +28,6 @@ public boolean executeNickCommand(UUID targetUniqueId, MultiChatLocalPlayer send if (proposedNick.equalsIgnoreCase("off")) { lnm.removeNickname(targetUniqueId); - //MultiChatLocal.getInstance().getProxyCommunicationManager().updatePlayerMeta(targetUniqueId); sender.sendGoodMessage("The nickname has been removed!"); return true; } @@ -37,14 +36,40 @@ public boolean executeNickCommand(UUID targetUniqueId, MultiChatLocalPlayer send return true; } + if (!checkValidNickname(targetUniqueId, sender, proposedNick)) { + return true; + } + lnm.setNickname(targetUniqueId, proposedNick); - //MultiChatLocal.getInstance().getProxyCommunicationManager().updatePlayerMeta(targetUniqueId); sender.sendGoodMessage("The nickname has been set!"); return true; } + public boolean executeConsoleNickCommand(UUID targetUniqueId, MultiChatLocalCommandSender console, String proposedNick) { + + proposedNick = MultiChatLocal.getInstance().getChatManager().reformatRGB(proposedNick); + + LocalNameManager lnm = MultiChatLocal.getInstance().getNameManager(); + + if (proposedNick.equalsIgnoreCase("off")) { + lnm.removeNickname(targetUniqueId); + console.sendGoodMessage("The nickname has been removed!"); + return true; + } + + if (!checkValidNickname(targetUniqueId, console, proposedNick)) { + return true; + } + + lnm.setNickname(targetUniqueId, proposedNick); + + console.sendGoodMessage("The nickname has been set!"); + return true; + + } + private boolean checkPermissions(UUID targetUniqueId, MultiChatLocalPlayer sender, String proposedNick) { @@ -133,19 +158,8 @@ private boolean checkPermissions(UUID targetUniqueId, MultiChatLocalPlayer sende } - if (lnm.stripAllFormattingCodes(proposedNick).length() < 1) { - sender.sendBadMessage("Sorry your nickname cannot be empty!"); - return false; - } - - String targetNickname = lnm.stripAllFormattingCodes(lnm.getCurrentName(targetUniqueId, false)); String targetName = lnm.getName(targetUniqueId); - if (lnm.existsNickname(proposedNick) && !targetNickname.equalsIgnoreCase(lnm.stripAllFormattingCodes(proposedNick)) ) { - sender.sendBadMessage("Sorry, this nickname is already in use!"); - return false; - } - if (lnm.existsPlayer(proposedNick) && !targetName.equalsIgnoreCase(lnm.stripAllFormattingCodes(proposedNick)) && !sender.hasPermission("multichatlocal.nick.impersonate")) { sender.sendBadMessage("Sorry, a player already exists with this name!"); return false; @@ -173,4 +187,24 @@ private boolean checkPermissions(UUID targetUniqueId, MultiChatLocalPlayer sende } + private boolean checkValidNickname(UUID targetUniqueId, MultiChatLocalCommandSender sender, String proposedNick) { + + LocalNameManager lnm = MultiChatLocal.getInstance().getNameManager(); + + if (lnm.stripAllFormattingCodes(proposedNick).length() < 1) { + sender.sendBadMessage("Sorry your nickname cannot be empty!"); + return false; + } + + String targetNickname = lnm.stripAllFormattingCodes(lnm.getCurrentName(targetUniqueId, false)); + + if (lnm.existsNickname(proposedNick) && !targetNickname.equalsIgnoreCase(lnm.stripAllFormattingCodes(proposedNick)) ) { + sender.sendBadMessage("Sorry, this nickname is already in use!"); + return false; + } + + return true; + + } + } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/commands/SpigotNickCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/commands/SpigotNickCommand.java index 0027b3e2..a5a8a483 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/commands/SpigotNickCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/commands/SpigotNickCommand.java @@ -21,34 +21,46 @@ public boolean onCommand(CommandSender sender, Command command, String label, St if (!command.getName().equalsIgnoreCase("nick")) return false; - MultiChatLocalCommandSender mccs = new MultiChatLocalSpigotCommandSender(sender); - - if (!mccs.isPlayer()) { - mccs.sendBadMessage("Only players can use this command!"); - return true; - } - - MultiChatLocalPlayer senderPlayer = new MultiChatLocalSpigotPlayer((Player)sender); - if (args.length < 1 || args.length > 2) { return false; } + MultiChatLocalCommandSender mccs = new MultiChatLocalSpigotCommandSender(sender); + + UUID targetUniqueId; + String proposedNickname; + if (args.length == 1) { - return executeNickCommand(senderPlayer.getUniqueId(), senderPlayer, args[0]); + if (!mccs.isPlayer()) { + mccs.sendBadMessage("Only players can have nicknames!"); + return true; + } + + MultiChatLocalPlayer senderPlayer = new MultiChatLocalSpigotPlayer((Player)sender); + + targetUniqueId = senderPlayer.getUniqueId(); + proposedNickname = args[0]; } else { - Optional targetUniqueId = MultiChatLocal.getInstance().getNameManager().getUUIDFromName(args[0]); + Optional opTargetUniqueId = MultiChatLocal.getInstance().getNameManager().getUUIDFromName(args[0]); - if (!targetUniqueId.isPresent()) { + if (!opTargetUniqueId.isPresent()) { mccs.sendBadMessage(args[0] + " has never joined the server so cannot be nicknamed!"); return true; } + + targetUniqueId = opTargetUniqueId.get(); + proposedNickname = args[1]; - return executeNickCommand(targetUniqueId.get(), senderPlayer, args[1]); - + } + + if (!mccs.isPlayer()) { + return executeConsoleNickCommand(targetUniqueId, mccs, proposedNickname); + } else { + MultiChatLocalPlayer senderPlayer = new MultiChatLocalSpigotPlayer((Player)sender); + return executeNickCommand(targetUniqueId, senderPlayer, proposedNickname); } } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/commands/SpongeNickCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/commands/SpongeNickCommand.java index b91b447c..97ee2b3a 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/commands/SpongeNickCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/commands/SpongeNickCommand.java @@ -23,13 +23,6 @@ public CommandResult execute(CommandSource src, CommandContext args) throws Comm MultiChatLocalCommandSender mccs = new MultiChatLocalSpongeCommandSender(src); - if (!mccs.isPlayer()) { - mccs.sendBadMessage("Only players can use this command!"); - return CommandResult.success(); - } - - MultiChatLocalPlayer senderPlayer = new MultiChatLocalSpongePlayer((Player)src); - Optional opTargetName = args.getOne("player"); if (!opTargetName.isPresent()) { @@ -46,7 +39,14 @@ public CommandResult execute(CommandSource src, CommandContext args) throws Comm String nickname = args.getOne("message").get(); - boolean status = executeNickCommand(targetUniqueId.get(), senderPlayer, nickname); + boolean status; + + if (!mccs.isPlayer()) { + status = executeConsoleNickCommand(targetUniqueId.get(), mccs, nickname); + } else { + MultiChatLocalPlayer senderPlayer = new MultiChatLocalSpongePlayer((Player)src); + status = executeNickCommand(targetUniqueId.get(), senderPlayer, nickname); + } if (status) { return CommandResult.success(); From 0d28061af7f6cda8c873e45193d1dc57a7a9f1ac Mon Sep 17 00:00:00 2001 From: Gadse Date: Mon, 3 Aug 2020 22:42:17 +0200 Subject: [PATCH 106/188] AnnouncementCommand overhaul --- .../bungee/commands/AnnouncementCommand.java | 212 ++++++++---------- 1 file changed, 88 insertions(+), 124 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/AnnouncementCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/AnnouncementCommand.java index 19bd258e..b0f9040d 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/AnnouncementCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/AnnouncementCommand.java @@ -1,7 +1,6 @@ package xyz.olivermartin.multichat.bungee.commands; -import java.util.Iterator; -import java.util.Map; +import java.util.Arrays; import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.CommandSender; @@ -10,158 +9,123 @@ import xyz.olivermartin.multichat.bungee.Announcements; import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.MessageManager; -import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; /** * Announcement Command *

Allows the user to create, remove or use announcements

- * - * @author Oliver Martin (Revilo410) * + * @author Oliver Martin (Revilo410) */ public class AnnouncementCommand extends Command { - public AnnouncementCommand() { - super("mcannouncement", "multichat.announce", (String[]) ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("announcement").toArray(new String[0])); - } - - public void execute(CommandSender sender, String[] args) { - - if (args.length < 1) { + public AnnouncementCommand() { + super("mcannouncement", "multichat.announce", ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("announcement").toArray(new String[0])); + } - showCommandUsage(sender); - - } else if (args.length == 1) { - - if (args[0].toLowerCase().equals("list")) { - - Map announcementList = Announcements.getAnnouncementList(); - Iterator it = announcementList.keySet().iterator(); + public void execute(CommandSender sender, String[] args) { + if (args.length == 0) { + showCommandUsage(sender); + return; + } + String arg = args[0].toLowerCase(); + switch (arg) { + case "list": { MessageManager.sendMessage(sender, "command_announcement_list"); - - String currentItem; - while (it.hasNext()) { - currentItem = it.next(); - MessageManager.sendSpecialMessage(sender, "command_announcement_list_item", currentItem + ": +++" + announcementList.get(currentItem), true); - } - - } else if (Announcements.existsAnnouncemnt(args[0].toLowerCase())) { - - Announcements.playAnnouncement(args[0].toLowerCase()); - - } else { - - MessageManager.sendSpecialMessage(sender, "command_announcement_does_not_exist", args[0].toUpperCase()); - + Announcements.getAnnouncementList().forEach((key, value) -> + MessageManager.sendSpecialMessage(sender, + "command_announcement_list_item", + key + ": +++" + value, + true + ) + ); + break; } + case "add": { + if (args.length < 3) { + showCommandUsage(sender); + return; + } - } else if (args.length == 2) { - - if (args[0].toLowerCase().equals("remove")) { - - if (Announcements.removeAnnouncement(args[1].toLowerCase()) == true) { - MessageManager.sendSpecialMessage(sender, "command_announcement_removed", args[1].toUpperCase()); + String announcementKey = args[1].toLowerCase(); + String message = String.join(" ", Arrays.copyOfRange(args, 2, args.length)); + if (Announcements.addAnnouncement(announcementKey, message)) { + MessageManager.sendSpecialMessage(sender, "command_announcement_added", announcementKey); } else { - MessageManager.sendSpecialMessage(sender, "command_announcement_does_not_exist", args[1].toUpperCase()); + MessageManager.sendSpecialMessage(sender, "command_announcement_added_error", announcementKey); + } + break; + } + case "remove": { + if (args.length < 2) { + showCommandUsage(sender); + return; } - } else if (args[0].toLowerCase().equals("stop") ) { - - if (Announcements.stopAnnouncement(args[1].toLowerCase()) == true) { - MessageManager.sendSpecialMessage(sender, "command_announcement_stopped", args[1].toUpperCase()); + String announcementKey = args[1].toLowerCase(); + if (Announcements.removeAnnouncement(announcementKey)) { + MessageManager.sendSpecialMessage(sender, "command_announcement_removed", announcementKey); } else { - MessageManager.sendSpecialMessage(sender, "command_announcement_stopped_error", args[1].toUpperCase()); + MessageManager.sendSpecialMessage(sender, "command_announcement_does_not_exist", announcementKey); } - - } else { - - showCommandUsage(sender); + break; } + case "start": { + int timer; + if (args.length < 3 || (timer = parseInt(args[2])) == -1) { + showCommandUsage(sender); + return; + } - } else if (args.length == 3) { - - if (isInteger(args[2])) { - - if (args[0].toLowerCase().equals("start")) { - - if (Announcements.startAnnouncement(args[1].toLowerCase(), Integer.parseInt(args[2])) == true) { - MessageManager.sendSpecialMessage(sender, "command_announcement_started", args[1].toUpperCase()); - } else { - MessageManager.sendSpecialMessage(sender, "command_announcement_started_error", args[1].toUpperCase()); - } - + String announcementKey = args[1].toLowerCase(); + if (Announcements.startAnnouncement(announcementKey, timer)) { + MessageManager.sendSpecialMessage(sender, "command_announcement_started", announcementKey); } else { - + MessageManager.sendSpecialMessage(sender, "command_announcement_started_error", announcementKey); + } + break; + } + case "stop": { + if (args.length < 2) { showCommandUsage(sender); - + return; } - } else if (args[0].toLowerCase().equals("add")) { - - if (Announcements.addAnnouncement(args[1].toLowerCase(), args[2]) == true) { - MessageManager.sendSpecialMessage(sender, "command_announcement_added", args[1].toUpperCase()); + String announcementKey = args[1].toLowerCase(); + if (Announcements.stopAnnouncement(announcementKey)) { + MessageManager.sendSpecialMessage(sender, "command_announcement_stopped", announcementKey); } else { - MessageManager.sendSpecialMessage(sender, "command_announcement_added_error", args[1].toUpperCase()); + MessageManager.sendSpecialMessage(sender, "command_announcement_stopped_error", announcementKey); } - - } else { - - showCommandUsage(sender); - + break; } - - } else if (args.length >= 3) { - - if (args[0].toLowerCase().equals("add")) { - - String message = MultiChatUtil.getMessageFromArgs(args, 2); - - if (Announcements.addAnnouncement(args[1].toLowerCase(), message) == true) { - MessageManager.sendSpecialMessage(sender, "command_announcement_added", args[1].toUpperCase()); + default: { + if (Announcements.existsAnnouncemnt(arg)) { + Announcements.playAnnouncement(arg); } else { - MessageManager.sendSpecialMessage(sender, "command_announcement_added_error", args[1].toUpperCase()); + MessageManager.sendSpecialMessage(sender, "command_announcement_does_not_exist", arg); } - - } else { - - showCommandUsage(sender); - + break; } - - } else { - - showCommandUsage(sender); - } - - } - - public static boolean isInteger(String str) { - - try { - - @SuppressWarnings("unused") - int n = Integer.parseInt(str); - - } catch(NumberFormatException nfe) { - return false; - } - - return true; - } - - private void showCommandUsage(CommandSender sender) { - - MessageManager.sendMessage(sender, "command_announcement_usage"); - sender.sendMessage(new ComponentBuilder("/announcement add ").color(ChatColor.AQUA).create()); - sender.sendMessage(new ComponentBuilder("/announcement remove ").color(ChatColor.AQUA).create()); - sender.sendMessage(new ComponentBuilder("/announcement start ").color(ChatColor.AQUA).create()); - sender.sendMessage(new ComponentBuilder("/announcement stop ").color(ChatColor.AQUA).create()); - sender.sendMessage(new ComponentBuilder("/announcement list").color(ChatColor.AQUA).create()); - sender.sendMessage(new ComponentBuilder("/announce ").color(ChatColor.AQUA).create()); - - } - + } + + private int parseInt(String str) { + try { + return Integer.parseInt(str); + } catch (NumberFormatException nfe) { + return -1; + } + } + + private void showCommandUsage(CommandSender sender) { + MessageManager.sendMessage(sender, "command_announcement_usage"); + sender.sendMessage(new ComponentBuilder("/announcement add ").color(ChatColor.AQUA).create()); + sender.sendMessage(new ComponentBuilder("/announcement remove ").color(ChatColor.AQUA).create()); + sender.sendMessage(new ComponentBuilder("/announcement start ").color(ChatColor.AQUA).create()); + sender.sendMessage(new ComponentBuilder("/announcement stop ").color(ChatColor.AQUA).create()); + sender.sendMessage(new ComponentBuilder("/announcement list").color(ChatColor.AQUA).create()); + sender.sendMessage(new ComponentBuilder("/announce ").color(ChatColor.AQUA).create()); + } } From 09f3e0bfb97949ce65b9e3932f0bdf1f3c42bfae Mon Sep 17 00:00:00 2001 From: Gadse Date: Mon, 3 Aug 2020 22:43:18 +0200 Subject: [PATCH 107/188] AnnouncementCommand overhaul (Forgot formatting) --- .../bungee/commands/AnnouncementCommand.java | 160 +++++++++--------- 1 file changed, 80 insertions(+), 80 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/AnnouncementCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/AnnouncementCommand.java index b0f9040d..cb2c527d 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/AnnouncementCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/AnnouncementCommand.java @@ -24,91 +24,91 @@ public AnnouncementCommand() { } public void execute(CommandSender sender, String[] args) { - if (args.length == 0) { - showCommandUsage(sender); - return; - } + if (args.length == 0) { + showCommandUsage(sender); + return; + } - String arg = args[0].toLowerCase(); - switch (arg) { - case "list": { - MessageManager.sendMessage(sender, "command_announcement_list"); - Announcements.getAnnouncementList().forEach((key, value) -> - MessageManager.sendSpecialMessage(sender, - "command_announcement_list_item", - key + ": +++" + value, - true - ) - ); - break; - } - case "add": { - if (args.length < 3) { - showCommandUsage(sender); - return; - } + String arg = args[0].toLowerCase(); + switch (arg) { + case "list": { + MessageManager.sendMessage(sender, "command_announcement_list"); + Announcements.getAnnouncementList().forEach((key, value) -> + MessageManager.sendSpecialMessage(sender, + "command_announcement_list_item", + key + ": +++" + value, + true + ) + ); + break; + } + case "add": { + if (args.length < 3) { + showCommandUsage(sender); + return; + } - String announcementKey = args[1].toLowerCase(); - String message = String.join(" ", Arrays.copyOfRange(args, 2, args.length)); - if (Announcements.addAnnouncement(announcementKey, message)) { - MessageManager.sendSpecialMessage(sender, "command_announcement_added", announcementKey); - } else { - MessageManager.sendSpecialMessage(sender, "command_announcement_added_error", announcementKey); - } - break; - } - case "remove": { - if (args.length < 2) { - showCommandUsage(sender); - return; - } + String announcementKey = args[1].toLowerCase(); + String message = String.join(" ", Arrays.copyOfRange(args, 2, args.length)); + if (Announcements.addAnnouncement(announcementKey, message)) { + MessageManager.sendSpecialMessage(sender, "command_announcement_added", announcementKey); + } else { + MessageManager.sendSpecialMessage(sender, "command_announcement_added_error", announcementKey); + } + break; + } + case "remove": { + if (args.length < 2) { + showCommandUsage(sender); + return; + } - String announcementKey = args[1].toLowerCase(); - if (Announcements.removeAnnouncement(announcementKey)) { - MessageManager.sendSpecialMessage(sender, "command_announcement_removed", announcementKey); - } else { - MessageManager.sendSpecialMessage(sender, "command_announcement_does_not_exist", announcementKey); - } - break; - } - case "start": { - int timer; - if (args.length < 3 || (timer = parseInt(args[2])) == -1) { - showCommandUsage(sender); - return; - } + String announcementKey = args[1].toLowerCase(); + if (Announcements.removeAnnouncement(announcementKey)) { + MessageManager.sendSpecialMessage(sender, "command_announcement_removed", announcementKey); + } else { + MessageManager.sendSpecialMessage(sender, "command_announcement_does_not_exist", announcementKey); + } + break; + } + case "start": { + int timer; + if (args.length < 3 || (timer = parseInt(args[2])) == -1) { + showCommandUsage(sender); + return; + } - String announcementKey = args[1].toLowerCase(); - if (Announcements.startAnnouncement(announcementKey, timer)) { - MessageManager.sendSpecialMessage(sender, "command_announcement_started", announcementKey); - } else { - MessageManager.sendSpecialMessage(sender, "command_announcement_started_error", announcementKey); - } - break; - } - case "stop": { - if (args.length < 2) { - showCommandUsage(sender); - return; - } + String announcementKey = args[1].toLowerCase(); + if (Announcements.startAnnouncement(announcementKey, timer)) { + MessageManager.sendSpecialMessage(sender, "command_announcement_started", announcementKey); + } else { + MessageManager.sendSpecialMessage(sender, "command_announcement_started_error", announcementKey); + } + break; + } + case "stop": { + if (args.length < 2) { + showCommandUsage(sender); + return; + } - String announcementKey = args[1].toLowerCase(); - if (Announcements.stopAnnouncement(announcementKey)) { - MessageManager.sendSpecialMessage(sender, "command_announcement_stopped", announcementKey); - } else { - MessageManager.sendSpecialMessage(sender, "command_announcement_stopped_error", announcementKey); - } - break; - } - default: { - if (Announcements.existsAnnouncemnt(arg)) { - Announcements.playAnnouncement(arg); - } else { - MessageManager.sendSpecialMessage(sender, "command_announcement_does_not_exist", arg); - } - break; - } - } + String announcementKey = args[1].toLowerCase(); + if (Announcements.stopAnnouncement(announcementKey)) { + MessageManager.sendSpecialMessage(sender, "command_announcement_stopped", announcementKey); + } else { + MessageManager.sendSpecialMessage(sender, "command_announcement_stopped_error", announcementKey); + } + break; + } + default: { + if (Announcements.existsAnnouncemnt(arg)) { + Announcements.playAnnouncement(arg); + } else { + MessageManager.sendSpecialMessage(sender, "command_announcement_does_not_exist", arg); + } + break; + } + } } private int parseInt(String str) { From 65d78dfc0c30f8c4213c9719f3ec9d09bb040b41 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Tue, 4 Aug 2020 00:46:42 +0100 Subject: [PATCH 108/188] Refactored lots of the MultiChatUtil code and added JUNIT tests --- .../multichat/bungee/Announcements.java | 4 +- .../multichat/bungee/Bulletins.java | 2 +- .../multichat/bungee/ConsoleManager.java | 2 +- .../multichat/bungee/MessageManager.java | 8 +- .../bungee/PrivateMessageManager.java | 8 +- .../multichat/bungee/StaffChatManager.java | 4 +- .../bungee/commands/DisplayCommand.java | 2 +- .../multichat/bungee/commands/GCCommand.java | 6 +- .../multichat/common/MultiChatUtil.java | 82 +++++++++------ .../multichat/common/TranslateMode.java | 22 ++--- .../local/common/LocalChatManager.java | 27 +---- .../local/common/commands/NickCommand.java | 5 +- .../local/spigot/LocalSpigotMetaManager.java | 6 +- .../local/sponge/LocalSpongeMetaManager.java | 6 +- .../sponge/LocalSpongePlaceholderManager.java | 2 +- .../common/channels/local/LocalChannel.java | 4 +- .../channels/proxy/GenericProxyChannel.java | 6 +- .../common/listeners/ProxyLogoutListener.java | 2 +- .../ProxyServerConnectedListener.java | 4 +- .../multichat/junit/MultiChatUtilTest.java | 99 +++++++++++++++++++ 20 files changed, 200 insertions(+), 101 deletions(-) create mode 100644 multichat/src/test/java/xyz/olivermartin/multichat/junit/MultiChatUtilTest.java diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Announcements.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Announcements.java index 47bb942d..bd712033 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Announcements.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Announcements.java @@ -42,7 +42,7 @@ public void run() { for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { - onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(MultiChatUtil.approximateHexCodes(message))); + onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(MultiChatUtil.approximateRGBColourCodes(message))); } else { onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(message)); } @@ -142,7 +142,7 @@ public static void playAnnouncement(String name) { for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { - onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(MultiChatUtil.approximateHexCodes(message))); + onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(MultiChatUtil.approximateRGBColourCodes(message))); } else { onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(message)); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Bulletins.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Bulletins.java index acaa4b7d..537c527f 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Bulletins.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Bulletins.java @@ -115,7 +115,7 @@ public void run() { for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { - onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(MultiChatUtil.approximateHexCodes(message))); + onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(MultiChatUtil.approximateRGBColourCodes(message))); } else { onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(message)); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ConsoleManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ConsoleManager.java index 0945652c..ab724de1 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ConsoleManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ConsoleManager.java @@ -79,7 +79,7 @@ public static void logSocialSpy(String p1, String p2, String message) { private static void logToConsole(String message, String unformattedMessage) { BaseComponent[] first = TextComponent.fromLegacyText( - MultiChatUtil.approximateHexCodes( + MultiChatUtil.approximateRGBColourCodes( MultiChatUtil.translateColourCodes( MessageManager.getMessage("console_main_prefix") + message))); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MessageManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MessageManager.java index d2fa6b2b..354c4b10 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MessageManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MessageManager.java @@ -454,13 +454,13 @@ private static void handleSend(CommandSender sender, String id, String prefix, S if (sender instanceof ProxiedPlayer) { ProxiedPlayer player = (ProxiedPlayer) sender; if (MultiChat.legacyServers.contains(player.getServer().getInfo().getName())) { - message = MultiChatUtil.approximateHexCodes(message); - if (isSpecial) special = MultiChatUtil.approximateHexCodes(special); + message = MultiChatUtil.approximateRGBColourCodes(message); + if (isSpecial) special = MultiChatUtil.approximateRGBColourCodes(special); } } else { // Handle console - message = MultiChatUtil.approximateHexCodes(message); - if (isSpecial) special = MultiChatUtil.approximateHexCodes(special); + message = MultiChatUtil.approximateRGBColourCodes(message); + if (isSpecial) special = MultiChatUtil.approximateRGBColourCodes(special); } // If we want to treat the "Special" part as Json, then we will parse it here and treat it as a non special message diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PrivateMessageManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PrivateMessageManager.java index ab916182..dcecd879 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PrivateMessageManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PrivateMessageManager.java @@ -49,8 +49,8 @@ private void displayMessage(ProxiedPlayer player, String rawMessage, String repl replacement = MultiChatUtil.translateColourCodes(replacement); if (MultiChat.legacyServers.contains(player.getServer().getInfo().getName())) { - rawMessage = MultiChatUtil.approximateHexCodes(rawMessage); - replacement = MultiChatUtil.approximateHexCodes(replacement); + rawMessage = MultiChatUtil.approximateRGBColourCodes(rawMessage); + replacement = MultiChatUtil.approximateRGBColourCodes(replacement); } player.sendMessage(ProxyJsonUtils.parseMessage(rawMessage, "%MESSAGE%", replacement)); @@ -59,8 +59,8 @@ private void displayMessage(ProxiedPlayer player, String rawMessage, String repl private void displayConsoleMessage(String rawMessage, String replacement) { - rawMessage = MultiChatUtil.approximateHexCodes(MultiChatUtil.translateColourCodes(rawMessage)); - replacement = MultiChatUtil.approximateHexCodes(MultiChatUtil.translateColourCodes(replacement)); + rawMessage = MultiChatUtil.approximateRGBColourCodes(MultiChatUtil.translateColourCodes(rawMessage)); + replacement = MultiChatUtil.approximateRGBColourCodes(MultiChatUtil.translateColourCodes(replacement)); ProxyServer.getInstance().getConsole().sendMessage(ProxyJsonUtils.parseMessage(rawMessage, "%MESSAGE%", replacement)); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/StaffChatManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/StaffChatManager.java index 6ac93bdd..c8a1df5f 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/StaffChatManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/StaffChatManager.java @@ -85,8 +85,8 @@ private void sendStaffChatMessage(String id, String username, String displayname String originalTranslated = MultiChatUtil.translateColourCodes(original); if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { - message = MultiChatUtil.approximateHexCodes(message); - originalTranslated = MultiChatUtil.approximateHexCodes(originalTranslated); + message = MultiChatUtil.approximateRGBColourCodes(message); + originalTranslated = MultiChatUtil.approximateRGBColourCodes(originalTranslated); } onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(message, "%MESSAGE%", originalTranslated)); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/DisplayCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/DisplayCommand.java index 1e009739..5f8a7440 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/DisplayCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/DisplayCommand.java @@ -59,7 +59,7 @@ public static void displayMessage(String message) { onlineplayer.getServer().getInfo().getName())) continue; if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { - onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(MultiChatUtil.approximateHexCodes(message))); + onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(MultiChatUtil.approximateRGBColourCodes(message))); } else { onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(message)); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GCCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GCCommand.java index 4336d227..e07e095d 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GCCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GCCommand.java @@ -135,7 +135,7 @@ public static void sendMessage(String originalMessage, String playerName, TGroup if (potentialPlayer != null) { if (!ChatControl.ignores(potentialPlayer.getUniqueId(), onlineplayer.getUniqueId(), "group_chats")) { if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { - onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(MultiChatUtil.approximateHexCodes(message), "%MESSAGE%", MultiChatUtil.approximateHexCodes(originalTranslated))); + onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(MultiChatUtil.approximateRGBColourCodes(message), "%MESSAGE%", MultiChatUtil.approximateRGBColourCodes(originalTranslated))); } else { onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(message, "%MESSAGE%", originalTranslated)); } @@ -144,7 +144,7 @@ public static void sendMessage(String originalMessage, String playerName, TGroup } } else { if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { - onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(MultiChatUtil.approximateHexCodes(message), "%MESSAGE%", MultiChatUtil.approximateHexCodes(originalTranslated))); + onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(MultiChatUtil.approximateRGBColourCodes(message), "%MESSAGE%", MultiChatUtil.approximateRGBColourCodes(originalTranslated))); } else { onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(message, "%MESSAGE%", originalTranslated)); } @@ -154,7 +154,7 @@ public static void sendMessage(String originalMessage, String playerName, TGroup } - BaseComponent[] finalMessage = ProxyJsonUtils.parseMessage(MultiChatUtil.approximateHexCodes(message), "%MESSAGE%", MultiChatUtil.approximateHexCodes(originalTranslated)); + BaseComponent[] finalMessage = ProxyJsonUtils.parseMessage(MultiChatUtil.approximateRGBColourCodes(message), "%MESSAGE%", MultiChatUtil.approximateRGBColourCodes(originalTranslated)); String consoleMessage = ""; for (BaseComponent bc : finalMessage) consoleMessage += bc.toLegacyText(); ConsoleManager.logGroupChat(consoleMessage); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/common/MultiChatUtil.java b/multichat/src/main/java/xyz/olivermartin/multichat/common/MultiChatUtil.java index 2bc157f0..c51ed401 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/common/MultiChatUtil.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/common/MultiChatUtil.java @@ -8,7 +8,13 @@ import java.util.regex.Pattern; public class MultiChatUtil { - + + private static final Pattern SHORT_UNTRANSLATED_RGB = Pattern.compile("(?i)\\&(x|#)([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])"); + private static final Pattern LONG_UNTRANSLATED_RGB = Pattern.compile("(?i)\\&x\\&([0-9A-F])\\&([0-9A-F])\\&([0-9A-F])\\&([0-9A-F])\\&([0-9A-F])\\&([0-9A-F])"); + private static final Pattern TRANSLATED_RGB = Pattern.compile("(?i)(§r)?§x§([0-9A-F])§([0-9A-F])§([0-9A-F])§([0-9A-F])§([0-9A-F])§([0-9A-F])"); + private static final Pattern ALL_FORMATTING_CHARS = Pattern.compile("(?i)([0-9A-FK-ORX])"); + private static final Pattern JSON_RGB = Pattern.compile("(?i)(\"color\":\")#([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])(\")"); + /** *

Takes a raw string and translates any colour codes using the & symbol

*

Any RGB codes in the format &#abcdef, &xabcdef or &x&a&b&c&d&e&f will also be translated

@@ -32,7 +38,7 @@ public static String translateColourCodes(String rawMessage, TranslateMode... mo boolean rgb = Arrays.stream(modes).anyMatch(value -> value.equals(TranslateMode.ALL) || value.equals(TranslateMode.COLOUR_ALL)); // If we are translating RGB codes, reformat these to the correct format - if (rgb) translatedMessage = MultiChatUtil.reformatRGB(translatedMessage); + if (rgb) translatedMessage = MultiChatUtil.preProcessColourCodes(translatedMessage); // Process each of the translations for (TranslateMode mode : modes) { @@ -49,47 +55,65 @@ public static String translateColourCodes(String rawMessage, TranslateMode... mo * @param message * @return message reformatted */ - private static String reformatRGB(String message) { - // Translate RGB codes - return message.replaceAll("(?i)\\&(x|#)([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])", "&r&x&$2&$3&$4&$5&$6&$7"); - } + public static String preProcessColourCodes(String message) { - public static String approximateHexCodes(String message) { + Matcher longRgb = LONG_UNTRANSLATED_RGB.matcher(message); + message = longRgb.replaceAll("&r&x&$1&$2&$3&$4&$5&$6"); - message = message.replaceAll("(?i)(\\&|§)x(\\&|§)([0-9A-F])(\\&|§)([0-9A-F])(\\&|§)([0-9A-F])(\\&|§)([0-9A-F])(\\&|§)([0-9A-F])(\\&|§)([0-9A-F])", "&#$3$5$7$9$11$13"); + Matcher shortRgb = SHORT_UNTRANSLATED_RGB.matcher(message); + message = shortRgb.replaceAll("&r&x&$2&$3&$4&$5&$6&$7"); - List allMatches = new ArrayList(); - Matcher m = Pattern.compile("(?i)\\&(x|#)([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])") - .matcher(message); - while (m.find()) { - allMatches.add(m.group()); - } + String transformedMessage = ""; + char lastChar = 'a'; - for (String match : allMatches) { + // Transform codes to lowercase for better compatibility with Essentials etc. + for (char c : message.toCharArray()) { + + // If this could be a colour code + if (lastChar == '&') { + + // If it is a colour code, set to be lowercase + Matcher allFormattingChars = ALL_FORMATTING_CHARS.matcher(String.valueOf(c)); + if (allFormattingChars.matches()) { + c = Character.toLowerCase(c); + } - String hexonly; - if (match.contains("#")) { - hexonly = match.split("#")[1]; - } else if (match.contains("x")) { - hexonly = match.split("x")[1]; - } else { - hexonly = match.split("X")[1]; } - String minecraftCode = hexToMinecraft(hexonly); - message = message.replace(match,"§"+minecraftCode); + + // Append to message + transformedMessage = transformedMessage + c; + lastChar = c; + } - return approximateJsonHexCodes(message); + return transformedMessage; } - private static String approximateJsonHexCodes(String message) { + public static String approximateRGBColourCodes(String message) { + + Matcher rgbMatcher = TRANSLATED_RGB.matcher(message); + message = rgbMatcher.replaceAll("&#$2$3$4$5$6$7"); - message = message.replaceAll("(?i)(\"color\":\")#([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])(\")", "$1&#$2$3$4$5$6$7$8"); + message = replaceRGBShortCodesWithApproximations(message); + + return approximateJsonRGBColourCodes(message); + + } + + private static String approximateJsonRGBColourCodes(String message) { + + Matcher jsonRgbMatcher = JSON_RGB.matcher(message); + message = jsonRgbMatcher.replaceAll("$1&#$2$3$4$5$6$7$8"); + return replaceRGBShortCodesWithApproximations(message); + + } + + private static String replaceRGBShortCodesWithApproximations(String message) { List allMatches = new ArrayList(); - Matcher m = Pattern.compile("(?i)\\&(x|#)([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])") - .matcher(message); + Matcher m = SHORT_UNTRANSLATED_RGB.matcher(message); + while (m.find()) { allMatches.add(m.group()); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/common/TranslateMode.java b/multichat/src/main/java/xyz/olivermartin/multichat/common/TranslateMode.java index 8431e3b3..bad5205f 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/common/TranslateMode.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/common/TranslateMode.java @@ -5,16 +5,16 @@ public enum TranslateMode { - COLOUR_SIMPLE ("(?i)&(?=[a-f,0-9,r])"), - COLOUR_ALL ("(?i)&(?=[a-f,0-9,r,x])"), - FORMAT_UNDERLINE ("(?i)&(?=[r,n])"), - FORMAT_ITALIC ("(?i)&(?=[r,o])"), - FORMAT_BOLD ("(?i)&(?=[r,l])"), - FORMAT_STRIKE ("(?i)&(?=[r,m])"), - FORMAT_OBFUSCATED ("(?i)&(?=[r,k])"), - FORMAT_ALL ("(?i)&(?=[k-o,r])"), - SIMPLE ("(?i)&(?=[a-f,0-9,k-o,r])"), - ALL ("(?i)&(?=[a-f,0-9,k-o,r,x])"); + COLOUR_SIMPLE ("(?i)&([a-f,0-9,r])"), + COLOUR_ALL ("(?i)&([a-f,0-9,r,x])"), + FORMAT_UNDERLINE ("(?i)&([r,n])"), + FORMAT_ITALIC ("(?i)&([r,o])"), + FORMAT_BOLD ("(?i)&([r,l])"), + FORMAT_STRIKE ("(?i)&([r,m])"), + FORMAT_OBFUSCATED ("(?i)&([r,k])"), + FORMAT_ALL ("(?i)&([k-o,r])"), + SIMPLE ("(?i)&([a-f,0-9,k-o,r])"), + ALL ("(?i)&([a-f,0-9,k-o,r,x])"); private Pattern pattern; @@ -28,7 +28,7 @@ public Pattern getPattern() { public String translate(String rawMessage) { Matcher matcher = pattern.matcher(rawMessage); - return matcher.replaceAll("§"); + return matcher.replaceAll("§$1"); } } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalChatManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalChatManager.java index 13eb1617..74044be1 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalChatManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalChatManager.java @@ -283,31 +283,6 @@ public boolean canChatInRGBColour(UUID uuid) { } - public String reformatRGB(String message) { - - // Translate RGB codes - message = message.replaceAll("(?i)\\&(x|#)([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])", "&x&$2&$3&$4&$5&$6&$7"); - - String transformedMessage = ""; - char lastChar = 'a'; - - // Transform codes to lowercase for better compatibility with Essentials etc. - for (char c : message.toCharArray()) { - - if (lastChar == '&') { - if (String.valueOf(c).matches("(?i)([0-9A-FX])")) { - c = Character.toLowerCase(c); - } - } - - transformedMessage = transformedMessage + c; - lastChar = c; - } - - return transformedMessage; - - } - public String translateColourCodes(String message, boolean rgb) { if (rgb) { @@ -317,7 +292,7 @@ public String translateColourCodes(String message, boolean rgb) { } if (MultiChatLocal.getInstance().getDataStore().isLegacy()) { - message = MultiChatUtil.approximateHexCodes(message); + message = MultiChatUtil.approximateRGBColourCodes(message); } return message; diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/commands/NickCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/commands/NickCommand.java index 4f74a189..ffecdd59 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/commands/NickCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/commands/NickCommand.java @@ -3,6 +3,7 @@ import java.util.UUID; import java.util.regex.Pattern; +import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.local.common.MultiChatLocal; import xyz.olivermartin.multichat.local.common.MultiChatLocalPlayer; import xyz.olivermartin.multichat.local.common.config.LocalConfig; @@ -15,7 +16,7 @@ public abstract class NickCommand { public boolean executeNickCommand(UUID targetUniqueId, MultiChatLocalPlayer sender, String proposedNick) { - proposedNick = MultiChatLocal.getInstance().getChatManager().reformatRGB(proposedNick); + proposedNick = MultiChatUtil.preProcessColourCodes(proposedNick); LocalNameManager lnm = MultiChatLocal.getInstance().getNameManager(); @@ -49,7 +50,7 @@ public boolean executeNickCommand(UUID targetUniqueId, MultiChatLocalPlayer send public boolean executeConsoleNickCommand(UUID targetUniqueId, MultiChatLocalCommandSender console, String proposedNick) { - proposedNick = MultiChatLocal.getInstance().getChatManager().reformatRGB(proposedNick); + proposedNick = MultiChatUtil.preProcessColourCodes(proposedNick); LocalNameManager lnm = MultiChatLocal.getInstance().getNameManager(); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotMetaManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotMetaManager.java index 0aff5614..0f4aa43d 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotMetaManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotMetaManager.java @@ -31,7 +31,7 @@ public String getPrefix(UUID uuid) { prefix = MultiChatUtil.translateColourCodes(prefix); // Deal with legacy servers - if (MultiChatLocal.getInstance().getDataStore().isLegacy()) prefix = MultiChatUtil.approximateHexCodes(prefix); + if (MultiChatLocal.getInstance().getDataStore().isLegacy()) prefix = MultiChatUtil.approximateRGBColourCodes(prefix); return prefix; @@ -57,7 +57,7 @@ public String getSuffix(UUID uuid) { suffix = MultiChatUtil.translateColourCodes(suffix); // Deal with legacy servers - if (MultiChatLocal.getInstance().getDataStore().isLegacy()) suffix = MultiChatUtil.approximateHexCodes(suffix); + if (MultiChatLocal.getInstance().getDataStore().isLegacy()) suffix = MultiChatUtil.approximateRGBColourCodes(suffix); return suffix; @@ -113,7 +113,7 @@ public String getDisplayName(UUID uuid) { // Handle legacy servers if (MultiChatLocal.getInstance().getDataStore().isLegacy()) - displayNameFormat = MultiChatUtil.approximateHexCodes(displayNameFormat); + displayNameFormat = MultiChatUtil.approximateRGBColourCodes(displayNameFormat); player.setDisplayName(displayNameFormat); player.setPlayerListName(displayNameFormat); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongeMetaManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongeMetaManager.java index 19d9309a..a00bbb59 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongeMetaManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongeMetaManager.java @@ -24,7 +24,7 @@ public String getPrefix(UUID uuid) { Player player = opPlayer.get(); if (player.getOption("prefix").isPresent()) { - return MultiChatUtil.approximateHexCodes(MultiChatUtil.translateColourCodes(player.getOption("prefix").get())); + return MultiChatUtil.approximateRGBColourCodes(MultiChatUtil.translateColourCodes(player.getOption("prefix").get())); } else { return ""; } @@ -45,7 +45,7 @@ public String getSuffix(UUID uuid) { Player player = opPlayer.get(); if (player.getOption("suffix").isPresent()) { - return MultiChatUtil.approximateHexCodes(MultiChatUtil.translateColourCodes(player.getOption("suffix").get())); + return MultiChatUtil.approximateRGBColourCodes(MultiChatUtil.translateColourCodes(player.getOption("suffix").get())); } else { return ""; } @@ -93,7 +93,7 @@ public String getDisplayName(UUID uuid) { displayNameFormat = displayNameFormat.replaceAll("%PREFIX%", getPrefix(uuid)); displayNameFormat = displayNameFormat.replaceAll("%SUFFIX%", getSuffix(uuid)); displayNameFormat = MultiChatUtil.translateColourCodes(displayNameFormat); - displayNameFormat = MultiChatUtil.approximateHexCodes(displayNameFormat); + displayNameFormat = MultiChatUtil.approximateRGBColourCodes(displayNameFormat); // TODO Sponge doesn't seem to like this... So we tend to work around it by sending back our original string player.offer(Keys.DISPLAY_NAME,Text.of(displayNameFormat)); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongePlaceholderManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongePlaceholderManager.java index cfa86bb4..e78ef555 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongePlaceholderManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongePlaceholderManager.java @@ -17,7 +17,7 @@ public LocalSpongePlaceholderManager() { public String buildChatFormat(UUID uuid, String format) { format = processMultiChatPlaceholders(uuid, format);//.replaceAll("(?i)&(?=[a-f,0-9,k-o,r,x])", "§"); format = MultiChatLocal.getInstance().getChatManager().translateColourCodes(format, true); - format = MultiChatUtil.approximateHexCodes(format); + format = MultiChatUtil.approximateRGBColourCodes(format); return format; } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/local/LocalChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/local/LocalChannel.java index 863d3259..a67f6203 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/local/LocalChannel.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/local/LocalChannel.java @@ -84,7 +84,7 @@ public void distributeMessage(ProxiedPlayer sender, String message, String forma } if (MultiChat.legacyServers.contains(receiver.getServer().getInfo().getName())) { - receiver.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(finalMessage))); + receiver.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateRGBColourCodes(finalMessage))); } else { receiver.sendMessage(TextComponent.fromLegacyText(finalMessage)); } @@ -118,7 +118,7 @@ public void broadcastRawMessage(CommandSender sender, String server, String mess } if (MultiChat.legacyServers.contains(receiver.getServer().getInfo().getName())) { - receiver.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(finalMessage))); + receiver.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateRGBColourCodes(finalMessage))); } else { receiver.sendMessage(TextComponent.fromLegacyText(finalMessage)); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/GenericProxyChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/GenericProxyChannel.java index bd8cb7b9..d98d8100 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/GenericProxyChannel.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/GenericProxyChannel.java @@ -84,7 +84,7 @@ public void distributeMessage(ProxiedPlayer sender, String message, String forma } if (MultiChat.legacyServers.contains(receiver.getServer().getInfo().getName())) { - receiver.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(joined))); + receiver.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateRGBColourCodes(joined))); } else { receiver.sendMessage(TextComponent.fromLegacyText(joined)); } @@ -94,7 +94,7 @@ public void distributeMessage(ProxiedPlayer sender, String message, String forma // Trigger PostGlobalChatEvent ProxyServer.getInstance().getPluginManager().callEvent(new PostGlobalChatEvent(sender, format, message)); - ConsoleManager.logChat(MultiChatUtil.approximateHexCodes(joined)); + ConsoleManager.logChat(MultiChatUtil.approximateRGBColourCodes(joined)); } @@ -120,7 +120,7 @@ public void broadcastRawMessage(CommandSender sender, String message) { continue; if (MultiChat.legacyServers.contains(receiver.getServer().getInfo().getName())) { - receiver.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateHexCodes(message))); + receiver.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateRGBColourCodes(message))); } else { receiver.sendMessage(TextComponent.fromLegacyText(message)); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLogoutListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLogoutListener.java index d9a9c67e..dd92ec9c 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLogoutListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLogoutListener.java @@ -30,7 +30,7 @@ private void displayMessage(ProxiedPlayer player, String message) { message = MultiChatUtil.translateColourCodes(message); - if (MultiChat.legacyServers.contains(player.getServer().getInfo().getName())) message = MultiChatUtil.approximateHexCodes(message); + if (MultiChat.legacyServers.contains(player.getServer().getInfo().getName())) message = MultiChatUtil.approximateRGBColourCodes(message); player.sendMessage(ProxyJsonUtils.parseMessage(message)); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyServerConnectedListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyServerConnectedListener.java index 242e6999..0498a9d5 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyServerConnectedListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyServerConnectedListener.java @@ -29,10 +29,10 @@ private void displayMessage(ProxiedPlayer player, ProxiedPlayer sender, String s message = MultiChatUtil.translateColourCodes(message); if (player.getUniqueId().equals(sender.getUniqueId())) { - if (MultiChat.legacyServers.contains(senderServer)) message = MultiChatUtil.approximateHexCodes(message); + if (MultiChat.legacyServers.contains(senderServer)) message = MultiChatUtil.approximateRGBColourCodes(message); } else { if (player.getServer() == null) return; - if (MultiChat.legacyServers.contains(player.getServer().getInfo().getName())) message = MultiChatUtil.approximateHexCodes(message); + if (MultiChat.legacyServers.contains(player.getServer().getInfo().getName())) message = MultiChatUtil.approximateRGBColourCodes(message); } player.sendMessage(ProxyJsonUtils.parseMessage(message)); diff --git a/multichat/src/test/java/xyz/olivermartin/multichat/junit/MultiChatUtilTest.java b/multichat/src/test/java/xyz/olivermartin/multichat/junit/MultiChatUtilTest.java new file mode 100644 index 00000000..f9729c7d --- /dev/null +++ b/multichat/src/test/java/xyz/olivermartin/multichat/junit/MultiChatUtilTest.java @@ -0,0 +1,99 @@ +package xyz.olivermartin.multichat.junit; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; +import org.junit.runner.JUnitCore; +import org.junit.runner.Result; +import org.junit.runner.notification.Failure; + +import xyz.olivermartin.multichat.common.MultiChatUtil; +import xyz.olivermartin.multichat.common.TranslateMode; + +public class MultiChatUtilTest { + + public static void main(String[] args) { + Result result = JUnitCore.runClasses(MultiChatUtilTest.class); + for (Failure failure : result.getFailures()) { + System.out.println(failure.toString()); + } + } + + @Test + public void shouldTranslateColourCodesCorrectly() { + + String rawMessage = "&r&aHello &kthere! &6<his &ois &ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!"; + + // ALL + assertEquals("All colour codes should be translated appropriately", + "§r§aHello §kthere! §6§lthis §ois §ma §nmessage! §r§x§a§b§c§d§e§fRGB §r§x§a§b§c§d§e§ftoo§r§x§a§b§c§d§e§f!", + MultiChatUtil.translateColourCodes(rawMessage)); + + // ALL #2 + assertEquals("All colour codes should be translated appropriately", + "§r§aHello §kthere! §6§lthis §ois §ma §nmessage! §r§x§a§b§c§d§e§fRGB §r§x§a§b§c§d§e§ftoo§r§x§a§b§c§d§e§f!", + MultiChatUtil.translateColourCodes(rawMessage, TranslateMode.ALL)); + + // SIMPLE + assertEquals("All colour codes should be translated appropriately", + "§r§aHello §kthere! §6§lthis §ois §ma §nmessage! &#ABCDEFRGB &xAbCdEftoo&x§a§b§c§d§e§f!", + MultiChatUtil.translateColourCodes(rawMessage, TranslateMode.SIMPLE)); + + // SIMPLE COLOUR + assertEquals("All colour codes should be translated appropriately", + "§r§aHello &kthere! §6<his &ois &ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x§a§b§c§d§e§f!", + MultiChatUtil.translateColourCodes(rawMessage, TranslateMode.COLOUR_SIMPLE)); + + // ALL COLOUR + assertEquals("All colour codes should be translated appropriately", + "§r§aHello &kthere! §6<his &ois &ma &nmessage! §r§x§a§b§c§d§e§fRGB §r§x§a§b§c§d§e§ftoo§r§x§a§b§c§d§e§f!", + MultiChatUtil.translateColourCodes(rawMessage, TranslateMode.COLOUR_ALL)); + + // FORMAT UNDERLINE + assertEquals("All colour codes should be translated appropriately", + "§r&aHello &kthere! &6<his &ois &ma §nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!", + MultiChatUtil.translateColourCodes(rawMessage, TranslateMode.FORMAT_UNDERLINE)); + + // FORMAT ITALIC + assertEquals("All colour codes should be translated appropriately", + "§r&aHello &kthere! &6<his §ois &ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!", + MultiChatUtil.translateColourCodes(rawMessage, TranslateMode.FORMAT_ITALIC)); + + // FORMAT BOLD + assertEquals("All colour codes should be translated appropriately", + "§r&aHello &kthere! &6§lthis &ois &ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!", + MultiChatUtil.translateColourCodes(rawMessage, TranslateMode.FORMAT_BOLD)); + + // FORMAT STRIKE + assertEquals("All colour codes should be translated appropriately", + "§r&aHello &kthere! &6<his &ois §ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!", + MultiChatUtil.translateColourCodes(rawMessage, TranslateMode.FORMAT_STRIKE)); + + // FORMAT OBFUSCATED + assertEquals("All colour codes should be translated appropriately", + "§r&aHello §kthere! &6<his &ois &ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!", + MultiChatUtil.translateColourCodes(rawMessage, TranslateMode.FORMAT_OBFUSCATED)); + + // FORMAT ALL + assertEquals("All colour codes should be translated appropriately", + "§r&aHello §kthere! &6§lthis §ois §ma §nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!", + MultiChatUtil.translateColourCodes(rawMessage, TranslateMode.FORMAT_ALL)); + + } + + @Test + public void shouldNotChangeWithMultipleTranslations() { + + String rawMessage = "&r&aHello &kthere! &6<his &ois &ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!"; + + String translated1 = MultiChatUtil.translateColourCodes(rawMessage); + + String translated2 = MultiChatUtil.translateColourCodes(translated1); + + assertEquals("Resulting translations should be the same after multiple parses", + translated1, + translated2); + + } + +} From 22e13e67244fabacce4e62f26a70d5b47d644d43 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Tue, 4 Aug 2020 00:59:52 +0100 Subject: [PATCH 109/188] Fix error with JSON RGB code approximations being used for non JSON --- .../multichat/common/MultiChatUtil.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/common/MultiChatUtil.java b/multichat/src/main/java/xyz/olivermartin/multichat/common/MultiChatUtil.java index c51ed401..4dae4ce5 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/common/MultiChatUtil.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/common/MultiChatUtil.java @@ -95,7 +95,7 @@ public static String approximateRGBColourCodes(String message) { Matcher rgbMatcher = TRANSLATED_RGB.matcher(message); message = rgbMatcher.replaceAll("&#$2$3$4$5$6$7"); - message = replaceRGBShortCodesWithApproximations(message); + message = replaceRGBShortCodesWithApproximations(message, false); return approximateJsonRGBColourCodes(message); @@ -105,11 +105,11 @@ private static String approximateJsonRGBColourCodes(String message) { Matcher jsonRgbMatcher = JSON_RGB.matcher(message); message = jsonRgbMatcher.replaceAll("$1&#$2$3$4$5$6$7$8"); - return replaceRGBShortCodesWithApproximations(message); + return replaceRGBShortCodesWithApproximations(message, true); } - private static String replaceRGBShortCodesWithApproximations(String message) { + private static String replaceRGBShortCodesWithApproximations(String message, boolean useNameInsteadOfCode) { List allMatches = new ArrayList(); Matcher m = SHORT_UNTRANSLATED_RGB.matcher(message); @@ -129,7 +129,13 @@ private static String replaceRGBShortCodesWithApproximations(String message) { hexonly = match.split("X")[1]; } String minecraftCode = hexToMinecraft(hexonly); - message = message.replace(match,getMinecraftCodeName(minecraftCode)); + + if (useNameInsteadOfCode) { + message = message.replace(match,getMinecraftCodeName(minecraftCode)); + } else { + message = message.replace(match,"§"+minecraftCode); + } + } return message; From f9cc7b19946a753e32577f8b741c392e69f820a2 Mon Sep 17 00:00:00 2001 From: Gadse Date: Tue, 4 Aug 2020 07:32:16 +0200 Subject: [PATCH 110/188] BulletinCommand overhaul --- .../bungee/commands/BulletinCommand.java | 188 +++++++++--------- 1 file changed, 89 insertions(+), 99 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/BulletinCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/BulletinCommand.java index 50dd76d9..5481cace 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/BulletinCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/BulletinCommand.java @@ -1,5 +1,6 @@ package xyz.olivermartin.multichat.bungee.commands; +import java.util.Arrays; import java.util.Iterator; import net.md_5.bungee.api.ChatColor; @@ -9,112 +10,101 @@ import xyz.olivermartin.multichat.bungee.Bulletins; import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.MessageManager; -import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; /** * Bulletin Command *

Allows the user to create, start and stop bulletins

- * - * @author Oliver Martin (Revilo410) * + * @author Oliver Martin (Revilo410) */ public class BulletinCommand extends Command { - public BulletinCommand() { - super("mcbulletin", "multichat.bulletin", (String[]) ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("bulletin").toArray(new String[0])); - } - - @Override - public void execute(CommandSender sender, String[] args) { - - if (args.length < 1) { - - showCommandUsage(sender); - - } else if (args.length == 1) { - - if (args[0].toLowerCase().equals("stop")) { - - Bulletins.stopBulletins(); - MessageManager.sendMessage(sender, "command_bulletin_stopped"); - - } else if (args[0].toLowerCase().equals("list")) { - - int counter = 0; - Iterator it = Bulletins.getIterator(); - - MessageManager.sendMessage(sender, "command_bulletin_list"); - while (it.hasNext()) { - counter++; - MessageManager.sendSpecialMessage(sender, "command_bulletin_list_item", counter + ": +++" + it.next(), true); - } - - } else { - - showCommandUsage(sender); - - } - - } else if (args.length == 2) { - - if (args[0].toLowerCase().equals("remove")) { - - try { - - Bulletins.removeBulletin(Integer.parseInt(args[1]) - 1); - MessageManager.sendMessage(sender, "command_bulletin_removed"); - - } catch (Exception e) { - MessageManager.sendMessage(sender, "command_bulletin_invalid_usage"); - } - - } else if (args[0].toLowerCase().equals("start") ) { - - try { - Bulletins.startBulletins(Integer.parseInt(args[1])); - MessageManager.sendMessage(sender, "command_bulletin_started"); - } catch (Exception e) { - MessageManager.sendMessage(sender, "command_bulletin_invalid_usage"); - } - - } else if (args[0].toLowerCase().equals("add") ) { - - Bulletins.addBulletin(args[1]); - MessageManager.sendMessage(sender, "command_bulletin_added"); - - } else { - - showCommandUsage(sender); - - } - - } else if (args.length > 2) { - - if (args[0].toLowerCase().equals("add")) { - - String message = MultiChatUtil.getMessageFromArgs(args, 1); - - Bulletins.addBulletin(message); - MessageManager.sendMessage(sender, "command_bulletin_added"); - } - - } else { - - showCommandUsage(sender); - - } - - } - - private void showCommandUsage(CommandSender sender) { - - MessageManager.sendMessage(sender, "command_bulletin_usage"); - sender.sendMessage(new ComponentBuilder("/bulletin add ").color(ChatColor.AQUA).create()); - sender.sendMessage(new ComponentBuilder("/bulletin remove ").color(ChatColor.AQUA).create()); - sender.sendMessage(new ComponentBuilder("/bulletin start ").color(ChatColor.AQUA).create()); - sender.sendMessage(new ComponentBuilder("/bulletin stop").color(ChatColor.AQUA).create()); - sender.sendMessage(new ComponentBuilder("/bulletin list").color(ChatColor.AQUA).create()); - - } + public BulletinCommand() { + super("mcbulletin", "multichat.bulletin", ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("bulletin").toArray(new String[0])); + } + + @Override + public void execute(CommandSender sender, String[] args) { + if (args.length == 0) { + showCommandUsage(sender); + return; + } + + String arg = args[0].toLowerCase(); + switch (arg) { + case "stop": { + Bulletins.stopBulletins(); + MessageManager.sendMessage(sender, "command_bulletin_stopped"); + break; + } + case "list": { + // TODO: Refactor Bulletins to change this part properly + int counter = 0; + Iterator it = Bulletins.getIterator(); + + MessageManager.sendMessage(sender, "command_bulletin_list"); + while (it.hasNext()) { + counter++; + MessageManager.sendSpecialMessage(sender, "command_bulletin_list_item", counter + ": +++" + it.next(), true); + } + break; + } + case "add": { + if (args.length < 2) { + showCommandUsage(sender); + return; + } + + Bulletins.addBulletin(String.join(" ", Arrays.copyOfRange(args, 1, args.length))); + MessageManager.sendMessage(sender, "command_bulletin_added"); + break; + } + case "remove": { + if (args.length < 2) { + showCommandUsage(sender); + return; + } + + int id; + try { + id = Integer.parseInt(args[1]); + } catch (NumberFormatException ignored) { + MessageManager.sendMessage(sender, "command_bulletin_invalid_usage"); + return; + } + + Bulletins.removeBulletin(id - 1); + MessageManager.sendMessage(sender, "command_bulletin_removed"); + break; + } + case "start": { + if (args.length < 2) { + showCommandUsage(sender); + return; + } + + int bulletinDelay; + try { + bulletinDelay = Integer.parseInt(args[1]); + } catch (NumberFormatException ignored) { + MessageManager.sendMessage(sender, "command_bulletin_invalid_usage"); + return; + } + + Bulletins.startBulletins(bulletinDelay); + MessageManager.sendMessage(sender, "command_bulletin_started"); + break; + } + } + } + + private void showCommandUsage(CommandSender sender) { + MessageManager.sendMessage(sender, "command_bulletin_usage"); + sender.sendMessage(new ComponentBuilder("/bulletin add ").color(ChatColor.AQUA).create()); + sender.sendMessage(new ComponentBuilder("/bulletin remove ").color(ChatColor.AQUA).create()); + sender.sendMessage(new ComponentBuilder("/bulletin start ").color(ChatColor.AQUA).create()); + sender.sendMessage(new ComponentBuilder("/bulletin stop").color(ChatColor.AQUA).create()); + sender.sendMessage(new ComponentBuilder("/bulletin list").color(ChatColor.AQUA).create()); + } } \ No newline at end of file From 7d4b0871398ebff2e07e9701604896bb3417834a Mon Sep 17 00:00:00 2001 From: Gadse Date: Tue, 4 Aug 2020 07:39:51 +0200 Subject: [PATCH 111/188] Move BulletinCommand argument case for proper order --- .../multichat/bungee/commands/BulletinCommand.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/BulletinCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/BulletinCommand.java index 5481cace..a98b9f19 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/BulletinCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/BulletinCommand.java @@ -33,11 +33,6 @@ public void execute(CommandSender sender, String[] args) { String arg = args[0].toLowerCase(); switch (arg) { - case "stop": { - Bulletins.stopBulletins(); - MessageManager.sendMessage(sender, "command_bulletin_stopped"); - break; - } case "list": { // TODO: Refactor Bulletins to change this part properly int counter = 0; @@ -96,6 +91,11 @@ public void execute(CommandSender sender, String[] args) { MessageManager.sendMessage(sender, "command_bulletin_started"); break; } + case "stop": { + Bulletins.stopBulletins(); + MessageManager.sendMessage(sender, "command_bulletin_stopped"); + break; + } } } From 05198cfb3da7fc7fbaf9dcf7ae77bbe7446a69e1 Mon Sep 17 00:00:00 2001 From: Gadse Date: Tue, 4 Aug 2020 07:58:42 +0200 Subject: [PATCH 112/188] Cleaner command usage handling --- .../bungee/commands/AnnouncementCommand.java | 38 ++++++++----------- .../bungee/commands/BulletinCommand.java | 34 ++++++++--------- 2 files changed, 31 insertions(+), 41 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/AnnouncementCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/AnnouncementCommand.java index cb2c527d..2063de48 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/AnnouncementCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/AnnouncementCommand.java @@ -40,13 +40,11 @@ public void execute(CommandSender sender, String[] args) { true ) ); - break; + return; } case "add": { - if (args.length < 3) { - showCommandUsage(sender); - return; - } + if (args.length < 3) + break; String announcementKey = args[1].toLowerCase(); String message = String.join(" ", Arrays.copyOfRange(args, 2, args.length)); @@ -55,13 +53,11 @@ public void execute(CommandSender sender, String[] args) { } else { MessageManager.sendSpecialMessage(sender, "command_announcement_added_error", announcementKey); } - break; + return; } case "remove": { - if (args.length < 2) { - showCommandUsage(sender); - return; - } + if (args.length < 2) + break; String announcementKey = args[1].toLowerCase(); if (Announcements.removeAnnouncement(announcementKey)) { @@ -69,14 +65,12 @@ public void execute(CommandSender sender, String[] args) { } else { MessageManager.sendSpecialMessage(sender, "command_announcement_does_not_exist", announcementKey); } - break; + return; } case "start": { int timer; - if (args.length < 3 || (timer = parseInt(args[2])) == -1) { - showCommandUsage(sender); - return; - } + if (args.length < 3 || (timer = parseInt(args[2])) == -1) + break; String announcementKey = args[1].toLowerCase(); if (Announcements.startAnnouncement(announcementKey, timer)) { @@ -84,13 +78,11 @@ public void execute(CommandSender sender, String[] args) { } else { MessageManager.sendSpecialMessage(sender, "command_announcement_started_error", announcementKey); } - break; + return; } case "stop": { - if (args.length < 2) { - showCommandUsage(sender); - return; - } + if (args.length < 2) + break; String announcementKey = args[1].toLowerCase(); if (Announcements.stopAnnouncement(announcementKey)) { @@ -98,7 +90,7 @@ public void execute(CommandSender sender, String[] args) { } else { MessageManager.sendSpecialMessage(sender, "command_announcement_stopped_error", announcementKey); } - break; + return; } default: { if (Announcements.existsAnnouncemnt(arg)) { @@ -106,9 +98,11 @@ public void execute(CommandSender sender, String[] args) { } else { MessageManager.sendSpecialMessage(sender, "command_announcement_does_not_exist", arg); } - break; + return; } } + + showCommandUsage(sender); } private int parseInt(String str) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/BulletinCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/BulletinCommand.java index a98b9f19..42c922ea 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/BulletinCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/BulletinCommand.java @@ -43,60 +43,56 @@ public void execute(CommandSender sender, String[] args) { counter++; MessageManager.sendSpecialMessage(sender, "command_bulletin_list_item", counter + ": +++" + it.next(), true); } - break; + return; } case "add": { - if (args.length < 2) { - showCommandUsage(sender); - return; - } + if (args.length < 2) + break; Bulletins.addBulletin(String.join(" ", Arrays.copyOfRange(args, 1, args.length))); MessageManager.sendMessage(sender, "command_bulletin_added"); - break; + return; } case "remove": { - if (args.length < 2) { - showCommandUsage(sender); - return; - } + if (args.length < 2) + break; int id; try { id = Integer.parseInt(args[1]); } catch (NumberFormatException ignored) { MessageManager.sendMessage(sender, "command_bulletin_invalid_usage"); - return; + break; } Bulletins.removeBulletin(id - 1); MessageManager.sendMessage(sender, "command_bulletin_removed"); - break; + return; } case "start": { - if (args.length < 2) { - showCommandUsage(sender); - return; - } + if (args.length < 2) + break; int bulletinDelay; try { bulletinDelay = Integer.parseInt(args[1]); } catch (NumberFormatException ignored) { MessageManager.sendMessage(sender, "command_bulletin_invalid_usage"); - return; + break; } Bulletins.startBulletins(bulletinDelay); MessageManager.sendMessage(sender, "command_bulletin_started"); - break; + return; } case "stop": { Bulletins.stopBulletins(); MessageManager.sendMessage(sender, "command_bulletin_stopped"); - break; + return; } } + + showCommandUsage(sender); } private void showCommandUsage(CommandSender sender) { From e4e4b26473e1b7451ef0fec185884ed2a2f8dd65 Mon Sep 17 00:00:00 2001 From: Gadse Date: Tue, 4 Aug 2020 08:07:22 +0200 Subject: [PATCH 113/188] CastCommand refactor --- .../bungee/commands/CastCommand.java | 171 +++++++----------- 1 file changed, 63 insertions(+), 108 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/CastCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/CastCommand.java index 72205c4e..428826b5 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/CastCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/CastCommand.java @@ -1,7 +1,5 @@ package xyz.olivermartin.multichat.bungee.commands; -import java.util.Iterator; - import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.chat.ComponentBuilder; @@ -9,119 +7,76 @@ import xyz.olivermartin.multichat.bungee.CastControl; import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.MessageManager; -import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; +import java.util.Arrays; + /** * Cast Command *

The Custom broadcAST (CAST) command allows you to create your own customised broadcast formats

- * - * @author Oliver Martin (Revilo410) * + * @author Oliver Martin (Revilo410) */ public class CastCommand extends Command { - public CastCommand() { - super("mccast", "multichat.cast.admin", (String[]) ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("cast").toArray(new String[0])); - } - - public void showCommandUsage(CommandSender sender) { - MessageManager.sendMessage(sender, "command_cast_usage"); - sender.sendMessage(new ComponentBuilder("/cast add ").color(ChatColor.AQUA).create()); - sender.sendMessage(new ComponentBuilder("/cast remove ").color(ChatColor.AQUA).create()); - sender.sendMessage(new ComponentBuilder("/cast list").color(ChatColor.AQUA).create()); - sender.sendMessage(new ComponentBuilder("/ ").color(ChatColor.AQUA).create()); - } - - @Override - public void execute(CommandSender sender, String[] args) { - - if (args.length < 1) { - - showCommandUsage(sender); - - } else if (args.length == 1) { - - if (args[0].toLowerCase().equals("list")) { - - Iterator it = CastControl.castList.keySet().iterator(); - String currentItem; - - MessageManager.sendMessage(sender, "command_cast_list"); - while (it.hasNext()) { - currentItem = it.next(); - MessageManager.sendSpecialMessage(sender, "command_cast_list_item", currentItem + ": " + CastControl.castList.get(currentItem)); - } - - } else { - showCommandUsage(sender); - } - - } else if (args.length == 2) { - - if (args[0].toLowerCase().equals("remove")) { - - if (CastControl.existsCast(args[1])) { - - CastControl.removeCast(args[1]); - MessageManager.sendSpecialMessage(sender, "command_cast_removed", args[1].toUpperCase()); - - } else { - - MessageManager.sendSpecialMessage(sender, "command_cast_does_not_exist", args[1].toUpperCase()); - } - - } else { - - showCommandUsage(sender); - - } - - } else if (args.length == 3) { - - if (args[0].toLowerCase().equals("add")) { - - if (!(CastControl.existsCast(args[1])) && !args[1].equalsIgnoreCase("cast")) { - - CastControl.addCast(args[1], args[2]); - MessageManager.sendSpecialMessage(sender, "command_cast_added", args[1].toUpperCase()); - - } else { - - MessageManager.sendSpecialMessage(sender, "command_cast_added_error", args[1].toUpperCase()); - } - - } else { - - showCommandUsage(sender); - - } - - } else if (args.length >= 3) { - - if (args[0].toLowerCase().equals("add")) { - - String message = MultiChatUtil.getMessageFromArgs(args, 2); - - if (!CastControl.existsCast(args[1])) { - - CastControl.addCast(args[1], message); - MessageManager.sendSpecialMessage(sender, "command_cast_added", args[1].toUpperCase()); - - } else { - - MessageManager.sendSpecialMessage(sender, "command_cast_added_error", args[1].toUpperCase()); - } - - } else { - - showCommandUsage(sender); - - } - - } else { - - showCommandUsage(sender); - } - } + public CastCommand() { + super("mccast", "multichat.cast.admin", ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("cast").toArray(new String[0])); + } + + @Override + public void execute(CommandSender sender, String[] args) { + if (args.length == 0) { + showCommandUsage(sender); + return; + } + + String arg = args[0].toLowerCase(); + switch (arg) { + case "list": { + MessageManager.sendMessage(sender, "command_cast_list"); + CastControl.castList.forEach((key, value) -> + MessageManager.sendSpecialMessage(sender, "command_cast_list_item", key + ": " + value) + ); + return; + } + case "add": { + if (args.length < 3) + break; + + String castName = args[1]; + if (CastControl.existsCast(castName) || castName.equalsIgnoreCase("cast")) { + MessageManager.sendSpecialMessage(sender, "command_cast_added_error", castName); + return; + } + + CastControl.addCast(castName, String.join(" ", Arrays.copyOfRange(args, 2, args.length))); + MessageManager.sendSpecialMessage(sender, "command_cast_added", castName); + return; + } + case "remove": { + if (args.length < 2) + break; + + String castName = args[1]; + if (!CastControl.existsCast(castName)) { + MessageManager.sendSpecialMessage(sender, "command_cast_does_not_exist", castName); + return; + } + + CastControl.removeCast(castName); + MessageManager.sendSpecialMessage(sender, "command_cast_removed", castName); + return; + } + } + + showCommandUsage(sender); + } + + public void showCommandUsage(CommandSender sender) { + MessageManager.sendMessage(sender, "command_cast_usage"); + sender.sendMessage(new ComponentBuilder("/cast add ").color(ChatColor.AQUA).create()); + sender.sendMessage(new ComponentBuilder("/cast remove ").color(ChatColor.AQUA).create()); + sender.sendMessage(new ComponentBuilder("/cast list").color(ChatColor.AQUA).create()); + sender.sendMessage(new ComponentBuilder("/ ").color(ChatColor.AQUA).create()); + } } From dbcd376880cd9727f939a0e9482cca0a00d6d372 Mon Sep 17 00:00:00 2001 From: Gadse Date: Tue, 4 Aug 2020 09:48:24 +0200 Subject: [PATCH 114/188] ChannelCommand refactor --- .../bungee/commands/ChannelCommand.java | 290 ++++++++---------- 1 file changed, 120 insertions(+), 170 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ChannelCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ChannelCommand.java index 086fec16..0f38195a 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ChannelCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ChannelCommand.java @@ -13,181 +13,131 @@ import xyz.olivermartin.multichat.proxy.common.channels.proxy.ProxyChannel; import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; +import java.util.Optional; +import java.util.UUID; + /** * Chat Channel Command *

Players can use this command to switch channels, as well as show and hide specific channels

- * - * @author Oliver Martin (Revilo410) * + * @author Oliver Martin (Revilo410) */ public class ChannelCommand extends Command { - public ChannelCommand() { - super("mcchannel", "multichat.chat.channel", (String[]) ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("channel").toArray(new String[0])); - } - - private void showHelp(CommandSender sender) { - - MessageManager.sendMessage(sender, "command_channel_help"); - - } - - @Override - public void execute(CommandSender sender, String[] args) { - - ChannelManager channelManager = MultiChatProxy.getInstance().getChannelManager(); - - if ((sender instanceof ProxiedPlayer)) { - - if ((args.length < 1) || ((args.length == 1) && (args[0].toLowerCase().equals("help")))) { - - showHelp(sender); - - } else if (args.length == 1) { - - showHelp(sender); - - } else if (args.length == 2) { - - String subCommand = args[0].toLowerCase(); - String operand = args[1].toLowerCase(); - - switch (subCommand) { - - case "switch": - if (!sender.hasPermission("multichat.chat.channel.switch")) { - MessageManager.sendMessage(sender, "command_channel_switch_no_permission"); - return; - } - if (operand.equals("local")) { - ChatModeManager.getInstance().setLocal(((ProxiedPlayer)sender).getUniqueId()); - MessageManager.sendSpecialMessage(sender, "command_channel_switch", operand.toUpperCase()); - } else if (operand.equals("global")) { - ChatModeManager.getInstance().setGlobal(((ProxiedPlayer)sender).getUniqueId()); - MessageManager.sendSpecialMessage(sender, "command_channel_switch", operand.toUpperCase()); - } else { - - if (channelManager.existsProxyChannel(operand)) { - - ProxyChannel proxyChannel = channelManager.getProxyChannel(operand).get(); - - if (!proxyChannel.getInfo().hasSpeakPermission(sender)) { - MessageManager.sendMessage(sender, "command_channel_switch_no_permission"); - return; - } - - ChatModeManager.getInstance().setGlobal(((ProxiedPlayer)sender).getUniqueId()); - channelManager.select(((ProxiedPlayer)sender).getUniqueId(), operand); - MessageManager.sendSpecialMessage(sender, "command_channel_switch", operand.toUpperCase()); - } else { - MessageManager.sendMessage(sender, "command_channel_does_not_exist"); - } - - } - break; - - case "hide": - if (!sender.hasPermission("multichat.chat.channel.hide")) { - MessageManager.sendMessage(sender, "command_channel_hide_no_permission"); - return; - } - if (operand.equals("local")) { - - if (!ChatModeManager.getInstance().isGlobal(((ProxiedPlayer)sender).getUniqueId())) { - MessageManager.sendMessage(sender, "command_channel_cannot_hide"); - return; - } - - if (!channelManager.isHidden(((ProxiedPlayer)sender).getUniqueId(), "local")) { - channelManager.hide(((ProxiedPlayer)sender).getUniqueId(),"local"); - MessageManager.sendSpecialMessage(sender, "command_channel_hide", operand.toUpperCase()); - } else { - MessageManager.sendSpecialMessage(sender, "command_channel_already_hide", operand.toUpperCase()); - } - - } else if (operand.equals("global")) { - - if (ChatModeManager.getInstance().isGlobal(((ProxiedPlayer)sender).getUniqueId())) { - MessageManager.sendMessage(sender, "command_channel_cannot_hide"); - return; - } - - if (!channelManager.isHidden(((ProxiedPlayer)sender).getUniqueId(), "global")) { - channelManager.hide(((ProxiedPlayer)sender).getUniqueId(),"global"); - MessageManager.sendSpecialMessage(sender, "command_channel_hide", operand.toUpperCase()); - } else { - MessageManager.sendSpecialMessage(sender, "command_channel_already_hide", operand.toUpperCase()); - } - - } else { - MessageManager.sendMessage(sender, "command_channel_does_not_exist"); - } - break; - - case "show": - if (!sender.hasPermission("multichat.chat.channel.show")) { - MessageManager.sendMessage(sender, "command_channel_show_no_permission"); - return; - } - if (operand.equals("local")) { - - if (channelManager.isHidden(((ProxiedPlayer)sender).getUniqueId(), "local")) { - channelManager.show(((ProxiedPlayer)sender).getUniqueId(),"local"); - MessageManager.sendSpecialMessage(sender, "command_channel_show", operand.toUpperCase()); - } else { - MessageManager.sendSpecialMessage(sender, "command_channel_already_show", operand.toUpperCase()); - } - - } else if (operand.equals("global")) { - - if (channelManager.isHidden(((ProxiedPlayer)sender).getUniqueId(), "global")) { - channelManager.show(((ProxiedPlayer)sender).getUniqueId(),"global"); - MessageManager.sendSpecialMessage(sender, "command_channel_show", operand.toUpperCase()); - } else { - MessageManager.sendSpecialMessage(sender, "command_channel_already_show", operand.toUpperCase()); - } - - } else { - MessageManager.sendMessage(sender, "command_channel_does_not_exist"); - } - break; - - default: - showHelp(sender); - break; - } - - ProxiedPlayer player = (ProxiedPlayer) sender; - String channelFormat; - - switch (channelManager.getChannel(player)) { - - case "global": - channelFormat = channelManager.getGlobalChannel().getInfo().getFormat(); - break; - case "local": - channelFormat = channelManager.getLocalChannel().getFormat(); - break; - default: - if (channelManager.existsProxyChannel(channelManager.getChannel(player))) { - channelFormat = channelManager.getProxyChannel(channelManager.getChannel(player)).get().getInfo().getFormat(); - } else { - channelFormat = channelManager.getGlobalChannel().getInfo().getFormat(); - } - break; - } - - // Update local channel info - for (ProxiedPlayer p : ProxyServer.getInstance().getPlayers()) { - ProxyLocalCommunicationManager.sendPlayerDataMessage(p.getName(), channelManager.getChannel(p), channelFormat, p.getServer().getInfo(), (p.hasPermission("multichat.chat.colour")||p.hasPermission("multichat.chat.color")||p.hasPermission("multichat.chat.colour.simple")||p.hasPermission("multichat.chat.color.simple")), (p.hasPermission("multichat.chat.colour")||p.hasPermission("multichat.chat.color")||p.hasPermission("multichat.chat.colour.rgb")||p.hasPermission("multichat.chat.color.rgb"))); - } - - } - - } else { - MessageManager.sendMessage(sender, "command_channel_only_players"); - } - - } - + public ChannelCommand() { + super("mcchannel", "multichat.chat.channel", ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("channel").toArray(new String[0])); + } + + @Override + public void execute(CommandSender sender, String[] args) { + if (!(sender instanceof ProxiedPlayer)) { + MessageManager.sendMessage(sender, "command_channel_only_players"); + return; + } + + if (args.length < 2) { + showCommandUsage(sender); + return; + } + + ChannelManager channelManager = MultiChatProxy.getInstance().getChannelManager(); + String operand = args[1].toLowerCase(); + + // TODO: This check is horrible... + // Future implementation of channelManager.exists? + // Or implement a Channel interface that both Proxy and Local extend + if (!channelManager.existsProxyChannel(operand) && !operand.equals("local")) { + MessageManager.sendMessage(sender, "command_channel_does_not_exist"); + return; + } + + ProxiedPlayer proxiedPlayer = (ProxiedPlayer) sender; + UUID proxiedPlayerUID = proxiedPlayer.getUniqueId(); + Optional optionalProxyChannel = channelManager.getProxyChannel(operand); + + String subCommand = args[0].toLowerCase(); + + switch (subCommand) { + case "switch": { + if (!sender.hasPermission("multichat.chat.channel.switch")) { + MessageManager.sendMessage(sender, "command_channel_switch_no_permission"); + return; + } + + if (optionalProxyChannel.isPresent()) { + ProxyChannel proxyChannel = optionalProxyChannel.get(); + + if (!proxyChannel.getInfo().hasSpeakPermission(sender)) { + MessageManager.sendMessage(sender, "command_channel_switch_no_permission"); + return; + } + } + + ChatModeManager.getInstance().setGlobal(proxiedPlayerUID); + channelManager.select(proxiedPlayerUID, operand); + MessageManager.sendSpecialMessage(sender, "command_channel_switch", operand.toUpperCase()); + break; + } + case "hide": { + if (!sender.hasPermission("multichat.chat.channel.hide")) { + MessageManager.sendMessage(sender, "command_channel_hide_no_permission"); + return; + } + + if (channelManager.getChannel(proxiedPlayer).equalsIgnoreCase(operand)) { + MessageManager.sendMessage(sender, "command_channel_cannot_hide"); + return; + } + + if (channelManager.isHidden(proxiedPlayerUID, operand)) { + MessageManager.sendSpecialMessage(sender, "command_channel_already_hide", operand.toUpperCase()); + return; + } + + channelManager.hide(proxiedPlayerUID, operand); + MessageManager.sendSpecialMessage(sender, "command_channel_hide", operand.toUpperCase()); + break; + } + case "show": { + if (!sender.hasPermission("multichat.chat.channel.show")) { + MessageManager.sendMessage(sender, "command_channel_show_no_permission"); + return; + } + + if (!channelManager.isHidden(proxiedPlayerUID, operand)) { + MessageManager.sendSpecialMessage(sender, "command_channel_already_show", operand.toUpperCase()); + return; + } + + channelManager.show(proxiedPlayerUID, operand); + MessageManager.sendSpecialMessage(sender, "command_channel_show", operand.toUpperCase()); + break; + } + default: { + showCommandUsage(sender); + return; + } + } + + String channelFormat = optionalProxyChannel.isPresent() + ? optionalProxyChannel.get().getInfo().getFormat() + : channelManager.getLocalChannel().getFormat(); + + // Update channel info + for (ProxiedPlayer p : ProxyServer.getInstance().getPlayers()) { + ProxyLocalCommunicationManager.sendPlayerDataMessage(p.getName(), + channelManager.getChannel(p), + channelFormat, + p.getServer().getInfo(), + // TODO: Change this permission check mess please for the love of god (Move inside sendPlayerDataMessage) + (p.hasPermission("multichat.chat.colour") || p.hasPermission("multichat.chat.color") || p.hasPermission("multichat.chat.colour.simple") || p.hasPermission("multichat.chat.color.simple")), + (p.hasPermission("multichat.chat.colour") || p.hasPermission("multichat.chat.color") || p.hasPermission("multichat.chat.colour.rgb") || p.hasPermission("multichat.chat.color.rgb")) + ); + } + + } + + private void showCommandUsage(CommandSender sender) { + MessageManager.sendMessage(sender, "command_channel_help"); + } } From 4dedcf0f3ee13a3e4608deee61672d3c544d7ebd Mon Sep 17 00:00:00 2001 From: Gadse Date: Tue, 4 Aug 2020 12:14:19 +0200 Subject: [PATCH 115/188] ClearChatCommand refactor --- .../bungee/commands/ClearChatCommand.java | 195 +++++++++--------- 1 file changed, 92 insertions(+), 103 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ClearChatCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ClearChatCommand.java index 612f6a14..3eb54edc 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ClearChatCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/ClearChatCommand.java @@ -2,7 +2,7 @@ import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.ProxyServer; -import net.md_5.bungee.api.chat.ComponentBuilder; +import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.plugin.Command; import xyz.olivermartin.multichat.bungee.ConfigManager; @@ -10,113 +10,102 @@ import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; +import java.util.List; +import java.util.function.Predicate; +import java.util.stream.Stream; + /** * Clear Chat Command *

Allows the user to clear their personal chat, the server chat, the global chat, or all servers' chat

- * - * @author Oliver Martin (Revilo410) * + * @author Oliver Martin (Revilo410) */ public class ClearChatCommand extends Command { - public ClearChatCommand() { - super("mcclearchat", "multichat.chat.clear", (String[]) ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("clearchat").toArray(new String[0])); - } - - private void clearChatSelf(CommandSender sender) { - - for (int i = 1 ; i<151 ; i++ ) { - sender.sendMessage(new ComponentBuilder("").create()); - } - MessageManager.sendMessage(sender, "command_clearchat_self"); - - } - - private void clearChatServer(CommandSender sender) { - - for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { - if (onlineplayer.getServer().getInfo().getName().equals(((ProxiedPlayer) sender).getServer().getInfo().getName() )) { - for (int i = 1 ; i<151 ; i++ ) { - onlineplayer.sendMessage(new ComponentBuilder("").create()); - } - MessageManager.sendMessage(onlineplayer, "command_clearchat_server"); - } - } - - } - - private void clearChatGlobal() { - - for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { - if (!ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getStringList(ConfigValues.Config.NO_GLOBAL).contains(onlineplayer.getServer().getInfo().getName()) ) { - for (int i = 1 ; i<151 ; i++ ) { - onlineplayer.sendMessage(new ComponentBuilder("").create()); - } - MessageManager.sendMessage(onlineplayer, "command_clearchat_global"); - } - } - - } - - private void clearChatAll() { - - for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { - for (int i = 1 ; i<151 ; i++ ) { - onlineplayer.sendMessage(new ComponentBuilder("").create()); - } - MessageManager.sendMessage(onlineplayer, "command_clearchat_all"); - } - - } - - public void execute(CommandSender sender, String[] args) { - - if (args.length < 1) { - - clearChatSelf(sender); - - } else { - if (args.length == 1) { - - if (args[0].toLowerCase().equals("self")) { - - clearChatSelf(sender); - - } else if (args[0].toLowerCase().equals("all") ) { - - if (sender.hasPermission("multichat.chat.clear.all")) { - - clearChatAll(); - - } else { - MessageManager.sendSpecialMessage(sender, "command_clearchat_no_permission", "ALL"); - } - - } else if (args[0].toLowerCase().equals("server") ) { - - if (sender.hasPermission("multichat.chat.clear.server")) { - - clearChatServer(sender); - - } else { - MessageManager.sendSpecialMessage(sender, "command_clearchat_no_permission", "SERVER"); - } - - } else if (args[0].toLowerCase().equals("global") ) { - - if (sender.hasPermission("multichat.chat.clear.global")) { - - clearChatGlobal(); - - } else { - MessageManager.sendSpecialMessage(sender, "command_clearchat_no_permission", "GLOBAL"); - } - - } - - } else { - MessageManager.sendMessage(sender, "command_clearchat_usage"); - } - } - } + private final TextComponent EMPTY_LINES; + + public ClearChatCommand() { + super("mcclearchat", "multichat.chat.clear", ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("clearchat").toArray(new String[0])); + + // Join space and linebreak character 200 times (= 100 empty lines) + char space = ' '; + char lf = '\n'; + char[] output = new char[200]; + // Reverse fori to fill char array properly + for (int i = 198; i >= 0; i -= 2) { + output[i] = space; + output[i + 1] = lf; + } + EMPTY_LINES = new TextComponent(new String(output)); + } + + public void execute(CommandSender sender, String[] args) { + String arg = args.length > 0 ? args[0].toLowerCase() : "self"; + switch (arg) { + case "self": { + clearChatSelf(sender); + break; + } + case "all": { + if (!sender.hasPermission("multichat.chat.clear.all")) { + MessageManager.sendSpecialMessage(sender, "command_clearchat_no_permission", "ALL"); + return; + } + + clearChatForEveryone(null, null); + break; + } + case "server": { + if (!(sender instanceof ProxiedPlayer)) { + // TODO: Implement message + return; + } + + if (!sender.hasPermission("multichat.chat.clear.server")) { + MessageManager.sendSpecialMessage(sender, "command_clearchat_no_permission", "SERVER"); + return; + } + + ProxiedPlayer proxiedPlayer = (ProxiedPlayer) sender; + clearChatForEveryone("command_clearchat_server", + target -> proxiedPlayer.getServer().getInfo().equals(target.getServer().getInfo()) + ); + break; + } + case "global": { + if (!sender.hasPermission("multichat.chat.clear.global")) { + MessageManager.sendSpecialMessage(sender, "command_clearchat_no_permission", "GLOBAL"); + return; + } + + List noGlobalServers = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG) + .getConfig().getStringList(ConfigValues.Config.NO_GLOBAL); + clearChatForEveryone("command_clearchat_global", + target -> target.getServer() != null + && !noGlobalServers.contains(target.getServer().getInfo().getName()) + ); + break; + } + default: { + MessageManager.sendMessage(sender, "command_clearchat_usage"); + break; + } + } + } + + private void clearChatSelf(CommandSender sender) { + sender.sendMessage(EMPTY_LINES); + MessageManager.sendMessage(sender, "command_clearchat_self"); + } + + private void clearChatForEveryone(String configPath, Predicate predicate) { + Stream playerStream = ProxyServer.getInstance().getPlayers().stream(); + if (predicate != null) playerStream = playerStream.filter(predicate); + playerStream.forEach(target -> { + target.sendMessage(EMPTY_LINES); + if (configPath != null && !configPath.isEmpty()) + MessageManager.sendMessage(target, configPath); + }); + playerStream.close(); + } } From 51fbfb1ba81edaad398502aca4faf4761824ac56 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Tue, 4 Aug 2020 11:47:06 +0100 Subject: [PATCH 116/188] Completed unit tests for the MultiChatUtil class --- .../multichat/common/MultiChatUtil.java | 8 +- .../multichat/junit/MultiChatUtilTest.java | 95 +++++++++++++++++-- 2 files changed, 90 insertions(+), 13 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/common/MultiChatUtil.java b/multichat/src/main/java/xyz/olivermartin/multichat/common/MultiChatUtil.java index 4dae4ce5..8d0e7075 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/common/MultiChatUtil.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/common/MultiChatUtil.java @@ -14,6 +14,8 @@ public class MultiChatUtil { private static final Pattern TRANSLATED_RGB = Pattern.compile("(?i)(§r)?§x§([0-9A-F])§([0-9A-F])§([0-9A-F])§([0-9A-F])§([0-9A-F])§([0-9A-F])"); private static final Pattern ALL_FORMATTING_CHARS = Pattern.compile("(?i)([0-9A-FK-ORX])"); private static final Pattern JSON_RGB = Pattern.compile("(?i)(\"color\":\")#([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])(\")"); + private static final Pattern APPROX_RGB_FORMAT = Pattern.compile("(?i)\\§(#)([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])"); + /** *

Takes a raw string and translates any colour codes using the & symbol

@@ -93,7 +95,7 @@ public static String preProcessColourCodes(String message) { public static String approximateRGBColourCodes(String message) { Matcher rgbMatcher = TRANSLATED_RGB.matcher(message); - message = rgbMatcher.replaceAll("&#$2$3$4$5$6$7"); + message = rgbMatcher.replaceAll("§#$2$3$4$5$6$7"); message = replaceRGBShortCodesWithApproximations(message, false); @@ -104,7 +106,7 @@ public static String approximateRGBColourCodes(String message) { private static String approximateJsonRGBColourCodes(String message) { Matcher jsonRgbMatcher = JSON_RGB.matcher(message); - message = jsonRgbMatcher.replaceAll("$1&#$2$3$4$5$6$7$8"); + message = jsonRgbMatcher.replaceAll("$1§#$2$3$4$5$6$7$8"); return replaceRGBShortCodesWithApproximations(message, true); } @@ -112,7 +114,7 @@ private static String approximateJsonRGBColourCodes(String message) { private static String replaceRGBShortCodesWithApproximations(String message, boolean useNameInsteadOfCode) { List allMatches = new ArrayList(); - Matcher m = SHORT_UNTRANSLATED_RGB.matcher(message); + Matcher m = APPROX_RGB_FORMAT.matcher(message); while (m.find()) { allMatches.add(m.group()); diff --git a/multichat/src/test/java/xyz/olivermartin/multichat/junit/MultiChatUtilTest.java b/multichat/src/test/java/xyz/olivermartin/multichat/junit/MultiChatUtilTest.java index f9729c7d..307b854d 100644 --- a/multichat/src/test/java/xyz/olivermartin/multichat/junit/MultiChatUtilTest.java +++ b/multichat/src/test/java/xyz/olivermartin/multichat/junit/MultiChatUtilTest.java @@ -2,6 +2,9 @@ import static org.junit.Assert.assertEquals; +import java.util.Arrays; +import java.util.Collection; + import org.junit.Test; import org.junit.runner.JUnitCore; import org.junit.runner.Result; @@ -25,22 +28,22 @@ public void shouldTranslateColourCodesCorrectly() { String rawMessage = "&r&aHello &kthere! &6<his &ois &ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!"; // ALL - assertEquals("All colour codes should be translated appropriately", + assertEquals("All codes should be translated appropriately", "§r§aHello §kthere! §6§lthis §ois §ma §nmessage! §r§x§a§b§c§d§e§fRGB §r§x§a§b§c§d§e§ftoo§r§x§a§b§c§d§e§f!", MultiChatUtil.translateColourCodes(rawMessage)); // ALL #2 - assertEquals("All colour codes should be translated appropriately", + assertEquals("All codes should be translated appropriately", "§r§aHello §kthere! §6§lthis §ois §ma §nmessage! §r§x§a§b§c§d§e§fRGB §r§x§a§b§c§d§e§ftoo§r§x§a§b§c§d§e§f!", MultiChatUtil.translateColourCodes(rawMessage, TranslateMode.ALL)); // SIMPLE - assertEquals("All colour codes should be translated appropriately", + assertEquals("Simple codes should be translated appropriately", "§r§aHello §kthere! §6§lthis §ois §ma §nmessage! &#ABCDEFRGB &xAbCdEftoo&x§a§b§c§d§e§f!", MultiChatUtil.translateColourCodes(rawMessage, TranslateMode.SIMPLE)); // SIMPLE COLOUR - assertEquals("All colour codes should be translated appropriately", + assertEquals("Simple colour codes should be translated appropriately", "§r§aHello &kthere! §6<his &ois &ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x§a§b§c§d§e§f!", MultiChatUtil.translateColourCodes(rawMessage, TranslateMode.COLOUR_SIMPLE)); @@ -50,32 +53,32 @@ public void shouldTranslateColourCodesCorrectly() { MultiChatUtil.translateColourCodes(rawMessage, TranslateMode.COLOUR_ALL)); // FORMAT UNDERLINE - assertEquals("All colour codes should be translated appropriately", + assertEquals("Underline codes should be translated appropriately", "§r&aHello &kthere! &6<his &ois &ma §nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!", MultiChatUtil.translateColourCodes(rawMessage, TranslateMode.FORMAT_UNDERLINE)); // FORMAT ITALIC - assertEquals("All colour codes should be translated appropriately", + assertEquals("Italic codes should be translated appropriately", "§r&aHello &kthere! &6<his §ois &ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!", MultiChatUtil.translateColourCodes(rawMessage, TranslateMode.FORMAT_ITALIC)); // FORMAT BOLD - assertEquals("All colour codes should be translated appropriately", + assertEquals("Bold codes should be translated appropriately", "§r&aHello &kthere! &6§lthis &ois &ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!", MultiChatUtil.translateColourCodes(rawMessage, TranslateMode.FORMAT_BOLD)); // FORMAT STRIKE - assertEquals("All colour codes should be translated appropriately", + assertEquals("Strike codes should be translated appropriately", "§r&aHello &kthere! &6<his &ois §ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!", MultiChatUtil.translateColourCodes(rawMessage, TranslateMode.FORMAT_STRIKE)); // FORMAT OBFUSCATED - assertEquals("All colour codes should be translated appropriately", + assertEquals("Obfuscation codes should be translated appropriately", "§r&aHello §kthere! &6<his &ois &ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!", MultiChatUtil.translateColourCodes(rawMessage, TranslateMode.FORMAT_OBFUSCATED)); // FORMAT ALL - assertEquals("All colour codes should be translated appropriately", + assertEquals("All format codes should be translated appropriately", "§r&aHello §kthere! &6§lthis §ois §ma §nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!", MultiChatUtil.translateColourCodes(rawMessage, TranslateMode.FORMAT_ALL)); @@ -96,4 +99,76 @@ public void shouldNotChangeWithMultipleTranslations() { } + @Test + public void shouldApproximateRGBColourCodesCorrectly() { + + String rawMessage = "&r&aHello &kthere! &6<his &ois &ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!"; + + String translated = MultiChatUtil.translateColourCodes(rawMessage); + + String approximated = MultiChatUtil.approximateRGBColourCodes(translated); + + assertEquals("Translated RGB colour codes should be approximated to nearest minecraft equivalent", + "§r§aHello §kthere! §6§lthis §ois §ma §nmessage! §7RGB §7too§7!", + approximated); + + String simpleTranslated = MultiChatUtil.translateColourCodes(rawMessage, TranslateMode.SIMPLE); + + String simpleApproximated = MultiChatUtil.approximateRGBColourCodes(simpleTranslated); + + assertEquals("Non translated RGB colour codes should NOT be approximated to nearest minecraft equivalent", + "§r§aHello §kthere! §6§lthis §ois §ma §nmessage! &#ABCDEFRGB &xAbCdEftoo&x§a§b§c§d§e§f!", + simpleApproximated); + + String jsonMessage = "{\"text\":\"hello world\", \"color\":\"#ABCDEF\"}"; + + assertEquals("JSON RGB colour codes should be approximated to nearest simple equivalent", + "{\"text\":\"hello world\", \"color\":\"gray\"}", + MultiChatUtil.approximateRGBColourCodes(jsonMessage)); + + String jsonMessage2 = "{\"text\":\"hello world\", \"color\":\"#aBcDeF\"}"; + + assertEquals("JSON RGB colour codes should be approximated to nearest simple equivalent (test 2)", + "{\"text\":\"hello world\", \"color\":\"gray\"}", + MultiChatUtil.approximateRGBColourCodes(jsonMessage2)); + + String jsonMessage3 = "{\"text\":\"hello world\", \"color\":\"#abcdef\"}"; + + assertEquals("JSON RGB colour codes should be approximated to nearest simple equivalent (test 3)", + "{\"text\":\"hello world\", \"color\":\"gray\"}", + MultiChatUtil.approximateRGBColourCodes(jsonMessage3)); + + String jsonMessage4 = "{\"text\":\"hello world\", \"color\":\"gray\"}"; + + assertEquals("Non RGB JSON messages should not be appoximated by the method", + jsonMessage4, + MultiChatUtil.approximateRGBColourCodes(jsonMessage4)); + + } + + @Test + public void shouldGetMessageFromArgsCorrectly() { + + String[] args = new String[] {"this", "is", "a", "message!"}; + + assertEquals("Message should be returned exactly from args", + "this is a message!", + MultiChatUtil.getMessageFromArgs(args)); + + assertEquals("Message should be returned exactly from args (with offset start)", + "is a message!", + MultiChatUtil.getMessageFromArgs(args, 1)); + + assertEquals("Message should be returned exactly from args (with offset start and end)", + "is a", + MultiChatUtil.getMessageFromArgs(args, 1, 2)); + + Collection collection = Arrays.asList(args); + + assertEquals("Message should be returned exactly from args (collection version)", + "this is a message!", + MultiChatUtil.getStringFromCollection(collection)); + + } + } From 55109958d2f2060db03c2977dd8d86bceabe6c05 Mon Sep 17 00:00:00 2001 From: Gadse Date: Tue, 4 Aug 2020 13:10:17 +0200 Subject: [PATCH 117/188] DisplayCommand Refactor --- .../bungee/commands/DisplayCommand.java | 94 +++++++++---------- 1 file changed, 43 insertions(+), 51 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/DisplayCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/DisplayCommand.java index 5f8a7440..5bea90b6 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/DisplayCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/DisplayCommand.java @@ -2,9 +2,7 @@ import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.ProxyServer; -import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.plugin.Command; -import net.md_5.bungee.config.Configuration; import xyz.olivermartin.multichat.bungee.ChatControl; import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.ConsoleManager; @@ -16,60 +14,54 @@ import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.proxy.common.config.ConfigValues; +import java.util.List; +import java.util.Optional; + /** * Display Command *

Displays a message to every player connected to the BungeeCord network

- * - * @author Oliver Martin (Revilo410) * + * @author Oliver Martin (Revilo410) */ public class DisplayCommand extends Command { - public DisplayCommand() { - super("mcdisplay", "multichat.staff.display", (String[]) ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("display").toArray(new String[0])); - } - - public void execute(CommandSender sender, String[] args) { - - if (args.length < 1) { - - MessageManager.sendMessage(sender, "command_display_desc"); - MessageManager.sendMessage(sender, "command_display_usage"); - - } else { - - String message = MultiChatUtil.getMessageFromArgs(args); - - displayMessage(message); - } - } - - public static void displayMessage(String message) { - - Configuration config = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig(); - - message = ChatControl.applyChatRules(message, "display_command", "").get(); - message = MultiChatUtil.translateColourCodes(message); - - for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { - - if (onlineplayer.getServer() == null) continue; - - if (config.getStringList(ConfigValues.Config.NO_GLOBAL).contains( - onlineplayer.getServer().getInfo().getName())) continue; - - if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { - onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(MultiChatUtil.approximateRGBColourCodes(message))); - } else { - onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(message)); - } - - } - - // Trigger PostBroadcastEvent - ProxyServer.getInstance().getPluginManager().callEvent(new PostBroadcastEvent("display", message)); - - ConsoleManager.logDisplayMessage(message); - - } + public DisplayCommand() { + super("mcdisplay", "multichat.staff.display", ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("display").toArray(new String[0])); + } + + public void execute(CommandSender sender, String[] args) { + if (args.length < 1) { + MessageManager.sendMessage(sender, "command_display_desc"); + MessageManager.sendMessage(sender, "command_display_usage"); + return; + } + + displayMessage(String.join(" ", args)); + } + + private void displayMessage(String message) { + Optional optionalMessage = ChatControl.applyChatRules(message, "display_command", ""); + if (!optionalMessage.isPresent()) + return; + + List noGlobalServers = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG) + .getConfig().getStringList(ConfigValues.Config.NO_GLOBAL); + + String finalMessage = MultiChatUtil.translateColourCodes(optionalMessage.get()); + ProxyServer.getInstance().getPlayers().stream() + .filter(target -> target.getServer() != null + && !noGlobalServers.contains(target.getServer().getInfo().getName()) + ) + .forEach(target -> + target.sendMessage(MultiChat.legacyServers.contains(target.getServer().getInfo().getName()) + ? ProxyJsonUtils.parseMessage(MultiChatUtil.approximateRGBColourCodes(finalMessage)) + : ProxyJsonUtils.parseMessage(finalMessage) + ) + ); + + // Trigger PostBroadcastEvent + ProxyServer.getInstance().getPluginManager().callEvent(new PostBroadcastEvent("display", message)); + + ConsoleManager.logDisplayMessage(message); + } } From ab49740d891d833c87dd3afb1387c15d87caa786 Mon Sep 17 00:00:00 2001 From: Gadse Date: Tue, 4 Aug 2020 13:15:46 +0200 Subject: [PATCH 118/188] FreezeChatCommand refactor --- .../bungee/commands/FreezeChatCommand.java | 45 +++++++------------ 1 file changed, 16 insertions(+), 29 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/FreezeChatCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/FreezeChatCommand.java index c6d7d54f..4cfa3a37 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/FreezeChatCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/FreezeChatCommand.java @@ -2,7 +2,6 @@ import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.ProxyServer; -import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.plugin.Command; import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.MessageManager; @@ -13,36 +12,24 @@ /** * Freeze Chat Command *

Allows staff members to block all chat messages being sent

- * - * @author Oliver Martin (Revilo410) * + * @author Oliver Martin (Revilo410) */ public class FreezeChatCommand extends Command { - public FreezeChatCommand() { - super("mcfreezechat", "multichat.chat.freeze", (String[]) ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("freezechat").toArray(new String[0])); - } - - public void execute(CommandSender sender, String[] args) { - - ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); - - if (ds.isChatFrozen()) { - - for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { - MessageManager.sendSpecialMessage(onlineplayer, "command_freezechat_thawed", sender.getName()); - } - - ds.setChatFrozen(false); - - } else { - - for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { - MessageManager.sendSpecialMessage(onlineplayer, "command_freezechat_frozen", sender.getName()); - } - - ds.setChatFrozen(true); - - } - } + public FreezeChatCommand() { + super("mcfreezechat", "multichat.chat.freeze", ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("freezechat").toArray(new String[0])); + } + + public void execute(CommandSender sender, String[] args) { + ProxyDataStore proxyDataStore = MultiChatProxy.getInstance().getDataStore(); + boolean frozen = !proxyDataStore.isChatFrozen(); + proxyDataStore.setChatFrozen(frozen); + ProxyServer.getInstance().getPlayers().forEach(proxiedPlayer -> + MessageManager.sendSpecialMessage(proxiedPlayer, + "command_freezechat_" + (frozen ? "frozen" : "thawed"), + proxiedPlayer.getName() + ) + ); + } } From aef4ea9f9c44b113e2003ab936a9e88770f7e782 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Tue, 4 Aug 2020 13:37:08 +0100 Subject: [PATCH 119/188] Migrated all colour translation / stripping code to MultiChatUtil --- .../multichat/common/MultiChatUtil.java | 93 ++++++++- .../multichat/common/TranslateMode.java | 81 ++++++-- .../local/common/commands/NickCommand.java | 31 +-- .../common/config/RegexChannelForcer.java | 3 +- .../common/storage/LocalFileNameManager.java | 51 ++--- .../common/storage/LocalNameManager.java | 191 +----------------- .../common/storage/LocalSQLNameManager.java | 9 +- .../sponge/LocalSpongeFileNameManager.java | 5 +- .../multichat/junit/MultiChatUtilTest.java | 111 +++++++++- 9 files changed, 316 insertions(+), 259 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/common/MultiChatUtil.java b/multichat/src/main/java/xyz/olivermartin/multichat/common/MultiChatUtil.java index 8d0e7075..434a30b2 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/common/MultiChatUtil.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/common/MultiChatUtil.java @@ -37,7 +37,7 @@ public static String translateColourCodes(String rawMessage, TranslateMode... mo String translatedMessage = rawMessage; - boolean rgb = Arrays.stream(modes).anyMatch(value -> value.equals(TranslateMode.ALL) || value.equals(TranslateMode.COLOUR_ALL)); + boolean rgb = Arrays.stream(modes).anyMatch(value -> TranslateMode.isRGB(value)); // If we are translating RGB codes, reformat these to the correct format if (rgb) translatedMessage = MultiChatUtil.preProcessColourCodes(translatedMessage); @@ -51,6 +51,85 @@ public static String translateColourCodes(String rawMessage, TranslateMode... mo } + /** + *

Takes a raw string and strips any colour codes using the & symbol

+ *

If stripTranslatedCodes is true then it will also strip any codes using the § symbol

+ * @param rawMessage The raw message to strip + * @param stripTranslatedCodes If pre-translated codes (§) should also be stripped + * @return the stripped message + */ + public static String stripColourCodes(String rawMessage, boolean stripTranslatedCodes) { + return stripColourCodes(rawMessage, stripTranslatedCodes, TranslateMode.ALL); + } + + /** + *

Takes a raw string and strips formatting codes (&) according to the TranslateMode

+ *

If stripTranslatedCodes is true then it will also strip any codes using the § symbol

+ * @param rawMessage The raw message to strip + * @param stripTranslatedCodes If pre-translated codes (§) should also be stripped + * @param modes The TranslateModes to apply + * @return the stripped message + */ + public static String stripColourCodes(String rawMessage, boolean stripTranslatedCodes, TranslateMode... modes) { + + String strippedMessage = rawMessage; + + boolean rgb = Arrays.stream(modes).anyMatch(value -> TranslateMode.isRGB(value)); + + // If we are stripping RGB codes, reformat these to the correct format + if (rgb) strippedMessage = MultiChatUtil.preProcessColourCodes(strippedMessage); + + // Process each of the strips + for (TranslateMode mode : modes) { + if (stripTranslatedCodes) { + strippedMessage = mode.stripAll(strippedMessage); + } else { + strippedMessage = mode.stripOrigin(strippedMessage); + } + } + + return strippedMessage; + + } + + /** + *

Takes a raw string and checks if it contains any codes using the & symbol

+ *

Any RGB codes in the format &#abcdef, &xabcdef or &x&a&b&c&d&e&f will also be checked

+ * @param rawMessage The raw message to check + * @param checkTranslatedCodes If pre-translated codes (§) should also be checked + * @return true if it contains format codes + */ + public static boolean containsColourCodes(String rawMessage, boolean checkTranslatedCodes) { + return containsColourCodes(rawMessage, checkTranslatedCodes, TranslateMode.ALL); + } + + /** + *

Takes a raw string and checks if it contains any formatting codes (&) according to the TranslateMode

+ * @param rawMessage The raw message to check + * @param checkTranslatedCodes If pre-translated codes (§) should also be checked + * @param modes The TranslateModes to process + * @return true if it contains format codes + */ + public static boolean containsColourCodes(String rawMessage, boolean checkTranslatedCodes, TranslateMode... modes) { + + boolean rgb = Arrays.stream(modes).anyMatch(value -> TranslateMode.isRGB(value)); + + // If we are checking RGB codes, reformat these to the correct format + if (rgb) rawMessage = MultiChatUtil.preProcessColourCodes(rawMessage); + + // Process each of the checks + for (TranslateMode mode : modes) { + if (checkTranslatedCodes) { + if (mode.containsAny(rawMessage)) return true; + } else { + if (mode.containsOrigin(rawMessage)) return true; + } + } + + return false; + + } + /** * Reformat the RGB codes into Spigot Native version * @@ -295,4 +374,16 @@ public static String getStringFromCollection(Collection collection) { } + public static String visualiseColourCodes(String message) { + + Matcher originMatcher = TranslateMode.ALL.getOriginPattern().matcher(message); + Matcher translatedMatcher = TranslateMode.ALL.getTranslatedPattern().matcher(message); + + message = originMatcher.replaceAll("{Origin.$1}"); + message = translatedMatcher.replaceAll("{Transl.$1}"); + + return message; + + } + } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/common/TranslateMode.java b/multichat/src/main/java/xyz/olivermartin/multichat/common/TranslateMode.java index bad5205f..d942a701 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/common/TranslateMode.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/common/TranslateMode.java @@ -5,30 +5,79 @@ public enum TranslateMode { - COLOUR_SIMPLE ("(?i)&([a-f,0-9,r])"), - COLOUR_ALL ("(?i)&([a-f,0-9,r,x])"), - FORMAT_UNDERLINE ("(?i)&([r,n])"), - FORMAT_ITALIC ("(?i)&([r,o])"), - FORMAT_BOLD ("(?i)&([r,l])"), - FORMAT_STRIKE ("(?i)&([r,m])"), - FORMAT_OBFUSCATED ("(?i)&([r,k])"), - FORMAT_ALL ("(?i)&([k-o,r])"), - SIMPLE ("(?i)&([a-f,0-9,k-o,r])"), - ALL ("(?i)&([a-f,0-9,k-o,r,x])"); - - private Pattern pattern; + COLOUR_SIMPLE ("(?i)%1$s([a-f,0-9])"), + COLOUR_ALL ("(?i)%1$s([a-f,0-9,r,x])"), + FORMAT_UNDERLINE ("(?i)%1$s([n])"), + FORMAT_ITALIC ("(?i)%1$s([o])"), + FORMAT_BOLD ("(?i)%1$s([l])"), + FORMAT_STRIKE ("(?i)%1$s([m])"), + FORMAT_OBFUSCATED ("(?i)%1$s([k])"), + FORMAT_RESET ("(?i)%1$s([r])"), + FORMAT_ALL ("(?i)%1$s([k-o,r])"), + SIMPLE ("(?i)%1$s([a-f,0-9,k-o,r])"), + ALL ("(?i)%1$s([a-f,0-9,k-o,r,x])"), + X ("(?i)%1$s([x])"); + + private static final String ORIGIN_CHAR = "&"; + private static final String TRANSLATED_CHAR = "§"; + + private Pattern originPattern; + private Pattern translatedPattern; private TranslateMode(String regex) { - this.pattern = Pattern.compile(regex); + this.originPattern = Pattern.compile(String.format(regex, ORIGIN_CHAR)); + this.translatedPattern = Pattern.compile(String.format(regex, TRANSLATED_CHAR)); + } + + public static boolean isRGB(TranslateMode mode) { + return mode.equals(ALL) || mode.equals(X) || mode.equals(COLOUR_ALL); + } + + public Pattern getOriginPattern() { + return this.originPattern; } - public Pattern getPattern() { - return this.pattern; + public Pattern getTranslatedPattern() { + return this.translatedPattern; } public String translate(String rawMessage) { + Matcher matcher = getOriginPattern().matcher(rawMessage); + return matcher.replaceAll(TRANSLATED_CHAR + "$1"); + } + + public String revert(String rawMessage) { + Matcher matcher = getTranslatedPattern().matcher(rawMessage); + return matcher.replaceAll(ORIGIN_CHAR + "$1"); + } + + public boolean containsAny(String rawMessage) { + return !rawMessage.equals(stripAll(rawMessage)); + } + + public boolean containsOrigin(String rawMessage) { + return !rawMessage.equals(stripOrigin(rawMessage)); + } + + public boolean containsTranslated(String rawMessage) { + return !rawMessage.equals(stripTranslated(rawMessage)); + } + + public String stripAll(String rawMessage) { + return stripTranslated(stripOrigin(rawMessage)); + } + + public String stripTranslated(String rawMessage) { + return strip(rawMessage, getTranslatedPattern()); + } + + public String stripOrigin(String rawMessage) { + return strip(rawMessage, getOriginPattern()); + } + + private String strip(String rawMessage, Pattern pattern) { Matcher matcher = pattern.matcher(rawMessage); - return matcher.replaceAll("§$1"); + return matcher.replaceAll(""); } } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/commands/NickCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/commands/NickCommand.java index ffecdd59..1b3bff96 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/commands/NickCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/commands/NickCommand.java @@ -4,6 +4,7 @@ import java.util.regex.Pattern; import xyz.olivermartin.multichat.common.MultiChatUtil; +import xyz.olivermartin.multichat.common.TranslateMode; import xyz.olivermartin.multichat.local.common.MultiChatLocal; import xyz.olivermartin.multichat.local.common.MultiChatLocalPlayer; import xyz.olivermartin.multichat.local.common.config.LocalConfig; @@ -77,17 +78,17 @@ private boolean checkPermissions(UUID targetUniqueId, MultiChatLocalPlayer sende LocalNameManager lnm = MultiChatLocal.getInstance().getNameManager(); LocalConfig config = MultiChatLocal.getInstance().getConfigManager().getLocalConfig(); - if (lnm.containsRGBColorCodes(proposedNick) && !(sender.hasPermission("multichatlocal.nick.color") || sender.hasPermission("multichatlocal.nick.colour")||sender.hasPermission("multichatlocal.nick.color.rgb") || sender.hasPermission("multichatlocal.nick.colour.rgb"))) { + if (MultiChatUtil.containsColourCodes(proposedNick, false, TranslateMode.X) && !(sender.hasPermission("multichatlocal.nick.color") || sender.hasPermission("multichatlocal.nick.colour")||sender.hasPermission("multichatlocal.nick.color.rgb") || sender.hasPermission("multichatlocal.nick.colour.rgb"))) { sender.sendBadMessage("You do not have permission to use nicknames with rgb color codes!"); return false; } - if (lnm.containsSimpleColorCodes(proposedNick) && !(sender.hasPermission("multichatlocal.nick.color") || sender.hasPermission("multichatlocal.nick.colour")||sender.hasPermission("multichatlocal.nick.color.simple") || sender.hasPermission("multichatlocal.nick.colour.simple") ||sender.hasPermission("multichatlocal.nick.color.rgb") || sender.hasPermission("multichatlocal.nick.colour.rgb"))) { + if (MultiChatUtil.containsColourCodes(proposedNick, false, TranslateMode.COLOUR_SIMPLE) && !(sender.hasPermission("multichatlocal.nick.color") || sender.hasPermission("multichatlocal.nick.colour")||sender.hasPermission("multichatlocal.nick.color.simple") || sender.hasPermission("multichatlocal.nick.colour.simple") ||sender.hasPermission("multichatlocal.nick.color.rgb") || sender.hasPermission("multichatlocal.nick.colour.rgb"))) { sender.sendBadMessage("You do not have permission to use nicknames with simple color codes!"); return false; } - if (lnm.containsFormatCodes(proposedNick)) { + if (MultiChatUtil.containsColourCodes(proposedNick, false, TranslateMode.FORMAT_ALL)) { // If the nickname has ANY format codes... @@ -95,32 +96,32 @@ private boolean checkPermissions(UUID targetUniqueId, MultiChatLocalPlayer sende // If they don't have the permission for ALL format codes, then we will check individually... - if (lnm.containsBoldFormatCodes(proposedNick) && !(sender.hasPermission("multichatlocal.nick.format.bold"))) { + if (MultiChatUtil.containsColourCodes(proposedNick, false, TranslateMode.FORMAT_BOLD) && !(sender.hasPermission("multichatlocal.nick.format.bold"))) { sender.sendBadMessage("You do not have permission to use nicknames with bold format codes!"); return false; } - if (lnm.containsItalicFormatCodes(proposedNick) && !(sender.hasPermission("multichatlocal.nick.format.italic"))) { + if (MultiChatUtil.containsColourCodes(proposedNick, false, TranslateMode.FORMAT_ITALIC) && !(sender.hasPermission("multichatlocal.nick.format.italic"))) { sender.sendBadMessage("You do not have permission to use nicknames with italic format codes!"); return false; } - if (lnm.containsUnderlineFormatCodes(proposedNick) && !(sender.hasPermission("multichatlocal.nick.format.underline"))) { + if (MultiChatUtil.containsColourCodes(proposedNick, false, TranslateMode.FORMAT_UNDERLINE) && !(sender.hasPermission("multichatlocal.nick.format.underline"))) { sender.sendBadMessage("You do not have permission to use nicknames with underline format codes!"); return false; } - if (lnm.containsStrikethroughFormatCodes(proposedNick) && !(sender.hasPermission("multichatlocal.nick.format.strikethrough"))) { + if (MultiChatUtil.containsColourCodes(proposedNick, false, TranslateMode.FORMAT_STRIKE) && !(sender.hasPermission("multichatlocal.nick.format.strikethrough"))) { sender.sendBadMessage("You do not have permission to use nicknames with strikethrough format codes!"); return false; } - if (lnm.containsObfuscatedFormatCodes(proposedNick) && !(sender.hasPermission("multichatlocal.nick.format.obfuscated"))) { + if (MultiChatUtil.containsColourCodes(proposedNick, false, TranslateMode.FORMAT_OBFUSCATED) && !(sender.hasPermission("multichatlocal.nick.format.obfuscated"))) { sender.sendBadMessage("You do not have permission to use nicknames with obfuscated format codes!"); return false; } - if (lnm.containsResetFormatCodes(proposedNick) && !(sender.hasPermission("multichatlocal.nick.format.reset"))) { + if (MultiChatUtil.containsColourCodes(proposedNick, false, TranslateMode.FORMAT_RESET) && !((sender.hasPermission("multichatlocal.nick.format.reset")||sender.hasPermission("multichatlocal.nick.color")||sender.hasPermission("multichatlocal.nick.colour")||sender.hasPermission("multichatlocal.nick.color.rgb")||sender.hasPermission("multichatlocal.nick.colour.rgb")))) { sender.sendBadMessage("You do not have permission to use nicknames with reset format codes!"); return false; } @@ -143,7 +144,7 @@ private boolean checkPermissions(UUID targetUniqueId, MultiChatLocalPlayer sende length = proposedNick.length(); endOfMessage = "(Including format codes)"; } else { - length = lnm.stripAllFormattingCodes(proposedNick).length(); + length = MultiChatUtil.stripColourCodes(proposedNick, false).length(); endOfMessage = "(Excluding format codes)"; } @@ -161,7 +162,7 @@ private boolean checkPermissions(UUID targetUniqueId, MultiChatLocalPlayer sende String targetName = lnm.getName(targetUniqueId); - if (lnm.existsPlayer(proposedNick) && !targetName.equalsIgnoreCase(lnm.stripAllFormattingCodes(proposedNick)) && !sender.hasPermission("multichatlocal.nick.impersonate")) { + if (lnm.existsPlayer(proposedNick) && !targetName.equalsIgnoreCase(MultiChatUtil.stripColourCodes(proposedNick, false)) && !sender.hasPermission("multichatlocal.nick.impersonate")) { sender.sendBadMessage("Sorry, a player already exists with this name!"); return false; } @@ -171,7 +172,7 @@ private boolean checkPermissions(UUID targetUniqueId, MultiChatLocalPlayer sende boolean blacklisted = false; for (String bl : config.getNicknameBlacklist()) { - if (lnm.stripAllFormattingCodes(proposedNick).matches(bl)) { + if (MultiChatUtil.stripColourCodes(proposedNick, false).matches(bl)) { blacklisted = true; break; } @@ -192,14 +193,14 @@ private boolean checkValidNickname(UUID targetUniqueId, MultiChatLocalCommandSen LocalNameManager lnm = MultiChatLocal.getInstance().getNameManager(); - if (lnm.stripAllFormattingCodes(proposedNick).length() < 1) { + if (MultiChatUtil.stripColourCodes(proposedNick, false).length() < 1) { sender.sendBadMessage("Sorry your nickname cannot be empty!"); return false; } - String targetNickname = lnm.stripAllFormattingCodes(lnm.getCurrentName(targetUniqueId, false)); + String targetNickname = MultiChatUtil.stripColourCodes(lnm.getCurrentName(targetUniqueId, false), false); - if (lnm.existsNickname(proposedNick) && !targetNickname.equalsIgnoreCase(lnm.stripAllFormattingCodes(proposedNick)) ) { + if (lnm.existsNickname(proposedNick) && !targetNickname.equalsIgnoreCase(MultiChatUtil.stripColourCodes(proposedNick, false)) ) { sender.sendBadMessage("Sorry, this nickname is already in use!"); return false; } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/config/RegexChannelForcer.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/config/RegexChannelForcer.java index 640fd1b0..59236c83 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/config/RegexChannelForcer.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/config/RegexChannelForcer.java @@ -1,5 +1,6 @@ package xyz.olivermartin.multichat.local.common.config; +import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.local.common.MultiChatLocal; public class RegexChannelForcer { @@ -31,7 +32,7 @@ public boolean matchesRegex(String messageFormat) { String testMessage = messageFormat; if (ignoreFormatCodes) { - testMessage = MultiChatLocal.getInstance().getNameManager().stripAllFormattingCodesAndPreformattedText(testMessage); + testMessage = MultiChatUtil.stripColourCodes(testMessage, true); } else { // This makes life easier when doing the config file as only have to use & style colour codes testMessage = testMessage.replace('§', '&'); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/storage/LocalFileNameManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/storage/LocalFileNameManager.java index 6641128f..7bf406d0 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/storage/LocalFileNameManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/storage/LocalFileNameManager.java @@ -8,6 +8,7 @@ import java.util.UUID; import java.util.regex.PatternSyntaxException; +import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.local.common.MultiChatLocal; import xyz.olivermartin.multichat.local.common.MultiChatLocalPlatform; @@ -109,28 +110,28 @@ public void setMapNickFormatted(Map mapNickFormatted) { * @return The NICKNAME of the player if it is set, otherwise their username */ public String getCurrentName(UUID uuid, boolean withPrefix) { - + MultiChatLocal.getInstance().getConsoleLogger().debug("[LocalFileNameManager] Getting CurrentName for " + uuid); synchronized (mapUUIDNick) { if (mapUUIDNick.containsKey(uuid)) { - + MultiChatLocal.getInstance().getConsoleLogger().debug("[LocalFileNameManager] UUID is in the UUIDNick map"); - + String currentName; - + if (MultiChatLocal.getInstance().getConfigManager().getLocalConfig().isShowNicknamePrefix() && withPrefix) { currentName = MultiChatLocal.getInstance().getConfigManager().getLocalConfig().getNicknamePrefix() + mapNickFormatted.get(mapUUIDNick.get(uuid)); } else { currentName = mapNickFormatted.get(mapUUIDNick.get(uuid)); } - + MultiChatLocal.getInstance().getConsoleLogger().debug("[LocalFileNameManager] CurrentName (withPrefix?=" + withPrefix + ") is " + currentName); - + return currentName; } } - + MultiChatLocal.getInstance().getConsoleLogger().debug("[LocalFileNameManager] They do not have a nickname..."); synchronized (mapUUIDName) { @@ -141,7 +142,7 @@ public String getCurrentName(UUID uuid, boolean withPrefix) { return result; } } - + MultiChatLocal.getInstance().getConsoleLogger().debug("[LocalFileNameManager] This player does not exist in any map... returning empty string"); return ""; @@ -212,7 +213,7 @@ public Optional getUUIDFromName(String username) { * @param player */ public void registerPlayer(UUID uuid, String username) { - + MultiChatLocal.getInstance().getConsoleLogger().debug("[LocalFileNameManager] Registering player (" + username + ") with UUID = " + uuid); String oldUsername; @@ -220,13 +221,13 @@ public void registerPlayer(UUID uuid, String username) { synchronized (mapUUIDName) { if (mapUUIDName.containsKey(uuid)) { - + MultiChatLocal.getInstance().getConsoleLogger().debug("[LocalFileNameManager] The player has joined before..."); oldUsername = mapUUIDName.get(uuid); if (!oldUsername.equalsIgnoreCase(username)) { - + MultiChatLocal.getInstance().getConsoleLogger().debug("[LocalFileNameManager] They have a new username (" + username + "), previously was " + oldUsername); synchronized (mapNameUUID) { @@ -242,11 +243,11 @@ public void registerPlayer(UUID uuid, String username) { mapNameFormatted.remove(oldUsername); mapNameFormatted.put(username.toLowerCase(), username); - + MultiChatLocal.getInstance().getConsoleLogger().debug("[LocalFileNameManager] Updated necessary maps!"); } else { - + MultiChatLocal.getInstance().getConsoleLogger().debug("[LocalFileNameManager] Player has not joined before..."); synchronized (mapNameUUID) { @@ -254,7 +255,7 @@ public void registerPlayer(UUID uuid, String username) { mapUUIDName.put(uuid, username.toLowerCase()); mapNameUUID.put(username.toLowerCase(), uuid); mapNameFormatted.put(username.toLowerCase(), username); - + MultiChatLocal.getInstance().getConsoleLogger().debug("[LocalFileNameManager] Updated necessary maps!"); } @@ -264,7 +265,7 @@ public void registerPlayer(UUID uuid, String username) { } online.add(uuid); - + MultiChatLocal.getInstance().getConsoleLogger().debug("[LocalFileNameManager] Added player to list of online players!"); } @@ -305,7 +306,7 @@ public void registerOfflinePlayerByUUID(UUID uuid, String username) { * @param player */ public void unregisterPlayer(UUID uuid) { - + MultiChatLocal.getInstance().getConsoleLogger().debug("[LocalFileNameManager] Unregistering " + uuid); online.remove(uuid); @@ -318,7 +319,7 @@ public void unregisterPlayer(UUID uuid) { * @param nickname */ public void setNickname(UUID uuid, String nickname) { - + MultiChatLocal.getInstance().getConsoleLogger().debug("[LocalFileNameManager] Setting nickname (" + nickname + ") for UUID " + uuid); if (!mapUUIDName.containsKey(uuid)) { @@ -332,8 +333,8 @@ public void setNickname(UUID uuid, String nickname) { MultiChatLocal.getInstance().getConsoleLogger().debug("[LocalFileNameManager] Old nickname removed!"); } - String unformattedNickname = stripAllFormattingCodes(nickname.toLowerCase()); - + String unformattedNickname = MultiChatUtil.stripColourCodes(nickname.toLowerCase(), false); + MultiChatLocal.getInstance().getConsoleLogger().debug("[LocalFileNameManager] Unformatted nickname = " + unformattedNickname); synchronized (mapNickUUID) { @@ -349,7 +350,7 @@ public void setNickname(UUID uuid, String nickname) { mapUUIDNick.put(uuid, unformattedNickname); mapNickUUID.put(unformattedNickname, uuid); mapNickFormatted.put(unformattedNickname, nickname); - + MultiChatLocal.getInstance().getConsoleLogger().debug("[LocalFileNameManager] Maps updated with new info!"); } @@ -369,7 +370,7 @@ public boolean existsPlayer(String username) { * @return If this nickname is currently in use */ public boolean existsNickname(String nickname) { - return mapNickUUID.containsKey(stripAllFormattingCodes(nickname.toLowerCase())); + return mapNickUUID.containsKey(MultiChatUtil.stripColourCodes(nickname.toLowerCase(), false)); } /** @@ -380,7 +381,7 @@ public boolean existsNickname(String nickname) { public Optional> getPartialNicknameMatches(String nickname) { Set nickSet = mapNickUUID.keySet(); - nickname = stripAllFormattingCodes(nickname.toLowerCase()); + nickname = MultiChatUtil.stripColourCodes(nickname.toLowerCase(), false); Set uuidSet = new HashSet(); for (String nick : nickSet) { @@ -431,7 +432,7 @@ public Optional> getPartialNicknameMatches(String nickname) { public Optional> getPartialNameMatches(String name) { Set nameSet = mapNameUUID.keySet(); - name = stripAllFormattingCodes(name.toLowerCase()); + name = MultiChatUtil.stripColourCodes(name.toLowerCase(), false); Set uuidSet = new HashSet(); for (String n : nameSet) { @@ -487,7 +488,7 @@ public boolean isOnline(UUID uuid) { * @param uuid */ public void removeNickname(UUID uuid) { - + MultiChatLocal.getInstance().getConsoleLogger().debug("[LocalFileNameManager] Removing nickname for " + uuid); synchronized (mapUUIDNick) { @@ -502,7 +503,7 @@ public void removeNickname(UUID uuid) { mapUUIDNick.remove(uuid); mapNickUUID.remove(nickname); mapNickFormatted.remove(nickname); - + MultiChatLocal.getInstance().getConsoleLogger().debug("[LocalFileNameManager] Updated necessary maps! Completed process."); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/storage/LocalNameManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/storage/LocalNameManager.java index 15b9bd7d..cbf791b8 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/storage/LocalNameManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/storage/LocalNameManager.java @@ -5,8 +5,8 @@ import java.util.Optional; import java.util.Set; import java.util.UUID; -import java.util.regex.Pattern; +import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.local.common.MultiChatLocal; /** @@ -88,7 +88,7 @@ public String getCurrentName(UUID uuid) { public Optional getUUIDFromNickname(String nickname) { nickname = nickname.toLowerCase(); - nickname = stripAllFormattingCodes(nickname); + nickname = MultiChatUtil.stripColourCodes(nickname, false); Optional uuid = getUUIDFromUnformattedNickname(nickname); @@ -234,191 +234,4 @@ public boolean isOnline(UUID uuid) { */ public abstract void removeNickname(UUID uuid); - /* - * Remove all colour / format codes from a string (using the '&' char) - */ - public String stripAllFormattingCodes(String input) { - - char COLOR_CHAR = '&'; - Pattern STRIP_COLOR_PATTERN = Pattern.compile("(?i)" + String.valueOf(COLOR_CHAR) + "[0-9A-FK-ORX]"); - - if (input == null) { - return null; - } - - return STRIP_COLOR_PATTERN.matcher(input).replaceAll(""); - - } - - /* - * Remove all colour / format codes from a string (using the special § char) - */ - public String stripAllFormattingCodesAndPreformattedText(String input) { - - input = stripAllFormattingCodes(input); - - char COLOR_CHAR = '§'; - Pattern STRIP_COLOR_PATTERN = Pattern.compile("(?i)" + String.valueOf(COLOR_CHAR) + "[0-9A-FK-ORX]"); - - if (input == null) { - return null; - } - - return STRIP_COLOR_PATTERN.matcher(input).replaceAll(""); - - } - - /** - * @param input - * @return True if the input contains colour codes (e.g. '&a') - */ - public boolean containsSimpleColorCodes(String input) { - - char COLOR_CHAR = '&'; - Pattern STRIP_COLOR_PATTERN = Pattern.compile("(?i)" + String.valueOf(COLOR_CHAR) + "[0-9A-F]"); - - if (input == null) { - return false; - } - - return !STRIP_COLOR_PATTERN.matcher(input).replaceAll("").equals(input); - - } - - /** - * @param input - * @return True if the input contains hex colour codes (e.g. '&x...') - */ - public boolean containsRGBColorCodes(String input) { - - char COLOR_CHAR = '&'; - Pattern STRIP_COLOR_PATTERN = Pattern.compile("(?i)" + String.valueOf(COLOR_CHAR) + "[X]"); - - if (input == null) { - return false; - } - - return !STRIP_COLOR_PATTERN.matcher(input).replaceAll("").equals(input); - - } - - /** - * @param input - * @return True if the input contains format codes (e.g. '&l') - */ - public boolean containsFormatCodes(String input) { - - char COLOR_CHAR = '&'; - Pattern STRIP_COLOR_PATTERN = Pattern.compile("(?i)" + String.valueOf(COLOR_CHAR) + "[K-OR]"); - - if (input == null) { - return false; - } - - return !STRIP_COLOR_PATTERN.matcher(input).replaceAll("").equals(input); - - } - - /** - * @param input - * @return True if the input contains bold format codes - */ - public boolean containsBoldFormatCodes(String input) { - - char COLOR_CHAR = '&'; - Pattern STRIP_COLOR_PATTERN = Pattern.compile("(?i)" + String.valueOf(COLOR_CHAR) + "L"); - - if (input == null) { - return false; - } - - return !STRIP_COLOR_PATTERN.matcher(input).replaceAll("").equals(input); - - } - - /** - * @param input - * @return True if the input contains italic format codes - */ - public boolean containsItalicFormatCodes(String input) { - - char COLOR_CHAR = '&'; - Pattern STRIP_COLOR_PATTERN = Pattern.compile("(?i)" + String.valueOf(COLOR_CHAR) + "O"); - - if (input == null) { - return false; - } - - return !STRIP_COLOR_PATTERN.matcher(input).replaceAll("").equals(input); - - } - - /** - * @param input - * @return True if the input contains underline format codes - */ - public boolean containsUnderlineFormatCodes(String input) { - - char COLOR_CHAR = '&'; - Pattern STRIP_COLOR_PATTERN = Pattern.compile("(?i)" + String.valueOf(COLOR_CHAR) + "N"); - - if (input == null) { - return false; - } - - return !STRIP_COLOR_PATTERN.matcher(input).replaceAll("").equals(input); - - } - - /** - * @param input - * @return True if the input contains strikethrough format codes - */ - public boolean containsStrikethroughFormatCodes(String input) { - - char COLOR_CHAR = '&'; - Pattern STRIP_COLOR_PATTERN = Pattern.compile("(?i)" + String.valueOf(COLOR_CHAR) + "M"); - - if (input == null) { - return false; - } - - return !STRIP_COLOR_PATTERN.matcher(input).replaceAll("").equals(input); - - } - - /** - * @param input - * @return True if the input contains obfuscated format codes - */ - public boolean containsObfuscatedFormatCodes(String input) { - - char COLOR_CHAR = '&'; - Pattern STRIP_COLOR_PATTERN = Pattern.compile("(?i)" + String.valueOf(COLOR_CHAR) + "K"); - - if (input == null) { - return false; - } - - return !STRIP_COLOR_PATTERN.matcher(input).replaceAll("").equals(input); - - } - - /** - * @param input - * @return True if the input contains reset format codes - */ - public boolean containsResetFormatCodes(String input) { - - char COLOR_CHAR = '&'; - Pattern STRIP_COLOR_PATTERN = Pattern.compile("(?i)" + String.valueOf(COLOR_CHAR) + "R"); - - if (input == null) { - return false; - } - - return !STRIP_COLOR_PATTERN.matcher(input).replaceAll("").equals(input); - - } - } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/storage/LocalSQLNameManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/storage/LocalSQLNameManager.java index 92e5377b..c26986c8 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/storage/LocalSQLNameManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/storage/LocalSQLNameManager.java @@ -7,6 +7,7 @@ import java.util.Set; import java.util.UUID; +import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.common.database.DatabaseManager; import xyz.olivermartin.multichat.common.database.GenericPooledDatabase; import xyz.olivermartin.multichat.common.database.SimpleConnection; @@ -458,7 +459,7 @@ public void setNickname(UUID uuid, String nickname) { return; } - String unformattedNickname = stripAllFormattingCodes(nickname.toLowerCase()); + String unformattedNickname = MultiChatUtil.stripColourCodes(nickname.toLowerCase(), false); MultiChatLocal.getInstance().getConsoleLogger().debug("[LocalSQLNameManager] Unformatted nickname = " + unformattedNickname); @@ -535,7 +536,7 @@ public boolean existsNickname(String nickname) { try { conn = localDatabase.getConnection(); - ResultSet results = conn.safeQuery("SELECT u_nick FROM nick_data WHERE u_nick = ?;", stripAllFormattingCodes(nickname.toLowerCase())); + ResultSet results = conn.safeQuery("SELECT u_nick FROM nick_data WHERE u_nick = ?;", MultiChatUtil.stripColourCodes(nickname.toLowerCase(), false)); if (results.next()) { MultiChatLocal.getInstance().getConsoleLogger().debug("[LocalSQLNameManager] Nickname " + nickname + " exists"); @@ -567,7 +568,7 @@ public boolean otherPlayerHasNickname(String nickname, UUID uuid) { conn = localDatabase.getConnection(); ResultSet results = conn.safeQuery("SELECT id, u_nick FROM nick_data WHERE u_nick = ?;" - , stripAllFormattingCodes(nickname.toLowerCase())); + , MultiChatUtil.stripColourCodes(nickname.toLowerCase(), false)); if (results.next()) { if (results.getString("id").equals(uuid.toString())) { @@ -602,7 +603,7 @@ public Optional> getPartialNicknameMatches(String nickname) { conn = localDatabase.getConnection(); ResultSet results = conn.safeQuery("SELECT id FROM nick_data WHERE (u_nick LIKE ?);" - , "%" + stripAllFormattingCodes(nickname.toLowerCase()) + "%"); + , "%" + MultiChatUtil.stripColourCodes(nickname.toLowerCase(), false) + "%"); if (results.next()) { Set uuids = new HashSet(); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongeFileNameManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongeFileNameManager.java index bf0d8e31..4a39d3c6 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongeFileNameManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongeFileNameManager.java @@ -11,6 +11,7 @@ import org.spongepowered.api.profile.GameProfile; import org.spongepowered.api.service.user.UserStorageService; +import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.local.common.MultiChatLocal; import xyz.olivermartin.multichat.local.common.MultiChatLocalPlatform; import xyz.olivermartin.multichat.local.common.storage.LocalFileNameManager; @@ -136,7 +137,7 @@ public void setNickname(UUID uuid, String nickname) { removeNickname(uuid); } - String unformattedNickname = stripAllFormattingCodes(nickname.toLowerCase()); + String unformattedNickname = MultiChatUtil.stripColourCodes(nickname.toLowerCase(), false); synchronized (mapNickUUID) { @@ -180,7 +181,7 @@ public Optional> getPartialNameMatches(String name) { Collection profiles = uss.getAll(); //Set nameSet = mapNameUUID.keySet(); - name = stripAllFormattingCodes(name.toLowerCase()); + name = MultiChatUtil.stripColourCodes(name.toLowerCase(), false); Set uuidSet = new HashSet(); for (GameProfile gp : profiles) { diff --git a/multichat/src/test/java/xyz/olivermartin/multichat/junit/MultiChatUtilTest.java b/multichat/src/test/java/xyz/olivermartin/multichat/junit/MultiChatUtilTest.java index 307b854d..1804a860 100644 --- a/multichat/src/test/java/xyz/olivermartin/multichat/junit/MultiChatUtilTest.java +++ b/multichat/src/test/java/xyz/olivermartin/multichat/junit/MultiChatUtilTest.java @@ -44,7 +44,7 @@ public void shouldTranslateColourCodesCorrectly() { // SIMPLE COLOUR assertEquals("Simple colour codes should be translated appropriately", - "§r§aHello &kthere! §6<his &ois &ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x§a§b§c§d§e§f!", + "&r§aHello &kthere! §6<his &ois &ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x§a§b§c§d§e§f!", MultiChatUtil.translateColourCodes(rawMessage, TranslateMode.COLOUR_SIMPLE)); // ALL COLOUR @@ -54,34 +54,44 @@ public void shouldTranslateColourCodesCorrectly() { // FORMAT UNDERLINE assertEquals("Underline codes should be translated appropriately", - "§r&aHello &kthere! &6<his &ois &ma §nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!", + "&r&aHello &kthere! &6<his &ois &ma §nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!", MultiChatUtil.translateColourCodes(rawMessage, TranslateMode.FORMAT_UNDERLINE)); // FORMAT ITALIC assertEquals("Italic codes should be translated appropriately", - "§r&aHello &kthere! &6<his §ois &ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!", + "&r&aHello &kthere! &6<his §ois &ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!", MultiChatUtil.translateColourCodes(rawMessage, TranslateMode.FORMAT_ITALIC)); // FORMAT BOLD assertEquals("Bold codes should be translated appropriately", - "§r&aHello &kthere! &6§lthis &ois &ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!", + "&r&aHello &kthere! &6§lthis &ois &ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!", MultiChatUtil.translateColourCodes(rawMessage, TranslateMode.FORMAT_BOLD)); // FORMAT STRIKE assertEquals("Strike codes should be translated appropriately", - "§r&aHello &kthere! &6<his &ois §ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!", + "&r&aHello &kthere! &6<his &ois §ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!", MultiChatUtil.translateColourCodes(rawMessage, TranslateMode.FORMAT_STRIKE)); // FORMAT OBFUSCATED assertEquals("Obfuscation codes should be translated appropriately", - "§r&aHello §kthere! &6<his &ois &ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!", + "&r&aHello §kthere! &6<his &ois &ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!", MultiChatUtil.translateColourCodes(rawMessage, TranslateMode.FORMAT_OBFUSCATED)); + // FORMAT RESET + assertEquals("Reset codes should be translated appropriately", + "§r&aHello &kthere! &6<his &ois &ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!", + MultiChatUtil.translateColourCodes(rawMessage, TranslateMode.FORMAT_RESET)); + // FORMAT ALL assertEquals("All format codes should be translated appropriately", "§r&aHello §kthere! &6§lthis §ois §ma §nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!", MultiChatUtil.translateColourCodes(rawMessage, TranslateMode.FORMAT_ALL)); + // X + assertEquals("All X codes should be translated appropriately", + "&r&aHello &kthere! &6<his &ois &ma &nmessage! &r§x&a&b&c&d&e&fRGB &r§x&a&b&c&d&e&ftoo&r§x&a&b&c&d&e&f!", + MultiChatUtil.translateColourCodes(rawMessage, TranslateMode.X)); + } @Test @@ -146,6 +156,23 @@ public void shouldApproximateRGBColourCodesCorrectly() { } + @Test + public void shouldNotChangeWithMultipleRGBApproximations() { + + String rawMessage = "&r&aHello &kthere! &6<his &ois &ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!"; + + String translated = MultiChatUtil.translateColourCodes(rawMessage); + + String approximated = MultiChatUtil.approximateRGBColourCodes(translated); + + String approximated2 = MultiChatUtil.approximateRGBColourCodes(approximated); + + assertEquals("Approximated RGB codes should remain the same after multiple parses of the approximator", + approximated, + approximated2); + + } + @Test public void shouldGetMessageFromArgsCorrectly() { @@ -171,4 +198,76 @@ public void shouldGetMessageFromArgsCorrectly() { } + @Test + public void shouldStripColourCodesCorrectly() { + + String rawMessage = "&r&aHello &kthere! &6<his &ois &ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!"; + + // ALL + assertEquals("All codes should be stripped appropriately", + "Hello there! this is a message! RGB too!", + MultiChatUtil.stripColourCodes(rawMessage, false)); + + // ALL #2 + assertEquals("All codes should be stripped appropriately", + "Hello there! this is a message! RGB too!", + MultiChatUtil.stripColourCodes(rawMessage, false, TranslateMode.ALL)); + + // SIMPLE + assertEquals("Simple codes should be stripped appropriately", + "Hello there! this is a message! &#ABCDEFRGB &xAbCdEftoo&x!", + MultiChatUtil.stripColourCodes(rawMessage, false, TranslateMode.SIMPLE)); + + // SIMPLE COLOUR + assertEquals("Simple colour codes should be stripped appropriately", + "&rHello &kthere! <his &ois &ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x!", + MultiChatUtil.stripColourCodes(rawMessage, false, TranslateMode.COLOUR_SIMPLE)); + + // ALL COLOUR + assertEquals("All colour codes should be stripped appropriately", + "Hello &kthere! <his &ois &ma &nmessage! RGB too!", + MultiChatUtil.stripColourCodes(rawMessage, false, TranslateMode.COLOUR_ALL)); + + // FORMAT UNDERLINE + assertEquals("Underline codes should be stripped appropriately", + "&r&aHello &kthere! &6<his &ois &ma message! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!", + MultiChatUtil.stripColourCodes(rawMessage, false, TranslateMode.FORMAT_UNDERLINE)); + + // FORMAT ITALIC + assertEquals("Italic codes should be stripped appropriately", + "&r&aHello &kthere! &6<his is &ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!", + MultiChatUtil.stripColourCodes(rawMessage, false, TranslateMode.FORMAT_ITALIC)); + + // FORMAT BOLD + assertEquals("Bold codes should be stripped appropriately", + "&r&aHello &kthere! &6this &ois &ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!", + MultiChatUtil.stripColourCodes(rawMessage, false, TranslateMode.FORMAT_BOLD)); + + // FORMAT STRIKE + assertEquals("Strike codes should be stripped appropriately", + "&r&aHello &kthere! &6<his &ois a &nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!", + MultiChatUtil.stripColourCodes(rawMessage, false, TranslateMode.FORMAT_STRIKE)); + + // FORMAT OBFUSCATED + assertEquals("Obfuscation codes should be stripped appropriately", + "&r&aHello there! &6<his &ois &ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!", + MultiChatUtil.stripColourCodes(rawMessage, false, TranslateMode.FORMAT_OBFUSCATED)); + + // FORMAT RESET + assertEquals("Reset codes should be stripped appropriately", + "&aHello &kthere! &6<his &ois &ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!", + MultiChatUtil.stripColourCodes(rawMessage, false, TranslateMode.FORMAT_RESET)); + + // FORMAT ALL + assertEquals("All format codes should be stripped appropriately", + "&aHello there! &6this is a message! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!", + MultiChatUtil.stripColourCodes(rawMessage, false, TranslateMode.FORMAT_ALL)); + + // X + assertEquals("All X codes should be stripped appropriately", + "&r&aHello &kthere! &6<his &ois &ma &nmessage! &r&a&b&c&d&e&fRGB &r&a&b&c&d&e&ftoo&r&a&b&c&d&e&f!", + MultiChatUtil.stripColourCodes(rawMessage, false, TranslateMode.X)); + + } + } From c04aea112837ef79641dab26c18d75cd57e2982c Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Tue, 4 Aug 2020 13:52:35 +0100 Subject: [PATCH 120/188] Colour -> Color in MultiChatUtil --- .../multichat/bungee/Announcements.java | 8 +- .../multichat/bungee/Bulletins.java | 4 +- .../multichat/bungee/ConsoleManager.java | 4 +- .../multichat/bungee/MessageManager.java | 12 +-- .../bungee/PrivateMessageManager.java | 12 +-- .../multichat/bungee/StaffChatManager.java | 8 +- .../bungee/commands/DisplayCommand.java | 4 +- .../multichat/bungee/commands/GCCommand.java | 10 +-- .../multichat/common/MultiChatUtil.java | 42 +++++----- .../local/common/LocalChatManager.java | 6 +- .../local/common/commands/NickCommand.java | 34 ++++---- .../common/config/RegexChannelForcer.java | 2 +- .../common/storage/LocalFileNameManager.java | 8 +- .../common/storage/LocalNameManager.java | 2 +- .../common/storage/LocalSQLNameManager.java | 8 +- .../local/spigot/LocalSpigotMetaManager.java | 12 +-- .../sponge/LocalSpongeFileNameManager.java | 4 +- .../local/sponge/LocalSpongeMetaManager.java | 8 +- .../sponge/LocalSpongePlaceholderManager.java | 2 +- .../proxy/common/channels/TagManager.java | 2 +- .../common/channels/local/LocalChannel.java | 6 +- .../channels/proxy/GenericProxyChannel.java | 8 +- .../common/listeners/ProxyLogoutListener.java | 4 +- .../ProxyServerConnectedListener.java | 6 +- .../multichat/junit/MultiChatUtilTest.java | 78 +++++++++---------- 25 files changed, 147 insertions(+), 147 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Announcements.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Announcements.java index bd712033..e329c13b 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Announcements.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Announcements.java @@ -38,11 +38,11 @@ public void run() { message = ChatControl.applyChatRules(message, "announcements", "").get(); - message = MultiChatUtil.translateColourCodes(message); + message = MultiChatUtil.translateColorCodes(message); for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { - onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(MultiChatUtil.approximateRGBColourCodes(message))); + onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(MultiChatUtil.approximateRGBColorCodes(message))); } else { onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(message)); } @@ -138,11 +138,11 @@ public static void playAnnouncement(String name) { message = ChatControl.applyChatRules(message, "announcements", "").get(); - message = MultiChatUtil.translateColourCodes(message); + message = MultiChatUtil.translateColorCodes(message); for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { - onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(MultiChatUtil.approximateRGBColourCodes(message))); + onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(MultiChatUtil.approximateRGBColorCodes(message))); } else { onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(message)); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Bulletins.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Bulletins.java index 537c527f..e641e715 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Bulletins.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/Bulletins.java @@ -111,11 +111,11 @@ public void run() { message = ChatControl.applyChatRules(message, "bulletins", "").get(); - message = MultiChatUtil.translateColourCodes(message); + message = MultiChatUtil.translateColorCodes(message); for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { - onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(MultiChatUtil.approximateRGBColourCodes(message))); + onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(MultiChatUtil.approximateRGBColorCodes(message))); } else { onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(message)); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ConsoleManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ConsoleManager.java index ab724de1..7c2e77e8 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ConsoleManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/ConsoleManager.java @@ -79,8 +79,8 @@ public static void logSocialSpy(String p1, String p2, String message) { private static void logToConsole(String message, String unformattedMessage) { BaseComponent[] first = TextComponent.fromLegacyText( - MultiChatUtil.approximateRGBColourCodes( - MultiChatUtil.translateColourCodes( + MultiChatUtil.approximateRGBColorCodes( + MultiChatUtil.translateColorCodes( MessageManager.getMessage("console_main_prefix") + message))); BaseComponent[] second = TextComponent.fromLegacyText(unformattedMessage); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MessageManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MessageManager.java index 354c4b10..5124302e 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MessageManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/MessageManager.java @@ -447,20 +447,20 @@ private static void handleSend(CommandSender sender, String id, String prefix, S // Translate format codes String message = prefix + getMessage(id); - message = MultiChatUtil.translateColourCodes(message); - if (isSpecial) special = MultiChatUtil.translateColourCodes(special); + message = MultiChatUtil.translateColorCodes(message); + if (isSpecial) special = MultiChatUtil.translateColorCodes(special); // Handle legacy servers if (sender instanceof ProxiedPlayer) { ProxiedPlayer player = (ProxiedPlayer) sender; if (MultiChat.legacyServers.contains(player.getServer().getInfo().getName())) { - message = MultiChatUtil.approximateRGBColourCodes(message); - if (isSpecial) special = MultiChatUtil.approximateRGBColourCodes(special); + message = MultiChatUtil.approximateRGBColorCodes(message); + if (isSpecial) special = MultiChatUtil.approximateRGBColorCodes(special); } } else { // Handle console - message = MultiChatUtil.approximateRGBColourCodes(message); - if (isSpecial) special = MultiChatUtil.approximateRGBColourCodes(special); + message = MultiChatUtil.approximateRGBColorCodes(message); + if (isSpecial) special = MultiChatUtil.approximateRGBColorCodes(special); } // If we want to treat the "Special" part as Json, then we will parse it here and treat it as a non special message diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PrivateMessageManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PrivateMessageManager.java index dcecd879..b76a276b 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PrivateMessageManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PrivateMessageManager.java @@ -45,12 +45,12 @@ private String getSpyFormat() { private void displayMessage(ProxiedPlayer player, String rawMessage, String replacement) { - rawMessage = MultiChatUtil.translateColourCodes(rawMessage); - replacement = MultiChatUtil.translateColourCodes(replacement); + rawMessage = MultiChatUtil.translateColorCodes(rawMessage); + replacement = MultiChatUtil.translateColorCodes(replacement); if (MultiChat.legacyServers.contains(player.getServer().getInfo().getName())) { - rawMessage = MultiChatUtil.approximateRGBColourCodes(rawMessage); - replacement = MultiChatUtil.approximateRGBColourCodes(replacement); + rawMessage = MultiChatUtil.approximateRGBColorCodes(rawMessage); + replacement = MultiChatUtil.approximateRGBColorCodes(replacement); } player.sendMessage(ProxyJsonUtils.parseMessage(rawMessage, "%MESSAGE%", replacement)); @@ -59,8 +59,8 @@ private void displayMessage(ProxiedPlayer player, String rawMessage, String repl private void displayConsoleMessage(String rawMessage, String replacement) { - rawMessage = MultiChatUtil.approximateRGBColourCodes(MultiChatUtil.translateColourCodes(rawMessage)); - replacement = MultiChatUtil.approximateRGBColourCodes(MultiChatUtil.translateColourCodes(replacement)); + rawMessage = MultiChatUtil.approximateRGBColorCodes(MultiChatUtil.translateColorCodes(rawMessage)); + replacement = MultiChatUtil.approximateRGBColorCodes(MultiChatUtil.translateColorCodes(replacement)); ProxyServer.getInstance().getConsole().sendMessage(ProxyJsonUtils.parseMessage(rawMessage, "%MESSAGE%", replacement)); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/StaffChatManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/StaffChatManager.java index c8a1df5f..448be651 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/StaffChatManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/StaffChatManager.java @@ -81,12 +81,12 @@ private void sendStaffChatMessage(String id, String username, String displayname message = chatfix.replaceAdminChatVars(messageFormat, username, displayname, server, original, onlineplayer); } - message = MultiChatUtil.translateColourCodes(message); - String originalTranslated = MultiChatUtil.translateColourCodes(original); + message = MultiChatUtil.translateColorCodes(message); + String originalTranslated = MultiChatUtil.translateColorCodes(original); if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { - message = MultiChatUtil.approximateRGBColourCodes(message); - originalTranslated = MultiChatUtil.approximateRGBColourCodes(originalTranslated); + message = MultiChatUtil.approximateRGBColorCodes(message); + originalTranslated = MultiChatUtil.approximateRGBColorCodes(originalTranslated); } onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(message, "%MESSAGE%", originalTranslated)); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/DisplayCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/DisplayCommand.java index 5f8a7440..d7f5941c 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/DisplayCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/DisplayCommand.java @@ -49,7 +49,7 @@ public static void displayMessage(String message) { Configuration config = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig(); message = ChatControl.applyChatRules(message, "display_command", "").get(); - message = MultiChatUtil.translateColourCodes(message); + message = MultiChatUtil.translateColorCodes(message); for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { @@ -59,7 +59,7 @@ public static void displayMessage(String message) { onlineplayer.getServer().getInfo().getName())) continue; if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { - onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(MultiChatUtil.approximateRGBColourCodes(message))); + onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(MultiChatUtil.approximateRGBColorCodes(message))); } else { onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(message)); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GCCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GCCommand.java index e07e095d..02454dbb 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GCCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GCCommand.java @@ -125,8 +125,8 @@ public static void sendMessage(String originalMessage, String playerName, TGroup String messageFormat = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString(ConfigValues.Config.GroupChat.FORMAT); String message = chatfix.replaceGroupChatVars(messageFormat, playerName, originalMessage, groupInfo.getName()); - message = MultiChatUtil.translateColourCodes(message); - String originalTranslated = MultiChatUtil.translateColourCodes(originalMessage); + message = MultiChatUtil.translateColorCodes(message); + String originalTranslated = MultiChatUtil.translateColorCodes(originalMessage); for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { @@ -135,7 +135,7 @@ public static void sendMessage(String originalMessage, String playerName, TGroup if (potentialPlayer != null) { if (!ChatControl.ignores(potentialPlayer.getUniqueId(), onlineplayer.getUniqueId(), "group_chats")) { if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { - onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(MultiChatUtil.approximateRGBColourCodes(message), "%MESSAGE%", MultiChatUtil.approximateRGBColourCodes(originalTranslated))); + onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(MultiChatUtil.approximateRGBColorCodes(message), "%MESSAGE%", MultiChatUtil.approximateRGBColorCodes(originalTranslated))); } else { onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(message, "%MESSAGE%", originalTranslated)); } @@ -144,7 +144,7 @@ public static void sendMessage(String originalMessage, String playerName, TGroup } } else { if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { - onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(MultiChatUtil.approximateRGBColourCodes(message), "%MESSAGE%", MultiChatUtil.approximateRGBColourCodes(originalTranslated))); + onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(MultiChatUtil.approximateRGBColorCodes(message), "%MESSAGE%", MultiChatUtil.approximateRGBColorCodes(originalTranslated))); } else { onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(message, "%MESSAGE%", originalTranslated)); } @@ -154,7 +154,7 @@ public static void sendMessage(String originalMessage, String playerName, TGroup } - BaseComponent[] finalMessage = ProxyJsonUtils.parseMessage(MultiChatUtil.approximateRGBColourCodes(message), "%MESSAGE%", MultiChatUtil.approximateRGBColourCodes(originalTranslated)); + BaseComponent[] finalMessage = ProxyJsonUtils.parseMessage(MultiChatUtil.approximateRGBColorCodes(message), "%MESSAGE%", MultiChatUtil.approximateRGBColorCodes(originalTranslated)); String consoleMessage = ""; for (BaseComponent bc : finalMessage) consoleMessage += bc.toLegacyText(); ConsoleManager.logGroupChat(consoleMessage); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/common/MultiChatUtil.java b/multichat/src/main/java/xyz/olivermartin/multichat/common/MultiChatUtil.java index 434a30b2..cb743b16 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/common/MultiChatUtil.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/common/MultiChatUtil.java @@ -18,13 +18,13 @@ public class MultiChatUtil { /** - *

Takes a raw string and translates any colour codes using the & symbol

+ *

Takes a raw string and translates any color codes using the & symbol

*

Any RGB codes in the format &#abcdef, &xabcdef or &x&a&b&c&d&e&f will also be translated

* @param rawMessage The raw message to translate * @return the translated message */ - public static String translateColourCodes(String rawMessage) { - return translateColourCodes(rawMessage, TranslateMode.ALL); + public static String translateColorCodes(String rawMessage) { + return translateColorCodes(rawMessage, TranslateMode.ALL); } /** @@ -33,14 +33,14 @@ public static String translateColourCodes(String rawMessage) { * @param modes The TranslateModes to process * @return the translated message */ - public static String translateColourCodes(String rawMessage, TranslateMode... modes) { + public static String translateColorCodes(String rawMessage, TranslateMode... modes) { String translatedMessage = rawMessage; boolean rgb = Arrays.stream(modes).anyMatch(value -> TranslateMode.isRGB(value)); // If we are translating RGB codes, reformat these to the correct format - if (rgb) translatedMessage = MultiChatUtil.preProcessColourCodes(translatedMessage); + if (rgb) translatedMessage = MultiChatUtil.preProcessColorCodes(translatedMessage); // Process each of the translations for (TranslateMode mode : modes) { @@ -52,14 +52,14 @@ public static String translateColourCodes(String rawMessage, TranslateMode... mo } /** - *

Takes a raw string and strips any colour codes using the & symbol

+ *

Takes a raw string and strips any color codes using the & symbol

*

If stripTranslatedCodes is true then it will also strip any codes using the § symbol

* @param rawMessage The raw message to strip * @param stripTranslatedCodes If pre-translated codes (§) should also be stripped * @return the stripped message */ - public static String stripColourCodes(String rawMessage, boolean stripTranslatedCodes) { - return stripColourCodes(rawMessage, stripTranslatedCodes, TranslateMode.ALL); + public static String stripColorCodes(String rawMessage, boolean stripTranslatedCodes) { + return stripColorCodes(rawMessage, stripTranslatedCodes, TranslateMode.ALL); } /** @@ -70,14 +70,14 @@ public static String stripColourCodes(String rawMessage, boolean stripTranslated * @param modes The TranslateModes to apply * @return the stripped message */ - public static String stripColourCodes(String rawMessage, boolean stripTranslatedCodes, TranslateMode... modes) { + public static String stripColorCodes(String rawMessage, boolean stripTranslatedCodes, TranslateMode... modes) { String strippedMessage = rawMessage; boolean rgb = Arrays.stream(modes).anyMatch(value -> TranslateMode.isRGB(value)); // If we are stripping RGB codes, reformat these to the correct format - if (rgb) strippedMessage = MultiChatUtil.preProcessColourCodes(strippedMessage); + if (rgb) strippedMessage = MultiChatUtil.preProcessColorCodes(strippedMessage); // Process each of the strips for (TranslateMode mode : modes) { @@ -99,8 +99,8 @@ public static String stripColourCodes(String rawMessage, boolean stripTranslated * @param checkTranslatedCodes If pre-translated codes (§) should also be checked * @return true if it contains format codes */ - public static boolean containsColourCodes(String rawMessage, boolean checkTranslatedCodes) { - return containsColourCodes(rawMessage, checkTranslatedCodes, TranslateMode.ALL); + public static boolean containsColorCodes(String rawMessage, boolean checkTranslatedCodes) { + return containsColorCodes(rawMessage, checkTranslatedCodes, TranslateMode.ALL); } /** @@ -110,12 +110,12 @@ public static boolean containsColourCodes(String rawMessage, boolean checkTransl * @param modes The TranslateModes to process * @return true if it contains format codes */ - public static boolean containsColourCodes(String rawMessage, boolean checkTranslatedCodes, TranslateMode... modes) { + public static boolean containsColorCodes(String rawMessage, boolean checkTranslatedCodes, TranslateMode... modes) { boolean rgb = Arrays.stream(modes).anyMatch(value -> TranslateMode.isRGB(value)); // If we are checking RGB codes, reformat these to the correct format - if (rgb) rawMessage = MultiChatUtil.preProcessColourCodes(rawMessage); + if (rgb) rawMessage = MultiChatUtil.preProcessColorCodes(rawMessage); // Process each of the checks for (TranslateMode mode : modes) { @@ -136,7 +136,7 @@ public static boolean containsColourCodes(String rawMessage, boolean checkTransl * @param message * @return message reformatted */ - public static String preProcessColourCodes(String message) { + public static String preProcessColorCodes(String message) { Matcher longRgb = LONG_UNTRANSLATED_RGB.matcher(message); message = longRgb.replaceAll("&r&x&$1&$2&$3&$4&$5&$6"); @@ -150,10 +150,10 @@ public static String preProcessColourCodes(String message) { // Transform codes to lowercase for better compatibility with Essentials etc. for (char c : message.toCharArray()) { - // If this could be a colour code + // If this could be a color code if (lastChar == '&') { - // If it is a colour code, set to be lowercase + // If it is a color code, set to be lowercase Matcher allFormattingChars = ALL_FORMATTING_CHARS.matcher(String.valueOf(c)); if (allFormattingChars.matches()) { c = Character.toLowerCase(c); @@ -171,18 +171,18 @@ public static String preProcessColourCodes(String message) { } - public static String approximateRGBColourCodes(String message) { + public static String approximateRGBColorCodes(String message) { Matcher rgbMatcher = TRANSLATED_RGB.matcher(message); message = rgbMatcher.replaceAll("§#$2$3$4$5$6$7"); message = replaceRGBShortCodesWithApproximations(message, false); - return approximateJsonRGBColourCodes(message); + return approximateJsonRGBColorCodes(message); } - private static String approximateJsonRGBColourCodes(String message) { + private static String approximateJsonRGBColorCodes(String message) { Matcher jsonRgbMatcher = JSON_RGB.matcher(message); message = jsonRgbMatcher.replaceAll("$1§#$2$3$4$5$6$7$8"); @@ -374,7 +374,7 @@ public static String getStringFromCollection(Collection collection) { } - public static String visualiseColourCodes(String message) { + public static String visualiseColorCodes(String message) { Matcher originMatcher = TranslateMode.ALL.getOriginPattern().matcher(message); Matcher translatedMatcher = TranslateMode.ALL.getTranslatedPattern().matcher(message); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalChatManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalChatManager.java index 74044be1..ce91706f 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalChatManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalChatManager.java @@ -286,13 +286,13 @@ public boolean canChatInRGBColour(UUID uuid) { public String translateColourCodes(String message, boolean rgb) { if (rgb) { - message = MultiChatUtil.translateColourCodes(message); + message = MultiChatUtil.translateColorCodes(message); } else { - message = MultiChatUtil.translateColourCodes(message, TranslateMode.SIMPLE); + message = MultiChatUtil.translateColorCodes(message, TranslateMode.SIMPLE); } if (MultiChatLocal.getInstance().getDataStore().isLegacy()) { - message = MultiChatUtil.approximateRGBColourCodes(message); + message = MultiChatUtil.approximateRGBColorCodes(message); } return message; diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/commands/NickCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/commands/NickCommand.java index 1b3bff96..dacd1acd 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/commands/NickCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/commands/NickCommand.java @@ -17,7 +17,7 @@ public abstract class NickCommand { public boolean executeNickCommand(UUID targetUniqueId, MultiChatLocalPlayer sender, String proposedNick) { - proposedNick = MultiChatUtil.preProcessColourCodes(proposedNick); + proposedNick = MultiChatUtil.preProcessColorCodes(proposedNick); LocalNameManager lnm = MultiChatLocal.getInstance().getNameManager(); @@ -51,7 +51,7 @@ public boolean executeNickCommand(UUID targetUniqueId, MultiChatLocalPlayer send public boolean executeConsoleNickCommand(UUID targetUniqueId, MultiChatLocalCommandSender console, String proposedNick) { - proposedNick = MultiChatUtil.preProcessColourCodes(proposedNick); + proposedNick = MultiChatUtil.preProcessColorCodes(proposedNick); LocalNameManager lnm = MultiChatLocal.getInstance().getNameManager(); @@ -78,17 +78,17 @@ private boolean checkPermissions(UUID targetUniqueId, MultiChatLocalPlayer sende LocalNameManager lnm = MultiChatLocal.getInstance().getNameManager(); LocalConfig config = MultiChatLocal.getInstance().getConfigManager().getLocalConfig(); - if (MultiChatUtil.containsColourCodes(proposedNick, false, TranslateMode.X) && !(sender.hasPermission("multichatlocal.nick.color") || sender.hasPermission("multichatlocal.nick.colour")||sender.hasPermission("multichatlocal.nick.color.rgb") || sender.hasPermission("multichatlocal.nick.colour.rgb"))) { + if (MultiChatUtil.containsColorCodes(proposedNick, false, TranslateMode.X) && !(sender.hasPermission("multichatlocal.nick.color") || sender.hasPermission("multichatlocal.nick.colour")||sender.hasPermission("multichatlocal.nick.color.rgb") || sender.hasPermission("multichatlocal.nick.colour.rgb"))) { sender.sendBadMessage("You do not have permission to use nicknames with rgb color codes!"); return false; } - if (MultiChatUtil.containsColourCodes(proposedNick, false, TranslateMode.COLOUR_SIMPLE) && !(sender.hasPermission("multichatlocal.nick.color") || sender.hasPermission("multichatlocal.nick.colour")||sender.hasPermission("multichatlocal.nick.color.simple") || sender.hasPermission("multichatlocal.nick.colour.simple") ||sender.hasPermission("multichatlocal.nick.color.rgb") || sender.hasPermission("multichatlocal.nick.colour.rgb"))) { + if (MultiChatUtil.containsColorCodes(proposedNick, false, TranslateMode.COLOUR_SIMPLE) && !(sender.hasPermission("multichatlocal.nick.color") || sender.hasPermission("multichatlocal.nick.colour")||sender.hasPermission("multichatlocal.nick.color.simple") || sender.hasPermission("multichatlocal.nick.colour.simple") ||sender.hasPermission("multichatlocal.nick.color.rgb") || sender.hasPermission("multichatlocal.nick.colour.rgb"))) { sender.sendBadMessage("You do not have permission to use nicknames with simple color codes!"); return false; } - if (MultiChatUtil.containsColourCodes(proposedNick, false, TranslateMode.FORMAT_ALL)) { + if (MultiChatUtil.containsColorCodes(proposedNick, false, TranslateMode.FORMAT_ALL)) { // If the nickname has ANY format codes... @@ -96,32 +96,32 @@ private boolean checkPermissions(UUID targetUniqueId, MultiChatLocalPlayer sende // If they don't have the permission for ALL format codes, then we will check individually... - if (MultiChatUtil.containsColourCodes(proposedNick, false, TranslateMode.FORMAT_BOLD) && !(sender.hasPermission("multichatlocal.nick.format.bold"))) { + if (MultiChatUtil.containsColorCodes(proposedNick, false, TranslateMode.FORMAT_BOLD) && !(sender.hasPermission("multichatlocal.nick.format.bold"))) { sender.sendBadMessage("You do not have permission to use nicknames with bold format codes!"); return false; } - if (MultiChatUtil.containsColourCodes(proposedNick, false, TranslateMode.FORMAT_ITALIC) && !(sender.hasPermission("multichatlocal.nick.format.italic"))) { + if (MultiChatUtil.containsColorCodes(proposedNick, false, TranslateMode.FORMAT_ITALIC) && !(sender.hasPermission("multichatlocal.nick.format.italic"))) { sender.sendBadMessage("You do not have permission to use nicknames with italic format codes!"); return false; } - if (MultiChatUtil.containsColourCodes(proposedNick, false, TranslateMode.FORMAT_UNDERLINE) && !(sender.hasPermission("multichatlocal.nick.format.underline"))) { + if (MultiChatUtil.containsColorCodes(proposedNick, false, TranslateMode.FORMAT_UNDERLINE) && !(sender.hasPermission("multichatlocal.nick.format.underline"))) { sender.sendBadMessage("You do not have permission to use nicknames with underline format codes!"); return false; } - if (MultiChatUtil.containsColourCodes(proposedNick, false, TranslateMode.FORMAT_STRIKE) && !(sender.hasPermission("multichatlocal.nick.format.strikethrough"))) { + if (MultiChatUtil.containsColorCodes(proposedNick, false, TranslateMode.FORMAT_STRIKE) && !(sender.hasPermission("multichatlocal.nick.format.strikethrough"))) { sender.sendBadMessage("You do not have permission to use nicknames with strikethrough format codes!"); return false; } - if (MultiChatUtil.containsColourCodes(proposedNick, false, TranslateMode.FORMAT_OBFUSCATED) && !(sender.hasPermission("multichatlocal.nick.format.obfuscated"))) { + if (MultiChatUtil.containsColorCodes(proposedNick, false, TranslateMode.FORMAT_OBFUSCATED) && !(sender.hasPermission("multichatlocal.nick.format.obfuscated"))) { sender.sendBadMessage("You do not have permission to use nicknames with obfuscated format codes!"); return false; } - if (MultiChatUtil.containsColourCodes(proposedNick, false, TranslateMode.FORMAT_RESET) && !((sender.hasPermission("multichatlocal.nick.format.reset")||sender.hasPermission("multichatlocal.nick.color")||sender.hasPermission("multichatlocal.nick.colour")||sender.hasPermission("multichatlocal.nick.color.rgb")||sender.hasPermission("multichatlocal.nick.colour.rgb")))) { + if (MultiChatUtil.containsColorCodes(proposedNick, false, TranslateMode.FORMAT_RESET) && !((sender.hasPermission("multichatlocal.nick.format.reset")||sender.hasPermission("multichatlocal.nick.color")||sender.hasPermission("multichatlocal.nick.colour")||sender.hasPermission("multichatlocal.nick.color.rgb")||sender.hasPermission("multichatlocal.nick.colour.rgb")))) { sender.sendBadMessage("You do not have permission to use nicknames with reset format codes!"); return false; } @@ -144,7 +144,7 @@ private boolean checkPermissions(UUID targetUniqueId, MultiChatLocalPlayer sende length = proposedNick.length(); endOfMessage = "(Including format codes)"; } else { - length = MultiChatUtil.stripColourCodes(proposedNick, false).length(); + length = MultiChatUtil.stripColorCodes(proposedNick, false).length(); endOfMessage = "(Excluding format codes)"; } @@ -162,7 +162,7 @@ private boolean checkPermissions(UUID targetUniqueId, MultiChatLocalPlayer sende String targetName = lnm.getName(targetUniqueId); - if (lnm.existsPlayer(proposedNick) && !targetName.equalsIgnoreCase(MultiChatUtil.stripColourCodes(proposedNick, false)) && !sender.hasPermission("multichatlocal.nick.impersonate")) { + if (lnm.existsPlayer(proposedNick) && !targetName.equalsIgnoreCase(MultiChatUtil.stripColorCodes(proposedNick, false)) && !sender.hasPermission("multichatlocal.nick.impersonate")) { sender.sendBadMessage("Sorry, a player already exists with this name!"); return false; } @@ -172,7 +172,7 @@ private boolean checkPermissions(UUID targetUniqueId, MultiChatLocalPlayer sende boolean blacklisted = false; for (String bl : config.getNicknameBlacklist()) { - if (MultiChatUtil.stripColourCodes(proposedNick, false).matches(bl)) { + if (MultiChatUtil.stripColorCodes(proposedNick, false).matches(bl)) { blacklisted = true; break; } @@ -193,14 +193,14 @@ private boolean checkValidNickname(UUID targetUniqueId, MultiChatLocalCommandSen LocalNameManager lnm = MultiChatLocal.getInstance().getNameManager(); - if (MultiChatUtil.stripColourCodes(proposedNick, false).length() < 1) { + if (MultiChatUtil.stripColorCodes(proposedNick, false).length() < 1) { sender.sendBadMessage("Sorry your nickname cannot be empty!"); return false; } - String targetNickname = MultiChatUtil.stripColourCodes(lnm.getCurrentName(targetUniqueId, false), false); + String targetNickname = MultiChatUtil.stripColorCodes(lnm.getCurrentName(targetUniqueId, false), false); - if (lnm.existsNickname(proposedNick) && !targetNickname.equalsIgnoreCase(MultiChatUtil.stripColourCodes(proposedNick, false)) ) { + if (lnm.existsNickname(proposedNick) && !targetNickname.equalsIgnoreCase(MultiChatUtil.stripColorCodes(proposedNick, false)) ) { sender.sendBadMessage("Sorry, this nickname is already in use!"); return false; } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/config/RegexChannelForcer.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/config/RegexChannelForcer.java index 59236c83..c81449b7 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/config/RegexChannelForcer.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/config/RegexChannelForcer.java @@ -32,7 +32,7 @@ public boolean matchesRegex(String messageFormat) { String testMessage = messageFormat; if (ignoreFormatCodes) { - testMessage = MultiChatUtil.stripColourCodes(testMessage, true); + testMessage = MultiChatUtil.stripColorCodes(testMessage, true); } else { // This makes life easier when doing the config file as only have to use & style colour codes testMessage = testMessage.replace('§', '&'); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/storage/LocalFileNameManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/storage/LocalFileNameManager.java index 7bf406d0..841807a6 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/storage/LocalFileNameManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/storage/LocalFileNameManager.java @@ -333,7 +333,7 @@ public void setNickname(UUID uuid, String nickname) { MultiChatLocal.getInstance().getConsoleLogger().debug("[LocalFileNameManager] Old nickname removed!"); } - String unformattedNickname = MultiChatUtil.stripColourCodes(nickname.toLowerCase(), false); + String unformattedNickname = MultiChatUtil.stripColorCodes(nickname.toLowerCase(), false); MultiChatLocal.getInstance().getConsoleLogger().debug("[LocalFileNameManager] Unformatted nickname = " + unformattedNickname); @@ -370,7 +370,7 @@ public boolean existsPlayer(String username) { * @return If this nickname is currently in use */ public boolean existsNickname(String nickname) { - return mapNickUUID.containsKey(MultiChatUtil.stripColourCodes(nickname.toLowerCase(), false)); + return mapNickUUID.containsKey(MultiChatUtil.stripColorCodes(nickname.toLowerCase(), false)); } /** @@ -381,7 +381,7 @@ public boolean existsNickname(String nickname) { public Optional> getPartialNicknameMatches(String nickname) { Set nickSet = mapNickUUID.keySet(); - nickname = MultiChatUtil.stripColourCodes(nickname.toLowerCase(), false); + nickname = MultiChatUtil.stripColorCodes(nickname.toLowerCase(), false); Set uuidSet = new HashSet(); for (String nick : nickSet) { @@ -432,7 +432,7 @@ public Optional> getPartialNicknameMatches(String nickname) { public Optional> getPartialNameMatches(String name) { Set nameSet = mapNameUUID.keySet(); - name = MultiChatUtil.stripColourCodes(name.toLowerCase(), false); + name = MultiChatUtil.stripColorCodes(name.toLowerCase(), false); Set uuidSet = new HashSet(); for (String n : nameSet) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/storage/LocalNameManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/storage/LocalNameManager.java index cbf791b8..06f2b98c 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/storage/LocalNameManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/storage/LocalNameManager.java @@ -88,7 +88,7 @@ public String getCurrentName(UUID uuid) { public Optional getUUIDFromNickname(String nickname) { nickname = nickname.toLowerCase(); - nickname = MultiChatUtil.stripColourCodes(nickname, false); + nickname = MultiChatUtil.stripColorCodes(nickname, false); Optional uuid = getUUIDFromUnformattedNickname(nickname); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/storage/LocalSQLNameManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/storage/LocalSQLNameManager.java index c26986c8..a7f36b51 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/storage/LocalSQLNameManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/storage/LocalSQLNameManager.java @@ -459,7 +459,7 @@ public void setNickname(UUID uuid, String nickname) { return; } - String unformattedNickname = MultiChatUtil.stripColourCodes(nickname.toLowerCase(), false); + String unformattedNickname = MultiChatUtil.stripColorCodes(nickname.toLowerCase(), false); MultiChatLocal.getInstance().getConsoleLogger().debug("[LocalSQLNameManager] Unformatted nickname = " + unformattedNickname); @@ -536,7 +536,7 @@ public boolean existsNickname(String nickname) { try { conn = localDatabase.getConnection(); - ResultSet results = conn.safeQuery("SELECT u_nick FROM nick_data WHERE u_nick = ?;", MultiChatUtil.stripColourCodes(nickname.toLowerCase(), false)); + ResultSet results = conn.safeQuery("SELECT u_nick FROM nick_data WHERE u_nick = ?;", MultiChatUtil.stripColorCodes(nickname.toLowerCase(), false)); if (results.next()) { MultiChatLocal.getInstance().getConsoleLogger().debug("[LocalSQLNameManager] Nickname " + nickname + " exists"); @@ -568,7 +568,7 @@ public boolean otherPlayerHasNickname(String nickname, UUID uuid) { conn = localDatabase.getConnection(); ResultSet results = conn.safeQuery("SELECT id, u_nick FROM nick_data WHERE u_nick = ?;" - , MultiChatUtil.stripColourCodes(nickname.toLowerCase(), false)); + , MultiChatUtil.stripColorCodes(nickname.toLowerCase(), false)); if (results.next()) { if (results.getString("id").equals(uuid.toString())) { @@ -603,7 +603,7 @@ public Optional> getPartialNicknameMatches(String nickname) { conn = localDatabase.getConnection(); ResultSet results = conn.safeQuery("SELECT id FROM nick_data WHERE (u_nick LIKE ?);" - , "%" + MultiChatUtil.stripColourCodes(nickname.toLowerCase(), false) + "%"); + , "%" + MultiChatUtil.stripColorCodes(nickname.toLowerCase(), false) + "%"); if (results.next()) { Set uuids = new HashSet(); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotMetaManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotMetaManager.java index 0f4aa43d..dc258570 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotMetaManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotMetaManager.java @@ -28,10 +28,10 @@ public String getPrefix(UUID uuid) { String prefix = vaultChat.getPlayerPrefix(Bukkit.getServer().getPlayer(uuid)); // Translate prefix - prefix = MultiChatUtil.translateColourCodes(prefix); + prefix = MultiChatUtil.translateColorCodes(prefix); // Deal with legacy servers - if (MultiChatLocal.getInstance().getDataStore().isLegacy()) prefix = MultiChatUtil.approximateRGBColourCodes(prefix); + if (MultiChatLocal.getInstance().getDataStore().isLegacy()) prefix = MultiChatUtil.approximateRGBColorCodes(prefix); return prefix; @@ -54,10 +54,10 @@ public String getSuffix(UUID uuid) { String suffix = vaultChat.getPlayerSuffix(Bukkit.getServer().getPlayer(uuid)); // Translate suffix - suffix = MultiChatUtil.translateColourCodes(suffix); + suffix = MultiChatUtil.translateColorCodes(suffix); // Deal with legacy servers - if (MultiChatLocal.getInstance().getDataStore().isLegacy()) suffix = MultiChatUtil.approximateRGBColourCodes(suffix); + if (MultiChatLocal.getInstance().getDataStore().isLegacy()) suffix = MultiChatUtil.approximateRGBColorCodes(suffix); return suffix; @@ -106,14 +106,14 @@ public String getDisplayName(UUID uuid) { logger.debug("[LocalSpigotMetaManager] Format with placeholders = " + displayNameFormat); logger.debug("[LocalSpigotMetaManager] Format with placeholders (using & only) = " + displayNameFormat.replaceAll("(?i)§(?=[a-f,0-9,k-o,r,x])", "&")); - displayNameFormat = MultiChatUtil.translateColourCodes(displayNameFormat); + displayNameFormat = MultiChatUtil.translateColorCodes(displayNameFormat); logger.debug("[LocalSpigotMetaManager] FINAL = " + displayNameFormat); logger.debug("[LocalSpigotMetaManager] FINAL (using & only) = " + displayNameFormat.replaceAll("(?i)§(?=[a-f,0-9,k-o,r,x])", "&")); // Handle legacy servers if (MultiChatLocal.getInstance().getDataStore().isLegacy()) - displayNameFormat = MultiChatUtil.approximateRGBColourCodes(displayNameFormat); + displayNameFormat = MultiChatUtil.approximateRGBColorCodes(displayNameFormat); player.setDisplayName(displayNameFormat); player.setPlayerListName(displayNameFormat); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongeFileNameManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongeFileNameManager.java index 4a39d3c6..67eb7803 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongeFileNameManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongeFileNameManager.java @@ -137,7 +137,7 @@ public void setNickname(UUID uuid, String nickname) { removeNickname(uuid); } - String unformattedNickname = MultiChatUtil.stripColourCodes(nickname.toLowerCase(), false); + String unformattedNickname = MultiChatUtil.stripColorCodes(nickname.toLowerCase(), false); synchronized (mapNickUUID) { @@ -181,7 +181,7 @@ public Optional> getPartialNameMatches(String name) { Collection profiles = uss.getAll(); //Set nameSet = mapNameUUID.keySet(); - name = MultiChatUtil.stripColourCodes(name.toLowerCase(), false); + name = MultiChatUtil.stripColorCodes(name.toLowerCase(), false); Set uuidSet = new HashSet(); for (GameProfile gp : profiles) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongeMetaManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongeMetaManager.java index a00bbb59..d6a349e1 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongeMetaManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongeMetaManager.java @@ -24,7 +24,7 @@ public String getPrefix(UUID uuid) { Player player = opPlayer.get(); if (player.getOption("prefix").isPresent()) { - return MultiChatUtil.approximateRGBColourCodes(MultiChatUtil.translateColourCodes(player.getOption("prefix").get())); + return MultiChatUtil.approximateRGBColorCodes(MultiChatUtil.translateColorCodes(player.getOption("prefix").get())); } else { return ""; } @@ -45,7 +45,7 @@ public String getSuffix(UUID uuid) { Player player = opPlayer.get(); if (player.getOption("suffix").isPresent()) { - return MultiChatUtil.approximateRGBColourCodes(MultiChatUtil.translateColourCodes(player.getOption("suffix").get())); + return MultiChatUtil.approximateRGBColorCodes(MultiChatUtil.translateColorCodes(player.getOption("suffix").get())); } else { return ""; } @@ -92,8 +92,8 @@ public String getDisplayName(UUID uuid) { displayNameFormat = displayNameFormat.replaceAll("%NAME%", player.getName()); displayNameFormat = displayNameFormat.replaceAll("%PREFIX%", getPrefix(uuid)); displayNameFormat = displayNameFormat.replaceAll("%SUFFIX%", getSuffix(uuid)); - displayNameFormat = MultiChatUtil.translateColourCodes(displayNameFormat); - displayNameFormat = MultiChatUtil.approximateRGBColourCodes(displayNameFormat); + displayNameFormat = MultiChatUtil.translateColorCodes(displayNameFormat); + displayNameFormat = MultiChatUtil.approximateRGBColorCodes(displayNameFormat); // TODO Sponge doesn't seem to like this... So we tend to work around it by sending back our original string player.offer(Keys.DISPLAY_NAME,Text.of(displayNameFormat)); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongePlaceholderManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongePlaceholderManager.java index e78ef555..1f92578b 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongePlaceholderManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongePlaceholderManager.java @@ -17,7 +17,7 @@ public LocalSpongePlaceholderManager() { public String buildChatFormat(UUID uuid, String format) { format = processMultiChatPlaceholders(uuid, format);//.replaceAll("(?i)&(?=[a-f,0-9,k-o,r,x])", "§"); format = MultiChatLocal.getInstance().getChatManager().translateColourCodes(format, true); - format = MultiChatUtil.approximateRGBColourCodes(format); + format = MultiChatUtil.approximateRGBColorCodes(format); return format; } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/TagManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/TagManager.java index db3e6789..82796634 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/TagManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/TagManager.java @@ -58,7 +58,7 @@ private void notifyTaggedPlayers(List taggedPlayers, String tagge } private void notifyPlayer(ProxiedPlayer player, String tagger) { - player.sendMessage(ChatMessageType.ACTION_BAR, ProxyJsonUtils.parseMessage(MultiChatUtil.translateColourCodes("&6You were mentioned by %SPECIAL%"), "%SPECIAL%", MultiChatUtil.translateColourCodes(tagger))); + player.sendMessage(ChatMessageType.ACTION_BAR, ProxyJsonUtils.parseMessage(MultiChatUtil.translateColorCodes("&6You were mentioned by %SPECIAL%"), "%SPECIAL%", MultiChatUtil.translateColorCodes(tagger))); } } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/local/LocalChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/local/LocalChannel.java index a67f6203..69107afa 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/local/LocalChannel.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/local/LocalChannel.java @@ -84,7 +84,7 @@ public void distributeMessage(ProxiedPlayer sender, String message, String forma } if (MultiChat.legacyServers.contains(receiver.getServer().getInfo().getName())) { - receiver.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateRGBColourCodes(finalMessage))); + receiver.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateRGBColorCodes(finalMessage))); } else { receiver.sendMessage(TextComponent.fromLegacyText(finalMessage)); } @@ -99,7 +99,7 @@ public void sendMessage(ProxiedPlayer sender, String message) { public void broadcastRawMessage(CommandSender sender, String server, String message) { - message = MultiChatUtil.translateColourCodes(message); + message = MultiChatUtil.translateColorCodes(message); for (ProxiedPlayer receiver : ProxyServer.getInstance().getPlayers()) { @@ -118,7 +118,7 @@ public void broadcastRawMessage(CommandSender sender, String server, String mess } if (MultiChat.legacyServers.contains(receiver.getServer().getInfo().getName())) { - receiver.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateRGBColourCodes(finalMessage))); + receiver.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateRGBColorCodes(finalMessage))); } else { receiver.sendMessage(TextComponent.fromLegacyText(finalMessage)); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/GenericProxyChannel.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/GenericProxyChannel.java index d98d8100..ced45e52 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/GenericProxyChannel.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/channels/proxy/GenericProxyChannel.java @@ -84,7 +84,7 @@ public void distributeMessage(ProxiedPlayer sender, String message, String forma } if (MultiChat.legacyServers.contains(receiver.getServer().getInfo().getName())) { - receiver.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateRGBColourCodes(joined))); + receiver.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateRGBColorCodes(joined))); } else { receiver.sendMessage(TextComponent.fromLegacyText(joined)); } @@ -94,7 +94,7 @@ public void distributeMessage(ProxiedPlayer sender, String message, String forma // Trigger PostGlobalChatEvent ProxyServer.getInstance().getPluginManager().callEvent(new PostGlobalChatEvent(sender, format, message)); - ConsoleManager.logChat(MultiChatUtil.approximateRGBColourCodes(joined)); + ConsoleManager.logChat(MultiChatUtil.approximateRGBColorCodes(joined)); } @@ -109,7 +109,7 @@ public void broadcastRawMessage(CommandSender sender, String message) { // If the sender can't speak then return if (!canSpeak(sender)) return; - message = MultiChatUtil.translateColourCodes(message); + message = MultiChatUtil.translateColorCodes(message); for (ProxiedPlayer receiver : ProxyServer.getInstance().getPlayers()) { @@ -120,7 +120,7 @@ public void broadcastRawMessage(CommandSender sender, String message) { continue; if (MultiChat.legacyServers.contains(receiver.getServer().getInfo().getName())) { - receiver.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateRGBColourCodes(message))); + receiver.sendMessage(TextComponent.fromLegacyText(MultiChatUtil.approximateRGBColorCodes(message))); } else { receiver.sendMessage(TextComponent.fromLegacyText(message)); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLogoutListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLogoutListener.java index dd92ec9c..80f18030 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLogoutListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyLogoutListener.java @@ -28,9 +28,9 @@ private void displayMessage(ProxiedPlayer player, String message) { if (player.getServer() == null) return; - message = MultiChatUtil.translateColourCodes(message); + message = MultiChatUtil.translateColorCodes(message); - if (MultiChat.legacyServers.contains(player.getServer().getInfo().getName())) message = MultiChatUtil.approximateRGBColourCodes(message); + if (MultiChat.legacyServers.contains(player.getServer().getInfo().getName())) message = MultiChatUtil.approximateRGBColorCodes(message); player.sendMessage(ProxyJsonUtils.parseMessage(message)); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyServerConnectedListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyServerConnectedListener.java index 0498a9d5..e8098d35 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyServerConnectedListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/ProxyServerConnectedListener.java @@ -26,13 +26,13 @@ public class ProxyServerConnectedListener implements Listener { private void displayMessage(ProxiedPlayer player, ProxiedPlayer sender, String senderServer, String message) { - message = MultiChatUtil.translateColourCodes(message); + message = MultiChatUtil.translateColorCodes(message); if (player.getUniqueId().equals(sender.getUniqueId())) { - if (MultiChat.legacyServers.contains(senderServer)) message = MultiChatUtil.approximateRGBColourCodes(message); + if (MultiChat.legacyServers.contains(senderServer)) message = MultiChatUtil.approximateRGBColorCodes(message); } else { if (player.getServer() == null) return; - if (MultiChat.legacyServers.contains(player.getServer().getInfo().getName())) message = MultiChatUtil.approximateRGBColourCodes(message); + if (MultiChat.legacyServers.contains(player.getServer().getInfo().getName())) message = MultiChatUtil.approximateRGBColorCodes(message); } player.sendMessage(ProxyJsonUtils.parseMessage(message)); diff --git a/multichat/src/test/java/xyz/olivermartin/multichat/junit/MultiChatUtilTest.java b/multichat/src/test/java/xyz/olivermartin/multichat/junit/MultiChatUtilTest.java index 1804a860..a2fdb640 100644 --- a/multichat/src/test/java/xyz/olivermartin/multichat/junit/MultiChatUtilTest.java +++ b/multichat/src/test/java/xyz/olivermartin/multichat/junit/MultiChatUtilTest.java @@ -30,67 +30,67 @@ public void shouldTranslateColourCodesCorrectly() { // ALL assertEquals("All codes should be translated appropriately", "§r§aHello §kthere! §6§lthis §ois §ma §nmessage! §r§x§a§b§c§d§e§fRGB §r§x§a§b§c§d§e§ftoo§r§x§a§b§c§d§e§f!", - MultiChatUtil.translateColourCodes(rawMessage)); + MultiChatUtil.translateColorCodes(rawMessage)); // ALL #2 assertEquals("All codes should be translated appropriately", "§r§aHello §kthere! §6§lthis §ois §ma §nmessage! §r§x§a§b§c§d§e§fRGB §r§x§a§b§c§d§e§ftoo§r§x§a§b§c§d§e§f!", - MultiChatUtil.translateColourCodes(rawMessage, TranslateMode.ALL)); + MultiChatUtil.translateColorCodes(rawMessage, TranslateMode.ALL)); // SIMPLE assertEquals("Simple codes should be translated appropriately", "§r§aHello §kthere! §6§lthis §ois §ma §nmessage! &#ABCDEFRGB &xAbCdEftoo&x§a§b§c§d§e§f!", - MultiChatUtil.translateColourCodes(rawMessage, TranslateMode.SIMPLE)); + MultiChatUtil.translateColorCodes(rawMessage, TranslateMode.SIMPLE)); // SIMPLE COLOUR assertEquals("Simple colour codes should be translated appropriately", "&r§aHello &kthere! §6<his &ois &ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x§a§b§c§d§e§f!", - MultiChatUtil.translateColourCodes(rawMessage, TranslateMode.COLOUR_SIMPLE)); + MultiChatUtil.translateColorCodes(rawMessage, TranslateMode.COLOUR_SIMPLE)); // ALL COLOUR assertEquals("All colour codes should be translated appropriately", "§r§aHello &kthere! §6<his &ois &ma &nmessage! §r§x§a§b§c§d§e§fRGB §r§x§a§b§c§d§e§ftoo§r§x§a§b§c§d§e§f!", - MultiChatUtil.translateColourCodes(rawMessage, TranslateMode.COLOUR_ALL)); + MultiChatUtil.translateColorCodes(rawMessage, TranslateMode.COLOUR_ALL)); // FORMAT UNDERLINE assertEquals("Underline codes should be translated appropriately", "&r&aHello &kthere! &6<his &ois &ma §nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!", - MultiChatUtil.translateColourCodes(rawMessage, TranslateMode.FORMAT_UNDERLINE)); + MultiChatUtil.translateColorCodes(rawMessage, TranslateMode.FORMAT_UNDERLINE)); // FORMAT ITALIC assertEquals("Italic codes should be translated appropriately", "&r&aHello &kthere! &6<his §ois &ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!", - MultiChatUtil.translateColourCodes(rawMessage, TranslateMode.FORMAT_ITALIC)); + MultiChatUtil.translateColorCodes(rawMessage, TranslateMode.FORMAT_ITALIC)); // FORMAT BOLD assertEquals("Bold codes should be translated appropriately", "&r&aHello &kthere! &6§lthis &ois &ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!", - MultiChatUtil.translateColourCodes(rawMessage, TranslateMode.FORMAT_BOLD)); + MultiChatUtil.translateColorCodes(rawMessage, TranslateMode.FORMAT_BOLD)); // FORMAT STRIKE assertEquals("Strike codes should be translated appropriately", "&r&aHello &kthere! &6<his &ois §ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!", - MultiChatUtil.translateColourCodes(rawMessage, TranslateMode.FORMAT_STRIKE)); + MultiChatUtil.translateColorCodes(rawMessage, TranslateMode.FORMAT_STRIKE)); // FORMAT OBFUSCATED assertEquals("Obfuscation codes should be translated appropriately", "&r&aHello §kthere! &6<his &ois &ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!", - MultiChatUtil.translateColourCodes(rawMessage, TranslateMode.FORMAT_OBFUSCATED)); + MultiChatUtil.translateColorCodes(rawMessage, TranslateMode.FORMAT_OBFUSCATED)); // FORMAT RESET assertEquals("Reset codes should be translated appropriately", "§r&aHello &kthere! &6<his &ois &ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!", - MultiChatUtil.translateColourCodes(rawMessage, TranslateMode.FORMAT_RESET)); + MultiChatUtil.translateColorCodes(rawMessage, TranslateMode.FORMAT_RESET)); // FORMAT ALL assertEquals("All format codes should be translated appropriately", "§r&aHello §kthere! &6§lthis §ois §ma §nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!", - MultiChatUtil.translateColourCodes(rawMessage, TranslateMode.FORMAT_ALL)); + MultiChatUtil.translateColorCodes(rawMessage, TranslateMode.FORMAT_ALL)); // X assertEquals("All X codes should be translated appropriately", "&r&aHello &kthere! &6<his &ois &ma &nmessage! &r§x&a&b&c&d&e&fRGB &r§x&a&b&c&d&e&ftoo&r§x&a&b&c&d&e&f!", - MultiChatUtil.translateColourCodes(rawMessage, TranslateMode.X)); + MultiChatUtil.translateColorCodes(rawMessage, TranslateMode.X)); } @@ -99,9 +99,9 @@ public void shouldNotChangeWithMultipleTranslations() { String rawMessage = "&r&aHello &kthere! &6<his &ois &ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!"; - String translated1 = MultiChatUtil.translateColourCodes(rawMessage); + String translated1 = MultiChatUtil.translateColorCodes(rawMessage); - String translated2 = MultiChatUtil.translateColourCodes(translated1); + String translated2 = MultiChatUtil.translateColorCodes(translated1); assertEquals("Resulting translations should be the same after multiple parses", translated1, @@ -114,17 +114,17 @@ public void shouldApproximateRGBColourCodesCorrectly() { String rawMessage = "&r&aHello &kthere! &6<his &ois &ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!"; - String translated = MultiChatUtil.translateColourCodes(rawMessage); + String translated = MultiChatUtil.translateColorCodes(rawMessage); - String approximated = MultiChatUtil.approximateRGBColourCodes(translated); + String approximated = MultiChatUtil.approximateRGBColorCodes(translated); assertEquals("Translated RGB colour codes should be approximated to nearest minecraft equivalent", "§r§aHello §kthere! §6§lthis §ois §ma §nmessage! §7RGB §7too§7!", approximated); - String simpleTranslated = MultiChatUtil.translateColourCodes(rawMessage, TranslateMode.SIMPLE); + String simpleTranslated = MultiChatUtil.translateColorCodes(rawMessage, TranslateMode.SIMPLE); - String simpleApproximated = MultiChatUtil.approximateRGBColourCodes(simpleTranslated); + String simpleApproximated = MultiChatUtil.approximateRGBColorCodes(simpleTranslated); assertEquals("Non translated RGB colour codes should NOT be approximated to nearest minecraft equivalent", "§r§aHello §kthere! §6§lthis §ois §ma §nmessage! &#ABCDEFRGB &xAbCdEftoo&x§a§b§c§d§e§f!", @@ -134,25 +134,25 @@ public void shouldApproximateRGBColourCodesCorrectly() { assertEquals("JSON RGB colour codes should be approximated to nearest simple equivalent", "{\"text\":\"hello world\", \"color\":\"gray\"}", - MultiChatUtil.approximateRGBColourCodes(jsonMessage)); + MultiChatUtil.approximateRGBColorCodes(jsonMessage)); String jsonMessage2 = "{\"text\":\"hello world\", \"color\":\"#aBcDeF\"}"; assertEquals("JSON RGB colour codes should be approximated to nearest simple equivalent (test 2)", "{\"text\":\"hello world\", \"color\":\"gray\"}", - MultiChatUtil.approximateRGBColourCodes(jsonMessage2)); + MultiChatUtil.approximateRGBColorCodes(jsonMessage2)); String jsonMessage3 = "{\"text\":\"hello world\", \"color\":\"#abcdef\"}"; assertEquals("JSON RGB colour codes should be approximated to nearest simple equivalent (test 3)", "{\"text\":\"hello world\", \"color\":\"gray\"}", - MultiChatUtil.approximateRGBColourCodes(jsonMessage3)); + MultiChatUtil.approximateRGBColorCodes(jsonMessage3)); String jsonMessage4 = "{\"text\":\"hello world\", \"color\":\"gray\"}"; assertEquals("Non RGB JSON messages should not be appoximated by the method", jsonMessage4, - MultiChatUtil.approximateRGBColourCodes(jsonMessage4)); + MultiChatUtil.approximateRGBColorCodes(jsonMessage4)); } @@ -161,11 +161,11 @@ public void shouldNotChangeWithMultipleRGBApproximations() { String rawMessage = "&r&aHello &kthere! &6<his &ois &ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!"; - String translated = MultiChatUtil.translateColourCodes(rawMessage); + String translated = MultiChatUtil.translateColorCodes(rawMessage); - String approximated = MultiChatUtil.approximateRGBColourCodes(translated); + String approximated = MultiChatUtil.approximateRGBColorCodes(translated); - String approximated2 = MultiChatUtil.approximateRGBColourCodes(approximated); + String approximated2 = MultiChatUtil.approximateRGBColorCodes(approximated); assertEquals("Approximated RGB codes should remain the same after multiple parses of the approximator", approximated, @@ -206,67 +206,67 @@ public void shouldStripColourCodesCorrectly() { // ALL assertEquals("All codes should be stripped appropriately", "Hello there! this is a message! RGB too!", - MultiChatUtil.stripColourCodes(rawMessage, false)); + MultiChatUtil.stripColorCodes(rawMessage, false)); // ALL #2 assertEquals("All codes should be stripped appropriately", "Hello there! this is a message! RGB too!", - MultiChatUtil.stripColourCodes(rawMessage, false, TranslateMode.ALL)); + MultiChatUtil.stripColorCodes(rawMessage, false, TranslateMode.ALL)); // SIMPLE assertEquals("Simple codes should be stripped appropriately", "Hello there! this is a message! &#ABCDEFRGB &xAbCdEftoo&x!", - MultiChatUtil.stripColourCodes(rawMessage, false, TranslateMode.SIMPLE)); + MultiChatUtil.stripColorCodes(rawMessage, false, TranslateMode.SIMPLE)); // SIMPLE COLOUR assertEquals("Simple colour codes should be stripped appropriately", "&rHello &kthere! <his &ois &ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x!", - MultiChatUtil.stripColourCodes(rawMessage, false, TranslateMode.COLOUR_SIMPLE)); + MultiChatUtil.stripColorCodes(rawMessage, false, TranslateMode.COLOUR_SIMPLE)); // ALL COLOUR assertEquals("All colour codes should be stripped appropriately", "Hello &kthere! <his &ois &ma &nmessage! RGB too!", - MultiChatUtil.stripColourCodes(rawMessage, false, TranslateMode.COLOUR_ALL)); + MultiChatUtil.stripColorCodes(rawMessage, false, TranslateMode.COLOUR_ALL)); // FORMAT UNDERLINE assertEquals("Underline codes should be stripped appropriately", "&r&aHello &kthere! &6<his &ois &ma message! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!", - MultiChatUtil.stripColourCodes(rawMessage, false, TranslateMode.FORMAT_UNDERLINE)); + MultiChatUtil.stripColorCodes(rawMessage, false, TranslateMode.FORMAT_UNDERLINE)); // FORMAT ITALIC assertEquals("Italic codes should be stripped appropriately", "&r&aHello &kthere! &6<his is &ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!", - MultiChatUtil.stripColourCodes(rawMessage, false, TranslateMode.FORMAT_ITALIC)); + MultiChatUtil.stripColorCodes(rawMessage, false, TranslateMode.FORMAT_ITALIC)); // FORMAT BOLD assertEquals("Bold codes should be stripped appropriately", "&r&aHello &kthere! &6this &ois &ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!", - MultiChatUtil.stripColourCodes(rawMessage, false, TranslateMode.FORMAT_BOLD)); + MultiChatUtil.stripColorCodes(rawMessage, false, TranslateMode.FORMAT_BOLD)); // FORMAT STRIKE assertEquals("Strike codes should be stripped appropriately", "&r&aHello &kthere! &6<his &ois a &nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!", - MultiChatUtil.stripColourCodes(rawMessage, false, TranslateMode.FORMAT_STRIKE)); + MultiChatUtil.stripColorCodes(rawMessage, false, TranslateMode.FORMAT_STRIKE)); // FORMAT OBFUSCATED assertEquals("Obfuscation codes should be stripped appropriately", "&r&aHello there! &6<his &ois &ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!", - MultiChatUtil.stripColourCodes(rawMessage, false, TranslateMode.FORMAT_OBFUSCATED)); + MultiChatUtil.stripColorCodes(rawMessage, false, TranslateMode.FORMAT_OBFUSCATED)); // FORMAT RESET assertEquals("Reset codes should be stripped appropriately", "&aHello &kthere! &6<his &ois &ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!", - MultiChatUtil.stripColourCodes(rawMessage, false, TranslateMode.FORMAT_RESET)); + MultiChatUtil.stripColorCodes(rawMessage, false, TranslateMode.FORMAT_RESET)); // FORMAT ALL assertEquals("All format codes should be stripped appropriately", "&aHello there! &6this is a message! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!", - MultiChatUtil.stripColourCodes(rawMessage, false, TranslateMode.FORMAT_ALL)); + MultiChatUtil.stripColorCodes(rawMessage, false, TranslateMode.FORMAT_ALL)); // X assertEquals("All X codes should be stripped appropriately", "&r&aHello &kthere! &6<his &ois &ma &nmessage! &r&a&b&c&d&e&fRGB &r&a&b&c&d&e&ftoo&r&a&b&c&d&e&f!", - MultiChatUtil.stripColourCodes(rawMessage, false, TranslateMode.X)); + MultiChatUtil.stripColorCodes(rawMessage, false, TranslateMode.X)); } From 15041d72bc7a8c1e088ecca275a2f0e06473a3c4 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Tue, 4 Aug 2020 13:56:40 +0100 Subject: [PATCH 121/188] Colour -> Color in JUNIT and TranslateMode --- .../multichat/common/TranslateMode.java | 6 +-- .../local/common/commands/NickCommand.java | 2 +- .../multichat/junit/MultiChatUtilTest.java | 40 +++++++++---------- 3 files changed, 24 insertions(+), 24 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/common/TranslateMode.java b/multichat/src/main/java/xyz/olivermartin/multichat/common/TranslateMode.java index d942a701..7e6ab2dc 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/common/TranslateMode.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/common/TranslateMode.java @@ -5,8 +5,8 @@ public enum TranslateMode { - COLOUR_SIMPLE ("(?i)%1$s([a-f,0-9])"), - COLOUR_ALL ("(?i)%1$s([a-f,0-9,r,x])"), + COLOR_SIMPLE ("(?i)%1$s([a-f,0-9])"), + COLOR_ALL ("(?i)%1$s([a-f,0-9,r,x])"), FORMAT_UNDERLINE ("(?i)%1$s([n])"), FORMAT_ITALIC ("(?i)%1$s([o])"), FORMAT_BOLD ("(?i)%1$s([l])"), @@ -30,7 +30,7 @@ private TranslateMode(String regex) { } public static boolean isRGB(TranslateMode mode) { - return mode.equals(ALL) || mode.equals(X) || mode.equals(COLOUR_ALL); + return mode.equals(ALL) || mode.equals(X) || mode.equals(COLOR_ALL); } public Pattern getOriginPattern() { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/commands/NickCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/commands/NickCommand.java index dacd1acd..623c665c 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/commands/NickCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/commands/NickCommand.java @@ -83,7 +83,7 @@ private boolean checkPermissions(UUID targetUniqueId, MultiChatLocalPlayer sende return false; } - if (MultiChatUtil.containsColorCodes(proposedNick, false, TranslateMode.COLOUR_SIMPLE) && !(sender.hasPermission("multichatlocal.nick.color") || sender.hasPermission("multichatlocal.nick.colour")||sender.hasPermission("multichatlocal.nick.color.simple") || sender.hasPermission("multichatlocal.nick.colour.simple") ||sender.hasPermission("multichatlocal.nick.color.rgb") || sender.hasPermission("multichatlocal.nick.colour.rgb"))) { + if (MultiChatUtil.containsColorCodes(proposedNick, false, TranslateMode.COLOR_SIMPLE) && !(sender.hasPermission("multichatlocal.nick.color") || sender.hasPermission("multichatlocal.nick.colour")||sender.hasPermission("multichatlocal.nick.color.simple") || sender.hasPermission("multichatlocal.nick.colour.simple") ||sender.hasPermission("multichatlocal.nick.color.rgb") || sender.hasPermission("multichatlocal.nick.colour.rgb"))) { sender.sendBadMessage("You do not have permission to use nicknames with simple color codes!"); return false; } diff --git a/multichat/src/test/java/xyz/olivermartin/multichat/junit/MultiChatUtilTest.java b/multichat/src/test/java/xyz/olivermartin/multichat/junit/MultiChatUtilTest.java index a2fdb640..f051a5a2 100644 --- a/multichat/src/test/java/xyz/olivermartin/multichat/junit/MultiChatUtilTest.java +++ b/multichat/src/test/java/xyz/olivermartin/multichat/junit/MultiChatUtilTest.java @@ -23,7 +23,7 @@ public static void main(String[] args) { } @Test - public void shouldTranslateColourCodesCorrectly() { + public void shouldTranslateColorCodesCorrectly() { String rawMessage = "&r&aHello &kthere! &6<his &ois &ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!"; @@ -42,15 +42,15 @@ public void shouldTranslateColourCodesCorrectly() { "§r§aHello §kthere! §6§lthis §ois §ma §nmessage! &#ABCDEFRGB &xAbCdEftoo&x§a§b§c§d§e§f!", MultiChatUtil.translateColorCodes(rawMessage, TranslateMode.SIMPLE)); - // SIMPLE COLOUR - assertEquals("Simple colour codes should be translated appropriately", + // SIMPLE COLOR + assertEquals("Simple color codes should be translated appropriately", "&r§aHello &kthere! §6<his &ois &ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x§a§b§c§d§e§f!", - MultiChatUtil.translateColorCodes(rawMessage, TranslateMode.COLOUR_SIMPLE)); + MultiChatUtil.translateColorCodes(rawMessage, TranslateMode.COLOR_SIMPLE)); - // ALL COLOUR - assertEquals("All colour codes should be translated appropriately", + // ALL COLOR + assertEquals("All color codes should be translated appropriately", "§r§aHello &kthere! §6<his &ois &ma &nmessage! §r§x§a§b§c§d§e§fRGB §r§x§a§b§c§d§e§ftoo§r§x§a§b§c§d§e§f!", - MultiChatUtil.translateColorCodes(rawMessage, TranslateMode.COLOUR_ALL)); + MultiChatUtil.translateColorCodes(rawMessage, TranslateMode.COLOR_ALL)); // FORMAT UNDERLINE assertEquals("Underline codes should be translated appropriately", @@ -110,7 +110,7 @@ public void shouldNotChangeWithMultipleTranslations() { } @Test - public void shouldApproximateRGBColourCodesCorrectly() { + public void shouldApproximateRGBColorCodesCorrectly() { String rawMessage = "&r&aHello &kthere! &6<his &ois &ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!"; @@ -118,7 +118,7 @@ public void shouldApproximateRGBColourCodesCorrectly() { String approximated = MultiChatUtil.approximateRGBColorCodes(translated); - assertEquals("Translated RGB colour codes should be approximated to nearest minecraft equivalent", + assertEquals("Translated RGB color codes should be approximated to nearest minecraft equivalent", "§r§aHello §kthere! §6§lthis §ois §ma §nmessage! §7RGB §7too§7!", approximated); @@ -126,25 +126,25 @@ public void shouldApproximateRGBColourCodesCorrectly() { String simpleApproximated = MultiChatUtil.approximateRGBColorCodes(simpleTranslated); - assertEquals("Non translated RGB colour codes should NOT be approximated to nearest minecraft equivalent", + assertEquals("Non translated RGB color codes should NOT be approximated to nearest minecraft equivalent", "§r§aHello §kthere! §6§lthis §ois §ma §nmessage! &#ABCDEFRGB &xAbCdEftoo&x§a§b§c§d§e§f!", simpleApproximated); String jsonMessage = "{\"text\":\"hello world\", \"color\":\"#ABCDEF\"}"; - assertEquals("JSON RGB colour codes should be approximated to nearest simple equivalent", + assertEquals("JSON RGB color codes should be approximated to nearest simple equivalent", "{\"text\":\"hello world\", \"color\":\"gray\"}", MultiChatUtil.approximateRGBColorCodes(jsonMessage)); String jsonMessage2 = "{\"text\":\"hello world\", \"color\":\"#aBcDeF\"}"; - assertEquals("JSON RGB colour codes should be approximated to nearest simple equivalent (test 2)", + assertEquals("JSON RGB color codes should be approximated to nearest simple equivalent (test 2)", "{\"text\":\"hello world\", \"color\":\"gray\"}", MultiChatUtil.approximateRGBColorCodes(jsonMessage2)); String jsonMessage3 = "{\"text\":\"hello world\", \"color\":\"#abcdef\"}"; - assertEquals("JSON RGB colour codes should be approximated to nearest simple equivalent (test 3)", + assertEquals("JSON RGB color codes should be approximated to nearest simple equivalent (test 3)", "{\"text\":\"hello world\", \"color\":\"gray\"}", MultiChatUtil.approximateRGBColorCodes(jsonMessage3)); @@ -199,7 +199,7 @@ public void shouldGetMessageFromArgsCorrectly() { } @Test - public void shouldStripColourCodesCorrectly() { + public void shouldStripColorCodesCorrectly() { String rawMessage = "&r&aHello &kthere! &6<his &ois &ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x&a&b&c&d&e&f!"; @@ -218,15 +218,15 @@ public void shouldStripColourCodesCorrectly() { "Hello there! this is a message! &#ABCDEFRGB &xAbCdEftoo&x!", MultiChatUtil.stripColorCodes(rawMessage, false, TranslateMode.SIMPLE)); - // SIMPLE COLOUR - assertEquals("Simple colour codes should be stripped appropriately", + // SIMPLE COLOR + assertEquals("Simple color codes should be stripped appropriately", "&rHello &kthere! <his &ois &ma &nmessage! &#ABCDEFRGB &xAbCdEftoo&x!", - MultiChatUtil.stripColorCodes(rawMessage, false, TranslateMode.COLOUR_SIMPLE)); + MultiChatUtil.stripColorCodes(rawMessage, false, TranslateMode.COLOR_SIMPLE)); - // ALL COLOUR - assertEquals("All colour codes should be stripped appropriately", + // ALL COLOR + assertEquals("All color codes should be stripped appropriately", "Hello &kthere! <his &ois &ma &nmessage! RGB too!", - MultiChatUtil.stripColorCodes(rawMessage, false, TranslateMode.COLOUR_ALL)); + MultiChatUtil.stripColorCodes(rawMessage, false, TranslateMode.COLOR_ALL)); // FORMAT UNDERLINE assertEquals("Underline codes should be stripped appropriately", From 28eae985a72e8e5dcf99e48d803d07aaeb897418 Mon Sep 17 00:00:00 2001 From: Gadse Date: Tue, 4 Aug 2020 15:27:28 +0200 Subject: [PATCH 122/188] GCCommand refactor --- .../multichat/bungee/commands/GCCommand.java | 238 ++++++++---------- 1 file changed, 108 insertions(+), 130 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GCCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GCCommand.java index e07e095d..38ebd412 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GCCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GCCommand.java @@ -26,138 +26,116 @@ /** * Group Chat Messaging Command *

Allows players to send a message direct to a group chat or toggle group chats

- * - * @author Oliver Martin (Revilo410) * + * @author Oliver Martin (Revilo410) */ public class GCCommand extends Command { - public GCCommand() { - super("mcgc", "multichat.group", (String[]) ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("gc").toArray(new String[0])); - } - - public void execute(CommandSender sender, String[] args) { - - ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); - - if (args.length < 1) { - - if ((sender instanceof ProxiedPlayer)) { - - ProxiedPlayer player = (ProxiedPlayer)sender; - boolean toggleresult = Events.toggleGC(player.getUniqueId()); - - if (toggleresult == true) { - MessageManager.sendMessage(sender, "command_gc_toggle_on"); - } else { - MessageManager.sendMessage(sender, "command_gc_toggle_off"); - } - - } else { - - MessageManager.sendMessage(sender, "command_gc_only_players_toggle"); - } - - } else if ((sender instanceof ProxiedPlayer)) { - - ProxiedPlayer player = (ProxiedPlayer)sender; - - if (ds.getViewedChats().get(player.getUniqueId()) != null) { - - String groupName = (String)ds.getViewedChats().get(player.getUniqueId()); - - if (ds.getGroupChats().containsKey(groupName)) { - - TGroupChatInfo groupInfo = (TGroupChatInfo) ds.getGroupChats().get(groupName); - - String message = MultiChatUtil.getMessageFromArgs(args); - - String playerName = sender.getName(); - - if ((groupInfo.getFormal() == true) - && (groupInfo.getAdmins().contains(player.getUniqueId()))) { - playerName = "&o" + playerName; - } - - sendMessage(message, playerName, groupInfo); - - } else { - - MessageManager.sendMessage(sender, "command_gc_no_longer_exists"); - } - - } else { - MessageManager.sendMessage(sender, "command_gc_no_chat_selected"); - } - - } else { - MessageManager.sendMessage(sender, "command_gc_only_players_speak"); - } - } - - public static void sendMessage(String originalMessage, String playerName, TGroupChatInfo groupInfo) { - - ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); - ChatManipulation chatfix = new ChatManipulation(); - - ProxiedPlayer potentialPlayer = ProxyServer.getInstance().getPlayer(playerName); - if (potentialPlayer != null) { - if (ChatControl.isMuted(potentialPlayer.getUniqueId(), "group_chats")) { - MessageManager.sendMessage(potentialPlayer, "mute_cannot_send_message"); - return; - } - - if (ChatControl.handleSpam(potentialPlayer, originalMessage, "group_chats")) { - return; - } - } - - Optional crm; - - crm = ChatControl.applyChatRules(originalMessage, "group_chats", playerName); - - if (crm.isPresent()) { - originalMessage = crm.get(); - } else { - return; - } - - String messageFormat = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString(ConfigValues.Config.GroupChat.FORMAT); - String message = chatfix.replaceGroupChatVars(messageFormat, playerName, originalMessage, groupInfo.getName()); - - message = MultiChatUtil.translateColourCodes(message); - String originalTranslated = MultiChatUtil.translateColourCodes(originalMessage); - - for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { - - if (((groupInfo.existsViewer(onlineplayer.getUniqueId())) && (onlineplayer.hasPermission("multichat.group"))) || ((ds.getAllSpy().contains(onlineplayer.getUniqueId())) && (onlineplayer.hasPermission("multichat.staff.spy")))) { - - if (potentialPlayer != null) { - if (!ChatControl.ignores(potentialPlayer.getUniqueId(), onlineplayer.getUniqueId(), "group_chats")) { - if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { - onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(MultiChatUtil.approximateRGBColourCodes(message), "%MESSAGE%", MultiChatUtil.approximateRGBColourCodes(originalTranslated))); - } else { - onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(message, "%MESSAGE%", originalTranslated)); - } - } else { - ChatControl.sendIgnoreNotifications(onlineplayer, potentialPlayer, "group_chats"); - } - } else { - if (MultiChat.legacyServers.contains(onlineplayer.getServer().getInfo().getName())) { - onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(MultiChatUtil.approximateRGBColourCodes(message), "%MESSAGE%", MultiChatUtil.approximateRGBColourCodes(originalTranslated))); - } else { - onlineplayer.sendMessage(ProxyJsonUtils.parseMessage(message, "%MESSAGE%", originalTranslated)); - } - } - - } - - } - - BaseComponent[] finalMessage = ProxyJsonUtils.parseMessage(MultiChatUtil.approximateRGBColourCodes(message), "%MESSAGE%", MultiChatUtil.approximateRGBColourCodes(originalTranslated)); - String consoleMessage = ""; - for (BaseComponent bc : finalMessage) consoleMessage += bc.toLegacyText(); - ConsoleManager.logGroupChat(consoleMessage); - - } + public GCCommand() { + super("mcgc", "multichat.group", ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("gc").toArray(new String[0])); + } + + public void execute(CommandSender sender, String[] args) { + if (!(sender instanceof ProxiedPlayer)) { + MessageManager.sendMessage(sender, args.length == 0 + ? "command_gc_only_players_toggle" + : "command_gc_only_players_speak" + ); + return; + } + + ProxiedPlayer proxiedPlayer = (ProxiedPlayer) sender; + if (args.length == 0) { + boolean toggleResult = Events.toggleGC(proxiedPlayer.getUniqueId()); + MessageManager.sendMessage(sender, "command_gc_toggle_" + (toggleResult ? "on" : "off")); + return; + } + + ProxyDataStore proxyDataStore = MultiChatProxy.getInstance().getDataStore(); + String viewedChat = proxyDataStore.getViewedChats().get(proxiedPlayer.getUniqueId()); + if (viewedChat == null) { + MessageManager.sendMessage(sender, "command_gc_no_chat_selected"); + return; + } + + TGroupChatInfo groupChatInfo = proxyDataStore.getGroupChats().get(viewedChat); + if (groupChatInfo == null) { + MessageManager.sendMessage(sender, "command_gc_no_longer_exists"); + return; + } + + String playerName = sender.getName(); + + if (groupChatInfo.getFormal() && groupChatInfo.getAdmins().contains(proxiedPlayer.getUniqueId())) { + playerName = "&o" + playerName; + } + + sendMessage(String.join(" ", args), playerName, groupChatInfo); + } + + public static void sendMessage(String originalMessage, String playerName, TGroupChatInfo groupInfo) { + ProxyDataStore proxyDataStore = MultiChatProxy.getInstance().getDataStore(); + ChatManipulation manipulation = new ChatManipulation(); + + ProxiedPlayer proxiedPlayer = ProxyServer.getInstance().getPlayer(playerName); + if (proxiedPlayer != null) { + if (ChatControl.isMuted(proxiedPlayer.getUniqueId(), "group_chats")) { + MessageManager.sendMessage(proxiedPlayer, "mute_cannot_send_message"); + return; + } + + if (ChatControl.handleSpam(proxiedPlayer, originalMessage, "group_chats")) + return; + } + + Optional optionalChatRules; + + optionalChatRules = ChatControl.applyChatRules(originalMessage, "group_chats", playerName); + + if (!optionalChatRules.isPresent()) + return; + originalMessage = optionalChatRules.get(); + + String messageFormat = ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getString(ConfigValues.Config.GroupChat.FORMAT); + String translatedMessage = MultiChatUtil.translateColourCodes( + manipulation.replaceGroupChatVars(messageFormat, playerName, originalMessage, groupInfo.getName()) + ); + String translatedOriginalMessage = MultiChatUtil.translateColourCodes(originalMessage); + + BaseComponent[] modernMessage = ProxyJsonUtils.parseMessage(translatedMessage, + "%MESSAGE%", + translatedOriginalMessage + ); + + BaseComponent[] legacyMessage = ProxyJsonUtils.parseMessage( + MultiChatUtil.approximateRGBColourCodes(translatedMessage), + "%MESSAGE%", + MultiChatUtil.approximateRGBColourCodes(translatedOriginalMessage) + ); + + ProxyServer.getInstance().getPlayers().stream() + .filter(target -> target.getServer() != null + && (groupInfo.existsViewer(target.getUniqueId()) && target.hasPermission("multichat.group")) + || proxyDataStore.getAllSpy().contains(target.getUniqueId()) + ) + .forEach(target -> { + if (proxiedPlayer != null + && ChatControl.ignores(proxiedPlayer.getUniqueId(), target.getUniqueId(), "group_chats")) { + ChatControl.sendIgnoreNotifications(target, proxiedPlayer, "group_chats"); + return; + } + + // TODO: Move legacy check inside parsing at some point + if (MultiChat.legacyServers.contains(target.getServer().getInfo().getName())) { + target.sendMessage(legacyMessage); + return; + } + target.sendMessage(modernMessage); + }); + + StringBuilder consoleMessage = new StringBuilder(); + for (BaseComponent bc : legacyMessage) + consoleMessage.append(bc.toLegacyText()); + ConsoleManager.logGroupChat(consoleMessage.toString()); + } } From 364a210ba86177538f8754321f848d1fe310dfca Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Tue, 4 Aug 2020 15:25:58 +0100 Subject: [PATCH 123/188] Refactored some local chat handling code to use newer translation method --- .../local/common/LocalChatManager.java | 6 ++--- .../local/common/LocalMetaManager.java | 15 ++++++----- .../local/common/LocalPlaceholderManager.java | 21 --------------- .../chat/LocalChatListenerHighest.java | 6 ++--- .../chat/LocalChatListenerLowest.java | 7 ++++- .../local/spigot/LocalSpigotMetaManager.java | 27 +++---------------- .../spigot/LocalSpigotPlaceholderManager.java | 2 +- .../local/sponge/LocalSpongeMetaManager.java | 10 +++---- .../sponge/LocalSpongePlaceholderManager.java | 6 ++--- 9 files changed, 32 insertions(+), 68 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalChatManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalChatManager.java index ce91706f..b10e85e3 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalChatManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalChatManager.java @@ -283,8 +283,8 @@ public boolean canChatInRGBColour(UUID uuid) { } - public String translateColourCodes(String message, boolean rgb) { - + public String translateColorCodes(String message, boolean rgb) { + if (rgb) { message = MultiChatUtil.translateColorCodes(message); } else { @@ -321,7 +321,7 @@ public String processMultiChatConfigPlaceholders(MultiChatLocalPlayer player, St value = processExternalPlaceholders(player, value); MultiChatLocal.getInstance().getConsoleLogger().debug("[LocalChatManager] Processed with external placeholders to get: " + value); - value = translateColourCodes(value, true); + value = translateColorCodes(value, true); MultiChatLocal.getInstance().getConsoleLogger().debug("[LocalChatManager] Translated colour codes to get: " + value); MultiChatLocal.getInstance().getConsoleLogger().debug("[LocalChatManager] MESSAGE = : " + message); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalMetaManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalMetaManager.java index c7e525cb..a6829339 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalMetaManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalMetaManager.java @@ -5,37 +5,38 @@ public abstract class LocalMetaManager { public LocalMetaManager() { /* EMPTY */ } - + public String getNick(UUID uuid) { - return MultiChatLocal.getInstance().getNameManager().getCurrentName(uuid); + return MultiChatLocal.getInstance().getChatManager().translateColorCodes( + MultiChatLocal.getInstance().getNameManager().getCurrentName(uuid), true); } - + /** * Get the prefix of an online player * @param uuid * @return The prefix if they are online, or blank if they are not */ public abstract String getPrefix(UUID uuid); - + /** * Get the suffix of an online player * @param uuid * @return The suffix if they are online, or blank if they are not */ public abstract String getSuffix(UUID uuid); - + /** * Get the world of an online player * @param uuid * @return The world if they are online, or blank if they are not */ public abstract String getWorld(UUID uuid); - + /** * Get the display name of an online player * @param uuid * @return The display name if they are online, or blank if they are not */ public abstract String getDisplayName(UUID uuid); - + } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalPlaceholderManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalPlaceholderManager.java index 70c6c0eb..6c09b774 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalPlaceholderManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalPlaceholderManager.java @@ -34,35 +34,14 @@ public MultiChatLocalPlatform getPlatform() { */ public String processMultiChatPlaceholders(UUID uuid, String message) { - LocalConsoleLogger logger = MultiChatLocal.getInstance().getConsoleLogger(); - - logger.debug("---------------------------"); - - logger.debug("Processing placeholders..."); - - logger.debug("INPUT FORMAT = " + message); - logger.debug("INPUT FORMAT (visualised) = " + message.replace("&", "(#d)").replace("§", "(#e)")); - - //logger.debug("%NAME% = " + MultiChatLocal.getInstance().getNameManager().getName(uuid)); if (message.contains("%NAME%")) message = message.replace("%NAME%", MultiChatLocal.getInstance().getNameManager().getName(uuid)); - //logger.debug("%NICK% = " + MultiChatLocal.getInstance().getMetaManager().getNick(uuid)); if (message.contains("%NICK%")) message = message.replace("%NICK%", MultiChatLocal.getInstance().getMetaManager().getNick(uuid)); - //logger.debug("%DISPLAYNAME% = " + MultiChatLocal.getInstance().getMetaManager().getDisplayName(uuid)); if (message.contains("%DISPLAYNAME%")) message = message.replace("%DISPLAYNAME%", MultiChatLocal.getInstance().getMetaManager().getDisplayName(uuid)); - //logger.debug("%PREFIX% = " + MultiChatLocal.getInstance().getMetaManager().getPrefix(uuid)); if (message.contains("%PREFIX%")) message = message.replace("%PREFIX%", MultiChatLocal.getInstance().getMetaManager().getPrefix(uuid)); - //logger.debug("%SUFFIX% = " + MultiChatLocal.getInstance().getMetaManager().getSuffix(uuid)); if (message.contains("%SUFFIX%")) message = message.replace("%SUFFIX%", MultiChatLocal.getInstance().getMetaManager().getSuffix(uuid)); - //logger.debug("%WORLD% = " + MultiChatLocal.getInstance().getMetaManager().getWorld(uuid)); if (message.contains("%WORLD%")) message = message.replace("%WORLD%", MultiChatLocal.getInstance().getMetaManager().getWorld(uuid)); - //logger.debug("%SERVER% = " + MultiChatLocal.getInstance().getConfigManager().getLocalConfig().getServerName()); if (message.contains("%SERVER%")) message = message.replace("%SERVER%", MultiChatLocal.getInstance().getConfigManager().getLocalConfig().getServerName()); - logger.debug("Final Message = " + message); - logger.debug("Final Message (visualised) = " + message.replace("&", "(#d)").replace("§", "(#e)")); - - logger.debug("---------------------------"); - return message; } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/LocalChatListenerHighest.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/LocalChatListenerHighest.java index 3e8a587a..b2050930 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/LocalChatListenerHighest.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/LocalChatListenerHighest.java @@ -19,10 +19,10 @@ public void handleChat(MultiChatLocalPlayerChatEvent event) { LocalChatManager chatManager = MultiChatLocal.getInstance().getChatManager(); if (chatManager.canChatInRGBColour(event.getPlayer().getUniqueId())) { - event.setMessage(chatManager.translateColourCodes(event.getMessage(),true)); + event.setMessage(chatManager.translateColorCodes(event.getMessage(),true)); MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@HIGHEST - Translated their message to include the colours (RGB) and set back in the event as: " + event.getMessage()); } else if (chatManager.canChatInSimpleColour(event.getPlayer().getUniqueId())) { - event.setMessage(chatManager.translateColourCodes(event.getMessage(),false)); + event.setMessage(chatManager.translateColorCodes(event.getMessage(),false)); MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@HIGHEST - Translated their message to include the colours (SIMPLE ONLY) and set back in the event as: " + event.getMessage()); } @@ -105,7 +105,7 @@ public void handleChat(MultiChatLocalPlayerChatEvent event) { MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@HIGHEST - Did some magic to get..." + format); - event.setFormat(chatManager.translateColourCodes(format, true)); + event.setFormat(chatManager.translateColorCodes(format, true)); MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@HIGHEST - FORMAT HAS BEEN SET AS: " + event.getFormat()); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/LocalChatListenerLowest.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/LocalChatListenerLowest.java index ff5b8809..76b8542f 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/LocalChatListenerLowest.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/LocalChatListenerLowest.java @@ -1,5 +1,6 @@ package xyz.olivermartin.multichat.local.common.listeners.chat; +import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.local.common.LocalChatManager; import xyz.olivermartin.multichat.local.common.MultiChatLocal; import xyz.olivermartin.multichat.local.common.MultiChatLocalPlatform; @@ -44,15 +45,18 @@ public void handleChat(MultiChatLocalPlayerChatEvent event) { format = chatManager.getChannelFormat(channel); MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@LOWEST - Got the format for this channel as:" + format); + MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@LOWEST - Visualised chat format:" + MultiChatUtil.visualiseColorCodes(format)); // Build chat format format = MultiChatLocal.getInstance().getPlaceholderManager().buildChatFormat(player.getUniqueId(), format); MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@LOWEST - Built to become: " + format); + MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@LOWEST - Visualised chat format:" + MultiChatUtil.visualiseColorCodes(format)); format = chatManager.processExternalPlaceholders(player, format); MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@LOWEST - Processing external placeholders to become: " + format); + MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@LOWEST - Visualised chat format:" + MultiChatUtil.visualiseColorCodes(format)); if (MultiChatLocal.getInstance().getPlatform() == MultiChatLocalPlatform.SPIGOT) { // Handle Spigot displayname formatting etc. @@ -66,8 +70,9 @@ public void handleChat(MultiChatLocalPlayerChatEvent event) { } MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@LOWEST - Did some magic formatting to end up as: " + format); + MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@LOWEST - Visualised chat format:" + MultiChatUtil.visualiseColorCodes(format)); - event.setFormat(chatManager.translateColourCodes(format, true)); + event.setFormat(format); MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@LOWEST - Set the format of the message. Finished processing at the lowest level!"); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotMetaManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotMetaManager.java index dc258570..0798ab29 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotMetaManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotMetaManager.java @@ -7,7 +7,6 @@ import org.bukkit.entity.Player; import net.milkbowl.vault.chat.Chat; -import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.local.common.LocalConsoleLogger; import xyz.olivermartin.multichat.local.common.LocalMetaManager; import xyz.olivermartin.multichat.local.common.MultiChatLocal; @@ -28,10 +27,7 @@ public String getPrefix(UUID uuid) { String prefix = vaultChat.getPlayerPrefix(Bukkit.getServer().getPlayer(uuid)); // Translate prefix - prefix = MultiChatUtil.translateColorCodes(prefix); - - // Deal with legacy servers - if (MultiChatLocal.getInstance().getDataStore().isLegacy()) prefix = MultiChatUtil.approximateRGBColorCodes(prefix); + prefix = MultiChatLocal.getInstance().getChatManager().translateColorCodes(prefix, true); return prefix; @@ -54,10 +50,7 @@ public String getSuffix(UUID uuid) { String suffix = vaultChat.getPlayerSuffix(Bukkit.getServer().getPlayer(uuid)); // Translate suffix - suffix = MultiChatUtil.translateColorCodes(suffix); - - // Deal with legacy servers - if (MultiChatLocal.getInstance().getDataStore().isLegacy()) suffix = MultiChatUtil.approximateRGBColorCodes(suffix); + suffix = MultiChatLocal.getInstance().getChatManager().translateColorCodes(suffix, true); return suffix; @@ -94,26 +87,14 @@ public String getDisplayName(UUID uuid) { String displayNameFormat = MultiChatLocal.getInstance().getDataStore().getDisplayNameFormatLastVal(); - logger.debug("[LocalSpigotMetaManager] Format = " + displayNameFormat); - logger.debug("[LocalSpigotMetaManager] Format (using & only) = " + displayNameFormat.replaceAll("(?i)§(?=[a-f,0-9,k-o,r,x])", "&")); - // TODO This stuff could be refactored as it is duplicated between Spigot and Sponge displayNameFormat = displayNameFormat.replaceAll("%NICK%", getNick(uuid)); displayNameFormat = displayNameFormat.replaceAll("%NAME%", player.getName()); displayNameFormat = displayNameFormat.replaceAll("%PREFIX%", getPrefix(uuid)); displayNameFormat = displayNameFormat.replaceAll("%SUFFIX%", getSuffix(uuid)); - logger.debug("[LocalSpigotMetaManager] Format with placeholders = " + displayNameFormat); - logger.debug("[LocalSpigotMetaManager] Format with placeholders (using & only) = " + displayNameFormat.replaceAll("(?i)§(?=[a-f,0-9,k-o,r,x])", "&")); - - displayNameFormat = MultiChatUtil.translateColorCodes(displayNameFormat); - - logger.debug("[LocalSpigotMetaManager] FINAL = " + displayNameFormat); - logger.debug("[LocalSpigotMetaManager] FINAL (using & only) = " + displayNameFormat.replaceAll("(?i)§(?=[a-f,0-9,k-o,r,x])", "&")); - - // Handle legacy servers - if (MultiChatLocal.getInstance().getDataStore().isLegacy()) - displayNameFormat = MultiChatUtil.approximateRGBColorCodes(displayNameFormat); + // Translate displayname + displayNameFormat = MultiChatLocal.getInstance().getChatManager().translateColorCodes(displayNameFormat, true); player.setDisplayName(displayNameFormat); player.setPlayerListName(displayNameFormat); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotPlaceholderManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotPlaceholderManager.java index ad173c0b..47c85172 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotPlaceholderManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotPlaceholderManager.java @@ -22,7 +22,7 @@ public String buildChatFormat(UUID uuid, String format) { format = processMultiChatPlaceholders(uuid, format); // Translate codes - format = MultiChatLocal.getInstance().getChatManager().translateColourCodes(format, true); + format = MultiChatLocal.getInstance().getChatManager().translateColorCodes(format, true); // Adds the message on the end, respecting any changes from other plugins. return format + "%2$s"; // TODO This bit should not be added here, should be added in a different part (As sponge does not add here) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongeMetaManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongeMetaManager.java index d6a349e1..902023a4 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongeMetaManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongeMetaManager.java @@ -8,7 +8,6 @@ import org.spongepowered.api.entity.living.player.Player; import org.spongepowered.api.text.Text; -import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.local.common.LocalMetaManager; import xyz.olivermartin.multichat.local.common.MultiChatLocal; @@ -24,7 +23,7 @@ public String getPrefix(UUID uuid) { Player player = opPlayer.get(); if (player.getOption("prefix").isPresent()) { - return MultiChatUtil.approximateRGBColorCodes(MultiChatUtil.translateColorCodes(player.getOption("prefix").get())); + return MultiChatLocal.getInstance().getChatManager().translateColorCodes(player.getOption("prefix").get(), true); } else { return ""; } @@ -45,7 +44,7 @@ public String getSuffix(UUID uuid) { Player player = opPlayer.get(); if (player.getOption("suffix").isPresent()) { - return MultiChatUtil.approximateRGBColorCodes(MultiChatUtil.translateColorCodes(player.getOption("suffix").get())); + return MultiChatLocal.getInstance().getChatManager().translateColorCodes(player.getOption("suffix").get(), true); } else { return ""; } @@ -92,8 +91,9 @@ public String getDisplayName(UUID uuid) { displayNameFormat = displayNameFormat.replaceAll("%NAME%", player.getName()); displayNameFormat = displayNameFormat.replaceAll("%PREFIX%", getPrefix(uuid)); displayNameFormat = displayNameFormat.replaceAll("%SUFFIX%", getSuffix(uuid)); - displayNameFormat = MultiChatUtil.translateColorCodes(displayNameFormat); - displayNameFormat = MultiChatUtil.approximateRGBColorCodes(displayNameFormat); + + // Translate codes + displayNameFormat = MultiChatLocal.getInstance().getChatManager().translateColorCodes(displayNameFormat, true); // TODO Sponge doesn't seem to like this... So we tend to work around it by sending back our original string player.offer(Keys.DISPLAY_NAME,Text.of(displayNameFormat)); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongePlaceholderManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongePlaceholderManager.java index 1f92578b..0c47874a 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongePlaceholderManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongePlaceholderManager.java @@ -2,7 +2,6 @@ import java.util.UUID; -import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.local.common.LocalPlaceholderManager; import xyz.olivermartin.multichat.local.common.MultiChatLocal; import xyz.olivermartin.multichat.local.common.MultiChatLocalPlatform; @@ -15,9 +14,8 @@ public LocalSpongePlaceholderManager() { @Override public String buildChatFormat(UUID uuid, String format) { - format = processMultiChatPlaceholders(uuid, format);//.replaceAll("(?i)&(?=[a-f,0-9,k-o,r,x])", "§"); - format = MultiChatLocal.getInstance().getChatManager().translateColourCodes(format, true); - format = MultiChatUtil.approximateRGBColorCodes(format); + format = processMultiChatPlaceholders(uuid, format); + format = MultiChatLocal.getInstance().getChatManager().translateColorCodes(format, true); return format; } From 8a7c8f2172dc56c1446ea76b8006eed2668ddcc9 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Tue, 4 Aug 2020 15:58:32 +0100 Subject: [PATCH 124/188] Remove legacy comments --- .../chat/LocalChatListenerHighest.java | 17 ----------------- .../chat/LocalChatListenerMonitor.java | 6 ------ 2 files changed, 23 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/LocalChatListenerHighest.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/LocalChatListenerHighest.java index b2050930..f990ae5f 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/LocalChatListenerHighest.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/LocalChatListenerHighest.java @@ -49,23 +49,6 @@ public void handleChat(MultiChatLocalPlayerChatEvent event) { event.removeOtherPlayers(); - /*Optional opChannelObject = chatManager.getChannelObject(channel); - - if (opChannelObject.isPresent()) { - - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@HIGHEST - Do we have a channel object to match that name? Yes!"); - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@HIGHEST - Now we are attempting to remove ignored players from the recipient list of the message, and making sure only people who are meant to see the channel (as specified in the channel object), can see it!"); - - event.removeIgnoredPlayersAndNonChannelMembersFromRecipients(opChannelObject.get()); - - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@HIGHEST - And BAM! That was handled by the local platform implementation!"); - - } else { - - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@HIGHEST - We didn't find a channel object to match that name... Probably not good!"); - - }*/ - if (!chatManager.isGlobalChatServer() || channel.equalsIgnoreCase("local")) { MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@HIGHEST - We are speaking into local chat, so at this point we are returning! Bye!"); return; diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/LocalChatListenerMonitor.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/LocalChatListenerMonitor.java index b47f38de..664440a8 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/LocalChatListenerMonitor.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/LocalChatListenerMonitor.java @@ -31,12 +31,6 @@ public void handleChat(MultiChatLocalPlayerChatEvent event) { MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@MONITOR - The message isn't cancelled!"); - // IF ITS LOCAL CHAT WE CAN IGNORE IT - /*if (!chatManager.isGlobalChatServer() || channel.equalsIgnoreCase("local")) { - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@MONITOR - We are speaking into local chat, so at this point we are returning! Bye!"); - return; - }*/ - // IF WE ARE MANAGING GLOBAL CHAT THEN WE NEED TO MANAGE IT! MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@MONITOR - TIME TO FORWARD TO PROXY!"); From c64def1309d4eb07f93f96a8c8bd1de7fad97040 Mon Sep 17 00:00:00 2001 From: Gadse Date: Tue, 4 Aug 2020 20:07:52 +0200 Subject: [PATCH 125/188] GlobalCommand refactor --- .../bungee/commands/GlobalCommand.java | 169 ++++++++---------- 1 file changed, 79 insertions(+), 90 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java index 9e3bbb76..2784a5fb 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java @@ -8,7 +8,6 @@ import xyz.olivermartin.multichat.bungee.ChatModeManager; import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.MessageManager; -import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.ProxyChatManager; import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; @@ -19,97 +18,87 @@ /** * Global Command *

Causes players to see messages sent from all servers in the global chat

- * - * @author Oliver Martin (Revilo410) * + * @author Oliver Martin (Revilo410) */ public class GlobalCommand extends Command { - public GlobalCommand() { - super("mcglobal", "multichat.chat.mode", (String[]) ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("global").toArray(new String[0])); - } - - public void execute(CommandSender sender, String[] args) { - - ChannelManager channelManager = MultiChatProxy.getInstance().getChannelManager(); - ProxyChatManager chatManager = MultiChatProxy.getInstance().getChatManager(); - - if ((sender instanceof ProxiedPlayer)) { - - if (args.length < 1) { - - ChatModeManager.getInstance().setGlobal(((ProxiedPlayer)sender).getUniqueId()); - - MessageManager.sendMessage(sender, "command_global_enabled_1"); - MessageManager.sendMessage(sender, "command_global_enabled_2"); - - } else { - - ProxiedPlayer player = (ProxiedPlayer)sender; - String message = MultiChatUtil.getMessageFromArgs(args); - - if (ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getBoolean(ConfigValues.Config.GLOBAL) == true) { - - if (!ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getStringList(ConfigValues.Config.NO_GLOBAL).contains(player.getServer().getInfo().getName())) { - - if (ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getBoolean(ConfigValues.Config.FETCH_SPIGOT_DISPLAY_NAMES) == true) { - ProxyLocalCommunicationManager.sendUpdatePlayerMetaRequestMessage(player.getName(), player.getServer().getInfo()); - } - - Optional optionalMessage = chatManager.handleChatMessage(player, message); // Processed message - - if (!optionalMessage.isPresent()) { - // Player not permitted to send this message, so cancel it - return; - } - - message = optionalMessage.get(); - - // If they had this channel hidden, then unhide it... - if (channelManager.isHidden(player.getUniqueId(), "global")) { - channelManager.show(player.getUniqueId(), "global"); - MessageManager.sendSpecialMessage(player, "command_channel_show", "GLOBAL"); - } - - // Let server know players channel preference - - String channelFormat; - - switch (channelManager.getChannel(player)) { - - case "global": - channelFormat = channelManager.getGlobalChannel().getInfo().getFormat(); - break; - case "local": - channelFormat = channelManager.getLocalChannel().getFormat(); - break; - default: - if (channelManager.existsProxyChannel(channelManager.getChannel(player))) { - channelFormat = channelManager.getProxyChannel(channelManager.getChannel(player)).get().getInfo().getFormat(); - } else { - channelFormat = channelManager.getGlobalChannel().getInfo().getFormat(); - } - break; - } - - ProxyLocalCommunicationManager.sendPlayerDataMessage(player.getName(), channelManager.getChannel(player), channelFormat, player.getServer().getInfo(), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.simple")||player.hasPermission("multichat.chat.color.simple")), (player.hasPermission("multichat.chat.colour")||player.hasPermission("multichat.chat.color")||player.hasPermission("multichat.chat.colour.rgb")||player.hasPermission("multichat.chat.color.rgb"))); - - // Message passes through to spigot here - - // Send message directly to global chat... - ProxyLocalCommunicationManager.sendPlayerDirectChatMessage("global", sender.getName(), message, ((ProxiedPlayer)sender).getServer().getInfo()); - - if (MultiChatProxy.getInstance().getDataStore().getHiddenStaff().contains(player.getUniqueId())) { - MultiChatProxy.getInstance().getDataStore().getHiddenStaff().remove(player.getUniqueId()); - } - - } - } - - } - - } else { - MessageManager.sendMessage(sender, "command_global_only_players"); - } - } + public GlobalCommand() { + super("mcglobal", "multichat.chat.mode", ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("global").toArray(new String[0])); + } + + public void execute(CommandSender sender, String[] args) { + if (!(sender instanceof ProxiedPlayer)) { + MessageManager.sendMessage(sender, "command_global_only_players"); + return; + } + ProxiedPlayer proxiedPlayer = (ProxiedPlayer) sender; + + if (args.length == 0) { + ChatModeManager.getInstance().setGlobal(proxiedPlayer.getUniqueId()); + + MessageManager.sendMessage(sender, "command_global_enabled_1"); + MessageManager.sendMessage(sender, "command_global_enabled_2"); + return; + } + + if (!ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getBoolean(ConfigValues.Config.GLOBAL)) { + // TODO: Maybe add a message here? + // Don't think anyone will disable global chat and expect /global to work but you never know... + return; + } + + if (proxiedPlayer.getServer() != null + && ConfigManager.getInstance().getHandler(ConfigFile.CONFIG) + .getConfig().getStringList(ConfigValues.Config.NO_GLOBAL).contains(proxiedPlayer.getServer().getInfo().getName())) { + // TODO: Same as above + return; + } + + if (ConfigManager.getInstance().getHandler(ConfigFile.CONFIG) + .getConfig().getBoolean(ConfigValues.Config.FETCH_SPIGOT_DISPLAY_NAMES)) { + ProxyLocalCommunicationManager.sendUpdatePlayerMetaRequestMessage(proxiedPlayer.getName(), + proxiedPlayer.getServer().getInfo() + ); + } + + ProxyChatManager chatManager = MultiChatProxy.getInstance().getChatManager(); + Optional optionalMessage = chatManager.handleChatMessage(proxiedPlayer, String.join(" ", args)); + if (!optionalMessage.isPresent()) + return; + + String message = optionalMessage.get(); + ChannelManager channelManager = MultiChatProxy.getInstance().getChannelManager(); + + // If they had this channel hidden, then unhide it... + if (channelManager.isHidden(proxiedPlayer.getUniqueId(), "global")) { + channelManager.show(proxiedPlayer.getUniqueId(), "global"); + MessageManager.sendSpecialMessage(proxiedPlayer, "command_channel_show", "GLOBAL"); + } + + // Let server know players channel preference + String currentChannel = channelManager.getChannel(proxiedPlayer); + String channelFormat = currentChannel.equals("local") + ? channelManager.getLocalChannel().getFormat() + : channelManager.getProxyChannel(currentChannel) + .orElse(channelManager.getGlobalChannel()).getInfo().getFormat(); + + ProxyLocalCommunicationManager.sendPlayerDataMessage(proxiedPlayer.getName(), + currentChannel, + channelFormat, + proxiedPlayer.getServer().getInfo(), + // TODO: Move this permissions check somewhere else or make it simpler + (proxiedPlayer.hasPermission("multichat.chat.color") || proxiedPlayer.hasPermission("multichat.chat.colour.simple") || proxiedPlayer.hasPermission("multichat.chat.color.simple")), + (proxiedPlayer.hasPermission("multichat.chat.color") || proxiedPlayer.hasPermission("multichat.chat.colour.rgb") || proxiedPlayer.hasPermission("multichat.chat.color.rgb")) + ); + + // Send message directly to global chat... + ProxyLocalCommunicationManager.sendPlayerDirectChatMessage("global", + proxiedPlayer.getName(), + message, + proxiedPlayer.getServer().getInfo() + ); + + MultiChatProxy.getInstance().getDataStore().getHiddenStaff().remove(proxiedPlayer.getUniqueId()); + } } From eb75f70bf6fd8bfd158e571779d5acdb2fa79813 Mon Sep 17 00:00:00 2001 From: Gadse Date: Tue, 4 Aug 2020 20:24:35 +0200 Subject: [PATCH 126/188] Add TODO to GlobalCommand --- .../olivermartin/multichat/bungee/commands/GlobalCommand.java | 1 + 1 file changed, 1 insertion(+) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java index 2784a5fb..b7ffcf69 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GlobalCommand.java @@ -99,6 +99,7 @@ public void execute(CommandSender sender, String[] args) { proxiedPlayer.getServer().getInfo() ); + // TODO: Move this to actual message distribution MultiChatProxy.getInstance().getDataStore().getHiddenStaff().remove(proxiedPlayer.getUniqueId()); } } From 5590c5279556c92133378dd223c7f22d2d2a81fc Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Tue, 4 Aug 2020 22:07:25 +0100 Subject: [PATCH 127/188] Improved console logging & debug for MultiChatLocal --- .../multichat/common/MultiChatUtil.java | 4 +- .../local/common/LocalChatManager.java | 31 ++++------- .../local/common/LocalConsoleLogger.java | 30 +++++------ .../common/config/RegexChannelForcer.java | 10 ---- .../chat/LocalChatListenerHighest.java | 54 ++++++++++++------- .../chat/LocalChatListenerLowest.java | 40 +++++++------- .../chat/LocalChatListenerMonitor.java | 46 ++++++++-------- .../LocalPlayerDataListener.java | 25 +-------- .../common/storage/LocalSQLNameManager.java | 2 - .../spigot/LocalSpigotConsoleLogger.java | 5 +- .../local/sponge/LocalSpongeChatManager.java | 13 +++-- .../sponge/LocalSpongeConsoleLogger.java | 4 +- 12 files changed, 115 insertions(+), 149 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/common/MultiChatUtil.java b/multichat/src/main/java/xyz/olivermartin/multichat/common/MultiChatUtil.java index cb743b16..2ac1185b 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/common/MultiChatUtil.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/common/MultiChatUtil.java @@ -379,8 +379,8 @@ public static String visualiseColorCodes(String message) { Matcher originMatcher = TranslateMode.ALL.getOriginPattern().matcher(message); Matcher translatedMatcher = TranslateMode.ALL.getTranslatedPattern().matcher(message); - message = originMatcher.replaceAll("{Origin.$1}"); - message = translatedMatcher.replaceAll("{Transl.$1}"); + message = originMatcher.replaceAll("{O$1}"); + message = translatedMatcher.replaceAll("{T$1}"); return message; diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalChatManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalChatManager.java index b10e85e3..dcd61d1a 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalChatManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalChatManager.java @@ -49,7 +49,6 @@ public String getSelectedChatChannel(UUID uuid) { if (playerChannels.containsKey(uuid)) { channel = playerChannels.get(uuid); - MultiChatLocal.getInstance().getConsoleLogger().debug("[LocalChatManager] Got selected player channel as " + channel); } else { channel = "global"; MultiChatLocal.getInstance().getConsoleLogger().debug("[LocalChatManager] Player was not in channel map, so using global..."); @@ -234,13 +233,7 @@ public boolean canChatInSimpleColour(UUID uuid) { if (colourMap.containsKey(uuid)) { - MultiChatLocal.getInstance().getConsoleLogger().debug("[LocalChatManager] Player is in the simple colour map!"); - - boolean colour = colourMap.get(uuid); - - MultiChatLocal.getInstance().getConsoleLogger().debug("[LocalChatManager] Can they use simple colours? --> " + colour); - - return colour; + return colourMap.get(uuid); } else { @@ -263,13 +256,7 @@ public boolean canChatInRGBColour(UUID uuid) { if (colourMap.containsKey(uuid)) { - MultiChatLocal.getInstance().getConsoleLogger().debug("[LocalChatManager] Player is in the rgb colour map!"); - - boolean colour = colourMap.get(uuid); - - MultiChatLocal.getInstance().getConsoleLogger().debug("[LocalChatManager] Can they use rgb colours? --> " + colour); - - return colour; + return colourMap.get(uuid); } else { @@ -284,7 +271,7 @@ public boolean canChatInRGBColour(UUID uuid) { } public String translateColorCodes(String message, boolean rgb) { - + if (rgb) { message = MultiChatUtil.translateColorCodes(message); } else { @@ -309,22 +296,22 @@ public String processMultiChatConfigPlaceholders(MultiChatLocalPlayer player, St for (String key : config.getMultichatPlaceholders().keySet()) { - MultiChatLocal.getInstance().getConsoleLogger().debug("[LocalChatManager] MultiChatPlaceholder Key = " + key); + //MultiChatLocal.getInstance().getConsoleLogger().debug("[LocalChatManager] MultiChatPlaceholder Key = " + key); String value = config.getMultichatPlaceholders().get(key); - MultiChatLocal.getInstance().getConsoleLogger().debug("[LocalChatManager] MultiChatPlaceholder Value = " + value); + //MultiChatLocal.getInstance().getConsoleLogger().debug("[LocalChatManager] MultiChatPlaceholder Value = " + value); value = MultiChatLocal.getInstance().getPlaceholderManager().processMultiChatPlaceholders(player.getUniqueId(), value); - MultiChatLocal.getInstance().getConsoleLogger().debug("[LocalChatManager] Processed Value to get: " + value); + //MultiChatLocal.getInstance().getConsoleLogger().debug("[LocalChatManager] Processed Value to get: " + value); // If we are hooked with PAPI then use their placeholders! value = processExternalPlaceholders(player, value); - MultiChatLocal.getInstance().getConsoleLogger().debug("[LocalChatManager] Processed with external placeholders to get: " + value); + //MultiChatLocal.getInstance().getConsoleLogger().debug("[LocalChatManager] Processed with external placeholders to get: " + value); value = translateColorCodes(value, true); - MultiChatLocal.getInstance().getConsoleLogger().debug("[LocalChatManager] Translated colour codes to get: " + value); + //MultiChatLocal.getInstance().getConsoleLogger().debug("[LocalChatManager] Translated colour codes to get: " + value); - MultiChatLocal.getInstance().getConsoleLogger().debug("[LocalChatManager] MESSAGE = : " + message); + //MultiChatLocal.getInstance().getConsoleLogger().debug("[LocalChatManager] MESSAGE = : " + message); if (message.contains(key)) { message = message.replace(key, value); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalConsoleLogger.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalConsoleLogger.java index 8c46bd00..60e1dbef 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalConsoleLogger.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalConsoleLogger.java @@ -1,33 +1,25 @@ package xyz.olivermartin.multichat.local.common; +import xyz.olivermartin.multichat.common.MultiChatUtil; + public abstract class LocalConsoleLogger { private MultiChatLocalPlatform platform; - protected String prefix; - protected String debugPrefix; + protected static final String PREFIX = MultiChatUtil.translateColorCodes("&8[&2M&aC&3L&8]&7 "); + protected static final String DEBUG_PREFIX = PREFIX + MultiChatUtil.translateColorCodes("&8[&4DEBUG&8]&7 "); private boolean debug; protected LocalConsoleLogger(MultiChatLocalPlatform platform) { this.platform = platform; debug = false; - prefix = "&8[&2M&aC&3L&8]&7 "; - debugPrefix = "&8[&2M&aC&3L&8][&4DEBUG&8]&7 "; - } - - public void setPrefix(String prefix) { - this.prefix = prefix; - } - - public String getPrefix() { - return this.prefix; } public void setDebug(boolean debug) { this.debug = debug; } - + public boolean toggleDebug() { this.debug = !this.debug; return this.debug; @@ -39,14 +31,20 @@ public MultiChatLocalPlatform getPlatform() { protected abstract void displayMessageUsingLogger(String message); - protected abstract void sendColouredMessageToConsoleSender(String message); + protected abstract void sendConsoleMessage(String message); public void log(String message) { - sendColouredMessageToConsoleSender(prefix + message); + sendConsoleMessage(PREFIX + message); } public void debug(String message) { - if (debug) sendColouredMessageToConsoleSender(debugPrefix + message); + debug("", message); + } + + public void debug(String prefix, String message) { + if (debug) sendConsoleMessage(DEBUG_PREFIX + + MultiChatUtil.approximateRGBColorCodes(MultiChatUtil.translateColorCodes(prefix)) + + message); } } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/config/RegexChannelForcer.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/config/RegexChannelForcer.java index c81449b7..d33f6c1c 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/config/RegexChannelForcer.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/config/RegexChannelForcer.java @@ -1,7 +1,6 @@ package xyz.olivermartin.multichat.local.common.config; import xyz.olivermartin.multichat.common.MultiChatUtil; -import xyz.olivermartin.multichat.local.common.MultiChatLocal; public class RegexChannelForcer { @@ -26,9 +25,6 @@ public RegexChannelForcer(String regex, boolean ignoreFormatCodes, String channe public boolean matchesRegex(String messageFormat) { - MultiChatLocal.getInstance().getConsoleLogger().debug("[RegexChannelForcer] Testing format: " + messageFormat); - MultiChatLocal.getInstance().getConsoleLogger().debug("[RegexChannelForcer] Testing format (visualised): " + messageFormat.replace("&", "(#d)").replace("§", "(#e)")); - String testMessage = messageFormat; if (ignoreFormatCodes) { @@ -38,12 +34,6 @@ public boolean matchesRegex(String messageFormat) { testMessage = testMessage.replace('§', '&'); } - MultiChatLocal.getInstance().getConsoleLogger().debug("[RegexChannelForcer] Processed format codes: " + testMessage); - MultiChatLocal.getInstance().getConsoleLogger().debug("[RegexChannelForcer] Processed format codes (visualised): " + testMessage.replace("&", "(#d)").replace("§", "(#e)")); - - MultiChatLocal.getInstance().getConsoleLogger().debug("[RegexChannelForcer] Regex is: " + regex); - MultiChatLocal.getInstance().getConsoleLogger().debug("[RegexChannelForcer] Regex is (visualised): " + regex.replace("&", "(#d)").replace("§", "(#e)")); - return testMessage.matches(regex); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/LocalChatListenerHighest.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/LocalChatListenerHighest.java index f990ae5f..2ca8bf77 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/LocalChatListenerHighest.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/LocalChatListenerHighest.java @@ -4,6 +4,7 @@ import java.util.UUID; import xyz.olivermartin.multichat.local.common.LocalChatManager; +import xyz.olivermartin.multichat.local.common.LocalConsoleLogger; import xyz.olivermartin.multichat.local.common.MultiChatLocal; import xyz.olivermartin.multichat.local.common.MultiChatLocalPlatform; @@ -11,35 +12,45 @@ public abstract class LocalChatListenerHighest { public void handleChat(MultiChatLocalPlayerChatEvent event) { - // IF ITS ALREADY CANCELLED WE CAN IGNORE IT - if (event.isCancelled()) return; + LocalConsoleLogger logger = MultiChatLocal.getInstance().getConsoleLogger(); + + logger.debug("&8[&9CHAT-L2&8]&7 ", "Processing a chat message..."); + logger.debug("&8[&9CHAT-L2&8]&7 ", "SENDER = '" + event.getPlayer().getName() + "'"); + logger.debug("&8[&9CHAT-L2&8]&7 ", "ORIGINAL MESSAGE = '" + event.getMessage() + "'"); + logger.debug("&8[&9CHAT-L2&8]&7 ", "ORIGINAL FORMAT = '" + event.getFormat() + "'"); - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@HIGHEST - Now is where the fun starts... Welcome to the highest level!"); + // IF ITS ALREADY CANCELLED WE CAN IGNORE IT + if (event.isCancelled()) { + logger.debug("&8[&9CHAT-L2&8]&7 ", "Message is already cancelled - FINISH"); + return; + } LocalChatManager chatManager = MultiChatLocal.getInstance().getChatManager(); if (chatManager.canChatInRGBColour(event.getPlayer().getUniqueId())) { event.setMessage(chatManager.translateColorCodes(event.getMessage(),true)); - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@HIGHEST - Translated their message to include the colours (RGB) and set back in the event as: " + event.getMessage()); + logger.debug("&8[&9CHAT-L2&8]&7 ", "COLOR PERMISSIONS = RGB"); } else if (chatManager.canChatInSimpleColour(event.getPlayer().getUniqueId())) { event.setMessage(chatManager.translateColorCodes(event.getMessage(),false)); - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@HIGHEST - Translated their message to include the colours (SIMPLE ONLY) and set back in the event as: " + event.getMessage()); + logger.debug("&8[&9CHAT-L2&8]&7 ", "COLOR PERMISSIONS = SIMPLE"); + } else { + logger.debug("&8[&9CHAT-L2&8]&7 ", "COLOR PERMISSIONS = NONE"); } - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@HIGHEST - Now we will process MultiChat placeholders!"); + logger.debug("&8[&9CHAT-L2&8]&7 ", "MESSAGE (after color processing) = '" + event.getMessage() + "'"); event.setFormat(chatManager.processMultiChatConfigPlaceholders(event.getPlayer(), event.getFormat())); - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@HIGHEST - The resulting format was... " + event.getFormat()); + logger.debug("&8[&9CHAT-L2&8]&7 ", "FORMAT (after MultiChat placeholders) = '" + event.getFormat() + "'"); String channel = chatManager.peekAtChatChannel(event.getPlayer()); - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@HIGHEST - Channel for this message before forcing is: " + channel); + logger.debug("&8[&9CHAT-L2&8]&7 ", "CHANNEL (before forcing) = '" + channel + "'"); // Deal with regex channel forcing... channel = chatManager.getRegexForcedChannel(channel, event.getFormat()); - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@HIGHEST - Channel for this message after forcing is: " + channel); + logger.debug("&8[&9CHAT-L2&8]&7 ", "CHANNEL (after forcing) = '" + channel + "'"); // Deal with ignores and channel members @@ -49,31 +60,31 @@ public void handleChat(MultiChatLocalPlayerChatEvent event) { event.removeOtherPlayers(); + logger.debug("&8[&9CHAT-L2&8]&7 ", "Removed all recipients except for sender"); + if (!chatManager.isGlobalChatServer() || channel.equalsIgnoreCase("local")) { - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@HIGHEST - We are speaking into local chat, so at this point we are returning! Bye!"); + logger.debug("&8[&9CHAT-L2&8]&7 ", "This is a local chat message - FINISH"); return; } if (chatManager.isForceMultiChatFormat()) { - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@HIGHEST - OKAYYY! We are forcing our format! All other plugins shall now crumble!"); - - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@HIGHEST - Currently it is starting out as... " + event.getFormat()); + logger.debug("&8[&9CHAT-L2&8]&7 ", "MultiChat force format is enabled, so we will now force our own format"); String format; format = chatManager.getChannelFormat(channel); - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@HIGHEST - Got the format for this channel as:" + format); + + logger.debug("&8[&9CHAT-L2&8]&7 ", "CHANNEL FORMAT = '" + format + "'"); // Build chat format - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@HIGHEST - Rebuilding the chat format..."); format = MultiChatLocal.getInstance().getPlaceholderManager().buildChatFormat(event.getPlayer().getUniqueId(), format); - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@HIGHEST - Now we have: " + format); + logger.debug("&8[&9CHAT-L2&8]&7 ", "CHANNEL FORMAT (built) = '" + format + "'"); format = chatManager.processExternalPlaceholders(event.getPlayer(), format); - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@HIGHEST - Processed external placeholders to get: " + format); + logger.debug("&8[&9CHAT-L2&8]&7 ", "CHANNEL FORMAT (with external placeholders) = '" + format + "'"); if (MultiChatLocal.getInstance().getPlatform() == MultiChatLocalPlatform.SPIGOT) { // Handle Spigot displayname formatting etc. @@ -86,12 +97,15 @@ public void handleChat(MultiChatLocalPlayerChatEvent event) { format = format.replace("%", "%%"); } - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@HIGHEST - Did some magic to get..." + format); + logger.debug("&8[&9CHAT-L2&8]&7 ", "CHANNEL FORMAT (final) = '" + format + "'"); - event.setFormat(chatManager.translateColorCodes(format, true)); - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@HIGHEST - FORMAT HAS BEEN SET AS: " + event.getFormat()); + event.setFormat(format); + + logger.debug("&8[&9CHAT-L2&8]&7 ", "Format has been set"); } + logger.debug("&8[&9CHAT-L2&8]&7 ", "Processing completed - FINISH"); + } } \ No newline at end of file diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/LocalChatListenerLowest.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/LocalChatListenerLowest.java index 76b8542f..1617c883 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/LocalChatListenerLowest.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/LocalChatListenerLowest.java @@ -1,7 +1,7 @@ package xyz.olivermartin.multichat.local.common.listeners.chat; -import xyz.olivermartin.multichat.common.MultiChatUtil; import xyz.olivermartin.multichat.local.common.LocalChatManager; +import xyz.olivermartin.multichat.local.common.LocalConsoleLogger; import xyz.olivermartin.multichat.local.common.MultiChatLocal; import xyz.olivermartin.multichat.local.common.MultiChatLocalPlatform; import xyz.olivermartin.multichat.local.common.MultiChatLocalPlayer; @@ -10,10 +10,18 @@ public abstract class LocalChatListenerLowest { public void handleChat(MultiChatLocalPlayerChatEvent event) { - // IF ITS ALREADY CANCELLED THEN WE CAN IGNORE IT! - if (event.isCancelled()) return; + LocalConsoleLogger logger = MultiChatLocal.getInstance().getConsoleLogger(); + + logger.debug("&8[&1CHAT-L1&8]&7 ", "Processing a chat message..."); + logger.debug("&8[&1CHAT-L1&8]&7 ", "SENDER = '" + event.getPlayer().getName() + "'"); + logger.debug("&8[&1CHAT-L1&8]&7 ", "ORIGINAL MESSAGE = '" + event.getMessage() + "'"); + logger.debug("&8[&1CHAT-L1&8]&7 ", "ORIGINAL FORMAT = '" + event.getFormat() + "'"); - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@LOWEST - Handling chat message..."); + // IF ITS ALREADY CANCELLED THEN WE CAN IGNORE IT! + if (event.isCancelled()) { + logger.debug("&8[&1CHAT-L1&8]&7 ", "Message is already cancelled - FINISH"); + return; + } LocalChatManager chatManager = MultiChatLocal.getInstance().getChatManager(); @@ -21,42 +29,39 @@ public void handleChat(MultiChatLocalPlayerChatEvent event) { String channel = chatManager.peekAtChatChannel(player); String format = event.getFormat(); - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@LOWEST - Channel for this message before forcing is " + channel); + logger.debug("&8[&1CHAT-L1&8]&7 ", "CHANNEL (before forcing) = '" + channel + "'"); // Deal with regex channel forcing... channel = chatManager.getRegexForcedChannel(channel, format); - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@LOWEST - Channel for this message after forcing is " + channel); + logger.debug("&8[&1CHAT-L1&8]&7 ", "CHANNEL (after forcing) = '" + channel + "'"); if (!chatManager.isGlobalChatServer()) { - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@LOWEST - Not a global chat server, so setting channel to local!"); channel = "local"; + logger.debug("&8[&1CHAT-L1&8]&7 ", "CHANNEL (override - no global) = '" + channel + "'"); } if (channel.equals("local") && !chatManager.isSetLocalFormat()) { - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@LOWEST - Its local chat and we aren't setting the format for that, so return now!"); + logger.debug("&8[&1CHAT-L1&8]&7 ", "Local chat and MultiChat not setting format - FINISH"); return; } if (chatManager.isOverrideMultiChatFormat()) { - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@LOWEST - We are overriding MultiChat's formatting... So abandon here..."); + logger.debug("&8[&1CHAT-L1&8]&7 ", "MultiChat formatting is set to be overridden - FINISH"); return; } format = chatManager.getChannelFormat(channel); - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@LOWEST - Got the format for this channel as:" + format); - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@LOWEST - Visualised chat format:" + MultiChatUtil.visualiseColorCodes(format)); + logger.debug("&8[&1CHAT-L1&8]&7 ", "CHANNEL FORMAT = '" + format + "'"); // Build chat format format = MultiChatLocal.getInstance().getPlaceholderManager().buildChatFormat(player.getUniqueId(), format); - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@LOWEST - Built to become: " + format); - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@LOWEST - Visualised chat format:" + MultiChatUtil.visualiseColorCodes(format)); + logger.debug("&8[&1CHAT-L1&8]&7 ", "CHANNEL FORMAT (built) = '" + format + "'"); format = chatManager.processExternalPlaceholders(player, format); - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@LOWEST - Processing external placeholders to become: " + format); - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@LOWEST - Visualised chat format:" + MultiChatUtil.visualiseColorCodes(format)); + logger.debug("&8[&1CHAT-L1&8]&7 ", "CHANNEL FORMAT (with external placeholders) = '" + format + "'"); if (MultiChatLocal.getInstance().getPlatform() == MultiChatLocalPlatform.SPIGOT) { // Handle Spigot displayname formatting etc. @@ -69,12 +74,11 @@ public void handleChat(MultiChatLocalPlayerChatEvent event) { format = format.replace("%", "%%"); } - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@LOWEST - Did some magic formatting to end up as: " + format); - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@LOWEST - Visualised chat format:" + MultiChatUtil.visualiseColorCodes(format)); + logger.debug("&8[&1CHAT-L1&8]&7 ", "CHANNEL FORMAT (final) = '" + format + "'"); event.setFormat(format); - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@LOWEST - Set the format of the message. Finished processing at the lowest level!"); + logger.debug("&8[&1CHAT-L1&8]&7 ", "Format has been set - FINISH"); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/LocalChatListenerMonitor.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/LocalChatListenerMonitor.java index 664440a8..a12045e1 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/LocalChatListenerMonitor.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/LocalChatListenerMonitor.java @@ -4,6 +4,7 @@ import java.util.UUID; import xyz.olivermartin.multichat.local.common.LocalChatManager; +import xyz.olivermartin.multichat.local.common.LocalConsoleLogger; import xyz.olivermartin.multichat.local.common.MultiChatLocal; import xyz.olivermartin.multichat.local.common.MultiChatLocalPlatform; import xyz.olivermartin.multichat.local.common.config.LocalConfig; @@ -12,32 +13,38 @@ public abstract class LocalChatListenerMonitor { public void handleChat(MultiChatLocalPlayerChatEvent event) { - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@MONITOR - Okay less fun here, we are just the monitor..."); + LocalConsoleLogger logger = MultiChatLocal.getInstance().getConsoleLogger(); + + logger.debug("&8[&3CHAT-L3&8]&7 ", "Processing a chat message..."); + logger.debug("&8[&3CHAT-L3&8]&7 ", "SENDER = '" + event.getPlayer().getName() + "'"); + logger.debug("&8[&3CHAT-L3&8]&7 ", "ORIGINAL MESSAGE = '" + event.getMessage() + "'"); + logger.debug("&8[&3CHAT-L3&8]&7 ", "ORIGINAL FORMAT = '" + event.getFormat() + "'"); LocalConfig config = MultiChatLocal.getInstance().getConfigManager().getLocalConfig(); LocalChatManager chatManager = MultiChatLocal.getInstance().getChatManager(); Set originalRecipients = chatManager.getRecipientsFromRecipientQueue(event.getPlayer().getUniqueId()); - String channel = chatManager.pollChatChannel(event.getPlayer()); + logger.debug("&8[&3CHAT-L3&8]&7 ", "CHANNEL (before forcing) = '" + channel + "'"); + // Deal with regex channel forcing... channel = chatManager.getRegexForcedChannel(channel, event.getFormat()); - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@MONITOR - If the message is cancelled, then we will end here..."); + logger.debug("&8[&3CHAT-L3&8]&7 ", "CHANNEL (after forcing) = '" + channel + "'"); // IF ITS ALREADY CANCELLED WE CAN IGNORE IT - if (event.isCancelled()) return; - - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@MONITOR - The message isn't cancelled!"); + if (event.isCancelled()) { + logger.debug("&8[&3CHAT-L3&8]&7 ", "Message is already cancelled - FINISH"); + return; + } // IF WE ARE MANAGING GLOBAL CHAT THEN WE NEED TO MANAGE IT! - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@MONITOR - TIME TO FORWARD TO PROXY!"); - - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@MONITOR - First we are sending their meta data..."); MultiChatLocal.getInstance().getProxyCommunicationManager().updatePlayerMeta(event.getPlayer().getUniqueId()); + logger.debug("&8[&3CHAT-L3&8]&7 ", "Player meta data update has just been sent to proxy"); + String proxyFormat = event.getFormat(); String proxyMessage = event.getMessage(); @@ -47,38 +54,29 @@ public void handleChat(MultiChatLocalPlayerChatEvent event) { if (!config.isOverrideAllMultiChatFormatting()) { - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@MONITOR - We were managing the format..."); - - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@MONITOR - Currently it is " + proxyFormat); - proxyFormat = proxyFormat.replace("%1$s", MultiChatLocal.getInstance().getMetaManager().getDisplayName(event.getPlayer().getUniqueId())); proxyFormat = proxyFormat.replace("%2$s", ""); - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@MONITOR - We replaced the special bits to get: " + proxyFormat); - } else { - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@MONITOR - Oh dear... we need to send it to the proxy... but we weren't managing the chat..."); - - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@MONITOR - The format currently is: " + proxyFormat); + logger.debug("&8[&3CHAT-L3&8]&7 ", "MultiChat's format has been overridden, so proxy formatting is done on a best-effort basis..."); proxyFormat = proxyFormat.replace("%1$s", MultiChatLocal.getInstance().getMetaManager().getDisplayName(event.getPlayer().getUniqueId())); proxyFormat = proxyFormat.replace("%2$s", ""); proxyFormat = proxyFormat.replaceFirst("\\$s", MultiChatLocal.getInstance().getMetaManager().getDisplayName(event.getPlayer().getUniqueId())); proxyFormat = proxyFormat.replaceFirst("\\$s", ""); - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@MONITOR - But we worked some magic to arrive at... " + proxyFormat); - } } + logger.debug("&8[&3CHAT-L3&8]&7 ", "FORMAT (final for proxy) = '" + proxyFormat + "'"); + logger.debug("&8[&3CHAT-L3&8]&7 ", "MESSAGE (final for proxy) = '" + proxyMessage + "'"); + logger.debug("&8[&3CHAT-L3&8]&7 ", "PLAYER UUID = '" + event.getPlayer().getUniqueId() + "'"); + MultiChatLocal.getInstance().getProxyCommunicationManager().sendPlayerChatMessage(event.getPlayer().getUniqueId(), channel, proxyMessage, proxyFormat, originalRecipients); - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@MONITOR - Aaaaand we sent it to the proxy! ALL DONE."); - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@MONITOR - UUID: " + event.getPlayer().getUniqueId()); - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@MONITOR - MESSAGE (please note this will be shown in colour here even if the player doesn't have colour permissions): " + proxyMessage); - MultiChatLocal.getInstance().getConsoleLogger().debug("#CHAT@MONITOR - FORMAT: " + proxyFormat); + logger.debug("&8[&3CHAT-L3&8]&7 ", "Info sent to proxy - FINISH"); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalPlayerDataListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalPlayerDataListener.java index 1365868a..c0509657 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalPlayerDataListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/communication/LocalPlayerDataListener.java @@ -5,7 +5,6 @@ import java.util.Optional; import java.util.UUID; -import xyz.olivermartin.multichat.local.common.LocalConsoleLogger; import xyz.olivermartin.multichat.local.common.MultiChatLocal; import xyz.olivermartin.multichat.local.common.MultiChatLocalPlayer; import xyz.olivermartin.multichat.local.common.listeners.LocalBungeeObjectMessage; @@ -16,24 +15,16 @@ public abstract class LocalPlayerDataListener { protected boolean handleMessage(LocalBungeeObjectMessage message) { - LocalConsoleLogger logger = MultiChatLocal.getInstance().getConsoleLogger(); - try { - logger.debug("Starting processing of pdata message"); - Optional opPlayer = getPlayerFromName(message.readUTF()); if (!opPlayer.isPresent()) return true; MultiChatLocalPlayer player = opPlayer.get(); - logger.debug("Player is present: " + player.getName()); - String channelName = message.readUTF(); - logger.debug("Channel is present: " + channelName); - Map playerChannels = MultiChatLocal.getInstance().getDataStore().getPlayerChannels(); synchronized (playerChannels) { playerChannels.put(player.getUniqueId(), channelName); @@ -43,31 +34,19 @@ protected boolean handleMessage(LocalBungeeObjectMessage message) { MultiChatLocal.getInstance().getDataStore().getChannelFormats().put(channelName, channelFormat); boolean colour = message.readBoolean(); - - logger.debug("Colour: " + colour); - boolean rgb = message.readBoolean(); - logger.debug("RGB: " + rgb); - Map simpleColourMap = MultiChatLocal.getInstance().getDataStore().getSimpleColourMap(); Map rgbColourMap = MultiChatLocal.getInstance().getDataStore().getRGBColourMap(); + synchronized (simpleColourMap) { simpleColourMap.put(player.getUniqueId(), colour); } + synchronized (rgbColourMap) { rgbColourMap.put(player.getUniqueId(), rgb); } - /*boolean whitelistMembers = message.readBoolean(); - List channelMembers = (List) message.readObject(); - - LocalPseudoChannel channelObject = new LocalPseudoChannel(channelName, channelMembers, whitelistMembers); - Map channelObjects = MultiChatLocal.getInstance().getDataStore().getChannelObjects(); - synchronized (channelObjects) { - channelObjects.put(channelName, channelObject); - }*/ - return true; } catch (IOException e) { diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/storage/LocalSQLNameManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/storage/LocalSQLNameManager.java index a7f36b51..992a671a 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/storage/LocalSQLNameManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/storage/LocalSQLNameManager.java @@ -72,8 +72,6 @@ public String getCurrentName(UUID uuid, boolean withPrefix) { } } - MultiChatLocal.getInstance().getConsoleLogger().debug("[LocalSQLNameManager] CurrentName = " + name); - } catch (SQLException e) { e.printStackTrace(); name = ""; diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotConsoleLogger.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotConsoleLogger.java index a46139f9..a2035b68 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotConsoleLogger.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/spigot/LocalSpigotConsoleLogger.java @@ -3,7 +3,6 @@ import java.util.logging.Logger; import org.bukkit.Bukkit; -import org.bukkit.ChatColor; import xyz.olivermartin.multichat.local.common.LocalConsoleLogger; import xyz.olivermartin.multichat.local.common.MultiChatLocalPlatform; @@ -22,8 +21,8 @@ protected void displayMessageUsingLogger(String message) { } @Override - protected void sendColouredMessageToConsoleSender(String message) { - Bukkit.getConsoleSender().sendMessage(ChatColor.translateAlternateColorCodes('&', message)); + protected void sendConsoleMessage(String message) { + Bukkit.getConsoleSender().sendMessage(message); } } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongeChatManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongeChatManager.java index 97fdc69f..b9d48244 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongeChatManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongeChatManager.java @@ -8,7 +8,6 @@ import me.rojo8399.placeholderapi.PlaceholderService; import xyz.olivermartin.multichat.local.common.LocalChatManager; -import xyz.olivermartin.multichat.local.common.MultiChatLocal; import xyz.olivermartin.multichat.local.common.MultiChatLocalPlayer; import xyz.olivermartin.multichat.local.sponge.hooks.LocalSpongePAPIHook; @@ -22,13 +21,13 @@ public String processExternalPlaceholders(MultiChatLocalPlayer player, String me PlaceholderService papi = LocalSpongePAPIHook.getInstance().getHook().get(); Optional opPlayer = Sponge.getServer().getPlayer(player.getUniqueId()); if (opPlayer.isPresent()) { - MultiChatLocal.getInstance().getConsoleLogger().debug("Going into PAPI we have: " + message); - MultiChatLocal.getInstance().getConsoleLogger().debug("Going into PAPI we have (visualised): " + message.replace("&", "(#d)").replace("§", "(#e)")); + //MultiChatLocal.getInstance().getConsoleLogger().debug("Going into PAPI we have: " + message); + //MultiChatLocal.getInstance().getConsoleLogger().debug("Going into PAPI we have (visualised): " + message.replace("&", "(#d)").replace("§", "(#e)")); message = TextSerializers.FORMATTING_CODE.serialize(papi.replaceSourcePlaceholders(message+"#", opPlayer.get())); - MultiChatLocal.getInstance().getConsoleLogger().debug("Serialised we have: " + message); - MultiChatLocal.getInstance().getConsoleLogger().debug("Serialised we have (visualised): " + message.replace("&", "(#d)").replace("§", "(#e)")); + //MultiChatLocal.getInstance().getConsoleLogger().debug("Serialised we have: " + message); + //MultiChatLocal.getInstance().getConsoleLogger().debug("Serialised we have (visualised): " + message.replace("&", "(#d)").replace("§", "(#e)")); // PAPI replaces unknown placeholders with {key}, so change them back to %key%!! message = message.substring(0,message.length()-1); @@ -41,8 +40,8 @@ public String processExternalPlaceholders(MultiChatLocalPlayer player, String me message = message.replace("{WORLD}", "%WORLD%"); message = message.replace("{MODE}", "%MODE%"); - MultiChatLocal.getInstance().getConsoleLogger().debug("After PAPI we have: " + message); - MultiChatLocal.getInstance().getConsoleLogger().debug("After PAPI we have (visualised): " + message.replace("&", "(#d)").replace("§", "(#e)")); + //MultiChatLocal.getInstance().getConsoleLogger().debug("After PAPI we have: " + message); + //MultiChatLocal.getInstance().getConsoleLogger().debug("After PAPI we have (visualised): " + message.replace("&", "(#d)").replace("§", "(#e)")); } } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongeConsoleLogger.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongeConsoleLogger.java index 39fb21c9..27c39690 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongeConsoleLogger.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/sponge/LocalSpongeConsoleLogger.java @@ -18,8 +18,8 @@ protected void displayMessageUsingLogger(String message) { } @Override - protected void sendColouredMessageToConsoleSender(String message) { - Sponge.getServer().getConsole().sendMessage(TextSerializers.FORMATTING_CODE.deserialize(message)); + protected void sendConsoleMessage(String message) { + Sponge.getServer().getConsole().sendMessage(TextSerializers.formattingCode('§').deserialize(message)); } } From 0857e00da9abaabc8e1652c49a7f233dac40d462 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Tue, 4 Aug 2020 22:14:31 +0100 Subject: [PATCH 128/188] Better proxy debug messages for pchat received from MultiChatLocal --- .../communication/ProxyPlayerChatListener.java | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyPlayerChatListener.java b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyPlayerChatListener.java index 6dc2e6fe..b2862585 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyPlayerChatListener.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/proxy/common/listeners/communication/ProxyPlayerChatListener.java @@ -59,11 +59,11 @@ public static void onPluginMessage(PluginMessageEvent event) { ObjectInputStream in = new ObjectInputStream(stream); uuid = UUID.fromString(in.readUTF()); - DebugManager.log("{multichat:pchat} UUID = " + uuid); + DebugManager.log("{multichat:pchat} UUID = '" + uuid + "'"); channel = in.readUTF(); - DebugManager.log("{multichat:pchat} Channel = " + channel); + DebugManager.log("{multichat:pchat} Channel = '" + channel + "'"); message = in.readUTF(); - DebugManager.log("{multichat:pchat} Message = " + message); + DebugManager.log("{multichat:pchat} Message = '" + message + "'"); format = in.readUTF(); otherRecipients = (Set) in.readObject(); @@ -72,9 +72,9 @@ public static void onPluginMessage(PluginMessageEvent event) { return; } - DebugManager.log("{multichat:pchat} Format (before removal of double chars) = " + format); + DebugManager.log("{multichat:pchat} Format (before removal of double chars) = '" + format + "'"); format = format.replace("%%","%"); - DebugManager.log("{multichat:pchat} Format = " + format); + DebugManager.log("{multichat:pchat} Format = '" + format + "'"); ProxiedPlayer player = ProxyServer.getInstance().getPlayer(uuid); @@ -84,7 +84,7 @@ public static void onPluginMessage(PluginMessageEvent event) { return; } - DebugManager.log("{multichat:pchat} Got player successfully! Name = " + player.getName()); + DebugManager.log("{multichat:pchat} Got player successfully! Name = '" + player.getName() + "'"); Optional opm = PlayerMetaManager.getInstance().getPlayer(uuid); ChannelManager channelManager = MultiChatProxy.getInstance().getChannelManager(); @@ -94,13 +94,10 @@ public static void onPluginMessage(PluginMessageEvent event) { switch (channel) { case "global": - //DebugManager.log("{multichat:pchat} Global Channel Available? = " + (LegacyChannel.getGlobalChannel() != null)); - //LegacyChannel.getGlobalChannel().sendMessage(player, message, format); channelManager.getGlobalChannel().distributeMessage(player, message, format, otherRecipients); break; case "local": - DebugManager.log("{multichat:pchat} LOCAL SPY MESSAGE - Not yet implemented...?"); // TODO ?! channelManager.getLocalChannel().distributeMessage(player, message, format, otherRecipients); break; From 628e2de56d9e56fcd6c60786024c707b46334da7 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Tue, 4 Aug 2020 22:55:33 +0100 Subject: [PATCH 129/188] Allow the name to not be exact in order to /msg to someone --- .../bungee/PrivateMessageManager.java | 29 +++++++++++++++++++ .../multichat/bungee/commands/MsgCommand.java | 18 ++++++++---- 2 files changed, 41 insertions(+), 6 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PrivateMessageManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PrivateMessageManager.java index b76a276b..98eb1ace 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PrivateMessageManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/PrivateMessageManager.java @@ -1,5 +1,7 @@ package xyz.olivermartin.multichat.bungee; +import java.util.Collection; +import java.util.Optional; import java.util.UUID; import net.md_5.bungee.api.ProxyServer; @@ -180,4 +182,31 @@ public void sendMessageConsoleSender(String message, ProxiedPlayer target) { } + public Optional getPartialPlayerMatch(String search) { + + // Spigot's own partial match algorithm + Collection spigotMatches = ProxyServer.getInstance().matchPlayer(search); + + if (spigotMatches != null && spigotMatches.size() > 0) { + return Optional.of(spigotMatches.iterator().next()); + } + + // Check for names to contain the search + for (ProxiedPlayer p : ProxyServer.getInstance().getPlayers()) { + if (p.getName().toLowerCase().contains(search.toLowerCase())) { + return Optional.of(p); + } + } + + // Check for display names to contain the search + for (ProxiedPlayer p : ProxyServer.getInstance().getPlayers()) { + if (p.getDisplayName().toLowerCase().contains(search.toLowerCase())) { + return Optional.of(p); + } + } + + return Optional.empty(); + + } + } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MsgCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MsgCommand.java index 1765f0f1..86378fcf 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MsgCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/MsgCommand.java @@ -53,9 +53,11 @@ public void execute(CommandSender sender, String[] args) { // 1 arg --> toggle - if (ProxyServer.getInstance().getPlayer(args[0]) != null) { + Optional opTarget = PrivateMessageManager.getInstance().getPartialPlayerMatch(args[0]); - ProxiedPlayer target = ProxyServer.getInstance().getPlayer(args[0]); + if (opTarget.isPresent()) { + + ProxiedPlayer target = opTarget.get(); if ((sender instanceof ProxiedPlayer)) { @@ -136,9 +138,11 @@ public void execute(CommandSender sender, String[] args) { return; } - if (ProxyServer.getInstance().getPlayer(args[0]) != null) { + Optional opTarget = PrivateMessageManager.getInstance().getPartialPlayerMatch(args[0]); + + if (opTarget.isPresent()) { - ProxiedPlayer target = ProxyServer.getInstance().getPlayer(args[0]); + ProxiedPlayer target = opTarget.get(); boolean permittedToMessage = true; @@ -211,9 +215,11 @@ public void execute(CommandSender sender, String[] args) { String message = MultiChatUtil.getMessageFromArgs(args, 1); - if (ProxyServer.getInstance().getPlayer(args[0]) != null) { + Optional opTarget = PrivateMessageManager.getInstance().getPartialPlayerMatch(args[0]); + + if (opTarget.isPresent()) { - ProxiedPlayer target = ProxyServer.getInstance().getPlayer(args[0]); + ProxiedPlayer target = opTarget.get(); if (ConfigManager.getInstance().getHandler(ConfigFile.CONFIG).getConfig().getBoolean(ConfigValues.Config.FETCH_SPIGOT_DISPLAY_NAMES) == true) { From ab73572b609f1c2fd21154c270c03d4c521882ec Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Wed, 5 Aug 2020 18:36:11 +0100 Subject: [PATCH 130/188] Fix null pointer in getting recipients from queue when cancelled earlier --- .../multichat/local/common/LocalChatManager.java | 6 ++++-- .../listeners/chat/LocalChatListenerMonitor.java | 11 +++++++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalChatManager.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalChatManager.java index dcd61d1a..41ddc74d 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalChatManager.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/LocalChatManager.java @@ -106,7 +106,7 @@ public void queueChatChannel(String playerName, String channel) { } - public Set getRecipientsFromRecipientQueue(UUID uuid) { + public Optional> getRecipientsFromRecipientQueue(UUID uuid) { LocalDataStore store = MultiChatLocal.getInstance().getDataStore(); Map>> recipientQueues = store.getRecipientQueues(); @@ -114,6 +114,8 @@ public Set getRecipientsFromRecipientQueue(UUID uuid) { synchronized (recipientQueues) { + if (!recipientQueues.containsKey(uuid)) return Optional.empty(); + recipients = recipientQueues.get(uuid).poll(); if (recipientQueues.get(uuid).size() < 1) { @@ -122,7 +124,7 @@ public Set getRecipientsFromRecipientQueue(UUID uuid) { } - return recipients; + return Optional.of(recipients); } diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/LocalChatListenerMonitor.java b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/LocalChatListenerMonitor.java index a12045e1..0f91a799 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/LocalChatListenerMonitor.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/local/common/listeners/chat/LocalChatListenerMonitor.java @@ -1,5 +1,6 @@ package xyz.olivermartin.multichat.local.common.listeners.chat; +import java.util.Optional; import java.util.Set; import java.util.UUID; @@ -23,7 +24,13 @@ public void handleChat(MultiChatLocalPlayerChatEvent event) { LocalConfig config = MultiChatLocal.getInstance().getConfigManager().getLocalConfig(); LocalChatManager chatManager = MultiChatLocal.getInstance().getChatManager(); - Set originalRecipients = chatManager.getRecipientsFromRecipientQueue(event.getPlayer().getUniqueId()); + Optional> originalRecipients = chatManager.getRecipientsFromRecipientQueue(event.getPlayer().getUniqueId()); + + if (!originalRecipients.isPresent()) { + logger.debug("&8[&3CHAT-L3&8]&7 ", "No recipients for message, must have been cancelled earlier - FINISH"); + return; + } + String channel = chatManager.pollChatChannel(event.getPlayer()); logger.debug("&8[&3CHAT-L3&8]&7 ", "CHANNEL (before forcing) = '" + channel + "'"); @@ -74,7 +81,7 @@ public void handleChat(MultiChatLocalPlayerChatEvent event) { logger.debug("&8[&3CHAT-L3&8]&7 ", "MESSAGE (final for proxy) = '" + proxyMessage + "'"); logger.debug("&8[&3CHAT-L3&8]&7 ", "PLAYER UUID = '" + event.getPlayer().getUniqueId() + "'"); - MultiChatLocal.getInstance().getProxyCommunicationManager().sendPlayerChatMessage(event.getPlayer().getUniqueId(), channel, proxyMessage, proxyFormat, originalRecipients); + MultiChatLocal.getInstance().getProxyCommunicationManager().sendPlayerChatMessage(event.getPlayer().getUniqueId(), channel, proxyMessage, proxyFormat, originalRecipients.get()); logger.debug("&8[&3CHAT-L3&8]&7 ", "Info sent to proxy - FINISH"); From 6177dae952e28c2c2abdac911b13dd27d2f582c7 Mon Sep 17 00:00:00 2001 From: Gadse Date: Wed, 5 Aug 2020 19:38:09 +0200 Subject: [PATCH 131/188] GroupCommand refactor --- .../bungee/commands/GroupCommand.java | 1089 ++++++----------- 1 file changed, 397 insertions(+), 692 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GroupCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GroupCommand.java index 749e4ddc..ac627af1 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GroupCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/GroupCommand.java @@ -1,10 +1,6 @@ package xyz.olivermartin.multichat.bungee.commands; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.UUID; +import java.util.*; import com.olivermartin410.plugins.TGroupChatInfo; @@ -17,6 +13,7 @@ import xyz.olivermartin.multichat.bungee.GroupManager; import xyz.olivermartin.multichat.bungee.MessageManager; import xyz.olivermartin.multichat.bungee.UUIDNameManager; +import xyz.olivermartin.multichat.common.RegexUtil; import xyz.olivermartin.multichat.proxy.common.MultiChatProxy; import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; import xyz.olivermartin.multichat.proxy.common.storage.ProxyDataStore; @@ -24,695 +21,403 @@ /** * The Group Command *

From here the player can manipulate group chats in every possible way

- * - * @author Oliver Martin (Revilo410) * + * @author Oliver Martin (Revilo410) */ public class GroupCommand extends Command implements TabExecutor { - public GroupCommand() { - super("mcgroup", "multichat.group", (String[]) ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("group").toArray(new String[0])); - } - - public void execute(CommandSender sender, String[] args) { - - ProxyDataStore ds = MultiChatProxy.getInstance().getDataStore(); - - if ((args.length < 1) || ((args.length == 1) && (args[0].toLowerCase().equals("help")))) { - - GroupManager groupman = new GroupManager(); - groupman.displayHelp(1, sender); - groupman = null; - - } else if ((sender instanceof ProxiedPlayer)) { - - switch (args.length) { - - case 1: - - if ((sender instanceof ProxiedPlayer)) { - - if (ds.getGroupChats().containsKey(args[0].toLowerCase())) { - - TGroupChatInfo groupInfo = (TGroupChatInfo) ds.getGroupChats().get(args[0].toLowerCase()); - ProxiedPlayer player = (ProxiedPlayer) sender; - - if (groupInfo.existsMember(player.getUniqueId())) { - - String viewedchat = (String)ds.getViewedChats().get(player.getUniqueId()); - viewedchat = args[0].toLowerCase(); - ds.getViewedChats().remove(player.getUniqueId()); - ds.getViewedChats().put(player.getUniqueId(), viewedchat); - - MessageManager.sendSpecialMessage(sender, "command_group_selected", args[0].toUpperCase()); - - } else { - MessageManager.sendSpecialMessage(sender, "command_group_not_a_member", args[0].toUpperCase()); - } - - groupInfo = null; - } else { - MessageManager.sendSpecialMessage(sender, "command_group_does_not_exist", args[0].toUpperCase()); - } - - } else { - MessageManager.sendMessage(sender, "command_group_only_players_select"); - } - - break; - - case 2: - - if ((!args[0].toLowerCase().equals("members")) && (!args[0].toLowerCase().equals("list")) - && (!args[0].toLowerCase().equals("spyall")) && (!args[0].toLowerCase().equals("spy")) - && (!args[0].toLowerCase().equals("help")) && (!args[0].toLowerCase().equals("create")) - && (!args[0].toLowerCase().equals("make")) && (!args[0].toLowerCase().equals("join")) - && (!args[0].toLowerCase().equals("quit")) && (!args[0].toLowerCase().equals("leave")) - && (!args[0].toLowerCase().equals("formal")) && (!args[0].toLowerCase().equals("delete"))) { - - MessageManager.sendMessage(sender, "command_group_incorrect_usage"); - } - - if ((args[0].toLowerCase().equals("list")) || (args[0].toLowerCase().equals("members"))) { - - if (ds.getGroupChats().containsKey(args[1].toLowerCase())) { - - TGroupChatInfo groupChatInfo = new TGroupChatInfo(); - ProxiedPlayer player = (ProxiedPlayer) sender; - - groupChatInfo = (TGroupChatInfo)ds.getGroupChats().get(args[1].toLowerCase()); - - if ((groupChatInfo.existsMember(player.getUniqueId())) || (sender.hasPermission("multichat.staff.spy"))) { - - List memberlist = groupChatInfo.getMembers(); - - MessageManager.sendSpecialMessage(sender, "command_group_member_list", groupChatInfo.getName().toUpperCase()); - - for (UUID member : memberlist) { - - if (!groupChatInfo.existsAdmin(member)) { - MessageManager.sendSpecialMessage(sender, "command_group_member_list_item", UUIDNameManager.getName(member)); - } else { - MessageManager.sendSpecialMessage(sender, "command_group_member_list_item_admin", UUIDNameManager.getName(member)); - } - } - - } else { - MessageManager.sendSpecialMessage(sender, "command_group_not_a_member", args[1].toUpperCase()); - } - - groupChatInfo = null; - - } else { - MessageManager.sendSpecialMessage(sender, "command_group_does_not_exist", args[1].toUpperCase()); - } - - } - - if (args[0].toLowerCase().equals("spy")) { - - ProxiedPlayer player = (ProxiedPlayer) sender; - - if (args[1].toLowerCase().equals("all")) { - - if (player.hasPermission("multichat.staff.spy")) { - - if (ds.getAllSpy().contains(player.getUniqueId())) { - - ds.getAllSpy().remove(player.getUniqueId()); - MessageManager.sendMessage(sender, "command_group_spy_all_disabled_1"); - MessageManager.sendMessage(sender, "command_group_spy_all_disabled_2"); - MessageManager.sendMessage(sender, "command_group_spy_all_disabled_3"); - - } else { - - ds.getAllSpy().add(player.getUniqueId()); - MessageManager.sendMessage(sender, "command_group_spy_all_enabled"); - } - - } else { - MessageManager.sendMessage(sender, "command_group_spy_no_permission"); - } - - } else if (player.hasPermission("multichat.staff.spy")) { - - if (ds.getGroupChats().containsKey(args[1].toLowerCase())) { - - TGroupChatInfo groupChatInfo = (TGroupChatInfo)ds.getGroupChats().get(args[1].toLowerCase()); - - if (!groupChatInfo.existsMember(player.getUniqueId())) { - - if (groupChatInfo.existsViewer(player.getUniqueId())) { - - groupChatInfo.delViewer(player.getUniqueId()); - ds.getGroupChats().remove(groupChatInfo.getName().toLowerCase()); - ds.getGroupChats().put(groupChatInfo.getName().toLowerCase(), groupChatInfo); - MessageManager.sendSpecialMessage(sender, "command_group_spy_off", groupChatInfo.getName().toUpperCase()); - - } else { - - groupChatInfo.addViewer(player.getUniqueId()); - ds.getGroupChats().remove(groupChatInfo.getName().toLowerCase()); - ds.getGroupChats().put(groupChatInfo.getName().toLowerCase(), groupChatInfo); - MessageManager.sendSpecialMessage(sender, "command_group_spy_on", groupChatInfo.getName().toUpperCase()); - - } - - } else { - MessageManager.sendMessage(sender, "command_group_spy_already_a_member"); - } - - groupChatInfo = null; - - } else { - MessageManager.sendMessage(sender, "command_group_spy_does_not_exist"); - } - - } else { - MessageManager.sendMessage(sender, "command_group_spy_no_permission"); - } - - } - - if (args[0].toLowerCase().equals("help")) { - - if (args[1].equals("1")) { - GroupManager groupman = new GroupManager(); - groupman.displayHelp(1,sender); - groupman = null; - } else { - GroupManager groupman = new GroupManager(); - groupman.displayHelp(2,sender); - groupman = null; - } - - } - - if ((args[0].toLowerCase().equals("create")) || (args[0].toLowerCase().equals("make"))) { - - ProxiedPlayer player = (ProxiedPlayer) sender; - - if (player.hasPermission("multichat.group.create")) { - - if (args[1].length() <= 20) { - - if (!ds.getGroupChats().containsKey(args[1].toLowerCase())) { - - GroupManager groupman = new GroupManager(); - - // Make the new group - groupman.createGroup(args[1], player.getUniqueId(), false, ""); - // Select the new group for the player - groupman.setViewedChat(player.getUniqueId(), args[1]); - // Announce join to group members - MessageManager.sendSpecialMessage(sender, "command_group_created", args[1].toUpperCase()); - - groupman.announceJoinGroup(sender.getName(), args[1]); - groupman = null; - - } else { - MessageManager.sendSpecialMessage(sender, "command_group_already_exists", args[1].toUpperCase()); - } - - } else { - MessageManager.sendMessage(sender, "command_group_max_length"); - } - - } else { - MessageManager.sendMessage(sender, "command_group_create_no_permission"); - } - } - - if (args[0].toLowerCase().equals("join")) { - - if (ds.getGroupChats().containsKey(args[1].toLowerCase())) { - - GroupManager groupman = new GroupManager(); - ProxiedPlayer player = (ProxiedPlayer)sender; - - //Run the join group routine - if (groupman.joinGroup(args[1], player, "") == true ){ - - //If the join is successful, set their viewed chat - groupman.setViewedChat(player.getUniqueId(), args[1]); - MessageManager.sendSpecialMessage(sender, "command_group_joined", args[1].toUpperCase()); - //Announce their join - groupman.announceJoinGroup(player.getName(), args[1]); - } - - } else { - MessageManager.sendSpecialMessage(sender, "command_group_does_not_exist", args[1].toUpperCase()); - } - } - - if ((args[0].toLowerCase().equals("quit")) || (args[0].toLowerCase().equals("leave"))) { - - if (ds.getGroupChats().containsKey(args[1].toLowerCase())) { - - GroupManager groupman = new GroupManager(); - - ProxiedPlayer player = (ProxiedPlayer)sender; - - groupman.quitGroup(args[1].toLowerCase(), player.getUniqueId(), player); - - } else { - MessageManager.sendSpecialMessage(sender, "command_group_does_not_exist", args[1].toUpperCase()); - } - } - - if (args[0].toLowerCase().equals("formal")) { - - if (ds.getGroupChats().containsKey(args[1].toLowerCase())) { - - TGroupChatInfo groupChatInfo = (TGroupChatInfo)ds.getGroupChats().get(args[1].toLowerCase()); - - if (!groupChatInfo.getFormal()) { - - ProxiedPlayer player = (ProxiedPlayer) sender; - - if (groupChatInfo.getAdmins().contains(player.getUniqueId())) { - - groupChatInfo.setFormal(true); - ds.getGroupChats().remove(groupChatInfo.getName()); - ds.getGroupChats().put(groupChatInfo.getName(), groupChatInfo); - GCCommand.sendMessage(sender.getName() + MessageManager.getMessage("groups_info_formal"), "&lINFO", groupChatInfo); - - } else { - MessageManager.sendMessage(sender, "command_group_formal_not_owner"); - } - - } else { - MessageManager.sendSpecialMessage(sender, "command_group_formal_already_formal", args[1].toUpperCase()); - } - - groupChatInfo = null; - - } else { - MessageManager.sendSpecialMessage(sender, "command_group_does_not_exist", args[1].toUpperCase()); - } - } - - if (args[0].toLowerCase().equals("delete")) { - - if (ds.getGroupChats().containsKey(args[1].toLowerCase())) { - - TGroupChatInfo groupChatInfo = (TGroupChatInfo) ds.getGroupChats().get(args[1].toLowerCase()); - ProxiedPlayer player = (ProxiedPlayer) sender; - - if (groupChatInfo.getAdmins().contains(player.getUniqueId())) { - - for (ProxiedPlayer onlineplayer : ProxyServer.getInstance().getPlayers()) { - - if ((ds.getViewedChats().get(onlineplayer.getUniqueId()) != null) && - (((String)ds.getViewedChats().get(onlineplayer.getUniqueId())).toLowerCase().equals(groupChatInfo.getName().toLowerCase()))) { - - ds.getViewedChats().remove(onlineplayer.getUniqueId()); - ds.getViewedChats().put(onlineplayer.getUniqueId(), null); - - } - } - - GCCommand.sendMessage(sender.getName() + MessageManager.getMessage("groups_info_deleted"), "&lINFO", groupChatInfo); - GCCommand.sendMessage(MessageManager.getMessage("groups_info_goodbye"), "&lINFO", groupChatInfo); - - ds.getGroupChats().remove(groupChatInfo.getName().toLowerCase()); - - groupChatInfo = null; - - } else { - MessageManager.sendMessage(sender, "command_group_formal_not_admin"); - } - - } else { - MessageManager.sendSpecialMessage(sender, "command_group_does_not_exist", args[1].toUpperCase()); - } - } - - break; - - case 3: - - if ((!args[0].toLowerCase().equals("create")) && (!args[0].toLowerCase().equals("make")) - && (!args[0].toLowerCase().equals("join")) && (!args[0].toLowerCase().equals("transfer")) - && (!args[0].toLowerCase().equals("admin")) && (!args[0].toLowerCase().equals("addadmin")) - && (!args[0].toLowerCase().equals("removeadmin")) && (!args[0].toLowerCase().equals("ban"))) { - - MessageManager.sendMessage(sender, "command_group_incorrect_usage"); - - } - - if ((args[0].toLowerCase().equals("create")) || (args[0].toLowerCase().equals("make"))) { - - ProxiedPlayer player = (ProxiedPlayer) sender; - - if (player.hasPermission("multichat.group.create")) { - - if ((args[1].length() <= 20) && (args[2].length() <= 20)) { - - if (!ds.getGroupChats().containsKey(args[1].toLowerCase())) { - - GroupManager groupman = new GroupManager(); - - //Make the new group - groupman.createGroup(args[1], player.getUniqueId(), true, args[2]); - //Select the new group for the player - groupman.setViewedChat(player.getUniqueId(), args[1]); - //Announce join to group members - groupman.announceJoinGroup(sender.getName(), args[1]); - - MessageManager.sendSpecialMessage(sender, "command_group_created", args[1].toUpperCase()); - groupman = null; - - } else { - MessageManager.sendSpecialMessage(sender, "command_group_already_exists", args[1].toUpperCase()); - } - - } else { - MessageManager.sendMessage(sender, "command_group_max_length_password"); - } - - } else { - MessageManager.sendMessage(sender, "command_group_create_no_permission"); - } - } - - if (args[0].toLowerCase().equals("join")) { - if (ds.getGroupChats().containsKey(args[1].toLowerCase())) { - - GroupManager groupman = new GroupManager(); - ProxiedPlayer player = (ProxiedPlayer)sender; - - //Run the join group routine - if (groupman.joinGroup(args[1], player, args[2]) == true ){ - - //If the join is successful, set their viewed chat - groupman.setViewedChat(player.getUniqueId(), args[1]); - MessageManager.sendSpecialMessage(sender, "command_group_joined", args[1].toUpperCase()); - //Announce their join - groupman.announceJoinGroup(player.getName(), args[1]); - } - - } else { - MessageManager.sendSpecialMessage(sender, "command_group_does_not_exist", args[1].toUpperCase()); - } - } - - if (args[0].toLowerCase().equals("transfer")) { - - ProxiedPlayer player = (ProxiedPlayer) sender; - - if (ds.getGroupChats().containsKey(args[1].toLowerCase())) { - - if (ProxyServer.getInstance().getPlayer(args[2].toLowerCase()) != null) { - - ProxiedPlayer newplayer = ProxyServer.getInstance().getPlayer(args[2].toLowerCase()); - TGroupChatInfo groupChatInfo = (TGroupChatInfo)ds.getGroupChats().get(args[1].toLowerCase()); - - if (!groupChatInfo.getFormal()) { - - if (groupChatInfo.existsAdmin(player.getUniqueId())) { - - if (groupChatInfo.existsMember(newplayer.getUniqueId())) { - - groupChatInfo.addAdmin(newplayer.getUniqueId()); - groupChatInfo.delAdmin(player.getUniqueId()); - - ds.getGroupChats().remove(groupChatInfo.getName()); - ds.getGroupChats().put(groupChatInfo.getName(), groupChatInfo); - - GCCommand.sendMessage(sender.getName() + MessageManager.getMessage("groups_info_transfer") + newplayer.getName(), "&lINFO", groupChatInfo); - - } else { - MessageManager.sendMessage(sender, "command_group_transfer_not_member"); - } - - } else { - MessageManager.sendMessage(sender, "command_group_transfer_not_owner"); - } - - } else { - MessageManager.sendMessage(sender, "command_group_transfer_not_informal"); - } - - groupChatInfo = null; - - } else { - MessageManager.sendMessage(sender, "command_group_player_not_online"); - } - } else { - MessageManager.sendSpecialMessage(sender, "command_group_does_not_exist", args[1].toUpperCase()); - } - } - - if ((args[0].toLowerCase().equals("admin")) || (args[0].toLowerCase().equals("addadmin")) || (args[0].toLowerCase().equals("removeadmin"))) { - - ProxiedPlayer player = (ProxiedPlayer)sender; - - if (ds.getGroupChats().containsKey(args[1].toLowerCase())) { - - if (ProxyServer.getInstance().getPlayer(args[2].toLowerCase()) != null) { - - ProxiedPlayer newplayer = ProxyServer.getInstance().getPlayer(args[2].toLowerCase()); - - TGroupChatInfo groupChatInfo = (TGroupChatInfo)ds.getGroupChats().get(args[1].toLowerCase()); - - if (groupChatInfo.getFormal() == true) { - - if (groupChatInfo.existsAdmin(player.getUniqueId())) { - - if (groupChatInfo.existsMember(newplayer.getUniqueId())) { - - if (!groupChatInfo.existsAdmin(newplayer.getUniqueId())) { - - groupChatInfo.addAdmin(newplayer.getUniqueId()); - - ds.getGroupChats().remove(groupChatInfo.getName()); - ds.getGroupChats().put(groupChatInfo.getName(), groupChatInfo); - - GCCommand.sendMessage(sender.getName() + MessageManager.getMessage("groups_info_promoted") + newplayer.getName(), "&lINFO", groupChatInfo); - - } else if (newplayer.getUniqueId().equals(player.getUniqueId())) { - - if (groupChatInfo.getAdmins().size() > 1) { - - groupChatInfo.delAdmin(player.getUniqueId()); - - ds.getGroupChats().remove(groupChatInfo.getName()); - ds.getGroupChats().put(groupChatInfo.getName(), groupChatInfo); - - GCCommand.sendMessage(sender.getName() + MessageManager.getMessage("groups_info_step_down"), "&lINFO", groupChatInfo); - - } else { - MessageManager.sendMessage(sender, "command_group_formal_only_admin"); - } - - } else { - MessageManager.sendMessage(sender, "command_group_formal_cannot_demote"); - } - - } else { - MessageManager.sendMessage(sender, "command_group_transfer_not_member"); - } - - } else { - MessageManager.sendMessage(sender, "command_group_formal_not_admin"); - } - - } else { - MessageManager.sendMessage(sender, "command_group_not_formal"); - } - - groupChatInfo = null; - - } else { - MessageManager.sendMessage(sender, "command_group_player_not_online"); - } - - } else { - MessageManager.sendSpecialMessage(sender, "command_group_does_not_exist", args[1].toUpperCase()); - } - - } - - if (args[0].toLowerCase().equals("ban")) { - - ProxiedPlayer player = (ProxiedPlayer) sender; - - if (ds.getGroupChats().containsKey(args[1].toLowerCase())) { - - if (ProxyServer.getInstance().getPlayer(args[2].toLowerCase()) != null) { - - ProxiedPlayer newPlayer = ProxyServer.getInstance().getPlayer(args[2].toLowerCase()); - TGroupChatInfo groupChatInfo = (TGroupChatInfo)ds.getGroupChats().get(args[1].toLowerCase()); - - if (groupChatInfo.getFormal() == true) { - - if (groupChatInfo.existsAdmin(player.getUniqueId())) { - - if (!groupChatInfo.existsAdmin(newPlayer.getUniqueId())) { - - if (!groupChatInfo.existsBanned(newPlayer.getUniqueId())) { - - groupChatInfo.addBanned(newPlayer.getUniqueId()); - - if (groupChatInfo.existsMember(newPlayer.getUniqueId())) { - - groupChatInfo.delMember(newPlayer.getUniqueId()); - groupChatInfo.delViewer(newPlayer.getUniqueId()); - - ds.getViewedChats().remove(newPlayer.getUniqueId()); - ds.getViewedChats().put(newPlayer.getUniqueId(), null); - - GCCommand.sendMessage(sender.getName() + MessageManager.getMessage("groups_info_kick") + newPlayer.getName(), "&lINFO", groupChatInfo); - } - - ds.getGroupChats().remove(groupChatInfo.getName()); - ds.getGroupChats().put(groupChatInfo.getName(), groupChatInfo); - - GCCommand.sendMessage(sender.getName() + MessageManager.getMessage("groups_info_ban") + newPlayer.getName(), "&lINFO", groupChatInfo); - - MessageManager.sendSpecialMessage(newPlayer, "command_group_banned", groupChatInfo.getName()); - - - } else { - - groupChatInfo.delBanned(newPlayer.getUniqueId()); - - ds.getGroupChats().remove(groupChatInfo.getName()); - ds.getGroupChats().put(groupChatInfo.getName(), groupChatInfo); - - GCCommand.sendMessage(sender.getName() + MessageManager.getMessage("groups_info_unban") + newPlayer.getName(), "&lINFO", groupChatInfo); - - MessageManager.sendSpecialMessage(newPlayer, "command_group_unbanned", groupChatInfo.getName()); - } - - } else { - MessageManager.sendMessage(sender, "command_group_cannot_ban_admin"); - } - - } else { - MessageManager.sendMessage(sender, "command_group_ban_not_admin"); - } - - } else { - MessageManager.sendMessage(sender, "command_group_not_formal"); - } - - groupChatInfo = null; - - } else { - MessageManager.sendMessage(sender, "command_group_player_not_online"); - } - - } else { - MessageManager.sendSpecialMessage(sender, "command_group_does_not_exist", args[1].toUpperCase()); - } - } - - break; - - case 4: - - if ((args[0].toLowerCase().equals("color")) || (args[0].toLowerCase().equals("colour"))) { - - if (ds.getGroupChats().containsKey(args[1].toLowerCase())) { - - TGroupChatInfo groupChatInfo = new TGroupChatInfo(); - ProxiedPlayer player = (ProxiedPlayer) sender; - - groupChatInfo = (TGroupChatInfo)ds.getGroupChats().get(args[1].toLowerCase()); - - if (((groupChatInfo.existsMember(player.getUniqueId())) - && (!groupChatInfo.getFormal())) || (groupChatInfo.existsAdmin(player.getUniqueId()))) { - - args[2] = args[2].toLowerCase(); - args[3] = args[3].toLowerCase(); - - if ((args[2].equals("a")) || (args[2].equals("b")) || (args[2].equals("c")) || (args[2].equals("d")) - || (args[2].equals("e")) || (args[2].equals("f")) || (args[2].equals("0")) || (args[2].equals("1")) - || (args[2].equals("2")) || (args[2].equals("3")) || (args[2].equals("4")) || (args[2].equals("5")) - || (args[2].equals("6")) || (args[2].equals("7")) || (args[2].equals("8")) || (args[2].equals("9"))) { - - if ((args[3].equals("a")) || (args[3].equals("b")) || (args[3].equals("c")) || (args[3].equals("d")) - || (args[3].equals("e")) || (args[3].equals("f")) || (args[3].equals("0")) || (args[3].equals("1")) - || (args[3].equals("2")) || (args[3].equals("3")) || (args[3].equals("4")) || (args[3].equals("5")) - || (args[3].equals("6")) || (args[3].equals("7")) || (args[3].equals("8")) || (args[3].equals("9"))) { - - ds.getGroupChats().remove(groupChatInfo.getName()); - - groupChatInfo.setChatColor(args[2].charAt(0)); - groupChatInfo.setNameColor(args[3].charAt(0)); - - ds.getGroupChats().put(groupChatInfo.getName(), groupChatInfo); - - GCCommand.sendMessage(MessageManager.getMessage("groups_info_colors") + sender.getName(), "&lINFO", groupChatInfo); - - } else { - MessageManager.sendMessage(sender, "command_group_color_invalid"); - MessageManager.sendMessage(sender, "command_group_color_usage"); - } - - } else { - MessageManager.sendMessage(sender, "command_group_color_invalid"); - MessageManager.sendMessage(sender, "command_group_color_usage"); - } - - } else { - MessageManager.sendMessage(sender, "command_group_formal_not_admin"); - } - - groupChatInfo = null; - - } else { - MessageManager.sendSpecialMessage(sender, "command_group_does_not_exist", args[1].toUpperCase()); - } - - } else { - MessageManager.sendMessage(sender, "command_group_incorrect_usage"); - } - - break; - - } - - } else { - MessageManager.sendMessage(sender, "command_group_only_players"); - } - } - - @Override - public Iterable onTabComplete(CommandSender sender, String[] args) { - - Set matches = new HashSet(); - - if ( args.length == 1 ) { - - String search = args[0].toLowerCase(); - - List subCommands = new ArrayList(); - - subCommands.add("create"); - subCommands.add("join"); - subCommands.add("leave"); - subCommands.add("quit"); - subCommands.add("color"); - subCommands.add("colour"); - subCommands.add("transfer"); - subCommands.add("delete"); - subCommands.add("list"); - subCommands.add("members"); - subCommands.add("formal"); - subCommands.add("admin"); - subCommands.add("ban"); - - for ( String sub : subCommands ) { - if ( sub.toLowerCase().startsWith( search ) ) { - matches.add( sub ); - } - } - } - - return matches; - - } + private final Set args_zero = new HashSet<>(Arrays.asList("help", "members", "list", "spy", + "create", "make", "join", "quit", "leave", "formal", "delete", "transfer", "admin", "addadmin", + "removeadmin", "ban", "color") + ); + + public GroupCommand() { + super("mcgroup", "multichat.group", ConfigManager.getInstance().getHandler(ConfigFile.ALIASES).getConfig().getStringList("group").toArray(new String[0])); + } + + public void execute(CommandSender sender, String[] args) { + if (!(sender instanceof ProxiedPlayer)) { + MessageManager.sendMessage(sender, "command_group_only_players"); + return; + } + ProxiedPlayer proxiedPlayer = (ProxiedPlayer) sender; + UUID playerUID = proxiedPlayer.getUniqueId(); + + // TODO: This class needs some work in the future, then we can clean up this command more + GroupManager groupManager = new GroupManager(); + + String subCommand = args.length > 0 ? args[0].toLowerCase() : "help"; + String subArgument = args.length > 1 ? args[1].toLowerCase() : subCommand; + + ProxyDataStore proxyDataStore = MultiChatProxy.getInstance().getDataStore(); + + switch (subCommand) { + case "help": { + int page = 1; + try { + page = Integer.parseInt(subArgument); + } catch (NumberFormatException ignored) { + } + + groupManager.displayHelp(page, sender); + return; + } + case "members": + case "list": { + TGroupChatInfo groupChatInfo = getGroupChatFromName(proxyDataStore, proxiedPlayer, subArgument, false); + if (groupChatInfo == null) break; + + MessageManager.sendSpecialMessage(sender, "command_group_member_list", subArgument); + groupChatInfo.getMembers().forEach(member -> + MessageManager.sendSpecialMessage(sender, + "command_group_member_list_item" + (groupChatInfo.existsAdmin(member) ? "_admin" : ""), + UUIDNameManager.getName(member) + ) + ); + return; + } + case "spy": { + if (!proxiedPlayer.hasPermission("multichat.staff.spy")) { + MessageManager.sendMessage(sender, "command_group_spy_no_permission"); + return; + } + + if (subArgument.equals("all")) { + if (!proxyDataStore.getAllSpy().contains(playerUID)) { + proxyDataStore.getAllSpy().add(playerUID); + MessageManager.sendMessage(sender, "command_group_spy_all_enabled"); + return; + } + + proxyDataStore.getAllSpy().remove(playerUID); + MessageManager.sendMessage(sender, "command_group_spy_all_disabled_1"); + MessageManager.sendMessage(sender, "command_group_spy_all_disabled_2"); + MessageManager.sendMessage(sender, "command_group_spy_all_disabled_3"); + return; + } + + TGroupChatInfo groupChatInfo = getGroupChatFromName(proxyDataStore, proxiedPlayer, subArgument, false); + if (groupChatInfo == null) break; + + if (groupChatInfo.existsMember(playerUID)) { + MessageManager.sendMessage(sender, "command_group_spy_already_a_member"); + return; + } + + if (groupChatInfo.existsViewer(playerUID)) { + groupChatInfo.delViewer(playerUID); + proxyDataStore.getGroupChats().put(subArgument, groupChatInfo); + MessageManager.sendSpecialMessage(sender, "command_group_spy_off", subArgument); + return; + } + + groupChatInfo.addViewer(playerUID); + proxyDataStore.getGroupChats().put(subArgument, groupChatInfo); + MessageManager.sendSpecialMessage(sender, "command_group_spy_on", subArgument); + return; + } + case "create": + case "make": { + if (!proxiedPlayer.hasPermission("multichat.group.create")) { + MessageManager.sendMessage(sender, "command_group_create_no_permission"); + return; + } + + // TODO: Should probably make this configurable + if (subArgument.length() > 20) { + MessageManager.sendMessage(sender, "command_group_max_length"); + return; + } + + String password = args.length > 2 ? args[2] : ""; + if (password.length() > 20) { + MessageManager.sendMessage(sender, "command_group_max_length_password"); + return; + } + + if (proxyDataStore.getGroupChats().containsKey(subArgument)) { + MessageManager.sendSpecialMessage(sender, "command_group_already_exists", subArgument); + return; + } + + // Make the new group, select it and announce the join + groupManager.createGroup(subArgument, playerUID, false, ""); + // TODO: Should probably move this inside the createGroup (joinGroup for join below) + groupManager.setViewedChat(playerUID, subArgument); + MessageManager.sendSpecialMessage(sender, "command_group_created", subArgument); + + groupManager.announceJoinGroup(sender.getName(), subArgument); + return; + } + case "join": { + TGroupChatInfo groupChatInfo = getGroupChatFromName(proxyDataStore, proxiedPlayer, subArgument, false); + if (groupChatInfo == null) break; + + if (!groupManager.joinGroup(subArgument, proxiedPlayer, args.length > 2 ? args[2] : "")) + return; + + groupManager.setViewedChat(playerUID, subArgument); + MessageManager.sendSpecialMessage(sender, "command_group_joined", subArgument); + groupManager.announceJoinGroup(sender.getName(), subArgument); + return; + } + case "quit": + case "leave": { + TGroupChatInfo groupChatInfo = getGroupChatFromName(proxyDataStore, proxiedPlayer, subArgument, true); + if (groupChatInfo == null) break; + + groupManager.quitGroup(subArgument, playerUID, proxiedPlayer); + return; + } + case "formal": { + TGroupChatInfo groupChatInfo = getGroupChatFromName(proxyDataStore, proxiedPlayer, subArgument, true); + if (groupChatInfo == null) break; + + if (groupChatInfo.getFormal()) { + MessageManager.sendSpecialMessage(sender, "command_group_formal_already_formal", subArgument); + return; + } + + if (!groupChatInfo.getAdmins().contains(playerUID)) { + MessageManager.sendMessage(sender, "command_group_formal_not_owner"); + return; + } + + groupChatInfo.setFormal(true); + proxyDataStore.getGroupChats().put(subArgument, groupChatInfo); + // TODO: Excuse me what even is this + // We need to generalize sending messages at some point (and how placeholders are handled) + GCCommand.sendMessage(sender.getName() + MessageManager.getMessage("groups_info_formal"), "&lINFO", groupChatInfo); + return; + } + case "delete": { + TGroupChatInfo groupChatInfo = getGroupChatFromName(proxyDataStore, proxiedPlayer, subArgument, true); + if (groupChatInfo == null) break; + + if (!groupChatInfo.getAdmins().contains(playerUID)) { + MessageManager.sendMessage(sender, "command_group_formal_not_admin"); + return; + } + + proxyDataStore.getViewedChats().entrySet().forEach(entry -> { + if (entry.getValue() != null && entry.getValue().equals(subArgument)) + entry.setValue(null); + }); + + GCCommand.sendMessage(sender.getName() + MessageManager.getMessage("groups_info_deleted"), + "&lINFO", + groupChatInfo + ); + GCCommand.sendMessage(MessageManager.getMessage("groups_info_goodbye"), "&lINFO", groupChatInfo); + proxyDataStore.getGroupChats().remove(subArgument); + return; + } + case "transfer": { + if (args.length < 3) + break; + + TGroupChatInfo groupChatInfo = getGroupChatFromName(proxyDataStore, proxiedPlayer, subArgument, true); + if (groupChatInfo == null) break; + + if (groupChatInfo.getFormal()) { + MessageManager.sendMessage(sender, "command_group_transfer_not_informal"); + return; + } + + if (!groupChatInfo.existsAdmin(playerUID)) { + MessageManager.sendMessage(sender, "command_group_transfer_not_owner"); + return; + } + + ProxiedPlayer target = getProxiedTargetFromName(groupChatInfo, proxiedPlayer, args[2], true); + if (target == null) + return; + UUID targetUID = target.getUniqueId(); + + groupChatInfo.addAdmin(targetUID); + groupChatInfo.delAdmin(playerUID); + GCCommand.sendMessage(sender.getName() + MessageManager.getMessage("groups_info_transfer") + target.getName(), "&lINFO", groupChatInfo); + + proxyDataStore.getGroupChats().put(subArgument, groupChatInfo); + return; + } + case "admin": + case "addadmin": + case "removeadmin": { + if (args.length < 3) + break; + + TGroupChatInfo groupChatInfo = getGroupChatFromName(proxyDataStore, proxiedPlayer, subArgument, true); + if (groupChatInfo == null) break; + + if (!groupChatInfo.getFormal()) { + MessageManager.sendMessage(sender, "command_group_not_formal"); + return; + } + + if (!groupChatInfo.existsAdmin(playerUID)) { + MessageManager.sendMessage(sender, "command_group_formal_not_admin"); + return; + } + + ProxiedPlayer target = getProxiedTargetFromName(groupChatInfo, proxiedPlayer, args[2], true); + if (target == null) + return; + UUID targetUID = target.getUniqueId(); + + if (playerUID.equals(targetUID)) { + MessageManager.sendMessage(sender, "command_group_formal_cannot_demote"); + return; + } + + if (groupChatInfo.existsAdmin(targetUID)) { + groupChatInfo.delAdmin(targetUID); + GCCommand.sendMessage(target.getName() + MessageManager.getMessage("groups_info_step_down"), "&lINFO", groupChatInfo); + return; + } + + groupChatInfo.addAdmin(targetUID); + GCCommand.sendMessage(sender.getName() + MessageManager.getMessage("groups_info_promoted") + target.getName(), "&lINFO", groupChatInfo); + return; + } + case "ban": { + if (args.length < 3) + break; + + TGroupChatInfo groupChatInfo = getGroupChatFromName(proxyDataStore, proxiedPlayer, subArgument, true); + if (groupChatInfo == null) break; + + if (!groupChatInfo.getFormal()) { + MessageManager.sendMessage(sender, "command_group_not_formal"); + return; + } + + if (!groupChatInfo.existsAdmin(playerUID)) { + MessageManager.sendMessage(sender, "command_group_ban_not_admin"); + return; + } + + ProxiedPlayer target = getProxiedTargetFromName(groupChatInfo, proxiedPlayer, args[2], false); + if (target == null) + return; + UUID targetUID = target.getUniqueId(); + + if (groupChatInfo.existsAdmin(targetUID)) { + MessageManager.sendMessage(sender, "command_group_cannot_ban_admin"); + return; + } + + if (groupChatInfo.existsBanned(targetUID)) { + groupChatInfo.delBanned(targetUID); + proxyDataStore.getGroupChats().put(subArgument, groupChatInfo); + GCCommand.sendMessage(sender.getName() + MessageManager.getMessage("groups_info_unban") + target.getName(), "&lINFO", groupChatInfo); + MessageManager.sendSpecialMessage(target, "command_group_unbanned", subArgument); + return; + } + + groupChatInfo.addBanned(targetUID); + if (groupChatInfo.existsMember(targetUID)) { + groupChatInfo.delMember(targetUID); + groupChatInfo.delViewer(targetUID); + proxyDataStore.getViewedChats().put(targetUID, null); + + // TODO: I don't think we need to notify the user of being kicked AND banned further down below + GCCommand.sendMessage(sender.getName() + MessageManager.getMessage("groups_info_kick") + target.getName(), "&lINFO", groupChatInfo); + } + + proxyDataStore.getGroupChats().put(subArgument, groupChatInfo); + GCCommand.sendMessage(sender.getName() + MessageManager.getMessage("groups_info_ban") + target.getName(), "&lINFO", groupChatInfo); + MessageManager.sendSpecialMessage(target, "command_group_banned", subArgument); + return; + } + // Saving Private Byte + case "color": { + if (args.length < 4) + break; + + TGroupChatInfo groupChatInfo = getGroupChatFromName(proxyDataStore, proxiedPlayer, subArgument, true); + if (groupChatInfo == null) break; + + if (!groupChatInfo.existsMember(playerUID) + || (groupChatInfo.getFormal() && !groupChatInfo.existsAdmin(playerUID))) { + MessageManager.sendMessage(sender, "command_group_formal_not_admin"); + return; + } + + String chatColor = args[2].toLowerCase(); + String nameColor = args[3].toLowerCase(); + + if (!RegexUtil.COLOR_LEGACY.matcher(chatColor).matches() + || !RegexUtil.COLOR_LEGACY.matcher(nameColor).matches()) { + MessageManager.sendMessage(sender, "command_group_color_invalid"); + MessageManager.sendMessage(sender, "command_group_color_usage"); + return; + } + + groupChatInfo.setChatColor(chatColor.charAt(0)); + groupChatInfo.setNameColor(nameColor.charAt(0)); + + proxyDataStore.getGroupChats().put(subArgument, groupChatInfo); + GCCommand.sendMessage(MessageManager.getMessage("groups_info_colors") + sender.getName(), "&lINFO", groupChatInfo); + return; + } + default: { + TGroupChatInfo groupChatInfo = getGroupChatFromName(proxyDataStore, proxiedPlayer, subArgument, true); + if (groupChatInfo == null) break; + + proxyDataStore.getViewedChats().put(playerUID, subArgument); + MessageManager.sendSpecialMessage(sender, "command_group_selected", subArgument); + return; + } + } + + MessageManager.sendMessage(sender, "command_group_incorrect_usage"); + } + + private TGroupChatInfo getGroupChatFromName(ProxyDataStore proxyDataStore, ProxiedPlayer proxiedPlayer, String groupName, boolean checkMember) { + TGroupChatInfo groupChatInfo = proxyDataStore.getGroupChats().get(groupName); + if (groupChatInfo == null) { + MessageManager.sendSpecialMessage(proxiedPlayer, "command_group_does_not_exist", groupName); + return null; + } + + if (checkMember && !groupChatInfo.existsMember(proxiedPlayer.getUniqueId())) { + MessageManager.sendSpecialMessage(proxiedPlayer, "command_group_not_a_member", groupName); + return null; + } + + return groupChatInfo; + } + + private ProxiedPlayer getProxiedTargetFromName(TGroupChatInfo groupChatInfo, ProxiedPlayer proxiedPlayer, String name, boolean checkMember) { + ProxiedPlayer target = ProxyServer.getInstance().getPlayer(name); + if (target == null) { + MessageManager.sendMessage(proxiedPlayer, "command_group_player_not_online"); + return null; + } + UUID targetUID = target.getUniqueId(); + + if (checkMember && !groupChatInfo.existsMember(targetUID)) { + MessageManager.sendMessage(proxiedPlayer, "command_group_transfer_not_member"); + return null; + } + + return target; + } + + @Override + public Iterable onTabComplete(CommandSender sender, String[] args) { + Set matches = new HashSet<>(); + + if (args.length == 1) { + String search = args[0].toLowerCase(); + args_zero.forEach(subCommand -> { + if (subCommand.length() > search.length() + && subCommand.regionMatches(true, 0, search, 0, search.length())) + matches.add(subCommand); + }); + } + + return matches; + } } From 0ffc98ce1cce196a50420d7de59295adbd6084f3 Mon Sep 17 00:00:00 2001 From: OllieMartin Date: Wed, 5 Aug 2020 19:09:43 +0100 Subject: [PATCH 132/188] Removed all code relating to communicating the legacy "ignore map" --- .../bungee/commands/IgnoreCommand.java | 3 -- .../common/communication/CommChannels.java | 1 - .../LocalServerDataListener.java | 16 ------- .../local/common/storage/LocalDataStore.java | 19 -------- .../ProxyLocalCommunicationManager.java | 45 +------------------ 5 files changed, 1 insertion(+), 83 deletions(-) diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/IgnoreCommand.java b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/IgnoreCommand.java index 0dea3360..ab558808 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/IgnoreCommand.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/bungee/commands/IgnoreCommand.java @@ -7,7 +7,6 @@ import xyz.olivermartin.multichat.bungee.ChatControl; import xyz.olivermartin.multichat.bungee.ConfigManager; import xyz.olivermartin.multichat.bungee.MessageManager; -import xyz.olivermartin.multichat.proxy.common.ProxyLocalCommunicationManager; import xyz.olivermartin.multichat.proxy.common.config.ConfigFile; public class IgnoreCommand extends Command { @@ -51,8 +50,6 @@ public void execute(CommandSender sender, String[] args) { MessageManager.sendSpecialMessage(sender, "ignore_unignored", target.getName()); } - ProxyLocalCommunicationManager.sendIgnoreServerData(((ProxiedPlayer) sender).getServer().getInfo()); - } else { MessageManager.sendMessage(sender, "ignore_player_not_found"); diff --git a/multichat/src/main/java/xyz/olivermartin/multichat/common/communication/CommChannels.java b/multichat/src/main/java/xyz/olivermartin/multichat/common/communication/CommChannels.java index 2398f2c1..f337d013 100644 --- a/multichat/src/main/java/xyz/olivermartin/multichat/common/communication/CommChannels.java +++ b/multichat/src/main/java/xyz/olivermartin/multichat/common/communication/CommChannels.java @@ -109,7 +109,6 @@ public interface CommChannels { *

* This channel communicates the following from PROXY -> LOCAL: *