From 7448eb7e3a8560a0a1ea48b96e2f91a00673a3bc Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Sat, 27 Jun 2020 03:00:08 +0200 Subject: [PATCH] 1.16 updates, fixes --- .../java/buttondevteam/chat/ChatUtils.java | 21 ++++++++++++------ .../java/buttondevteam/chat/VanillaUtils.java | 8 +++++-- .../components/formatter/ChatProcessing.java | 11 ++++++---- .../chat/components/towny/TownyComponent.java | 22 ++++++++++++------- .../chat/listener/PlayerListener.java | 2 +- src/main/resources/plugin.yml | 3 ++- 6 files changed, 44 insertions(+), 23 deletions(-) diff --git a/src/main/java/buttondevteam/chat/ChatUtils.java b/src/main/java/buttondevteam/chat/ChatUtils.java index 9a3b15e..6889f3b 100644 --- a/src/main/java/buttondevteam/chat/ChatUtils.java +++ b/src/main/java/buttondevteam/chat/ChatUtils.java @@ -1,12 +1,13 @@ package buttondevteam.chat; +import buttondevteam.core.component.channel.Channel; import buttondevteam.lib.ChromaUtils; import buttondevteam.lib.TBMCChatEvent; import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import java.util.Optional; -import java.util.function.Function; public final class ChatUtils { public static final String MCORIGIN = "Minecraft"; //Shouldn't change, like ever - TBMCPlayer.getFolderForType(TBMCPlayer.class) capitalized @@ -44,16 +45,22 @@ public final class ChatUtils { /** * Sends a regular (non-Markdown) chat message. Used as a fallback if the chat processing fails. * - * @param e The chat event - * @param modifier A function that alters the message to be displayed to the player + * @param e The chat event */ - public static void sendChatMessage(TBMCChatEvent e, Function modifier) { - var str = "[" + e.getChannel().DisplayName().get() + "] <" - + ChromaUtils.getDisplayName(e.getSender()) + "> " + e.getMessage(); - str = modifier.apply(str); + public static void sendChatMessage(TBMCChatEvent e) { + var str = getMessageString(e.getChannel(), e.getSender(), e.getMessage()); for (Player p : Bukkit.getOnlinePlayers()) if (e.shouldSendTo(p)) p.sendMessage(str); Bukkit.getConsoleSender().sendMessage(str); } + + public static String getMessageString(Channel channel, CommandSender sender, String message) { + return "§c!§r[" + channel.DisplayName().get() + "] <" + + ChromaUtils.getDisplayName(sender) + "> " + message; + } + + public static void sendChatMessage(Channel channel, CommandSender sender, String message, CommandSender to) { + to.sendMessage(getMessageString(channel, sender, message)); + } } diff --git a/src/main/java/buttondevteam/chat/VanillaUtils.java b/src/main/java/buttondevteam/chat/VanillaUtils.java index fbbdbf3..54cd810 100644 --- a/src/main/java/buttondevteam/chat/VanillaUtils.java +++ b/src/main/java/buttondevteam/chat/VanillaUtils.java @@ -6,6 +6,7 @@ import lombok.experimental.UtilityClass; import lombok.val; import org.bukkit.entity.Player; +import java.lang.reflect.Array; import java.util.function.BiPredicate; import java.util.function.Predicate; @@ -81,7 +82,9 @@ public class VanillaUtils { val handle = hm.invoke(p); val nms = handle.getClass().getPackage().getName(); val chatcompcl = Class.forName(nms + ".IChatBaseComponent"); - val sendmsg = handle.getClass().getMethod("sendMessage", chatcompcl); + //val chatcomarrcl = Class.forName("[L" + chatcompcl.getName() + ";"); + val chatcomparr = Array.newInstance(chatcompcl, 1); + val sendmsg = handle.getClass().getMethod("sendMessage", chatcomparr.getClass()); /*val ccucl = Class.forName(nms + ".ChatComponentUtils"); val iclcl = Class.forName(nms + ".ICommandListener"); @@ -97,7 +100,8 @@ public class VanillaUtils { val hhandle = hm.invoke(pl); val deserialized = am.invoke(null, jsonStr); //val filtered = ffdm.invoke(null, hhandle, deserialized, hhandle); - sendmsg.invoke(hhandle, deserialized); + Array.set(chatcomparr, 0, deserialized); + sendmsg.invoke(hhandle, chatcomparr); return true; } catch (Exception e) { e.printStackTrace(); diff --git a/src/main/java/buttondevteam/chat/components/formatter/ChatProcessing.java b/src/main/java/buttondevteam/chat/components/formatter/ChatProcessing.java index 2986ad6..d83a760 100644 --- a/src/main/java/buttondevteam/chat/components/formatter/ChatProcessing.java +++ b/src/main/java/buttondevteam/chat/components/formatter/ChatProcessing.java @@ -173,7 +173,8 @@ public class ChatProcessing { return true; } val tc = ComponentManager.getIfEnabled(TownyComponent.class); - if (tc != null) tc.handleSpiesInit(channel, json, ChatProcessing::toJson); + Consumer spyConsumer = null; + if (tc != null) spyConsumer = tc.handleSpiesInit(channel, json, ChatProcessing::toJson, sender, message); for (Player p : Bukkit.getOnlinePlayers()) { final String group; if (player != null @@ -182,13 +183,15 @@ public class ChatProcessing { else group = VanillaUtils.getGroupIfChatOn(p, e); if (senderGroup.equals(group)) - VanillaUtils.tellRaw(p, jsonstr); - else if (tc != null) tc.handleSpies(channel, p); + if (!VanillaUtils.tellRaw(p, jsonstr)) + p.sendMessage(ChatUtils.getMessageString(channel, sender, message)); + else if (tc != null) spyConsumer.accept(p); //Only sends if didn't send normally } } else for (Player p : Bukkit.getOnlinePlayers()) - VanillaUtils.tellRaw(p, jsonstr); + if (!VanillaUtils.tellRaw(p, jsonstr)) + ChatUtils.sendChatMessage(channel, sender, message, p); } catch (Exception ex) { TBMCCoreAPI.SendException("An error occured while sending a chat message!", ex); sender.sendMessage("§cAn error occured while sending the message."); diff --git a/src/main/java/buttondevteam/chat/components/towny/TownyComponent.java b/src/main/java/buttondevteam/chat/components/towny/TownyComponent.java index e6f9600..7d76f99 100644 --- a/src/main/java/buttondevteam/chat/components/towny/TownyComponent.java +++ b/src/main/java/buttondevteam/chat/components/towny/TownyComponent.java @@ -1,5 +1,6 @@ package buttondevteam.chat.components.towny; +import buttondevteam.chat.ChatUtils; import buttondevteam.chat.PluginMain; import buttondevteam.chat.VanillaUtils; import buttondevteam.chat.components.formatter.formatting.TellrawPart; @@ -18,6 +19,7 @@ import org.bukkit.entity.Player; import java.util.ArrayList; import java.util.List; +import java.util.function.Consumer; import java.util.function.Function; import java.util.stream.Collectors; @@ -37,8 +39,10 @@ public class TownyComponent extends Component { protected void enable() { try { try { - dataSource = (TownyDataSource) Class.forName("com.palmergames.bukkit.towny.TownyUniverse").getMethod("getDataSource") - .invoke(null); + var tucl = Class.forName("com.palmergames.bukkit.towny.TownyUniverse"); + var tu = tucl.getMethod("getInstance").invoke(null); + dataSource = (TownyDataSource) tucl.getMethod("getDataSource") + .invoke(tu); } catch (ClassNotFoundException e) { dataSource = (TownyDataSource) Class.forName("com.palmergames.bukkit.towny.object.TownyUniverse").getMethod("getDataSource") .invoke(null); @@ -60,20 +64,22 @@ public class TownyComponent extends Component { TownyAnnouncer.setdown(); } - public void handleSpiesInit(Channel channel, TellrawPart json, Function toJson) { + public Consumer handleSpiesInit(Channel channel, TellrawPart json, Function toJson, + CommandSender sender, String message) { if (channel.ID.equals(TownChat.ID) || channel.ID.equals(NationChat.ID)) { ((List) json.getExtra()).add(0, new TellrawPart("[SPY]")); - jsonstr = toJson.apply(json); + String jsonstr = toJson.apply(json); + return p -> handleSpies(channel, p, jsonstr, sender, message); } + return p -> {}; } - private String jsonstr; - - public void handleSpies(Channel channel, Player p) { + private void handleSpies(Channel channel, Player p, String jsonstr, CommandSender sender, String message) { if (channel.ID.equals(TownChat.ID) || channel.ID.equals(NationChat.ID)) { try { if (dataSource.getResident(p.getName()).hasMode("spy")) - VanillaUtils.tellRaw(p, jsonstr); + if (!VanillaUtils.tellRaw(p, jsonstr)) + ChatUtils.sendChatMessage(channel, sender, message, p); } catch (NotRegisteredException ignored) { } } diff --git a/src/main/java/buttondevteam/chat/listener/PlayerListener.java b/src/main/java/buttondevteam/chat/listener/PlayerListener.java index dbaf99b..39e994b 100644 --- a/src/main/java/buttondevteam/chat/listener/PlayerListener.java +++ b/src/main/java/buttondevteam/chat/listener/PlayerListener.java @@ -87,7 +87,7 @@ public class PlayerListener implements Listener { if (e.shouldSendTo(p)) p.sendMessage("[" + e.getChannel().DisplayName().get() + "] §cSome features in the message below might be unavailable due to an error."); } - ChatUtils.sendChatMessage(e, s -> "§c!§r" + s); + ChatUtils.sendChatMessage(e); TBMCCoreAPI.SendException("An error occured while processing a chat message!", ex); } } diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 5eefc33..bab4949 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -45,4 +45,5 @@ permissions: default: false tbmc.badge.diamond: description: Gives a cool patron badge. - default: false \ No newline at end of file + default: false +api-version: '1.13'