From 7ab997ddad86ceca48363078f7f5e3823bcce966 Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Wed, 24 Oct 2018 19:33:38 +0200 Subject: [PATCH] ChatMessage changes The channel is no longer required for sending a message All user accounts now store which channel they are in to make things simpler Added the concept of 'sender converters' which is used to get the CG user which sent a command for example No longer allowing getAs() for the same user type --- ...tonCore_Towny_master_v1_0_g8d3b6b6_296.xml | 13 +++ ..._milkbowl_VaultAPI_master_c8cb88f27a_1.xml | 13 +++ ..._javax_persistence_persistence_api_1_0.xml | 13 --- .../Maven__org_avaje_ebean_2_8_1.xml | 13 --- ...org_bukkit_bukkit_1_13_1_R0_1_SNAPSHOT.xml | 13 +++ ...n__org_bukkit_bukkit_1_9_R0_1_SNAPSHOT.xml | 13 --- ...igotmc_spigot_api_1_12_2_R0_1_SNAPSHOT.xml | 6 +- .idea/markdown-exported-files.xml | 8 ++ .idea/markdown-navigator.xml | 82 +++++++++++++++++++ .../markdown-navigator/profiles_settings.xml | 3 + BuildConfigUpdater/BuildConfigUpdater.iml | 1 - .../java/buttondevteam/core/MainPlugin.java | 11 +++ .../buttondevteam/lib/chat/ChatMessage.java | 8 +- .../buttondevteam/lib/chat/TBMCChatAPI.java | 11 +-- .../lib/player/ChromaGamerBase.java | 41 +++++++++- 15 files changed, 194 insertions(+), 55 deletions(-) create mode 100644 .idea/libraries/Maven__com_github_TBMCPlugins_ButtonCore_Towny_master_v1_0_g8d3b6b6_296.xml create mode 100644 .idea/libraries/Maven__com_github_milkbowl_VaultAPI_master_c8cb88f27a_1.xml delete mode 100755 .idea/libraries/Maven__javax_persistence_persistence_api_1_0.xml delete mode 100755 .idea/libraries/Maven__org_avaje_ebean_2_8_1.xml create mode 100644 .idea/libraries/Maven__org_bukkit_bukkit_1_13_1_R0_1_SNAPSHOT.xml delete mode 100755 .idea/libraries/Maven__org_bukkit_bukkit_1_9_R0_1_SNAPSHOT.xml create mode 100644 .idea/markdown-exported-files.xml create mode 100644 .idea/markdown-navigator.xml create mode 100644 .idea/markdown-navigator/profiles_settings.xml diff --git a/.idea/libraries/Maven__com_github_TBMCPlugins_ButtonCore_Towny_master_v1_0_g8d3b6b6_296.xml b/.idea/libraries/Maven__com_github_TBMCPlugins_ButtonCore_Towny_master_v1_0_g8d3b6b6_296.xml new file mode 100644 index 0000000..8991a67 --- /dev/null +++ b/.idea/libraries/Maven__com_github_TBMCPlugins_ButtonCore_Towny_master_v1_0_g8d3b6b6_296.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_github_milkbowl_VaultAPI_master_c8cb88f27a_1.xml b/.idea/libraries/Maven__com_github_milkbowl_VaultAPI_master_c8cb88f27a_1.xml new file mode 100644 index 0000000..b5aaa43 --- /dev/null +++ b/.idea/libraries/Maven__com_github_milkbowl_VaultAPI_master_c8cb88f27a_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__javax_persistence_persistence_api_1_0.xml b/.idea/libraries/Maven__javax_persistence_persistence_api_1_0.xml deleted file mode 100755 index e60370e..0000000 --- a/.idea/libraries/Maven__javax_persistence_persistence_api_1_0.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_avaje_ebean_2_8_1.xml b/.idea/libraries/Maven__org_avaje_ebean_2_8_1.xml deleted file mode 100755 index 91f161a..0000000 --- a/.idea/libraries/Maven__org_avaje_ebean_2_8_1.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_bukkit_bukkit_1_13_1_R0_1_SNAPSHOT.xml b/.idea/libraries/Maven__org_bukkit_bukkit_1_13_1_R0_1_SNAPSHOT.xml new file mode 100644 index 0000000..63108e8 --- /dev/null +++ b/.idea/libraries/Maven__org_bukkit_bukkit_1_13_1_R0_1_SNAPSHOT.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_bukkit_bukkit_1_9_R0_1_SNAPSHOT.xml b/.idea/libraries/Maven__org_bukkit_bukkit_1_9_R0_1_SNAPSHOT.xml deleted file mode 100755 index 2fb4911..0000000 --- a/.idea/libraries/Maven__org_bukkit_bukkit_1_9_R0_1_SNAPSHOT.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_spigotmc_spigot_api_1_12_2_R0_1_SNAPSHOT.xml b/.idea/libraries/Maven__org_spigotmc_spigot_api_1_12_2_R0_1_SNAPSHOT.xml index 42f0d6f..b6f88ae 100644 --- a/.idea/libraries/Maven__org_spigotmc_spigot_api_1_12_2_R0_1_SNAPSHOT.xml +++ b/.idea/libraries/Maven__org_spigotmc_spigot_api_1_12_2_R0_1_SNAPSHOT.xml @@ -1,13 +1,13 @@ - + - + - + \ No newline at end of file diff --git a/.idea/markdown-exported-files.xml b/.idea/markdown-exported-files.xml new file mode 100644 index 0000000..5d1f129 --- /dev/null +++ b/.idea/markdown-exported-files.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/markdown-navigator.xml b/.idea/markdown-navigator.xml new file mode 100644 index 0000000..a280ac6 --- /dev/null +++ b/.idea/markdown-navigator.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/markdown-navigator/profiles_settings.xml b/.idea/markdown-navigator/profiles_settings.xml new file mode 100644 index 0000000..57927c5 --- /dev/null +++ b/.idea/markdown-navigator/profiles_settings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/BuildConfigUpdater/BuildConfigUpdater.iml b/BuildConfigUpdater/BuildConfigUpdater.iml index 9cd800b..4902d56 100644 --- a/BuildConfigUpdater/BuildConfigUpdater.iml +++ b/BuildConfigUpdater/BuildConfigUpdater.iml @@ -13,7 +13,6 @@ - diff --git a/ButtonCore/src/main/java/buttondevteam/core/MainPlugin.java b/ButtonCore/src/main/java/buttondevteam/core/MainPlugin.java index 233bdef..ef0768f 100755 --- a/ButtonCore/src/main/java/buttondevteam/core/MainPlugin.java +++ b/ButtonCore/src/main/java/buttondevteam/core/MainPlugin.java @@ -6,10 +6,15 @@ import buttondevteam.lib.chat.Channel; import buttondevteam.lib.chat.ChatRoom; import buttondevteam.lib.chat.Color; import buttondevteam.lib.chat.TBMCChatAPI; +import buttondevteam.lib.player.ChromaGamerBase; +import buttondevteam.lib.player.TBMCPlayer; import buttondevteam.lib.player.TBMCPlayerBase; import com.earth2me.essentials.Essentials; import net.milkbowl.vault.permission.Permission; import org.bukkit.Bukkit; +import org.bukkit.command.BlockCommandSender; +import org.bukkit.command.ConsoleCommandSender; +import org.bukkit.entity.Player; import org.bukkit.plugin.PluginDescriptionFile; import org.bukkit.plugin.RegisteredServiceProvider; import org.bukkit.plugin.java.JavaPlugin; @@ -20,6 +25,8 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.StandardCopyOption; import java.util.Arrays; +import java.util.Optional; +import java.util.UUID; import java.util.logging.Logger; public class MainPlugin extends JavaPlugin { @@ -45,6 +52,10 @@ public class MainPlugin extends JavaPlugin { TBMCChatAPI.AddCommand(this, PrimeRestartCommand.class); TBMCChatAPI.AddCommand(this, MemberCommand.class); TBMCCoreAPI.RegisterEventsForExceptions(new PlayerListener(), this); + ChromaGamerBase.addConverter(commandSender -> Optional.ofNullable(commandSender instanceof ConsoleCommandSender || commandSender instanceof BlockCommandSender + ? TBMCPlayer.getPlayer(new UUID(0, 0), TBMCPlayer.class) : null)); //Console & cmdblocks + ChromaGamerBase.addConverter(sender -> Optional.ofNullable(sender instanceof Player + ? TBMCPlayer.getPlayer(((Player) sender).getUniqueId(), TBMCPlayer.class) : null)); //Players, has higher priority TBMCCoreAPI.RegisterUserClass(TBMCPlayerBase.class); TBMCChatAPI.RegisterChatChannel(Channel.GlobalChat = new Channel("§fOOC§f", Color.White, "ooc", null)); Channel.GlobalChat.IDs = new String[]{"g"}; //Support /g as well diff --git a/ButtonCore/src/main/java/buttondevteam/lib/chat/ChatMessage.java b/ButtonCore/src/main/java/buttondevteam/lib/chat/ChatMessage.java index a6fc3f1..99b16b8 100644 --- a/ButtonCore/src/main/java/buttondevteam/lib/chat/ChatMessage.java +++ b/ButtonCore/src/main/java/buttondevteam/lib/chat/ChatMessage.java @@ -9,10 +9,6 @@ import org.bukkit.command.CommandSender; @Builder @Getter public class ChatMessage { - /** - * The MC channel to send the message to. - */ - private final Channel channel; /** * The sender which sends the message. */ @@ -39,8 +35,8 @@ public class ChatMessage { } @NonNull - public static ChatMessageBuilder builder(Channel channel, CommandSender sender, ChromaGamerBase user, String message) { - return builder().channel(channel).sender(sender).user(user).message(message); + public static ChatMessageBuilder builder(CommandSender sender, ChromaGamerBase user, String message) { + return builder().sender(sender).user(user).message(message); } } diff --git a/ButtonCore/src/main/java/buttondevteam/lib/chat/TBMCChatAPI.java b/ButtonCore/src/main/java/buttondevteam/lib/chat/TBMCChatAPI.java index f1fcd98..1b4c635 100755 --- a/ButtonCore/src/main/java/buttondevteam/lib/chat/TBMCChatAPI.java +++ b/ButtonCore/src/main/java/buttondevteam/lib/chat/TBMCChatAPI.java @@ -214,19 +214,20 @@ public class TBMCChatAPI { * @return The event cancelled state */ public static boolean SendChatMessage(ChatMessage cm) { - if (!Channel.getChannels().contains(cm.getChannel())) - throw new RuntimeException("Channel " + cm.getChannel().DisplayName + " not registered!"); + val channel = cm.getUser().channel().get(); + if (!Channel.getChannels().contains(channel)) + throw new RuntimeException("Channel " + channel.DisplayName + " not registered!"); val permcheck = cm.getPermCheck() == null ? cm.getSender() : cm.getPermCheck(); - RecipientTestResult rtr = getScoreOrSendError(cm.getChannel(), permcheck); + RecipientTestResult rtr = getScoreOrSendError(channel, permcheck); int score = rtr.score; if (score == -1 || rtr.groupID == null) return true; - TBMCChatPreprocessEvent eventPre = new TBMCChatPreprocessEvent(cm.getSender(), cm.getChannel(), cm.getMessage()); + TBMCChatPreprocessEvent eventPre = new TBMCChatPreprocessEvent(cm.getSender(), channel, cm.getMessage()); Bukkit.getPluginManager().callEvent(eventPre); if (eventPre.isCancelled()) return true; TBMCChatEvent event; - event = new TBMCChatEvent(cm.getSender(), cm.getUser(), cm.getChannel(), eventPre.getMessage(), score, cm.isFromCommand(), rtr.groupID, permcheck != cm.getSender()); + event = new TBMCChatEvent(cm.getSender(), cm.getUser(), channel, eventPre.getMessage(), score, cm.isFromCommand(), rtr.groupID, permcheck != cm.getSender()); Bukkit.getPluginManager().callEvent(event); return event.isCancelled(); } diff --git a/ButtonCore/src/main/java/buttondevteam/lib/player/ChromaGamerBase.java b/ButtonCore/src/main/java/buttondevteam/lib/player/ChromaGamerBase.java index 2d7ef8b..33c5ac0 100755 --- a/ButtonCore/src/main/java/buttondevteam/lib/player/ChromaGamerBase.java +++ b/ButtonCore/src/main/java/buttondevteam/lib/player/ChromaGamerBase.java @@ -1,14 +1,19 @@ package buttondevteam.lib.player; import buttondevteam.lib.TBMCCoreAPI; +import buttondevteam.lib.chat.Channel; import com.google.common.collect.HashBiMap; import lombok.val; import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; import org.bukkit.configuration.file.YamlConfiguration; import java.io.File; +import java.util.ArrayList; import java.util.HashMap; +import java.util.Optional; import java.util.function.Consumer; +import java.util.function.Function; @ChromaGamerEnforcer public abstract class ChromaGamerBase implements AutoCloseable { @@ -92,6 +97,32 @@ public abstract class ChromaGamerBase implements AutoCloseable { return null; } + private static ArrayList>> senderConverters = new ArrayList<>(); + + /** + * Adds a converter to the start of the list. + * + * @param converter The converter that returns an object corresponding to the sender or null, if it's not the right type. + */ + public static void addConverter(Function> converter) { + senderConverters.add(0, converter); + } + + /** + * Get from the given sender. May be null,.but shouldn't be. + * + * @param sender The sender to use + * @return A user as returned by a converter or null if none can supply it + */ + public static ChromaGamerBase getFromSender(CommandSender sender) { + for (val converter : senderConverters) { + val ocg = converter.apply(sender); + if (ocg.isPresent()) + return ocg.get(); + } + return null; + } + /** * Saves the player. It'll pass all exceptions to the caller. To automatically handle the exception, use {@link #save()} instead. */ @@ -123,8 +154,10 @@ public abstract class ChromaGamerBase implements AutoCloseable { if (!playerTypes.containsKey(getClass())) throw new RuntimeException("Class not registered as a user class! Use TBMCCoreAPI.RegisterUserClass"); final String ownFolder = getFolder(); - user.plugindata.set(ownFolder + "_id", plugindata.getString(ownFolder + "_id")); final String userFolder = user.getFolder(); + if (ownFolder.equalsIgnoreCase(userFolder)) + throw new RuntimeException("Do not connect two accounts of the same type! Type: "+ownFolder); + user.plugindata.set(ownFolder + "_id", plugindata.getString(ownFolder + "_id")); plugindata.set(userFolder + "_id", user.plugindata.getString(userFolder + "_id")); Consumer sync = sourcedata -> { final String sourcefolder = sourcedata == plugindata ? ownFolder : userFolder; @@ -271,4 +304,10 @@ public abstract class ChromaGamerBase implements AutoCloseable { public enum InfoTarget { MCHover, MCCommand, Discord } + + //----------------------------------------------------------------- + + public PlayerData channel() { + return data(Channel.GlobalChat); + } }