From 07fccda8d3ca871530ac37fcf92aac09dfa6dc79 Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Sat, 6 May 2017 19:55:04 +0200 Subject: [PATCH] Chat channels probably done, needs testing --- .../buttondevteam/chat/AnnouncerThread.java | 5 +- .../buttondevteam/chat/ChatProcessing.java | 43 +++++--------- .../java/buttondevteam/chat/PluginMain.java | 59 ++++++++++++++++++- .../chat/listener/PlayerListener.java | 2 +- 4 files changed, 78 insertions(+), 31 deletions(-) diff --git a/src/main/java/buttondevteam/chat/AnnouncerThread.java b/src/main/java/buttondevteam/chat/AnnouncerThread.java index 85980a9..b1b11da 100644 --- a/src/main/java/buttondevteam/chat/AnnouncerThread.java +++ b/src/main/java/buttondevteam/chat/AnnouncerThread.java @@ -2,10 +2,11 @@ package buttondevteam.chat; import org.bukkit.Bukkit; -public class AnnouncerThread { +public class AnnouncerThread implements Runnable { private static int AnnounceMessageIndex = 0; - public static void Run() { + @Override + public void run() { while (!PluginMain.Instance.stop) { try { Thread.sleep(PluginMain.AnnounceTime); diff --git a/src/main/java/buttondevteam/chat/ChatProcessing.java b/src/main/java/buttondevteam/chat/ChatProcessing.java index c2439a4..f641229 100644 --- a/src/main/java/buttondevteam/chat/ChatProcessing.java +++ b/src/main/java/buttondevteam/chat/ChatProcessing.java @@ -13,17 +13,12 @@ import org.bukkit.scoreboard.Objective; import com.earth2me.essentials.Essentials; import com.google.gson.Gson; import com.google.gson.GsonBuilder; -import com.palmergames.bukkit.towny.exceptions.NotRegisteredException; -import com.palmergames.bukkit.towny.object.Nation; -import com.palmergames.bukkit.towny.object.Resident; -import com.palmergames.bukkit.towny.object.Town; - import buttondevteam.chat.commands.UnlolCommand; import buttondevteam.chat.commands.ucmds.admin.DebugCommand; import buttondevteam.chat.formatting.*; +import buttondevteam.lib.TBMCChatEvent; import buttondevteam.lib.TBMCCoreAPI; import buttondevteam.lib.chat.Channel; -import buttondevteam.lib.chat.Channel.RecipientTestResult; import buttondevteam.lib.chat.TellrawSerializableEnum; import buttondevteam.lib.player.TBMCPlayer; import buttondevteam.lib.player.TBMCPlayerBase; @@ -83,8 +78,10 @@ public class ChatProcessing { .registerTypeAdapter(boolean.class, new TellrawSerializer.TwBool()).disableHtmlEscaping().create(); } - // Returns e.setCancelled for custom event - public static boolean ProcessChat(Channel channel, CommandSender sender, String message) { + public static boolean ProcessChat(TBMCChatEvent e) { + Channel channel = e.getChannel(); + CommandSender sender = e.getSender(); + String message = e.getMessage(); long processstart = System.nanoTime(); if (PluginMain.essentials == null) PluginMain.essentials = (Essentials) (Bukkit.getPluginManager().getPlugin("Essentials")); @@ -127,28 +124,20 @@ public class ChatProcessing { try { if (channel.filteranderrormsg != null) { Objective obj = PluginMain.SB.getObjective(channel.ID); - RecipientTestResult result = channel.filteranderrormsg.apply(player); - if (result.errormessage != null) - player.sendMessage("§c" + result.errormessage); - else - for (Player p : Bukkit.getOnlinePlayers()) { - if (p == player) - continue; - result = channel.filteranderrormsg.apply(p); - if (result.errormessage == null) - obj.getScore(p.getName()).setScore(result.score); - else - obj.getScore(p.getName()).setScore(-1); - } - PluginMain.Instance.getServer().dispatchCommand(PluginMain.Console, - String.format("tellraw @a[score_%s=%d,score_%s_min=%d] %s", channel.ID, result.score, jsonstr)); + int score; + obj.getScore(player.getUniqueId().toString()).setScore(score = e.getMCScore(player)); + for (Player p : Bukkit.getOnlinePlayers()) { + if (player == p) + continue; + obj.getScore(p.getUniqueId().toString()).setScore(e.getMCScore(p)); + } + PluginMain.Instance.getServer().dispatchCommand(PluginMain.Console, String.format( + "tellraw @a[score_%s=%d,score_%s_min=%d] %s", channel.ID, score, channel.ID, score, jsonstr)); } else PluginMain.Instance.getServer().dispatchCommand(PluginMain.Console, String.format("tellraw @a %s", jsonstr)); - } catch ( - - Exception e) { - TBMCCoreAPI.SendException("An error occured while sending a chat message!", e); + } catch (Exception ex) { + TBMCCoreAPI.SendException("An error occured while sending a chat message!", ex); player.sendMessage("§cAn error occured while sending the message."); return true; } diff --git a/src/main/java/buttondevteam/chat/PluginMain.java b/src/main/java/buttondevteam/chat/PluginMain.java index c43b2d3..b6c864f 100644 --- a/src/main/java/buttondevteam/chat/PluginMain.java +++ b/src/main/java/buttondevteam/chat/PluginMain.java @@ -5,6 +5,7 @@ import net.milkbowl.vault.economy.Economy; import net.milkbowl.vault.permission.Permission; import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; import org.bukkit.command.ConsoleCommandSender; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; @@ -17,7 +18,10 @@ import org.htmlcleaner.TagNode; import buttondevteam.chat.commands.YeehawCommand; import buttondevteam.chat.listener.PlayerListener; import buttondevteam.lib.TBMCCoreAPI; +import buttondevteam.lib.chat.Channel; +import buttondevteam.lib.chat.Color; import buttondevteam.lib.chat.TBMCChatAPI; +import buttondevteam.lib.chat.Channel.RecipientTestResult; import buttondevteam.lib.player.TBMCPlayerBase; import com.earth2me.essentials.Essentials; @@ -25,7 +29,9 @@ import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.palmergames.bukkit.towny.Towny; +import com.palmergames.bukkit.towny.exceptions.NotRegisteredException; import com.palmergames.bukkit.towny.object.Nation; +import com.palmergames.bukkit.towny.object.Resident; import com.palmergames.bukkit.towny.object.Town; import com.palmergames.bukkit.towny.object.TownyUniverse; @@ -54,6 +60,9 @@ public class PluginMain extends JavaPlugin { // Translated to Java: 2015.07.15. public static ArrayList Towns; public static ArrayList Nations; + public static Channel TownChat; + public static Channel NationChat; + /** *

* This variable is used as a cache for flair state checking when reading the flair thread. @@ -79,12 +88,17 @@ public class PluginMain extends JavaPlugin { // Translated to Java: 2015.07.15. Towns = new ArrayList(TU.getTownsMap().values()); // Creates a snapshot of towns, new towns will be added when needed Nations = new ArrayList(TU.getNationsMap().values()); // Same here but with nations + TBMCChatAPI.RegisterChatChannel( + TownChat = new Channel("§3TC§f", Color.DarkAqua, "tc", s -> checkTownNationChat(s, false))); + TBMCChatAPI.RegisterChatChannel( + NationChat = new Channel("§6NC§f", Color.Gold, "nc", s -> checkTownNationChat(s, true))); + setupChat(); setupEconomy(); setupPermissions(); new Thread(() -> FlairGetterThreadMethod()).start(); - new Thread(() -> AnnouncerThread.Run()).start(); + new Thread(new AnnouncerThread()).start(); } public Boolean stop = false; @@ -306,4 +320,47 @@ public class PluginMain extends JavaPlugin { // Translated to Java: 2015.07.15. return (economy != null); } + + /** + * Return the error message for the message sender if they can't send it and the score + */ + private static RecipientTestResult checkTownNationChat(CommandSender sender, boolean nationchat) { + if (!(sender instanceof Player)) + return new RecipientTestResult("§cYou are not a player!"); + try { + Resident resident = PluginMain.TU.getResidentMap().get(sender.getName().toLowerCase()); + if (resident != null && resident.getModes().contains("spy")) + return null; + /* + * p.sendMessage(String.format("[SPY-%s] - %s: %s", channel.DisplayName, ((Player) sender).getDisplayName(), message)); + */ + Town town = null; + if (resident != null && resident.hasTown()) + town = resident.getTown(); + if (town == null) + return new RecipientTestResult("You aren't in a town."); + Nation nation = null; + int index = -1; + if (nationchat) { + if (town.hasNation()) + nation = town.getNation(); + if (nation == null) + return new RecipientTestResult("Your town isn't in a nation."); + index = PluginMain.Nations.indexOf(nation); + if (index < 0) { + PluginMain.Nations.add(nation); + index = PluginMain.Nations.size() - 1; + } + } else { + index = PluginMain.Towns.indexOf(town); + if (index < 0) { + PluginMain.Towns.add(town); + index = PluginMain.Towns.size() - 1; + } + } + return new RecipientTestResult(index); + } catch (NotRegisteredException e) { + return new RecipientTestResult("You (probably) aren't knwon by Towny! (Not in a town)"); + } + } } diff --git a/src/main/java/buttondevteam/chat/listener/PlayerListener.java b/src/main/java/buttondevteam/chat/listener/PlayerListener.java index 1c03829..2664777 100644 --- a/src/main/java/buttondevteam/chat/listener/PlayerListener.java +++ b/src/main/java/buttondevteam/chat/listener/PlayerListener.java @@ -274,7 +274,7 @@ public class PlayerListener implements Listener { try { if (e.isCancelled()) return; - e.setCancelled(ChatProcessing.ProcessChat(e.getChannel(), e.getSender(), e.getMessage())); + e.setCancelled(ChatProcessing.ProcessChat(e)); } catch (Exception ex) { for (Player p : Bukkit.getOnlinePlayers()) p.sendMessage("§c!§r["