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); + } }