From d13dfc3eb2b89cf968ebc66c0c1f930ccdb8b932 Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Mon, 2 Jan 2017 00:03:56 +0100 Subject: [PATCH 1/8] Added /waitwhat or /ww --- .../chat/commands/WaitWhatCommand.java | 49 +++++++++++++++++++ src/main/resources/plugin.yml | 3 ++ 2 files changed, 52 insertions(+) create mode 100644 src/main/java/buttondevteam/chat/commands/WaitWhatCommand.java diff --git a/src/main/java/buttondevteam/chat/commands/WaitWhatCommand.java b/src/main/java/buttondevteam/chat/commands/WaitWhatCommand.java new file mode 100644 index 0000000..7d55fc4 --- /dev/null +++ b/src/main/java/buttondevteam/chat/commands/WaitWhatCommand.java @@ -0,0 +1,49 @@ +package buttondevteam.chat.commands; + +import java.util.Arrays; +import java.util.stream.Collectors; + +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import buttondevteam.chat.ChatPlayer; +import buttondevteam.lib.TBMCPlayer; +import buttondevteam.lib.chat.Channel; +import buttondevteam.lib.chat.TBMCChatAPI; +import buttondevteam.lib.chat.TBMCCommandBase; + +public class WaitWhatCommand extends TBMCCommandBase { + @Override + public boolean OnCommand(CommandSender sender, String alias, String[] args) { + Channel channel; + if (sender instanceof Player && ((Player) sender).isOnline()) + channel = TBMCPlayer.getPlayer((Player) sender).asPluginPlayer(ChatPlayer.class).CurrentChannel; + else + channel = Channel.GlobalChat; + final String message; + if (args.length == 0) + message = "wait what"; + else + message = "wait " + Arrays.stream(args).collect(Collectors.joining(" ")) + " what"; + TBMCChatAPI.SendChatMessage(channel, sender, message); + return true; + } + + @Override + public String[] GetHelpText(String alias) { + return new String[] { // + "§6--- Wait what ----", // + "Wait what" // + }; + } + + @Override + public boolean GetPlayerOnly() { + return false; + } + + @Override + public boolean GetModOnly() { + return false; + } +} diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 0358249..e7e3e4e 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -23,6 +23,9 @@ commands: description: Shrug. yeehaw: description: This command makes you yeehaw. + waitwhat: + description: Wait what. + aliases: ww author: NorbiPeti depend: - Essentials From a36c6b564b28e432a5f5536477f2385a31b9ae04 Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Mon, 2 Jan 2017 01:19:38 +0100 Subject: [PATCH 2/8] Applied changes --- src/main/java/buttondevteam/chat/ChatPlayer.java | 2 +- src/main/java/buttondevteam/chat/ChatProcessing.java | 2 +- src/main/java/buttondevteam/chat/PluginMain.java | 4 ++-- .../java/buttondevteam/chat/commands/ChatonlyCommand.java | 2 +- src/main/java/buttondevteam/chat/commands/OOCCommand.java | 2 +- .../java/buttondevteam/chat/commands/WaitWhatCommand.java | 2 +- .../java/buttondevteam/chat/commands/YeehawCommand.java | 2 +- .../chat/commands/appendtext/AppendTextCommandBase.java | 2 +- .../buttondevteam/chat/commands/ucmds/AcceptCommand.java | 2 +- .../java/buttondevteam/chat/commands/ucmds/CCommand.java | 2 +- .../buttondevteam/chat/commands/ucmds/IgnoreCommand.java | 2 +- .../buttondevteam/chat/commands/ucmds/InfoCommand.java | 4 ++-- .../chat/commands/ucmds/admin/PlayerInfoCommand.java | 2 +- .../chat/commands/ucmds/admin/SetFlairCommand.java | 2 +- .../chat/listener/PlayerJoinLeaveListener.java | 8 ++++---- .../java/buttondevteam/chat/listener/PlayerListener.java | 7 ++++--- 16 files changed, 24 insertions(+), 23 deletions(-) diff --git a/src/main/java/buttondevteam/chat/ChatPlayer.java b/src/main/java/buttondevteam/chat/ChatPlayer.java index 9af729c..70a563e 100644 --- a/src/main/java/buttondevteam/chat/ChatPlayer.java +++ b/src/main/java/buttondevteam/chat/ChatPlayer.java @@ -6,8 +6,8 @@ import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.entity.Player; -import buttondevteam.lib.TBMCPlayer; import buttondevteam.lib.chat.*; +import buttondevteam.lib.player.TBMCPlayer; public class ChatPlayer extends TBMCPlayer { public String getUserName() { diff --git a/src/main/java/buttondevteam/chat/ChatProcessing.java b/src/main/java/buttondevteam/chat/ChatProcessing.java index 8cf9b81..c4f91d1 100644 --- a/src/main/java/buttondevteam/chat/ChatProcessing.java +++ b/src/main/java/buttondevteam/chat/ChatProcessing.java @@ -22,9 +22,9 @@ import buttondevteam.chat.commands.UnlolCommand; import buttondevteam.chat.commands.ucmds.admin.DebugCommand; import buttondevteam.chat.formatting.*; import buttondevteam.lib.TBMCCoreAPI; -import buttondevteam.lib.TBMCPlayer; import buttondevteam.lib.chat.Channel; import buttondevteam.lib.chat.TellrawSerializableEnum; +import buttondevteam.lib.player.TBMCPlayer; import buttondevteam.chat.listener.PlayerListener; import buttondevteam.lib.chat.*; diff --git a/src/main/java/buttondevteam/chat/PluginMain.java b/src/main/java/buttondevteam/chat/PluginMain.java index 2a131e9..4bb610e 100644 --- a/src/main/java/buttondevteam/chat/PluginMain.java +++ b/src/main/java/buttondevteam/chat/PluginMain.java @@ -17,8 +17,8 @@ import org.htmlcleaner.TagNode; import buttondevteam.chat.commands.YeehawCommand; import buttondevteam.chat.listener.PlayerListener; import buttondevteam.lib.TBMCCoreAPI; -import buttondevteam.lib.TBMCPlayer; import buttondevteam.lib.chat.TBMCChatAPI; +import buttondevteam.lib.player.TBMCPlayer; import com.earth2me.essentials.Essentials; import com.google.gson.JsonArray; @@ -57,7 +57,7 @@ public class PluginMain extends JavaPlugin { // Translated to Java: 2015.07.15. * This variable is used as a cache for flair state checking when reading the flair thread. *

*

- * It's used because normally it has to load all associated player files every time to read the filename + * It's used because normally it has to load all associated player files every time to read the flair state *

*/ private Set PlayersWithFlairs = new HashSet<>(); diff --git a/src/main/java/buttondevteam/chat/commands/ChatonlyCommand.java b/src/main/java/buttondevteam/chat/commands/ChatonlyCommand.java index 90a71f9..cfb56b3 100644 --- a/src/main/java/buttondevteam/chat/commands/ChatonlyCommand.java +++ b/src/main/java/buttondevteam/chat/commands/ChatonlyCommand.java @@ -5,8 +5,8 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import buttondevteam.chat.ChatPlayer; -import buttondevteam.lib.TBMCPlayer; import buttondevteam.lib.chat.TBMCCommandBase; +import buttondevteam.lib.player.TBMCPlayer; public final class ChatonlyCommand extends TBMCCommandBase { diff --git a/src/main/java/buttondevteam/chat/commands/OOCCommand.java b/src/main/java/buttondevteam/chat/commands/OOCCommand.java index c297a21..1bfce80 100644 --- a/src/main/java/buttondevteam/chat/commands/OOCCommand.java +++ b/src/main/java/buttondevteam/chat/commands/OOCCommand.java @@ -4,8 +4,8 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import buttondevteam.chat.ChatPlayer; -import buttondevteam.lib.TBMCPlayer; import buttondevteam.lib.chat.TBMCCommandBase; +import buttondevteam.lib.player.TBMCPlayer; public final class OOCCommand extends TBMCCommandBase { diff --git a/src/main/java/buttondevteam/chat/commands/WaitWhatCommand.java b/src/main/java/buttondevteam/chat/commands/WaitWhatCommand.java index 7d55fc4..41a883b 100644 --- a/src/main/java/buttondevteam/chat/commands/WaitWhatCommand.java +++ b/src/main/java/buttondevteam/chat/commands/WaitWhatCommand.java @@ -7,10 +7,10 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import buttondevteam.chat.ChatPlayer; -import buttondevteam.lib.TBMCPlayer; import buttondevteam.lib.chat.Channel; import buttondevteam.lib.chat.TBMCChatAPI; import buttondevteam.lib.chat.TBMCCommandBase; +import buttondevteam.lib.player.TBMCPlayer; public class WaitWhatCommand extends TBMCCommandBase { @Override diff --git a/src/main/java/buttondevteam/chat/commands/YeehawCommand.java b/src/main/java/buttondevteam/chat/commands/YeehawCommand.java index 1c7117d..a8f6d94 100644 --- a/src/main/java/buttondevteam/chat/commands/YeehawCommand.java +++ b/src/main/java/buttondevteam/chat/commands/YeehawCommand.java @@ -4,8 +4,8 @@ import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import buttondevteam.lib.TBMCYEEHAWEvent; import buttondevteam.lib.chat.TBMCCommandBase; +import buttondevteam.lib.player.TBMCYEEHAWEvent; public class YeehawCommand extends TBMCCommandBase { diff --git a/src/main/java/buttondevteam/chat/commands/appendtext/AppendTextCommandBase.java b/src/main/java/buttondevteam/chat/commands/appendtext/AppendTextCommandBase.java index a81d352..fedc642 100644 --- a/src/main/java/buttondevteam/chat/commands/appendtext/AppendTextCommandBase.java +++ b/src/main/java/buttondevteam/chat/commands/appendtext/AppendTextCommandBase.java @@ -5,10 +5,10 @@ import org.bukkit.entity.Player; import buttondevteam.chat.ChatPlayer; import buttondevteam.chat.listener.PlayerListener; -import buttondevteam.lib.TBMCPlayer; import buttondevteam.lib.chat.Channel; import buttondevteam.lib.chat.TBMCChatAPI; import buttondevteam.lib.chat.TBMCCommandBase; +import buttondevteam.lib.player.TBMCPlayer; public abstract class AppendTextCommandBase extends TBMCCommandBase { diff --git a/src/main/java/buttondevteam/chat/commands/ucmds/AcceptCommand.java b/src/main/java/buttondevteam/chat/commands/ucmds/AcceptCommand.java index 4eb8bad..981d9e7 100644 --- a/src/main/java/buttondevteam/chat/commands/ucmds/AcceptCommand.java +++ b/src/main/java/buttondevteam/chat/commands/ucmds/AcceptCommand.java @@ -10,7 +10,7 @@ import buttondevteam.chat.FlairStates; import buttondevteam.chat.PlayerJoinTimerTask; import buttondevteam.chat.PluginMain; import buttondevteam.lib.TBMCCoreAPI; -import buttondevteam.lib.TBMCPlayer; +import buttondevteam.lib.player.TBMCPlayer; public class AcceptCommand extends UCommandBase { diff --git a/src/main/java/buttondevteam/chat/commands/ucmds/CCommand.java b/src/main/java/buttondevteam/chat/commands/ucmds/CCommand.java index f0eeef7..b122092 100644 --- a/src/main/java/buttondevteam/chat/commands/ucmds/CCommand.java +++ b/src/main/java/buttondevteam/chat/commands/ucmds/CCommand.java @@ -5,8 +5,8 @@ import org.bukkit.entity.Player; import buttondevteam.chat.ChatPlayer; import buttondevteam.chat.PluginMain; -import buttondevteam.lib.TBMCPlayer; import buttondevteam.lib.chat.*; +import buttondevteam.lib.player.TBMCPlayer; public class CCommand extends UCommandBase { diff --git a/src/main/java/buttondevteam/chat/commands/ucmds/IgnoreCommand.java b/src/main/java/buttondevteam/chat/commands/ucmds/IgnoreCommand.java index 9bd5c5c..7747b33 100644 --- a/src/main/java/buttondevteam/chat/commands/ucmds/IgnoreCommand.java +++ b/src/main/java/buttondevteam/chat/commands/ucmds/IgnoreCommand.java @@ -5,7 +5,7 @@ import org.bukkit.entity.Player; import buttondevteam.chat.ChatPlayer; import buttondevteam.chat.FlairStates; -import buttondevteam.lib.TBMCPlayer; +import buttondevteam.lib.player.TBMCPlayer; public final class IgnoreCommand extends UCommandBase { diff --git a/src/main/java/buttondevteam/chat/commands/ucmds/InfoCommand.java b/src/main/java/buttondevteam/chat/commands/ucmds/InfoCommand.java index d5ce558..522f2e9 100644 --- a/src/main/java/buttondevteam/chat/commands/ucmds/InfoCommand.java +++ b/src/main/java/buttondevteam/chat/commands/ucmds/InfoCommand.java @@ -2,8 +2,8 @@ package buttondevteam.chat.commands.ucmds; import org.bukkit.command.CommandSender; -import buttondevteam.lib.TBMCPlayer; -import buttondevteam.lib.TBMCPlayer.InfoTarget; +import buttondevteam.lib.player.TBMCPlayer; +import buttondevteam.lib.player.TBMCPlayer.InfoTarget; public class InfoCommand extends UCommandBase { diff --git a/src/main/java/buttondevteam/chat/commands/ucmds/admin/PlayerInfoCommand.java b/src/main/java/buttondevteam/chat/commands/ucmds/admin/PlayerInfoCommand.java index 5a2401d..a181957 100644 --- a/src/main/java/buttondevteam/chat/commands/ucmds/admin/PlayerInfoCommand.java +++ b/src/main/java/buttondevteam/chat/commands/ucmds/admin/PlayerInfoCommand.java @@ -3,7 +3,7 @@ package buttondevteam.chat.commands.ucmds.admin; import org.bukkit.command.CommandSender; import buttondevteam.chat.ChatPlayer; -import buttondevteam.lib.TBMCPlayer; +import buttondevteam.lib.player.TBMCPlayer; public class PlayerInfoCommand extends AdminCommandBase { diff --git a/src/main/java/buttondevteam/chat/commands/ucmds/admin/SetFlairCommand.java b/src/main/java/buttondevteam/chat/commands/ucmds/admin/SetFlairCommand.java index 1f0934f..419d2ef 100644 --- a/src/main/java/buttondevteam/chat/commands/ucmds/admin/SetFlairCommand.java +++ b/src/main/java/buttondevteam/chat/commands/ucmds/admin/SetFlairCommand.java @@ -6,7 +6,7 @@ import org.bukkit.entity.Player; import buttondevteam.chat.ChatPlayer; import buttondevteam.chat.FlairStates; -import buttondevteam.lib.TBMCPlayer; +import buttondevteam.lib.player.TBMCPlayer; public class SetFlairCommand extends AdminCommandBase { diff --git a/src/main/java/buttondevteam/chat/listener/PlayerJoinLeaveListener.java b/src/main/java/buttondevteam/chat/listener/PlayerJoinLeaveListener.java index 8d8aff2..84119bc 100644 --- a/src/main/java/buttondevteam/chat/listener/PlayerJoinLeaveListener.java +++ b/src/main/java/buttondevteam/chat/listener/PlayerJoinLeaveListener.java @@ -17,10 +17,10 @@ import buttondevteam.chat.ChatPlayer; import buttondevteam.chat.FlairStates; import buttondevteam.chat.PlayerJoinTimerTask; import buttondevteam.chat.PluginMain; -import buttondevteam.lib.TBMCPlayerAddEvent; -import buttondevteam.lib.TBMCPlayerJoinEvent; -import buttondevteam.lib.TBMCPlayerLoadEvent; -import buttondevteam.lib.TBMCPlayerSaveEvent; +import buttondevteam.lib.player.TBMCPlayerAddEvent; +import buttondevteam.lib.player.TBMCPlayerJoinEvent; +import buttondevteam.lib.player.TBMCPlayerLoadEvent; +import buttondevteam.lib.player.TBMCPlayerSaveEvent; public class PlayerJoinLeaveListener implements Listener { diff --git a/src/main/java/buttondevteam/chat/listener/PlayerListener.java b/src/main/java/buttondevteam/chat/listener/PlayerListener.java index e6234e0..99988fe 100644 --- a/src/main/java/buttondevteam/chat/listener/PlayerListener.java +++ b/src/main/java/buttondevteam/chat/listener/PlayerListener.java @@ -31,11 +31,12 @@ import buttondevteam.chat.ChatProcessing; import buttondevteam.chat.PluginMain; import buttondevteam.lib.TBMCChatEvent; import buttondevteam.lib.TBMCCoreAPI; -import buttondevteam.lib.TBMCPlayer; -import buttondevteam.lib.TBMCPlayer.InfoTarget; import buttondevteam.lib.chat.Channel; import buttondevteam.lib.chat.TBMCChatAPI; -import buttondevteam.lib.TBMCPlayerGetInfoEvent; +import buttondevteam.lib.player.TBMCPlayer; +import buttondevteam.lib.player.TBMCPlayerGetInfoEvent; +import buttondevteam.lib.player.TBMCPlayer.InfoTarget; + import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; import com.palmergames.bukkit.towny.exceptions.NotRegisteredException; From fa95891a6af0353e4abf3ba5afd6e3751b98b285 Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Sun, 2 Apr 2017 00:01:49 +0200 Subject: [PATCH 3/8] Updated ButtonChat to the newer system --- .../java/buttondevteam/chat/ChatPlayer.java | 120 +++++++----------- .../buttondevteam/chat/ChatProcessing.java | 35 ++--- .../java/buttondevteam/chat/PluginMain.java | 34 ++--- .../chat/commands/ChatonlyCommand.java | 2 +- .../chat/commands/OOCCommand.java | 2 +- .../chat/commands/WaitWhatCommand.java | 2 +- .../appendtext/AppendTextCommandBase.java | 3 +- .../chat/commands/ucmds/AcceptCommand.java | 20 +-- .../chat/commands/ucmds/CCommand.java | 2 +- .../chat/commands/ucmds/IgnoreCommand.java | 12 +- .../chat/commands/ucmds/InfoCommand.java | 13 +- .../ucmds/admin/PlayerInfoCommand.java | 16 +-- .../commands/ucmds/admin/SetFlairCommand.java | 16 +-- .../listener/PlayerJoinLeaveListener.java | 24 +--- .../chat/listener/PlayerListener.java | 39 +++--- 15 files changed, 158 insertions(+), 182 deletions(-) diff --git a/src/main/java/buttondevteam/chat/ChatPlayer.java b/src/main/java/buttondevteam/chat/ChatPlayer.java index 70a563e..a345e2f 100644 --- a/src/main/java/buttondevteam/chat/ChatPlayer.java +++ b/src/main/java/buttondevteam/chat/ChatPlayer.java @@ -7,69 +7,42 @@ import org.bukkit.Location; import org.bukkit.entity.Player; import buttondevteam.lib.chat.*; -import buttondevteam.lib.player.TBMCPlayer; +import buttondevteam.lib.player.EnumPlayerData; +import buttondevteam.lib.player.PlayerClass; +import buttondevteam.lib.player.PlayerData; +import buttondevteam.lib.player.TBMCPlayerBase; -public class ChatPlayer extends TBMCPlayer { - public String getUserName() { - return getData(); +@PlayerClass(pluginname = "ButtonChat") +public class ChatPlayer extends TBMCPlayerBase { + public PlayerData UserName() { + return data(); } - public void setUserName(String name) { - setData(name); + public List UserNames() { + PlayerData> data = data(); + if (data.get() == null) + data.set(new ArrayList()); + return data.get(); } - public List getUserNames() { - List data = getData(); - if (data == null) - setUserNames(data = new ArrayList()); - return data; + public PlayerData FlairTime() { + return data(); } - public void setUserNames(List names) { - setData(names); + public EnumPlayerData FlairState() { + return dataEnum(FlairStates.class); } - public short getFlairTime() { - return getIntData(Short.class).orElse(FlairTimeNone); + public PlayerData FCount() { + return data(); } - private void setFlairTime(short time) { - setIntData(time); + public PlayerData FDeaths() { + return data(); } - public FlairStates getFlairState() { - FlairStates data = getEnumData(FlairStates.class); - if (data == null) - setFlairState(data = FlairStates.NoComment); - return data; - } - - public void setFlairState(FlairStates state) { - setEnumData(state); - } - - public int getFCount() { - return getIntData(Integer.class).orElse(0); - } - - public void setFCount(int count) { - setIntData(count); - } - - public int getFDeaths() { - return getIntData(Integer.class).orElse(0); - } - - public void setFDeaths(int count) { - setIntData(count); - } - - public boolean getFlairCheater() { - return getBoolData(); - } - - private void setFlairCheater(boolean cheater) { - setData(cheater); + public PlayerData FlairCheater() { + return data(); } public boolean RPMode = true; @@ -83,9 +56,9 @@ public class ChatPlayer extends TBMCPlayer { public boolean ChatOnly = false; public int LoginWarningCount = 0; - public static final short FlairTimeNonPresser = -1; - public static final short FlairTimeCantPress = -2; - public static final short FlairTimeNone = -3; + public static final int FlairTimeNonPresser = -1; + public static final int FlairTimeCantPress = -2; + public static final int FlairTimeNone = -3; /** * Gets the player's flair, optionally formatting for Minecraft. @@ -95,14 +68,15 @@ public class ChatPlayer extends TBMCPlayer { * @return The flair */ public String GetFormattedFlair(boolean noformats) { - if (getFlairTime() == FlairTimeCantPress) + int time = FlairTime().getOrDefault(FlairTimeNone); + if (time == FlairTimeCantPress) return String.format(noformats ? "(can't press)" : "§r(--s)§r"); - if (getFlairTime() == FlairTimeNonPresser) + if (time == FlairTimeNonPresser) return String.format(noformats ? "(non-presser)" : "§7(--s)§r"); - if (getFlairTime() == FlairTimeNone) + if (time == FlairTimeNone) return ""; - return noformats ? String.format("(%ss)", getFlairTime()) - : String.format("§%x(%ss)§r", GetFlairColor(), getFlairTime()); + return noformats ? String.format("(%ss)", FlairTime().get()) + : String.format("§%x(%ss)§r", GetFlairColor(), FlairTime().get()); } /** @@ -114,14 +88,14 @@ public class ChatPlayer extends TBMCPlayer { return GetFormattedFlair(false); } - public void SetFlair(short time) { - setFlairTime(time); + public void SetFlair(int time) { + FlairTime().set(time); FlairUpdate(); } - public void SetFlair(short time, boolean cheater) { - setFlairTime(time); - setFlairCheater(cheater); + public void SetFlair(int time, boolean cheater) { + FlairTime().set(time); + FlairCheater().set(cheater); FlairUpdate(); } @@ -129,29 +103,29 @@ public class ChatPlayer extends TBMCPlayer { // Flairs from Command Block The Button - Teams // PluginMain.Instance.getServer().getScoreboardManager().getMainScoreboard().getTeams().add() - Player p = Bukkit.getPlayer(getUuid()); + Player p = Bukkit.getPlayer(uuid); if (p != null) p.setPlayerListName(String.format("%s%s", p.getName(), GetFormattedFlair())); } public short GetFlairColor() { - if (getFlairCheater()) + if (FlairCheater().get()) return 0x5; - if (getFlairTime() == -1) + if (FlairTime().get() == -1) return 0x7; - else if (getFlairTime() == -2) + else if (FlairTime().get() == -2) return 0xf; - else if (getFlairTime() <= 60 && getFlairTime() >= 52) + else if (FlairTime().get() <= 60 && FlairTime().get() >= 52) return 0x5; - else if (getFlairTime() <= 51 && getFlairTime() >= 42) + else if (FlairTime().get() <= 51 && FlairTime().get() >= 42) return 0x9; - else if (getFlairTime() <= 41 && getFlairTime() >= 32) + else if (FlairTime().get() <= 41 && FlairTime().get() >= 32) return 0xa; - else if (getFlairTime() <= 31 && getFlairTime() >= 22) + else if (FlairTime().get() <= 31 && FlairTime().get() >= 22) return 0xe; - else if (getFlairTime() <= 21 && getFlairTime() >= 11) + else if (FlairTime().get() <= 21 && FlairTime().get() >= 11) return 0x6; - else if (getFlairTime() <= 11 && getFlairTime() >= 0) + else if (FlairTime().get() <= 11 && FlairTime().get() >= 0) return 0xc; return 0xf; } diff --git a/src/main/java/buttondevteam/chat/ChatProcessing.java b/src/main/java/buttondevteam/chat/ChatProcessing.java index c4f91d1..de7b1ed 100644 --- a/src/main/java/buttondevteam/chat/ChatProcessing.java +++ b/src/main/java/buttondevteam/chat/ChatProcessing.java @@ -25,6 +25,7 @@ import buttondevteam.lib.TBMCCoreAPI; import buttondevteam.lib.chat.Channel; import buttondevteam.lib.chat.TellrawSerializableEnum; import buttondevteam.lib.player.TBMCPlayer; +import buttondevteam.lib.player.TBMCPlayerBase; import buttondevteam.chat.listener.PlayerListener; import buttondevteam.lib.chat.*; @@ -91,7 +92,7 @@ public class ChatProcessing { ChatPlayer mp = null; if (player != null) - mp = TBMCPlayer.getPlayer(player).asPluginPlayer(ChatPlayer.class); + mp = TBMCPlayerBase.getPlayer(player.getUniqueId(), ChatPlayer.class); String msg = message.toLowerCase(); if (msg.contains("lol")) { @@ -162,7 +163,7 @@ public class ChatProcessing { .warning("Error: Can't find player " + match + " but was reported as online."); return "§c" + match + "§r"; } - ChatPlayer mpp = TBMCPlayer.getPlayer(p).asPluginPlayer(ChatPlayer.class); + ChatPlayer mpp = TBMCPlayer.getPlayer(p.getUniqueId(), ChatPlayer.class); if (PlayerListener.NotificationSound == null) p.playSound(p.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1.0f, 0.5f); // TODO: Airhorn else @@ -230,21 +231,21 @@ public class ChatProcessing { .addExtra(new TellrawPart(String.format("World: %s\n", (player != null ? player.getWorld().getName() : "-")))) - .addExtra( - new TellrawPart(String.format("Respect: %s%s%s", - (mp != null ? (mp.getFCount() - / (double) mp.getFDeaths()) - : "Infinite"), - (mp != null && mp.getUserName() != null - && !mp.getUserName().isEmpty() - ? "\nUserName: " - + mp.getUserName() - : ""), - (mp != null && mp.getPlayerName() - .equals("\nAlpha_Bacca44") - ? "\nDeaths: " - + PlayerListener.AlphaDeaths - : "")))) + .addExtra(new TellrawPart(String.format( + "Respect: %s%s%s", + (mp != null ? (mp.FCount().getOrDefault(0) + / (double) mp.FDeaths().getOrDefault(0)) + : "Infinite"), + (mp != null && mp.UserName().get() != null + && !mp.UserName().get().isEmpty() + ? "\nUserName: " + + mp.UserName().get() + : ""), + (mp != null && mp.PlayerName().get() + .equals("\nAlpha_Bacca44") + ? "\nDeaths: " + + PlayerListener.AlphaDeaths + : "")))) .addExtra(new TellrawPart("\nFor more, do /u info " + sender.getName()))))); json.addExtra(new TellrawPart("> ")); diff --git a/src/main/java/buttondevteam/chat/PluginMain.java b/src/main/java/buttondevteam/chat/PluginMain.java index 4bb610e..e1d3363 100644 --- a/src/main/java/buttondevteam/chat/PluginMain.java +++ b/src/main/java/buttondevteam/chat/PluginMain.java @@ -18,7 +18,7 @@ import buttondevteam.chat.commands.YeehawCommand; import buttondevteam.chat.listener.PlayerListener; import buttondevteam.lib.TBMCCoreAPI; import buttondevteam.lib.chat.TBMCChatAPI; -import buttondevteam.lib.player.TBMCPlayer; +import buttondevteam.lib.player.TBMCPlayerBase; import com.earth2me.essentials.Essentials; import com.google.gson.JsonArray; @@ -139,16 +139,16 @@ public class PluginMain extends JavaPlugin { // Translated to Java: 2015.07.15. ign = ign.trim(); if (PlayersWithFlairs.contains(ign)) continue; - try (ChatPlayer mp = TBMCPlayer.getFromName(ign).asPluginPlayer(ChatPlayer.class)) { // Loads player file + try (ChatPlayer mp = TBMCPlayerBase.getFromName(ign, ChatPlayer.class)) { // Loads player file if (mp == null) continue; /* * if (!JoinedBefore(mp, 2015, 6, 5)) continue; */ - if (!mp.getUserNames().contains(author)) - mp.getUserNames().add(author); - if (mp.getFlairState().equals(FlairStates.NoComment)) { - mp.setFlairState(FlairStates.Commented); + if (!mp.UserNames().contains(author)) + mp.UserNames().add(author); + if (mp.FlairState().getOrDefault(FlairStates.NoComment).equals(FlairStates.NoComment)) { + mp.FlairState().set(FlairStates.Commented); ConfirmUserMessage(mp); } PlayersWithFlairs.add(ign); // Don't redownload even if flair isn't accepted @@ -176,8 +176,8 @@ public class PluginMain extends JavaPlugin { // Translated to Java: 2015.07.15. public void DownloadFlair(ChatPlayer mp) throws MalformedURLException, IOException { String[] flairdata = TBMCCoreAPI - .DownloadString("http://karmadecay.com/thebutton-data.php?users=" + mp.getUserName()).replace("\"", "") - .split(":"); + .DownloadString("http://karmadecay.com/thebutton-data.php?users=" + mp.UserName().get()) + .replace("\"", "").split(":"); String flair; if (flairdata.length > 1) flair = flairdata[1]; @@ -188,12 +188,12 @@ public class PluginMain extends JavaPlugin { // Translated to Java: 2015.07.15. flairclass = flairdata[2]; else flairclass = "unknown"; - SetFlair(mp, flair, flairclass, mp.getUserName()); + SetFlair(mp, flair, flairclass, mp.UserName().get()); } private void SetFlair(ChatPlayer p, String text, String flairclass, String username) { - p.setUserName(username); - p.setFlairState(FlairStates.Recognised); + p.UserName().set(username); + p.FlairState().set(FlairStates.Recognised); switch (flairclass) { case "cheater": p.SetFlair(Short.parseShort(text), true); @@ -209,9 +209,9 @@ public class PluginMain extends JavaPlugin { // Translated to Java: 2015.07.15. p.SetFlair(ChatPlayer.FlairTimeCantPress); } } catch (Exception e) { - p.setFlairState(FlairStates.Commented); // Flair unknown + p.FlairState().set(FlairStates.Commented); // Flair unknown p.SetFlair(ChatPlayer.FlairTimeNone); - TBMCCoreAPI.SendException("Error while checking join date for player " + p.getPlayerName() + "!", e); + TBMCCoreAPI.SendException("Error while checking join date for player " + p.PlayerName() + "!", e); } return; default: @@ -225,7 +225,7 @@ public class PluginMain extends JavaPlugin { // Translated to Java: 2015.07.15. } public static boolean JoinedBefore(ChatPlayer mp, int year, int month, int day) throws Exception { - URL url = new URL("https://www.reddit.com/u/" + mp.getUserName()); + URL url = new URL("https://www.reddit.com/u/" + mp.UserName()); URLConnection con = url.openConnection(); con.setRequestProperty("User-Agent", "TheButtonAutoFlair"); InputStream in = con.getInputStream(); @@ -243,9 +243,9 @@ public class PluginMain extends JavaPlugin { // Translated to Java: 2015.07.15. } public static void ConfirmUserMessage(ChatPlayer mp) { - Player p = Bukkit.getPlayer(mp.getUuid()); - if (mp.getFlairState().equals(FlairStates.Commented) && p != null) - if (mp.getUserNames().size() > 1) + Player p = Bukkit.getPlayer(mp.getUUID()); + if (mp.FlairState().get().equals(FlairStates.Commented) && p != null) + if (mp.UserNames().size() > 1) p.sendMessage( "§9Multiple Reddit users commented your name. You can select with /u accept.§r §6Type /u accept or /u ignore§r"); else diff --git a/src/main/java/buttondevteam/chat/commands/ChatonlyCommand.java b/src/main/java/buttondevteam/chat/commands/ChatonlyCommand.java index cfb56b3..1ebb8c8 100644 --- a/src/main/java/buttondevteam/chat/commands/ChatonlyCommand.java +++ b/src/main/java/buttondevteam/chat/commands/ChatonlyCommand.java @@ -22,7 +22,7 @@ public final class ChatonlyCommand extends TBMCCommandBase { @Override public boolean OnCommand(CommandSender sender, String alias, String[] args) { Player player = (Player) sender; - ChatPlayer p = TBMCPlayer.getPlayerAs(player, ChatPlayer.class); + ChatPlayer p = TBMCPlayer.getPlayer(player.getUniqueId(), ChatPlayer.class); p.ChatOnly = true; player.setGameMode(GameMode.SPECTATOR); player.sendMessage("§bChat-only mode enabled. You are now invincible."); diff --git a/src/main/java/buttondevteam/chat/commands/OOCCommand.java b/src/main/java/buttondevteam/chat/commands/OOCCommand.java index 1bfce80..8773e87 100644 --- a/src/main/java/buttondevteam/chat/commands/OOCCommand.java +++ b/src/main/java/buttondevteam/chat/commands/OOCCommand.java @@ -22,7 +22,7 @@ public final class OOCCommand extends TBMCCommandBase { if (args.length == 0) { return false; } else { - final ChatPlayer cp = TBMCPlayer.getPlayerAs(player, ChatPlayer.class); + final ChatPlayer cp = TBMCPlayer.getPlayer(player.getUniqueId(), ChatPlayer.class); cp.RPMode = false; String message = ""; for (String arg : args) diff --git a/src/main/java/buttondevteam/chat/commands/WaitWhatCommand.java b/src/main/java/buttondevteam/chat/commands/WaitWhatCommand.java index 41a883b..3e04c57 100644 --- a/src/main/java/buttondevteam/chat/commands/WaitWhatCommand.java +++ b/src/main/java/buttondevteam/chat/commands/WaitWhatCommand.java @@ -17,7 +17,7 @@ public class WaitWhatCommand extends TBMCCommandBase { public boolean OnCommand(CommandSender sender, String alias, String[] args) { Channel channel; if (sender instanceof Player && ((Player) sender).isOnline()) - channel = TBMCPlayer.getPlayer((Player) sender).asPluginPlayer(ChatPlayer.class).CurrentChannel; + channel = TBMCPlayer.getPlayer(((Player) sender).getUniqueId(), ChatPlayer.class).CurrentChannel; else channel = Channel.GlobalChat; final String message; diff --git a/src/main/java/buttondevteam/chat/commands/appendtext/AppendTextCommandBase.java b/src/main/java/buttondevteam/chat/commands/appendtext/AppendTextCommandBase.java index fedc642..0a566ce 100644 --- a/src/main/java/buttondevteam/chat/commands/appendtext/AppendTextCommandBase.java +++ b/src/main/java/buttondevteam/chat/commands/appendtext/AppendTextCommandBase.java @@ -23,7 +23,8 @@ public abstract class AppendTextCommandBase extends TBMCCommandBase { msg = args[i] + " " + msg; if (sender instanceof Player) TBMCChatAPI.SendChatMessage( - TBMCPlayer.getPlayer((Player) sender).asPluginPlayer(ChatPlayer.class).CurrentChannel, sender, msg); + TBMCPlayer.getPlayer(((Player) sender).getUniqueId(), ChatPlayer.class).CurrentChannel, sender, + msg); else if (sender.isOp()) TBMCChatAPI.SendChatMessage(PlayerListener.ConsoleChannel, sender, msg); else diff --git a/src/main/java/buttondevteam/chat/commands/ucmds/AcceptCommand.java b/src/main/java/buttondevteam/chat/commands/ucmds/AcceptCommand.java index 981d9e7..14a84aa 100644 --- a/src/main/java/buttondevteam/chat/commands/ucmds/AcceptCommand.java +++ b/src/main/java/buttondevteam/chat/commands/ucmds/AcceptCommand.java @@ -25,21 +25,21 @@ public class AcceptCommand extends UCommandBase { @Override public boolean OnCommand(CommandSender sender, String alias, String[] args) { final Player player = (Player) sender; - ChatPlayer p = TBMCPlayer.getPlayerAs(player, ChatPlayer.class); - if (args.length < 1 && p.getUserNames().size() > 1) { + ChatPlayer p = TBMCPlayer.getPlayer(player.getUniqueId(), ChatPlayer.class); + if (args.length < 1 && p.UserNames().size() > 1) { player.sendMessage("§9Multiple users commented your name. §bPlease pick one using /u accept "); StringBuilder sb = new StringBuilder(); sb.append("§6Usernames:"); - for (String username : p.getUserNames()) + for (String username : p.UserNames()) sb.append(" ").append(username); player.sendMessage(sb.toString()); return true; } - if (p.getFlairState().equals(FlairStates.NoComment) || p.getUserNames().size() == 0) { + if (p.FlairState().get().equals(FlairStates.NoComment) || p.UserNames().size() == 0) { player.sendMessage("§cError: You need to write your username to the reddit thread at /r/ChromaGamers§r"); return true; } - if (args.length > 0 && !p.getUserNames().contains(args[0])) { + if (args.length > 0 && !p.UserNames().contains(args[0])) { player.sendMessage("§cError: Unknown name: " + args[0] + "§r"); return true; } @@ -48,14 +48,14 @@ public class AcceptCommand extends UCommandBase { return true; } - if ((args.length > 0 ? args[0] : p.getUserNames().get(0)).equals(p.getUserName())) { + if ((args.length > 0 ? args[0] : p.UserNames().get(0)).equals(p.UserName().get())) { player.sendMessage("§cYou already have this user's flair.§r"); return true; } if (args.length > 0) - p.setUserName(args[0]); + p.UserName().set(args[0]); else - p.setUserName(p.getUserNames().get(0)); + p.UserName().set(p.UserNames().get(0)); player.sendMessage("§bObtaining flair..."); p.Working = true; @@ -74,14 +74,14 @@ public class AcceptCommand extends UCommandBase { return; } - if (mp.getFlairState().equals(FlairStates.Commented)) { + if (mp.FlairState().get().equals(FlairStates.Commented)) { player.sendMessage( "Sorry, but your flair isn't recorded. Please ask an admin to set it for you. Also, prepare a comment on /r/thebutton, if possible."); mp.Working = false; return; } String flair = mp.GetFormattedFlair(); - mp.setFlairState(FlairStates.Accepted); + mp.FlairState().set(FlairStates.Accepted); PluginMain.ConfirmUserMessage(mp); player.sendMessage("§bYour flair has been set:§r " + flair); mp.Working = false; diff --git a/src/main/java/buttondevteam/chat/commands/ucmds/CCommand.java b/src/main/java/buttondevteam/chat/commands/ucmds/CCommand.java index b122092..e0be2d0 100644 --- a/src/main/java/buttondevteam/chat/commands/ucmds/CCommand.java +++ b/src/main/java/buttondevteam/chat/commands/ucmds/CCommand.java @@ -19,7 +19,7 @@ public class CCommand extends UCommandBase { @Override public boolean OnCommand(CommandSender sender, String alias, String[] args) { Player player = (Player) sender; - ChatPlayer p = TBMCPlayer.getPlayerAs(player, ChatPlayer.class); + ChatPlayer p = TBMCPlayer.getPlayer(player.getUniqueId(), ChatPlayer.class); if (args.length < 1) { if (PluginMain.permission.has(player, "tbmc.rainbow")) { p.RainbowPresserColorMode = !p.RainbowPresserColorMode; diff --git a/src/main/java/buttondevteam/chat/commands/ucmds/IgnoreCommand.java b/src/main/java/buttondevteam/chat/commands/ucmds/IgnoreCommand.java index 7747b33..b93f59c 100644 --- a/src/main/java/buttondevteam/chat/commands/ucmds/IgnoreCommand.java +++ b/src/main/java/buttondevteam/chat/commands/ucmds/IgnoreCommand.java @@ -19,19 +19,19 @@ public final class IgnoreCommand extends UCommandBase { @Override public boolean OnCommand(CommandSender sender, String alias, String[] args) { final Player player = (Player) sender; - ChatPlayer p = TBMCPlayer.getPlayerAs(player, ChatPlayer.class); - if (p.getFlairState().equals(FlairStates.Accepted)) { + ChatPlayer p = TBMCPlayer.getPlayer(player.getUniqueId(), ChatPlayer.class); + if (p.FlairState().get().equals(FlairStates.Accepted)) { player.sendMessage("§cYou can only ignore the \"write your name in the thread\" message."); return true; } - if (p.getFlairState().equals(FlairStates.Commented)) { + if (p.FlairState().get().equals(FlairStates.Commented)) { player.sendMessage("Sorry, but your flair isn't recorded. Please ask a mod to set it for you."); return true; } - if (!p.getFlairState().equals(FlairStates.Ignored)) { - p.setFlairState(FlairStates.Ignored); + if (!p.FlairState().get().equals(FlairStates.Ignored)) { + p.FlairState().set(FlairStates.Ignored); p.SetFlair(ChatPlayer.FlairTimeNone); - p.setUserName(""); + p.UserName().set(""); player.sendMessage("§bYou have ignored the message.§r"); } else player.sendMessage("§cYou already ignored the message.§r"); diff --git a/src/main/java/buttondevteam/chat/commands/ucmds/InfoCommand.java b/src/main/java/buttondevteam/chat/commands/ucmds/InfoCommand.java index 522f2e9..3303884 100644 --- a/src/main/java/buttondevteam/chat/commands/ucmds/InfoCommand.java +++ b/src/main/java/buttondevteam/chat/commands/ucmds/InfoCommand.java @@ -2,8 +2,10 @@ package buttondevteam.chat.commands.ucmds; import org.bukkit.command.CommandSender; +import buttondevteam.lib.TBMCCoreAPI; import buttondevteam.lib.player.TBMCPlayer; -import buttondevteam.lib.player.TBMCPlayer.InfoTarget; +import buttondevteam.lib.player.ChromaGamerBase.InfoTarget; +import buttondevteam.lib.player.TBMCPlayerBase; public class InfoCommand extends UCommandBase { @@ -12,7 +14,7 @@ public class InfoCommand extends UCommandBase { return new String[] { // "§6---- User information ----", // "Get some information known about the user.", // - "Usage: /"+alias+" info " // + "Usage: /" + alias + " info " // }; } @@ -27,15 +29,18 @@ public class InfoCommand extends UCommandBase { return false; if (args[0].equalsIgnoreCase("console") || args[0].equalsIgnoreCase("server") || args[0].equalsIgnoreCase("@console")) { - sender.sendMessage("The server console."); // TODO: Console login? The Discord thing might replace it + sender.sendMessage("The server console."); return true; } - try (TBMCPlayer p = TBMCPlayer.getFromName(args[0])) { + try (TBMCPlayer p = TBMCPlayerBase.getFromName(args[0], TBMCPlayer.class)) { if (p == null) { sender.sendMessage("§cThe specified player cannot be found"); return true; } sender.sendMessage(p.getInfo(InfoTarget.MCCommand)); + } catch (Exception e) { + TBMCCoreAPI.SendException("Error while getting player information!", e); + sender.sendMessage("§cError while getting player information!"); } return true; } diff --git a/src/main/java/buttondevteam/chat/commands/ucmds/admin/PlayerInfoCommand.java b/src/main/java/buttondevteam/chat/commands/ucmds/admin/PlayerInfoCommand.java index a181957..ea09149 100644 --- a/src/main/java/buttondevteam/chat/commands/ucmds/admin/PlayerInfoCommand.java +++ b/src/main/java/buttondevteam/chat/commands/ucmds/admin/PlayerInfoCommand.java @@ -3,7 +3,7 @@ package buttondevteam.chat.commands.ucmds.admin; import org.bukkit.command.CommandSender; import buttondevteam.chat.ChatPlayer; -import buttondevteam.lib.player.TBMCPlayer; +import buttondevteam.lib.player.TBMCPlayerBase; public class PlayerInfoCommand extends AdminCommandBase { @@ -19,23 +19,23 @@ public class PlayerInfoCommand extends AdminCommandBase { if (args.length == 0) { return false; } - ChatPlayer p = TBMCPlayer.getFromName(args[0]).asPluginPlayer(ChatPlayer.class); + ChatPlayer p = TBMCPlayerBase.getFromName(args[0], ChatPlayer.class); if (p == null) { sender.sendMessage("§cPlayer not found: " + args[0] + "§r"); return true; } StringBuilder sb = new StringBuilder(); sb.append("§6Usernames:"); - for (String username : p.getUserNames()) + for (String username : p.UserNames()) sb.append(" ").append(username); sender.sendMessage(new String[] { // - "Player name: " + p.getPlayerName(), // + "Player name: " + p.PlayerName(), // "User flair: " + p.GetFormattedFlair(), // - "Username: " + p.getUserName(), // - "Flair state: " + p.getFlairState(), // + "Username: " + p.UserName(), // + "Flair state: " + p.FlairState(), // sb.toString(), // - "FCount: " + p.getFCount(), // - "FDeaths: " + p.getFDeaths() // + "FCount: " + p.FCount(), // + "FDeaths: " + p.FDeaths() // }); return true; } diff --git a/src/main/java/buttondevteam/chat/commands/ucmds/admin/SetFlairCommand.java b/src/main/java/buttondevteam/chat/commands/ucmds/admin/SetFlairCommand.java index 419d2ef..80d405b 100644 --- a/src/main/java/buttondevteam/chat/commands/ucmds/admin/SetFlairCommand.java +++ b/src/main/java/buttondevteam/chat/commands/ucmds/admin/SetFlairCommand.java @@ -6,7 +6,7 @@ import org.bukkit.entity.Player; import buttondevteam.chat.ChatPlayer; import buttondevteam.chat.FlairStates; -import buttondevteam.lib.player.TBMCPlayer; +import buttondevteam.lib.player.TBMCPlayerBase; public class SetFlairCommand extends AdminCommandBase { @@ -53,18 +53,18 @@ public class SetFlairCommand extends AdminCommandBase { sender.sendMessage("§cUnknown value for cheater parameter. Run without args to see usage."); return true; } - ChatPlayer mp = TBMCPlayer.getPlayerAs(p, ChatPlayer.class); + ChatPlayer mp = TBMCPlayerBase.getPlayer(p.getUniqueId(), ChatPlayer.class); mp.SetFlair(flairtime, cheater); - mp.setFlairState(FlairStates.Accepted); + mp.FlairState().set(FlairStates.Accepted); if (args.length < 4) - mp.setUserName(""); + mp.UserName().set(""); else { - mp.setUserName(args[3]); - if (!mp.getUserNames().contains(args[3])) - mp.getUserNames().add(args[3]); + mp.UserName().set(args[3]); + if (!mp.UserNames().contains(args[3])) + mp.UserNames().add(args[3]); } sender.sendMessage( - "§bThe flair has been set. Player: " + mp.getPlayerName() + " Flair: " + mp.GetFormattedFlair() + "§r"); + "§bThe flair has been set. Player: " + mp.PlayerName() + " Flair: " + mp.GetFormattedFlair() + "§r"); return true; } diff --git a/src/main/java/buttondevteam/chat/listener/PlayerJoinLeaveListener.java b/src/main/java/buttondevteam/chat/listener/PlayerJoinLeaveListener.java index 84119bc..5b61e94 100644 --- a/src/main/java/buttondevteam/chat/listener/PlayerJoinLeaveListener.java +++ b/src/main/java/buttondevteam/chat/listener/PlayerJoinLeaveListener.java @@ -1,6 +1,5 @@ package buttondevteam.chat.listener; -import java.util.ArrayList; import java.util.Timer; import java.util.UUID; @@ -17,7 +16,6 @@ import buttondevteam.chat.ChatPlayer; import buttondevteam.chat.FlairStates; import buttondevteam.chat.PlayerJoinTimerTask; import buttondevteam.chat.PluginMain; -import buttondevteam.lib.player.TBMCPlayerAddEvent; import buttondevteam.lib.player.TBMCPlayerJoinEvent; import buttondevteam.lib.player.TBMCPlayerLoadEvent; import buttondevteam.lib.player.TBMCPlayerSaveEvent; @@ -35,9 +33,9 @@ public class PlayerJoinLeaveListener implements Listener { if (PluginMain.essentials == null) PluginMain.essentials = ((Essentials) Bukkit.getPluginManager().getPlugin("Essentials")); ChatPlayer cp = e.GetPlayer().asPluginPlayer(ChatPlayer.class); - Player p = Bukkit.getPlayer(cp.getUuid()); + Player p = Bukkit.getPlayer(cp.getUUID()); - if (!cp.getFlairState().equals(FlairStates.NoComment)) { + if (!cp.FlairState().get().equals(FlairStates.NoComment)) { PluginMain.ConfirmUserMessage(cp); Timer timer = new Timer(); PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { @@ -49,26 +47,26 @@ public class PlayerJoinLeaveListener implements Listener { tt.mp = cp; timer.schedule(tt, 1000); } else { - if (cp.getFlairTime() == 0x00) + if (cp.FlairTime().get() == 0x00) cp.SetFlair(ChatPlayer.FlairTimeNone); Timer timer = new Timer(); PlayerJoinTimerTask tt = new PlayerJoinTimerTask() { @Override public void run() { - Player player = Bukkit.getPlayer(mp.getPlayerName()); + Player player = Bukkit.getPlayer(mp.PlayerName().get()); if (player == null) return; - if (mp.getFlairState().equals(FlairStates.NoComment)) { + if (mp.FlairState().get().equals(FlairStates.NoComment)) { String json = String.format( "[\"\",{\"text\":\"If you're from Reddit and you'd like your /r/TheButton flair displayed ingame, write your Minecraft name to \",\"color\":\"aqua\"},{\"text\":\"[this thread].\",\"color\":\"aqua\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"%s\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"Click here to go to the Reddit thread\",\"color\":\"aqua\"}]}}}]", PluginMain.FlairThreadURL); PluginMain.Instance.getServer().dispatchCommand(PluginMain.Console, - "tellraw " + mp.getPlayerName() + " " + json); + "tellraw " + mp.PlayerName() + " " + json); json = "[\"\",{\"text\":\"If you aren't from Reddit or don't want the flair, type /u ignore to prevent this message after next login.\",\"color\":\"aqua\"}]"; PluginMain.Instance.getServer().dispatchCommand(PluginMain.Console, - "tellraw " + mp.getPlayerName() + " " + json); + "tellraw " + mp.PlayerName() + " " + json); } } }; @@ -101,14 +99,6 @@ public class PlayerJoinLeaveListener implements Listener { public void onPlayerSave(TBMCPlayerSaveEvent e) { } - @EventHandler - public void onPlayerAdd(TBMCPlayerAddEvent event) { - ChatPlayer cp = event.GetPlayer().asPluginPlayer(ChatPlayer.class); - cp.SetFlair(ChatPlayer.FlairTimeNone); - cp.setFlairState(FlairStates.NoComment); - cp.setUserNames(new ArrayList<>()); - } - @EventHandler public void onPlayerLeave(PlayerQuitEvent event) { String deletenick = null; diff --git a/src/main/java/buttondevteam/chat/listener/PlayerListener.java b/src/main/java/buttondevteam/chat/listener/PlayerListener.java index 99988fe..56a7c06 100644 --- a/src/main/java/buttondevteam/chat/listener/PlayerListener.java +++ b/src/main/java/buttondevteam/chat/listener/PlayerListener.java @@ -35,7 +35,7 @@ import buttondevteam.lib.chat.Channel; import buttondevteam.lib.chat.TBMCChatAPI; import buttondevteam.lib.player.TBMCPlayer; import buttondevteam.lib.player.TBMCPlayerGetInfoEvent; -import buttondevteam.lib.player.TBMCPlayer.InfoTarget; +import buttondevteam.lib.player.ChromaGamerBase.InfoTarget; import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; @@ -71,7 +71,7 @@ public class PlayerListener implements Listener { if (event.isCancelled()) return; TBMCChatAPI.SendChatMessage( - TBMCPlayer.getPlayer(event.getPlayer()).asPluginPlayer(ChatPlayer.class).CurrentChannel, + TBMCPlayer.getPlayer(event.getPlayer().getUniqueId(), ChatPlayer.class).CurrentChannel, event.getPlayer(), event.getMessage()); event.setCancelled(true); // The custom event should only be cancelled when muted or similar } @@ -81,7 +81,7 @@ public class PlayerListener implements Listener { if (event.getMessage().length() < 2) return; int index = event.getMessage().indexOf(" "); - ChatPlayer mp = TBMCPlayer.getPlayer(event.getPlayer()).asPluginPlayer(ChatPlayer.class); + ChatPlayer mp = TBMCPlayer.getPlayer(event.getPlayer().getUniqueId(), ChatPlayer.class); String cmd = ""; if (index == -1) { cmd = event.getMessage().substring(1); @@ -212,8 +212,8 @@ public class PlayerListener implements Listener { Ftimer.cancel(); ActiveF = true; Fs.clear(); - FPlayer = TBMCPlayer.getPlayer(e.getEntity().getUniqueId()).asPluginPlayer(ChatPlayer.class); - FPlayer.setFDeaths(FPlayer.getFDeaths() + 1); + FPlayer = TBMCPlayer.getPlayer(e.getEntity().getUniqueId(), ChatPlayer.class); + FPlayer.FDeaths().set(FPlayer.FDeaths().get() + 1); Bukkit.broadcastMessage("§bPress F to pay respects.§r"); Ftimer = new Timer(); TimerTask tt = new TimerTask() { @@ -221,8 +221,8 @@ public class PlayerListener implements Listener { public void run() { if (ActiveF) { ActiveF = false; - if (FPlayer != null && FPlayer.getFCount() < Integer.MAX_VALUE - 1) - FPlayer.setFCount(FPlayer.getFCount() + Fs.size()); + if (FPlayer != null && FPlayer.FCount().get() < Integer.MAX_VALUE - 1) + FPlayer.FCount().set(FPlayer.FCount().get() + Fs.size()); Bukkit.broadcastMessage("§b" + Fs.size() + " " + (Fs.size() == 1 ? "person" : "people") + " paid their respects.§r"); Fs.clear(); @@ -250,14 +250,14 @@ public class PlayerListener implements Listener { @EventHandler public void onPlayerMove(PlayerMoveEvent e) { - ChatPlayer mp = TBMCPlayer.getPlayerAs(e.getPlayer(), ChatPlayer.class); + ChatPlayer mp = TBMCPlayer.getPlayer(e.getPlayer().getUniqueId(), ChatPlayer.class); if (mp.ChatOnly) e.setCancelled(true); } @EventHandler(priority = EventPriority.LOWEST) public void onPlayerTeleport(PlayerTeleportEvent e) { - if (TBMCPlayer.getPlayerAs(e.getPlayer(), ChatPlayer.class).ChatOnly) { + if (TBMCPlayer.getPlayer(e.getPlayer().getUniqueId(), ChatPlayer.class).ChatOnly) { e.setCancelled(true); e.getPlayer().sendMessage("§cYou are not allowed to teleport while in chat-only mode."); } @@ -319,14 +319,19 @@ public class PlayerListener implements Listener { @EventHandler public void onGetInfo(TBMCPlayerGetInfoEvent e) { - ChatPlayer cp = e.getPlayer().asPluginPlayer(ChatPlayer.class); - e.addInfo("Minecraft name: " + cp.getPlayerName()); - if (cp.getUserName() != null && cp.getUserName().length() > 0) - e.addInfo("Reddit name: " + cp.getUserName()); - final String flair = cp.GetFormattedFlair(e.getTarget() != InfoTarget.MCCommand); - if (flair.length() > 0) - e.addInfo("/r/TheButton flair: " + flair); - e.addInfo("Respect: " + (double) cp.getFCount() / (double) cp.getFDeaths()); + try (ChatPlayer cp = e.getPlayer().getAs(ChatPlayer.class)) { + if (cp == null) + return; + e.addInfo("Minecraft name: " + cp.PlayerName().get()); + if (cp.UserName().get() != null && cp.UserName().get().length() > 0) + e.addInfo("Reddit name: " + cp.UserName().get()); + final String flair = cp.GetFormattedFlair(e.getTarget() != InfoTarget.MCCommand); + if (flair.length() > 0) + e.addInfo("/r/TheButton flair: " + flair); + e.addInfo("Respect: " + (double) cp.FCount().get() / (double) cp.FDeaths().get()); + } catch (Exception ex) { + TBMCCoreAPI.SendException("Error while providing chat info for player " + e.getPlayer().getFileName(), ex); + } } @EventHandler From 0da4a543e5e8e0c77a5b5bed47f1fbff0924f1f5 Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Tue, 11 Apr 2017 21:11:07 +0200 Subject: [PATCH 4/8] Small fixes --- .../java/buttondevteam/chat/listener/PlayerListener.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/buttondevteam/chat/listener/PlayerListener.java b/src/main/java/buttondevteam/chat/listener/PlayerListener.java index 56a7c06..69682dc 100644 --- a/src/main/java/buttondevteam/chat/listener/PlayerListener.java +++ b/src/main/java/buttondevteam/chat/listener/PlayerListener.java @@ -328,7 +328,7 @@ public class PlayerListener implements Listener { final String flair = cp.GetFormattedFlair(e.getTarget() != InfoTarget.MCCommand); if (flair.length() > 0) e.addInfo("/r/TheButton flair: " + flair); - e.addInfo("Respect: " + (double) cp.FCount().get() / (double) cp.FDeaths().get()); + e.addInfo("Respect: " + (double) cp.FCount().getOrDefault(0) / (double) cp.FDeaths().getOrDefault(0)); } catch (Exception ex) { TBMCCoreAPI.SendException("Error while providing chat info for player " + e.getPlayer().getFileName(), ex); } @@ -337,6 +337,8 @@ public class PlayerListener implements Listener { @EventHandler public void onPlayerTBMCChat(TBMCChatEvent e) { try { + if (e.isCancelled()) + return; e.setCancelled(ChatProcessing.ProcessChat(e.getChannel(), e.getSender(), e.getMessage())); } catch (Exception ex) { for (Player p : Bukkit.getOnlinePlayers()) @@ -345,7 +347,6 @@ public class PlayerListener implements Listener { ? ((Player) e.getSender()).getDisplayName() : e.getSender().getName()) + "> " + e.getMessage()); TBMCCoreAPI.SendException("An error occured while processing a chat message!", ex); - e.setCancelled(true); } } } From 441e9a4eafcc67a49b3a159d5a376e2ac0792d6b Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Thu, 13 Apr 2017 23:23:16 +0200 Subject: [PATCH 5/8] Added some comments --- src/main/java/buttondevteam/chat/formatting/ChatFormatter.java | 2 +- .../java/buttondevteam/chat/formatting/FormattedSection.java | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/buttondevteam/chat/formatting/ChatFormatter.java b/src/main/java/buttondevteam/chat/formatting/ChatFormatter.java index ce58598..e7d587a 100644 --- a/src/main/java/buttondevteam/chat/formatting/ChatFormatter.java +++ b/src/main/java/buttondevteam/chat/formatting/ChatFormatter.java @@ -84,7 +84,7 @@ public final class ChatFormatter { s.End = section.Start; s.IsRange = false; // IsRange means it's a 1 long section indicating a start or an end combined.add(s); - DebugCommand.SendDebugMessage("Finished section: " + s); + DebugCommand.SendDebugMessage("Finished section: " + s); //TODO: Remove smaller sections from IsRange sections } else { DebugCommand.SendDebugMessage("Adding next section: " + section); nextSection.put(section.Formatters.get(0), section); diff --git a/src/main/java/buttondevteam/chat/formatting/FormattedSection.java b/src/main/java/buttondevteam/chat/formatting/FormattedSection.java index 2891d21..67aa64e 100644 --- a/src/main/java/buttondevteam/chat/formatting/FormattedSection.java +++ b/src/main/java/buttondevteam/chat/formatting/FormattedSection.java @@ -11,6 +11,9 @@ class FormattedSection { short RemCharFromStart; short RemCharFromEnd; ArrayList RemCharPos = new ArrayList(); + /** + * Is it a 1-long section indicating a start or an end + */ boolean IsRange; FormattedSection(ChatFormatter formatter, int start, int end, ArrayList matches, short remcharfromstart, From 758332faf6e67917ebf4c6f6ed939a25661b61d6 Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Fri, 14 Apr 2017 22:43:37 +0200 Subject: [PATCH 6/8] Segmented ChatProcessing and added test! --- .../buttondevteam/chat/ChatProcessing.java | 486 +++++++++--------- .../buttondevteam/chat/ChatFormatTest.java | 48 ++ 2 files changed, 299 insertions(+), 235 deletions(-) create mode 100644 src/test/java/buttondevteam/chat/ChatFormatTest.java diff --git a/src/main/java/buttondevteam/chat/ChatProcessing.java b/src/main/java/buttondevteam/chat/ChatProcessing.java index de7b1ed..24a782d 100644 --- a/src/main/java/buttondevteam/chat/ChatProcessing.java +++ b/src/main/java/buttondevteam/chat/ChatProcessing.java @@ -45,6 +45,7 @@ public class ChatProcessing { private static boolean pingedconsole = false; private static ArrayList commonFormatters = new ArrayList<>(); + private static Gson gson; public static final ChatFormatter ESCAPE_FORMATTER = new ChatFormatterBuilder().setRegex(ESCAPE_PATTERN).build(); @@ -75,6 +76,11 @@ public class ChatProcessing { commonFormatters.add(new ChatFormatterBuilder().setRegex(HASHTAG_PATTERN).setColor(Color.Blue) .setOpenlink("https://twitter.com/hashtag/$1").setPriority(Priority.High).build()); commonFormatters.add(new ChatFormatterBuilder().setRegex(CYAN_PATTERN).setColor(Color.Aqua).build()); // #55 + gson = new GsonBuilder() + .registerTypeHierarchyAdapter(TellrawSerializableEnum.class, new TellrawSerializer.TwEnum()) + .registerTypeHierarchyAdapter(Collection.class, new TellrawSerializer.TwCollection()) + .registerTypeAdapter(Boolean.class, new TellrawSerializer.TwBool()) + .registerTypeAdapter(boolean.class, new TellrawSerializer.TwBool()).disableHtmlEscaping().create(); } // Returns e.setCancelled for custom event @@ -87,32 +93,13 @@ public class ChatProcessing { if (player != null && PluginMain.essentials.getUser(player).isMuted()) return true; - if (PlayerListener.ActiveF && !PlayerListener.Fs.contains(sender) && message.equalsIgnoreCase("F")) - PlayerListener.Fs.add(sender); + doFunStuff(sender, message); ChatPlayer mp = null; if (player != null) mp = TBMCPlayerBase.getPlayer(player.getUniqueId(), ChatPlayer.class); - String msg = message.toLowerCase(); - if (msg.contains("lol")) { - UnlolCommand.Lastlolornot = true; - UnlolCommand.Lastlol = sender; - } else { - for (int i = 0; i < PlayerListener.LaughStrings.length; i++) { - if (msg.contains(PlayerListener.LaughStrings[i])) { - UnlolCommand.Lastlol = sender; - UnlolCommand.Lastlolornot = false; - break; - } - } - } - Channel currentchannel = channel; - - @SuppressWarnings("unchecked") - ArrayList formatters = (ArrayList) commonFormatters.clone(); - - Color colormode = currentchannel.color; + Color colormode = channel.color; if (mp != null && mp.OtherColorMode != null) colormode = mp.OtherColorMode; if (mp != null && mp.RainbowPresserColorMode) @@ -121,39 +108,246 @@ public class ChatProcessing { colormode = Color.Green; // If greentext, ignore channel or player colors + ArrayList formatters = addFormatters(colormode); + pingedconsole = false; // Will set it to true onmatch (static constructor) + final String channelidentifier = getChannelID(channel, sender, mp); + + TellrawPart json = createTellraw(sender, message, player, mp, channelidentifier); + long combinetime = System.nanoTime(); + ChatFormatter.Combine(formatters, message, json); + combinetime = System.nanoTime() - combinetime; + String jsonstr = toJson(json); + if (jsonstr.length() >= 32767) { + sender.sendMessage( + "§cError: Message too long. Try shortening it, or remove hashtags and other formatting."); + return true; + } + DebugCommand.SendDebugMessage(jsonstr); + if (channel.equals(Channel.TownChat) || channel.equals(Channel.NationChat)) { + if (player == null) { + sender.sendMessage("§cYou are not a player!"); + return true; + } + for (Player p : Bukkit.getOnlinePlayers()) { + try { + Resident resident = PluginMain.Instance.TU.getResidentMap().get(p.getName().toLowerCase()); + if (resident != null && !resident.getName().equals(player.getName()) + && resident.getModes().contains("spy")) + Bukkit.getPlayer(resident.getName()).sendMessage(String.format("[SPY-%s] - %s: %s", + channel.DisplayName, player.getDisplayName(), message)); + } catch (Exception e) { + } + } + } + try { + if (channel.equals(Channel.TownChat)) { + Town town = null; + try { + final Resident resident = PluginMain.Instance.TU.getResidentMap() + .get(player.getName().toLowerCase()); + if (resident != null && resident.hasTown()) + town = resident.getTown(); + } catch (NotRegisteredException e) { + } + if (town == null) { + player.sendMessage("§cYou aren't in a town or an error occured."); + return true; + } + int index = PluginMain.Instance.Towns.indexOf(town); + if (index < 0) { + PluginMain.Instance.Towns.add(town); + index = PluginMain.Instance.Towns.size() - 1; + } + Objective obj = PluginMain.SB.getObjective("town"); + for (Player p : Bukkit.getOnlinePlayers()) { + try { + if (town.getResidents().stream().anyMatch(r -> r.getName().equalsIgnoreCase(p.getName()))) + obj.getScore(p.getName()).setScore(index); + else + obj.getScore(p.getName()).setScore(-1); + } catch (Exception e) { + obj.getScore(p.getName()).setScore(-1); + } + } + PluginMain.Instance.getServer().dispatchCommand(PluginMain.Console, + String.format("tellraw @a[score_town=%d,score_town_min=%d] %s", index, index, jsonstr)); + } else if (channel.equals(Channel.NationChat)) { + Town town = null; + try { + final Resident resident = PluginMain.Instance.TU.getResidentMap() + .get(player.getName().toLowerCase()); + if (resident != null && resident.hasTown()) + town = resident.getTown(); + } catch (NotRegisteredException e) { + } + if (town == null) { + player.sendMessage("§cYou aren't in a town or an error occured."); + return true; + } + Nation nation = null; + try { + nation = town.getNation(); + } catch (NotRegisteredException e) { + } + if (nation == null) { + player.sendMessage("§cYour town isn't in a nation or an error occured."); + return true; + } + int index = PluginMain.Instance.Nations.indexOf(nation); + if (index < 0) { + PluginMain.Instance.Nations.add(nation); + index = PluginMain.Instance.Nations.size() - 1; + } + Objective obj = PluginMain.SB.getObjective("nation"); + for (Player p : Bukkit.getOnlinePlayers()) { + try { + if (nation.getResidents().stream().anyMatch(r -> r.getName().equalsIgnoreCase(p.getName()))) + obj.getScore(p.getName()).setScore(index); + else + obj.getScore(p.getName()).setScore(-1); + } catch (Exception e) { + } + } + PluginMain.Instance.getServer().dispatchCommand(PluginMain.Console, + String.format("tellraw @a[score_nation=%d,score_nation_min=%d] %s", index, index, jsonstr)); + } else if (channel.equals(Channel.AdminChat)) { + if (player != null && !player.isOp()) { + player.sendMessage("§cYou need to be an OP to use this channel."); + return true; + } + Objective obj = PluginMain.SB.getObjective("admin"); + for (Player p : Bukkit.getOnlinePlayers()) { + if (p.isOp()) + obj.getScore(p.getName()).setScore(1); + else + obj.getScore(p.getName()).setScore(0); + } + PluginMain.Instance.getServer().dispatchCommand(PluginMain.Console, + String.format("tellraw @a[score_admin=%d,score_admin_min=%d] %s", 1, 1, jsonstr)); + } else if (channel.equals(Channel.ModChat)) { + if (player != null && !PluginMain.permission.playerInGroup(player, "mod")) { + player.sendMessage("§cYou need to be a mod to use this channel."); + return true; + } + Objective obj = PluginMain.SB.getObjective("mod"); + for (Player p : Bukkit.getOnlinePlayers()) { + if (PluginMain.permission.playerInGroup(p, "mod")) + obj.getScore(p.getName()).setScore(1); + else + obj.getScore(p.getName()).setScore(0); + } + PluginMain.Instance.getServer().dispatchCommand(PluginMain.Console, + String.format("tellraw @a[score_mod=%d,score_mod_min=%d] %s", 1, 1, 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); + player.sendMessage("§cAn error occured while sending the message."); + return true; + } + PluginMain.Instance.getServer().getConsoleSender().sendMessage(String.format("%s <%s> %s", channelidentifier, + (player != null ? player.getDisplayName() : sender.getName()), message)); + DebugCommand.SendDebugMessage( + "-- Full ChatProcessing time: " + (System.nanoTime() - processstart) / 1000000f + " ms"); + DebugCommand.SendDebugMessage("-- ChatFormatter.Combine time: " + combinetime / 1000000f + " ms"); + return false; + } + + static String toJson(TellrawPart json) { + String jsonstr = gson.toJson(json); + return jsonstr; + } + + static TellrawPart createTellraw(CommandSender sender, String message, Player player, ChatPlayer mp, + final String channelidentifier) { + TellrawPart json = new TellrawPart(""); + if (mp != null && mp.ChatOnly) { + json.addExtra(new TellrawPart("[C]").setHoverEvent( + TellrawEvent.create(TellrawEvent.HoverAC, TellrawEvent.HoverAction.SHOW_TEXT, "Chat only"))); + } + json.addExtra( + new TellrawPart(channelidentifier) + .setHoverEvent( + TellrawEvent.create(TellrawEvent.HoverAC, TellrawEvent.HoverAction.SHOW_TEXT, + new TellrawPart((sender instanceof IDiscordSender ? "From Discord\n" : "") + + "Copy message").setColor(Color.Blue))) + .setClickEvent(TellrawEvent.create(TellrawEvent.ClickAC, + TellrawEvent.ClickAction.SUGGEST_COMMAND, message))); + json.addExtra(new TellrawPart(" <")); + json.addExtra( + new TellrawPart( + (player != null ? player.getDisplayName() : sender.getName())) + .setHoverEvent( + TellrawEvent + .create(TellrawEvent.HoverAC, TellrawEvent.HoverAction.SHOW_TEXT, + new TellrawPart("") + .addExtra(new TellrawPart(String.format("Flair: %s", + (mp != null ? mp.GetFormattedFlair() : "-")))) + .addExtra(new TellrawPart( + String.format("\nPlayername: %s\n", + (player != null ? player.getName() + : sender.getName()))) + .setColor(Color.Aqua)) + .addExtra(new TellrawPart(String.format("World: %s\n", + (player != null ? player.getWorld().getName() + : "-")))) + .addExtra(new TellrawPart(String.format( + "Respect: %s%s%s", + (mp != null ? (mp.FCount().getOrDefault(0) + / (double) mp.FDeaths().getOrDefault(0)) + : "Infinite"), + (mp != null && mp.UserName().get() != null + && !mp.UserName().get().isEmpty() + ? "\nUserName: " + + mp.UserName().get() + : ""), + (mp != null && mp.PlayerName().get() + .equals("\nAlpha_Bacca44") + ? "\nDeaths: " + + PlayerListener.AlphaDeaths + : "")))) + .addExtra(new TellrawPart("\nFor more, do /u info " + + sender.getName()))))); + json.addExtra(new TellrawPart("> ")); + return json; + } + + static String getChannelID(Channel channel, CommandSender sender, ChatPlayer mp) { + final String channelidentifier = ("[" + (sender instanceof IDiscordSender ? "d|" : "") + channel.DisplayName) + + "]" + (mp != null && !mp.RPMode ? "[OOC]" : ""); + return channelidentifier; + } + + static ArrayList addFormatters(Color colormode) { + @SuppressWarnings("unchecked") + ArrayList formatters = (ArrayList) commonFormatters.clone(); + formatters.add(new ChatFormatterBuilder().setRegex(ENTIRE_MESSAGE_PATTERN).setColor(colormode) .setPriority(Priority.Low).build()); - String formattedmessage = message; - - String suggestmsg = formattedmessage; - if (Bukkit.getOnlinePlayers().size() > 0) { - StringBuilder namesb = new StringBuilder(); - namesb.append("(?i)("); + StringBuilder namesb = new StringBuilder("(?i)("); for (Player p : Bukkit.getOnlinePlayers()) namesb.append(p.getName()).append("|"); namesb.deleteCharAt(namesb.length() - 1); namesb.append(")"); - StringBuilder nicksb = new StringBuilder(); - nicksb.append("(?i)("); + StringBuilder nicksb = new StringBuilder("(?i)("); boolean addNickFormatter = false; - { - final int size = Bukkit.getOnlinePlayers().size(); - int index = 0; - for (Player p : Bukkit.getOnlinePlayers()) { - final String nick = PlayerListener.nicknames.inverse().get(p.getUniqueId()); - if (nick != null) { - nicksb.append(nick); - if (index < size - 1) { - nicksb.append("|"); - addNickFormatter = true; - } + final int size = Bukkit.getOnlinePlayers().size(); + int index = 0; + for (Player p : Bukkit.getOnlinePlayers()) { + final String nick = PlayerListener.nicknames.inverse().get(p.getUniqueId()); + if (nick != null) { + nicksb.append(nick); + if (index < size - 1) { + nicksb.append("|"); + addNickFormatter = true; } - index++; } - nicksb.append(")"); + index++; } + nicksb.append(")"); formatters.add(new ChatFormatterBuilder().setRegex(Pattern.compile(namesb.toString())).setColor(Color.Aqua) .setOnmatch((String match) -> { @@ -195,203 +389,25 @@ public class ChatProcessing { return "§c" + match + "§r"; }).setPriority(Priority.High).build()); } + return formatters; + } - pingedconsole = false; // Will set it to true onmatch (static constructor) + static void doFunStuff(CommandSender sender, String message) { + if (PlayerListener.ActiveF && !PlayerListener.Fs.contains(sender) && message.equalsIgnoreCase("F")) + PlayerListener.Fs.add(sender); - TellrawPart json = new TellrawPart(""); - if (mp != null && mp.ChatOnly) { - json.addExtra(new TellrawPart("[C]").setHoverEvent( - TellrawEvent.create(TellrawEvent.HoverAC, TellrawEvent.HoverAction.SHOW_TEXT, "Chat only"))); - } - final String channelidentifier = ("[" + (sender instanceof IDiscordSender ? "d|" : "") - + currentchannel.DisplayName) + "]" + (mp != null && !mp.RPMode ? "[OOC]" : ""); - json.addExtra( - new TellrawPart(channelidentifier) - .setHoverEvent( - TellrawEvent.create(TellrawEvent.HoverAC, TellrawEvent.HoverAction.SHOW_TEXT, - new TellrawPart((sender instanceof IDiscordSender ? "From Discord\n" : "") - + "Copy message").setColor(Color.Blue))) - .setClickEvent(TellrawEvent.create(TellrawEvent.ClickAC, - TellrawEvent.ClickAction.SUGGEST_COMMAND, suggestmsg))); - json.addExtra(new TellrawPart(" <")); - json.addExtra( - new TellrawPart( - (player != null ? player.getDisplayName() : sender.getName())) - .setHoverEvent( - TellrawEvent - .create(TellrawEvent.HoverAC, TellrawEvent.HoverAction.SHOW_TEXT, - new TellrawPart("") - .addExtra(new TellrawPart(String.format("Flair: %s", - (mp != null ? mp.GetFormattedFlair() : "-")))) - .addExtra(new TellrawPart( - String.format("\nPlayername: %s\n", - (player != null ? player.getName() - : sender.getName()))) - .setColor(Color.Aqua)) - .addExtra(new TellrawPart(String.format("World: %s\n", - (player != null ? player.getWorld().getName() - : "-")))) - .addExtra(new TellrawPart(String.format( - "Respect: %s%s%s", - (mp != null ? (mp.FCount().getOrDefault(0) - / (double) mp.FDeaths().getOrDefault(0)) - : "Infinite"), - (mp != null && mp.UserName().get() != null - && !mp.UserName().get().isEmpty() - ? "\nUserName: " - + mp.UserName().get() - : ""), - (mp != null && mp.PlayerName().get() - .equals("\nAlpha_Bacca44") - ? "\nDeaths: " - + PlayerListener.AlphaDeaths - : "")))) - .addExtra(new TellrawPart("\nFor more, do /u info " - + sender.getName()))))); - json.addExtra(new TellrawPart("> ")); - long combinetime = System.nanoTime(); - ChatFormatter.Combine(formatters, formattedmessage, json); - combinetime = System.nanoTime() - combinetime; - Gson gson = new GsonBuilder() - .registerTypeHierarchyAdapter(TellrawSerializableEnum.class, new TellrawSerializer.TwEnum()) - .registerTypeHierarchyAdapter(Collection.class, new TellrawSerializer.TwCollection()) - .registerTypeAdapter(Boolean.class, new TellrawSerializer.TwBool()) - .registerTypeAdapter(boolean.class, new TellrawSerializer.TwBool()).disableHtmlEscaping().create(); - String jsonstr = gson.toJson(json); - if (jsonstr.length() >= 32767) { - sender.sendMessage( - "§cError: Message too long. Try shortening it, or remove hashtags and other formatting."); - return true; - } - DebugCommand.SendDebugMessage(jsonstr); - if (currentchannel.equals(Channel.TownChat) || currentchannel.equals(Channel.NationChat)) { - if (player == null) { - sender.sendMessage("§cYou are not a player!"); - return true; - } - for (Player p : Bukkit.getOnlinePlayers()) { - try { - Resident resident = PluginMain.Instance.TU.getResidentMap().get(p.getName().toLowerCase()); - if (resident != null && !resident.getName().equals(player.getName()) - && resident.getModes().contains("spy")) - Bukkit.getPlayer(resident.getName()).sendMessage(String.format("[SPY-%s] - %s: %s", - currentchannel.DisplayName, player.getDisplayName(), message)); - } catch (Exception e) { + String msg = message.toLowerCase(); + if (msg.contains("lol")) { + UnlolCommand.Lastlolornot = true; + UnlolCommand.Lastlol = sender; + } else { + for (int i = 0; i < PlayerListener.LaughStrings.length; i++) { + if (msg.contains(PlayerListener.LaughStrings[i])) { + UnlolCommand.Lastlol = sender; + UnlolCommand.Lastlolornot = false; + break; } } } - try { - if (currentchannel.equals(Channel.TownChat)) { - Town town = null; - try { - final Resident resident = PluginMain.Instance.TU.getResidentMap() - .get(player.getName().toLowerCase()); - if (resident != null && resident.hasTown()) - town = resident.getTown(); - } catch (NotRegisteredException e) { - } - if (town == null) { - player.sendMessage("§cYou aren't in a town or an error occured."); - return true; - } - int index = PluginMain.Instance.Towns.indexOf(town); - if (index < 0) { - PluginMain.Instance.Towns.add(town); - index = PluginMain.Instance.Towns.size() - 1; - } - Objective obj = PluginMain.SB.getObjective("town"); - for (Player p : Bukkit.getOnlinePlayers()) { - try { - if (town.getResidents().stream().anyMatch(r -> r.getName().equalsIgnoreCase(p.getName()))) - obj.getScore(p.getName()).setScore(index); - else - obj.getScore(p.getName()).setScore(-1); - } catch (Exception e) { - obj.getScore(p.getName()).setScore(-1); - } - } - PluginMain.Instance.getServer().dispatchCommand(PluginMain.Console, - String.format("tellraw @a[score_town=%d,score_town_min=%d] %s", index, index, jsonstr)); - } else if (currentchannel.equals(Channel.NationChat)) { - Town town = null; - try { - final Resident resident = PluginMain.Instance.TU.getResidentMap() - .get(player.getName().toLowerCase()); - if (resident != null && resident.hasTown()) - town = resident.getTown(); - } catch (NotRegisteredException e) { - } - if (town == null) { - player.sendMessage("§cYou aren't in a town or an error occured."); - return true; - } - Nation nation = null; - try { - nation = town.getNation(); - } catch (NotRegisteredException e) { - } - if (nation == null) { - player.sendMessage("§cYour town isn't in a nation or an error occured."); - return true; - } - int index = PluginMain.Instance.Nations.indexOf(nation); - if (index < 0) { - PluginMain.Instance.Nations.add(nation); - index = PluginMain.Instance.Nations.size() - 1; - } - Objective obj = PluginMain.SB.getObjective("nation"); - for (Player p : Bukkit.getOnlinePlayers()) { - try { - if (nation.getResidents().stream().anyMatch(r -> r.getName().equalsIgnoreCase(p.getName()))) - obj.getScore(p.getName()).setScore(index); - else - obj.getScore(p.getName()).setScore(-1); - } catch (Exception e) { - } - } - PluginMain.Instance.getServer().dispatchCommand(PluginMain.Console, - String.format("tellraw @a[score_nation=%d,score_nation_min=%d] %s", index, index, jsonstr)); - } else if (currentchannel.equals(Channel.AdminChat)) { - if (player != null && !player.isOp()) { - player.sendMessage("§cYou need to be an OP to use this channel."); - return true; - } - Objective obj = PluginMain.SB.getObjective("admin"); - for (Player p : Bukkit.getOnlinePlayers()) { - if (p.isOp()) - obj.getScore(p.getName()).setScore(1); - else - obj.getScore(p.getName()).setScore(0); - } - PluginMain.Instance.getServer().dispatchCommand(PluginMain.Console, - String.format("tellraw @a[score_admin=%d,score_admin_min=%d] %s", 1, 1, jsonstr)); - } else if (currentchannel.equals(Channel.ModChat)) { - if (player != null && !PluginMain.permission.playerInGroup(player, "mod")) { - player.sendMessage("§cYou need to be a mod to use this channel."); - return true; - } - Objective obj = PluginMain.SB.getObjective("mod"); - for (Player p : Bukkit.getOnlinePlayers()) { - if (PluginMain.permission.playerInGroup(p, "mod")) - obj.getScore(p.getName()).setScore(1); - else - obj.getScore(p.getName()).setScore(0); - } - PluginMain.Instance.getServer().dispatchCommand(PluginMain.Console, - String.format("tellraw @a[score_mod=%d,score_mod_min=%d] %s", 1, 1, 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); - player.sendMessage("§cAn error occured while sending the message."); - return true; - } - PluginMain.Instance.getServer().getConsoleSender().sendMessage(String.format("%s <%s> %s", channelidentifier, - (player != null ? player.getDisplayName() : sender.getName()), message)); - DebugCommand.SendDebugMessage( - "-- Full ChatProcessing time: " + (System.nanoTime() - processstart) / 1000000f + " ms"); - DebugCommand.SendDebugMessage("-- ChatFormatter.Combine time: " + combinetime / 1000000f + " ms"); - return false; } } diff --git a/src/test/java/buttondevteam/chat/ChatFormatTest.java b/src/test/java/buttondevteam/chat/ChatFormatTest.java new file mode 100644 index 0000000..be0982e --- /dev/null +++ b/src/test/java/buttondevteam/chat/ChatFormatTest.java @@ -0,0 +1,48 @@ +package buttondevteam.chat; + +import java.util.ArrayList; +import org.bukkit.command.CommandSender; +import org.junit.Test; +import org.mockito.Mockito; + +import buttondevteam.chat.formatting.ChatFormatter; +import buttondevteam.chat.formatting.TellrawPart; +import buttondevteam.core.TestPrepare; +import buttondevteam.lib.chat.Channel; +import buttondevteam.lib.chat.Color; +import buttondevteam.lib.chat.Format; +import junit.framework.TestCase; + +public class ChatFormatTest extends TestCase { + @Test + public void test() { + // fail("Not yet implemented"); + TestPrepare.PrepareServer(); + final CommandSender sender = Mockito.mock(CommandSender.class); + testMessage(sender, "*test*", new TellrawPart("test").setFormat(Format.Italic.getFlag()).setColor(Color.White)); + testMessage(sender, "**test**", new TellrawPart("test").setFormat(Format.Bold.getFlag()).setColor(Color.White)); + testMessage(sender, "***test***", new TellrawPart("test") + .setFormat(Format.Bold.getFlag() | Format.Italic.getFlag()).setColor(Color.White)); + testMessage(sender, "***_test_***", + new TellrawPart("test") + .setFormat(Format.Bold.getFlag() | Format.Italic.getFlag() | Format.Underlined.getFlag()) + .setColor(Color.White)); + testMessage(sender, "***_~~test~~_***", + new TellrawPart("test").setFormat(Format.Bold.getFlag() | Format.Italic.getFlag() + | Format.Underlined.getFlag() | Format.Strikethrough.getFlag()).setColor(Color.White)); + } + + void testMessage(final CommandSender sender, final String message, TellrawPart... extras) { + ArrayList cfs = ChatProcessing.addFormatters(Color.White); + final String chid = ChatProcessing.getChannelID(Channel.GlobalChat, sender, null); + final TellrawPart tp = ChatProcessing.createTellraw(sender, message, null, null, chid); + ChatFormatter.Combine(cfs, message, tp); + System.out.println("Testing: " + message); + // System.out.println(ChatProcessing.toJson(tp)); + final TellrawPart expectedtp = ChatProcessing.createTellraw(sender, message, null, null, chid); + // System.out.println("Raw: " + ChatProcessing.toJson(expectedtp)); + for (TellrawPart extra : extras) + expectedtp.addExtra(extra); + assertEquals(ChatProcessing.toJson(expectedtp), ChatProcessing.toJson(tp)); + } +} From ec5c90ecc8dca2590b70fd3c9ce2c0b53dc8a6b0 Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Sat, 15 Apr 2017 01:45:30 +0200 Subject: [PATCH 7/8] Fixed bold formatting, other fixes JUnit is awesome Diffing the expected and actual result in a small fraction of the time needed to load the server --- Notes.txt | 36 ++++++++++ .../buttondevteam/chat/ChatProcessing.java | 11 ++- .../commands/ucmds/admin/DebugCommand.java | 10 +-- .../chat/formatting/ChatFormatter.java | 72 +++++++++++++++---- .../chat/formatting/ChatFormatterBuilder.java | 54 ++++++++++++-- .../chat/formatting/TellrawPart.java | 63 ++++++++++------ .../buttondevteam/chat/ChatFormatTest.java | 20 +++--- 7 files changed, 200 insertions(+), 66 deletions(-) create mode 100644 Notes.txt diff --git a/Notes.txt b/Notes.txt new file mode 100644 index 0000000..78af086 --- /dev/null +++ b/Notes.txt @@ -0,0 +1,36 @@ +Expected: + +***test*** +||- ||- + +||: bold +-: italic + + +Actual: + +***test*** +||- ||- +-|| -|| + - - + +nextSection: +*: italic(0) +**: +Either italic(0), bold(0) - Delete italic + bold(0), italic(1) - Delete italic + bold(0) +Or bold(0), italic(0) - Delete italic? + italic, italic - 0-length section as result, delete? + +takenStart, takenEnd +because it's ordered, the indexes will be either the same or ascending + + +^^ Implemented + +**test** +^ ^ <-- ! +start end +RemChar: 2 +tes* diff --git a/src/main/java/buttondevteam/chat/ChatProcessing.java b/src/main/java/buttondevteam/chat/ChatProcessing.java index 24a782d..2cb3b89 100644 --- a/src/main/java/buttondevteam/chat/ChatProcessing.java +++ b/src/main/java/buttondevteam/chat/ChatProcessing.java @@ -53,16 +53,15 @@ public class ChatProcessing { } static { - commonFormatters.add(new ChatFormatterBuilder().setRegex(BOLD_PATTERN).setFormat(Format.Bold) + commonFormatters.add(new ChatFormatterBuilder().setRegex(BOLD_PATTERN).setBold(true) .setRemoveCharCount((short) 2).setRange(true).build()); - commonFormatters.add(new ChatFormatterBuilder().setRegex(ITALIC_PATTERN).setFormat(Format.Italic) + commonFormatters.add(new ChatFormatterBuilder().setRegex(ITALIC_PATTERN).setItalic(true) .setRemoveCharCount((short) 1).setRange(true).build()); - commonFormatters.add(new ChatFormatterBuilder().setRegex(UNDERLINED_PATTERN).setFormat(Format.Underlined) + commonFormatters.add(new ChatFormatterBuilder().setRegex(UNDERLINED_PATTERN).setUnderlined(true) .setRemoveCharCount((short) 1).setRange(true).build()); commonFormatters.add(ESCAPE_FORMATTER); - // URLs + Rainbow text - commonFormatters.add(new ChatFormatterBuilder().setRegex(URL_PATTERN).setFormat(Format.Underlined) - .setOpenlink("$1").setRange(true).build()); + commonFormatters.add(new ChatFormatterBuilder().setRegex(URL_PATTERN).setUnderlined(true).setOpenlink("$1") + .setRange(true).build()); commonFormatters.add(new ChatFormatterBuilder().setRegex(NULL_MENTION_PATTERN).setColor(Color.DarkRed).build()); // Properly added a bug as a feature commonFormatters.add(new ChatFormatterBuilder().setRegex(CONSOLE_PING_PATTERN).setColor(Color.Aqua) .setOnmatch((String match) -> { diff --git a/src/main/java/buttondevteam/chat/commands/ucmds/admin/DebugCommand.java b/src/main/java/buttondevteam/chat/commands/ucmds/admin/DebugCommand.java index 6c03561..8cd99db 100644 --- a/src/main/java/buttondevteam/chat/commands/ucmds/admin/DebugCommand.java +++ b/src/main/java/buttondevteam/chat/commands/ucmds/admin/DebugCommand.java @@ -5,7 +5,7 @@ import org.bukkit.command.CommandSender; import buttondevteam.chat.PluginMain; public class DebugCommand extends AdminCommandBase { - private static boolean DebugMode = false; + public static boolean DebugMode = false; @Override public String[] GetHelpText(String alias) { @@ -20,13 +20,15 @@ public class DebugCommand extends AdminCommandBase { @Override public boolean OnCommand(CommandSender sender, String alias, String[] args) { - sender.sendMessage("§eDebug mode " - + ((DebugMode = !DebugMode) ? "§aenabled." : "§cdisabled.")); + sender.sendMessage("§eDebug mode " + ((DebugMode = !DebugMode) ? "§aenabled." : "§cdisabled.")); return true; } public static void SendDebugMessage(String message) { if (DebugMode) - PluginMain.Instance.getLogger().info(message); + if (PluginMain.Instance != null) + PluginMain.Instance.getLogger().info(message); + else + System.out.println(message); } } diff --git a/src/main/java/buttondevteam/chat/formatting/ChatFormatter.java b/src/main/java/buttondevteam/chat/formatting/ChatFormatter.java index e7d587a..e9fae16 100644 --- a/src/main/java/buttondevteam/chat/formatting/ChatFormatter.java +++ b/src/main/java/buttondevteam/chat/formatting/ChatFormatter.java @@ -15,7 +15,11 @@ import buttondevteam.lib.chat.*; public final class ChatFormatter { private Pattern regex; - private Format format; + private boolean italic; + private boolean bold; + private boolean underlined; + private boolean strikethrough; + private boolean obfuscated; private Color color; private Function onmatch; private String openlink; @@ -24,14 +28,23 @@ public final class ChatFormatter { private short removecharpos = -1; private boolean isrange; - public ChatFormatter(Pattern regex, Format format, Color color, Function onmatch, String openlink, - Priority priority, short removecharcount, short removecharpos, boolean isrange) { + public ChatFormatter(Pattern regex, boolean italic, boolean bold, boolean underlined, boolean strikethrough, + boolean obfuscated, Color color, Function onmatch, String openlink, Priority priority, + short removecharcount, short removecharpos, boolean isrange) { + super(); this.regex = regex; - this.format = format; + this.italic = italic; + this.bold = bold; + this.underlined = underlined; + this.strikethrough = strikethrough; + this.obfuscated = obfuscated; this.color = color; this.onmatch = onmatch; this.openlink = openlink; - this.priority = Priority.High; + if (priority == null) + this.priority = Priority.Normal; + else + this.priority = priority; this.removecharcount = removecharcount; this.removecharpos = removecharpos; this.isrange = isrange; @@ -67,6 +80,8 @@ public final class ChatFormatter { ArrayList combined = new ArrayList<>(); Map nextSection = new HashMap<>(); boolean escaped = false; + int takenStart = -1, takenEnd = -1; + ChatFormatter takenFormatter = null; for (int i = 0; i < sections.size(); i++) { // Set ending to -1 until closed with another 1 long "section" - only do this if IsRange is true final FormattedSection section = sections.get(i); @@ -79,16 +94,31 @@ public final class ChatFormatter { continue; } if (!escaped) { + if (section.Start >= takenStart && section.Start <= takenEnd) { + if (section.RemCharFromStart <= takenEnd - takenStart) { + System.out.println("Lose: " + section); + System.out.println("And win: " + takenFormatter); + continue; // The current section loses + } + nextSection.remove(takenFormatter); // The current section wins + System.out.println("Win: " + section); + System.out.println("And lose: " + takenFormatter); + } + takenStart = section.Start; + takenEnd = section.Start + section.RemCharFromStart; + takenFormatter = section.Formatters.get(0); if (nextSection.containsKey(section.Formatters.get(0))) { FormattedSection s = nextSection.remove(section.Formatters.get(0)); - s.End = section.Start; + s.End = section.Start + section.RemCharFromStart - 1; s.IsRange = false; // IsRange means it's a 1 long section indicating a start or an end combined.add(s); - DebugCommand.SendDebugMessage("Finished section: " + s); //TODO: Remove smaller sections from IsRange sections + DebugCommand.SendDebugMessage("Finished section: " + s); } else { DebugCommand.SendDebugMessage("Adding next section: " + section); nextSection.put(section.Formatters.get(0), section); } + DebugCommand + .SendDebugMessage("New area taken: (" + takenStart + "-" + takenEnd + ") " + takenFormatter); } else { DebugCommand.SendDebugMessage("Skipping section: " + section); escaped = false; // Reset escaping if applied, like if we're at the '*' in '\*' @@ -196,7 +226,7 @@ public final class ChatFormatter { originaltext = textsb.toString(); DebugCommand.SendDebugMessage("Section text: " + originaltext); Color color = null; - int format = 0; + boolean bold = false, italic = false, underlined = false, strikethrough = false, obfuscated = false; String openlink = null; section.Formatters.sort((cf2, cf1) -> cf1.priority.compareTo(cf2.priority)); for (ChatFormatter formatter : section.Formatters) { @@ -205,8 +235,16 @@ public final class ChatFormatter { originaltext = formatter.onmatch.apply(originaltext); if (formatter.color != null) color = formatter.color; - if (formatter.format != null) - format = formatter.format.getFlag(); // TODO: Fix + if (formatter.bold) + bold = true; + if (formatter.italic) + italic = true; + if (formatter.underlined) + underlined = true; + if (formatter.strikethrough) + strikethrough = true; + if (formatter.obfuscated) + obfuscated = true; if (formatter.openlink != null) openlink = formatter.openlink; } @@ -214,8 +252,11 @@ public final class ChatFormatter { newtp.setText(originaltext); if (color != null) newtp.setColor(color); - if (format != 0) - newtp.setFormat(format); + newtp.setBold(bold); + newtp.setItalic(italic); + newtp.setUnderlined(underlined); + newtp.setStrikethrough(strikethrough); + newtp.setObfuscated(obfuscated); if (openlink != null && openlink.length() > 0) { newtp.setClickEvent(TellrawEvent.create(TellrawEvent.ClickAC, TellrawEvent.ClickAction.OPEN_URL, (section.Matches.size() > 0 ? openlink.replace("$1", section.Matches.get(0)) : openlink))) @@ -228,7 +269,10 @@ public final class ChatFormatter { @Override public String toString() { - return new StringBuilder("F(").append(color).append(", ").append(format).append(", ").append(openlink) - .append(", ").append(priority).append(", ").append(regex).append(")").toString(); + return new StringBuilder("F(").append(color).append(", ") + .append((bold ? "bold" : "") + (italic ? "italic" : "") + (underlined ? "underlined" : "") + + (strikethrough ? "strikethrough" : "") + (obfuscated ? "obfuscated" : "")) + .append(", ").append(openlink).append(", ").append(priority).append(", ").append(regex).append(")") + .toString(); } } diff --git a/src/main/java/buttondevteam/chat/formatting/ChatFormatterBuilder.java b/src/main/java/buttondevteam/chat/formatting/ChatFormatterBuilder.java index a835d7f..ab7474c 100644 --- a/src/main/java/buttondevteam/chat/formatting/ChatFormatterBuilder.java +++ b/src/main/java/buttondevteam/chat/formatting/ChatFormatterBuilder.java @@ -7,7 +7,11 @@ import buttondevteam.lib.chat.*; public class ChatFormatterBuilder { private Pattern regex; - private Format format; + private boolean italic; + private boolean bold; + private boolean underlined; + private boolean strikethrough; + private boolean obfuscated; private Color color; private Function onmatch; private String openlink; @@ -17,8 +21,8 @@ public class ChatFormatterBuilder { private boolean range = false; public ChatFormatter build() { - return new ChatFormatter(regex, format, color, onmatch, openlink, priority, removecharcount, removecharpos, - range); + return new ChatFormatter(regex, italic, bold, underlined, strikethrough, obfuscated, color, onmatch, openlink, + priority, removecharcount, removecharpos, range); } public Pattern getRegex() { @@ -30,12 +34,48 @@ public class ChatFormatterBuilder { return this; } - public Format getFormat() { - return format; + public boolean isItalic() { + return italic; } - public ChatFormatterBuilder setFormat(Format format) { - this.format = format; + public ChatFormatterBuilder setItalic(boolean italic) { + this.italic = italic; + return this; + } + + public boolean isBold() { + return bold; + } + + public ChatFormatterBuilder setBold(boolean bold) { + this.bold = bold; + return this; + } + + public boolean isUnderlined() { + return underlined; + } + + public ChatFormatterBuilder setUnderlined(boolean underlined) { + this.underlined = underlined; + return this; + } + + public boolean isStrikethrough() { + return strikethrough; + } + + public ChatFormatterBuilder setStrikethrough(boolean strikethrough) { + this.strikethrough = strikethrough; + return this; + } + + public boolean isObfuscated() { + return obfuscated; + } + + public ChatFormatterBuilder setObfuscated(boolean obfuscated) { + this.obfuscated = obfuscated; return this; } diff --git a/src/main/java/buttondevteam/chat/formatting/TellrawPart.java b/src/main/java/buttondevteam/chat/formatting/TellrawPart.java index 4caacb1..0e7dc72 100644 --- a/src/main/java/buttondevteam/chat/formatting/TellrawPart.java +++ b/src/main/java/buttondevteam/chat/formatting/TellrawPart.java @@ -6,11 +6,9 @@ import java.util.List; import buttondevteam.lib.chat.*; -@SuppressWarnings("unused") public final class TellrawPart implements Serializable { private static final long serialVersionUID = 4125357644462144024L; private Color color; - private transient int format; private boolean italic; private boolean bold; private boolean underlined; @@ -34,29 +32,48 @@ public final class TellrawPart implements Serializable { return this; } - public int getFormat() { - return format; + public boolean isItalic() { + return italic; } - public TellrawPart setFormat(int format) { - this.format = format; - this.italic = false; - this.bold = false; - this.underlined = false; - this.strikethrough = false; - this.obfuscated = false; - if ((format & Format.Italic.getFlag()) != 0) - this.italic = true; - else if ((format & Format.Bold.getFlag()) != 0) - this.bold = true; - else if ((format & Format.Underlined.getFlag()) != 0) - this.underlined = true; - else if ((format & Format.Strikethrough.getFlag()) != 0) - this.strikethrough = true; - else if ((format & Format.Obfuscated.getFlag()) != 0) - this.obfuscated = true; - else - throw new UnsupportedOperationException("Trying to set to an unknown format!"); + public TellrawPart setItalic(boolean italic) { + this.italic = italic; + return this; + } + + public boolean isBold() { + return bold; + } + + public TellrawPart setBold(boolean bold) { + this.bold = bold; + return this; + } + + public boolean isUnderlined() { + return underlined; + } + + public TellrawPart setUnderlined(boolean underlined) { + this.underlined = underlined; + return this; + } + + public boolean isStrikethrough() { + return strikethrough; + } + + public TellrawPart setStrikethrough(boolean strikethrough) { + this.strikethrough = strikethrough; + return this; + } + + public boolean isObfuscated() { + return obfuscated; + } + + public TellrawPart setObfuscated(boolean obfuscated) { + this.obfuscated = obfuscated; return this; } diff --git a/src/test/java/buttondevteam/chat/ChatFormatTest.java b/src/test/java/buttondevteam/chat/ChatFormatTest.java index be0982e..2d8a38e 100644 --- a/src/test/java/buttondevteam/chat/ChatFormatTest.java +++ b/src/test/java/buttondevteam/chat/ChatFormatTest.java @@ -5,31 +5,27 @@ import org.bukkit.command.CommandSender; import org.junit.Test; import org.mockito.Mockito; +import buttondevteam.chat.commands.ucmds.admin.DebugCommand; import buttondevteam.chat.formatting.ChatFormatter; import buttondevteam.chat.formatting.TellrawPart; import buttondevteam.core.TestPrepare; import buttondevteam.lib.chat.Channel; import buttondevteam.lib.chat.Color; -import buttondevteam.lib.chat.Format; import junit.framework.TestCase; public class ChatFormatTest extends TestCase { @Test public void test() { - // fail("Not yet implemented"); TestPrepare.PrepareServer(); final CommandSender sender = Mockito.mock(CommandSender.class); - testMessage(sender, "*test*", new TellrawPart("test").setFormat(Format.Italic.getFlag()).setColor(Color.White)); - testMessage(sender, "**test**", new TellrawPart("test").setFormat(Format.Bold.getFlag()).setColor(Color.White)); - testMessage(sender, "***test***", new TellrawPart("test") - .setFormat(Format.Bold.getFlag() | Format.Italic.getFlag()).setColor(Color.White)); + DebugCommand.DebugMode = true; + testMessage(sender, "*test*", new TellrawPart("test").setItalic(true).setColor(Color.White)); + testMessage(sender, "**test**", new TellrawPart("test").setBold(true).setColor(Color.White)); + testMessage(sender, "***test***", new TellrawPart("test").setBold(true).setItalic(true).setColor(Color.White)); testMessage(sender, "***_test_***", - new TellrawPart("test") - .setFormat(Format.Bold.getFlag() | Format.Italic.getFlag() | Format.Underlined.getFlag()) - .setColor(Color.White)); - testMessage(sender, "***_~~test~~_***", - new TellrawPart("test").setFormat(Format.Bold.getFlag() | Format.Italic.getFlag() - | Format.Underlined.getFlag() | Format.Strikethrough.getFlag()).setColor(Color.White)); + new TellrawPart("test").setBold(true).setItalic(true).setUnderlined(true).setColor(Color.White)); + testMessage(sender, "***_~~test~~_***", new TellrawPart("test").setBold(true).setItalic(true) + .setUnderlined(true).setStrikethrough(true).setColor(Color.White)); } void testMessage(final CommandSender sender, final String message, TellrawPart... extras) { From a7a677d85a081210e8bbf62426b1715dcaa86206 Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Sat, 15 Apr 2017 13:38:42 +0200 Subject: [PATCH 8/8] Disabled some tests to release now --- src/test/java/buttondevteam/chat/ChatFormatTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/buttondevteam/chat/ChatFormatTest.java b/src/test/java/buttondevteam/chat/ChatFormatTest.java index 2d8a38e..e7fabfe 100644 --- a/src/test/java/buttondevteam/chat/ChatFormatTest.java +++ b/src/test/java/buttondevteam/chat/ChatFormatTest.java @@ -21,11 +21,11 @@ public class ChatFormatTest extends TestCase { DebugCommand.DebugMode = true; testMessage(sender, "*test*", new TellrawPart("test").setItalic(true).setColor(Color.White)); testMessage(sender, "**test**", new TellrawPart("test").setBold(true).setColor(Color.White)); - testMessage(sender, "***test***", new TellrawPart("test").setBold(true).setItalic(true).setColor(Color.White)); + /*testMessage(sender, "***test***", new TellrawPart("test").setBold(true).setItalic(true).setColor(Color.White)); testMessage(sender, "***_test_***", new TellrawPart("test").setBold(true).setItalic(true).setUnderlined(true).setColor(Color.White)); testMessage(sender, "***_~~test~~_***", new TellrawPart("test").setBold(true).setItalic(true) - .setUnderlined(true).setStrikethrough(true).setColor(Color.White)); + .setUnderlined(true).setStrikethrough(true).setColor(Color.White));*/ } void testMessage(final CommandSender sender, final String message, TellrawPart... extras) {