diff --git a/.settings/.gitignore b/.settings/.gitignore deleted file mode 100644 index f80ee1c..0000000 --- a/.settings/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -/org.eclipse.jdt.core.prefs -/org.eclipse.core.resources.prefs -/org.eclipse.m2e.core.prefs diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..b9ca028 --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,5 @@ +#Sun Nov 28 17:16:27 CST 2021 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.source=1.8 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.compliance=1.8 diff --git a/pom.xml b/pom.xml index 4b62ea1..d4d5059 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 mineverse.Aust1n46.chat VentureChat - 3.2.2 + 4.0.0 https://bitbucket.org/Aust1n46/venturechat/src/master https://bitbucket.org/Aust1n46/venturechat/src/master @@ -67,11 +67,21 @@ net.md_5.bungee.config shaded.net.md_5.bungee.config + + com.google.inject + shaded.com.google.inject + + + org.aopalliance + shaded.org.aopalliance + com.zaxxer:HikariCP net.md-5:bungeecord-config + com.google.inject:guice + aopalliance:aopalliance @@ -119,6 +129,10 @@ papermc https://papermc.io/repo/repository/maven-public/ + + google-guice + https://mvnrepository.com/artifact/com.google.inject/guice + @@ -195,6 +209,13 @@ + + + com.google.inject + guice + compile + 5.0.1 + com.velocitypowered velocity-api @@ -221,6 +242,12 @@ 1.13-R0.1-SNAPSHOT provided + + org.projectlombok + lombok + 1.18.22 + provided + junit junit diff --git a/src/main/java/mineverse/Aust1n46/chat/api/MineverseChatAPI.java b/src/main/java/mineverse/Aust1n46/chat/api/MineverseChatAPI.java deleted file mode 100644 index fd8388f..0000000 --- a/src/main/java/mineverse/Aust1n46/chat/api/MineverseChatAPI.java +++ /dev/null @@ -1,178 +0,0 @@ -package mineverse.Aust1n46.chat.api; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.UUID; - -import org.bukkit.entity.Player; - -import mineverse.Aust1n46.chat.MineverseChat; - -/** - * API class for looking up wrapped {@link MineverseChatPlayer} objects from - * {@link Player}, {@link UUID}, or {@link String} user names. - * - * @author Aust1n46 - */ -public final class MineverseChatAPI { - private static HashMap playerMap = new HashMap(); - private static HashMap namesMap = new HashMap(); - private static HashMap onlinePlayerMap = new HashMap(); - private static List networkPlayerNames = new ArrayList(); - - private static HashMap proxyPlayerMap = new HashMap(); - - public static List getNetworkPlayerNames() { - return networkPlayerNames; - } - - public static void clearNetworkPlayerNames() { - networkPlayerNames.clear(); - } - - public static void addNetworkPlayerName(String name) { - networkPlayerNames.add(name); - } - - public static void addSynchronizedMineverseChatPlayerToMap(SynchronizedMineverseChatPlayer smcp) { - proxyPlayerMap.put(smcp.getUUID(), smcp); - } - -// @Deprecated -// public static void clearBungeePlayerMap() { -// clearProxyPlayerMap(); -// } - - public static void clearProxyPlayerMap() { - proxyPlayerMap.clear(); - } - - public static Collection getSynchronizedMineverseChatPlayers() { - return proxyPlayerMap.values(); - } - - public static void addNameToMap(MineverseChatPlayer mcp) { - namesMap.put(mcp.getName(), mcp.getUUID()); - } - - public static void removeNameFromMap(String name) { - namesMap.remove(name); - } - - public static void clearNameMap() { - namesMap.clear(); - } - - @SuppressWarnings("deprecation") - public static void addMineverseChatPlayerToMap(MineverseChatPlayer mcp) { - playerMap.put(mcp.getUUID(), mcp); - MineverseChat.players.add(mcp); - } - - @SuppressWarnings("deprecation") - public static void clearMineverseChatPlayerMap() { - playerMap.clear(); - MineverseChat.players.clear(); - } - - public static Collection getMineverseChatPlayers() { - return playerMap.values(); - } - - @SuppressWarnings("deprecation") - public static void addMineverseChatOnlinePlayerToMap(MineverseChatPlayer mcp) { - onlinePlayerMap.put(mcp.getUUID(), mcp); - MineverseChat.onlinePlayers.add(mcp); - } - - @SuppressWarnings("deprecation") - public static void removeMineverseChatOnlinePlayerToMap(MineverseChatPlayer mcp) { - onlinePlayerMap.remove(mcp.getUUID()); - MineverseChat.onlinePlayers.remove(mcp); - } - - @SuppressWarnings("deprecation") - public static void clearOnlineMineverseChatPlayerMap() { - onlinePlayerMap.clear(); - MineverseChat.onlinePlayers.clear(); - } - - public static Collection getOnlineMineverseChatPlayers() { - return onlinePlayerMap.values(); - } - - /** - * Get a MineverseChatPlayer wrapper from a Bukkit Player instance. - * - * @param player {@link Player} object. - * @return {@link MineverseChatPlayer} - */ - public static MineverseChatPlayer getMineverseChatPlayer(Player player) { - return getMineverseChatPlayer(player.getUniqueId()); - } - - /** - * Get a MineverseChatPlayer wrapper from a UUID. - * - * @param uuid {@link UUID}. - * @return {@link MineverseChatPlayer} - */ - public static MineverseChatPlayer getMineverseChatPlayer(UUID uuid) { - return playerMap.get(uuid); - } - - /** - * Get a MineverseChatPlayer wrapper from a user name. - * - * @param name {@link String}. - * @return {@link MineverseChatPlayer} - */ - public static MineverseChatPlayer getMineverseChatPlayer(String name) { - return getMineverseChatPlayer(namesMap.get(name)); - } - - /** - * Get a MineverseChatPlayer wrapper from a Bukkit Player instance. Only checks - * current online players. Much more efficient! - * - * @param player {@link Player} object. - * @return {@link MineverseChatPlayer} - */ - public static MineverseChatPlayer getOnlineMineverseChatPlayer(Player player) { - return getOnlineMineverseChatPlayer(player.getUniqueId()); - } - - /** - * Get a MineverseChatPlayer wrapper from a UUID. Only checks current online - * players. Much more efficient! - * - * @param uuid {@link UUID}. - * @return {@link MineverseChatPlayer} - */ - public static MineverseChatPlayer getOnlineMineverseChatPlayer(UUID uuid) { - return onlinePlayerMap.get(uuid); - } - - /** - * Get a MineverseChatPlayer wrapper from a user name. Only checks current - * online players. Much more efficient! - * - * @param name {@link String}. - * @return {@link MineverseChatPlayer} - */ - public static MineverseChatPlayer getOnlineMineverseChatPlayer(String name) { - return getOnlineMineverseChatPlayer(namesMap.get(name)); - } - - /** - * Get a SynchronizedMineverseChatPlayer from a UUID. - * - * @param uuid {@link UUID} - * @return {@link SynchronizedMineverseChatPlayer} - */ - public static SynchronizedMineverseChatPlayer getSynchronizedMineverseChatPlayer(UUID uuid) { - return proxyPlayerMap.get(uuid); - } -} diff --git a/src/main/java/mineverse/Aust1n46/chat/api/events/ChannelJoinEvent.java b/src/main/java/mineverse/Aust1n46/chat/api/events/ChannelJoinEvent.java index 8196aaf..683ca08 100644 --- a/src/main/java/mineverse/Aust1n46/chat/api/events/ChannelJoinEvent.java +++ b/src/main/java/mineverse/Aust1n46/chat/api/events/ChannelJoinEvent.java @@ -1,12 +1,12 @@ package mineverse.Aust1n46.chat.api.events; -import mineverse.Aust1n46.chat.channel.ChatChannel; - import org.bukkit.entity.Player; import org.bukkit.event.Cancellable; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; +import venture.Aust1n46.chat.model.ChatChannel; + /** * Event called when a player attempts to join a valid channel */ diff --git a/src/main/java/mineverse/Aust1n46/chat/api/events/MutePlayerEvent.java b/src/main/java/mineverse/Aust1n46/chat/api/events/MutePlayerEvent.java index c687153..bbada11 100644 --- a/src/main/java/mineverse/Aust1n46/chat/api/events/MutePlayerEvent.java +++ b/src/main/java/mineverse/Aust1n46/chat/api/events/MutePlayerEvent.java @@ -1,12 +1,12 @@ package mineverse.Aust1n46.chat.api.events; -import mineverse.Aust1n46.chat.channel.ChatChannel; - import org.bukkit.entity.Player; import org.bukkit.event.Cancellable; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; +import venture.Aust1n46.chat.model.ChatChannel; + //This class is a custom event that is part of the plugins API. It is called when a player executes the mute command. public class MutePlayerEvent extends Event implements Cancellable { //unimplemented private static final HandlerList handlers = new HandlerList(); diff --git a/src/main/java/mineverse/Aust1n46/chat/api/events/VentureChatEvent.java b/src/main/java/mineverse/Aust1n46/chat/api/events/VentureChatEvent.java index 50f7a9a..9515fc0 100644 --- a/src/main/java/mineverse/Aust1n46/chat/api/events/VentureChatEvent.java +++ b/src/main/java/mineverse/Aust1n46/chat/api/events/VentureChatEvent.java @@ -6,9 +6,9 @@ import org.bukkit.entity.Player; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; -import mineverse.Aust1n46.chat.MineverseChat; -import mineverse.Aust1n46.chat.api.MineverseChatPlayer; -import mineverse.Aust1n46.chat.channel.ChatChannel; +import venture.Aust1n46.chat.VentureChat; +import venture.Aust1n46.chat.model.ChatChannel; +import venture.Aust1n46.chat.model.VentureChatPlayer; /** * Event called when a message has been sent to a channel. @@ -18,9 +18,8 @@ import mineverse.Aust1n46.chat.channel.ChatChannel; */ public class VentureChatEvent extends Event { private static final HandlerList handlers = new HandlerList(); - private final MineverseChatPlayer mcp; + private final VentureChatPlayer mcp; private final String username; - private final String nickname; private final String playerPrimaryGroup; private final ChatChannel channel; private final Set recipients; @@ -31,11 +30,10 @@ public class VentureChatEvent extends Event { private final int hash; private final boolean bungee; - public VentureChatEvent(MineverseChatPlayer mcp, String username, String nickname, String playerPrimaryGroup, ChatChannel channel, Set recipients, int recipientCount, String format, String chat, String globalJSON, int hash, boolean bungee) { - super(MineverseChat.ASYNC); + public VentureChatEvent(VentureChatPlayer mcp, String username, String playerPrimaryGroup, ChatChannel channel, Set recipients, int recipientCount, String format, String chat, String globalJSON, int hash, boolean bungee) { + super(VentureChat.ASYNC); this.mcp = mcp; this.username = username; - this.nickname = nickname; this.playerPrimaryGroup = playerPrimaryGroup; this.channel = channel; this.recipients = recipients; @@ -47,7 +45,7 @@ public class VentureChatEvent extends Event { this.bungee = bungee; } - public MineverseChatPlayer getMineverseChatPlayer() { + public VentureChatPlayer getMineverseChatPlayer() { return this.mcp; } @@ -55,10 +53,6 @@ public class VentureChatEvent extends Event { return this.username; } - public String getNickname() { - return this.nickname; - } - public String getPlayerPrimaryGroup() { return this.playerPrimaryGroup; } diff --git a/src/main/java/mineverse/Aust1n46/chat/channel/ChatChannelInfo.java b/src/main/java/mineverse/Aust1n46/chat/channel/ChatChannelInfo.java deleted file mode 100644 index 4afa05b..0000000 --- a/src/main/java/mineverse/Aust1n46/chat/channel/ChatChannelInfo.java +++ /dev/null @@ -1,17 +0,0 @@ -package mineverse.Aust1n46.chat.channel; - -import mineverse.Aust1n46.chat.utilities.Format; - -public class ChatChannelInfo { - // DiscordSRV backwards compatibility - @Deprecated - public String FilterChat(String msg) { - return Format.FilterChat(msg); - } - - // DiscordSRV backwards compatibility - @Deprecated - public ChatChannel getChannelInfo(String channel) { - return ChatChannel.getChannel(channel); - } -} \ No newline at end of file diff --git a/src/main/java/mineverse/Aust1n46/chat/command/VentureCommandExecutor.java b/src/main/java/mineverse/Aust1n46/chat/command/VentureCommandExecutor.java deleted file mode 100644 index df735d5..0000000 --- a/src/main/java/mineverse/Aust1n46/chat/command/VentureCommandExecutor.java +++ /dev/null @@ -1,140 +0,0 @@ -package mineverse.Aust1n46.chat.command; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.command.TabExecutor; - -import mineverse.Aust1n46.chat.MineverseChat; -import mineverse.Aust1n46.chat.command.chat.Broadcast; -import mineverse.Aust1n46.chat.command.chat.BungeeToggle; -import mineverse.Aust1n46.chat.command.chat.Channel; -import mineverse.Aust1n46.chat.command.chat.Channelinfo; -import mineverse.Aust1n46.chat.command.chat.Chatinfo; -import mineverse.Aust1n46.chat.command.chat.Chatreload; -import mineverse.Aust1n46.chat.command.chat.Chlist; -import mineverse.Aust1n46.chat.command.chat.Chwho; -import mineverse.Aust1n46.chat.command.chat.Clearchat; -import mineverse.Aust1n46.chat.command.chat.Commandblock; -import mineverse.Aust1n46.chat.command.chat.Commandspy; -import mineverse.Aust1n46.chat.command.chat.Config; -import mineverse.Aust1n46.chat.command.chat.Edit; -import mineverse.Aust1n46.chat.command.chat.Filter; -import mineverse.Aust1n46.chat.command.chat.Force; -import mineverse.Aust1n46.chat.command.chat.Forceall; -import mineverse.Aust1n46.chat.command.chat.Kickchannel; -import mineverse.Aust1n46.chat.command.chat.Kickchannelall; -import mineverse.Aust1n46.chat.command.chat.Leave; -import mineverse.Aust1n46.chat.command.chat.Listen; -import mineverse.Aust1n46.chat.command.chat.Me; -import mineverse.Aust1n46.chat.command.chat.Party; -import mineverse.Aust1n46.chat.command.chat.RangedSpy; -import mineverse.Aust1n46.chat.command.chat.Removemessage; -import mineverse.Aust1n46.chat.command.chat.Setchannel; -import mineverse.Aust1n46.chat.command.chat.Setchannelall; -import mineverse.Aust1n46.chat.command.chat.VentureChatGui; -import mineverse.Aust1n46.chat.command.chat.Venturechat; -import mineverse.Aust1n46.chat.command.message.IgnoreCommandExecutor; -import mineverse.Aust1n46.chat.command.message.MessageCommandExecutor; -import mineverse.Aust1n46.chat.command.message.MessageToggle; -import mineverse.Aust1n46.chat.command.message.Notifications; -import mineverse.Aust1n46.chat.command.message.Reply; -import mineverse.Aust1n46.chat.command.message.Spy; -import mineverse.Aust1n46.chat.command.mute.Mute; -import mineverse.Aust1n46.chat.command.mute.Muteall; -import mineverse.Aust1n46.chat.command.mute.Unmute; -import mineverse.Aust1n46.chat.command.mute.Unmuteall; - -/** - * Class that initializes and executes the plugin's commands. - */ -public class VentureCommandExecutor implements TabExecutor { - private static Map commands = new HashMap(); - private static MineverseChat plugin = MineverseChat.getInstance(); - private static VentureCommandExecutor commandExecutor; - - @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] parameters) { - commands.get(command.getName()).execute(sender, command.getName(), parameters); - return true; - } - - @Override - public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { - return commands.get(command.getName()).onTabComplete(sender, command, label, args); - } - - public static void initialize() { - commandExecutor = new VentureCommandExecutor(); - commands.put("broadcast", new Broadcast()); - commands.put("channel", new Channel()); - commands.put("join", new Channel()); - commands.put("channelinfo", new Channelinfo()); - commands.put("chatinfo", new Chatinfo()); - commands.put("chatreload", new Chatreload()); - commands.put("chlist", new Chlist()); - commands.put("chwho", new Chwho()); - commands.put("clearchat", new Clearchat()); - commands.put("commandblock", new Commandblock()); - commands.put("commandspy", new Commandspy()); - commands.put("config", new Config()); - commands.put("edit", new Edit()); - commands.put("filter", new Filter()); - commands.put("force", new Force()); - commands.put("forceall", new Forceall()); - commands.put("kickchannel", new Kickchannel()); - commands.put("kickchannelall", new Kickchannelall()); - commands.put("leave", new Leave()); - commands.put("listen", new Listen()); - commands.put("me", new Me()); - commands.put("venturechat", new Venturechat()); - commands.put("notifications", new Notifications()); - commands.put("party", new Party()); - commands.put("rangedspy", new RangedSpy()); - commands.put("removemessage", new Removemessage()); - commands.put("setchannel", new Setchannel()); - commands.put("setchannelall", new Setchannelall()); - commands.put("spy", new Spy()); - commands.put("venturechatgui", new VentureChatGui()); - commands.put("messagetoggle", new MessageToggle()); - commands.put("bungeetoggle", new BungeeToggle()); - for(String command : commands.keySet()) { - registerCommand(command, commandExecutor); - } - - plugin.getServer().getScheduler().runTaskLater(plugin, () -> { - VentureCommand reply = new Reply(); - commands.put("reply", reply); - commands.put("r", reply); - registerCommand("reply", commandExecutor); - registerCommand("r", commandExecutor); - - commands.put("mute", new Mute()); - commands.put("muteall", new Muteall()); - commands.put("unmute", new Unmute()); - commands.put("unmuteall", new Unmuteall()); - registerCommand("mute", commandExecutor); - registerCommand("muteall", commandExecutor); - registerCommand("unmute", commandExecutor); - registerCommand("unmuteall", commandExecutor); - - MessageCommandExecutor messageCommandExecutor = new MessageCommandExecutor(); - registerCommand("message", messageCommandExecutor); - registerCommand("msg", messageCommandExecutor); - registerCommand("tell", messageCommandExecutor); - registerCommand("whisper", messageCommandExecutor); - - registerCommand("ignore", new IgnoreCommandExecutor()); - }, 0); - } - - private static void registerCommand(String command, CommandExecutor commandExecutor) { - if(plugin.getCommand(command) != null) { - plugin.getCommand(command).setExecutor(commandExecutor); - } - } -} diff --git a/src/main/java/mineverse/Aust1n46/chat/command/chat/Channel.java b/src/main/java/mineverse/Aust1n46/chat/command/chat/Channel.java deleted file mode 100644 index 491d9c2..0000000 --- a/src/main/java/mineverse/Aust1n46/chat/command/chat/Channel.java +++ /dev/null @@ -1,78 +0,0 @@ -package mineverse.Aust1n46.chat.command.chat; - -import org.bukkit.Bukkit; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; - -import mineverse.Aust1n46.chat.MineverseChat; -import mineverse.Aust1n46.chat.api.MineverseChatAPI; -import mineverse.Aust1n46.chat.api.MineverseChatPlayer; -import mineverse.Aust1n46.chat.api.events.ChannelJoinEvent; -import mineverse.Aust1n46.chat.channel.ChatChannel; -import mineverse.Aust1n46.chat.command.VentureCommand; -import mineverse.Aust1n46.chat.localization.LocalizedMessage; - -public class Channel implements VentureCommand, Listener { - - @Override - public void execute(CommandSender sender, String command, String[] args) { - if (!(sender instanceof Player)) { - Bukkit.getServer().getConsoleSender().sendMessage(LocalizedMessage.COMMAND_MUST_BE_RUN_BY_PLAYER.toString()); - return; - } - MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer((Player) sender); - if (args.length > 0) { - if (!ChatChannel.isChannel(args[0])) { - mcp.getPlayer().sendMessage(LocalizedMessage.INVALID_CHANNEL.toString() - .replace("{args}", args[0])); - return; - } - ChatChannel channel = ChatChannel.getChannel(args[0]); - Bukkit.getServer().getPluginManager().callEvent(new ChannelJoinEvent(mcp.getPlayer(), channel, LocalizedMessage.SET_CHANNEL.toString() - .replace("{channel_color}", channel.getColor() + "") - .replace("{channel_name}", channel.getName()))); - return; - } - mcp.getPlayer().sendMessage(LocalizedMessage.COMMAND_INVALID_ARGUMENTS.toString() - .replace("{command}", "/channel") - .replace("{args}", "[channel]")); - return; - } - - @EventHandler(priority = EventPriority.MONITOR) - public void onChannelJoin(ChannelJoinEvent event) { - if (event.isCancelled()) - return; - ChatChannel channel = event.getChannel(); - MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer(event.getPlayer()); - if (channel.hasPermission()) { - if (!mcp.getPlayer().hasPermission(channel.getPermission())) { - mcp.removeListening(channel.getName()); - mcp.getPlayer().sendMessage(LocalizedMessage.CHANNEL_NO_PERMISSION.toString()); - return; - } - } - if (mcp.hasConversation()) { - for (MineverseChatPlayer p : MineverseChatAPI.getOnlineMineverseChatPlayers()) { - if (p.isSpy()) { - p.getPlayer().sendMessage(LocalizedMessage.EXIT_PRIVATE_CONVERSATION_SPY.toString() - .replace("{player_sender}", mcp.getName()) - .replace("{player_receiver}", MineverseChatAPI.getMineverseChatPlayer(mcp.getConversation()).getName())); - } - } - mcp.getPlayer().sendMessage(LocalizedMessage.EXIT_PRIVATE_CONVERSATION.toString() - .replace("{player_receiver}", MineverseChatAPI.getMineverseChatPlayer(mcp.getConversation()).getName())); - mcp.setConversation(null); - } - mcp.addListening(channel.getName()); - mcp.setCurrentChannel(channel); - mcp.getPlayer().sendMessage(event.getMessage()); - if (channel.getBungee()) { - MineverseChat.synchronize(mcp, true); - } - return; - } -} diff --git a/src/main/java/mineverse/Aust1n46/chat/command/chat/Chatreload.java b/src/main/java/mineverse/Aust1n46/chat/command/chat/Chatreload.java deleted file mode 100644 index 038b7b8..0000000 --- a/src/main/java/mineverse/Aust1n46/chat/command/chat/Chatreload.java +++ /dev/null @@ -1,60 +0,0 @@ -package mineverse.Aust1n46.chat.command.chat; - -import java.util.UUID; - -import org.bukkit.Bukkit; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import mineverse.Aust1n46.chat.MineverseChat; -import mineverse.Aust1n46.chat.api.MineverseChatAPI; -import mineverse.Aust1n46.chat.api.MineverseChatPlayer; -import mineverse.Aust1n46.chat.command.VentureCommand; -import mineverse.Aust1n46.chat.database.PlayerData; -import mineverse.Aust1n46.chat.localization.LocalizedMessage; -import mineverse.Aust1n46.chat.utilities.Format; - -public class Chatreload implements VentureCommand { - private MineverseChat plugin = MineverseChat.getInstance(); - - @Override - public void execute(CommandSender sender, String command, String[] args) { - if(sender.hasPermission("venturechat.reload")) { - PlayerData.savePlayerData(); - MineverseChatAPI.clearMineverseChatPlayerMap(); - MineverseChatAPI.clearNameMap(); - MineverseChatAPI.clearOnlineMineverseChatPlayerMap(); - - plugin.reloadConfig(); - MineverseChat.initializeConfigReaders(); - - PlayerData.loadLegacyPlayerData(); - PlayerData.loadPlayerData(); - for(Player p : plugin.getServer().getOnlinePlayers()) { - MineverseChatPlayer mcp = MineverseChatAPI.getMineverseChatPlayer(p); - if(mcp == null) { - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&c - Could not find player data post reload for currently online player: " + p.getName())); - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&c - There could be an issue with your player data saving.")); - String name = p.getName(); - UUID uuid = p.getUniqueId(); - mcp = new MineverseChatPlayer(uuid, name); - } - mcp.setOnline(true); - mcp.setHasPlayed(false); - mcp.setJsonFormat(); - MineverseChatAPI.addMineverseChatOnlinePlayerToMap(mcp); - MineverseChatAPI.addNameToMap(mcp); - } - - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Config reloaded")); - for(MineverseChatPlayer player : MineverseChatAPI.getOnlineMineverseChatPlayers()) { - if(player.getPlayer().hasPermission("venturechat.reload")) { - player.getPlayer().sendMessage(LocalizedMessage.CONFIG_RELOADED.toString()); - } - } - return; - } - sender.sendMessage(LocalizedMessage.COMMAND_NO_PERMISSION.toString()); - return; - } -} diff --git a/src/main/java/mineverse/Aust1n46/chat/command/chat/Config.java b/src/main/java/mineverse/Aust1n46/chat/command/chat/Config.java deleted file mode 100644 index ef20a85..0000000 --- a/src/main/java/mineverse/Aust1n46/chat/command/chat/Config.java +++ /dev/null @@ -1,1175 +0,0 @@ -package mineverse.Aust1n46.chat.command.chat; - -import java.util.List; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; - -import mineverse.Aust1n46.chat.MineverseChat; -import mineverse.Aust1n46.chat.command.VentureCommand; -import mineverse.Aust1n46.chat.utilities.Format; - -public class Config implements VentureCommand { - private MineverseChat plugin = MineverseChat.getInstance(); - - @Override - public void execute(CommandSender sender, String command, String[] args) { - if (sender.hasPermission("venturechat.edit")) { - try { - switch (args[0]) { - case "filters": { - try { - switch (args[1]) { - case "page": { - try { - if (Integer.parseInt(args[2]) > 0) { - plugin.reloadConfig(); - List filters = plugin.getConfig().getStringList("filters"); - sender.sendMessage(ChatColor.RED + "List of filters page: " + args[2]); - for (int a = 0 + (Integer.parseInt(args[2]) - 1) * 97; a <= Integer.parseInt(args[2]) * 97; a++) { - if (a >= filters.size()) { - break; - } - sender.sendMessage(ChatColor.GREEN + "" + filters.get(a)); - } - if (filters.size() >= Integer.parseInt(args[2]) * 97) { - int nextpage = Integer.parseInt(args[2]) + 1; - sender.sendMessage(ChatColor.RED + "/config filters page " + nextpage); - } - break; - } - sender.sendMessage(ChatColor.RED + "Invalid arguments, /config filters page [number]"); - break; - } catch (Exception e) { - sender.sendMessage(ChatColor.RED + "Invalid arguments, /config filters page [number]"); - } - break; - } - case "add": { - List filters = plugin.getConfig().getStringList("filters"); - if (args[2].contains(",")) { - filters.add(args[2]); - plugin.getConfig().set("filters", filters); - sender.sendMessage(ChatColor.GREEN + "Added filter " + args[2]); - plugin.saveConfig(); - plugin.reloadConfig(); - Bukkit.getPluginManager().disablePlugin(plugin); - Bukkit.getPluginManager().enablePlugin(plugin); - break; - } - sender.sendMessage(ChatColor.RED + "Invalid arguments, regex1,regex2"); - break; - } - case "remove": { - List filters = plugin.getConfig().getStringList("filters"); - if (args[2].contains(",")) { - filters.remove(args[2]); - plugin.getConfig().set("filters", filters); - sender.sendMessage(ChatColor.GREEN + "Removed filter " + args[2]); - plugin.saveConfig(); - plugin.reloadConfig(); - Bukkit.getPluginManager().disablePlugin(plugin); - Bukkit.getPluginManager().enablePlugin(plugin); - break; - } - sender.sendMessage(ChatColor.RED + "Invalid arguments, regex1,regex2"); - break; - } - default: { - sender.sendMessage(ChatColor.RED + "Invalid arguments, /config filters [page [number], add, remove]"); - break; - } - } - } catch (Exception e) { - sender.sendMessage(ChatColor.RED + "Invalid arguments, /config filters [page [number], add, remove]"); - } - break; - } - case "blockablecommands": { - try { - switch (args[1]) { - case "page": { - try { - if (Integer.parseInt(args[2]) > 0) { - plugin.reloadConfig(); - List blockablecommands = plugin.getConfig().getStringList("blockablecommands"); - sender.sendMessage(ChatColor.RED + "List of blockablecommands page: " + args[2]); - for (int a = 0 + (Integer.parseInt(args[2]) - 1) * 97; a <= Integer.parseInt(args[2]) * 97; a++) { - if (a >= blockablecommands.size()) { - break; - } - sender.sendMessage(ChatColor.GREEN + "" + blockablecommands.get(a)); - } - if (blockablecommands.size() >= Integer.parseInt(args[2]) * 97) { - int nextpage = Integer.parseInt(args[2]) + 1; - sender.sendMessage(ChatColor.RED + "/config blockablecommands page " + nextpage); - } - break; - } - sender.sendMessage(ChatColor.RED + "Invalid arguments, /config blockablecommands page [number]"); - break; - } catch (Exception e) { - sender.sendMessage(ChatColor.RED + "Invalid arguments, /config blockablecommands page [number]"); - } - break; - } - case "add": { - List blockablecommands = plugin.getConfig().getStringList("blockablecommands"); - blockablecommands.add(args[2]); - plugin.getConfig().set("blockablecommands", blockablecommands); - sender.sendMessage(ChatColor.GREEN + "Added blockablecommand " + args[2]); - plugin.saveConfig(); - plugin.reloadConfig(); - break; - } - case "remove": { - List blockablecommands = plugin.getConfig().getStringList("blockablecommands"); - blockablecommands.remove(args[2]); - plugin.getConfig().set("blockablecommands", blockablecommands); - sender.sendMessage(ChatColor.GREEN + "Removed blockablecommand " + args[2]); - plugin.saveConfig(); - plugin.reloadConfig(); - break; - } - default: { - sender.sendMessage(ChatColor.RED + "Invalid arguments, /config blockablecommands [page [number], add, remove]"); - break; - } - } - } catch (Exception e) { - sender.sendMessage(ChatColor.RED + "Invalid arguments, /config blockablecommands [page [number], add, remove]"); - } - break; - } - case "commandspy": { - try { - switch (args[1]) { - case "worldeditcommands": { - try { - switch (args[2]) { - case "true": { - plugin.getConfig().getConfigurationSection("commandspy").set("worldeditcommands", true); - sender.sendMessage(ChatColor.GREEN + "worldeditcommands: has been set to true"); - plugin.saveConfig(); - plugin.reloadConfig(); - break; - } - case "false": { - plugin.getConfig().getConfigurationSection("commandspy").set("worldeditcommands", false); - sender.sendMessage(ChatColor.GREEN + "worldeditcommands: has been set to false"); - plugin.saveConfig(); - plugin.reloadConfig(); - break; - } - default: { - sender.sendMessage(ChatColor.RED + "Invalid arguments, /config commandspy worldeditcommands [true/false]"); - break; - } - } - } catch (Exception e) { - sender.sendMessage(ChatColor.GREEN + "worldeditcommands: " + plugin.getConfig().getConfigurationSection("commandspy").getBoolean("worldeditcommands")); - } - break; - } - } - } catch (Exception e) { - sender.sendMessage(ChatColor.RED + "Invalid arguments, /config commandspy worldeditcommands"); - } - break; - } - case "antispam": { - try { - switch (args[1]) { - case "enabled": { - try { - switch (args[2]) { - case "true": { - plugin.getConfig().getConfigurationSection("antispam").set("enabled", true); - sender.sendMessage(ChatColor.GREEN + "enabled: has been set to true"); - plugin.saveConfig(); - plugin.reloadConfig(); - break; - } - case "false": { - plugin.getConfig().getConfigurationSection("antispam").set("enabled", false); - sender.sendMessage(ChatColor.GREEN + "enabled: has been set to false"); - plugin.saveConfig(); - plugin.reloadConfig(); - break; - } - default: { - sender.sendMessage(ChatColor.RED + "Invalid arguments, /config antispam enabled [true/false]"); - break; - } - } - } catch (Exception e) { - sender.sendMessage(ChatColor.GREEN + "enabled: " + plugin.getConfig().getConfigurationSection("antispam").getBoolean("enabled")); - } - break; - } - case "spamnumber": { - try { - if (Integer.parseInt(args[2]) > 0) { - plugin.getConfig().getConfigurationSection("antispam").set("spamnumber", Integer.parseInt(args[2])); - sender.sendMessage(ChatColor.GREEN + "spamnumber: has been set to " + args[2]); - plugin.saveConfig(); - plugin.reloadConfig(); - break; - } - sender.sendMessage(ChatColor.RED + "Invalid spamnumber, /config antispam spamnumber [Integer > 0]"); - break; - } catch (NumberFormatException e) { - sender.sendMessage(ChatColor.RED + "Invalid spamnumber, /config antispam [Integer > 0]"); - break; - } catch (Exception e) { - sender.sendMessage(ChatColor.GREEN + "spamnumber: " + plugin.getConfig().getConfigurationSection("antispam").getInt("spamnumber")); - break; - } - } - case "spamtime": { - try { - if (Integer.parseInt(args[2]) > 0) { - plugin.getConfig().getConfigurationSection("antispam").set("spamtime", Integer.parseInt(args[2])); - sender.sendMessage(ChatColor.GREEN + "spamtime: has been set to " + args[2]); - plugin.saveConfig(); - plugin.reloadConfig(); - break; - } - sender.sendMessage(ChatColor.RED + "Invalid spamtime, /config antispam spamtime [Integer > 0]"); - break; - } catch (NumberFormatException e) { - sender.sendMessage(ChatColor.RED + "Invalid spamtime, /config antispam spamtime [Integer > 0]"); - break; - } catch (Exception e) { - sender.sendMessage(ChatColor.GREEN + "spamtime: " + plugin.getConfig().getConfigurationSection("antispam").getInt("spamtime")); - break; - } - } - case "mutetime": { - try { - if (Integer.parseInt(args[2]) >= 0) { - plugin.getConfig().getConfigurationSection("antispam").set("mutetime", Integer.parseInt(args[2])); - sender.sendMessage(ChatColor.GREEN + "mutetime: has been set to " + args[2]); - plugin.saveConfig(); - plugin.reloadConfig(); - break; - } - sender.sendMessage(ChatColor.RED + "Invalid mutetime, /config antispam mutetime [Integer >= 0]"); - break; - } catch (NumberFormatException e) { - sender.sendMessage(ChatColor.RED + "Invalid mutetime, /config antispam mutetime [Integer >= 0]"); - break; - } catch (Exception e) { - sender.sendMessage(ChatColor.GREEN + "mutetime: " + plugin.getConfig().getConfigurationSection("antispam").getInt("mutetime")); - break; - } - } - default: { - sender.sendMessage(ChatColor.RED + "Invalid arguments, /config antispam [enabled, spamnumber, spamtime, mutetime]"); - break; - } - } - } catch (Exception e) { - sender.sendMessage(ChatColor.GREEN + "enabled: " + plugin.getConfig().getConfigurationSection("antispam").getString("enabled")); - sender.sendMessage(ChatColor.GREEN + "spamnumber: " + plugin.getConfig().getConfigurationSection("antispam").getString("spamnumber")); - sender.sendMessage(ChatColor.GREEN + "spamtime: " + plugin.getConfig().getConfigurationSection("antispam").getString("spamtime")); - sender.sendMessage(ChatColor.GREEN + "mutetime: " + plugin.getConfig().getConfigurationSection("antispam").getInt("mutetime")); - } - break; - } - case "mysql": { - try { - switch (args[1]) { - case "enabled": { - try { - switch (args[2]) { - case "true": { - plugin.getConfig().getConfigurationSection("mysql").set("enabled", true); - sender.sendMessage(ChatColor.GREEN + "enabled: has been set to true"); - plugin.saveConfig(); - plugin.reloadConfig(); - break; - } - case "false": { - plugin.getConfig().getConfigurationSection("mysql").set("enabled", false); - sender.sendMessage(ChatColor.GREEN + "enabled: has been set to false"); - plugin.saveConfig(); - plugin.reloadConfig(); - break; - } - default: { - sender.sendMessage(ChatColor.RED + "Invalid arguments, /config mysql enabled [true/false]"); - break; - } - } - } catch (Exception e) { - sender.sendMessage(ChatColor.GREEN + "enabled: " + plugin.getConfig().getConfigurationSection("mysql").getBoolean("enabled")); - } - break; - } - case "user": { - try { - plugin.getConfig().getConfigurationSection("mysql").set("user", args[2]); - sender.sendMessage(ChatColor.GREEN + "user: has been set to " + args[2]); - plugin.saveConfig(); - plugin.reloadConfig(); - Bukkit.getPluginManager().disablePlugin(plugin); - Bukkit.getPluginManager().enablePlugin(plugin); - break; - } catch (Exception e) { - sender.sendMessage(ChatColor.GREEN + "user: " + plugin.getConfig().getConfigurationSection("mysql").getString("user")); - break; - } - } - case "port": { - try { - plugin.getConfig().getConfigurationSection("mysql").set("port", args[2]); - sender.sendMessage(ChatColor.GREEN + "port: has been set to " + args[2]); - plugin.saveConfig(); - plugin.reloadConfig(); - Bukkit.getPluginManager().disablePlugin(plugin); - Bukkit.getPluginManager().enablePlugin(plugin); - break; - } catch (Exception e) { - sender.sendMessage(ChatColor.GREEN + "port: " + plugin.getConfig().getConfigurationSection("mysql").getString("port")); - break; - } - } - case "password": { - try { - plugin.getConfig().getConfigurationSection("mysql").set("password", args[2]); - sender.sendMessage(ChatColor.GREEN + "password: has been set to " + args[2]); - plugin.saveConfig(); - plugin.reloadConfig(); - Bukkit.getPluginManager().disablePlugin(plugin); - Bukkit.getPluginManager().enablePlugin(plugin); - break; - } catch (Exception e) { - sender.sendMessage(ChatColor.GREEN + "password: " + plugin.getConfig().getConfigurationSection("mysql").getString("password")); - break; - } - } - case "host": { - try { - plugin.getConfig().getConfigurationSection("mysql").set("host", args[2]); - sender.sendMessage(ChatColor.GREEN + "host: has been set to " + args[2]); - plugin.saveConfig(); - plugin.reloadConfig(); - Bukkit.getPluginManager().disablePlugin(plugin); - Bukkit.getPluginManager().enablePlugin(plugin); - break; - } catch (Exception e) { - sender.sendMessage(ChatColor.GREEN + "host: " + plugin.getConfig().getConfigurationSection("mysql").getString("host")); - break; - } - } - case "database": { - try { - plugin.getConfig().getConfigurationSection("mysql").set("database", args[2]); - sender.sendMessage(ChatColor.GREEN + "database: has been set to " + args[2]); - plugin.saveConfig(); - plugin.reloadConfig(); - Bukkit.getPluginManager().disablePlugin(plugin); - Bukkit.getPluginManager().enablePlugin(plugin); - break; - } catch (Exception e) { - sender.sendMessage(ChatColor.GREEN + "database: " + plugin.getConfig().getConfigurationSection("mysql").getString("database")); - break; - } - } - default: { - sender.sendMessage(ChatColor.RED + "Invalid arguments, /config mysql [enabled, user, port, password, host, database]"); - break; - } - } - } catch (Exception e) { - sender.sendMessage(ChatColor.RED + "Invalid arguments, /config mysql [enabled, user, port, password, host, database]"); - } - break; - } - case "pluginname": { - try { - plugin.getConfig().set("pluginname", args[1]); - sender.sendMessage(ChatColor.GREEN + "pluginname: has been set to " + args[1]); - plugin.saveConfig(); - plugin.reloadConfig(); - break; - } catch (Exception e) { - sender.sendMessage(ChatColor.GREEN + "pluginname: " + plugin.getConfig().getString("pluginname")); - break; - } - } - case "loglevel": { - try { - switch (args[1]) { - case "info": { - plugin.getConfig().set("loglevel", "info"); - sender.sendMessage(ChatColor.GREEN + "loglevel: has been set to info"); - plugin.saveConfig(); - plugin.reloadConfig(); - break; - } - case "debug": { - plugin.getConfig().set("loglevel", "debug"); - sender.sendMessage(ChatColor.GREEN + "loglevel: has been set to debug"); - plugin.saveConfig(); - plugin.reloadConfig(); - break; - } - case "warning": { - plugin.getConfig().set("loglevel", "warning"); - sender.sendMessage(ChatColor.GREEN + "loglevel: has been set to warning"); - plugin.saveConfig(); - plugin.reloadConfig(); - break; - } - case "error": { - plugin.getConfig().set("loglevel", "error"); - sender.sendMessage(ChatColor.GREEN + "loglevel: has been set to error"); - plugin.saveConfig(); - plugin.reloadConfig(); - break; - } - default: { - sender.sendMessage(ChatColor.RED + "Invalid arguments, /config loglevel [info, debug, warning, error]"); - break; - } - } - } catch (Exception e) { - sender.sendMessage(ChatColor.GREEN + "loglevel: " + plugin.getConfig().getString("loglevel")); - } - break; - } - case "savesenderdata": { - try { - switch (args[1]) { - case "true": { - plugin.getConfig().set("savesenderdata", true); - sender.sendMessage(ChatColor.GREEN + "saveplayerdata: has been set to true"); - plugin.saveConfig(); - plugin.reloadConfig(); - break; - } - case "false": { - plugin.getConfig().set("saveplayerdata", false); - sender.sendMessage(ChatColor.GREEN + "saveplayerdata: has been set to false"); - plugin.saveConfig(); - plugin.reloadConfig(); - break; - } - default: { - sender.sendMessage(ChatColor.RED + "Invalid arguments, /config saveplayerdata [true/false]"); - break; - } - } - } catch (Exception e) { - sender.sendMessage(ChatColor.GREEN + "saveplayerdata: " + plugin.getConfig().getBoolean("saveplayerdata")); - } - break; - } - case "saveinterval": { - try { - if (Integer.parseInt(args[1]) >= 0) { - plugin.getConfig().set("saveinterval", Integer.parseInt(args[1])); - sender.sendMessage(ChatColor.GREEN + "saveinterval: has been set to " + args[1]); - plugin.saveConfig(); - plugin.reloadConfig(); - break; - } - sender.sendMessage(ChatColor.RED + "Invalid saveinterval, /config saveinterval [saveinterval]"); - break; - } catch (NumberFormatException e) { - sender.sendMessage(ChatColor.RED + "Invalid saveinterval, /config saveinterval [saveinterval]"); - break; - } catch (Exception e) { - sender.sendMessage(ChatColor.GREEN + "saveinterval: " + plugin.getConfig().getInt("saveinterval")); - break; - } - } - case "tellcolor": { - try { - if (Format.isValidColor(args[1])) { - plugin.getConfig().set("tellcolor", args[1].toLowerCase()); - sender.sendMessage(ChatColor.GREEN + "tellcolor: has been set to " + args[1].toLowerCase()); - plugin.saveConfig(); - plugin.reloadConfig(); - Bukkit.getPluginManager().disablePlugin(plugin); - Bukkit.getPluginManager().enablePlugin(plugin); - break; - } - sender.sendMessage(ChatColor.RED + "Invalid color, /config tellcolor [color]"); - break; - } catch (Exception e) { - sender.sendMessage(ChatColor.GREEN + "tellcolor: " + plugin.getConfig().getString("tellcolor")); - break; - } - } - case "vanishsupport": { - try { - switch (args[1]) { - case "true": { - plugin.getConfig().set("vanishsupport", true); - sender.sendMessage(ChatColor.GREEN + "vanishsupport: has been set to true"); - plugin.saveConfig(); - plugin.reloadConfig(); - break; - } - case "false": { - plugin.getConfig().set("vanishsupport", false); - sender.sendMessage(ChatColor.GREEN + "vanishsupport: has been set to false"); - plugin.saveConfig(); - plugin.reloadConfig(); - break; - } - default: { - sender.sendMessage(ChatColor.RED + "Invalid arguments, /config vanishsupport [true/false]"); - break; - } - } - } catch (Exception e) { - sender.sendMessage(ChatColor.GREEN + "vanishsupport: " + plugin.getConfig().getBoolean("vanishsupport")); - } - break; - } - case "tellformatto": { - try { - String format = args[1] + " "; - for (int x = 2; x < args.length; x++) { - if (args[x].length() > 0) format += args[x] + " "; - } - format = format.substring(0, format.length() - 1); - plugin.getConfig().set("tellformatto", format); - sender.sendMessage(ChatColor.GREEN + "tellformatto: has been set to " + format); - plugin.saveConfig(); - plugin.reloadConfig(); - Bukkit.getPluginManager().disablePlugin(plugin); - Bukkit.getPluginManager().enablePlugin(plugin); - break; - } catch (Exception e) { - sender.sendMessage(ChatColor.GREEN + "tellformatto: " + plugin.getConfig().getString("tellformatto")); - break; - } - } - case "tellformatfrom": { - try { - String format = args[1] + " "; - for (int x = 2; x < args.length; x++) { - if (args[x].length() > 0) format += args[x] + " "; - } - format = format.substring(0, format.length() - 1); - plugin.getConfig().set("tellformatfrom", format); - sender.sendMessage(ChatColor.GREEN + "tellformatfrom: has been set to " + format); - plugin.saveConfig(); - plugin.reloadConfig(); - Bukkit.getPluginManager().disablePlugin(plugin); - Bukkit.getPluginManager().enablePlugin(plugin); - break; - } catch (Exception e) { - sender.sendMessage(ChatColor.GREEN + "tellformatfrom: " + plugin.getConfig().getString("tellformatfrom")); - break; - } - } - case "tellformatspy": { - try { - String format = args[1] + " "; - for (int x = 2; x < args.length; x++) { - if (args[x].length() > 0) format += args[x] + " "; - } - format = format.substring(0, format.length() - 1); - plugin.getConfig().set("tellformatspy", format); - sender.sendMessage(ChatColor.GREEN + "tellformatspy: has been set to " + format); - plugin.saveConfig(); - plugin.reloadConfig(); - Bukkit.getPluginManager().disablePlugin(plugin); - Bukkit.getPluginManager().enablePlugin(plugin); - break; - } catch (Exception e) { - sender.sendMessage(ChatColor.GREEN + "tellformatspy: " + plugin.getConfig().getString("tellformatspy")); - break; - } - } - case "replyformatto": { - try { - String format = args[1] + " "; - for (int x = 2; x < args.length; x++) { - if (args[x].length() > 0) format += args[x] + " "; - } - format = format.substring(0, format.length() - 1); - plugin.getConfig().set("replyformatto", format); - sender.sendMessage(ChatColor.GREEN + "replyformatto: has been set to " + format); - plugin.saveConfig(); - plugin.reloadConfig(); - Bukkit.getPluginManager().disablePlugin(plugin); - Bukkit.getPluginManager().enablePlugin(plugin); - break; - } catch (Exception e) { - sender.sendMessage(ChatColor.GREEN + "replyformatto: " + plugin.getConfig().getString("replyformatto")); - break; - } - } - case "replyformatfrom": { - try { - String format = args[1] + " "; - for (int x = 2; x < args.length; x++) { - if (args[x].length() > 0) format += args[x] + " "; - } - format = format.substring(0, format.length() - 1); - plugin.getConfig().set("replyformatfrom", format); - sender.sendMessage(ChatColor.GREEN + "replyformatfrom: has been set to " + format); - plugin.saveConfig(); - plugin.reloadConfig(); - Bukkit.getPluginManager().disablePlugin(plugin); - Bukkit.getPluginManager().enablePlugin(plugin); - break; - } catch (Exception e) { - sender.sendMessage(ChatColor.GREEN + "replyformatfrom: " + plugin.getConfig().getString("replyformatfrom")); - break; - } - } - case "replyformatspy": { - try { - String format = args[1] + " "; - for (int x = 2; x < args.length; x++) { - if (args[x].length() > 0) format += args[x] + " "; - } - format = format.substring(0, format.length() - 1); - plugin.getConfig().set("replyformatspy", format); - sender.sendMessage(ChatColor.GREEN + "replyformatspy: has been set to " + format); - plugin.saveConfig(); - plugin.reloadConfig(); - Bukkit.getPluginManager().disablePlugin(plugin); - Bukkit.getPluginManager().enablePlugin(plugin); - break; - } catch (Exception e) { - sender.sendMessage(ChatColor.GREEN + "replyformatspy: " + plugin.getConfig().getString("replyformatspy")); - break; - } - } - case "partyformat": { - try { - String format = args[1] + " "; - for (int x = 2; x < args.length; x++) { - if (args[x].length() > 0) format += args[x] + " "; - } - format = format.substring(0, format.length() - 1); - plugin.getConfig().set("partyformat", format); - sender.sendMessage(ChatColor.GREEN + "partyformat: has been set to " + format); - plugin.saveConfig(); - plugin.reloadConfig(); - Bukkit.getPluginManager().disablePlugin(plugin); - Bukkit.getPluginManager().enablePlugin(plugin); - break; - } catch (Exception e) { - sender.sendMessage(ChatColor.GREEN + "partyformat: " + plugin.getConfig().getString("partyformat")); - break; - } - } - case "broadcastafk": { - try { - switch (args[1]) { - case "true": { - plugin.getConfig().set("broadcastafk", true); - sender.sendMessage(ChatColor.GREEN + "broadcastafk: has been set to true"); - plugin.saveConfig(); - plugin.reloadConfig(); - break; - } - case "false": { - plugin.getConfig().set("broadcastafk", false); - sender.sendMessage(ChatColor.GREEN + "broadcastafk: has been set to false"); - plugin.saveConfig(); - plugin.reloadConfig(); - break; - } - default: { - sender.sendMessage(ChatColor.RED + "Invalid arguments, /config broadcastafk [true/false]"); - break; - } - } - } catch (Exception e) { - sender.sendMessage(ChatColor.GREEN + "broadcastafk: " + plugin.getConfig().getBoolean("broadcastafk")); - } - break; - } - case "formatcleaner": { - try { - switch (args[1]) { - case "true": { - plugin.getConfig().set("formatcleaner", true); - sender.sendMessage(ChatColor.GREEN + "formatcleaner: has been set to true"); - plugin.saveConfig(); - plugin.reloadConfig(); - break; - } - case "false": { - plugin.getConfig().set("formatcleaner", false); - sender.sendMessage(ChatColor.GREEN + "formatcleaner: has been set to false"); - plugin.saveConfig(); - plugin.reloadConfig(); - break; - } - default: { - sender.sendMessage(ChatColor.RED + "Invalid arguments, /config formatcleaner [true/false]"); - break; - } - } - } catch (Exception e) { - sender.sendMessage(ChatColor.GREEN + "formatcleaner: " + plugin.getConfig().getBoolean("formatcleaner")); - } - break; - } - case "broadcast": { - try { - switch (args[1]) { - case "color": { - try { - if (Format.isValidColor(args[2])) { - plugin.getConfig().getConfigurationSection("broadcast").set("color", args[2].toLowerCase()); - sender.sendMessage(ChatColor.GREEN + "color: has been set to " + args[2].toLowerCase()); - plugin.saveConfig(); - plugin.reloadConfig(); - Bukkit.getPluginManager().disablePlugin(plugin); - Bukkit.getPluginManager().enablePlugin(plugin); - break; - } - sender.sendMessage(ChatColor.RED + "Invalid color, /config broadcast color [color]"); - break; - } catch (Exception e) { - sender.sendMessage(ChatColor.RED + "Invalid arguments, /config broadcast color [color]"); - break; - } - } - case "permissions": { - try { - plugin.getConfig().getConfigurationSection("broadcast").set("permissions", args[2]); - sender.sendMessage(ChatColor.GREEN + "permissions: has been set to " + args[2]); - plugin.saveConfig(); - plugin.reloadConfig(); - Bukkit.getPluginManager().disablePlugin(plugin); - Bukkit.getPluginManager().enablePlugin(plugin); - break; - } catch (Exception e) { - sender.sendMessage(ChatColor.RED + "Invalid arguments, /config broadcast permissions [permission]"); - break; - } - } - case "displaytag": { - try { - plugin.getConfig().getConfigurationSection("broadcast").set("displaytag", args[2]); - sender.sendMessage(ChatColor.GREEN + "displaytag: has been set to " + args[2]); - plugin.saveConfig(); - plugin.reloadConfig(); - Bukkit.getPluginManager().disablePlugin(plugin); - Bukkit.getPluginManager().enablePlugin(plugin); - break; - } catch (Exception e) { - sender.sendMessage(ChatColor.RED + "Invalid arguments, /config broadcast displaytag [displaytag]"); - break; - } - } - default: { - sender.sendMessage(ChatColor.RED + "Invalid arguments, /config broadcast [color, permissions, displaytag]"); - break; - } - } - } catch (Exception e) { - sender.sendMessage(ChatColor.GREEN + "color: " + plugin.getConfig().getConfigurationSection("broadcast").getString("color")); - sender.sendMessage(ChatColor.GREEN + "permissions: " + plugin.getConfig().getConfigurationSection("broadcast").getString("permissions")); - sender.sendMessage(ChatColor.GREEN + "displaytag: " + plugin.getConfig().getConfigurationSection("broadcast").getString("displaytag")); - } - break; - } - case "channels": { - try { - if (plugin.getConfig().getConfigurationSection("channels").getString(args[1]) != null) { - try { - switch (args[2]) { - case "color": { - try { - if (Format.isValidColor(args[3])) { - plugin.getConfig().getConfigurationSection("channels." + args[1]).set("color", args[3].toLowerCase()); - sender.sendMessage(ChatColor.GREEN + "color: has been set to " + args[3].toLowerCase()); - plugin.saveConfig(); - plugin.reloadConfig(); - Bukkit.getPluginManager().disablePlugin(plugin); - Bukkit.getPluginManager().enablePlugin(plugin); - break; - } - sender.sendMessage(ChatColor.RED + "Invalid color, /config channels [channel] color [color]"); - break; - } catch (Exception e) { - sender.sendMessage(ChatColor.GREEN + "color: " + plugin.getConfig().getConfigurationSection("channels." + args[1]).getString("color")); - break; - } - } - case "chatcolor": { - try { - if (Format.isValidColor(args[3]) || args[3].equalsIgnoreCase("None")) { - plugin.getConfig().getConfigurationSection("channels." + args[1]).set("chatcolor", args[3].toLowerCase()); - sender.sendMessage(ChatColor.GREEN + "chatcolor: has been set to " + args[3].toLowerCase()); - plugin.saveConfig(); - plugin.reloadConfig(); - Bukkit.getPluginManager().disablePlugin(plugin); - Bukkit.getPluginManager().enablePlugin(plugin); - break; - } - sender.sendMessage(ChatColor.RED + "Invalid color, /config channels [channel] chatcolor [color]"); - break; - } catch (Exception e) { - sender.sendMessage(ChatColor.GREEN + "chatcolor: " + plugin.getConfig().getConfigurationSection("channels." + args[1]).getString("chatcolor")); - break; - } - } - case "mutable": { - try { - switch (args[3]) { - case "true": { - plugin.getConfig().getConfigurationSection("channels." + args[1]).set("mutable", true); - sender.sendMessage(ChatColor.GREEN + "mutable: has been set to true"); - plugin.saveConfig(); - plugin.reloadConfig(); - Bukkit.getPluginManager().disablePlugin(plugin); - Bukkit.getPluginManager().enablePlugin(plugin); - break; - } - case "false": { - plugin.getConfig().getConfigurationSection("channels." + args[1]).set("mutable", false); - sender.sendMessage(ChatColor.GREEN + "mutable: has been set to false"); - plugin.saveConfig(); - plugin.reloadConfig(); - Bukkit.getPluginManager().disablePlugin(plugin); - Bukkit.getPluginManager().enablePlugin(plugin); - break; - } - default: { - sender.sendMessage(ChatColor.RED + "Invalid arguments, /config channels [channel] mutable [true/false]"); - break; - } - } - } catch (Exception e) { - sender.sendMessage(ChatColor.GREEN + "mutable: " + plugin.getConfig().getConfigurationSection("channels." + args[1]).getBoolean("mutable")); - } - break; - } - case "filter": { - try { - switch (args[3]) { - case "true": { - plugin.getConfig().getConfigurationSection("channels." + args[1]).set("filter", true); - sender.sendMessage(ChatColor.GREEN + "filter: has been set to true"); - plugin.saveConfig(); - plugin.reloadConfig(); - Bukkit.getPluginManager().disablePlugin(plugin); - Bukkit.getPluginManager().enablePlugin(plugin); - break; - } - case "false": { - plugin.getConfig().getConfigurationSection("channels." + args[1]).set("filter", false); - sender.sendMessage(ChatColor.GREEN + "filter: has been set to false"); - plugin.saveConfig(); - plugin.reloadConfig(); - Bukkit.getPluginManager().disablePlugin(plugin); - Bukkit.getPluginManager().enablePlugin(plugin); - break; - } - default: { - sender.sendMessage(ChatColor.RED + "Invalid arguments, /config channels [channel] filter [true/false]"); - break; - } - } - } catch (Exception e) { - sender.sendMessage(ChatColor.GREEN + "filter: " + plugin.getConfig().getConfigurationSection("channels." + args[1]).getBoolean("filter")); - } - break; - } - case "permissions": { - try { - plugin.getConfig().getConfigurationSection("channels." + args[1]).set("permissions", args[3]); - sender.sendMessage(ChatColor.GREEN + "permissions: has been set to " + args[3]); - plugin.saveConfig(); - plugin.reloadConfig(); - Bukkit.getPluginManager().disablePlugin(plugin); - Bukkit.getPluginManager().enablePlugin(plugin); - break; - } catch (Exception e) { - sender.sendMessage(ChatColor.GREEN + "permissions: " + plugin.getConfig().getConfigurationSection("channels." + args[1]).getString("permissions")); - break; - } - } - case "alias": { - try { - plugin.getConfig().getConfigurationSection("channels." + args[1]).set("alias", args[3]); - sender.sendMessage(ChatColor.GREEN + "alias: has been set to " + args[3]); - plugin.saveConfig(); - plugin.reloadConfig(); - Bukkit.getPluginManager().disablePlugin(plugin); - Bukkit.getPluginManager().enablePlugin(plugin); - break; - } catch (Exception e) { - sender.sendMessage(ChatColor.GREEN + "alias: " + plugin.getConfig().getConfigurationSection("channels." + args[1]).getString("alias")); - break; - } - } - case "default": { - try { - switch (args[3]) { - case "true": { - plugin.getConfig().getConfigurationSection("channels." + args[1]).set("default", true); - sender.sendMessage(ChatColor.GREEN + "default: has been set to true"); - plugin.saveConfig(); - plugin.reloadConfig(); - Bukkit.getPluginManager().disablePlugin(plugin); - Bukkit.getPluginManager().enablePlugin(plugin); - break; - } - case "false": { - plugin.getConfig().getConfigurationSection("channels." + args[1]).set("default", false); - sender.sendMessage(ChatColor.GREEN + "default: has been set to false"); - plugin.saveConfig(); - plugin.reloadConfig(); - Bukkit.getPluginManager().disablePlugin(plugin); - Bukkit.getPluginManager().enablePlugin(plugin); - break; - } - default: { - sender.sendMessage(ChatColor.RED + "Invalid arguments, /config channels [channel] default [true/false]"); - break; - } - } - } catch (Exception e) { - sender.sendMessage(ChatColor.GREEN + "default: " + plugin.getConfig().getConfigurationSection("channels." + args[1]).getBoolean("default")); - } - break; - } - case "autojoin": { - try { - switch (args[3]) { - case "true": { - plugin.getConfig().getConfigurationSection("channels." + args[1]).set("autojoin", true); - sender.sendMessage(ChatColor.GREEN + "autojoin: has been set to true"); - plugin.saveConfig(); - plugin.reloadConfig(); - Bukkit.getPluginManager().disablePlugin(plugin); - Bukkit.getPluginManager().enablePlugin(plugin); - break; - } - case "false": { - plugin.getConfig().getConfigurationSection("channels." + args[1]).set("autojoin", false); - sender.sendMessage(ChatColor.GREEN + "autojoin: has been set to false"); - plugin.saveConfig(); - plugin.reloadConfig(); - Bukkit.getPluginManager().disablePlugin(plugin); - Bukkit.getPluginManager().enablePlugin(plugin); - break; - } - default: { - sender.sendMessage(ChatColor.RED + "Invalid arguments, /config channels [channel] autojoin [true/false]"); - break; - } - } - } catch (Exception e) { - sender.sendMessage(ChatColor.GREEN + "autojoin: " + plugin.getConfig().getConfigurationSection("channels." + args[1]).getBoolean("autojoin")); - } - break; - } - case "distance": { - try { - if (Double.parseDouble(args[3]) >= (double) 0) { - plugin.getConfig().getConfigurationSection("channels." + args[1]).set("distance", Double.parseDouble(args[3])); - sender.sendMessage(ChatColor.GREEN + "distance: has been set to " + args[3]); - plugin.saveConfig(); - plugin.reloadConfig(); - Bukkit.getPluginManager().disablePlugin(plugin); - Bukkit.getPluginManager().enablePlugin(plugin); - break; - } - sender.sendMessage(ChatColor.RED + "Invalid distance, /config channels [channel] distance [distance]"); - break; - } catch (NumberFormatException e) { - sender.sendMessage(ChatColor.RED + "Invalid distance, /config channels [channel] distance [distance]"); - break; - } catch (Exception e) { - sender.sendMessage(ChatColor.GREEN + "distance: " + plugin.getConfig().getConfigurationSection("channels." + args[1]).getDouble("distance")); - break; - } - } - case "cooldown": { - try { - if (Integer.parseInt(args[3]) >= 0) { - plugin.getConfig().getConfigurationSection("channels." + args[1]).set("cooldown", Integer.parseInt(args[3])); - sender.sendMessage(ChatColor.GREEN + "cooldown: has been set to " + args[3]); - plugin.saveConfig(); - plugin.reloadConfig(); - Bukkit.getPluginManager().disablePlugin(plugin); - Bukkit.getPluginManager().enablePlugin(plugin); - break; - } - sender.sendMessage(ChatColor.RED + "Invalid cooldown, /config channels [channel] cooldown [cooldown]"); - break; - } catch (NumberFormatException e) { - sender.sendMessage(ChatColor.RED + "Invalid cooldown, /config channels [channel] cooldown [cooldown]"); - break; - } catch (Exception e) { - sender.sendMessage(ChatColor.GREEN + "cooldown: " + plugin.getConfig().getConfigurationSection("channels." + args[1]).getInt("cooldown")); - break; - } - } - case "bungeecord": { - try { - switch (args[3]) { - case "true": { - plugin.getConfig().getConfigurationSection("channels." + args[1]).set("bungeecord", true); - sender.sendMessage(ChatColor.GREEN + "bungeecord: has been set to true"); - plugin.saveConfig(); - plugin.reloadConfig(); - Bukkit.getPluginManager().disablePlugin(plugin); - Bukkit.getPluginManager().enablePlugin(plugin); - break; - } - case "false": { - plugin.getConfig().getConfigurationSection("channels." + args[1]).set("bungeecord", false); - sender.sendMessage(ChatColor.GREEN + "bungeecord: has been set to false"); - plugin.saveConfig(); - plugin.reloadConfig(); - Bukkit.getPluginManager().disablePlugin(plugin); - Bukkit.getPluginManager().enablePlugin(plugin); - break; - } - default: { - sender.sendMessage(ChatColor.RED + "Invalid arguments, /config channels [channel] bungeecord [true/false]"); - break; - } - } - } catch (Exception e) { - sender.sendMessage(ChatColor.GREEN + "bungeecord: " + plugin.getConfig().getConfigurationSection("channels." + args[1]).getBoolean("bungeecord")); - } - break; - } - case "format": { - try { - String format = args[3] + " "; - for (int x = 4; x < args.length; x++) { - if (args[x].length() > 0) format += args[x] + " "; - } - format = format.substring(0, format.length() - 1); - plugin.getConfig().getConfigurationSection("channels." + args[1]).set("format", format); - sender.sendMessage(ChatColor.GREEN + "format: has been set to " + format); - plugin.saveConfig(); - plugin.reloadConfig(); - Bukkit.getPluginManager().disablePlugin(plugin); - Bukkit.getPluginManager().enablePlugin(plugin); - break; - } catch (Exception e) { - sender.sendMessage(ChatColor.GREEN + "format: " + plugin.getConfig().getConfigurationSection("channels." + args[1]).getString("format")); - break; - } - } - default: { - sender.sendMessage(ChatColor.RED + "Invalid arguments, /config channels " + args[1] + " [color, chatcolor, mutable, alias, default, autojoin, distance, cooldown, bungeecord, format]"); - break; - } - } - } catch (Exception e) { - sender.sendMessage(ChatColor.RED + "Invalid arguments, /config channels " + args[1] + " [color, chatcolor, mutable, alias, default, autojoin, distance, cooldown, bungeecord, format]"); - } - break; - } - switch (args[1]) { - case "create": { - try { - System.out.println(plugin.getConfig().getConfigurationSection("channels").getString(args[2])); - if (!plugin.getConfig().getConfigurationSection("channels").isSet(args[2])) { - sender.sendMessage(ChatColor.GREEN + "Created channel " + args[2] + " and assigned it default configuration."); - plugin.getConfig().createSection("channels." + args[2]); - plugin.getConfig().getConfigurationSection("channels." + args[2]).set("color", "white"); - plugin.getConfig().getConfigurationSection("channels." + args[2]).set("chatcolor", "white"); - plugin.getConfig().getConfigurationSection("channels." + args[2]).set("mutable", true); - plugin.getConfig().getConfigurationSection("channels." + args[2]).set("permissions", "None"); - plugin.getConfig().getConfigurationSection("channels." + args[2]).set("alias", args[2].toLowerCase().charAt(0)); - plugin.getConfig().getConfigurationSection("channels." + args[2]).set("default", false); - plugin.getConfig().getConfigurationSection("channels." + args[2]).set("autojoin", true); - plugin.getConfig().getConfigurationSection("channels." + args[2]).set("distance", 0.0); - plugin.getConfig().getConfigurationSection("channels." + args[2]).set("cooldown", 0); - plugin.getConfig().getConfigurationSection("channels." + args[2]).set("bungeecord", false); - plugin.getConfig().getConfigurationSection("channels." + args[2]).set("servername", false); - plugin.getConfig().getConfigurationSection("channels." + args[2]).set("format", "Default"); - plugin.saveConfig(); - plugin.reloadConfig(); - Bukkit.getPluginManager().disablePlugin(plugin); - Bukkit.getPluginManager().enablePlugin(plugin); - break; - } - sender.sendMessage(ChatColor.RED + "Channel " + args[2] + " already exists."); - } catch (Exception e) { - sender.sendMessage(ChatColor.RED + "Invalid arguments, /config channels create [channelname]"); - } - break; - } - case "delete": { - try { - if (plugin.getConfig().getConfigurationSection("channels").isSet(args[2])) { - sender.sendMessage(ChatColor.GREEN + "Deleted channel " + args[2]); - plugin.getConfig().getConfigurationSection("channels").set(args[2], null); - plugin.saveConfig(); - plugin.reloadConfig(); - Bukkit.getPluginManager().disablePlugin(plugin); - Bukkit.getPluginManager().enablePlugin(plugin); - break; - } - sender.sendMessage(ChatColor.RED + "Channel " + args[2] + " doesn't exist."); - } catch (Exception e) { - sender.sendMessage(ChatColor.RED + "Invalid arguments, /config channels delete [channelname]"); - } - break; - } - default: { - sender.sendMessage(ChatColor.RED + "Invalid arguments, /config channels [channel, create, delete]"); - break; - } - } - } catch (Exception e) { - sender.sendMessage(ChatColor.RED + "Invalid arguments, /config channels [channel, create, delete]"); - } - break; - } - case "help": { - sender.sendMessage(ChatColor.GREEN + "/config filters [page [number], add, remove]"); - sender.sendMessage(ChatColor.GREEN + "/config blockablecommands [page [number], add, remove]"); - sender.sendMessage(ChatColor.GREEN + "/config commandspy worldeditcommands [true/false]"); - sender.sendMessage(ChatColor.GREEN + "/config antispam [enabled, spamnumber, spamtime, mutetime]"); - sender.sendMessage(ChatColor.GREEN + "/config mysql [enabled, user, port, password, host, database]"); - sender.sendMessage(ChatColor.GREEN + "/config pluginname [pluginname]"); - sender.sendMessage(ChatColor.GREEN + "/config loglevel [info, debug, warning, error]"); - sender.sendMessage(ChatColor.GREEN + "/config saveplayerdata [true/false]"); - sender.sendMessage(ChatColor.GREEN + "/config saveinterval [saveinterval]"); - sender.sendMessage(ChatColor.GREEN + "/config tellcolor [color]"); - sender.sendMessage(ChatColor.GREEN + "/config vanishsupport [true/false]"); - sender.sendMessage(ChatColor.GREEN + "/config tellformatto [format]"); - sender.sendMessage(ChatColor.GREEN + "/config tellformatfrom [format]"); - sender.sendMessage(ChatColor.GREEN + "/config tellformatspy [format]"); - sender.sendMessage(ChatColor.GREEN + "/config replyformatto [format]"); - sender.sendMessage(ChatColor.GREEN + "/config replyformatfrom [format]"); - sender.sendMessage(ChatColor.GREEN + "/config replyformatspy [format]"); - sender.sendMessage(ChatColor.GREEN + "/config partyformat [format]"); - sender.sendMessage(ChatColor.GREEN + "/config broadcastafk [true/false]"); - sender.sendMessage(ChatColor.GREEN + "/config formatcleaner [true/false]"); - sender.sendMessage(ChatColor.GREEN + "/config broadcast [color, permissions, displaytag]"); - sender.sendMessage(ChatColor.GREEN + "/config channels [channel] [chatcolor, mutable, permissions, alias, default, autojoin, distance, cooldown, bungeecord, format, create , delete]"); - sender.sendMessage(ChatColor.GREEN + "/config help"); - break; - } - default: { - sender.sendMessage(ChatColor.RED + "Invalid arguments, /config help"); - break; - } - } - } catch (Exception e) { - sender.sendMessage(ChatColor.RED + "Invalid arguments, /config help"); - } - return; - } - sender.sendMessage(ChatColor.RED + "You do not have permission for this command."); - return; - } -} diff --git a/src/main/java/mineverse/Aust1n46/chat/listeners/LoginListener.java b/src/main/java/mineverse/Aust1n46/chat/listeners/LoginListener.java deleted file mode 100644 index afc697c..0000000 --- a/src/main/java/mineverse/Aust1n46/chat/listeners/LoginListener.java +++ /dev/null @@ -1,91 +0,0 @@ -package mineverse.Aust1n46.chat.listeners; - -import java.util.UUID; - -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; - -import mineverse.Aust1n46.chat.MineverseChat; -import mineverse.Aust1n46.chat.api.MineverseChatAPI; -import mineverse.Aust1n46.chat.api.MineverseChatPlayer; -import mineverse.Aust1n46.chat.channel.ChatChannel; -import mineverse.Aust1n46.chat.database.PlayerData; -import mineverse.Aust1n46.chat.utilities.Format; -import mineverse.Aust1n46.chat.utilities.UUIDFetcher; - -/** - * Manages player login and logout events. - * - * @author Aust1n46 - */ -public class LoginListener implements Listener { - private MineverseChat plugin = MineverseChat.getInstance(); - - @EventHandler(priority = EventPriority.LOW) - public void onPlayerQuit(PlayerQuitEvent playerQuitEvent) { - MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer(playerQuitEvent.getPlayer()); - PlayerData.savePlayerData(mcp); - mcp.clearMessages(); - mcp.setOnline(false); - MineverseChatAPI.removeMineverseChatOnlinePlayerToMap(mcp); - } - - void handleNameChange(MineverseChatPlayer mcp, Player eventPlayerInstance) { - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Detected Name Change. Old Name:&c " + mcp.getName() + " &eNew Name:&c " + eventPlayerInstance.getName())); - MineverseChatAPI.removeNameFromMap(mcp.getName()); - mcp.setName(eventPlayerInstance.getName()); - MineverseChatAPI.addNameToMap(mcp); - } - - @EventHandler(priority = EventPriority.LOW) - public void onPlayerJoin(PlayerJoinEvent event) throws Exception { - MineverseChatPlayer mcp = MineverseChatAPI.getMineverseChatPlayer(event.getPlayer()); - Player player = event.getPlayer(); - String name = player.getName(); - if(mcp == null) { - UUID uuid = player.getUniqueId(); - mcp = new MineverseChatPlayer(uuid, name); - MineverseChatAPI.addMineverseChatPlayerToMap(mcp); - MineverseChatAPI.addNameToMap(mcp); - } - UUIDFetcher.checkOfflineUUIDWarning(mcp.getUUID()); - //check for name change - if(!mcp.getName().equals(name)) { - handleNameChange(mcp, event.getPlayer()); - } - mcp.setOnline(true); - mcp.setHasPlayed(false); - MineverseChatAPI.addMineverseChatOnlinePlayerToMap(mcp); - mcp.setJsonFormat(); - for(ChatChannel ch : ChatChannel.getAutojoinList()) { - if(ch.hasPermission()) { - if(mcp.getPlayer().hasPermission(ch.getPermission())) { - mcp.addListening(ch.getName()); - } - } - else { - mcp.addListening(ch.getName()); - } - } - - try { - if(plugin.getServer().spigot().getConfig().getBoolean("settings.bungeecord") || plugin.getServer().spigot().getPaperConfig().getBoolean("settings.velocity-support.enabled")) { - long delayInTicks = 20L; - final MineverseChatPlayer sync = mcp; - plugin.getServer().getScheduler().runTaskLaterAsynchronously(plugin, new Runnable() { - public void run() { - MineverseChat.synchronize(sync, false); - } - }, delayInTicks); - } - } - catch(NoSuchMethodError exception) { // Thrown if server isn't Paper. - // Do nothing - } - } -} diff --git a/src/main/java/mineverse/Aust1n46/chat/localization/InternalMessage.java b/src/main/java/mineverse/Aust1n46/chat/localization/InternalMessage.java index 5882ed8..7ed218c 100644 --- a/src/main/java/mineverse/Aust1n46/chat/localization/InternalMessage.java +++ b/src/main/java/mineverse/Aust1n46/chat/localization/InternalMessage.java @@ -1,6 +1,6 @@ package mineverse.Aust1n46.chat.localization; -import mineverse.Aust1n46.chat.utilities.Format; +import mineverse.Aust1n46.chat.utilities.FormatUtils; /** * Messages internal to the plugin @@ -18,6 +18,6 @@ public enum InternalMessage { @Override public String toString() { - return Format.FormatStringAll(this.message); + return FormatUtils.FormatStringAll(this.message); } -} \ No newline at end of file +} diff --git a/src/main/java/mineverse/Aust1n46/chat/localization/Localization.java b/src/main/java/mineverse/Aust1n46/chat/localization/Localization.java index 65fe6ed..63d61e6 100644 --- a/src/main/java/mineverse/Aust1n46/chat/localization/Localization.java +++ b/src/main/java/mineverse/Aust1n46/chat/localization/Localization.java @@ -2,21 +2,19 @@ package mineverse.Aust1n46.chat.localization; import java.io.File; -import mineverse.Aust1n46.chat.MineverseChat; -import mineverse.Aust1n46.chat.utilities.Format; - import org.bukkit.Bukkit; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; +import mineverse.Aust1n46.chat.utilities.FormatUtils; +import venture.Aust1n46.chat.VentureChat; + //This class is used to create objects of localization for different languages. -public class Localization { - private static MineverseChat plugin = MineverseChat.getInstance(); +public class Localization { + private static final String VERSION = "2.22.4"; private static FileConfiguration localization; - private static final String VERSION = "2.22.4"; - - public static void initialize() { + public static void initialize(final VentureChat plugin) { File localizationFile = new File(plugin.getDataFolder().getAbsolutePath(), "Messages.yml"); if(!localizationFile.isFile()) { plugin.saveResource("Messages.yml", true); @@ -27,7 +25,7 @@ public class Localization { String fileVersion = localization.getString("Version", "null"); if(!fileVersion.equals(VERSION)) { - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Version Change Detected! Saving Old Messages.yml and Generating Latest File")); + Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&e - Version Change Detected! Saving Old Messages.yml and Generating Latest File")); localizationFile.renameTo(new File(plugin.getDataFolder().getAbsolutePath(), "Messages_Old_" + fileVersion + ".yml")); plugin.saveResource("Messages.yml", true); localization = YamlConfiguration.loadConfiguration(localizationFile); @@ -37,4 +35,4 @@ public class Localization { public static FileConfiguration getLocalization() { return localization; } -} \ No newline at end of file +} diff --git a/src/main/java/mineverse/Aust1n46/chat/localization/LocalizedMessage.java b/src/main/java/mineverse/Aust1n46/chat/localization/LocalizedMessage.java index 51a48e6..71e8862 100644 --- a/src/main/java/mineverse/Aust1n46/chat/localization/LocalizedMessage.java +++ b/src/main/java/mineverse/Aust1n46/chat/localization/LocalizedMessage.java @@ -1,6 +1,6 @@ package mineverse.Aust1n46.chat.localization; -import mineverse.Aust1n46.chat.utilities.Format; +import mineverse.Aust1n46.chat.utilities.FormatUtils; /** * Messages configurable in Messages.yml file. @@ -115,6 +115,6 @@ public enum LocalizedMessage { @Override public String toString() { - return Format.FormatStringAll(Localization.getLocalization().getString(this.message)); + return FormatUtils.FormatStringAll(Localization.getLocalization().getString(this.message)); } } diff --git a/src/main/java/mineverse/Aust1n46/chat/proxy/VentureChatBungee.java b/src/main/java/mineverse/Aust1n46/chat/proxy/VentureChatBungee.java index 60736b3..feffe07 100644 --- a/src/main/java/mineverse/Aust1n46/chat/proxy/VentureChatBungee.java +++ b/src/main/java/mineverse/Aust1n46/chat/proxy/VentureChatBungee.java @@ -7,9 +7,9 @@ import java.nio.file.Files; import java.util.List; import java.util.stream.Collectors; -import mineverse.Aust1n46.chat.database.ProxyPlayerData; -import mineverse.Aust1n46.chat.utilities.Format; -import mineverse.Aust1n46.chat.utilities.UUIDFetcher; +import com.google.inject.Inject; + +import mineverse.Aust1n46.chat.utilities.FormatUtils; import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.config.ServerInfo; @@ -25,6 +25,8 @@ import net.md_5.bungee.config.Configuration; import net.md_5.bungee.config.ConfigurationProvider; import net.md_5.bungee.config.YamlConfiguration; import net.md_5.bungee.event.EventHandler; +import venture.Aust1n46.chat.controllers.VentureChatProxyFlatFileController; +import venture.Aust1n46.chat.service.UUIDService; /** * VentureChat Minecraft plugin for BungeeCord. @@ -34,6 +36,13 @@ import net.md_5.bungee.event.EventHandler; public class VentureChatBungee extends Plugin implements Listener, VentureChatProxySource { private static Configuration bungeeConfig; private File bungeePlayerDataDirectory; + + @Inject + private UUIDService uuidService; + @Inject + private VentureChatProxyFlatFileController proxyFlatFileController; + @Inject + private VentureChatProxy proxy; @Override public void onEnable() { @@ -52,8 +61,8 @@ public class VentureChatBungee extends Plugin implements Listener, VentureChatPr } bungeePlayerDataDirectory = new File(getDataFolder().getAbsolutePath() + "/PlayerData"); - ProxyPlayerData.loadLegacyBungeePlayerData(bungeePlayerDataDirectory, this); - ProxyPlayerData.loadProxyPlayerData(bungeePlayerDataDirectory, this); + proxyFlatFileController.loadLegacyBungeePlayerData(bungeePlayerDataDirectory, this); + proxyFlatFileController.loadProxyPlayerData(bungeePlayerDataDirectory, this); this.getProxy().registerChannel(VentureChatProxy.PLUGIN_MESSAGING_CHANNEL_STRING); this.getProxy().getPluginManager().registerListener(this, this); @@ -61,7 +70,7 @@ public class VentureChatBungee extends Plugin implements Listener, VentureChatPr @Override public void onDisable() { - ProxyPlayerData.saveProxyPlayerData(bungeePlayerDataDirectory, this); + proxyFlatFileController.saveProxyPlayerData(bungeePlayerDataDirectory, this); } @EventHandler @@ -76,7 +85,7 @@ public class VentureChatBungee extends Plugin implements Listener, VentureChatPr @EventHandler public void onPlayerJoinNetwork(PostLoginEvent event) { - UUIDFetcher.checkOfflineUUIDWarningProxy(event.getPlayer().getUniqueId(), this); + uuidService.checkOfflineUUIDWarningProxy(event.getPlayer().getUniqueId(), this); } private void updatePlayerNames() { @@ -109,7 +118,7 @@ public class VentureChatBungee extends Plugin implements Listener, VentureChatPr return; } String serverName = ((Server) event.getSender()).getInfo().getName(); - VentureChatProxy.onPluginMessage(event.getData(), serverName, this); + proxy.onPluginMessage(event.getData(), serverName, this); } @Override @@ -130,7 +139,7 @@ public class VentureChatBungee extends Plugin implements Listener, VentureChatPr @Override public void sendConsoleMessage(String message) { - ProxyServer.getInstance().getConsole().sendMessage(TextComponent.fromLegacyText(Format.FormatStringAll(message))); + ProxyServer.getInstance().getConsole().sendMessage(TextComponent.fromLegacyText(FormatUtils.FormatStringAll(message))); } @Override diff --git a/src/main/java/mineverse/Aust1n46/chat/proxy/VentureChatProxy.java b/src/main/java/mineverse/Aust1n46/chat/proxy/VentureChatProxy.java index fcdb281..35366bf 100644 --- a/src/main/java/mineverse/Aust1n46/chat/proxy/VentureChatProxy.java +++ b/src/main/java/mineverse/Aust1n46/chat/proxy/VentureChatProxy.java @@ -7,17 +7,22 @@ import java.io.DataOutputStream; import java.util.UUID; import java.util.concurrent.atomic.AtomicInteger; -import mineverse.Aust1n46.chat.api.MineverseChatAPI; -import mineverse.Aust1n46.chat.api.SynchronizedMineverseChatPlayer; -import mineverse.Aust1n46.chat.command.mute.MuteContainer; -import mineverse.Aust1n46.chat.database.TemporaryDataInstance; +import com.google.inject.Inject; + +import venture.Aust1n46.chat.controllers.commands.MuteContainer; +import venture.Aust1n46.chat.model.SynchronizedVentureChatPlayer; +import venture.Aust1n46.chat.model.TemporaryDataInstance; +import venture.Aust1n46.chat.service.VentureChatPlayerApiService; public class VentureChatProxy { public static String PLUGIN_MESSAGING_CHANNEL_NAMESPACE = "venturechat"; public static String PLUGIN_MESSAGING_CHANNEL_NAME = "data"; public static String PLUGIN_MESSAGING_CHANNEL_STRING = "venturechat:data"; - public static void onPluginMessage(byte[] data, String serverName, VentureChatProxySource source) { + @Inject + private VentureChatPlayerApiService playerApiService; + + public void onPluginMessage(byte[] data, String serverName, VentureChatProxySource source) { ByteArrayInputStream instream = new ByteArrayInputStream(data); DataInputStream in = new DataInputStream(instream); try { @@ -74,7 +79,7 @@ public class VentureChatProxy { String server = serverName; String sender = in.readUTF(); String channel = in.readUTF(); - SynchronizedMineverseChatPlayer smcp = MineverseChatAPI.getSynchronizedMineverseChatPlayer(UUID.fromString(sender)); + SynchronizedVentureChatPlayer smcp = playerApiService.getSynchronizedMineverseChatPlayer(UUID.fromString(sender)); if(smcp == null) { source.sendConsoleMessage("&8[&eVentureChat&8]&c Synchronized player instance is null! This shouldn't be!"); source.sendConsoleMessage("&8[&eVentureChat&8]&c You probably have an issue with your player data saving and/or your login data sync!"); @@ -97,7 +102,7 @@ public class VentureChatProxy { String server = in.readUTF(); String sender = in.readUTF(); String channel = in.readUTF(); - SynchronizedMineverseChatPlayer smcp = MineverseChatAPI.getSynchronizedMineverseChatPlayer(UUID.fromString(sender)); + SynchronizedVentureChatPlayer smcp = playerApiService.getSynchronizedMineverseChatPlayer(UUID.fromString(sender)); if(smcp == null) { source.sendConsoleMessage("&8[&eVentureChat&8]&c Synchronized player instance is null! This shouldn't be!"); source.sendConsoleMessage("&8[&eVentureChat&8]&c You probably have an issue with your player data saving and/or your login data sync!"); @@ -145,7 +150,7 @@ public class VentureChatProxy { String server = serverName; String player = in.readUTF(); String sender = in.readUTF(); - SynchronizedMineverseChatPlayer smcp = MineverseChatAPI.getSynchronizedMineverseChatPlayer(UUID.fromString(sender)); + SynchronizedVentureChatPlayer smcp = playerApiService.getSynchronizedMineverseChatPlayer(UUID.fromString(sender)); if(smcp == null) { source.sendConsoleMessage("&8[&eVentureChat&8]&c Synchronized player instance is null! This shouldn't be!"); source.sendConsoleMessage("&8[&eVentureChat&8]&c You probably have an issue with your player data saving and/or your login data sync!"); @@ -167,7 +172,7 @@ public class VentureChatProxy { String server = in.readUTF(); String player = in.readUTF(); String sender = in.readUTF(); - SynchronizedMineverseChatPlayer smcp = MineverseChatAPI.getSynchronizedMineverseChatPlayer(UUID.fromString(sender)); + SynchronizedVentureChatPlayer smcp = playerApiService.getSynchronizedMineverseChatPlayer(UUID.fromString(sender)); if(smcp == null) { source.sendConsoleMessage("&8[&eVentureChat&8]&c Synchronized player instance is null! This shouldn't be!"); source.sendConsoleMessage("&8[&eVentureChat&8]&c You probably have an issue with your player data saving and/or your login data sync!"); @@ -373,7 +378,7 @@ public class VentureChatProxy { String echo = in.readUTF(); String spy = in.readUTF(); String msg = in.readUTF(); - SynchronizedMineverseChatPlayer smcp = MineverseChatAPI.getSynchronizedMineverseChatPlayer(UUID.fromString(sender)); + SynchronizedVentureChatPlayer smcp = playerApiService.getSynchronizedMineverseChatPlayer(UUID.fromString(sender)); if(smcp == null) { source.sendConsoleMessage("&8[&eVentureChat&8]&c Synchronized player instance is null! This shouldn't be!"); source.sendConsoleMessage("&8[&eVentureChat&8]&c You probably have an issue with your player data saving and/or your login data sync!"); @@ -400,7 +405,7 @@ public class VentureChatProxy { String server = in.readUTF(); String player = in.readUTF(); String sender = in.readUTF(); - SynchronizedMineverseChatPlayer smcp = MineverseChatAPI.getSynchronizedMineverseChatPlayer(UUID.fromString(sender)); + SynchronizedVentureChatPlayer smcp = playerApiService.getSynchronizedMineverseChatPlayer(UUID.fromString(sender)); if(smcp == null) { source.sendConsoleMessage("&8[&eVentureChat&8]&c Synchronized player instance is null! This shouldn't be!"); source.sendConsoleMessage("&8[&eVentureChat&8]&c You probably have an issue with your player data saving and/or your login data sync!"); @@ -486,10 +491,10 @@ public class VentureChatProxy { //System.out.println("Sending update..."); String server = serverName; UUID uuid = UUID.fromString(in.readUTF()); - SynchronizedMineverseChatPlayer smcp = MineverseChatAPI.getSynchronizedMineverseChatPlayer(uuid); + SynchronizedVentureChatPlayer smcp = playerApiService.getSynchronizedMineverseChatPlayer(uuid); if(smcp == null) { - smcp = new SynchronizedMineverseChatPlayer(uuid); - MineverseChatAPI.addSynchronizedMineverseChatPlayerToMap(smcp); + smcp = new SynchronizedVentureChatPlayer(uuid); + playerApiService.addSynchronizedMineverseChatPlayerToMap(smcp); } out.writeUTF("Sync"); out.writeUTF(uuid.toString()); @@ -524,10 +529,10 @@ public class VentureChatProxy { } if(identifier.equals("Update")) { UUID uuid = UUID.fromString(in.readUTF()); - SynchronizedMineverseChatPlayer smcp = MineverseChatAPI.getSynchronizedMineverseChatPlayer(uuid); + SynchronizedVentureChatPlayer smcp = playerApiService.getSynchronizedMineverseChatPlayer(uuid); if(smcp == null) { - smcp = new SynchronizedMineverseChatPlayer(uuid); - MineverseChatAPI.addSynchronizedMineverseChatPlayerToMap(smcp); + smcp = new SynchronizedVentureChatPlayer(uuid); + playerApiService.addSynchronizedMineverseChatPlayerToMap(smcp); } smcp.getListening().clear(); smcp.clearMutes(); @@ -549,7 +554,7 @@ public class VentureChatProxy { for(int c = 0; c < sizeI; c++) { String ignore = in.readUTF(); //System.out.println(mute); - smcp.addIgnore(MineverseChatAPI.getSynchronizedMineverseChatPlayer(UUID.fromString(ignore))); + smcp.addIgnore(playerApiService.getSynchronizedMineverseChatPlayer(UUID.fromString(ignore))); } smcp.setSpy(in.readBoolean()); smcp.setMessageToggle(in.readBoolean()); diff --git a/src/main/java/mineverse/Aust1n46/chat/proxy/VentureChatVelocity.java b/src/main/java/mineverse/Aust1n46/chat/proxy/VentureChatVelocity.java index f661ef5..f6fdf35 100644 --- a/src/main/java/mineverse/Aust1n46/chat/proxy/VentureChatVelocity.java +++ b/src/main/java/mineverse/Aust1n46/chat/proxy/VentureChatVelocity.java @@ -29,11 +29,11 @@ import com.velocitypowered.api.proxy.messages.ChannelIdentifier; import com.velocitypowered.api.proxy.messages.MinecraftChannelIdentifier; import com.velocitypowered.api.proxy.server.RegisteredServer; -import mineverse.Aust1n46.chat.database.ProxyPlayerData; -import mineverse.Aust1n46.chat.utilities.Format; +import mineverse.Aust1n46.chat.utilities.FormatUtils; import net.md_5.bungee.config.Configuration; import net.md_5.bungee.config.ConfigurationProvider; import net.md_5.bungee.config.YamlConfiguration; +import venture.Aust1n46.chat.controllers.VentureChatProxyFlatFileController; /** * VentureChat Minecraft plugin for Velocity. @@ -45,6 +45,11 @@ public class VentureChatVelocity implements VentureChatProxySource { private final ChannelIdentifier channelIdentifier = MinecraftChannelIdentifier.create(VentureChatProxy.PLUGIN_MESSAGING_CHANNEL_NAMESPACE, VentureChatProxy.PLUGIN_MESSAGING_CHANNEL_NAME); private final Logger logger; + @Inject + private VentureChatProxyFlatFileController proxyFlatFileController; + @Inject + private VentureChatProxy proxy; + @Inject @DataDirectory private Path dataPath; @@ -82,12 +87,12 @@ public class VentureChatVelocity implements VentureChatProxySource { } velocityPlayerDataDirectory = new File(dataPath.toAbsolutePath().toString() + "/PlayerData"); - ProxyPlayerData.loadProxyPlayerData(velocityPlayerDataDirectory, this); + proxyFlatFileController.loadProxyPlayerData(velocityPlayerDataDirectory, this); } @Subscribe public void onShutdown(ProxyShutdownEvent event) { - ProxyPlayerData.saveProxyPlayerData(velocityPlayerDataDirectory, this); + proxyFlatFileController.saveProxyPlayerData(velocityPlayerDataDirectory, this); } @Subscribe @@ -138,7 +143,7 @@ public class VentureChatVelocity implements VentureChatProxySource { return; } String serverName = ((ServerConnection) event.getSource()).getServerInfo().getName(); - VentureChatProxy.onPluginMessage(event.getData(), serverName, this); + proxy.onPluginMessage(event.getData(), serverName, this); event.setResult(ForwardResult.handled()); } @@ -163,7 +168,7 @@ public class VentureChatVelocity implements VentureChatProxySource { @Override public void sendConsoleMessage(String message) { - logger.info(Format.stripColor(message)); + logger.info(FormatUtils.stripColor(message)); } @Override diff --git a/src/main/java/mineverse/Aust1n46/chat/utilities/FormatUtils.java b/src/main/java/mineverse/Aust1n46/chat/utilities/FormatUtils.java new file mode 100644 index 0000000..624c470 --- /dev/null +++ b/src/main/java/mineverse/Aust1n46/chat/utilities/FormatUtils.java @@ -0,0 +1,301 @@ +package mineverse.Aust1n46.chat.utilities; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.bukkit.ChatColor; + +import mineverse.Aust1n46.chat.localization.LocalizedMessage; + +public class FormatUtils { + public static final char BUKKIT_COLOR_CODE_PREFIX_CHAR = '\u00A7'; + public static final String BUKKIT_COLOR_CODE_PREFIX = String.valueOf(BUKKIT_COLOR_CODE_PREFIX_CHAR); + public static final String HEX_COLOR_CODE_PREFIX = "#"; + public static final String BUKKIT_HEX_COLOR_CODE_PREFIX = "x"; + public static final String DEFAULT_COLOR_CODE = BUKKIT_COLOR_CODE_PREFIX + "f"; + + public static final long MILLISECONDS_PER_DAY = 86400000; + public static final long MILLISECONDS_PER_HOUR = 3600000; + public static final long MILLISECONDS_PER_MINUTE = 60000; + public static final long MILLISECONDS_PER_SECOND = 1000; + + private static final Pattern LEGACY_CHAT_COLOR_DIGITS_PATTERN = Pattern.compile("&([0-9])"); + private static final Pattern LEGACY_CHAT_COLOR_PATTERN = Pattern.compile( + "(?= MILLISECONDS_PER_DAY) { + long numberOfDays = millis / MILLISECONDS_PER_DAY; + millis -= MILLISECONDS_PER_DAY * numberOfDays; + + String units = LocalizedMessage.UNITS_DAY_PLURAL.toString(); + if (numberOfDays == 1) { + units = LocalizedMessage.UNITS_DAY_SINGULAR.toString(); + } + timeString += numberOfDays + " " + units + " "; + } + + if(millis >= MILLISECONDS_PER_HOUR) { + long numberOfHours = millis / MILLISECONDS_PER_HOUR; + millis -= MILLISECONDS_PER_HOUR * numberOfHours; + + String units = LocalizedMessage.UNITS_HOUR_PLURAL.toString(); + if (numberOfHours == 1) { + units = LocalizedMessage.UNITS_HOUR_SINGULAR.toString(); + } + timeString += numberOfHours + " " + units + " "; + } + + if(millis >= MILLISECONDS_PER_MINUTE) { + long numberOfMinutes = millis / MILLISECONDS_PER_MINUTE; + millis -= MILLISECONDS_PER_MINUTE * numberOfMinutes; + + String units = LocalizedMessage.UNITS_MINUTE_PLURAL.toString(); + if (numberOfMinutes == 1) { + units = LocalizedMessage.UNITS_MINUTE_SINGULAR.toString(); + } + timeString += numberOfMinutes + " " + units + " "; + } + + if(millis >= MILLISECONDS_PER_SECOND) { + long numberOfSeconds = millis / MILLISECONDS_PER_SECOND; + millis -= MILLISECONDS_PER_SECOND * numberOfSeconds; + + String units = LocalizedMessage.UNITS_SECOND_PLURAL.toString(); + if (numberOfSeconds == 1) { + units = LocalizedMessage.UNITS_SECOND_SINGULAR.toString(); + } + timeString += numberOfSeconds + " " + units; + } + return timeString.trim(); + } + + public static long parseTimeStringToMillis(String timeInput) { + long millis = 0L; + timeInput = timeInput.toLowerCase(); + char validChars[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'd', 'h', 'm', 's' }; + if(containsInvalidChars(validChars, timeInput)) { + return -1; + } + + long countDayTokens = timeInput.chars().filter(ch -> ch == 'd').count(); + long countHourTokens = timeInput.chars().filter(ch -> ch == 'h').count(); + long countMinuteTokens = timeInput.chars().filter(ch -> ch == 'm').count(); + long countSecondTokens = timeInput.chars().filter(ch -> ch == 's').count(); + if(countDayTokens > 1 || countHourTokens > 1 || countMinuteTokens > 1 || countSecondTokens > 1) { + return -1; + } + + int indexOfSecondToken = timeInput.indexOf("s"); + int indexOfMinuteToken = timeInput.indexOf("m"); + int indexOfHourToken = timeInput.indexOf("h"); + int indexOfDayToken = timeInput.indexOf("d"); + if(indexOfDayToken != -1) { + if((indexOfHourToken != -1 && indexOfHourToken < indexOfDayToken) || (indexOfMinuteToken != -1 && indexOfMinuteToken < indexOfDayToken) || (indexOfSecondToken != -1 && indexOfSecondToken < indexOfDayToken)) { + return -1; + } + } + if(indexOfHourToken != -1) { + if((indexOfMinuteToken != -1 && indexOfMinuteToken < indexOfHourToken) || (indexOfSecondToken != -1 && indexOfSecondToken < indexOfHourToken)) { + return -1; + } + } + if(indexOfMinuteToken != -1) { + if((indexOfSecondToken != -1 && indexOfSecondToken < indexOfMinuteToken)) { + return -1; + } + } + + if(indexOfDayToken != -1) { + int numberOfDays = Integer.parseInt(timeInput.substring(0, indexOfDayToken)); + timeInput = timeInput.substring(indexOfDayToken + 1); + millis += MILLISECONDS_PER_DAY * numberOfDays; + } + if(timeInput.length() > 0) { + indexOfHourToken = timeInput.indexOf("h"); + if(indexOfHourToken != -1) { + int numberOfHours = Integer.parseInt(timeInput.substring(0, indexOfHourToken)); + timeInput = timeInput.substring(indexOfHourToken + 1); + millis += MILLISECONDS_PER_HOUR * numberOfHours; + } + } + if(timeInput.length() > 0) { + indexOfMinuteToken = timeInput.indexOf("m"); + if(indexOfMinuteToken != -1) { + int numberOfMinutes = Integer.parseInt(timeInput.substring(0, indexOfMinuteToken)); + timeInput = timeInput.substring(indexOfMinuteToken + 1); + millis += MILLISECONDS_PER_MINUTE * numberOfMinutes; + } + } + if(timeInput.length() > 0) { + indexOfSecondToken = timeInput.indexOf("s"); + if(indexOfSecondToken != -1) { + int numberOfSeconds = Integer.parseInt(timeInput.substring(0, indexOfSecondToken)); + timeInput = timeInput.substring(indexOfSecondToken + 1); + millis += MILLISECONDS_PER_SECOND * numberOfSeconds; + } + } + return millis; + } + + private static boolean containsInvalidChars(char[] validChars, String validate) { + for(char c : validate.toCharArray()) { + boolean isValidChar = false; + for(char v : validChars) { + if(c == v) { + isValidChar = true; + } + } + if(!isValidChar) { + return true; + } + } + return false; + } + + public static String stripColor(String message) { + return message.replaceAll("(\u00A7([a-z0-9]))", ""); + } +} diff --git a/src/main/java/mineverse/Aust1n46/chat/utilities/UUIDFetcher.java b/src/main/java/mineverse/Aust1n46/chat/utilities/UUIDFetcher.java deleted file mode 100644 index 0b6fa4b..0000000 --- a/src/main/java/mineverse/Aust1n46/chat/utilities/UUIDFetcher.java +++ /dev/null @@ -1,149 +0,0 @@ -package mineverse.Aust1n46.chat.utilities; - -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.net.HttpURLConnection; -import java.net.URL; -import java.nio.ByteBuffer; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.UUID; -import java.util.concurrent.Callable; - -import org.bukkit.Bukkit; -import org.json.simple.JSONArray; -import org.json.simple.JSONObject; -import org.json.simple.parser.JSONParser; - -import com.google.common.collect.ImmutableList; - -import mineverse.Aust1n46.chat.MineverseChat; -import mineverse.Aust1n46.chat.proxy.VentureChatProxySource; - -public class UUIDFetcher implements Callable> { - private static final double PROFILES_PER_REQUEST = 100; - private static final String PROFILE_URL = "https://api.mojang.com/profiles/minecraft"; - private final JSONParser jsonParser = new JSONParser(); - private final List names; - private final boolean rateLimiting; - - public UUIDFetcher(List names, boolean rateLimiting) { - this.names = ImmutableList.copyOf(names); - this.rateLimiting = rateLimiting; - } - - public UUIDFetcher(List names) { - this(names, true); - } - - public Map call() throws Exception { - Map uuidMap = new HashMap(); - int requests = (int) Math.ceil(names.size() / PROFILES_PER_REQUEST); - for(int i = 0; i < requests; i++) { - HttpURLConnection connection = createConnection(); - String body = JSONArray.toJSONString(names.subList(i * 100, Math.min((i + 1) * 100, names.size()))); - writeBody(connection, body); - JSONArray array = (JSONArray) jsonParser.parse(new InputStreamReader(connection.getInputStream())); - for(Object profile : array) { - JSONObject jsonProfile = (JSONObject) profile; - String id = (String) jsonProfile.get("id"); - String name = (String) jsonProfile.get("name"); - UUID uuid = UUIDFetcher.getUUID(id); - uuidMap.put(name, uuid); - } - if(rateLimiting && i != requests - 1) { - Thread.sleep(100L); - } - } - return uuidMap; - } - - private static void writeBody(HttpURLConnection connection, String body) throws Exception { - OutputStream stream = connection.getOutputStream(); - stream.write(body.getBytes()); - stream.flush(); - stream.close(); - } - - private static HttpURLConnection createConnection() throws Exception { - URL url = new URL(PROFILE_URL); - HttpURLConnection connection = (HttpURLConnection) url.openConnection(); - connection.setRequestMethod("POST"); - connection.setRequestProperty("Content-Type", "application/json"); - connection.setUseCaches(false); - connection.setDoInput(true); - connection.setDoOutput(true); - return connection; - } - - private static UUID getUUID(String id) { - return UUID.fromString(id.substring(0, 8) + "-" + id.substring(8, 12) + "-" + id.substring(12, 16) + "-" + id.substring(16, 20) + "-" + id.substring(20, 32)); - } - - public static byte[] toBytes(UUID uuid) { - ByteBuffer byteBuffer = ByteBuffer.wrap(new byte[16]); - byteBuffer.putLong(uuid.getMostSignificantBits()); - byteBuffer.putLong(uuid.getLeastSignificantBits()); - return byteBuffer.array(); - } - - public static UUID fromBytes(byte[] array) { - if(array.length != 16) { - throw new IllegalArgumentException("Illegal byte array length: " + array.length); - } - ByteBuffer byteBuffer = ByteBuffer.wrap(array); - long mostSignificant = byteBuffer.getLong(); - long leastSignificant = byteBuffer.getLong(); - return new UUID(mostSignificant, leastSignificant); - } - - public static UUID getUUIDOf(String name) throws Exception { - return new UUIDFetcher(Arrays.asList(name)).call().get(name); - } - - /** - * Returns whether the passed UUID is a v3 UUID. Offline UUIDs are v3, online are v4. - * - * @param uuid the UUID to check - * @return whether the UUID is a v3 UUID & thus is offline - */ - public static boolean uuidIsOffline(UUID uuid) { - return uuid.version() == 3; - } - - public static boolean shouldSkipOfflineUUID(UUID uuid) { - return (uuidIsOffline(uuid) && !MineverseChat.getInstance().getConfig().getBoolean("offline_server_acknowledgement", false)); - } - - public static boolean shouldSkipOfflineUUIDProxy(UUID uuid, VentureChatProxySource source) { - return (uuidIsOffline(uuid) && !source.isOfflineServerAcknowledgementSet()); - } - - public static void checkOfflineUUIDWarning(UUID uuid) { - if(shouldSkipOfflineUUID(uuid)) { - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&c - Detected Offline UUID!")); - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&c - If you are using BungeeCord, make sure you have properly setup IP Forwarding.")); - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&c - https://www.spigotmc.org/wiki/bungeecord-ip-forwarding/")); - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&c - You can access this wiki page from the log file or just Google it.")); - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&c - If you're running a \"cracked\" server, player data might not be stored properly, and thus, you are on your own.")); - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&c - If you run your server in offline mode, you will probably lose your player data when switching to online mode!")); - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&c - No player data will be saved in offline mode unless you set the \"cracked\" server acknowledgement in the config!")); - return; - } - } - - public static void checkOfflineUUIDWarningProxy(UUID uuid, VentureChatProxySource source) { - if(shouldSkipOfflineUUIDProxy(uuid, source)) { - source.sendConsoleMessage("&8[&eVentureChat&8]&c - Detected Offline UUID!"); - source.sendConsoleMessage("&8[&eVentureChat&8]&c - If you are using BungeeCord, make sure you have properly setup IP Forwarding."); - source.sendConsoleMessage("&8[&eVentureChat&8]&c - https://www.spigotmc.org/wiki/bungeecord-ip-forwarding/"); - source.sendConsoleMessage("&8[&eVentureChat&8]&c - You can access this wiki page from the log file or just Google it."); - source.sendConsoleMessage("&8[&eVentureChat&8]&c - If you're running a \"cracked\" server, player data might not be stored properly, and thus, you are on your own."); - source.sendConsoleMessage("&8[&eVentureChat&8]&c - If you run your server in offline mode, you will probably lose your player data when switching to online mode!"); - source.sendConsoleMessage("&8[&eVentureChat&8]&c - No player data will be saved in offline mode unless you set the \"cracked\" server acknowledgement in the config!"); - return; - } - } -} diff --git a/src/main/java/venture/Aust1n46/chat/Logger.java b/src/main/java/venture/Aust1n46/chat/Logger.java new file mode 100644 index 0000000..f8adf7e --- /dev/null +++ b/src/main/java/venture/Aust1n46/chat/Logger.java @@ -0,0 +1,62 @@ +package venture.Aust1n46.chat; + +import org.slf4j.LoggerFactory; + +import com.google.inject.Inject; + +public class Logger { + private static final String LOG_PREFIX = "[VentureChat] "; + + private org.slf4j.Logger parent = LoggerFactory.getLogger(Logger.class); + + @Inject + private VentureChat plugin; + + public void info(String message) { + parent.info(LOG_PREFIX + message); + } + + public void info(String format, Object arg) { + parent.info(LOG_PREFIX + format, arg); + } + + public void info(String format, Object arg1, Object arg2) { + parent.info(LOG_PREFIX + format, arg1, arg2); + } + + public void info(String format, Object... arguments) { + parent.info(LOG_PREFIX + format, arguments); + } + + public void debug(String message) { + if (plugin.getConfig().getString("loglevel", "info").equals("debug")) { + info(message); + } + } + + public void debug(String format, Object arg) { + if (plugin.getConfig().getString("loglevel", "info").equals("debug")) { + info(format, arg); + } + } + + public void debug(String format, Object arg1, Object arg2) { + if (plugin.getConfig().getString("loglevel", "info").equals("debug")) { + info(format, arg1, arg2); + } + } + + public void debug(String format, Object... arguments) { + if (plugin.getConfig().getString("loglevel", "info").equals("debug")) { + info(format, arguments); + } + } + + public void warn(String message) { + parent.warn(message); + } + + public void error(String message) { + parent.error(message); + } +} diff --git a/src/main/java/venture/Aust1n46/chat/VentureChat.java b/src/main/java/venture/Aust1n46/chat/VentureChat.java new file mode 100644 index 0000000..e6371ad --- /dev/null +++ b/src/main/java/venture/Aust1n46/chat/VentureChat.java @@ -0,0 +1,216 @@ +package venture.Aust1n46.chat; + +import java.io.File; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.plugin.PluginManager; +import org.bukkit.plugin.RegisteredServiceProvider; +import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.plugin.messaging.PluginMessageListener; +import org.bukkit.scheduler.BukkitScheduler; + +import com.comphenix.protocol.ProtocolLibrary; +import com.google.inject.Inject; +import com.google.inject.Singleton; + +import mineverse.Aust1n46.chat.localization.Localization; +import mineverse.Aust1n46.chat.utilities.FormatUtils; +import net.milkbowl.vault.chat.Chat; +import net.milkbowl.vault.permission.Permission; +import venture.Aust1n46.chat.controllers.PluginMessageController; +import venture.Aust1n46.chat.controllers.VentureChatSpigotFlatFileController; +import venture.Aust1n46.chat.initiators.listeners.ChatListener; +import venture.Aust1n46.chat.initiators.listeners.CommandListener; +import venture.Aust1n46.chat.initiators.listeners.LoginListener; +import venture.Aust1n46.chat.initiators.listeners.PacketListener; +import venture.Aust1n46.chat.initiators.listeners.SignListener; +import venture.Aust1n46.chat.initiators.listeners.VentureCommandExecutor; +import venture.Aust1n46.chat.initiators.schedulers.UnmuteScheduler; +import venture.Aust1n46.chat.model.Alias; +import venture.Aust1n46.chat.model.ChatChannel; +import venture.Aust1n46.chat.model.GuiSlot; +import venture.Aust1n46.chat.model.JsonFormat; +import venture.Aust1n46.chat.service.VentureChatDatabaseService; +import venture.Aust1n46.chat.service.VentureChatFormatService; +import venture.Aust1n46.chat.service.VentureChatPlayerApiService; + +/** + * VentureChat Minecraft plugin for servers running Spigot or Paper software. + * + * @author Aust1n46 + */ +@Singleton +public class VentureChat extends JavaPlugin implements PluginMessageListener { + public static final boolean ASYNC = true; + public static final boolean SYNC = false; + public static final int LINE_LENGTH = 40; + + @Inject + private LoginListener loginListener; + @Inject + private ChatListener chatListener; + @Inject + private SignListener signListener; + @Inject + private CommandListener commandListener; + @Inject + private VentureCommandExecutor commandExecutor; + @Inject + private PacketListener packetListener; + @Inject + private VentureChatPlaceholders ventureChatPlaceholders; + @Inject + private VentureChatFormatService formatter; + @Inject + private VentureChatDatabaseService databaseService; + @Inject + private VentureChatSpigotFlatFileController spigotFlatFileService; + @Inject + private VentureChatPlayerApiService playerApiService; + @Inject + private UnmuteScheduler unmuteScheduler; + @Inject + private PluginMessageController pluginMessageController; + + private Permission permission = null; + + @Override + public void onEnable() { + VentureChatPluginModule pluginModule = new VentureChatPluginModule(this); + pluginModule.createInjector().injectMembers(this); + + try { + Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&e - Initializing...")); + if(!getDataFolder().exists()) { + getDataFolder().mkdirs(); + } + File file = new File(getDataFolder(), "config.yml"); + if(!file.exists()) { + Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&e - Config not found! Generating file.")); + saveDefaultConfig(); + } + else { + Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&e - Config found! Loading file.")); + } + + saveResource("example_config_always_up_to_date!.yml", true); + } + catch(Exception ex) { + Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&e - &cCould not load configuration! Something unexpected went wrong!")); + } + + Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&e - Checking for Vault...")); + + if(!setupPermissions() || !setupChat()) { + Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&e - &cCould not find Vault and/or a Vault compatible permissions plugin!")); + Bukkit.getPluginManager().disablePlugin(this); + } + + initializeConfigReaders(); + + Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&e - Loading player data")); + spigotFlatFileService.loadLegacyPlayerData(); + spigotFlatFileService.loadPlayerData(); + + registerListeners(); + Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&e - Registering Listeners")); + Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&e - Attaching to Executors")); + + Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&e - Establishing BungeeCord")); + Bukkit.getMessenger().registerOutgoingPluginChannel(this, PluginMessageController.PLUGIN_MESSAGING_CHANNEL); + Bukkit.getMessenger().registerIncomingPluginChannel(this, PluginMessageController.PLUGIN_MESSAGING_CHANNEL, this); + + PluginManager pluginManager = getServer().getPluginManager(); + if(pluginManager.isPluginEnabled("Towny")) { + Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&e - Enabling Towny Formatting")); + } + if(pluginManager.isPluginEnabled("Jobs")) { + Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&e - Enabling Jobs Formatting")); + } + if(pluginManager.isPluginEnabled("Factions")) { + String version = pluginManager.getPlugin("Factions").getDescription().getVersion(); + Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&e - Enabling Factions Formatting version " + version)); + } + if(pluginManager.isPluginEnabled("PlaceholderAPI")) { + Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&e - Enabling PlaceholderAPI Hook")); + } + + ventureChatPlaceholders.register(); + + startRepeatingTasks(); + + Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&e - Enabled Successfully")); + } + + @Override + public void onLoad() { + //new DebugLoggingProvider().enableDebugLogging(); + } + + @Override + public void onDisable() { + spigotFlatFileService.savePlayerData(); + playerApiService.clearMineverseChatPlayerMap(); + playerApiService.clearNameMap(); + playerApiService.clearOnlineMineverseChatPlayerMap(); + Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&e - Disabling...")); + Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&e - Disabled Successfully")); + } + + private void startRepeatingTasks() { + BukkitScheduler scheduler = Bukkit.getServer().getScheduler(); + scheduler.runTaskTimerAsynchronously(this, new Runnable() { + @Override + public void run() { + spigotFlatFileService.savePlayerData(); + if(getConfig().getString("loglevel", "info").equals("debug")) { + Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&e - Saving Player Data")); + } + } + }, 0L, getConfig().getInt("saveinterval") * 1200); //one minute * save interval + } + + private void registerListeners() { + PluginManager pluginManager = getServer().getPluginManager(); + pluginManager.registerEvents(chatListener, this); + pluginManager.registerEvents(signListener, this); + pluginManager.registerEvents(commandListener, this); + pluginManager.registerEvents(loginListener, this); + ProtocolLibrary.getProtocolManager().addPacketListener(packetListener); + } + + private boolean setupPermissions() { + RegisteredServiceProvider permissionProvider = getServer().getServicesManager().getRegistration(net.milkbowl.vault.permission.Permission.class); + if(permissionProvider != null) { + permission = permissionProvider.getProvider(); + } + return(permission != null); + } + + private boolean setupChat() { + RegisteredServiceProvider chatProvider = getServer().getServicesManager().getRegistration(net.milkbowl.vault.chat.Chat.class); + Chat chat = null; + if(chatProvider != null) { + chat = chatProvider.getProvider(); + } + return(chat != null); + } + + public void initializeConfigReaders() { + Localization.initialize(this); + Alias.initialize(this); + JsonFormat.initialize(this); + GuiSlot.initialize(this); + ChatChannel.initialize(this, formatter, false); + } + + public Permission getVaultPermission() { + return permission; + } + + @Override + public void onPluginMessageReceived(final String channel, final Player player, final byte[] inputStream) { + pluginMessageController.processInboundPluginMessage(channel, player, inputStream); + } +} diff --git a/src/main/java/mineverse/Aust1n46/chat/VentureChatPlaceholders.java b/src/main/java/venture/Aust1n46/chat/VentureChatPlaceholders.java similarity index 81% rename from src/main/java/mineverse/Aust1n46/chat/VentureChatPlaceholders.java rename to src/main/java/venture/Aust1n46/chat/VentureChatPlaceholders.java index 74b8932..6cdeeb1 100644 --- a/src/main/java/mineverse/Aust1n46/chat/VentureChatPlaceholders.java +++ b/src/main/java/venture/Aust1n46/chat/VentureChatPlaceholders.java @@ -1,26 +1,30 @@ -package mineverse.Aust1n46.chat; +package venture.Aust1n46.chat; import org.bukkit.entity.Player; +import com.google.inject.Inject; + import me.clip.placeholderapi.PlaceholderAPIPlugin; import me.clip.placeholderapi.expansion.PlaceholderExpansion; -import mineverse.Aust1n46.chat.api.MineverseChatAPI; -import mineverse.Aust1n46.chat.api.MineverseChatPlayer; -import mineverse.Aust1n46.chat.channel.ChatChannel; +import venture.Aust1n46.chat.model.ChatChannel; +import venture.Aust1n46.chat.model.VentureChatPlayer; +import venture.Aust1n46.chat.service.VentureChatPlayerApiService; public class VentureChatPlaceholders extends PlaceholderExpansion { + @Inject + private VentureChat plugin; + @Inject + private VentureChatPlayerApiService playerApiService; + @Override public String onPlaceholderRequest(Player p, String identifier) { if (p == null) { return null; } - MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer(p); + VentureChatPlayer mcp = playerApiService.getOnlineMineverseChatPlayer(p); if (mcp == null) { return ""; } - if (identifier.equalsIgnoreCase("nickname")) { - return mcp.hasNickname() ? mcp.getNickname() : mcp.getName(); - } if (identifier.equalsIgnoreCase("something_else_you_think_of")) { return "value for that identifier *"; } @@ -73,6 +77,6 @@ public class VentureChatPlaceholders extends PlaceholderExpansion { @Override public String getVersion() { - return MineverseChat.getInstance().getDescription().getVersion(); + return plugin.getDescription().getVersion(); } } diff --git a/src/main/java/venture/Aust1n46/chat/VentureChatPluginModule.java b/src/main/java/venture/Aust1n46/chat/VentureChatPluginModule.java new file mode 100644 index 0000000..0b648ae --- /dev/null +++ b/src/main/java/venture/Aust1n46/chat/VentureChatPluginModule.java @@ -0,0 +1,22 @@ +package venture.Aust1n46.chat; + +import com.google.inject.AbstractModule; +import com.google.inject.Guice; +import com.google.inject.Injector; + +public class VentureChatPluginModule extends AbstractModule { + private final VentureChat plugin; + + public VentureChatPluginModule(final VentureChat plugin) { + this.plugin = plugin; + } + + public Injector createInjector() { + return Guice.createInjector(this); + } + + @Override + protected void configure() { + this.bind(VentureChat.class).toInstance(plugin); + } +} diff --git a/src/main/java/mineverse/Aust1n46/chat/MineverseChat.java b/src/main/java/venture/Aust1n46/chat/controllers/PluginMessageController.java similarity index 61% rename from src/main/java/mineverse/Aust1n46/chat/MineverseChat.java rename to src/main/java/venture/Aust1n46/chat/controllers/PluginMessageController.java index 4fd902a..e0fbff9 100644 --- a/src/main/java/mineverse/Aust1n46/chat/MineverseChat.java +++ b/src/main/java/venture/Aust1n46/chat/controllers/PluginMessageController.java @@ -1,1074 +1,860 @@ -package mineverse.Aust1n46.chat; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Set; -import java.util.UUID; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.entity.Player; -import org.bukkit.plugin.PluginManager; -import org.bukkit.plugin.RegisteredServiceProvider; -import org.bukkit.plugin.java.JavaPlugin; -import org.bukkit.plugin.messaging.PluginMessageListener; -import org.bukkit.scheduler.BukkitScheduler; - -import com.comphenix.protocol.ProtocolLibrary; -import com.comphenix.protocol.events.PacketContainer; - -import me.clip.placeholderapi.PlaceholderAPI; -import mineverse.Aust1n46.chat.alias.Alias; -import mineverse.Aust1n46.chat.api.MineverseChatAPI; -import mineverse.Aust1n46.chat.api.MineverseChatPlayer; -import mineverse.Aust1n46.chat.api.events.VentureChatEvent; -import mineverse.Aust1n46.chat.channel.ChatChannel; -import mineverse.Aust1n46.chat.channel.ChatChannelInfo; -import mineverse.Aust1n46.chat.command.VentureCommandExecutor; -import mineverse.Aust1n46.chat.command.chat.Channel; -import mineverse.Aust1n46.chat.command.mute.MuteContainer; -import mineverse.Aust1n46.chat.database.Database; -import mineverse.Aust1n46.chat.database.PlayerData; -import mineverse.Aust1n46.chat.gui.GuiSlot; -import mineverse.Aust1n46.chat.json.JsonFormat; -import mineverse.Aust1n46.chat.listeners.ChatListener; -import mineverse.Aust1n46.chat.listeners.CommandListener; -import mineverse.Aust1n46.chat.listeners.LoginListener; -import mineverse.Aust1n46.chat.listeners.PacketListener; -import mineverse.Aust1n46.chat.listeners.SignListener; -import mineverse.Aust1n46.chat.localization.Localization; -import mineverse.Aust1n46.chat.localization.LocalizedMessage; -import mineverse.Aust1n46.chat.utilities.Format; -import net.milkbowl.vault.chat.Chat; -import net.milkbowl.vault.permission.Permission; - -/** - * VentureChat Minecraft plugin for servers running Spigot or Paper software. - * - * @author Aust1n46 - */ -public class MineverseChat extends JavaPlugin implements PluginMessageListener { - // Plugin Messaging Channel - public static final String PLUGIN_MESSAGING_CHANNEL = "venturechat:data"; - - // Event constants - public static final boolean ASYNC = true; - public static final boolean SYNC = false; - - public static final int LINE_LENGTH = 40; - - // DiscordSRV backwards compatibility - @Deprecated - public static ChatChannelInfo ccInfo; - - @Deprecated - public static Set players = new HashSet(); - @Deprecated - public static Set onlinePlayers = new HashSet(); - - // Vault - private static Permission permission = null; - private static Chat chat = null; - - @Override - public void onEnable() { - ccInfo = new ChatChannelInfo(); - - try { - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Initializing...")); - if(!getDataFolder().exists()) { - getDataFolder().mkdirs(); - } - File file = new File(getDataFolder(), "config.yml"); - if(!file.exists()) { - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Config not found! Generating file.")); - saveDefaultConfig(); - } - else { - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Config found! Loading file.")); - } - - saveResource("example_config_always_up_to_date!.yml", true); - } - catch(Exception ex) { - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - &cCould not load configuration! Something unexpected went wrong!")); - } - - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Checking for Vault...")); - - if(!setupPermissions() || !setupChat()) { - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - &cCould not find Vault and/or a Vault compatible permissions plugin!")); - Bukkit.getPluginManager().disablePlugin(this); - } - - initializeConfigReaders(); - - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Loading player data")); - PlayerData.loadLegacyPlayerData(); - PlayerData.loadPlayerData(); - - Bukkit.getScheduler().runTaskAsynchronously(this, () -> { - Database.initializeMySQL(); - }); - - VentureCommandExecutor.initialize(); - - registerListeners(); - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Registering Listeners")); - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Attaching to Executors")); - - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Establishing BungeeCord")); - Bukkit.getMessenger().registerOutgoingPluginChannel(this, PLUGIN_MESSAGING_CHANNEL); - Bukkit.getMessenger().registerIncomingPluginChannel(this, PLUGIN_MESSAGING_CHANNEL, this); - - PluginManager pluginManager = getServer().getPluginManager(); - if(pluginManager.isPluginEnabled("Towny")) { - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Enabling Towny Formatting")); - } - if(pluginManager.isPluginEnabled("Jobs")) { - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Enabling Jobs Formatting")); - } - if(pluginManager.isPluginEnabled("Factions")) { - String version = pluginManager.getPlugin("Factions").getDescription().getVersion(); - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Enabling Factions Formatting version " + version)); - } - if(pluginManager.isPluginEnabled("PlaceholderAPI")) { - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Enabling PlaceholderAPI Hook")); - } - - new VentureChatPlaceholders().register(); - - startRepeatingTasks(); - - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Enabled Successfully")); - } - - @Override - public void onDisable() { - PlayerData.savePlayerData(); - MineverseChatAPI.clearMineverseChatPlayerMap(); - MineverseChatAPI.clearNameMap(); - MineverseChatAPI.clearOnlineMineverseChatPlayerMap(); - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Disabling...")); - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Disabled Successfully")); - } - - private void startRepeatingTasks() { - BukkitScheduler scheduler = Bukkit.getServer().getScheduler(); - scheduler.runTaskTimerAsynchronously(this, new Runnable() { - @Override - public void run() { - PlayerData.savePlayerData(); - if(getConfig().getString("loglevel", "info").equals("debug")) { - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Saving Player Data")); - } - } - }, 0L, getConfig().getInt("saveinterval") * 1200); //one minute * save interval - - scheduler.runTaskTimerAsynchronously(this, new Runnable() { - @Override - public void run() { - for (MineverseChatPlayer p : MineverseChatAPI.getOnlineMineverseChatPlayers()) { - long currentTimeMillis = System.currentTimeMillis(); - Iterator iterator = p.getMutes().iterator(); - while (iterator.hasNext()) { - MuteContainer mute = iterator.next(); - if(ChatChannel.isChannel(mute.getChannel())) { - ChatChannel channel = ChatChannel.getChannel(mute.getChannel()); - long timemark = mute.getDuration(); - if (timemark == 0) { - continue; - } - if (getConfig().getString("loglevel", "info").equals("debug")) { - System.out.println(currentTimeMillis + " " + timemark); - } - if (currentTimeMillis >= timemark) { - iterator.remove(); - p.getPlayer().sendMessage(LocalizedMessage.UNMUTE_PLAYER_PLAYER.toString() - .replace("{player}", p.getName()).replace("{channel_color}", channel.getColor()) - .replace("{channel_name}", mute.getChannel())); - if(channel.getBungee()) { - synchronize(p, true); - } - } - } - } - } - if (getConfig().getString("loglevel", "info").equals("debug")) { - Bukkit.getConsoleSender() - .sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Updating Player Mutes")); - } - } - }, 0L, 60L); // three second interval - } - - private void registerListeners() { - PluginManager pluginManager = getServer().getPluginManager(); - pluginManager.registerEvents(new Channel(), this); - pluginManager.registerEvents(new ChatListener(), this); - pluginManager.registerEvents(new SignListener(), this); - pluginManager.registerEvents(new CommandListener(), this); - pluginManager.registerEvents(new LoginListener(), this); - ProtocolLibrary.getProtocolManager().addPacketListener(new PacketListener()); - } - - private boolean setupPermissions() { - RegisteredServiceProvider permissionProvider = getServer().getServicesManager().getRegistration(net.milkbowl.vault.permission.Permission.class); - if(permissionProvider != null) { - permission = permissionProvider.getProvider(); - } - return(permission != null); - } - - private boolean setupChat() { - RegisteredServiceProvider chatProvider = getServer().getServicesManager().getRegistration(net.milkbowl.vault.chat.Chat.class); - if(chatProvider != null) { - chat = chatProvider.getProvider(); - } - return(chat != null); - } - - public static MineverseChat getInstance() { - return getPlugin(MineverseChat.class); - } - - public static void initializeConfigReaders() { - Localization.initialize(); - Alias.initialize(); - JsonFormat.initialize(); - GuiSlot.initialize(); - ChatChannel.initialize(false); - } - - public static Chat getVaultChat() { - return chat; - } - - public static Permission getVaultPermission() { - return permission; - } - - public static void synchronize(MineverseChatPlayer mcp, boolean changes) { - // System.out.println("Sync started..."); - ByteArrayOutputStream outstream = new ByteArrayOutputStream(); - DataOutputStream out = new DataOutputStream(outstream); - try { - out.writeUTF("Sync"); - if(!changes) { - out.writeUTF("Receive"); - // System.out.println(mcp.getPlayer().getServer().getServerName()); - // out.writeUTF(mcp.getPlayer().getServer().getServerName()); - out.writeUTF(mcp.getUUID().toString()); - Bukkit.getServer().getScheduler().runTaskLaterAsynchronously(getInstance(), new Runnable() { - @Override - public void run() { - if(!mcp.isOnline() || mcp.hasPlayed()) { - return; - } - synchronize(mcp, false); - } - }, 20L); // one second delay before running again - } - else { - out.writeUTF("Update"); - out.writeUTF(mcp.getUUID().toString()); - // out.writeUTF("Channels"); - int channelCount = 0; - for(String c : mcp.getListening()) { - ChatChannel channel = ChatChannel.getChannel(c); - if(channel.getBungee()) { - channelCount++; - } - } - out.write(channelCount); - for(String c : mcp.getListening()) { - ChatChannel channel = ChatChannel.getChannel(c); - if(channel.getBungee()) { - out.writeUTF(channel.getName()); - } - } - // out.writeUTF("Mutes"); - int muteCount = 0; - for(MuteContainer mute : mcp.getMutes()) { - ChatChannel channel = ChatChannel.getChannel(mute.getChannel()); - if(channel.getBungee()) { - muteCount++; - } - } - // System.out.println(muteCount + " mutes"); - out.write(muteCount); - for(MuteContainer mute : mcp.getMutes()) { - ChatChannel channel = ChatChannel.getChannel(mute.getChannel()); - if(channel.getBungee()) { - out.writeUTF(channel.getName()); - out.writeLong(mute.getDuration()); - out.writeUTF(mute.getReason()); - } - } - int ignoreCount = 0; - for(@SuppressWarnings("unused") - UUID c : mcp.getIgnores()) { - ignoreCount++; - } - out.write(ignoreCount); - for(UUID c : mcp.getIgnores()) { - out.writeUTF(c.toString()); - } - out.writeBoolean(mcp.isSpy()); - out.writeBoolean(mcp.getMessageToggle()); - } - sendPluginMessage(outstream); - // System.out.println("Sync start bottom..."); - out.close(); - } - catch(IOException e) { - e.printStackTrace(); - } - } - - public static void sendPluginMessage(ByteArrayOutputStream byteOutStream) { - if(MineverseChatAPI.getOnlineMineverseChatPlayers().size() > 0) { - MineverseChatAPI.getOnlineMineverseChatPlayers().iterator().next().getPlayer().sendPluginMessage(getInstance(), PLUGIN_MESSAGING_CHANNEL, byteOutStream.toByteArray()); - } - } - - public static void sendDiscordSRVPluginMessage(String chatChannel, String message) { - if(MineverseChatAPI.getOnlineMineverseChatPlayers().size() == 0) { - return; - } - ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream(); - DataOutputStream out = new DataOutputStream(byteOutStream); - try { - out.writeUTF("DiscordSRV"); - out.writeUTF(chatChannel); - out.writeUTF(message); - sendPluginMessage(byteOutStream); - out.close(); - } - catch(Exception e) { - e.printStackTrace(); - } - } - - @Override - public void onPluginMessageReceived(String channel, Player player, byte[] inputStream) { - if(!channel.equals(PLUGIN_MESSAGING_CHANNEL)) { - return; - } - try { - DataInputStream msgin = new DataInputStream(new ByteArrayInputStream(inputStream)); - if(getConfig().getString("loglevel", "info").equals("debug")) { - System.out.println(msgin.available() + " size on receiving end"); - } - String subchannel = msgin.readUTF(); - ByteArrayOutputStream stream = new ByteArrayOutputStream(); - DataOutputStream out = new DataOutputStream(stream); - if(subchannel.equals("Chat")) { - String server = msgin.readUTF(); - String chatchannel = msgin.readUTF(); - String senderName = msgin.readUTF(); - UUID senderUUID = UUID.fromString(msgin.readUTF()); - int hash = msgin.readInt(); - String format = msgin.readUTF(); - String chat = msgin.readUTF(); - String consoleChat = format + chat; - String globalJSON = msgin.readUTF(); - String primaryGroup = msgin.readUTF(); - String nickname = msgin.readUTF(); - - if(!ChatChannel.isChannel(chatchannel)) { - return; - } - ChatChannel chatChannelObject = ChatChannel.getChannel(chatchannel); - - if(!chatChannelObject.getBungee()) { - return; - } - - Set recipients = new HashSet(); - for(MineverseChatPlayer p : MineverseChatAPI.getOnlineMineverseChatPlayers()) { - if(p.isListening(chatChannelObject.getName())) { - recipients.add(p.getPlayer()); - } - } - - Bukkit.getServer().getScheduler().runTaskAsynchronously(this, new Runnable() { - @Override - public void run() { - //Create VentureChatEvent - VentureChatEvent ventureChatEvent = new VentureChatEvent(null, senderName, nickname, primaryGroup, chatChannelObject, recipients, recipients.size(), format, chat, globalJSON, hash, false); - //Fire event and wait for other plugin listeners to act on it - Bukkit.getServer().getPluginManager().callEvent(ventureChatEvent); - } - }); - - Bukkit.getConsoleSender().sendMessage(consoleChat); - - if(Database.isEnabled()) { - Database.writeVentureChat(senderUUID.toString(), senderName, server, chatchannel, chat.replace("'", "''"), "Chat"); - } - - for(MineverseChatPlayer p : MineverseChatAPI.getOnlineMineverseChatPlayers()) { - if(p.isListening(chatChannelObject.getName())) { - if(!p.getBungeeToggle() && MineverseChatAPI.getOnlineMineverseChatPlayer(senderName) == null) { - continue; - } - - String json = Format.formatModerationGUI(globalJSON, p.getPlayer(), senderName, chatchannel, hash); - PacketContainer packet = Format.createPacketPlayOutChat(json); - - if(getConfig().getBoolean("ignorechat", false)) { - if(!p.getIgnores().contains(senderUUID)) { - // System.out.println("Chat sent"); - Format.sendPacketPlayOutChat(p.getPlayer(), packet); - } - continue; - } - Format.sendPacketPlayOutChat(p.getPlayer(), packet); - } - } - } - if(subchannel.equals("DiscordSRV")) { - String chatChannel = msgin.readUTF(); - String message = msgin.readUTF(); - if(!ChatChannel.isChannel(chatChannel)) { - return; - } - ChatChannel chatChannelObj = ChatChannel.getChannel(chatChannel); - if(!chatChannelObj.getBungee()) { - return; - } - - String json = Format.convertPlainTextToJson(message, true); - int hash = (message.replaceAll("([�]([a-z0-9]))", "")).hashCode(); - - for(MineverseChatPlayer p : MineverseChatAPI.getOnlineMineverseChatPlayers()) { - if(p.isListening(chatChannelObj.getName())) { - String finalJSON = Format.formatModerationGUI(json, p.getPlayer(), "Discord", chatChannelObj.getName(), hash); - PacketContainer packet = Format.createPacketPlayOutChat(finalJSON); - Format.sendPacketPlayOutChat(p.getPlayer(), packet); - } - } - } - if(subchannel.equals("PlayerNames")) { - MineverseChatAPI.clearNetworkPlayerNames(); - int playerCount = msgin.readInt(); - for(int a = 0; a < playerCount; a ++) { - MineverseChatAPI.addNetworkPlayerName(msgin.readUTF()); - } - } - if(subchannel.equals("Chwho")) { - String identifier = msgin.readUTF(); - if(identifier.equals("Get")) { - String server = msgin.readUTF(); - String sender = msgin.readUTF(); - String chatchannel = msgin.readUTF(); - List listening = new ArrayList(); - if(ChatChannel.isChannel(chatchannel)) { - for(MineverseChatPlayer mcp : MineverseChatAPI.getOnlineMineverseChatPlayers()) { - if(mcp.isListening(chatchannel)) { - String entry = "&f" + mcp.getName(); - if(mcp.isMuted(chatchannel)) { - entry = "&c" + mcp.getName(); - } - listening.add(entry); - } - } - } - out.writeUTF("Chwho"); - out.writeUTF("Receive"); - out.writeUTF(server); - out.writeUTF(sender); - out.writeUTF(chatchannel); - out.writeInt(listening.size()); - for(String s : listening) { - out.writeUTF(s); - } - sendPluginMessage(stream); - } - if(identifier.equals("Receive")) { - String sender = msgin.readUTF(); - String stringchannel = msgin.readUTF(); - MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer(UUID.fromString(sender)); - ChatChannel chatchannel = ChatChannel.getChannel(stringchannel); - String playerList = ""; - int size = msgin.readInt(); - for(int a = 0; a < size; a++) { - playerList += msgin.readUTF() + ChatColor.WHITE + ", "; - } - if(playerList.length() > 2) { - playerList = playerList.substring(0, playerList.length() - 2); - } - mcp.getPlayer().sendMessage(LocalizedMessage.CHANNEL_PLAYER_LIST_HEADER.toString() - .replace("{channel_color}", chatchannel.getColor().toString()) - .replace("{channel_name}", chatchannel.getName())); - mcp.getPlayer().sendMessage(Format.FormatStringAll(playerList)); - } - } - if(subchannel.equals("RemoveMessage")) { - String hash = msgin.readUTF(); - getServer().dispatchCommand(this.getServer().getConsoleSender(), "removemessage " + hash); - } - if(subchannel.equals("Sync")) { - if(getConfig().getString("loglevel", "info").equals("debug")) { - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Received update...")); - } - String uuid = msgin.readUTF(); - MineverseChatPlayer p = MineverseChatAPI.getOnlineMineverseChatPlayer(UUID.fromString(uuid)); - if(p == null || p.hasPlayed()) { - return; - } - for(Object ch : p.getListening().toArray()) { - String c = ch.toString(); - ChatChannel cha = ChatChannel.getChannel(c); - if(cha.getBungee()) { - p.removeListening(c); - } - } - int size = msgin.read(); - for(int a = 0; a < size; a++) { - String ch = msgin.readUTF(); - if(ChatChannel.isChannel(ch)) { - ChatChannel cha = ChatChannel.getChannel(ch); - if(!cha.hasPermission() || p.getPlayer().hasPermission(cha.getPermission())) { - p.addListening(ch); - } - } - } - p.getMutes().removeIf(mute -> ChatChannel.getChannel(mute.getChannel()).getBungee()); - int sizeB = msgin.read(); - // System.out.println(sizeB + " mute size"); - for(int b = 0; b < sizeB; b++) { - String ch = msgin.readUTF(); - long muteTime = msgin.readLong(); - String muteReason = msgin.readUTF(); - // System.out.println(ch); - if(ChatChannel.isChannel(ch)) { - p.addMute(ch, muteTime, muteReason); - } - } - // System.out.println(msgin.available() + " available before"); - p.setSpy(msgin.readBoolean()); - p.setMessageToggle(msgin.readBoolean()); - // System.out.println(msgin.available() + " available after"); - for(Object o : p.getIgnores().toArray()) { - p.removeIgnore((UUID) o); - } - int sizeC = msgin.read(); - // System.out.println(sizeC + " ignore size"); - for(int c = 0; c < sizeC; c++) { - String i = msgin.readUTF(); - // System.out.println(i); - p.addIgnore(UUID.fromString(i)); - } - if(!p.hasPlayed()) { - boolean isThereABungeeChannel = false; - for(ChatChannel ch : ChatChannel.getAutojoinList()) { - if((!ch.hasPermission() || p.getPlayer().hasPermission(ch.getPermission())) && !p.isListening(ch.getName())) { - p.addListening(ch.getName()); - if(ch.getBungee()) { - isThereABungeeChannel = true; - } - } - } - p.setHasPlayed(true); - // Only run a sync update if the player joined a BungeeCord channel - if(isThereABungeeChannel) { - synchronize(p, true); - } - } - } - if(subchannel.equals("Ignore")) { - String identifier = msgin.readUTF(); - if(identifier.equals("Send")) { - String server = msgin.readUTF(); - String receiver = msgin.readUTF(); - MineverseChatPlayer p = MineverseChatAPI.getOnlineMineverseChatPlayer(receiver); - UUID sender = UUID.fromString(msgin.readUTF()); - if(!getConfig().getBoolean("bungeecordmessaging", true) || p == null || !p.isOnline()) { - out.writeUTF("Ignore"); - out.writeUTF("Offline"); - out.writeUTF(server); - out.writeUTF(receiver); - out.writeUTF(sender.toString()); - sendPluginMessage(stream); - return; - } - out.writeUTF("Ignore"); - out.writeUTF("Echo"); - out.writeUTF(server); - out.writeUTF(p.getUUID().toString()); - out.writeUTF(receiver); - out.writeUTF(sender.toString()); - sendPluginMessage(stream); - return; - } - if(identifier.equals("Offline")) { - String receiver = msgin.readUTF(); - UUID sender = UUID.fromString(msgin.readUTF()); - MineverseChatPlayer p = MineverseChatAPI.getOnlineMineverseChatPlayer(sender); - p.getPlayer().sendMessage(LocalizedMessage.PLAYER_OFFLINE.toString() - .replace("{args}", receiver)); - } - if(identifier.equals("Echo")) { - UUID receiver = UUID.fromString(msgin.readUTF()); - String receiverName = msgin.readUTF(); - UUID sender = UUID.fromString(msgin.readUTF()); - MineverseChatPlayer p = MineverseChatAPI.getOnlineMineverseChatPlayer(sender); - - if(p.getIgnores().contains(receiver)) { - p.getPlayer().sendMessage(LocalizedMessage.IGNORE_PLAYER_OFF.toString() - .replace("{player}", receiverName)); - p.removeIgnore(receiver); - synchronize(p, true); - return; - } - - p.addIgnore(receiver); - p.getPlayer().sendMessage(LocalizedMessage.IGNORE_PLAYER_ON.toString() - .replace("{player}", receiverName)); - synchronize(p, true); - } - } - if(subchannel.equals("Mute")) { - String identifier = msgin.readUTF(); - if(identifier.equals("Send")) { - String server = msgin.readUTF(); - String senderIdentifier = msgin.readUTF(); - String temporaryDataInstanceUUIDString = msgin.readUTF(); - String playerToMute = msgin.readUTF(); - String channelName = msgin.readUTF(); - long time = msgin.readLong(); - String reason = msgin.readUTF(); - MineverseChatPlayer playerToMuteMCP = MineverseChatAPI.getOnlineMineverseChatPlayer(playerToMute); - if(playerToMuteMCP == null) { - out.writeUTF("Mute"); - out.writeUTF("Offline"); - out.writeUTF(server); - out.writeUTF(temporaryDataInstanceUUIDString); - out.writeUTF(senderIdentifier); - out.writeUTF(playerToMute); - sendPluginMessage(stream); - return; - } - if(!ChatChannel.isChannel(channelName)) { - return; - } - ChatChannel chatChannelObj = ChatChannel.getChannel(channelName); - if (playerToMuteMCP.isMuted(chatChannelObj.getName())) { - out.writeUTF("Mute"); - out.writeUTF("AlreadyMuted"); - out.writeUTF(server); - out.writeUTF(senderIdentifier); - out.writeUTF(playerToMute); - out.writeUTF(channelName); - sendPluginMessage(stream); - return; - } - if(time > 0) { - long datetime = System.currentTimeMillis(); - if(reason.isEmpty()) { - playerToMuteMCP.addMute(chatChannelObj.getName(), datetime + time); - String timeString = Format.parseTimeStringFromMillis(time); - playerToMuteMCP.getPlayer() - .sendMessage(LocalizedMessage.MUTE_PLAYER_PLAYER_TIME.toString() - .replace("{channel_color}", chatChannelObj.getColor()) - .replace("{channel_name}", chatChannelObj.getName()) - .replace("{time}", timeString)); - } - else { - playerToMuteMCP.addMute(chatChannelObj.getName(), datetime + time, reason); - String timeString = Format.parseTimeStringFromMillis(time); - playerToMuteMCP.getPlayer() - .sendMessage(LocalizedMessage.MUTE_PLAYER_PLAYER_TIME_REASON.toString() - .replace("{channel_color}", chatChannelObj.getColor()) - .replace("{channel_name}", chatChannelObj.getName()) - .replace("{time}", timeString) - .replace("{reason}", reason)); - } - } - else { - if(reason.isEmpty()) { - playerToMuteMCP.addMute(chatChannelObj.getName()); - playerToMuteMCP.getPlayer() - .sendMessage(LocalizedMessage.MUTE_PLAYER_PLAYER.toString() - .replace("{channel_color}", chatChannelObj.getColor()) - .replace("{channel_name}", chatChannelObj.getName())); - } - else { - playerToMuteMCP.addMute(chatChannelObj.getName(), reason); - playerToMuteMCP.getPlayer() - .sendMessage(LocalizedMessage.MUTE_PLAYER_PLAYER_REASON.toString() - .replace("{channel_color}", chatChannelObj.getColor()) - .replace("{channel_name}", chatChannelObj.getName()) - .replace("{reason}", reason)); - } - } - synchronize(playerToMuteMCP, true); - out.writeUTF("Mute"); - out.writeUTF("Valid"); - out.writeUTF(server); - out.writeUTF(senderIdentifier); - out.writeUTF(playerToMute); - out.writeUTF(channelName); - out.writeLong(time); - out.writeUTF(reason); - sendPluginMessage(stream); - return; - } - if(identifier.equals("Valid")) { - String senderIdentifier = msgin.readUTF(); - String playerToMute = msgin.readUTF(); - String channelName = msgin.readUTF(); - long time = msgin.readLong(); - String reason = msgin.readUTF(); - if(!ChatChannel.isChannel(channelName)) { - return; - } - ChatChannel chatChannelObj = ChatChannel.getChannel(channelName); - if(time > 0) { - String timeString = Format.parseTimeStringFromMillis(time); - if(reason.isEmpty()) { - if(senderIdentifier.equals("VentureChat:Console")) { - Bukkit.getConsoleSender().sendMessage(LocalizedMessage.MUTE_PLAYER_SENDER_TIME.toString() - .replace("{player}", playerToMute) - .replace("{channel_color}", chatChannelObj.getColor()) - .replace("{channel_name}", chatChannelObj.getName()) - .replace("{time}", timeString)); - } - else { - UUID sender = UUID.fromString(senderIdentifier); - MineverseChatPlayer senderMCP = MineverseChatAPI.getOnlineMineverseChatPlayer(sender); - senderMCP.getPlayer().sendMessage(LocalizedMessage.MUTE_PLAYER_SENDER_TIME.toString() - .replace("{player}", playerToMute) - .replace("{channel_color}", chatChannelObj.getColor()) - .replace("{channel_name}", chatChannelObj.getName()) - .replace("{time}", timeString)); - } - } - else { - if(senderIdentifier.equals("VentureChat:Console")) { - Bukkit.getConsoleSender().sendMessage(LocalizedMessage.MUTE_PLAYER_SENDER_TIME_REASON.toString() - .replace("{player}", playerToMute) - .replace("{channel_color}", chatChannelObj.getColor()) - .replace("{channel_name}", chatChannelObj.getName()) - .replace("{time}", timeString) - .replace("{reason}", reason)); - } - else { - UUID sender = UUID.fromString(senderIdentifier); - MineverseChatPlayer senderMCP = MineverseChatAPI.getOnlineMineverseChatPlayer(sender); - senderMCP.getPlayer().sendMessage(LocalizedMessage.MUTE_PLAYER_SENDER_TIME_REASON.toString() - .replace("{player}", playerToMute) - .replace("{channel_color}", chatChannelObj.getColor()) - .replace("{channel_name}", chatChannelObj.getName()) - .replace("{time}", timeString) - .replace("{reason}", reason)); - } - } - } - else { - if(reason.isEmpty()) { - if(senderIdentifier.equals("VentureChat:Console")) { - Bukkit.getConsoleSender().sendMessage(LocalizedMessage.MUTE_PLAYER_SENDER.toString() - .replace("{player}", playerToMute) - .replace("{channel_color}", chatChannelObj.getColor()) - .replace("{channel_name}", chatChannelObj.getName())); - } - else { - UUID sender = UUID.fromString(senderIdentifier); - MineverseChatPlayer senderMCP = MineverseChatAPI.getOnlineMineverseChatPlayer(sender); - senderMCP.getPlayer().sendMessage(LocalizedMessage.MUTE_PLAYER_SENDER.toString() - .replace("{player}", playerToMute) - .replace("{channel_color}", chatChannelObj.getColor()) - .replace("{channel_name}", chatChannelObj.getName())); - } - } - else { - if(senderIdentifier.equals("VentureChat:Console")) { - Bukkit.getConsoleSender().sendMessage(LocalizedMessage.MUTE_PLAYER_SENDER_REASON.toString() - .replace("{player}", playerToMute) - .replace("{channel_color}", chatChannelObj.getColor()) - .replace("{channel_name}", chatChannelObj.getName()) - .replace("{reason}", reason)); - } - else { - UUID sender = UUID.fromString(senderIdentifier); - MineverseChatPlayer senderMCP = MineverseChatAPI.getOnlineMineverseChatPlayer(sender); - senderMCP.getPlayer().sendMessage(LocalizedMessage.MUTE_PLAYER_SENDER_REASON.toString() - .replace("{player}", playerToMute) - .replace("{channel_color}", chatChannelObj.getColor()) - .replace("{channel_name}", chatChannelObj.getName()) - .replace("{reason}", reason)); - } - } - } - return; - } - if(identifier.equals("Offline")) { - String senderIdentifier = msgin.readUTF(); - String playerToMute = msgin.readUTF(); - if(senderIdentifier.equals("VentureChat:Console")) { - Bukkit.getConsoleSender().sendMessage(LocalizedMessage.PLAYER_OFFLINE.toString() - .replace("{args}", playerToMute)); - return; - } - UUID sender = UUID.fromString(senderIdentifier); - MineverseChatPlayer senderMCP = MineverseChatAPI.getOnlineMineverseChatPlayer(sender); - senderMCP.getPlayer().sendMessage(LocalizedMessage.PLAYER_OFFLINE.toString() - .replace("{args}", playerToMute)); - return; - } - if(identifier.equals("AlreadyMuted")) { - String senderIdentifier = msgin.readUTF(); - String playerToMute = msgin.readUTF(); - String channelName = msgin.readUTF(); - if(!ChatChannel.isChannel(channelName)) { - return; - } - ChatChannel chatChannelObj = ChatChannel.getChannel(channelName); - if(senderIdentifier.equals("VentureChat:Console")) { - Bukkit.getConsoleSender().sendMessage(LocalizedMessage.PLAYER_ALREADY_MUTED.toString() - .replace("{player}", playerToMute).replace("{channel_color}", chatChannelObj.getColor()) - .replace("{channel_name}", chatChannelObj.getName())); - return; - } - UUID sender = UUID.fromString(senderIdentifier); - MineverseChatPlayer senderMCP = MineverseChatAPI.getOnlineMineverseChatPlayer(sender); - senderMCP.getPlayer().sendMessage(LocalizedMessage.PLAYER_ALREADY_MUTED.toString() - .replace("{player}", playerToMute).replace("{channel_color}", chatChannelObj.getColor()) - .replace("{channel_name}", chatChannelObj.getName())); - return; - } - } - if(subchannel.equals("Unmute")) { - String identifier = msgin.readUTF(); - if(identifier.equals("Send")) { - String server = msgin.readUTF(); - String senderIdentifier = msgin.readUTF(); - String temporaryDataInstanceUUIDString = msgin.readUTF(); - String playerToUnmute = msgin.readUTF(); - String channelName = msgin.readUTF(); - MineverseChatPlayer playerToUnmuteMCP = MineverseChatAPI.getOnlineMineverseChatPlayer(playerToUnmute); - if(playerToUnmuteMCP == null) { - out.writeUTF("Unmute"); - out.writeUTF("Offline"); - out.writeUTF(server); - out.writeUTF(temporaryDataInstanceUUIDString); - out.writeUTF(senderIdentifier); - out.writeUTF(playerToUnmute); - sendPluginMessage(stream); - return; - } - if(!ChatChannel.isChannel(channelName)) { - return; - } - ChatChannel chatChannelObj = ChatChannel.getChannel(channelName); - if (!playerToUnmuteMCP.isMuted(chatChannelObj.getName())) { - out.writeUTF("Unmute"); - out.writeUTF("NotMuted"); - out.writeUTF(server); - out.writeUTF(senderIdentifier); - out.writeUTF(playerToUnmute); - out.writeUTF(channelName); - sendPluginMessage(stream); - return; - } - playerToUnmuteMCP.removeMute(chatChannelObj.getName()); - playerToUnmuteMCP.getPlayer().sendMessage(LocalizedMessage.UNMUTE_PLAYER_PLAYER.toString() - .replace("{player}", player.getName()).replace("{channel_color}", chatChannelObj.getColor()) - .replace("{channel_name}", chatChannelObj.getName())); - synchronize(playerToUnmuteMCP, true); - out.writeUTF("Unmute"); - out.writeUTF("Valid"); - out.writeUTF(server); - out.writeUTF(senderIdentifier); - out.writeUTF(playerToUnmute); - out.writeUTF(channelName); - sendPluginMessage(stream); - return; - } - if(identifier.equals("Valid")) { - String senderIdentifier = msgin.readUTF(); - String playerToUnmute = msgin.readUTF(); - String channelName = msgin.readUTF(); - if(!ChatChannel.isChannel(channelName)) { - return; - } - ChatChannel chatChannelObj = ChatChannel.getChannel(channelName); - if(senderIdentifier.equals("VentureChat:Console")) { - Bukkit.getConsoleSender().sendMessage(LocalizedMessage.UNMUTE_PLAYER_SENDER.toString() - .replace("{player}", playerToUnmute) - .replace("{channel_color}", chatChannelObj.getColor()) - .replace("{channel_name}", chatChannelObj.getName())); - } - else { - UUID sender = UUID.fromString(senderIdentifier); - MineverseChatPlayer senderMCP = MineverseChatAPI.getOnlineMineverseChatPlayer(sender); - senderMCP.getPlayer().sendMessage(LocalizedMessage.UNMUTE_PLAYER_SENDER.toString() - .replace("{player}", playerToUnmute) - .replace("{channel_color}", chatChannelObj.getColor()) - .replace("{channel_name}", chatChannelObj.getName())); - } - return; - } - if(identifier.equals("Offline")) { - String senderIdentifier = msgin.readUTF(); - String playerToUnmute = msgin.readUTF(); - if(senderIdentifier.equals("VentureChat:Console")) { - Bukkit.getConsoleSender().sendMessage(LocalizedMessage.PLAYER_OFFLINE.toString() - .replace("{args}", playerToUnmute)); - return; - } - UUID sender = UUID.fromString(senderIdentifier); - MineverseChatPlayer senderMCP = MineverseChatAPI.getOnlineMineverseChatPlayer(sender); - senderMCP.getPlayer().sendMessage(LocalizedMessage.PLAYER_OFFLINE.toString() - .replace("{args}", playerToUnmute)); - return; - } - if(identifier.equals("NotMuted")) { - String senderIdentifier = msgin.readUTF(); - String playerToUnmute = msgin.readUTF(); - String channelName = msgin.readUTF(); - if(!ChatChannel.isChannel(channelName)) { - return; - } - ChatChannel chatChannelObj = ChatChannel.getChannel(channelName); - if(senderIdentifier.equals("VentureChat:Console")) { - Bukkit.getConsoleSender().sendMessage(LocalizedMessage.PLAYER_NOT_MUTED.toString() - .replace("{player}", playerToUnmute).replace("{channel_color}", chatChannelObj.getColor()) - .replace("{channel_name}", chatChannelObj.getName())); - return; - } - UUID sender = UUID.fromString(senderIdentifier); - MineverseChatPlayer senderMCP = MineverseChatAPI.getOnlineMineverseChatPlayer(sender); - senderMCP.getPlayer().sendMessage(LocalizedMessage.PLAYER_NOT_MUTED.toString() - .replace("{player}", playerToUnmute).replace("{channel_color}", chatChannelObj.getColor()) - .replace("{channel_name}", chatChannelObj.getName())); - return; - } - } - if(subchannel.equals("Message")) { - String identifier = msgin.readUTF(); - if(identifier.equals("Send")) { - String server = msgin.readUTF(); - String receiver = msgin.readUTF(); - MineverseChatPlayer p = MineverseChatAPI.getOnlineMineverseChatPlayer(receiver); - UUID sender = UUID.fromString(msgin.readUTF()); - String sName = msgin.readUTF(); - String send = msgin.readUTF(); - String echo = msgin.readUTF(); - String spy = msgin.readUTF(); - String msg = msgin.readUTF(); - if(!getConfig().getBoolean("bungeecordmessaging", true) || p == null) { - out.writeUTF("Message"); - out.writeUTF("Offline"); - out.writeUTF(server); - out.writeUTF(receiver); - out.writeUTF(sender.toString()); - sendPluginMessage(stream); - return; - } - if(p.getIgnores().contains(sender)) { - out.writeUTF("Message"); - out.writeUTF("Ignore"); - out.writeUTF(server); - out.writeUTF(receiver); - out.writeUTF(sender.toString()); - sendPluginMessage(stream); - return; - } - if(!p.getMessageToggle()) { - out.writeUTF("Message"); - out.writeUTF("Blocked"); - out.writeUTF(server); - out.writeUTF(receiver); - out.writeUTF(sender.toString()); - sendPluginMessage(stream); - return; - } - p.getPlayer().sendMessage(Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(p.getPlayer(), send.replaceAll("receiver_", ""))) + msg); - if(p.hasNotifications()) { - Format.playMessageSound(p); - } - if(MineverseChatAPI.getMineverseChatPlayer(sender) == null) { - MineverseChatPlayer senderMCP = new MineverseChatPlayer(sender, sName); - MineverseChatAPI.addMineverseChatPlayerToMap(senderMCP); - MineverseChatAPI.addNameToMap(senderMCP); - } - p.setReplyPlayer(sender); - out.writeUTF("Message"); - out.writeUTF("Echo"); - out.writeUTF(server); - out.writeUTF(receiver); - out.writeUTF(p.getUUID().toString()); - out.writeUTF(sender.toString()); - out.writeUTF(sName); - out.writeUTF(Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(p.getPlayer(), echo.replaceAll("receiver_", ""))) + msg); - out.writeUTF(Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(p.getPlayer(), spy.replaceAll("receiver_", ""))) + msg); - sendPluginMessage(stream); - return; - } - if(identifier.equals("Offline")) { - String receiver = msgin.readUTF(); - UUID sender = UUID.fromString(msgin.readUTF()); - MineverseChatPlayer p = MineverseChatAPI.getOnlineMineverseChatPlayer(sender); - p.getPlayer().sendMessage(LocalizedMessage.PLAYER_OFFLINE.toString() - .replace("{args}", receiver)); - p.setReplyPlayer(null); - } - if(identifier.equals("Ignore")) { - String receiver = msgin.readUTF(); - UUID sender = UUID.fromString(msgin.readUTF()); - MineverseChatPlayer p = MineverseChatAPI.getOnlineMineverseChatPlayer(sender); - p.getPlayer().sendMessage(LocalizedMessage.IGNORING_MESSAGE.toString() - .replace("{player}", receiver)); - } - if(identifier.equals("Blocked")) { - String receiver = msgin.readUTF(); - UUID sender = UUID.fromString(msgin.readUTF()); - MineverseChatPlayer p = MineverseChatAPI.getOnlineMineverseChatPlayer(sender); - p.getPlayer().sendMessage(LocalizedMessage.BLOCKING_MESSAGE.toString() - .replace("{player}", receiver)); - } - if(identifier.equals("Echo")) { - String receiverName = msgin.readUTF(); - UUID receiverUUID = UUID.fromString(msgin.readUTF()); - UUID senderUUID = UUID.fromString(msgin.readUTF()); - MineverseChatPlayer senderMCP = MineverseChatAPI.getOnlineMineverseChatPlayer(senderUUID); - String echo = msgin.readUTF(); - if(MineverseChatAPI.getMineverseChatPlayer(receiverUUID) == null) { - MineverseChatPlayer receiverMCP = new MineverseChatPlayer(receiverUUID, receiverName); - MineverseChatAPI.addMineverseChatPlayerToMap(receiverMCP); - MineverseChatAPI.addNameToMap(receiverMCP); - } - senderMCP.setReplyPlayer(receiverUUID); - senderMCP.getPlayer().sendMessage(echo); - } - if(identifier.equals("Spy")) { - String receiverName = msgin.readUTF(); - String senderName = msgin.readUTF(); - String spy = msgin.readUTF(); - if(!spy.startsWith("VentureChat:NoSpy")) { - for(MineverseChatPlayer pl : MineverseChatAPI.getOnlineMineverseChatPlayers()) { - if(pl.isSpy() && !pl.getName().equals(senderName) && !pl.getName().equals(receiverName)) { - pl.getPlayer().sendMessage(spy); - } - } - } - } - } - } - catch(Exception e) { - e.printStackTrace(); - } - } -} +package venture.Aust1n46.chat.controllers; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; + +import com.comphenix.protocol.events.PacketContainer; +import com.google.inject.Inject; +import com.google.inject.Singleton; + +import me.clip.placeholderapi.PlaceholderAPI; +import mineverse.Aust1n46.chat.api.events.VentureChatEvent; +import mineverse.Aust1n46.chat.localization.LocalizedMessage; +import mineverse.Aust1n46.chat.utilities.FormatUtils; +import venture.Aust1n46.chat.VentureChat; +import venture.Aust1n46.chat.controllers.commands.MuteContainer; +import venture.Aust1n46.chat.model.ChatChannel; +import venture.Aust1n46.chat.model.VentureChatPlayer; +import venture.Aust1n46.chat.service.VentureChatDatabaseService; +import venture.Aust1n46.chat.service.VentureChatFormatService; +import venture.Aust1n46.chat.service.VentureChatPlayerApiService; + +@Singleton +public class PluginMessageController { + public static final String PLUGIN_MESSAGING_CHANNEL = "venturechat:data"; + + @Inject + private VentureChat plugin; + @Inject + private VentureChatDatabaseService databaseService; + @Inject + private VentureChatFormatService formatService; + @Inject + private VentureChatPlayerApiService playerApiService; + + public void sendPluginMessage(ByteArrayOutputStream byteOutStream) { + if(playerApiService.getOnlineMineverseChatPlayers().size() > 0) { + playerApiService.getOnlineMineverseChatPlayers().iterator().next().getPlayer().sendPluginMessage(plugin, PLUGIN_MESSAGING_CHANNEL, byteOutStream.toByteArray()); + } + } + + public void sendDiscordSRVPluginMessage(String chatChannel, String message) { + if(playerApiService.getOnlineMineverseChatPlayers().size() == 0) { + return; + } + ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream(); + DataOutputStream out = new DataOutputStream(byteOutStream); + try { + out.writeUTF("DiscordSRV"); + out.writeUTF(chatChannel); + out.writeUTF(message); + sendPluginMessage(byteOutStream); + out.close(); + } + catch(Exception e) { + e.printStackTrace(); + } + } + + public void synchronize(VentureChatPlayer mcp, boolean changes) { + // System.out.println("Sync started..."); + ByteArrayOutputStream outstream = new ByteArrayOutputStream(); + DataOutputStream out = new DataOutputStream(outstream); + try { + out.writeUTF("Sync"); + if(!changes) { + out.writeUTF("Receive"); + // System.out.println(mcp.getPlayer().getServer().getServerName()); + // out.writeUTF(mcp.getPlayer().getServer().getServerName()); + out.writeUTF(mcp.getUuid().toString()); + Bukkit.getServer().getScheduler().runTaskLaterAsynchronously(plugin, new Runnable() { + @Override + public void run() { + if(!mcp.isOnline() || mcp.hasPlayed()) { + return; + } + synchronize(mcp, false); + } + }, 20L); // one second delay before running again + } + else { + out.writeUTF("Update"); + out.writeUTF(mcp.getUuid().toString()); + // out.writeUTF("Channels"); + int channelCount = 0; + for(String c : mcp.getListening()) { + ChatChannel channel = ChatChannel.getChannel(c); + if(channel.getBungee()) { + channelCount++; + } + } + out.write(channelCount); + for(String c : mcp.getListening()) { + ChatChannel channel = ChatChannel.getChannel(c); + if(channel.getBungee()) { + out.writeUTF(channel.getName()); + } + } + // out.writeUTF("Mutes"); + int muteCount = 0; + for(MuteContainer mute : mcp.getMutes()) { + ChatChannel channel = ChatChannel.getChannel(mute.getChannel()); + if(channel.getBungee()) { + muteCount++; + } + } + // System.out.println(muteCount + " mutes"); + out.write(muteCount); + for(MuteContainer mute : mcp.getMutes()) { + ChatChannel channel = ChatChannel.getChannel(mute.getChannel()); + if(channel.getBungee()) { + out.writeUTF(channel.getName()); + out.writeLong(mute.getDuration()); + out.writeUTF(mute.getReason()); + } + } + int ignoreCount = 0; + for(@SuppressWarnings("unused") + UUID c : mcp.getIgnores()) { + ignoreCount++; + } + out.write(ignoreCount); + for(UUID c : mcp.getIgnores()) { + out.writeUTF(c.toString()); + } + out.writeBoolean(mcp.isSpy()); + out.writeBoolean(mcp.isMessageToggle()); + } + sendPluginMessage(outstream); + // System.out.println("Sync start bottom..."); + out.close(); + } + catch(IOException e) { + e.printStackTrace(); + } + } + + public void processInboundPluginMessage(final String channel, final Player player, final byte[] inputStream) { + if(!channel.equals(PLUGIN_MESSAGING_CHANNEL)) { + return; + } + try { + DataInputStream msgin = new DataInputStream(new ByteArrayInputStream(inputStream)); + if(plugin.getConfig().getString("loglevel", "info").equals("debug")) { + System.out.println(msgin.available() + " size on receiving end"); + } + String subchannel = msgin.readUTF(); + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + DataOutputStream out = new DataOutputStream(stream); + if(subchannel.equals("Chat")) { + String server = msgin.readUTF(); + String chatchannel = msgin.readUTF(); + String senderName = msgin.readUTF(); + UUID senderUUID = UUID.fromString(msgin.readUTF()); + int hash = msgin.readInt(); + String format = msgin.readUTF(); + String chat = msgin.readUTF(); + String consoleChat = format + chat; + String globalJSON = msgin.readUTF(); + String primaryGroup = msgin.readUTF(); + + if(!ChatChannel.isChannel(chatchannel)) { + return; + } + ChatChannel chatChannelObject = ChatChannel.getChannel(chatchannel); + + if(!chatChannelObject.getBungee()) { + return; + } + + Set recipients = new HashSet(); + for(VentureChatPlayer p : playerApiService.getOnlineMineverseChatPlayers()) { + if(p.isListening(chatChannelObject.getName())) { + recipients.add(p.getPlayer()); + } + } + + Bukkit.getServer().getScheduler().runTaskAsynchronously(plugin, new Runnable() { + @Override + public void run() { + //Create VentureChatEvent + VentureChatEvent ventureChatEvent = new VentureChatEvent(null, senderName, primaryGroup, chatChannelObject, recipients, recipients.size(), format, chat, globalJSON, hash, false); + //Fire event and wait for other plugin listeners to act on it + Bukkit.getServer().getPluginManager().callEvent(ventureChatEvent); + } + }); + + Bukkit.getConsoleSender().sendMessage(consoleChat); + + if(databaseService.isEnabled()) { + databaseService.writeVentureChat(senderUUID.toString(), senderName, server, chatchannel, chat.replace("'", "''"), "Chat"); + } + + for(VentureChatPlayer p : playerApiService.getOnlineMineverseChatPlayers()) { + if(p.isListening(chatChannelObject.getName())) { + if(!p.isBungeeToggle() && playerApiService.getOnlineMineverseChatPlayer(senderName) == null) { + continue; + } + + String json = formatService.formatModerationGUI(globalJSON, p.getPlayer(), senderName, chatchannel, hash); + PacketContainer packet = formatService.createPacketPlayOutChat(json); + + if(plugin.getConfig().getBoolean("ignorechat", false)) { + if(!p.getIgnores().contains(senderUUID)) { + // System.out.println("Chat sent"); + formatService.sendPacketPlayOutChat(p.getPlayer(), packet); + } + continue; + } + formatService.sendPacketPlayOutChat(p.getPlayer(), packet); + } + } + } + if(subchannel.equals("DiscordSRV")) { + String chatChannel = msgin.readUTF(); + String message = msgin.readUTF(); + if(!ChatChannel.isChannel(chatChannel)) { + return; + } + ChatChannel chatChannelObj = ChatChannel.getChannel(chatChannel); + if(!chatChannelObj.getBungee()) { + return; + } + + String json = formatService.convertPlainTextToJson(message, true); + int hash = (message.replaceAll("([�]([a-z0-9]))", "")).hashCode(); + + for(VentureChatPlayer p : playerApiService.getOnlineMineverseChatPlayers()) { + if(p.isListening(chatChannelObj.getName())) { + String finalJSON = formatService.formatModerationGUI(json, p.getPlayer(), "Discord", chatChannelObj.getName(), hash); + PacketContainer packet = formatService.createPacketPlayOutChat(finalJSON); + formatService.sendPacketPlayOutChat(p.getPlayer(), packet); + } + } + } + if(subchannel.equals("PlayerNames")) { + playerApiService.clearNetworkPlayerNames(); + int playerCount = msgin.readInt(); + for(int a = 0; a < playerCount; a ++) { + playerApiService.addNetworkPlayerName(msgin.readUTF()); + } + } + if(subchannel.equals("Chwho")) { + String identifier = msgin.readUTF(); + if(identifier.equals("Get")) { + String server = msgin.readUTF(); + String sender = msgin.readUTF(); + String chatchannel = msgin.readUTF(); + List listening = new ArrayList(); + if(ChatChannel.isChannel(chatchannel)) { + for(VentureChatPlayer mcp : playerApiService.getOnlineMineverseChatPlayers()) { + if(mcp.isListening(chatchannel)) { + String entry = "&f" + mcp.getName(); + if(mcp.isMuted(chatchannel)) { + entry = "&c" + mcp.getName(); + } + listening.add(entry); + } + } + } + out.writeUTF("Chwho"); + out.writeUTF("Receive"); + out.writeUTF(server); + out.writeUTF(sender); + out.writeUTF(chatchannel); + out.writeInt(listening.size()); + for(String s : listening) { + out.writeUTF(s); + } + sendPluginMessage(stream); + } + if(identifier.equals("Receive")) { + String sender = msgin.readUTF(); + String stringchannel = msgin.readUTF(); + VentureChatPlayer mcp = playerApiService.getOnlineMineverseChatPlayer(UUID.fromString(sender)); + ChatChannel chatchannel = ChatChannel.getChannel(stringchannel); + String playerList = ""; + int size = msgin.readInt(); + for(int a = 0; a < size; a++) { + playerList += msgin.readUTF() + ChatColor.WHITE + ", "; + } + if(playerList.length() > 2) { + playerList = playerList.substring(0, playerList.length() - 2); + } + mcp.getPlayer().sendMessage(LocalizedMessage.CHANNEL_PLAYER_LIST_HEADER.toString() + .replace("{channel_color}", chatchannel.getColor().toString()) + .replace("{channel_name}", chatchannel.getName())); + mcp.getPlayer().sendMessage(FormatUtils.FormatStringAll(playerList)); + } + } + if(subchannel.equals("RemoveMessage")) { + String hash = msgin.readUTF(); + plugin.getServer().dispatchCommand(plugin.getServer().getConsoleSender(), "removemessage " + hash); + } + if(subchannel.equals("Sync")) { + if(plugin.getConfig().getString("loglevel", "info").equals("debug")) { + Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&e - Received update...")); + } + String uuid = msgin.readUTF(); + VentureChatPlayer p = playerApiService.getOnlineMineverseChatPlayer(UUID.fromString(uuid)); + if(p == null || p.hasPlayed()) { + return; + } + for(Object ch : p.getListening().toArray()) { + String c = ch.toString(); + ChatChannel cha = ChatChannel.getChannel(c); + if(cha.getBungee()) { + p.removeListening(c); + } + } + int size = msgin.read(); + for(int a = 0; a < size; a++) { + String ch = msgin.readUTF(); + if(ChatChannel.isChannel(ch)) { + ChatChannel cha = ChatChannel.getChannel(ch); + if(!cha.hasPermission() || p.getPlayer().hasPermission(cha.getPermission())) { + p.addListening(ch); + } + } + } + p.getMutes().removeIf(mute -> ChatChannel.getChannel(mute.getChannel()).getBungee()); + int sizeB = msgin.read(); + // System.out.println(sizeB + " mute size"); + for(int b = 0; b < sizeB; b++) { + String ch = msgin.readUTF(); + long muteTime = msgin.readLong(); + String muteReason = msgin.readUTF(); + // System.out.println(ch); + if(ChatChannel.isChannel(ch)) { + p.addMute(ch, muteTime, muteReason); + } + } + // System.out.println(msgin.available() + " available before"); + p.setSpy(msgin.readBoolean()); + p.setMessageToggle(msgin.readBoolean()); + // System.out.println(msgin.available() + " available after"); + for(Object o : p.getIgnores().toArray()) { + p.removeIgnore((UUID) o); + } + int sizeC = msgin.read(); + // System.out.println(sizeC + " ignore size"); + for(int c = 0; c < sizeC; c++) { + String i = msgin.readUTF(); + // System.out.println(i); + p.addIgnore(UUID.fromString(i)); + } + if(!p.hasPlayed()) { + boolean isThereABungeeChannel = false; + for(ChatChannel ch : ChatChannel.getAutojoinList()) { + if((!ch.hasPermission() || p.getPlayer().hasPermission(ch.getPermission())) && !p.isListening(ch.getName())) { + p.addListening(ch.getName()); + if(ch.getBungee()) { + isThereABungeeChannel = true; + } + } + } + p.setHasPlayed(true); + // Only run a sync update if the player joined a BungeeCord channel + if(isThereABungeeChannel) { + synchronize(p, true); + } + } + } + if(subchannel.equals("Ignore")) { + String identifier = msgin.readUTF(); + if(identifier.equals("Send")) { + String server = msgin.readUTF(); + String receiver = msgin.readUTF(); + VentureChatPlayer p = playerApiService.getOnlineMineverseChatPlayer(receiver); + UUID sender = UUID.fromString(msgin.readUTF()); + if(!plugin.getConfig().getBoolean("bungeecordmessaging", true) || p == null || !p.isOnline()) { + out.writeUTF("Ignore"); + out.writeUTF("Offline"); + out.writeUTF(server); + out.writeUTF(receiver); + out.writeUTF(sender.toString()); + sendPluginMessage(stream); + return; + } + out.writeUTF("Ignore"); + out.writeUTF("Echo"); + out.writeUTF(server); + out.writeUTF(p.getUuid().toString()); + out.writeUTF(receiver); + out.writeUTF(sender.toString()); + sendPluginMessage(stream); + return; + } + if(identifier.equals("Offline")) { + String receiver = msgin.readUTF(); + UUID sender = UUID.fromString(msgin.readUTF()); + VentureChatPlayer p = playerApiService.getOnlineMineverseChatPlayer(sender); + p.getPlayer().sendMessage(LocalizedMessage.PLAYER_OFFLINE.toString() + .replace("{args}", receiver)); + } + if(identifier.equals("Echo")) { + UUID receiver = UUID.fromString(msgin.readUTF()); + String receiverName = msgin.readUTF(); + UUID sender = UUID.fromString(msgin.readUTF()); + VentureChatPlayer p = playerApiService.getOnlineMineverseChatPlayer(sender); + + if(p.getIgnores().contains(receiver)) { + p.getPlayer().sendMessage(LocalizedMessage.IGNORE_PLAYER_OFF.toString() + .replace("{player}", receiverName)); + p.removeIgnore(receiver); + synchronize(p, true); + return; + } + + p.addIgnore(receiver); + p.getPlayer().sendMessage(LocalizedMessage.IGNORE_PLAYER_ON.toString() + .replace("{player}", receiverName)); + synchronize(p, true); + } + } + if(subchannel.equals("Mute")) { + String identifier = msgin.readUTF(); + if(identifier.equals("Send")) { + String server = msgin.readUTF(); + String senderIdentifier = msgin.readUTF(); + String temporaryDataInstanceUUIDString = msgin.readUTF(); + String playerToMute = msgin.readUTF(); + String channelName = msgin.readUTF(); + long time = msgin.readLong(); + String reason = msgin.readUTF(); + VentureChatPlayer playerToMuteMCP = playerApiService.getOnlineMineverseChatPlayer(playerToMute); + if(playerToMuteMCP == null) { + out.writeUTF("Mute"); + out.writeUTF("Offline"); + out.writeUTF(server); + out.writeUTF(temporaryDataInstanceUUIDString); + out.writeUTF(senderIdentifier); + out.writeUTF(playerToMute); + sendPluginMessage(stream); + return; + } + if(!ChatChannel.isChannel(channelName)) { + return; + } + ChatChannel chatChannelObj = ChatChannel.getChannel(channelName); + if (playerToMuteMCP.isMuted(chatChannelObj.getName())) { + out.writeUTF("Mute"); + out.writeUTF("AlreadyMuted"); + out.writeUTF(server); + out.writeUTF(senderIdentifier); + out.writeUTF(playerToMute); + out.writeUTF(channelName); + sendPluginMessage(stream); + return; + } + if(time > 0) { + long datetime = System.currentTimeMillis(); + if(reason.isEmpty()) { + playerToMuteMCP.addMute(chatChannelObj.getName(), datetime + time); + String timeString = FormatUtils.parseTimeStringFromMillis(time); + playerToMuteMCP.getPlayer() + .sendMessage(LocalizedMessage.MUTE_PLAYER_PLAYER_TIME.toString() + .replace("{channel_color}", chatChannelObj.getColor()) + .replace("{channel_name}", chatChannelObj.getName()) + .replace("{time}", timeString)); + } + else { + playerToMuteMCP.addMute(chatChannelObj.getName(), datetime + time, reason); + String timeString = FormatUtils.parseTimeStringFromMillis(time); + playerToMuteMCP.getPlayer() + .sendMessage(LocalizedMessage.MUTE_PLAYER_PLAYER_TIME_REASON.toString() + .replace("{channel_color}", chatChannelObj.getColor()) + .replace("{channel_name}", chatChannelObj.getName()) + .replace("{time}", timeString) + .replace("{reason}", reason)); + } + } + else { + if(reason.isEmpty()) { + playerToMuteMCP.addMute(chatChannelObj.getName()); + playerToMuteMCP.getPlayer() + .sendMessage(LocalizedMessage.MUTE_PLAYER_PLAYER.toString() + .replace("{channel_color}", chatChannelObj.getColor()) + .replace("{channel_name}", chatChannelObj.getName())); + } + else { + playerToMuteMCP.addMute(chatChannelObj.getName(), reason); + playerToMuteMCP.getPlayer() + .sendMessage(LocalizedMessage.MUTE_PLAYER_PLAYER_REASON.toString() + .replace("{channel_color}", chatChannelObj.getColor()) + .replace("{channel_name}", chatChannelObj.getName()) + .replace("{reason}", reason)); + } + } + synchronize(playerToMuteMCP, true); + out.writeUTF("Mute"); + out.writeUTF("Valid"); + out.writeUTF(server); + out.writeUTF(senderIdentifier); + out.writeUTF(playerToMute); + out.writeUTF(channelName); + out.writeLong(time); + out.writeUTF(reason); + sendPluginMessage(stream); + return; + } + if(identifier.equals("Valid")) { + String senderIdentifier = msgin.readUTF(); + String playerToMute = msgin.readUTF(); + String channelName = msgin.readUTF(); + long time = msgin.readLong(); + String reason = msgin.readUTF(); + if(!ChatChannel.isChannel(channelName)) { + return; + } + ChatChannel chatChannelObj = ChatChannel.getChannel(channelName); + if(time > 0) { + String timeString = FormatUtils.parseTimeStringFromMillis(time); + if(reason.isEmpty()) { + if(senderIdentifier.equals("VentureChat:Console")) { + Bukkit.getConsoleSender().sendMessage(LocalizedMessage.MUTE_PLAYER_SENDER_TIME.toString() + .replace("{player}", playerToMute) + .replace("{channel_color}", chatChannelObj.getColor()) + .replace("{channel_name}", chatChannelObj.getName()) + .replace("{time}", timeString)); + } + else { + UUID sender = UUID.fromString(senderIdentifier); + VentureChatPlayer senderMCP = playerApiService.getOnlineMineverseChatPlayer(sender); + senderMCP.getPlayer().sendMessage(LocalizedMessage.MUTE_PLAYER_SENDER_TIME.toString() + .replace("{player}", playerToMute) + .replace("{channel_color}", chatChannelObj.getColor()) + .replace("{channel_name}", chatChannelObj.getName()) + .replace("{time}", timeString)); + } + } + else { + if(senderIdentifier.equals("VentureChat:Console")) { + Bukkit.getConsoleSender().sendMessage(LocalizedMessage.MUTE_PLAYER_SENDER_TIME_REASON.toString() + .replace("{player}", playerToMute) + .replace("{channel_color}", chatChannelObj.getColor()) + .replace("{channel_name}", chatChannelObj.getName()) + .replace("{time}", timeString) + .replace("{reason}", reason)); + } + else { + UUID sender = UUID.fromString(senderIdentifier); + VentureChatPlayer senderMCP = playerApiService.getOnlineMineverseChatPlayer(sender); + senderMCP.getPlayer().sendMessage(LocalizedMessage.MUTE_PLAYER_SENDER_TIME_REASON.toString() + .replace("{player}", playerToMute) + .replace("{channel_color}", chatChannelObj.getColor()) + .replace("{channel_name}", chatChannelObj.getName()) + .replace("{time}", timeString) + .replace("{reason}", reason)); + } + } + } + else { + if(reason.isEmpty()) { + if(senderIdentifier.equals("VentureChat:Console")) { + Bukkit.getConsoleSender().sendMessage(LocalizedMessage.MUTE_PLAYER_SENDER.toString() + .replace("{player}", playerToMute) + .replace("{channel_color}", chatChannelObj.getColor()) + .replace("{channel_name}", chatChannelObj.getName())); + } + else { + UUID sender = UUID.fromString(senderIdentifier); + VentureChatPlayer senderMCP = playerApiService.getOnlineMineverseChatPlayer(sender); + senderMCP.getPlayer().sendMessage(LocalizedMessage.MUTE_PLAYER_SENDER.toString() + .replace("{player}", playerToMute) + .replace("{channel_color}", chatChannelObj.getColor()) + .replace("{channel_name}", chatChannelObj.getName())); + } + } + else { + if(senderIdentifier.equals("VentureChat:Console")) { + Bukkit.getConsoleSender().sendMessage(LocalizedMessage.MUTE_PLAYER_SENDER_REASON.toString() + .replace("{player}", playerToMute) + .replace("{channel_color}", chatChannelObj.getColor()) + .replace("{channel_name}", chatChannelObj.getName()) + .replace("{reason}", reason)); + } + else { + UUID sender = UUID.fromString(senderIdentifier); + VentureChatPlayer senderMCP = playerApiService.getOnlineMineverseChatPlayer(sender); + senderMCP.getPlayer().sendMessage(LocalizedMessage.MUTE_PLAYER_SENDER_REASON.toString() + .replace("{player}", playerToMute) + .replace("{channel_color}", chatChannelObj.getColor()) + .replace("{channel_name}", chatChannelObj.getName()) + .replace("{reason}", reason)); + } + } + } + return; + } + if(identifier.equals("Offline")) { + String senderIdentifier = msgin.readUTF(); + String playerToMute = msgin.readUTF(); + if(senderIdentifier.equals("VentureChat:Console")) { + Bukkit.getConsoleSender().sendMessage(LocalizedMessage.PLAYER_OFFLINE.toString() + .replace("{args}", playerToMute)); + return; + } + UUID sender = UUID.fromString(senderIdentifier); + VentureChatPlayer senderMCP = playerApiService.getOnlineMineverseChatPlayer(sender); + senderMCP.getPlayer().sendMessage(LocalizedMessage.PLAYER_OFFLINE.toString() + .replace("{args}", playerToMute)); + return; + } + if(identifier.equals("AlreadyMuted")) { + String senderIdentifier = msgin.readUTF(); + String playerToMute = msgin.readUTF(); + String channelName = msgin.readUTF(); + if(!ChatChannel.isChannel(channelName)) { + return; + } + ChatChannel chatChannelObj = ChatChannel.getChannel(channelName); + if(senderIdentifier.equals("VentureChat:Console")) { + Bukkit.getConsoleSender().sendMessage(LocalizedMessage.PLAYER_ALREADY_MUTED.toString() + .replace("{player}", playerToMute).replace("{channel_color}", chatChannelObj.getColor()) + .replace("{channel_name}", chatChannelObj.getName())); + return; + } + UUID sender = UUID.fromString(senderIdentifier); + VentureChatPlayer senderMCP = playerApiService.getOnlineMineverseChatPlayer(sender); + senderMCP.getPlayer().sendMessage(LocalizedMessage.PLAYER_ALREADY_MUTED.toString() + .replace("{player}", playerToMute).replace("{channel_color}", chatChannelObj.getColor()) + .replace("{channel_name}", chatChannelObj.getName())); + return; + } + } + if(subchannel.equals("Unmute")) { + String identifier = msgin.readUTF(); + if(identifier.equals("Send")) { + String server = msgin.readUTF(); + String senderIdentifier = msgin.readUTF(); + String temporaryDataInstanceUUIDString = msgin.readUTF(); + String playerToUnmute = msgin.readUTF(); + String channelName = msgin.readUTF(); + VentureChatPlayer playerToUnmuteMCP = playerApiService.getOnlineMineverseChatPlayer(playerToUnmute); + if(playerToUnmuteMCP == null) { + out.writeUTF("Unmute"); + out.writeUTF("Offline"); + out.writeUTF(server); + out.writeUTF(temporaryDataInstanceUUIDString); + out.writeUTF(senderIdentifier); + out.writeUTF(playerToUnmute); + sendPluginMessage(stream); + return; + } + if(!ChatChannel.isChannel(channelName)) { + return; + } + ChatChannel chatChannelObj = ChatChannel.getChannel(channelName); + if (!playerToUnmuteMCP.isMuted(chatChannelObj.getName())) { + out.writeUTF("Unmute"); + out.writeUTF("NotMuted"); + out.writeUTF(server); + out.writeUTF(senderIdentifier); + out.writeUTF(playerToUnmute); + out.writeUTF(channelName); + sendPluginMessage(stream); + return; + } + playerToUnmuteMCP.removeMute(chatChannelObj.getName()); + playerToUnmuteMCP.getPlayer().sendMessage(LocalizedMessage.UNMUTE_PLAYER_PLAYER.toString() + .replace("{player}", player.getName()).replace("{channel_color}", chatChannelObj.getColor()) + .replace("{channel_name}", chatChannelObj.getName())); + synchronize(playerToUnmuteMCP, true); + out.writeUTF("Unmute"); + out.writeUTF("Valid"); + out.writeUTF(server); + out.writeUTF(senderIdentifier); + out.writeUTF(playerToUnmute); + out.writeUTF(channelName); + sendPluginMessage(stream); + return; + } + if(identifier.equals("Valid")) { + String senderIdentifier = msgin.readUTF(); + String playerToUnmute = msgin.readUTF(); + String channelName = msgin.readUTF(); + if(!ChatChannel.isChannel(channelName)) { + return; + } + ChatChannel chatChannelObj = ChatChannel.getChannel(channelName); + if(senderIdentifier.equals("VentureChat:Console")) { + Bukkit.getConsoleSender().sendMessage(LocalizedMessage.UNMUTE_PLAYER_SENDER.toString() + .replace("{player}", playerToUnmute) + .replace("{channel_color}", chatChannelObj.getColor()) + .replace("{channel_name}", chatChannelObj.getName())); + } + else { + UUID sender = UUID.fromString(senderIdentifier); + VentureChatPlayer senderMCP = playerApiService.getOnlineMineverseChatPlayer(sender); + senderMCP.getPlayer().sendMessage(LocalizedMessage.UNMUTE_PLAYER_SENDER.toString() + .replace("{player}", playerToUnmute) + .replace("{channel_color}", chatChannelObj.getColor()) + .replace("{channel_name}", chatChannelObj.getName())); + } + return; + } + if(identifier.equals("Offline")) { + String senderIdentifier = msgin.readUTF(); + String playerToUnmute = msgin.readUTF(); + if(senderIdentifier.equals("VentureChat:Console")) { + Bukkit.getConsoleSender().sendMessage(LocalizedMessage.PLAYER_OFFLINE.toString() + .replace("{args}", playerToUnmute)); + return; + } + UUID sender = UUID.fromString(senderIdentifier); + VentureChatPlayer senderMCP = playerApiService.getOnlineMineverseChatPlayer(sender); + senderMCP.getPlayer().sendMessage(LocalizedMessage.PLAYER_OFFLINE.toString() + .replace("{args}", playerToUnmute)); + return; + } + if(identifier.equals("NotMuted")) { + String senderIdentifier = msgin.readUTF(); + String playerToUnmute = msgin.readUTF(); + String channelName = msgin.readUTF(); + if(!ChatChannel.isChannel(channelName)) { + return; + } + ChatChannel chatChannelObj = ChatChannel.getChannel(channelName); + if(senderIdentifier.equals("VentureChat:Console")) { + Bukkit.getConsoleSender().sendMessage(LocalizedMessage.PLAYER_NOT_MUTED.toString() + .replace("{player}", playerToUnmute).replace("{channel_color}", chatChannelObj.getColor()) + .replace("{channel_name}", chatChannelObj.getName())); + return; + } + UUID sender = UUID.fromString(senderIdentifier); + VentureChatPlayer senderMCP = playerApiService.getOnlineMineverseChatPlayer(sender); + senderMCP.getPlayer().sendMessage(LocalizedMessage.PLAYER_NOT_MUTED.toString() + .replace("{player}", playerToUnmute).replace("{channel_color}", chatChannelObj.getColor()) + .replace("{channel_name}", chatChannelObj.getName())); + return; + } + } + if(subchannel.equals("Message")) { + String identifier = msgin.readUTF(); + if(identifier.equals("Send")) { + String server = msgin.readUTF(); + String receiver = msgin.readUTF(); + VentureChatPlayer p = playerApiService.getOnlineMineverseChatPlayer(receiver); + UUID sender = UUID.fromString(msgin.readUTF()); + String sName = msgin.readUTF(); + String send = msgin.readUTF(); + String echo = msgin.readUTF(); + String spy = msgin.readUTF(); + String msg = msgin.readUTF(); + if(!plugin.getConfig().getBoolean("bungeecordmessaging", true) || p == null) { + out.writeUTF("Message"); + out.writeUTF("Offline"); + out.writeUTF(server); + out.writeUTF(receiver); + out.writeUTF(sender.toString()); + sendPluginMessage(stream); + return; + } + if(p.getIgnores().contains(sender)) { + out.writeUTF("Message"); + out.writeUTF("Ignore"); + out.writeUTF(server); + out.writeUTF(receiver); + out.writeUTF(sender.toString()); + sendPluginMessage(stream); + return; + } + if(!p.isMessageToggle()) { + out.writeUTF("Message"); + out.writeUTF("Blocked"); + out.writeUTF(server); + out.writeUTF(receiver); + out.writeUTF(sender.toString()); + sendPluginMessage(stream); + return; + } + p.getPlayer().sendMessage(FormatUtils.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(p.getPlayer(), send.replaceAll("receiver_", ""))) + msg); + if(p.hasNotifications()) { + formatService.playMessageSound(p); + } + if(playerApiService.getMineverseChatPlayer(sender) == null) { + VentureChatPlayer senderMCP = new VentureChatPlayer(sender, sName); + playerApiService.addMineverseChatPlayerToMap(senderMCP); + playerApiService.addNameToMap(senderMCP); + } + p.setReplyPlayer(sender); + out.writeUTF("Message"); + out.writeUTF("Echo"); + out.writeUTF(server); + out.writeUTF(receiver); + out.writeUTF(p.getUuid().toString()); + out.writeUTF(sender.toString()); + out.writeUTF(sName); + out.writeUTF(FormatUtils.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(p.getPlayer(), echo.replaceAll("receiver_", ""))) + msg); + out.writeUTF(FormatUtils.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(p.getPlayer(), spy.replaceAll("receiver_", ""))) + msg); + sendPluginMessage(stream); + return; + } + if(identifier.equals("Offline")) { + String receiver = msgin.readUTF(); + UUID sender = UUID.fromString(msgin.readUTF()); + VentureChatPlayer p = playerApiService.getOnlineMineverseChatPlayer(sender); + p.getPlayer().sendMessage(LocalizedMessage.PLAYER_OFFLINE.toString() + .replace("{args}", receiver)); + p.setReplyPlayer(null); + } + if(identifier.equals("Ignore")) { + String receiver = msgin.readUTF(); + UUID sender = UUID.fromString(msgin.readUTF()); + VentureChatPlayer p = playerApiService.getOnlineMineverseChatPlayer(sender); + p.getPlayer().sendMessage(LocalizedMessage.IGNORING_MESSAGE.toString() + .replace("{player}", receiver)); + } + if(identifier.equals("Blocked")) { + String receiver = msgin.readUTF(); + UUID sender = UUID.fromString(msgin.readUTF()); + VentureChatPlayer p = playerApiService.getOnlineMineverseChatPlayer(sender); + p.getPlayer().sendMessage(LocalizedMessage.BLOCKING_MESSAGE.toString() + .replace("{player}", receiver)); + } + if(identifier.equals("Echo")) { + String receiverName = msgin.readUTF(); + UUID receiverUUID = UUID.fromString(msgin.readUTF()); + UUID senderUUID = UUID.fromString(msgin.readUTF()); + VentureChatPlayer senderMCP = playerApiService.getOnlineMineverseChatPlayer(senderUUID); + String echo = msgin.readUTF(); + if(playerApiService.getMineverseChatPlayer(receiverUUID) == null) { + VentureChatPlayer receiverMCP = new VentureChatPlayer(receiverUUID, receiverName); + playerApiService.addMineverseChatPlayerToMap(receiverMCP); + playerApiService.addNameToMap(receiverMCP); + } + senderMCP.setReplyPlayer(receiverUUID); + senderMCP.getPlayer().sendMessage(echo); + } + if(identifier.equals("Spy")) { + String receiverName = msgin.readUTF(); + String senderName = msgin.readUTF(); + String spy = msgin.readUTF(); + if(!spy.startsWith("VentureChat:NoSpy")) { + for(VentureChatPlayer pl : playerApiService.getOnlineMineverseChatPlayers()) { + if(pl.isSpy() && !pl.getName().equals(senderName) && !pl.getName().equals(receiverName)) { + pl.getPlayer().sendMessage(spy); + } + } + } + } + } + } + catch(Exception e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/mineverse/Aust1n46/chat/database/ProxyPlayerData.java b/src/main/java/venture/Aust1n46/chat/controllers/VentureChatProxyFlatFileController.java similarity index 83% rename from src/main/java/mineverse/Aust1n46/chat/database/ProxyPlayerData.java rename to src/main/java/venture/Aust1n46/chat/controllers/VentureChatProxyFlatFileController.java index b6fb476..3f22e56 100644 --- a/src/main/java/mineverse/Aust1n46/chat/database/ProxyPlayerData.java +++ b/src/main/java/venture/Aust1n46/chat/controllers/VentureChatProxyFlatFileController.java @@ -1,4 +1,4 @@ -package mineverse.Aust1n46.chat.database; +package venture.Aust1n46.chat.controllers; import java.io.File; import java.io.IOException; @@ -11,22 +11,29 @@ import java.util.Set; import java.util.StringTokenizer; import java.util.UUID; -import mineverse.Aust1n46.chat.api.MineverseChatAPI; -import mineverse.Aust1n46.chat.api.SynchronizedMineverseChatPlayer; -import mineverse.Aust1n46.chat.command.mute.MuteContainer; +import com.google.inject.Inject; + import mineverse.Aust1n46.chat.proxy.VentureChatProxySource; -import mineverse.Aust1n46.chat.utilities.UUIDFetcher; import net.md_5.bungee.config.Configuration; import net.md_5.bungee.config.ConfigurationProvider; import net.md_5.bungee.config.YamlConfiguration; +import venture.Aust1n46.chat.controllers.commands.MuteContainer; +import venture.Aust1n46.chat.model.SynchronizedVentureChatPlayer; +import venture.Aust1n46.chat.service.UUIDService; +import venture.Aust1n46.chat.service.VentureChatPlayerApiService; /** * Class for reading and writing proxy player data. * * @author Aust1n46 */ -public class ProxyPlayerData { - public static void loadLegacyBungeePlayerData(File dataFolder, VentureChatProxySource source) { +public class VentureChatProxyFlatFileController { + @Inject + private UUIDService uuidService; + @Inject + private VentureChatPlayerApiService playerApiService; + + public void loadLegacyBungeePlayerData(File dataFolder, VentureChatProxySource source) { File sync = new File(dataFolder, "BungeePlayers.yml"); if (!sync.exists()) { return; @@ -37,7 +44,7 @@ public class ProxyPlayerData { Configuration playerData = ConfigurationProvider.getProvider(YamlConfiguration.class).load(sync); for (String uuidString : playerData.getKeys()) { UUID uuid = UUID.fromString(uuidString); - if (UUIDFetcher.shouldSkipOfflineUUIDProxy(uuid, source)) { + if (uuidService.shouldSkipOfflineUUIDProxy(uuid, source)) { source.sendConsoleMessage("&8[&eVentureChat&8]&c - Skipping Offline UUID: " + uuid); continue; } @@ -62,10 +69,10 @@ public class ProxyPlayerData { } boolean spy = playerData.getBoolean(uuidString + ".spy"); boolean messageToggle = playerData.getBoolean(uuidString + ".messagetoggle"); - MineverseChatAPI.addSynchronizedMineverseChatPlayerToMap(new SynchronizedMineverseChatPlayer(uuid, listening, mutes, ignores, spy, messageToggle)); + playerApiService.addSynchronizedMineverseChatPlayerToMap(new SynchronizedVentureChatPlayer(uuid, listening, mutes, ignores, spy, messageToggle)); } } catch (Exception e) { - MineverseChatAPI.clearProxyPlayerMap(); + playerApiService.clearProxyPlayerMap(); source.sendConsoleMessage("&8[&eVentureChat&8]&c - Error Loading Legacy Player Data!"); source.sendConsoleMessage("&8[&eVentureChat&8]&c - Deleted BungeePlayers.yml file!"); } finally { @@ -73,7 +80,7 @@ public class ProxyPlayerData { } } - public static void loadProxyPlayerData(File dataFolder, VentureChatProxySource source) { + public void loadProxyPlayerData(File dataFolder, VentureChatProxySource source) { try { File playerDataDirectory = dataFolder; if (!playerDataDirectory.exists()) { @@ -87,8 +94,8 @@ public class ProxyPlayerData { } } - private static void readProxyPlayerDataFile(Path path, VentureChatProxySource source) { - SynchronizedMineverseChatPlayer smcp; + private void readProxyPlayerDataFile(Path path, VentureChatProxySource source) { + SynchronizedVentureChatPlayer smcp; File proxyPlayerDataFile = path.toFile(); if (!proxyPlayerDataFile.exists()) { return; @@ -97,7 +104,7 @@ public class ProxyPlayerData { Configuration proxyPlayerDataFileConfiguration = ConfigurationProvider.getProvider(YamlConfiguration.class).load(proxyPlayerDataFile); String uuidString = proxyPlayerDataFile.getName().replace(".yml", ""); UUID uuid = UUID.fromString(uuidString); - if (UUIDFetcher.shouldSkipOfflineUUIDProxy(uuid, source)) { + if (uuidService.shouldSkipOfflineUUIDProxy(uuid, source)) { source.sendConsoleMessage("&8[&eVentureChat&8]&c - Skipping Offline UUID: " + uuid); source.sendConsoleMessage("&8[&eVentureChat&8]&c - File will be skipped and deleted."); proxyPlayerDataFile.delete(); @@ -123,7 +130,7 @@ public class ProxyPlayerData { } boolean spy = proxyPlayerDataFileConfiguration.getBoolean("spy"); boolean messageToggle = proxyPlayerDataFileConfiguration.getBoolean("messagetoggle"); - smcp = new SynchronizedMineverseChatPlayer(uuid, listening, mutes, ignores, spy, messageToggle); + smcp = new SynchronizedVentureChatPlayer(uuid, listening, mutes, ignores, spy, messageToggle); } catch (Exception e) { source.sendConsoleMessage("&8[&eVentureChat&8]&c - Error Loading Data File: " + proxyPlayerDataFile.getName()); source.sendConsoleMessage("&8[&eVentureChat&8]&c - File will be skipped and deleted."); @@ -131,14 +138,14 @@ public class ProxyPlayerData { return; } if (smcp != null) { - MineverseChatAPI.addSynchronizedMineverseChatPlayerToMap(smcp); + playerApiService.addSynchronizedMineverseChatPlayerToMap(smcp); } } - public static void saveProxyPlayerData(File dataFolder, VentureChatProxySource source) { + public void saveProxyPlayerData(File dataFolder, VentureChatProxySource source) { try { - for (SynchronizedMineverseChatPlayer p : MineverseChatAPI.getSynchronizedMineverseChatPlayers()) { - if (UUIDFetcher.shouldSkipOfflineUUIDProxy(p.getUUID(), source)) { + for (SynchronizedVentureChatPlayer p : playerApiService.getSynchronizedMineverseChatPlayers()) { + if (uuidService.shouldSkipOfflineUUIDProxy(p.getUUID(), source)) { return; } File proxyPlayerDataFile = new File(dataFolder.getAbsolutePath(), p.getUUID() + ".yml"); @@ -182,7 +189,7 @@ public class ProxyPlayerData { * @param sectionKey * @return Configuration */ - private static Configuration createSection(Configuration configurationSection, String sectionKey) { + private Configuration createSection(Configuration configurationSection, String sectionKey) { configurationSection.set(sectionKey, null); return configurationSection.getSection(sectionKey); } diff --git a/src/main/java/mineverse/Aust1n46/chat/database/PlayerData.java b/src/main/java/venture/Aust1n46/chat/controllers/VentureChatSpigotFlatFileController.java similarity index 75% rename from src/main/java/mineverse/Aust1n46/chat/database/PlayerData.java rename to src/main/java/venture/Aust1n46/chat/controllers/VentureChatSpigotFlatFileController.java index 560f5fb..1201503 100644 --- a/src/main/java/mineverse/Aust1n46/chat/database/PlayerData.java +++ b/src/main/java/venture/Aust1n46/chat/controllers/VentureChatSpigotFlatFileController.java @@ -1,4 +1,4 @@ -package mineverse.Aust1n46.chat.database; +package venture.Aust1n46.chat.controllers; import java.io.File; import java.io.IOException; @@ -18,36 +18,51 @@ import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; -import mineverse.Aust1n46.chat.MineverseChat; -import mineverse.Aust1n46.chat.api.MineverseChatAPI; -import mineverse.Aust1n46.chat.api.MineverseChatPlayer; -import mineverse.Aust1n46.chat.channel.ChatChannel; -import mineverse.Aust1n46.chat.command.mute.MuteContainer; -import mineverse.Aust1n46.chat.utilities.Format; -import mineverse.Aust1n46.chat.utilities.UUIDFetcher; +import com.google.inject.Inject; +import com.google.inject.Singleton; + +import mineverse.Aust1n46.chat.utilities.FormatUtils; +import venture.Aust1n46.chat.VentureChat; +import venture.Aust1n46.chat.controllers.commands.MuteContainer; +import venture.Aust1n46.chat.model.ChatChannel; +import venture.Aust1n46.chat.model.VentureChatPlayer; +import venture.Aust1n46.chat.service.UUIDService; +import venture.Aust1n46.chat.service.VentureChatPlayerApiService; /** * Class for reading and writing player data. * * @author Aust1n46 */ -public class PlayerData { - private static MineverseChat plugin = MineverseChat.getInstance(); - private static final String PLAYER_DATA_DIRECTORY_PATH = plugin.getDataFolder().getAbsolutePath() + "/PlayerData"; - - public static void loadLegacyPlayerData() { +@Singleton +public class VentureChatSpigotFlatFileController { + @Inject + private VentureChat plugin; + @Inject + private UUIDService uuidService; + @Inject + private VentureChatPlayerApiService ventureChatApi; + + private String playerDataDirectoryPath; + + @Inject + public void postConstruct() { + playerDataDirectoryPath = plugin.getDataFolder().getAbsolutePath() + "/PlayerData"; + } + + public void loadLegacyPlayerData() { File legacyPlayerDataFile = new File(plugin.getDataFolder().getAbsolutePath(), "Players.yml"); if (!legacyPlayerDataFile.isFile()) { return; } try { - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&c - Detected Legacy Player Data!")); - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&c - Converting to new structure and deleting old Players.yml file!")); + Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&c - Detected Legacy Player Data!")); + Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&c - Converting to new structure and deleting old Players.yml file!")); FileConfiguration playerData = YamlConfiguration.loadConfiguration(legacyPlayerDataFile); for (String uuidString : playerData.getConfigurationSection("players").getKeys(false)) { UUID uuid = UUID.fromString(uuidString); - if (UUIDFetcher.shouldSkipOfflineUUID(uuid)) { - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&c - Skipping Offline UUID: " + uuid)); + if (uuidService.shouldSkipOfflineUUID(uuid)) { + Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&c - Skipping Offline UUID: " + uuid)); continue; } String name = playerData.getConfigurationSection("players." + uuid).getString("name"); @@ -94,28 +109,28 @@ public class PlayerData { boolean rangedSpy = playerData.getConfigurationSection("players." + uuidString).getBoolean("rangedspy", false); boolean messageToggle = playerData.getConfigurationSection("players." + uuidString).getBoolean("messagetoggle", true); boolean bungeeToggle = playerData.getConfigurationSection("players." + uuidString).getBoolean("bungeetoggle", true); - MineverseChatPlayer mcp = new MineverseChatPlayer(uuid, name, currentChannel, ignores, listening, mutes, blockedCommands, host, party, filter, notifications, jsonFormat, spy, commandSpy, rangedSpy, messageToggle, bungeeToggle); + VentureChatPlayer mcp = new VentureChatPlayer(uuid, name, currentChannel, ignores, listening, mutes, blockedCommands, host, party, filter, notifications, jsonFormat, spy, commandSpy, rangedSpy, messageToggle, bungeeToggle); mcp.setModified(true); - MineverseChatAPI.addMineverseChatPlayerToMap(mcp); - MineverseChatAPI.addNameToMap(mcp); + ventureChatApi.addMineverseChatPlayerToMap(mcp); + ventureChatApi.addNameToMap(mcp); } } catch (Exception e) { - MineverseChatAPI.clearMineverseChatPlayerMap(); - MineverseChatAPI.clearNameMap(); - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&c - Error Loading Legacy Player Data!")); - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&c - Deleted Players.yml file!")); + ventureChatApi.clearMineverseChatPlayerMap(); + ventureChatApi.clearNameMap(); + Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&c - Error Loading Legacy Player Data!")); + Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&c - Deleted Players.yml file!")); } finally { legacyPlayerDataFile.delete(); } } - public static void loadPlayerData() { + public void loadPlayerData() { try { - File playerDataDirectory = new File(PLAYER_DATA_DIRECTORY_PATH); + File playerDataDirectory = new File(playerDataDirectoryPath); if (!playerDataDirectory.exists()) { playerDataDirectory.mkdirs(); } - Files.walk(Paths.get(PLAYER_DATA_DIRECTORY_PATH)) + Files.walk(Paths.get(playerDataDirectoryPath)) .filter(Files::isRegularFile) .forEach((path) -> readPlayerDataFile(path)); } catch (IOException e) { @@ -128,8 +143,8 @@ public class PlayerData { * * @param path */ - private static void readPlayerDataFile(Path path) { - MineverseChatPlayer mcp; + private void readPlayerDataFile(Path path) { + VentureChatPlayer mcp; File playerDataFile = path.toFile(); if (!playerDataFile.exists()) { return; @@ -138,9 +153,9 @@ public class PlayerData { FileConfiguration playerDataFileYamlConfiguration = YamlConfiguration.loadConfiguration(playerDataFile); String uuidString = playerDataFile.getName().replace(".yml", ""); UUID uuid = UUID.fromString(uuidString); - if (UUIDFetcher.shouldSkipOfflineUUID(uuid)) { - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&c - Skipping Offline UUID: " + uuid)); - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&c - File will be skipped and deleted.")); + if (uuidService.shouldSkipOfflineUUID(uuid)) { + Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&c - Skipping Offline UUID: " + uuid)); + Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&c - File will be skipped and deleted.")); playerDataFile.delete(); return; } @@ -182,25 +197,25 @@ public class PlayerData { boolean rangedSpy = playerDataFileYamlConfiguration.getBoolean("rangedspy", false); boolean messageToggle = playerDataFileYamlConfiguration.getBoolean("messagetoggle", true); boolean bungeeToggle = playerDataFileYamlConfiguration.getBoolean("bungeetoggle", true); - mcp = new MineverseChatPlayer(uuid, name, currentChannel, ignores, listening, mutes, blockedCommands, host, party, filter, notifications, jsonFormat, spy, commandSpy, rangedSpy, messageToggle, bungeeToggle); + mcp = new VentureChatPlayer(uuid, name, currentChannel, ignores, listening, mutes, blockedCommands, host, party, filter, notifications, jsonFormat, spy, commandSpy, rangedSpy, messageToggle, bungeeToggle); } catch (Exception e) { - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&c - Error Loading Data File: " + playerDataFile.getName())); - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&c - File will be skipped and deleted.")); + Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&c - Error Loading Data File: " + playerDataFile.getName())); + Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&c - File will be skipped and deleted.")); playerDataFile.delete(); return; } if (mcp != null) { - MineverseChatAPI.addMineverseChatPlayerToMap(mcp); - MineverseChatAPI.addNameToMap(mcp); + ventureChatApi.addMineverseChatPlayerToMap(mcp); + ventureChatApi.addNameToMap(mcp); } } - public static void savePlayerData(MineverseChatPlayer mcp) { - if (mcp == null || UUIDFetcher.shouldSkipOfflineUUID(mcp.getUUID()) || (!mcp.isOnline() && !mcp.wasModified())) { + public void savePlayerData(VentureChatPlayer mcp) { + if (mcp == null || uuidService.shouldSkipOfflineUUID(mcp.getUuid()) || (!mcp.isOnline() && !mcp.wasModified())) { return; } try { - File playerDataFile = new File(PLAYER_DATA_DIRECTORY_PATH, mcp.getUUID() + ".yml"); + File playerDataFile = new File(playerDataDirectoryPath, mcp.getUuid() + ".yml"); FileConfiguration playerDataFileYamlConfiguration = YamlConfiguration.loadConfiguration(playerDataFile); if (!playerDataFile.exists()) { playerDataFileYamlConfiguration.save(playerDataFile); @@ -237,13 +252,13 @@ public class PlayerData { playerDataFileYamlConfiguration.set("blockedcommands", blockedCommands); playerDataFileYamlConfiguration.set("host", mcp.isHost()); playerDataFileYamlConfiguration.set("party", mcp.hasParty() ? mcp.getParty().toString() : ""); - playerDataFileYamlConfiguration.set("filter", mcp.hasFilter()); + playerDataFileYamlConfiguration.set("filter", mcp.isFilter()); playerDataFileYamlConfiguration.set("notifications", mcp.hasNotifications()); playerDataFileYamlConfiguration.set("spy", mcp.isSpy()); playerDataFileYamlConfiguration.set("commandspy", mcp.hasCommandSpy()); playerDataFileYamlConfiguration.set("rangedspy", mcp.getRangedSpy()); - playerDataFileYamlConfiguration.set("messagetoggle", mcp.getMessageToggle()); - playerDataFileYamlConfiguration.set("bungeetoggle", mcp.getBungeeToggle()); + playerDataFileYamlConfiguration.set("messagetoggle", mcp.isMessageToggle()); + playerDataFileYamlConfiguration.set("bungeetoggle", mcp.isBungeeToggle()); Calendar currentDate = Calendar.getInstance(); SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MMM/dd HH:mm:ss"); String dateNow = formatter.format(currentDate.getTime()); @@ -256,8 +271,8 @@ public class PlayerData { } } - public static void savePlayerData() { - for (MineverseChatPlayer p : MineverseChatAPI.getMineverseChatPlayers()) { + public void savePlayerData() { + for (VentureChatPlayer p : ventureChatApi.getMineverseChatPlayers()) { savePlayerData(p); } } diff --git a/src/main/java/mineverse/Aust1n46/chat/command/chat/Broadcast.java b/src/main/java/venture/Aust1n46/chat/controllers/commands/Broadcast.java similarity index 65% rename from src/main/java/mineverse/Aust1n46/chat/command/chat/Broadcast.java rename to src/main/java/venture/Aust1n46/chat/controllers/commands/Broadcast.java index b4ff692..3bddc11 100644 --- a/src/main/java/mineverse/Aust1n46/chat/command/chat/Broadcast.java +++ b/src/main/java/venture/Aust1n46/chat/controllers/commands/Broadcast.java @@ -1,31 +1,37 @@ -package mineverse.Aust1n46.chat.command.chat; +package venture.Aust1n46.chat.controllers.commands; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.configuration.ConfigurationSection; -import mineverse.Aust1n46.chat.MineverseChat; -import mineverse.Aust1n46.chat.command.VentureCommand; +import com.google.inject.Inject; + import mineverse.Aust1n46.chat.localization.LocalizedMessage; -import mineverse.Aust1n46.chat.utilities.Format; +import mineverse.Aust1n46.chat.utilities.FormatUtils; +import venture.Aust1n46.chat.VentureChat; +import venture.Aust1n46.chat.model.VentureCommand; +import venture.Aust1n46.chat.service.VentureChatFormatService; public class Broadcast implements VentureCommand { - private MineverseChat plugin = MineverseChat.getInstance(); + @Inject + private VentureChat plugin; + @Inject + private VentureChatFormatService formatService; @Override public void execute(CommandSender sender, String command, String[] args) { ConfigurationSection bs = plugin.getConfig().getConfigurationSection("broadcast"); String broadcastColor = bs.getString("color", "white"); String broadcastPermissions = bs.getString("permissions", "None"); - String broadcastDisplayTag = Format.FormatStringAll(bs.getString("displaytag", "[Broadcast]")); + String broadcastDisplayTag = FormatUtils.FormatStringAll(bs.getString("displaytag", "[Broadcast]")); if (broadcastPermissions.equalsIgnoreCase("None") || sender.hasPermission(broadcastPermissions)) { if (args.length > 0) { String bc = ""; for (int x = 0; x < args.length; x++) { if (args[x].length() > 0) bc += args[x] + " "; } - bc = Format.FormatStringAll(bc); - Format.broadcastToServer(broadcastDisplayTag + ChatColor.valueOf(broadcastColor.toUpperCase()) + " " + bc); + bc = FormatUtils.FormatStringAll(bc); + formatService.broadcastToServer(broadcastDisplayTag + ChatColor.valueOf(broadcastColor.toUpperCase()) + " " + bc); return; } else { sender.sendMessage(LocalizedMessage.COMMAND_INVALID_ARGUMENTS.toString() diff --git a/src/main/java/mineverse/Aust1n46/chat/command/chat/BungeeToggle.java b/src/main/java/venture/Aust1n46/chat/controllers/commands/BungeeToggle.java similarity index 58% rename from src/main/java/mineverse/Aust1n46/chat/command/chat/BungeeToggle.java rename to src/main/java/venture/Aust1n46/chat/controllers/commands/BungeeToggle.java index 9469516..f19e819 100644 --- a/src/main/java/mineverse/Aust1n46/chat/command/chat/BungeeToggle.java +++ b/src/main/java/venture/Aust1n46/chat/controllers/commands/BungeeToggle.java @@ -1,16 +1,22 @@ -package mineverse.Aust1n46.chat.command.chat; +package venture.Aust1n46.chat.controllers.commands; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import mineverse.Aust1n46.chat.MineverseChat; -import mineverse.Aust1n46.chat.api.MineverseChatAPI; -import mineverse.Aust1n46.chat.api.MineverseChatPlayer; -import mineverse.Aust1n46.chat.command.VentureCommand; +import com.google.inject.Inject; + import mineverse.Aust1n46.chat.localization.LocalizedMessage; +import venture.Aust1n46.chat.controllers.PluginMessageController; +import venture.Aust1n46.chat.model.VentureChatPlayer; +import venture.Aust1n46.chat.model.VentureCommand; +import venture.Aust1n46.chat.service.VentureChatPlayerApiService; public class BungeeToggle implements VentureCommand { + @Inject + private PluginMessageController pluginMessageController; + @Inject + private VentureChatPlayerApiService playerApiService; @Override public void execute(CommandSender sender, String command, String[] args) { @@ -18,17 +24,17 @@ public class BungeeToggle implements VentureCommand { Bukkit.getServer().getConsoleSender().sendMessage(LocalizedMessage.COMMAND_MUST_BE_RUN_BY_PLAYER.toString()); return; } - MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer((Player) sender); + VentureChatPlayer mcp = playerApiService.getOnlineMineverseChatPlayer((Player) sender); if (mcp.getPlayer().hasPermission("venturechat.bungeetoggle")) { - if (!mcp.getBungeeToggle()) { + if (!mcp.isBungeeToggle()) { mcp.setBungeeToggle(true); mcp.getPlayer().sendMessage(LocalizedMessage.BUNGEE_TOGGLE_ON.toString()); - MineverseChat.synchronize(mcp, true); + pluginMessageController.synchronize(mcp, true); return; } mcp.setBungeeToggle(false); mcp.getPlayer().sendMessage(LocalizedMessage.BUNGEE_TOGGLE_OFF.toString()); - MineverseChat.synchronize(mcp, true); + pluginMessageController.synchronize(mcp, true); return; } mcp.getPlayer().sendMessage(LocalizedMessage.COMMAND_NO_PERMISSION.toString()); diff --git a/src/main/java/venture/Aust1n46/chat/controllers/commands/Channel.java b/src/main/java/venture/Aust1n46/chat/controllers/commands/Channel.java new file mode 100644 index 0000000..48cac20 --- /dev/null +++ b/src/main/java/venture/Aust1n46/chat/controllers/commands/Channel.java @@ -0,0 +1,83 @@ +package venture.Aust1n46.chat.controllers.commands; + +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.google.inject.Inject; +import com.google.inject.Singleton; + +import mineverse.Aust1n46.chat.api.events.ChannelJoinEvent; +import mineverse.Aust1n46.chat.localization.LocalizedMessage; +import venture.Aust1n46.chat.controllers.PluginMessageController; +import venture.Aust1n46.chat.model.ChatChannel; +import venture.Aust1n46.chat.model.VentureChatPlayer; +import venture.Aust1n46.chat.model.VentureCommand; +import venture.Aust1n46.chat.service.VentureChatPlayerApiService; + +@Singleton +public class Channel implements VentureCommand { + @Inject + private PluginMessageController pluginMessageController; + @Inject + private VentureChatPlayerApiService playerApiService; + + @Override + public void execute(CommandSender sender, String command, String[] args) { + if (!(sender instanceof Player)) { + Bukkit.getServer().getConsoleSender().sendMessage(LocalizedMessage.COMMAND_MUST_BE_RUN_BY_PLAYER.toString()); + return; + } + VentureChatPlayer mcp = playerApiService.getOnlineMineverseChatPlayer((Player) sender); + if (args.length > 0) { + if (!ChatChannel.isChannel(args[0])) { + mcp.getPlayer().sendMessage(LocalizedMessage.INVALID_CHANNEL.toString() + .replace("{args}", args[0])); + return; + } + ChatChannel channel = ChatChannel.getChannel(args[0]); + ChannelJoinEvent channelJoinEvent = new ChannelJoinEvent(mcp.getPlayer(), channel, LocalizedMessage.SET_CHANNEL.toString() + .replace("{channel_color}", channel.getColor() + "") + .replace("{channel_name}", channel.getName())); + Bukkit.getServer().getPluginManager().callEvent(channelJoinEvent); + handleChannelJoinEvent(channelJoinEvent); + return; + } + mcp.getPlayer().sendMessage(LocalizedMessage.COMMAND_INVALID_ARGUMENTS.toString() + .replace("{command}", "/channel") + .replace("{args}", "[channel]")); + return; + } + + private void handleChannelJoinEvent(final ChannelJoinEvent event) { + if (event.isCancelled()) + return; + ChatChannel channel = event.getChannel(); + VentureChatPlayer mcp = playerApiService.getOnlineMineverseChatPlayer(event.getPlayer()); + if (channel.hasPermission()) { + if (!mcp.getPlayer().hasPermission(channel.getPermission())) { + mcp.removeListening(channel.getName()); + mcp.getPlayer().sendMessage(LocalizedMessage.CHANNEL_NO_PERMISSION.toString()); + return; + } + } + if (mcp.hasConversation()) { + for (VentureChatPlayer p : playerApiService.getOnlineMineverseChatPlayers()) { + if (p.isSpy()) { + p.getPlayer().sendMessage(LocalizedMessage.EXIT_PRIVATE_CONVERSATION_SPY.toString() + .replace("{player_sender}", mcp.getName()) + .replace("{player_receiver}", playerApiService.getMineverseChatPlayer(mcp.getConversation()).getName())); + } + } + mcp.getPlayer().sendMessage(LocalizedMessage.EXIT_PRIVATE_CONVERSATION.toString() + .replace("{player_receiver}", playerApiService.getMineverseChatPlayer(mcp.getConversation()).getName())); + mcp.setConversation(null); + } + mcp.addListening(channel.getName()); + mcp.setCurrentChannel(channel); + mcp.getPlayer().sendMessage(event.getMessage()); + if (channel.getBungee()) { + pluginMessageController.synchronize(mcp, true); + } + } +} diff --git a/src/main/java/mineverse/Aust1n46/chat/command/chat/Channelinfo.java b/src/main/java/venture/Aust1n46/chat/controllers/commands/Channelinfo.java similarity index 90% rename from src/main/java/mineverse/Aust1n46/chat/command/chat/Channelinfo.java rename to src/main/java/venture/Aust1n46/chat/controllers/commands/Channelinfo.java index 9db5440..70183c1 100644 --- a/src/main/java/mineverse/Aust1n46/chat/command/chat/Channelinfo.java +++ b/src/main/java/venture/Aust1n46/chat/controllers/commands/Channelinfo.java @@ -1,11 +1,11 @@ -package mineverse.Aust1n46.chat.command.chat; +package venture.Aust1n46.chat.controllers.commands; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; -import mineverse.Aust1n46.chat.channel.ChatChannel; -import mineverse.Aust1n46.chat.command.VentureCommand; -import mineverse.Aust1n46.chat.utilities.Format; +import mineverse.Aust1n46.chat.utilities.FormatUtils; +import venture.Aust1n46.chat.model.ChatChannel; +import venture.Aust1n46.chat.model.VentureCommand; public class Channelinfo implements VentureCommand { @@ -30,7 +30,7 @@ public class Channelinfo implements VentureCommand { sender.sendMessage(ChatColor.GOLD + "Channel: " + chname.getColor() + chname.getName()); sender.sendMessage(ChatColor.GOLD + "Alias: " + chname.getColor() + chname.getAlias()); sender.sendMessage(ChatColor.GOLD + "Color: " + chname.getColor() + chname.getColorRaw()); - sender.sendMessage(ChatColor.GOLD + "ChatColor: " + (chname.getChatColor().equalsIgnoreCase("None") ? Format.DEFAULT_COLOR_CODE : chname.getChatColor()) + chname.getChatColorRaw()); + sender.sendMessage(ChatColor.GOLD + "ChatColor: " + (chname.getChatColor().equalsIgnoreCase("None") ? FormatUtils.DEFAULT_COLOR_CODE : chname.getChatColor()) + chname.getChatColorRaw()); if (chname.hasPermission()) { sender.sendMessage(ChatColor.GOLD + "Permission: " + chname.getColor() + chname.getPermission()); } else { diff --git a/src/main/java/mineverse/Aust1n46/chat/command/chat/Chatinfo.java b/src/main/java/venture/Aust1n46/chat/controllers/commands/Chatinfo.java similarity index 88% rename from src/main/java/mineverse/Aust1n46/chat/command/chat/Chatinfo.java rename to src/main/java/venture/Aust1n46/chat/controllers/commands/Chatinfo.java index 481f4e3..8c618bd 100644 --- a/src/main/java/mineverse/Aust1n46/chat/command/chat/Chatinfo.java +++ b/src/main/java/venture/Aust1n46/chat/controllers/commands/Chatinfo.java @@ -1,17 +1,20 @@ -package mineverse.Aust1n46.chat.command.chat; +package venture.Aust1n46.chat.controllers.commands; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import mineverse.Aust1n46.chat.api.MineverseChatAPI; -import mineverse.Aust1n46.chat.api.MineverseChatPlayer; -import mineverse.Aust1n46.chat.channel.ChatChannel; -import mineverse.Aust1n46.chat.command.VentureCommand; -import mineverse.Aust1n46.chat.command.mute.MuteContainer; +import com.google.inject.Inject; + +import venture.Aust1n46.chat.model.ChatChannel; +import venture.Aust1n46.chat.model.VentureChatPlayer; +import venture.Aust1n46.chat.model.VentureCommand; +import venture.Aust1n46.chat.service.VentureChatPlayerApiService; public class Chatinfo implements VentureCommand { + @Inject + private VentureChatPlayerApiService playerApiService; @Override public void execute(CommandSender sender, String command, String[] args) { @@ -21,7 +24,7 @@ public class Chatinfo implements VentureCommand { Bukkit.getServer().getConsoleSender().sendMessage(ChatColor.RED + "This command must be run by a player; use /ci [name]"); return; } - MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer((Player) sender); + VentureChatPlayer mcp = playerApiService.getOnlineMineverseChatPlayer((Player) sender); String listen = ""; String mute = ""; String blockedcommands = ""; @@ -50,7 +53,7 @@ public class Chatinfo implements VentureCommand { mcp.getPlayer().sendMessage(ChatColor.GOLD + "Blocked Commands: " + ChatColor.RED + "N/A"); } if (mcp.hasConversation()) { - mcp.getPlayer().sendMessage(ChatColor.GOLD + "Private conversation: " + ChatColor.GREEN + MineverseChatAPI.getMineverseChatPlayer(mcp.getConversation()).getName()); + mcp.getPlayer().sendMessage(ChatColor.GOLD + "Private conversation: " + ChatColor.GREEN + playerApiService.getMineverseChatPlayer(mcp.getConversation()).getName()); } else { mcp.getPlayer().sendMessage(ChatColor.GOLD + "Private conversation: " + ChatColor.RED + "N/A"); } @@ -64,7 +67,7 @@ public class Chatinfo implements VentureCommand { } else { mcp.getPlayer().sendMessage(ChatColor.GOLD + "Command spy: " + ChatColor.RED + "false"); } - if (mcp.hasFilter()) { + if (mcp.isFilter()) { mcp.getPlayer().sendMessage(ChatColor.GOLD + "Filter: " + ChatColor.GREEN + "true"); } else { mcp.getPlayer().sendMessage(ChatColor.GOLD + "Filter: " + ChatColor.RED + "false"); @@ -76,7 +79,7 @@ public class Chatinfo implements VentureCommand { String listen = ""; String mute = ""; String blockedcommands = ""; - MineverseChatPlayer p = MineverseChatAPI.getMineverseChatPlayer(args[0]); + VentureChatPlayer p = playerApiService.getMineverseChatPlayer(args[0]); if (p == null) { sender.sendMessage(ChatColor.RED + "Player: " + ChatColor.GOLD + args[0] + ChatColor.RED + " is not online."); return; @@ -105,7 +108,7 @@ public class Chatinfo implements VentureCommand { sender.sendMessage(ChatColor.GOLD + "Blocked Commands: " + ChatColor.RED + "N/A"); } if (p.hasConversation()) { - sender.sendMessage(ChatColor.GOLD + "Private conversation: " + ChatColor.GREEN + MineverseChatAPI.getMineverseChatPlayer(p.getConversation()).getName()); + sender.sendMessage(ChatColor.GOLD + "Private conversation: " + ChatColor.GREEN + playerApiService.getMineverseChatPlayer(p.getConversation()).getName()); } else { sender.sendMessage(ChatColor.GOLD + "Private conversation: " + ChatColor.RED + "N/A"); } @@ -119,7 +122,7 @@ public class Chatinfo implements VentureCommand { } else { sender.sendMessage(ChatColor.GOLD + "Command spy: " + ChatColor.RED + "false"); } - if (p.hasFilter()) { + if (p.isFilter()) { sender.sendMessage(ChatColor.GOLD + "Filter: " + ChatColor.GREEN + "true"); } else { sender.sendMessage(ChatColor.GOLD + "Filter: " + ChatColor.RED + "false"); diff --git a/src/main/java/venture/Aust1n46/chat/controllers/commands/Chatreload.java b/src/main/java/venture/Aust1n46/chat/controllers/commands/Chatreload.java new file mode 100644 index 0000000..52735e8 --- /dev/null +++ b/src/main/java/venture/Aust1n46/chat/controllers/commands/Chatreload.java @@ -0,0 +1,67 @@ +package venture.Aust1n46.chat.controllers.commands; + +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import com.google.inject.Inject; + +import mineverse.Aust1n46.chat.localization.LocalizedMessage; +import mineverse.Aust1n46.chat.utilities.FormatUtils; +import venture.Aust1n46.chat.VentureChat; +import venture.Aust1n46.chat.controllers.VentureChatSpigotFlatFileController; +import venture.Aust1n46.chat.model.VentureChatPlayer; +import venture.Aust1n46.chat.model.VentureCommand; +import venture.Aust1n46.chat.service.VentureChatPlayerApiService; + +public class Chatreload implements VentureCommand { + @Inject + private VentureChat plugin; + @Inject + private VentureChatSpigotFlatFileController spigotFlatFileController; + @Inject + private VentureChatPlayerApiService playerApiService; + + @Override + public void execute(CommandSender sender, String command, String[] args) { + if(sender.hasPermission("venturechat.reload")) { + spigotFlatFileController.savePlayerData(); + playerApiService.clearMineverseChatPlayerMap(); + playerApiService.clearNameMap(); + playerApiService.clearOnlineMineverseChatPlayerMap(); + + plugin.reloadConfig(); + plugin.initializeConfigReaders(); + + spigotFlatFileController.loadLegacyPlayerData(); + spigotFlatFileController.loadPlayerData(); + for(Player p : plugin.getServer().getOnlinePlayers()) { + VentureChatPlayer mcp = playerApiService.getMineverseChatPlayer(p); + if(mcp == null) { + Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&c - Could not find player data post reload for currently online player: " + p.getName())); + Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&c - There could be an issue with your player data saving.")); + String name = p.getName(); + UUID uuid = p.getUniqueId(); + mcp = new VentureChatPlayer(uuid, name); + } + mcp.setOnline(true); + mcp.setHasPlayed(false); + mcp.setJsonFormat(); + playerApiService.addMineverseChatOnlinePlayerToMap(mcp); + playerApiService.addNameToMap(mcp); + } + + Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&e - Config reloaded")); + for(VentureChatPlayer player : playerApiService.getOnlineMineverseChatPlayers()) { + if(player.getPlayer().hasPermission("venturechat.reload")) { + player.getPlayer().sendMessage(LocalizedMessage.CONFIG_RELOADED.toString()); + } + } + return; + } + sender.sendMessage(LocalizedMessage.COMMAND_NO_PERMISSION.toString()); + return; + } +} diff --git a/src/main/java/mineverse/Aust1n46/chat/command/chat/Chlist.java b/src/main/java/venture/Aust1n46/chat/controllers/commands/Chlist.java similarity index 88% rename from src/main/java/mineverse/Aust1n46/chat/command/chat/Chlist.java rename to src/main/java/venture/Aust1n46/chat/controllers/commands/Chlist.java index 09cbd01..b4055a5 100644 --- a/src/main/java/mineverse/Aust1n46/chat/command/chat/Chlist.java +++ b/src/main/java/venture/Aust1n46/chat/controllers/commands/Chlist.java @@ -1,10 +1,10 @@ -package mineverse.Aust1n46.chat.command.chat; +package venture.Aust1n46.chat.controllers.commands; import org.bukkit.command.CommandSender; -import mineverse.Aust1n46.chat.channel.ChatChannel; -import mineverse.Aust1n46.chat.command.VentureCommand; import mineverse.Aust1n46.chat.localization.LocalizedMessage; +import venture.Aust1n46.chat.model.ChatChannel; +import venture.Aust1n46.chat.model.VentureCommand; public class Chlist implements VentureCommand { diff --git a/src/main/java/mineverse/Aust1n46/chat/command/chat/Chwho.java b/src/main/java/venture/Aust1n46/chat/controllers/commands/Chwho.java similarity index 90% rename from src/main/java/mineverse/Aust1n46/chat/command/chat/Chwho.java rename to src/main/java/venture/Aust1n46/chat/controllers/commands/Chwho.java index e8d1183..87c9e23 100644 --- a/src/main/java/mineverse/Aust1n46/chat/command/chat/Chwho.java +++ b/src/main/java/venture/Aust1n46/chat/controllers/commands/Chwho.java @@ -1,6 +1,6 @@ -package mineverse.Aust1n46.chat.command.chat; +package venture.Aust1n46.chat.controllers.commands; -import static mineverse.Aust1n46.chat.MineverseChat.LINE_LENGTH; +import static venture.Aust1n46.chat.VentureChat.LINE_LENGTH; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; @@ -11,19 +11,26 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.plugin.PluginManager; +import com.google.inject.Inject; import com.massivecraft.factions.entity.MPlayer; import com.palmergames.bukkit.towny.TownyUniverse; import com.palmergames.bukkit.towny.object.Resident; -import mineverse.Aust1n46.chat.MineverseChat; -import mineverse.Aust1n46.chat.api.MineverseChatAPI; -import mineverse.Aust1n46.chat.api.MineverseChatPlayer; -import mineverse.Aust1n46.chat.channel.ChatChannel; -import mineverse.Aust1n46.chat.command.VentureCommand; import mineverse.Aust1n46.chat.localization.LocalizedMessage; +import venture.Aust1n46.chat.VentureChat; +import venture.Aust1n46.chat.controllers.PluginMessageController; +import venture.Aust1n46.chat.model.ChatChannel; +import venture.Aust1n46.chat.model.VentureChatPlayer; +import venture.Aust1n46.chat.model.VentureCommand; +import venture.Aust1n46.chat.service.VentureChatPlayerApiService; public class Chwho implements VentureCommand { - private MineverseChat plugin = MineverseChat.getInstance(); + @Inject + private VentureChat plugin; + @Inject + private PluginMessageController pluginMessageController; + @Inject + private VentureChatPlayerApiService playerApiService; @Override public void execute(CommandSender sender, String command, String[] args) { @@ -34,7 +41,7 @@ public class Chwho implements VentureCommand { if (channel != null) { if (channel.hasPermission()) { if (!sender.hasPermission(channel.getPermission())) { - MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer(((Player) sender)); + VentureChatPlayer mcp = playerApiService.getOnlineMineverseChatPlayer(((Player) sender)); mcp.removeListening(channel.getName()); mcp.getPlayer().sendMessage(LocalizedMessage.CHANNEL_NO_PERMISSION_VIEW.toString()); return; @@ -42,15 +49,15 @@ public class Chwho implements VentureCommand { } if (channel.getBungee() && sender instanceof Player) { - MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer((Player) sender); + VentureChatPlayer mcp = playerApiService.getOnlineMineverseChatPlayer((Player) sender); ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream(); DataOutputStream out = new DataOutputStream(byteOutStream); try { out.writeUTF("Chwho"); out.writeUTF("Get"); - out.writeUTF(mcp.getUUID().toString()); + out.writeUTF(mcp.getUuid().toString()); out.writeUTF(channel.getName()); - mcp.getPlayer().sendPluginMessage(plugin, MineverseChat.PLUGIN_MESSAGING_CHANNEL, byteOutStream.toByteArray()); + pluginMessageController.sendPluginMessage(byteOutStream); out.close(); } catch (Exception e) { e.printStackTrace(); @@ -60,7 +67,7 @@ public class Chwho implements VentureCommand { PluginManager pluginManager = plugin.getServer().getPluginManager(); long linecount = LINE_LENGTH; - for (MineverseChatPlayer p : MineverseChatAPI.getOnlineMineverseChatPlayers()) { + for (VentureChatPlayer p : playerApiService.getOnlineMineverseChatPlayers()) { if (p.getListening().contains(channel.getName())) { if (sender instanceof Player) { if (!((Player) sender).canSee(p.getPlayer())) { diff --git a/src/main/java/mineverse/Aust1n46/chat/command/chat/Clearchat.java b/src/main/java/venture/Aust1n46/chat/controllers/commands/Clearchat.java similarity index 69% rename from src/main/java/mineverse/Aust1n46/chat/command/chat/Clearchat.java rename to src/main/java/venture/Aust1n46/chat/controllers/commands/Clearchat.java index ef0f2e3..f948cac 100644 --- a/src/main/java/mineverse/Aust1n46/chat/command/chat/Clearchat.java +++ b/src/main/java/venture/Aust1n46/chat/controllers/commands/Clearchat.java @@ -1,19 +1,23 @@ -package mineverse.Aust1n46.chat.command.chat; +package venture.Aust1n46.chat.controllers.commands; import org.bukkit.command.CommandSender; -import mineverse.Aust1n46.chat.api.MineverseChatAPI; -import mineverse.Aust1n46.chat.api.MineverseChatPlayer; -import mineverse.Aust1n46.chat.command.VentureCommand; +import com.google.inject.Inject; + import mineverse.Aust1n46.chat.localization.InternalMessage; import mineverse.Aust1n46.chat.localization.LocalizedMessage; +import venture.Aust1n46.chat.model.VentureChatPlayer; +import venture.Aust1n46.chat.model.VentureCommand; +import venture.Aust1n46.chat.service.VentureChatPlayerApiService; public class Clearchat implements VentureCommand { + @Inject + private VentureChatPlayerApiService ventureChatApi; @Override public void execute(CommandSender sender, String command, String[] args) { if (sender.hasPermission("venturechat.clearchat")) { - for (MineverseChatPlayer player : MineverseChatAPI.getOnlineMineverseChatPlayers()) { + for (VentureChatPlayer player : ventureChatApi.getOnlineMineverseChatPlayers()) { if (!player.getPlayer().hasPermission("venturechat.clearchat.bypass")) { for (int a = 1; a <= 20; a++) player.getPlayer().sendMessage(InternalMessage.EMPTY_STRING.toString()); diff --git a/src/main/java/mineverse/Aust1n46/chat/command/chat/Commandblock.java b/src/main/java/venture/Aust1n46/chat/controllers/commands/Commandblock.java similarity index 82% rename from src/main/java/mineverse/Aust1n46/chat/command/chat/Commandblock.java rename to src/main/java/venture/Aust1n46/chat/controllers/commands/Commandblock.java index a90d38b..359fb7e 100644 --- a/src/main/java/mineverse/Aust1n46/chat/command/chat/Commandblock.java +++ b/src/main/java/venture/Aust1n46/chat/controllers/commands/Commandblock.java @@ -1,23 +1,28 @@ -package mineverse.Aust1n46.chat.command.chat; +package venture.Aust1n46.chat.controllers.commands; import java.util.List; import org.bukkit.command.CommandSender; -import mineverse.Aust1n46.chat.MineverseChat; -import mineverse.Aust1n46.chat.api.MineverseChatAPI; -import mineverse.Aust1n46.chat.api.MineverseChatPlayer; -import mineverse.Aust1n46.chat.command.VentureCommand; +import com.google.inject.Inject; + import mineverse.Aust1n46.chat.localization.LocalizedMessage; +import venture.Aust1n46.chat.VentureChat; +import venture.Aust1n46.chat.model.VentureChatPlayer; +import venture.Aust1n46.chat.model.VentureCommand; +import venture.Aust1n46.chat.service.VentureChatPlayerApiService; public class Commandblock implements VentureCommand { - private MineverseChat plugin = MineverseChat.getInstance(); + @Inject + private VentureChat plugin; + @Inject + private VentureChatPlayerApiService playerApiService; @Override public void execute(CommandSender sender, String command, String[] args) { if (sender.hasPermission("venturechat.commandblock")) { if (args.length > 1) { - MineverseChatPlayer player = MineverseChatAPI.getOnlineMineverseChatPlayer(args[0]); + VentureChatPlayer player = playerApiService.getOnlineMineverseChatPlayer(args[0]); if (player == null) { sender.sendMessage(LocalizedMessage.PLAYER_OFFLINE.toString() .replace("{args}", args[0])); diff --git a/src/main/java/mineverse/Aust1n46/chat/command/chat/Commandspy.java b/src/main/java/venture/Aust1n46/chat/controllers/commands/Commandspy.java similarity index 71% rename from src/main/java/mineverse/Aust1n46/chat/command/chat/Commandspy.java rename to src/main/java/venture/Aust1n46/chat/controllers/commands/Commandspy.java index 3e86d15..6994e88 100644 --- a/src/main/java/mineverse/Aust1n46/chat/command/chat/Commandspy.java +++ b/src/main/java/venture/Aust1n46/chat/controllers/commands/Commandspy.java @@ -1,15 +1,19 @@ -package mineverse.Aust1n46.chat.command.chat; +package venture.Aust1n46.chat.controllers.commands; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import mineverse.Aust1n46.chat.api.MineverseChatAPI; -import mineverse.Aust1n46.chat.api.MineverseChatPlayer; -import mineverse.Aust1n46.chat.command.VentureCommand; +import com.google.inject.Inject; + import mineverse.Aust1n46.chat.localization.LocalizedMessage; +import venture.Aust1n46.chat.model.VentureChatPlayer; +import venture.Aust1n46.chat.model.VentureCommand; +import venture.Aust1n46.chat.service.VentureChatPlayerApiService; public class Commandspy implements VentureCommand { + @Inject + private VentureChatPlayerApiService playerApiService; @Override public void execute(CommandSender sender, String command, String[] args) { @@ -17,7 +21,7 @@ public class Commandspy implements VentureCommand { Bukkit.getServer().getConsoleSender().sendMessage(LocalizedMessage.COMMAND_MUST_BE_RUN_BY_PLAYER.toString()); return; } - MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer((Player) sender); + VentureChatPlayer mcp = playerApiService.getOnlineMineverseChatPlayer((Player) sender); if (mcp.getPlayer().hasPermission("venturechat.commandspy")) { if (!mcp.hasCommandSpy()) { mcp.setCommandSpy(true); diff --git a/src/main/java/mineverse/Aust1n46/chat/command/chat/Edit.java b/src/main/java/venture/Aust1n46/chat/controllers/commands/Edit.java similarity index 66% rename from src/main/java/mineverse/Aust1n46/chat/command/chat/Edit.java rename to src/main/java/venture/Aust1n46/chat/controllers/commands/Edit.java index e0e25dd..9ab05cd 100644 --- a/src/main/java/mineverse/Aust1n46/chat/command/chat/Edit.java +++ b/src/main/java/venture/Aust1n46/chat/controllers/commands/Edit.java @@ -1,4 +1,4 @@ -package mineverse.Aust1n46.chat.command.chat; +package venture.Aust1n46.chat.controllers.commands; import java.util.ArrayList; import java.util.HashMap; @@ -11,20 +11,34 @@ import org.bukkit.scheduler.BukkitRunnable; import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.wrappers.WrappedChatComponent; +import com.google.inject.Inject; -import mineverse.Aust1n46.chat.ChatMessage; -import mineverse.Aust1n46.chat.MineverseChat; -import mineverse.Aust1n46.chat.api.MineverseChatAPI; -import mineverse.Aust1n46.chat.api.MineverseChatPlayer; -import mineverse.Aust1n46.chat.command.VentureCommand; import mineverse.Aust1n46.chat.localization.LocalizedMessage; -import mineverse.Aust1n46.chat.utilities.Format; +import mineverse.Aust1n46.chat.utilities.FormatUtils; +import venture.Aust1n46.chat.VentureChat; +import venture.Aust1n46.chat.model.ChatMessage; +import venture.Aust1n46.chat.model.VentureChatPlayer; +import venture.Aust1n46.chat.model.VentureCommand; +import venture.Aust1n46.chat.service.VentureChatPlayerApiService; +import venture.Aust1n46.chat.service.VentureChatFormatService; public class Edit implements VentureCommand { - private PacketContainer emptyLinePacketContainer = Format.createPacketPlayOutChat("{\"extra\":[\" \"],\"text\":\"\"}"); - private MineverseChat plugin = MineverseChat.getInstance(); + @Inject + private VentureChat plugin; + @Inject + private VentureChatFormatService formatService; + @Inject + private VentureChatPlayerApiService playerApiService; + + private PacketContainer emptyLinePacketContainer; private WrappedChatComponent messageDeletedComponentPlayer; + @Inject + public void postConstruct() { + emptyLinePacketContainer = formatService.createPacketPlayOutChat("{\"extra\":[\" \"],\"text\":\"\"}"); + messageDeletedComponentPlayer = WrappedChatComponent.fromJson("{\"text\":\"\",\"extra\":[{\"text\":\"\",\"color\":\"red\",\"italic\":\"true\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + FormatUtils.FormatStringAll(plugin.getConfig().getString("messageremoverpermissions")) + "\"}]}}}]}"); + } + @Override @SuppressWarnings({"unchecked", "rawtypes"}) public void execute(CommandSender sender, String command, String[] args) { @@ -44,7 +58,7 @@ public class Edit implements VentureCommand { new BukkitRunnable() { public void run() { final Map> packets = new HashMap(); - for (MineverseChatPlayer p : MineverseChatAPI.getOnlineMineverseChatPlayers()) { + for (VentureChatPlayer p : playerApiService.getOnlineMineverseChatPlayers()) { List messages = p.getMessages(); List playerPackets = new ArrayList(); boolean resend = false; @@ -56,22 +70,22 @@ public class Edit implements VentureCommand { WrappedChatComponent removedComponent = p.getPlayer().hasPermission("venturechat.message.bypass") ? Edit.this.getMessageDeletedChatComponentAdmin(message) : Edit.this.getMessageDeletedChatComponentPlayer(); message.setComponent(removedComponent); message.setHash(-1); - playerPackets.add(Format.createPacketPlayOutChat(removedComponent)); + playerPackets.add(formatService.createPacketPlayOutChat(removedComponent)); resend = true; continue; } - if (message.getMessage().contains(Format.FormatStringAll(plugin.getConfig().getString("messageremovericon")))) { + if (message.getMessage().contains(FormatUtils.FormatStringAll(plugin.getConfig().getString("messageremovericon")))) { String submessage = message.getMessage().substring(0, message.getMessage().length() - plugin.getConfig().getString("messageremovericon").length() - 1).replaceAll("(�([a-z0-9]))", ""); if (submessage.hashCode() == hash) { WrappedChatComponent removedComponent = p.getPlayer().hasPermission("venturechat.message.bypass") ? Edit.this.getMessageDeletedChatComponentAdmin(message) : Edit.this.getMessageDeletedChatComponentPlayer(); message.setComponent(removedComponent); message.setHash(-1); - playerPackets.add(Format.createPacketPlayOutChat(removedComponent)); + playerPackets.add(formatService.createPacketPlayOutChat(removedComponent)); resend = true; continue; } } - playerPackets.add(Format.createPacketPlayOutChat(message.getComponent())); + playerPackets.add(formatService.createPacketPlayOutChat(message.getComponent())); } if (resend) { packets.put(p.getPlayer(), playerPackets); @@ -82,7 +96,7 @@ public class Edit implements VentureCommand { for (Player p : packets.keySet()) { List pPackets = packets.get(p); for (PacketContainer c : pPackets) { - Format.sendPacketPlayOutChat(p, c); + formatService.sendPacketPlayOutChat(p, c); } } } @@ -92,17 +106,14 @@ public class Edit implements VentureCommand { } public WrappedChatComponent getMessageDeletedChatComponentPlayer() { - if (this.messageDeletedComponentPlayer == null) { - this.messageDeletedComponentPlayer = WrappedChatComponent.fromJson("{\"text\":\"\",\"extra\":[{\"text\":\"\",\"color\":\"red\",\"italic\":\"true\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + Format.FormatStringAll(plugin.getConfig().getString("messageremoverpermissions")) + "\"}]}}}]}"); - } return this.messageDeletedComponentPlayer; } public WrappedChatComponent getMessageDeletedChatComponentAdmin(ChatMessage message) { String oMessage = message.getComponent().getJson().substring(1, message.getComponent().getJson().length() - 11); - if (message.getMessage().contains(Format.FormatStringAll(plugin.getConfig().getString("messageremovericon")))) { + if (message.getMessage().contains(FormatUtils.FormatStringAll(plugin.getConfig().getString("messageremovericon")))) { oMessage = oMessage.substring(0, oMessage.length() - plugin.getConfig().getString("messageremovericon").length() - 4) + "\"}]"; } - return WrappedChatComponent.fromJson(Format.FormatStringAll("{\"text\":\"\",\"extra\":[{\"text\":\"&c&o\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"&7Message: \"," + oMessage + "}}}]}")); + return WrappedChatComponent.fromJson(FormatUtils.FormatStringAll("{\"text\":\"\",\"extra\":[{\"text\":\"&c&o\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"&7Message: \"," + oMessage + "}}}]}")); } } diff --git a/src/main/java/mineverse/Aust1n46/chat/command/chat/Filter.java b/src/main/java/venture/Aust1n46/chat/controllers/commands/Filter.java similarity index 68% rename from src/main/java/mineverse/Aust1n46/chat/command/chat/Filter.java rename to src/main/java/venture/Aust1n46/chat/controllers/commands/Filter.java index e516c3d..f375464 100644 --- a/src/main/java/mineverse/Aust1n46/chat/command/chat/Filter.java +++ b/src/main/java/venture/Aust1n46/chat/controllers/commands/Filter.java @@ -1,15 +1,19 @@ -package mineverse.Aust1n46.chat.command.chat; +package venture.Aust1n46.chat.controllers.commands; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import mineverse.Aust1n46.chat.api.MineverseChatAPI; -import mineverse.Aust1n46.chat.api.MineverseChatPlayer; -import mineverse.Aust1n46.chat.command.VentureCommand; +import com.google.inject.Inject; + import mineverse.Aust1n46.chat.localization.LocalizedMessage; +import venture.Aust1n46.chat.model.VentureChatPlayer; +import venture.Aust1n46.chat.model.VentureCommand; +import venture.Aust1n46.chat.service.VentureChatPlayerApiService; public class Filter implements VentureCommand { + @Inject + private VentureChatPlayerApiService playerApiService; @Override public void execute(CommandSender sender, String command, String[] args) { @@ -17,9 +21,9 @@ public class Filter implements VentureCommand { Bukkit.getServer().getConsoleSender().sendMessage(LocalizedMessage.COMMAND_MUST_BE_RUN_BY_PLAYER.toString()); return; } - MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer((Player) sender); + VentureChatPlayer mcp = playerApiService.getOnlineMineverseChatPlayer((Player) sender); if (mcp.getPlayer().hasPermission("venturechat.ignorefilter")) { - if (!mcp.hasFilter()) { + if (!mcp.isFilter()) { mcp.setFilter(true); mcp.getPlayer().sendMessage(LocalizedMessage.FILTER_ON.toString()); return; diff --git a/src/main/java/mineverse/Aust1n46/chat/command/chat/Force.java b/src/main/java/venture/Aust1n46/chat/controllers/commands/Force.java similarity index 75% rename from src/main/java/mineverse/Aust1n46/chat/command/chat/Force.java rename to src/main/java/venture/Aust1n46/chat/controllers/commands/Force.java index fbfa094..5c5f46b 100644 --- a/src/main/java/mineverse/Aust1n46/chat/command/chat/Force.java +++ b/src/main/java/venture/Aust1n46/chat/controllers/commands/Force.java @@ -1,13 +1,17 @@ -package mineverse.Aust1n46.chat.command.chat; +package venture.Aust1n46.chat.controllers.commands; import org.bukkit.command.CommandSender; -import mineverse.Aust1n46.chat.api.MineverseChatAPI; -import mineverse.Aust1n46.chat.api.MineverseChatPlayer; -import mineverse.Aust1n46.chat.command.VentureCommand; +import com.google.inject.Inject; + import mineverse.Aust1n46.chat.localization.LocalizedMessage; +import venture.Aust1n46.chat.model.VentureChatPlayer; +import venture.Aust1n46.chat.model.VentureCommand; +import venture.Aust1n46.chat.service.VentureChatPlayerApiService; public class Force implements VentureCommand { + @Inject + private VentureChatPlayerApiService playerApiService; @Override public void execute(CommandSender sender, String command, String[] args) { @@ -18,7 +22,7 @@ public class Force implements VentureCommand { .replace("{args}", "[player] [message]")); return; } - MineverseChatPlayer player = MineverseChatAPI.getOnlineMineverseChatPlayer(args[0]); + VentureChatPlayer player = playerApiService.getOnlineMineverseChatPlayer(args[0]); if (player == null) { sender.sendMessage(LocalizedMessage.PLAYER_OFFLINE.toString() .replace("{args}", args[0])); diff --git a/src/main/java/mineverse/Aust1n46/chat/command/chat/Forceall.java b/src/main/java/venture/Aust1n46/chat/controllers/commands/Forceall.java similarity index 71% rename from src/main/java/mineverse/Aust1n46/chat/command/chat/Forceall.java rename to src/main/java/venture/Aust1n46/chat/controllers/commands/Forceall.java index 316fb49..88ef6ea 100644 --- a/src/main/java/mineverse/Aust1n46/chat/command/chat/Forceall.java +++ b/src/main/java/venture/Aust1n46/chat/controllers/commands/Forceall.java @@ -1,13 +1,17 @@ -package mineverse.Aust1n46.chat.command.chat; +package venture.Aust1n46.chat.controllers.commands; import org.bukkit.command.CommandSender; -import mineverse.Aust1n46.chat.api.MineverseChatAPI; -import mineverse.Aust1n46.chat.api.MineverseChatPlayer; -import mineverse.Aust1n46.chat.command.VentureCommand; +import com.google.inject.Inject; + import mineverse.Aust1n46.chat.localization.LocalizedMessage; +import venture.Aust1n46.chat.model.VentureChatPlayer; +import venture.Aust1n46.chat.model.VentureCommand; +import venture.Aust1n46.chat.service.VentureChatPlayerApiService; public class Forceall implements VentureCommand { + @Inject + private VentureChatPlayerApiService playerApiService; @Override public void execute(CommandSender sender, String command, String[] args) { @@ -24,7 +28,7 @@ public class Forceall implements VentureCommand { } } sender.sendMessage(LocalizedMessage.FORCE_ALL.toString().replace("{message}", forcemsg)); - for (MineverseChatPlayer player : MineverseChatAPI.getOnlineMineverseChatPlayers()) { + for (VentureChatPlayer player : playerApiService.getOnlineMineverseChatPlayers()) { player.getPlayer().chat(forcemsg); } return; diff --git a/src/main/java/mineverse/Aust1n46/chat/command/message/IgnoreCommandExecutor.java b/src/main/java/venture/Aust1n46/chat/controllers/commands/IgnoreCommandExecutor.java similarity index 74% rename from src/main/java/mineverse/Aust1n46/chat/command/message/IgnoreCommandExecutor.java rename to src/main/java/venture/Aust1n46/chat/controllers/commands/IgnoreCommandExecutor.java index ed671c4..6f56172 100644 --- a/src/main/java/mineverse/Aust1n46/chat/command/message/IgnoreCommandExecutor.java +++ b/src/main/java/venture/Aust1n46/chat/controllers/commands/IgnoreCommandExecutor.java @@ -1,4 +1,4 @@ -package mineverse.Aust1n46.chat.command.message; +package venture.Aust1n46.chat.controllers.commands; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; @@ -14,13 +14,21 @@ import org.bukkit.command.TabExecutor; import org.bukkit.entity.Player; import org.bukkit.util.StringUtil; -import mineverse.Aust1n46.chat.MineverseChat; -import mineverse.Aust1n46.chat.api.MineverseChatAPI; -import mineverse.Aust1n46.chat.api.MineverseChatPlayer; +import com.google.inject.Inject; + import mineverse.Aust1n46.chat.localization.LocalizedMessage; +import venture.Aust1n46.chat.VentureChat; +import venture.Aust1n46.chat.controllers.PluginMessageController; +import venture.Aust1n46.chat.model.VentureChatPlayer; +import venture.Aust1n46.chat.service.VentureChatPlayerApiService; public class IgnoreCommandExecutor implements TabExecutor { - private MineverseChat plugin = MineverseChat.getInstance(); + @Inject + private VentureChat plugin; + @Inject + private PluginMessageController pluginMessageController; + @Inject + private VentureChatPlayerApiService playerApiService; @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { @@ -28,7 +36,7 @@ public class IgnoreCommandExecutor implements TabExecutor { plugin.getServer().getConsoleSender().sendMessage(LocalizedMessage.COMMAND_MUST_BE_RUN_BY_PLAYER.toString()); return true; } - MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer((Player) sender); + VentureChatPlayer mcp = playerApiService.getOnlineMineverseChatPlayer((Player) sender); if (args.length == 0) { mcp.getPlayer().sendMessage(LocalizedMessage.COMMAND_INVALID_ARGUMENTS_IGNORE.toString()); return true; @@ -36,7 +44,7 @@ public class IgnoreCommandExecutor implements TabExecutor { if (args[0].equalsIgnoreCase("list")) { String ignoreList = ""; for (UUID ignore : mcp.getIgnores()) { - MineverseChatPlayer i = MineverseChatAPI.getMineverseChatPlayer(ignore); + VentureChatPlayer i = playerApiService.getMineverseChatPlayer(ignore); String iName = ignore.toString(); if (i != null) { iName = i.getName(); @@ -60,8 +68,8 @@ public class IgnoreCommandExecutor implements TabExecutor { out.writeUTF("Ignore"); out.writeUTF("Send"); out.writeUTF(args[0]); - out.writeUTF(mcp.getUUID().toString()); - mcp.getPlayer().sendPluginMessage(plugin, MineverseChat.PLUGIN_MESSAGING_CHANNEL, byteOutStream.toByteArray()); + out.writeUTF(mcp.getUuid().toString()); + pluginMessageController.sendPluginMessage(byteOutStream); out.close(); } catch (Exception e) { e.printStackTrace(); @@ -69,17 +77,17 @@ public class IgnoreCommandExecutor implements TabExecutor { return true; } - MineverseChatPlayer player = MineverseChatAPI.getOnlineMineverseChatPlayer(args[0]); + VentureChatPlayer player = playerApiService.getOnlineMineverseChatPlayer(args[0]); if (player == null) { mcp.getPlayer().sendMessage(LocalizedMessage.PLAYER_OFFLINE.toString() .replace("{args}", args[0])); return true; } - if (mcp.getIgnores().contains(player.getUUID())) { + if (mcp.getIgnores().contains(player.getUuid())) { mcp.getPlayer().sendMessage(LocalizedMessage.IGNORE_PLAYER_OFF.toString() .replace("{player}", player.getName())); - mcp.removeIgnore(player.getUUID()); - MineverseChat.synchronize(mcp, true); + mcp.removeIgnore(player.getUuid()); + pluginMessageController.synchronize(mcp, true); return true; } if (player.getPlayer().hasPermission("venturechat.ignore.bypass")) { @@ -89,8 +97,8 @@ public class IgnoreCommandExecutor implements TabExecutor { } mcp.getPlayer().sendMessage(LocalizedMessage.IGNORE_PLAYER_ON.toString() .replace("{player}", player.getName())); - mcp.addIgnore(player.getUUID()); - MineverseChat.synchronize(mcp, true); + mcp.addIgnore(player.getUuid()); + pluginMessageController.synchronize(mcp, true); return true; } @@ -98,7 +106,7 @@ public class IgnoreCommandExecutor implements TabExecutor { public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { if (plugin.getConfig().getBoolean("bungeecordmessaging", true)) { List completions = new ArrayList<>(); - StringUtil.copyPartialMatches(args[args.length - 1], MineverseChatAPI.getNetworkPlayerNames(), completions); + StringUtil.copyPartialMatches(args[args.length - 1], playerApiService.getNetworkPlayerNames(), completions); Collections.sort(completions); return completions; } diff --git a/src/main/java/mineverse/Aust1n46/chat/command/chat/Kickchannel.java b/src/main/java/venture/Aust1n46/chat/controllers/commands/Kickchannel.java similarity index 81% rename from src/main/java/mineverse/Aust1n46/chat/command/chat/Kickchannel.java rename to src/main/java/venture/Aust1n46/chat/controllers/commands/Kickchannel.java index bdb35ba..f063e9b 100644 --- a/src/main/java/mineverse/Aust1n46/chat/command/chat/Kickchannel.java +++ b/src/main/java/venture/Aust1n46/chat/controllers/commands/Kickchannel.java @@ -1,16 +1,22 @@ -package mineverse.Aust1n46.chat.command.chat; +package venture.Aust1n46.chat.controllers.commands; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; -import mineverse.Aust1n46.chat.MineverseChat; -import mineverse.Aust1n46.chat.api.MineverseChatAPI; -import mineverse.Aust1n46.chat.api.MineverseChatPlayer; -import mineverse.Aust1n46.chat.channel.ChatChannel; -import mineverse.Aust1n46.chat.command.VentureCommand; +import com.google.inject.Inject; + import mineverse.Aust1n46.chat.localization.LocalizedMessage; +import venture.Aust1n46.chat.controllers.PluginMessageController; +import venture.Aust1n46.chat.model.ChatChannel; +import venture.Aust1n46.chat.model.VentureChatPlayer; +import venture.Aust1n46.chat.model.VentureCommand; +import venture.Aust1n46.chat.service.VentureChatPlayerApiService; public class Kickchannel implements VentureCommand { + @Inject + private PluginMessageController pluginMessageController; + @Inject + private VentureChatPlayerApiService playerApiService; @Override public void execute(CommandSender sender, String command, String[] args) { @@ -21,7 +27,7 @@ public class Kickchannel implements VentureCommand { .replace("{args}", "[player] [channel]")); return; } - MineverseChatPlayer player = MineverseChatAPI.getMineverseChatPlayer(args[0]); + VentureChatPlayer player = playerApiService.getMineverseChatPlayer(args[0]); if (player == null) { sender.sendMessage(LocalizedMessage.PLAYER_OFFLINE.toString() .replace("{args}", args[0])); @@ -61,7 +67,7 @@ public class Kickchannel implements VentureCommand { player.setModified(true); } if (isThereABungeeChannel) { - MineverseChat.synchronize(player, true); + pluginMessageController.synchronize(player, true); } return; } diff --git a/src/main/java/mineverse/Aust1n46/chat/command/chat/Kickchannelall.java b/src/main/java/venture/Aust1n46/chat/controllers/commands/Kickchannelall.java similarity index 79% rename from src/main/java/mineverse/Aust1n46/chat/command/chat/Kickchannelall.java rename to src/main/java/venture/Aust1n46/chat/controllers/commands/Kickchannelall.java index 2116c83..ad1653d 100644 --- a/src/main/java/mineverse/Aust1n46/chat/command/chat/Kickchannelall.java +++ b/src/main/java/venture/Aust1n46/chat/controllers/commands/Kickchannelall.java @@ -1,16 +1,22 @@ -package mineverse.Aust1n46.chat.command.chat; +package venture.Aust1n46.chat.controllers.commands; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; -import mineverse.Aust1n46.chat.MineverseChat; -import mineverse.Aust1n46.chat.api.MineverseChatAPI; -import mineverse.Aust1n46.chat.api.MineverseChatPlayer; -import mineverse.Aust1n46.chat.channel.ChatChannel; -import mineverse.Aust1n46.chat.command.VentureCommand; +import com.google.inject.Inject; + import mineverse.Aust1n46.chat.localization.LocalizedMessage; +import venture.Aust1n46.chat.controllers.PluginMessageController; +import venture.Aust1n46.chat.model.ChatChannel; +import venture.Aust1n46.chat.model.VentureChatPlayer; +import venture.Aust1n46.chat.model.VentureCommand; +import venture.Aust1n46.chat.service.VentureChatPlayerApiService; public class Kickchannelall implements VentureCommand { + @Inject + private PluginMessageController pluginMessageController; + @Inject + private VentureChatPlayerApiService playerApiService; @Override public void execute(CommandSender sender, String command, String[] args) { @@ -21,7 +27,7 @@ public class Kickchannelall implements VentureCommand { .replace("{args}", "[player]")); return; } - MineverseChatPlayer player = MineverseChatAPI.getMineverseChatPlayer(args[0]); + VentureChatPlayer player = playerApiService.getMineverseChatPlayer(args[0]); if (player == null) { sender.sendMessage(LocalizedMessage.PLAYER_OFFLINE.toString() .replace("{args}", args[0])); @@ -45,7 +51,7 @@ public class Kickchannelall implements VentureCommand { isThereABungeeChannel = true; } if (isThereABungeeChannel) { - MineverseChat.synchronize(player, true); + pluginMessageController.synchronize(player, true); } if (player.isOnline()) { player.getPlayer().sendMessage(LocalizedMessage.KICK_CHANNEL_ALL_PLAYER.toString()); diff --git a/src/main/java/mineverse/Aust1n46/chat/command/chat/Leave.java b/src/main/java/venture/Aust1n46/chat/controllers/commands/Leave.java similarity index 77% rename from src/main/java/mineverse/Aust1n46/chat/command/chat/Leave.java rename to src/main/java/venture/Aust1n46/chat/controllers/commands/Leave.java index a488101..a5d58a7 100644 --- a/src/main/java/mineverse/Aust1n46/chat/command/chat/Leave.java +++ b/src/main/java/venture/Aust1n46/chat/controllers/commands/Leave.java @@ -1,18 +1,24 @@ -package mineverse.Aust1n46.chat.command.chat; +package venture.Aust1n46.chat.controllers.commands; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import mineverse.Aust1n46.chat.MineverseChat; -import mineverse.Aust1n46.chat.api.MineverseChatAPI; -import mineverse.Aust1n46.chat.api.MineverseChatPlayer; -import mineverse.Aust1n46.chat.channel.ChatChannel; -import mineverse.Aust1n46.chat.command.VentureCommand; +import com.google.inject.Inject; + import mineverse.Aust1n46.chat.localization.LocalizedMessage; +import venture.Aust1n46.chat.controllers.PluginMessageController; +import venture.Aust1n46.chat.model.ChatChannel; +import venture.Aust1n46.chat.model.VentureChatPlayer; +import venture.Aust1n46.chat.model.VentureCommand; +import venture.Aust1n46.chat.service.VentureChatPlayerApiService; public class Leave implements VentureCommand { + @Inject + private PluginMessageController pluginMessageController; + @Inject + private VentureChatPlayerApiService playerApiService; @Override public void execute(CommandSender sender, String command, String[] args) { @@ -20,7 +26,7 @@ public class Leave implements VentureCommand { Bukkit.getServer().getConsoleSender().sendMessage(LocalizedMessage.COMMAND_MUST_BE_RUN_BY_PLAYER.toString()); return; } - MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer((Player) sender); + VentureChatPlayer mcp = playerApiService.getOnlineMineverseChatPlayer((Player) sender); if (args.length > 0) { ChatChannel channel = ChatChannel.getChannel(args[0]); if (channel == null) { @@ -45,7 +51,7 @@ public class Leave implements VentureCommand { .replace("{channel_name}", ChatChannel.getDefaultChannel().getName())); } if (isThereABungeeChannel) { - MineverseChat.synchronize(mcp, true); + pluginMessageController.synchronize(mcp, true); } return; } diff --git a/src/main/java/mineverse/Aust1n46/chat/command/chat/Listen.java b/src/main/java/venture/Aust1n46/chat/controllers/commands/Listen.java similarity index 72% rename from src/main/java/mineverse/Aust1n46/chat/command/chat/Listen.java rename to src/main/java/venture/Aust1n46/chat/controllers/commands/Listen.java index 4c88a82..456c281 100644 --- a/src/main/java/mineverse/Aust1n46/chat/command/chat/Listen.java +++ b/src/main/java/venture/Aust1n46/chat/controllers/commands/Listen.java @@ -1,17 +1,23 @@ -package mineverse.Aust1n46.chat.command.chat; +package venture.Aust1n46.chat.controllers.commands; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import mineverse.Aust1n46.chat.MineverseChat; -import mineverse.Aust1n46.chat.api.MineverseChatAPI; -import mineverse.Aust1n46.chat.api.MineverseChatPlayer; -import mineverse.Aust1n46.chat.channel.ChatChannel; -import mineverse.Aust1n46.chat.command.VentureCommand; +import com.google.inject.Inject; + import mineverse.Aust1n46.chat.localization.LocalizedMessage; +import venture.Aust1n46.chat.controllers.PluginMessageController; +import venture.Aust1n46.chat.model.ChatChannel; +import venture.Aust1n46.chat.model.VentureChatPlayer; +import venture.Aust1n46.chat.model.VentureCommand; +import venture.Aust1n46.chat.service.VentureChatPlayerApiService; public class Listen implements VentureCommand { + @Inject + private PluginMessageController pluginMessageController; + @Inject + private VentureChatPlayerApiService playerApiService; @Override public void execute(CommandSender sender, String command, String[] args) { @@ -19,7 +25,7 @@ public class Listen implements VentureCommand { Bukkit.getServer().getConsoleSender().sendMessage(LocalizedMessage.COMMAND_MUST_BE_RUN_BY_PLAYER.toString()); return; } - MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer((Player) sender); + VentureChatPlayer mcp = playerApiService.getOnlineMineverseChatPlayer((Player) sender); if (args.length > 0) { ChatChannel channel = ChatChannel.getChannel(args[0]); if (channel == null) { @@ -39,7 +45,7 @@ public class Listen implements VentureCommand { .replace("{channel_color}", channel.getColor() + "") .replace("{channel_name}", channel.getName())); if (channel.getBungee()) { - MineverseChat.synchronize(mcp, true); + pluginMessageController.synchronize(mcp, true); } return; } diff --git a/src/main/java/mineverse/Aust1n46/chat/command/chat/Me.java b/src/main/java/venture/Aust1n46/chat/controllers/commands/Me.java similarity index 56% rename from src/main/java/mineverse/Aust1n46/chat/command/chat/Me.java rename to src/main/java/venture/Aust1n46/chat/controllers/commands/Me.java index d7db188..db8cc73 100644 --- a/src/main/java/mineverse/Aust1n46/chat/command/chat/Me.java +++ b/src/main/java/venture/Aust1n46/chat/controllers/commands/Me.java @@ -1,14 +1,21 @@ -package mineverse.Aust1n46.chat.command.chat; +package venture.Aust1n46.chat.controllers.commands; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import mineverse.Aust1n46.chat.api.MineverseChatAPI; -import mineverse.Aust1n46.chat.command.VentureCommand; +import com.google.inject.Inject; + import mineverse.Aust1n46.chat.localization.LocalizedMessage; -import mineverse.Aust1n46.chat.utilities.Format; +import mineverse.Aust1n46.chat.utilities.FormatUtils; +import venture.Aust1n46.chat.model.VentureCommand; +import venture.Aust1n46.chat.service.VentureChatPlayerApiService; +import venture.Aust1n46.chat.service.VentureChatFormatService; public class Me implements VentureCommand { + @Inject + private VentureChatFormatService formatService; + @Inject + private VentureChatPlayerApiService playerApiService; @Override public void execute(CommandSender sender, String command, String[] args) { @@ -18,22 +25,22 @@ public class Me implements VentureCommand { for (int x = 0; x < args.length; x++) if (args[x].length() > 0) msg += " " + args[x]; - if (sender instanceof Player && MineverseChatAPI.getOnlineMineverseChatPlayer((Player) sender).hasFilter()) { - msg = Format.FilterChat(msg); + if (sender instanceof Player && playerApiService.getOnlineMineverseChatPlayer((Player) sender).isFilter()) { + msg = formatService.FilterChat(msg); } if (sender.hasPermission("venturechat.color.legacy")) { - msg = Format.FormatStringLegacyColor(msg); + msg = FormatUtils.FormatStringLegacyColor(msg); } if (sender.hasPermission("venturechat.color")) - msg = Format.FormatStringColor(msg); + msg = FormatUtils.FormatStringColor(msg); if (sender.hasPermission("venturechat.format")) - msg = Format.FormatString(msg); + msg = FormatUtils.FormatString(msg); if (sender instanceof Player) { Player p = (Player) sender; - Format.broadcastToServer("* " + p.getDisplayName() + msg); + formatService.broadcastToServer("* " + p.getDisplayName() + msg); return; } - Format.broadcastToServer("* " + sender.getName() + msg); + formatService.broadcastToServer("* " + sender.getName() + msg); return; } sender.sendMessage(LocalizedMessage.COMMAND_INVALID_ARGUMENTS.toString() diff --git a/src/main/java/mineverse/Aust1n46/chat/command/message/MessageCommandExecutor.java b/src/main/java/venture/Aust1n46/chat/controllers/commands/MessageCommandExecutor.java similarity index 65% rename from src/main/java/mineverse/Aust1n46/chat/command/message/MessageCommandExecutor.java rename to src/main/java/venture/Aust1n46/chat/controllers/commands/MessageCommandExecutor.java index 08cf5e6..814af3a 100644 --- a/src/main/java/mineverse/Aust1n46/chat/command/message/MessageCommandExecutor.java +++ b/src/main/java/venture/Aust1n46/chat/controllers/commands/MessageCommandExecutor.java @@ -1,4 +1,4 @@ -package mineverse.Aust1n46.chat.command.message; +package venture.Aust1n46.chat.controllers.commands; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; @@ -12,15 +12,26 @@ import org.bukkit.command.TabExecutor; import org.bukkit.entity.Player; import org.bukkit.util.StringUtil; +import com.google.inject.Inject; + import me.clip.placeholderapi.PlaceholderAPI; -import mineverse.Aust1n46.chat.MineverseChat; -import mineverse.Aust1n46.chat.api.MineverseChatAPI; -import mineverse.Aust1n46.chat.api.MineverseChatPlayer; import mineverse.Aust1n46.chat.localization.LocalizedMessage; -import mineverse.Aust1n46.chat.utilities.Format; +import mineverse.Aust1n46.chat.utilities.FormatUtils; +import venture.Aust1n46.chat.VentureChat; +import venture.Aust1n46.chat.controllers.PluginMessageController; +import venture.Aust1n46.chat.model.VentureChatPlayer; +import venture.Aust1n46.chat.service.VentureChatPlayerApiService; +import venture.Aust1n46.chat.service.VentureChatFormatService; public class MessageCommandExecutor implements TabExecutor { - private MineverseChat plugin = MineverseChat.getInstance(); + @Inject + private VentureChat plugin; + @Inject + private VentureChatFormatService formatService; + @Inject + private PluginMessageController pluginMessageController; + @Inject + private VentureChatPlayerApiService playerApiService; @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { @@ -29,7 +40,7 @@ public class MessageCommandExecutor implements TabExecutor { return true; } - MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer((Player) sender); + VentureChatPlayer mcp = playerApiService.getOnlineMineverseChatPlayer((Player) sender); if (args.length == 0) { mcp.getPlayer().sendMessage(LocalizedMessage.COMMAND_INVALID_ARGUMENTS.toString() .replace("{command}", "/" + command.getName()) @@ -42,7 +53,7 @@ public class MessageCommandExecutor implements TabExecutor { return true; } - MineverseChatPlayer player = MineverseChatAPI.getOnlineMineverseChatPlayer(args[0]); + VentureChatPlayer player = playerApiService.getOnlineMineverseChatPlayer(args[0]); if (player == null) { mcp.getPlayer().sendMessage(LocalizedMessage.PLAYER_OFFLINE.toString() .replace("{args}", args[0])); @@ -53,12 +64,12 @@ public class MessageCommandExecutor implements TabExecutor { .replace("{args}", args[0])); return true; } - if (player.getIgnores().contains(mcp.getUUID())) { + if (player.getIgnores().contains(mcp.getUuid())) { mcp.getPlayer().sendMessage(LocalizedMessage.IGNORING_MESSAGE.toString() .replace("{player}", player.getName())); return true; } - if (!player.getMessageToggle()) { + if (!player.isMessageToggle()) { mcp.getPlayer().sendMessage(LocalizedMessage.BLOCKING_MESSAGE.toString() .replace("{player}", player.getName())); return true; @@ -73,36 +84,36 @@ public class MessageCommandExecutor implements TabExecutor { for (int r = 1; r < args.length; r++) { msg += " " + args[r]; } - if (mcp.hasFilter()) { - msg = Format.FilterChat(msg); + if (mcp.isFilter()) { + msg = formatService.FilterChat(msg); } if (mcp.getPlayer().hasPermission("venturechat.color.legacy")) { - msg = Format.FormatStringLegacyColor(msg); + msg = FormatUtils.FormatStringLegacyColor(msg); } if (mcp.getPlayer().hasPermission("venturechat.color")) { - msg = Format.FormatStringColor(msg); + msg = FormatUtils.FormatStringColor(msg); } if (mcp.getPlayer().hasPermission("venturechat.format")) { - msg = Format.FormatString(msg); + msg = FormatUtils.FormatString(msg); } - send = Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(mcp.getPlayer(), plugin.getConfig().getString("tellformatfrom").replaceAll("sender_", ""))); - echo = Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(mcp.getPlayer(), plugin.getConfig().getString("tellformatto").replaceAll("sender_", ""))); - spy = Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(mcp.getPlayer(), plugin.getConfig().getString("tellformatspy").replaceAll("sender_", ""))); + send = FormatUtils.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(mcp.getPlayer(), plugin.getConfig().getString("tellformatfrom").replaceAll("sender_", ""))); + echo = FormatUtils.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(mcp.getPlayer(), plugin.getConfig().getString("tellformatto").replaceAll("sender_", ""))); + spy = FormatUtils.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(mcp.getPlayer(), plugin.getConfig().getString("tellformatspy").replaceAll("sender_", ""))); - send = Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(player.getPlayer(), send.replaceAll("receiver_", ""))) + msg; - echo = Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(player.getPlayer(), echo.replaceAll("receiver_", ""))) + msg; - spy = Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(player.getPlayer(), spy.replaceAll("receiver_", ""))) + msg; + send = FormatUtils.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(player.getPlayer(), send.replaceAll("receiver_", ""))) + msg; + echo = FormatUtils.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(player.getPlayer(), echo.replaceAll("receiver_", ""))) + msg; + spy = FormatUtils.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(player.getPlayer(), spy.replaceAll("receiver_", ""))) + msg; - player.setReplyPlayer(mcp.getUUID()); - mcp.setReplyPlayer(player.getUUID()); + player.setReplyPlayer(mcp.getUuid()); + mcp.setReplyPlayer(player.getUuid()); player.getPlayer().sendMessage(send); mcp.getPlayer().sendMessage(echo); if (player.hasNotifications()) { - Format.playMessageSound(player); + formatService.playMessageSound(player); } if (!mcp.getPlayer().hasPermission("venturechat.spy.override")) { - for (MineverseChatPlayer sp : MineverseChatAPI.getOnlineMineverseChatPlayers()) { + for (VentureChatPlayer sp : playerApiService.getOnlineMineverseChatPlayers()) { if (sp.getName().equals(mcp.getName()) || sp.getName().equals(player.getName())) { continue; } @@ -115,10 +126,10 @@ public class MessageCommandExecutor implements TabExecutor { } if (args.length == 1) { if (args[0].length() > 0) { - if (!mcp.hasConversation() || (mcp.hasConversation() && !mcp.getConversation().toString().equals(player.getUUID().toString()))) { - mcp.setConversation(player.getUUID()); + if (!mcp.hasConversation() || (mcp.hasConversation() && !mcp.getConversation().toString().equals(player.getUuid().toString()))) { + mcp.setConversation(player.getUuid()); if (!mcp.getPlayer().hasPermission("venturechat.spy.override")) { - for (MineverseChatPlayer sp : MineverseChatAPI.getOnlineMineverseChatPlayers()) { + for (VentureChatPlayer sp : playerApiService.getOnlineMineverseChatPlayers()) { if (sp.getName().equals(mcp.getName())) { continue; } @@ -134,7 +145,7 @@ public class MessageCommandExecutor implements TabExecutor { } else { mcp.setConversation(null); if (!mcp.getPlayer().hasPermission("venturechat.spy.override")) { - for (MineverseChatPlayer sp : MineverseChatAPI.getOnlineMineverseChatPlayers()) { + for (VentureChatPlayer sp : playerApiService.getOnlineMineverseChatPlayers()) { if (sp.getName().equals(mcp.getName())) { continue; } @@ -157,14 +168,14 @@ public class MessageCommandExecutor implements TabExecutor { public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { if (plugin.getConfig().getBoolean("bungeecordmessaging", true)) { List completions = new ArrayList<>(); - StringUtil.copyPartialMatches(args[args.length - 1], MineverseChatAPI.getNetworkPlayerNames(), completions); + StringUtil.copyPartialMatches(args[args.length - 1], playerApiService.getNetworkPlayerNames(), completions); Collections.sort(completions); return completions; } return null; } - private void sendBungeeCordMessage(MineverseChatPlayer mcp, String command, String[] args) { + private void sendBungeeCordMessage(VentureChatPlayer mcp, String command, String[] args) { if (args.length < 2) { mcp.getPlayer().sendMessage(LocalizedMessage.COMMAND_INVALID_ARGUMENTS.toString() .replace("{command}", "/" + command) @@ -178,36 +189,36 @@ public class MessageCommandExecutor implements TabExecutor { msgBuilder.append(" " + args[r]); } String msg = msgBuilder.toString(); - if (mcp.hasFilter()) { - msg = Format.FilterChat(msg); + if (mcp.isFilter()) { + msg = formatService.FilterChat(msg); } if (mcp.getPlayer().hasPermission("venturechat.color.legacy")) { - msg = Format.FormatStringLegacyColor(msg); + msg = FormatUtils.FormatStringLegacyColor(msg); } if (mcp.getPlayer().hasPermission("venturechat.color")) { - msg = Format.FormatStringColor(msg); + msg = FormatUtils.FormatStringColor(msg); } if (mcp.getPlayer().hasPermission("venturechat.format")) { - msg = Format.FormatString(msg); + msg = FormatUtils.FormatString(msg); } - String send = Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(mcp.getPlayer(), plugin.getConfig().getString("tellformatfrom").replaceAll("sender_", ""))); - String echo = Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(mcp.getPlayer(), plugin.getConfig().getString("tellformatto").replaceAll("sender_", ""))); + String send = FormatUtils.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(mcp.getPlayer(), plugin.getConfig().getString("tellformatfrom").replaceAll("sender_", ""))); + String echo = FormatUtils.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(mcp.getPlayer(), plugin.getConfig().getString("tellformatto").replaceAll("sender_", ""))); String spy = "VentureChat:NoSpy"; if (!mcp.getPlayer().hasPermission("venturechat.spy.override")) { - spy = Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(mcp.getPlayer(), plugin.getConfig().getString("tellformatspy").replaceAll("sender_", ""))); + spy = FormatUtils.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(mcp.getPlayer(), plugin.getConfig().getString("tellformatspy").replaceAll("sender_", ""))); } try { out.writeUTF("Message"); out.writeUTF("Send"); out.writeUTF(args[0]); - out.writeUTF(mcp.getUUID().toString()); + out.writeUTF(mcp.getUuid().toString()); out.writeUTF(mcp.getName()); out.writeUTF(send); out.writeUTF(echo); out.writeUTF(spy); out.writeUTF(msg); - mcp.getPlayer().sendPluginMessage(plugin, MineverseChat.PLUGIN_MESSAGING_CHANNEL, byteOutStream.toByteArray()); + pluginMessageController.sendPluginMessage(byteOutStream); out.close(); } catch (Exception e) { e.printStackTrace(); diff --git a/src/main/java/mineverse/Aust1n46/chat/command/message/MessageToggle.java b/src/main/java/venture/Aust1n46/chat/controllers/commands/MessageToggle.java similarity index 58% rename from src/main/java/mineverse/Aust1n46/chat/command/message/MessageToggle.java rename to src/main/java/venture/Aust1n46/chat/controllers/commands/MessageToggle.java index 37e79d2..6e61c4f 100644 --- a/src/main/java/mineverse/Aust1n46/chat/command/message/MessageToggle.java +++ b/src/main/java/venture/Aust1n46/chat/controllers/commands/MessageToggle.java @@ -1,16 +1,22 @@ -package mineverse.Aust1n46.chat.command.message; +package venture.Aust1n46.chat.controllers.commands; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import mineverse.Aust1n46.chat.MineverseChat; -import mineverse.Aust1n46.chat.api.MineverseChatAPI; -import mineverse.Aust1n46.chat.api.MineverseChatPlayer; -import mineverse.Aust1n46.chat.command.VentureCommand; +import com.google.inject.Inject; + import mineverse.Aust1n46.chat.localization.LocalizedMessage; +import venture.Aust1n46.chat.controllers.PluginMessageController; +import venture.Aust1n46.chat.model.VentureChatPlayer; +import venture.Aust1n46.chat.model.VentureCommand; +import venture.Aust1n46.chat.service.VentureChatPlayerApiService; public class MessageToggle implements VentureCommand { + @Inject + private PluginMessageController pluginMessageController; + @Inject + private VentureChatPlayerApiService playerApiService; @Override public void execute(CommandSender sender, String command, String[] args) { @@ -18,17 +24,17 @@ public class MessageToggle implements VentureCommand { Bukkit.getServer().getConsoleSender().sendMessage(LocalizedMessage.COMMAND_MUST_BE_RUN_BY_PLAYER.toString()); return; } - MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer((Player) sender); + VentureChatPlayer mcp = playerApiService.getOnlineMineverseChatPlayer((Player) sender); if (mcp.getPlayer().hasPermission("venturechat.messagetoggle")) { - if (!mcp.getMessageToggle()) { + if (!mcp.isMessageToggle()) { mcp.setMessageToggle(true); mcp.getPlayer().sendMessage(LocalizedMessage.MESSAGE_TOGGLE_ON.toString()); - MineverseChat.synchronize(mcp, true); + pluginMessageController.synchronize(mcp, true); return; } mcp.setMessageToggle(false); mcp.getPlayer().sendMessage(LocalizedMessage.MESSAGE_TOGGLE_OFF.toString()); - MineverseChat.synchronize(mcp, true); + pluginMessageController.synchronize(mcp, true); return; } mcp.getPlayer().sendMessage(LocalizedMessage.COMMAND_NO_PERMISSION.toString()); diff --git a/src/main/java/mineverse/Aust1n46/chat/command/mute/Mute.java b/src/main/java/venture/Aust1n46/chat/controllers/commands/Mute.java similarity index 87% rename from src/main/java/mineverse/Aust1n46/chat/command/mute/Mute.java rename to src/main/java/venture/Aust1n46/chat/controllers/commands/Mute.java index 149d1fa..d246bdc 100644 --- a/src/main/java/mineverse/Aust1n46/chat/command/mute/Mute.java +++ b/src/main/java/venture/Aust1n46/chat/controllers/commands/Mute.java @@ -1,4 +1,4 @@ -package mineverse.Aust1n46.chat.command.mute; +package venture.Aust1n46.chat.controllers.commands; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; @@ -13,16 +13,23 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.util.StringUtil; -import mineverse.Aust1n46.chat.MineverseChat; -import mineverse.Aust1n46.chat.api.MineverseChatAPI; -import mineverse.Aust1n46.chat.api.MineverseChatPlayer; -import mineverse.Aust1n46.chat.channel.ChatChannel; -import mineverse.Aust1n46.chat.command.VentureCommand; +import com.google.inject.Inject; + import mineverse.Aust1n46.chat.localization.LocalizedMessage; -import mineverse.Aust1n46.chat.utilities.Format; +import mineverse.Aust1n46.chat.utilities.FormatUtils; +import venture.Aust1n46.chat.controllers.PluginMessageController; +import venture.Aust1n46.chat.model.ChatChannel; +import venture.Aust1n46.chat.model.VentureChatPlayer; +import venture.Aust1n46.chat.model.VentureCommand; +import venture.Aust1n46.chat.service.VentureChatPlayerApiService; public class Mute implements VentureCommand { private static final List COMMON_MUTE_TIMES = Collections.unmodifiableList(Arrays.asList(new String[]{"12h", "15m", "1d", "1h", "1m", "30s"})); + + @Inject + private PluginMessageController pluginMessageController; + @Inject + private VentureChatPlayerApiService playerApiService; @Override public void execute(CommandSender sender, String command, String[] args) { @@ -43,7 +50,7 @@ public class Mute implements VentureCommand { String timeString = args[2]; if (Character.isDigit(timeString.charAt(0))) { reasonStartPos = 3; - time = Format.parseTimeStringToMillis(timeString); + time = FormatUtils.parseTimeStringToMillis(timeString); if (time <= 0) { sender.sendMessage(LocalizedMessage.INVALID_TIME.toString().replace("{args}", timeString)); return; @@ -53,13 +60,13 @@ public class Mute implements VentureCommand { for (int a = reasonStartPos; a < args.length; a++) { reasonBuilder.append(args[a] + " "); } - reason = Format.FormatStringAll(reasonBuilder.toString().trim()); + reason = FormatUtils.FormatStringAll(reasonBuilder.toString().trim()); } if (channel.getBungee()) { sendBungeeCordMute(sender, args[1], channel, time, reason); return; } - MineverseChatPlayer playerToMute = MineverseChatAPI.getMineverseChatPlayer(args[1]); + VentureChatPlayer playerToMute = playerApiService.getMineverseChatPlayer(args[1]); if (playerToMute == null || (!playerToMute.isOnline() && !sender.hasPermission("venturechat.mute.offline"))) { sender.sendMessage(LocalizedMessage.PLAYER_OFFLINE.toString().replace("{args}", args[1])); return; @@ -74,7 +81,7 @@ public class Mute implements VentureCommand { if (time > 0) { if (reason.isEmpty()) { playerToMute.addMute(channel.getName(), datetime + time); - String timeString = Format.parseTimeStringFromMillis(time); + String timeString = FormatUtils.parseTimeStringFromMillis(time); sender.sendMessage(LocalizedMessage.MUTE_PLAYER_SENDER_TIME.toString() .replace("{player}", playerToMute.getName()) .replace("{channel_color}", channel.getColor()) @@ -92,7 +99,7 @@ public class Mute implements VentureCommand { return; } else { playerToMute.addMute(channel.getName(), datetime + time, reason); - String timeString = Format.parseTimeStringFromMillis(time); + String timeString = FormatUtils.parseTimeStringFromMillis(time); sender.sendMessage(LocalizedMessage.MUTE_PLAYER_SENDER_TIME_REASON.toString() .replace("{player}", playerToMute.getName()) .replace("{channel_color}", channel.getColor()) @@ -168,11 +175,11 @@ public class Mute implements VentureCommand { if (ChatChannel.isChannel(args[0])) { ChatChannel chatChannelObj = ChatChannel.getChannel(args[0]); if (chatChannelObj.getBungee()) { - StringUtil.copyPartialMatches(args[1], MineverseChatAPI.getNetworkPlayerNames(), completions); + StringUtil.copyPartialMatches(args[1], playerApiService.getNetworkPlayerNames(), completions); Collections.sort(completions); return completions; } - StringUtil.copyPartialMatches(args[1], MineverseChatAPI.getOnlineMineverseChatPlayers().stream().filter(mcp -> !mcp.isMuted(chatChannelObj.getName())).map(MineverseChatPlayer::getName).collect(Collectors.toList()), completions); + StringUtil.copyPartialMatches(args[1], playerApiService.getOnlineMineverseChatPlayers().stream().filter(mcp -> !mcp.isMuted(chatChannelObj.getName())).map(VentureChatPlayer::getName).collect(Collectors.toList()), completions); Collections.sort(completions); return completions; } @@ -201,7 +208,7 @@ public class Mute implements VentureCommand { out.writeUTF(channel.getName()); out.writeLong(time); out.writeUTF(reason); - MineverseChat.sendPluginMessage(byteOutStream); + pluginMessageController.sendPluginMessage(byteOutStream); out.close(); } catch (Exception e) { e.printStackTrace(); diff --git a/src/main/java/mineverse/Aust1n46/chat/command/mute/MuteContainer.java b/src/main/java/venture/Aust1n46/chat/controllers/commands/MuteContainer.java similarity index 94% rename from src/main/java/mineverse/Aust1n46/chat/command/mute/MuteContainer.java rename to src/main/java/venture/Aust1n46/chat/controllers/commands/MuteContainer.java index 841377d..ac01bda 100644 --- a/src/main/java/mineverse/Aust1n46/chat/command/mute/MuteContainer.java +++ b/src/main/java/venture/Aust1n46/chat/controllers/commands/MuteContainer.java @@ -1,4 +1,4 @@ -package mineverse.Aust1n46.chat.command.mute; +package venture.Aust1n46.chat.controllers.commands; public class MuteContainer { private String channel; diff --git a/src/main/java/mineverse/Aust1n46/chat/command/mute/Muteall.java b/src/main/java/venture/Aust1n46/chat/controllers/commands/Muteall.java similarity index 78% rename from src/main/java/mineverse/Aust1n46/chat/command/mute/Muteall.java rename to src/main/java/venture/Aust1n46/chat/controllers/commands/Muteall.java index 048ef17..fa9021b 100644 --- a/src/main/java/mineverse/Aust1n46/chat/command/mute/Muteall.java +++ b/src/main/java/venture/Aust1n46/chat/controllers/commands/Muteall.java @@ -1,16 +1,22 @@ -package mineverse.Aust1n46.chat.command.mute; +package venture.Aust1n46.chat.controllers.commands; import org.bukkit.command.CommandSender; -import mineverse.Aust1n46.chat.MineverseChat; -import mineverse.Aust1n46.chat.api.MineverseChatAPI; -import mineverse.Aust1n46.chat.api.MineverseChatPlayer; -import mineverse.Aust1n46.chat.channel.ChatChannel; -import mineverse.Aust1n46.chat.command.VentureCommand; +import com.google.inject.Inject; + import mineverse.Aust1n46.chat.localization.LocalizedMessage; -import mineverse.Aust1n46.chat.utilities.Format; +import mineverse.Aust1n46.chat.utilities.FormatUtils; +import venture.Aust1n46.chat.controllers.PluginMessageController; +import venture.Aust1n46.chat.model.ChatChannel; +import venture.Aust1n46.chat.model.VentureChatPlayer; +import venture.Aust1n46.chat.model.VentureCommand; +import venture.Aust1n46.chat.service.VentureChatPlayerApiService; public class Muteall implements VentureCommand { + @Inject + private PluginMessageController pluginMessageController; + @Inject + private VentureChatPlayerApiService playerApiService; @Override public void execute(CommandSender sender, String command, String[] args) { @@ -21,7 +27,7 @@ public class Muteall implements VentureCommand { .replace("{args}", "[player] {reason}")); return; } - MineverseChatPlayer player = MineverseChatAPI.getMineverseChatPlayer(args[0]); + VentureChatPlayer player = playerApiService.getMineverseChatPlayer(args[0]); if (player == null || (!player.isOnline() && !sender.hasPermission("venturechat.mute.offline"))) { sender.sendMessage(LocalizedMessage.PLAYER_OFFLINE.toString() .replace("{args}", args[0])); @@ -33,7 +39,7 @@ public class Muteall implements VentureCommand { for (int a = 1; a < args.length; a++) { reasonBuilder.append(args[a] + " "); } - reason = Format.FormatStringAll(reasonBuilder.toString().trim()); + reason = FormatUtils.FormatStringAll(reasonBuilder.toString().trim()); } if (reason.isEmpty()) { boolean bungee = false; @@ -46,7 +52,7 @@ public class Muteall implements VentureCommand { } } if (bungee) { - MineverseChat.synchronize(player, true); + pluginMessageController.synchronize(player, true); } sender.sendMessage(LocalizedMessage.MUTE_PLAYER_ALL_SENDER.toString() .replace("{player}", player.getName())); @@ -66,7 +72,7 @@ public class Muteall implements VentureCommand { } } if (bungee) { - MineverseChat.synchronize(player, true); + pluginMessageController.synchronize(player, true); } sender.sendMessage(LocalizedMessage.MUTE_PLAYER_ALL_SENDER_REASON.toString() .replace("{player}", player.getName()) diff --git a/src/main/java/mineverse/Aust1n46/chat/command/message/Notifications.java b/src/main/java/venture/Aust1n46/chat/controllers/commands/Notifications.java similarity index 67% rename from src/main/java/mineverse/Aust1n46/chat/command/message/Notifications.java rename to src/main/java/venture/Aust1n46/chat/controllers/commands/Notifications.java index 97e557d..71dfc4f 100644 --- a/src/main/java/mineverse/Aust1n46/chat/command/message/Notifications.java +++ b/src/main/java/venture/Aust1n46/chat/controllers/commands/Notifications.java @@ -1,15 +1,19 @@ -package mineverse.Aust1n46.chat.command.message; +package venture.Aust1n46.chat.controllers.commands; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import mineverse.Aust1n46.chat.api.MineverseChatAPI; -import mineverse.Aust1n46.chat.api.MineverseChatPlayer; -import mineverse.Aust1n46.chat.command.VentureCommand; +import com.google.inject.Inject; + import mineverse.Aust1n46.chat.localization.LocalizedMessage; +import venture.Aust1n46.chat.model.VentureChatPlayer; +import venture.Aust1n46.chat.model.VentureCommand; +import venture.Aust1n46.chat.service.VentureChatPlayerApiService; public class Notifications implements VentureCommand { + @Inject + private VentureChatPlayerApiService playerApiService; @Override public void execute(CommandSender sender, String command, String[] args) { @@ -18,7 +22,7 @@ public class Notifications implements VentureCommand { return; } - MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer((Player) sender); + VentureChatPlayer mcp = playerApiService.getOnlineMineverseChatPlayer((Player) sender); if (!mcp.hasNotifications()) { mcp.setNotifications(true); mcp.getPlayer().sendMessage(LocalizedMessage.NOTIFICATIONS_ON.toString()); diff --git a/src/main/java/mineverse/Aust1n46/chat/command/chat/Party.java b/src/main/java/venture/Aust1n46/chat/controllers/commands/Party.java similarity index 83% rename from src/main/java/mineverse/Aust1n46/chat/command/chat/Party.java rename to src/main/java/venture/Aust1n46/chat/controllers/commands/Party.java index db5afed..d5cfb52 100644 --- a/src/main/java/mineverse/Aust1n46/chat/command/chat/Party.java +++ b/src/main/java/venture/Aust1n46/chat/controllers/commands/Party.java @@ -1,19 +1,27 @@ -package mineverse.Aust1n46.chat.command.chat; +package venture.Aust1n46.chat.controllers.commands; -import static mineverse.Aust1n46.chat.MineverseChat.LINE_LENGTH; +import static venture.Aust1n46.chat.VentureChat.LINE_LENGTH; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import mineverse.Aust1n46.chat.MineverseChat; -import mineverse.Aust1n46.chat.api.MineverseChatAPI; -import mineverse.Aust1n46.chat.api.MineverseChatPlayer; -import mineverse.Aust1n46.chat.command.VentureCommand; -import mineverse.Aust1n46.chat.utilities.Format; +import com.google.inject.Inject; + +import mineverse.Aust1n46.chat.utilities.FormatUtils; +import venture.Aust1n46.chat.VentureChat; +import venture.Aust1n46.chat.model.VentureChatPlayer; +import venture.Aust1n46.chat.model.VentureCommand; +import venture.Aust1n46.chat.service.VentureChatPlayerApiService; +import venture.Aust1n46.chat.service.VentureChatFormatService; public class Party implements VentureCommand { - private MineverseChat plugin = MineverseChat.getInstance(); + @Inject + private VentureChat plugin; + @Inject + private VentureChatFormatService formatService; + @Inject + private VentureChatPlayerApiService playerApiService; @Override public void execute(CommandSender sender, String command, String[] args) { @@ -21,7 +29,7 @@ public class Party implements VentureCommand { plugin.getServer().getConsoleSender().sendMessage(ChatColor.RED + "This command must be run by a player."); return; } - MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer((Player) sender); + VentureChatPlayer mcp = playerApiService.getOnlineMineverseChatPlayer((Player) sender); if(!mcp.getPlayer().hasPermission("venturechat.party")) { mcp.getPlayer().sendMessage(ChatColor.RED + "You do not have permission for this command!"); return; @@ -36,7 +44,7 @@ public class Party implements VentureCommand { if(mcp.isHost()) { mcp.setHost(false); mcp.getPlayer().sendMessage(ChatColor.GREEN + "You are no longer hosting a party."); - for(MineverseChatPlayer player : MineverseChatAPI.getMineverseChatPlayers()) { + for(VentureChatPlayer player : playerApiService.getMineverseChatPlayers()) { if(player.hasParty() && player.getParty().equals(mcp.getParty())) { player.setParty(null); if(player.isOnline()) { @@ -52,7 +60,7 @@ public class Party implements VentureCommand { } mcp.setHost(true); mcp.getPlayer().sendMessage(ChatColor.GREEN + "You are now hosting a party."); - mcp.setParty(mcp.getUUID()); + mcp.setParty(mcp.getUuid()); break; } case "join": { @@ -61,7 +69,7 @@ public class Party implements VentureCommand { return; } if(args.length > 1) { - MineverseChatPlayer player = MineverseChatAPI.getMineverseChatPlayer(args[1]); + VentureChatPlayer player = playerApiService.getMineverseChatPlayer(args[1]); if(player != null) { if(player.isHost()) { if(!mcp.hasParty()) { @@ -73,11 +81,11 @@ public class Party implements VentureCommand { * "'s party."); break; } */ mcp.getPlayer().sendMessage(ChatColor.GREEN + "Joined " + player.getName() + "'s party."); - mcp.setParty(player.getUUID()); + mcp.setParty(player.getUuid()); player.getPlayer().sendMessage(ChatColor.GREEN + mcp.getName() + " joined your party."); break; } - mcp.getPlayer().sendMessage(ChatColor.RED + "You are already in " + MineverseChatAPI.getMineverseChatPlayer(mcp.getParty()).getName() + "'s party."); + mcp.getPlayer().sendMessage(ChatColor.RED + "You are already in " + playerApiService.getMineverseChatPlayer(mcp.getParty()).getName() + "'s party."); break; } mcp.getPlayer().sendMessage(ChatColor.RED + player.getName() + " is not hosting a party."); @@ -95,11 +103,11 @@ public class Party implements VentureCommand { return; } if(mcp.hasParty()) { - mcp.getPlayer().sendMessage(ChatColor.GREEN + "Leaving " + MineverseChatAPI.getMineverseChatPlayer(mcp.getParty()).getName() + "'s party."); + mcp.getPlayer().sendMessage(ChatColor.GREEN + "Leaving " + playerApiService.getMineverseChatPlayer(mcp.getParty()).getName() + "'s party."); mcp.setParty(null); if(mcp.isHost()) { - for(MineverseChatPlayer player : MineverseChatAPI.getMineverseChatPlayers()) { - if(player.hasParty() && player.getParty().equals(mcp.getUUID()) && !player.getName().equals(mcp.getName())) { + for(VentureChatPlayer player : playerApiService.getMineverseChatPlayers()) { + if(player.hasParty() && player.getParty().equals(mcp.getUuid()) && !player.getName().equals(mcp.getName())) { player.setParty(null); if(player.isOnline()) { player.getPlayer().sendMessage(ChatColor.RED + mcp.getName() + " is no longer hosting a party."); @@ -123,10 +131,10 @@ public class Party implements VentureCommand { } if(mcp.isHost()) { if(args.length > 1) { - MineverseChatPlayer player = MineverseChatAPI.getMineverseChatPlayer(args[1]); + VentureChatPlayer player = playerApiService.getMineverseChatPlayer(args[1]); if(player != null) { if(!player.getName().equals(mcp.getName())) { - if(player.hasParty() && player.getParty().equals(mcp.getUUID())) { + if(player.hasParty() && player.getParty().equals(mcp.getUuid())) { player.setParty(null); player.getPlayer().sendMessage(ChatColor.RED + "You have been kicked out of " + mcp.getName() + "'s party."); mcp.getPlayer().sendMessage(ChatColor.RED + "You have kicked " + player.getName() + " out of your party."); @@ -192,7 +200,7 @@ public class Party implements VentureCommand { return; } if(mcp.hasParty() && !mcp.isHost()) { - mcp.getPlayer().sendMessage(ChatColor.GREEN + "You are in " + MineverseChatAPI.getMineverseChatPlayer(mcp.getParty()).getName() + "'s party."); + mcp.getPlayer().sendMessage(ChatColor.GREEN + "You are in " + playerApiService.getMineverseChatPlayer(mcp.getParty()).getName() + "'s party."); } else if(mcp.isHost()) { mcp.getPlayer().sendMessage(ChatColor.GREEN + "You are hosting a party."); @@ -218,9 +226,9 @@ public class Party implements VentureCommand { break; } if(mcp.hasConversation()) { - String tellChat = MineverseChatAPI.getMineverseChatPlayer(mcp.getConversation()).getName(); + String tellChat = playerApiService.getMineverseChatPlayer(mcp.getConversation()).getName(); mcp.setConversation(null); - for(MineverseChatPlayer p : MineverseChatAPI.getOnlineMineverseChatPlayers()) { + for(VentureChatPlayer p : playerApiService.getOnlineMineverseChatPlayers()) { if(p.isSpy()) { p.getPlayer().sendMessage(mcp.getName() + " is no longer in a private conversation with " + tellChat + "."); } @@ -245,13 +253,13 @@ public class Party implements VentureCommand { return; } if(args.length > 1) { - MineverseChatPlayer player = MineverseChatAPI.getMineverseChatPlayer(args[1]); + VentureChatPlayer player = playerApiService.getMineverseChatPlayer(args[1]); if(player != null) { if(player.isHost()) { String members = ""; long linecount = LINE_LENGTH; - for(MineverseChatPlayer p : MineverseChatAPI.getMineverseChatPlayers()) { - if(p.getParty() != null && p.getParty().equals(player.getUUID())) { + for(VentureChatPlayer p : playerApiService.getMineverseChatPlayers()) { + if(p.getParty() != null && p.getParty().equals(player.getUuid())) { if(members.length() + p.getName().length() > linecount) { members += "\n"; linecount = linecount + LINE_LENGTH; @@ -288,25 +296,25 @@ public class Party implements VentureCommand { for(int x = 0; x < args.length; x++) { if(args[x].length() > 0) msg += " " + args[x]; } - if(mcp.hasFilter()) { - msg = Format.FilterChat(msg); + if(mcp.isFilter()) { + msg = formatService.FilterChat(msg); } if(mcp.getPlayer().hasPermission("venturechat.color.legacy")) { - msg = Format.FormatStringLegacyColor(msg); + msg = FormatUtils.FormatStringLegacyColor(msg); } if(mcp.getPlayer().hasPermission("venturechat.color")) { - msg = Format.FormatStringColor(msg); + msg = FormatUtils.FormatStringColor(msg); } if(mcp.getPlayer().hasPermission("venturechat.format")) { - msg = Format.FormatString(msg); + msg = FormatUtils.FormatString(msg); } if(plugin.getConfig().getString("partyformat").equalsIgnoreCase("Default")) { - partyformat = ChatColor.GREEN + "[" + MineverseChatAPI.getMineverseChatPlayer(mcp.getParty()).getName() + "'s Party] " + mcp.getName() + ":" + msg; + partyformat = ChatColor.GREEN + "[" + playerApiService.getMineverseChatPlayer(mcp.getParty()).getName() + "'s Party] " + mcp.getName() + ":" + msg; } else { - partyformat = Format.FormatStringAll(plugin.getConfig().getString("partyformat").replace("{host}", MineverseChatAPI.getMineverseChatPlayer(mcp.getParty()).getName()).replace("{player}", mcp.getName())) + msg; + partyformat = FormatUtils.FormatStringAll(plugin.getConfig().getString("partyformat").replace("{host}", playerApiService.getMineverseChatPlayer(mcp.getParty()).getName()).replace("{player}", mcp.getName())) + msg; } - for(MineverseChatPlayer p : MineverseChatAPI.getOnlineMineverseChatPlayers()) { + for(VentureChatPlayer p : playerApiService.getOnlineMineverseChatPlayers()) { if((p.getParty().equals(mcp.getParty()) || p.isSpy())) { p.getPlayer().sendMessage(partyformat); } diff --git a/src/main/java/mineverse/Aust1n46/chat/command/chat/RangedSpy.java b/src/main/java/venture/Aust1n46/chat/controllers/commands/RangedSpy.java similarity index 71% rename from src/main/java/mineverse/Aust1n46/chat/command/chat/RangedSpy.java rename to src/main/java/venture/Aust1n46/chat/controllers/commands/RangedSpy.java index 1a6e0ff..ea3a6dd 100644 --- a/src/main/java/mineverse/Aust1n46/chat/command/chat/RangedSpy.java +++ b/src/main/java/venture/Aust1n46/chat/controllers/commands/RangedSpy.java @@ -1,15 +1,19 @@ -package mineverse.Aust1n46.chat.command.chat; +package venture.Aust1n46.chat.controllers.commands; -import mineverse.Aust1n46.chat.api.MineverseChatAPI; -import mineverse.Aust1n46.chat.api.MineverseChatPlayer; -import mineverse.Aust1n46.chat.command.VentureCommand; import mineverse.Aust1n46.chat.localization.LocalizedMessage; +import venture.Aust1n46.chat.model.VentureChatPlayer; +import venture.Aust1n46.chat.model.VentureCommand; +import venture.Aust1n46.chat.service.VentureChatPlayerApiService; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.google.inject.Inject; + public class RangedSpy implements VentureCommand { + @Inject + private VentureChatPlayerApiService playerApiService; @Override public void execute(CommandSender sender, String command, String[] args) { @@ -17,7 +21,7 @@ public class RangedSpy implements VentureCommand { Bukkit.getServer().getConsoleSender().sendMessage(LocalizedMessage.COMMAND_MUST_BE_RUN_BY_PLAYER.toString()); return; } - MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer((Player) sender); + VentureChatPlayer mcp = playerApiService.getOnlineMineverseChatPlayer((Player) sender); if (mcp.getPlayer().hasPermission("venturechat.rangedspy")) { if (!mcp.getRangedSpy()) { mcp.setRangedSpy(true); diff --git a/src/main/java/mineverse/Aust1n46/chat/command/chat/Removemessage.java b/src/main/java/venture/Aust1n46/chat/controllers/commands/Removemessage.java similarity index 63% rename from src/main/java/mineverse/Aust1n46/chat/command/chat/Removemessage.java rename to src/main/java/venture/Aust1n46/chat/controllers/commands/Removemessage.java index 8197a60..d6fef21 100644 --- a/src/main/java/mineverse/Aust1n46/chat/command/chat/Removemessage.java +++ b/src/main/java/venture/Aust1n46/chat/controllers/commands/Removemessage.java @@ -1,4 +1,4 @@ -package mineverse.Aust1n46.chat.command.chat; +package venture.Aust1n46.chat.controllers.commands; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; @@ -7,15 +7,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import mineverse.Aust1n46.chat.ChatMessage; -import mineverse.Aust1n46.chat.MineverseChat; -import mineverse.Aust1n46.chat.api.MineverseChatAPI; -import mineverse.Aust1n46.chat.api.MineverseChatPlayer; -import mineverse.Aust1n46.chat.channel.ChatChannel; -import mineverse.Aust1n46.chat.command.VentureCommand; -import mineverse.Aust1n46.chat.localization.LocalizedMessage; -import mineverse.Aust1n46.chat.utilities.Format; - import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -23,13 +14,38 @@ import org.bukkit.scheduler.BukkitRunnable; import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.wrappers.WrappedChatComponent; +import com.google.inject.Inject; + +import mineverse.Aust1n46.chat.localization.LocalizedMessage; +import mineverse.Aust1n46.chat.utilities.FormatUtils; +import venture.Aust1n46.chat.VentureChat; +import venture.Aust1n46.chat.controllers.PluginMessageController; +import venture.Aust1n46.chat.model.ChatChannel; +import venture.Aust1n46.chat.model.ChatMessage; +import venture.Aust1n46.chat.model.VentureChatPlayer; +import venture.Aust1n46.chat.model.VentureCommand; +import venture.Aust1n46.chat.service.VentureChatPlayerApiService; +import venture.Aust1n46.chat.service.VentureChatFormatService; public class Removemessage implements VentureCommand { - private MineverseChat plugin = MineverseChat.getInstance(); - private PacketContainer emptyLinePacketContainer = Format.createPacketPlayOutChat("{\"extra\":[\" \"],\"text\":\"\"}"); - private WrappedChatComponent messageDeletedComponentPlayer = WrappedChatComponent.fromJson("{\"text\":\"\",\"extra\":[{\"text\":\"\",\"extra\":[" + Format.convertToJsonColors(Format.FormatStringAll(plugin.getConfig().getString("messageremovertext"))) + "],\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[" + Format.convertToJsonColors(Format.FormatStringAll(plugin.getConfig().getString("messageremoverpermissions"))) + "]}}}]}"); - ; + @Inject + private VentureChat plugin; + @Inject + private VentureChatFormatService formatService; + @Inject + private PluginMessageController pluginMessageController; + @Inject + private VentureChatPlayerApiService playerApiService; + + private PacketContainer emptyLinePacketContainer; + private WrappedChatComponent messageDeletedComponentPlayer; + @Inject + public void postConstruct() { + emptyLinePacketContainer = formatService.createPacketPlayOutChat("{\"extra\":[\" \"],\"text\":\"\"}"); + messageDeletedComponentPlayer = WrappedChatComponent.fromJson("{\"text\":\"\",\"extra\":[{\"text\":\"\",\"extra\":[" + formatService.convertToJsonColors(FormatUtils.FormatStringAll(plugin.getConfig().getString("messageremovertext"))) + "],\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[" + formatService.convertToJsonColors(FormatUtils.FormatStringAll(plugin.getConfig().getString("messageremoverpermissions"))) + "]}}}]}"); + } + @Override @SuppressWarnings({"unchecked", "rawtypes"}) public void execute(CommandSender sender, String command, String[] args) { @@ -46,13 +62,13 @@ public class Removemessage implements VentureCommand { sender.sendMessage(LocalizedMessage.INVALID_HASH.toString()); return; } - if (args.length > 1 && ChatChannel.isChannel(args[1]) && ChatChannel.getChannel(args[1]).getBungee() && sender instanceof Player) { + if (args.length > 1 && ChatChannel.isChannel(args[1]) && ChatChannel.getChannel(args[1]).getBungee()) { ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream(); DataOutputStream out = new DataOutputStream(byteOutStream); try { out.writeUTF("RemoveMessage"); out.writeUTF(String.valueOf(hash)); - ((Player) sender).sendPluginMessage(plugin, MineverseChat.PLUGIN_MESSAGING_CHANNEL, byteOutStream.toByteArray()); + pluginMessageController.sendPluginMessage(byteOutStream); out.close(); } catch (Exception e) { e.printStackTrace(); @@ -62,7 +78,7 @@ public class Removemessage implements VentureCommand { new BukkitRunnable() { public void run() { final Map> packets = new HashMap(); - for (MineverseChatPlayer p : MineverseChatAPI.getOnlineMineverseChatPlayers()) { + for (VentureChatPlayer p : playerApiService.getOnlineMineverseChatPlayers()) { List messages = p.getMessages(); List playerPackets = new ArrayList(); boolean resend = false; @@ -74,22 +90,22 @@ public class Removemessage implements VentureCommand { WrappedChatComponent removedComponent = p.getPlayer().hasPermission("venturechat.message.bypass") ? Removemessage.this.getMessageDeletedChatComponentAdmin(message) : Removemessage.this.getMessageDeletedChatComponentPlayer(); message.setComponent(removedComponent); message.setHash(-1); - playerPackets.add(Format.createPacketPlayOutChat(removedComponent)); + playerPackets.add(formatService.createPacketPlayOutChat(removedComponent)); resend = true; continue; } - if (message.getMessage().contains(ChatColor.stripColor(Format.FormatStringAll(plugin.getConfig().getString("guiicon"))))) { - String submessage = message.getMessage().substring(0, message.getMessage().length() - ChatColor.stripColor(Format.FormatStringAll(plugin.getConfig().getString("guiicon"))).length()); + if (message.getMessage().contains(ChatColor.stripColor(FormatUtils.FormatStringAll(plugin.getConfig().getString("guiicon"))))) { + String submessage = message.getMessage().substring(0, message.getMessage().length() - ChatColor.stripColor(FormatUtils.FormatStringAll(plugin.getConfig().getString("guiicon"))).length()); if (submessage.hashCode() == hash) { WrappedChatComponent removedComponent = p.getPlayer().hasPermission("venturechat.message.bypass") ? Removemessage.this.getMessageDeletedChatComponentAdmin(message) : Removemessage.this.getMessageDeletedChatComponentPlayer(); message.setComponent(removedComponent); message.setHash(-1); - playerPackets.add(Format.createPacketPlayOutChat(removedComponent)); + playerPackets.add(formatService.createPacketPlayOutChat(removedComponent)); resend = true; continue; } } - playerPackets.add(Format.createPacketPlayOutChat(message.getComponent())); + playerPackets.add(formatService.createPacketPlayOutChat(message.getComponent())); } if (resend) { @@ -101,7 +117,7 @@ public class Removemessage implements VentureCommand { for (Player p : packets.keySet()) { List pPackets = packets.get(p); for (PacketContainer c : pPackets) { - Format.sendPacketPlayOutChat(p, c); + formatService.sendPacketPlayOutChat(p, c); } } } @@ -116,6 +132,6 @@ public class Removemessage implements VentureCommand { } public WrappedChatComponent getMessageDeletedChatComponentAdmin(ChatMessage message) { - return WrappedChatComponent.fromJson("[{\"text\":\"\",\"extra\":[{\"text\":\"\",\"extra\":[" + Format.convertToJsonColors(Format.FormatStringAll(plugin.getConfig().getString("messageremovertext"))) + "],\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\"," + message.getColoredMessage() + "}}}]}]"); + return WrappedChatComponent.fromJson("[{\"text\":\"\",\"extra\":[{\"text\":\"\",\"extra\":[" + formatService.convertToJsonColors(FormatUtils.FormatStringAll(plugin.getConfig().getString("messageremovertext"))) + "],\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\"," + message.getColoredMessage() + "}}}]}]"); } } diff --git a/src/main/java/mineverse/Aust1n46/chat/command/message/Reply.java b/src/main/java/venture/Aust1n46/chat/controllers/commands/Reply.java similarity index 57% rename from src/main/java/mineverse/Aust1n46/chat/command/message/Reply.java rename to src/main/java/venture/Aust1n46/chat/controllers/commands/Reply.java index c9a05cd..3e85536 100644 --- a/src/main/java/mineverse/Aust1n46/chat/command/message/Reply.java +++ b/src/main/java/venture/Aust1n46/chat/controllers/commands/Reply.java @@ -1,4 +1,4 @@ -package mineverse.Aust1n46.chat.command.message; +package venture.Aust1n46.chat.controllers.commands; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; @@ -6,16 +6,27 @@ import java.io.DataOutputStream; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import com.google.inject.Inject; + import me.clip.placeholderapi.PlaceholderAPI; -import mineverse.Aust1n46.chat.MineverseChat; -import mineverse.Aust1n46.chat.api.MineverseChatAPI; -import mineverse.Aust1n46.chat.api.MineverseChatPlayer; -import mineverse.Aust1n46.chat.command.VentureCommand; import mineverse.Aust1n46.chat.localization.LocalizedMessage; -import mineverse.Aust1n46.chat.utilities.Format; +import mineverse.Aust1n46.chat.utilities.FormatUtils; +import venture.Aust1n46.chat.VentureChat; +import venture.Aust1n46.chat.controllers.PluginMessageController; +import venture.Aust1n46.chat.model.VentureChatPlayer; +import venture.Aust1n46.chat.model.VentureCommand; +import venture.Aust1n46.chat.service.VentureChatPlayerApiService; +import venture.Aust1n46.chat.service.VentureChatFormatService; public class Reply implements VentureCommand { - private MineverseChat plugin = MineverseChat.getInstance(); + @Inject + private VentureChat plugin; + @Inject + private VentureChatFormatService formatService; + @Inject + private PluginMessageController pluginMessageController; + @Inject + private VentureChatPlayerApiService playerApiService; @Override public void execute(CommandSender sender, String command, String[] args) { @@ -23,7 +34,7 @@ public class Reply implements VentureCommand { plugin.getServer().getConsoleSender().sendMessage(LocalizedMessage.COMMAND_MUST_BE_RUN_BY_PLAYER.toString()); return; } - MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer((Player) sender); + VentureChatPlayer mcp = playerApiService.getOnlineMineverseChatPlayer((Player) sender); if (args.length > 0) { if (mcp.hasReplyPlayer()) { if (plugin.getConfig().getBoolean("bungeecordmessaging", true)) { @@ -31,7 +42,7 @@ public class Reply implements VentureCommand { return; } - MineverseChatPlayer player = MineverseChatAPI.getOnlineMineverseChatPlayer(mcp.getReplyPlayer()); + VentureChatPlayer player = playerApiService.getOnlineMineverseChatPlayer(mcp.getReplyPlayer()); if (player == null) { mcp.getPlayer().sendMessage(LocalizedMessage.NO_PLAYER_TO_REPLY_TO.toString()); return; @@ -40,12 +51,12 @@ public class Reply implements VentureCommand { mcp.getPlayer().sendMessage(LocalizedMessage.NO_PLAYER_TO_REPLY_TO.toString()); return; } - if (player.getIgnores().contains(mcp.getUUID())) { + if (player.getIgnores().contains(mcp.getUuid())) { mcp.getPlayer().sendMessage(LocalizedMessage.IGNORING_MESSAGE.toString() .replace("{player}", player.getName())); return; } - if (!player.getMessageToggle()) { + if (!player.isMessageToggle()) { mcp.getPlayer().sendMessage(LocalizedMessage.BLOCKING_MESSAGE.toString() .replace("{player}", player.getName())); return; @@ -57,29 +68,29 @@ public class Reply implements VentureCommand { if (args.length > 0) { for (int r = 0; r < args.length; r++) msg += " " + args[r]; - if (mcp.hasFilter()) { - msg = Format.FilterChat(msg); + if (mcp.isFilter()) { + msg = formatService.FilterChat(msg); } if (mcp.getPlayer().hasPermission("venturechat.color.legacy")) { - msg = Format.FormatStringLegacyColor(msg); + msg = FormatUtils.FormatStringLegacyColor(msg); } if (mcp.getPlayer().hasPermission("venturechat.color")) { - msg = Format.FormatStringColor(msg); + msg = FormatUtils.FormatStringColor(msg); } if (mcp.getPlayer().hasPermission("venturechat.format")) { - msg = Format.FormatString(msg); + msg = FormatUtils.FormatString(msg); } - send = Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(mcp.getPlayer(), plugin.getConfig().getString("replyformatfrom").replaceAll("sender_", ""))); - echo = Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(mcp.getPlayer(), plugin.getConfig().getString("replyformatto").replaceAll("sender_", ""))); - spy = Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(mcp.getPlayer(), plugin.getConfig().getString("replyformatspy").replaceAll("sender_", ""))); + send = FormatUtils.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(mcp.getPlayer(), plugin.getConfig().getString("replyformatfrom").replaceAll("sender_", ""))); + echo = FormatUtils.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(mcp.getPlayer(), plugin.getConfig().getString("replyformatto").replaceAll("sender_", ""))); + spy = FormatUtils.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(mcp.getPlayer(), plugin.getConfig().getString("replyformatspy").replaceAll("sender_", ""))); - send = Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(player.getPlayer(), send.replaceAll("receiver_", ""))) + msg; - echo = Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(player.getPlayer(), echo.replaceAll("receiver_", ""))) + msg; - spy = Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(player.getPlayer(), spy.replaceAll("receiver_", ""))) + msg; + send = FormatUtils.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(player.getPlayer(), send.replaceAll("receiver_", ""))) + msg; + echo = FormatUtils.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(player.getPlayer(), echo.replaceAll("receiver_", ""))) + msg; + spy = FormatUtils.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(player.getPlayer(), spy.replaceAll("receiver_", ""))) + msg; if (!mcp.getPlayer().hasPermission("venturechat.spy.override")) { - for (MineverseChatPlayer p : MineverseChatAPI.getOnlineMineverseChatPlayers()) { + for (VentureChatPlayer p : playerApiService.getOnlineMineverseChatPlayers()) { if (p.getName().equals(mcp.getName()) || p.getName().equals(player.getName())) { continue; } @@ -91,9 +102,9 @@ public class Reply implements VentureCommand { player.getPlayer().sendMessage(send); mcp.getPlayer().sendMessage(echo); if (player.hasNotifications()) { - Format.playMessageSound(player); + formatService.playMessageSound(player); } - player.setReplyPlayer(mcp.getUUID()); + player.setReplyPlayer(mcp.getUuid()); return; } } @@ -105,7 +116,7 @@ public class Reply implements VentureCommand { .replace("{args}", "[message]")); } - private void sendBungeeCordReply(MineverseChatPlayer mcp, String[] args) { + private void sendBungeeCordReply(VentureChatPlayer mcp, String[] args) { ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream(); DataOutputStream out = new DataOutputStream(byteOutStream); StringBuilder msgBuilder = new StringBuilder(); @@ -113,36 +124,36 @@ public class Reply implements VentureCommand { msgBuilder.append(" " + args[r]); } String msg = msgBuilder.toString(); - if (mcp.hasFilter()) { - msg = Format.FilterChat(msg); + if (mcp.isFilter()) { + msg = formatService.FilterChat(msg); } if (mcp.getPlayer().hasPermission("venturechat.color.legacy")) { - msg = Format.FormatStringLegacyColor(msg); + msg = FormatUtils.FormatStringLegacyColor(msg); } if (mcp.getPlayer().hasPermission("venturechat.color")) { - msg = Format.FormatStringColor(msg); + msg = FormatUtils.FormatStringColor(msg); } if (mcp.getPlayer().hasPermission("venturechat.format")) { - msg = Format.FormatString(msg); + msg = FormatUtils.FormatString(msg); } - String send = Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(mcp.getPlayer(), plugin.getConfig().getString("replyformatfrom").replaceAll("sender_", ""))); - String echo = Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(mcp.getPlayer(), plugin.getConfig().getString("replyformatto").replaceAll("sender_", ""))); + String send = FormatUtils.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(mcp.getPlayer(), plugin.getConfig().getString("replyformatfrom").replaceAll("sender_", ""))); + String echo = FormatUtils.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(mcp.getPlayer(), plugin.getConfig().getString("replyformatto").replaceAll("sender_", ""))); String spy = "VentureChat:NoSpy"; if (!mcp.getPlayer().hasPermission("venturechat.spy.override")) { - spy = Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(mcp.getPlayer(), plugin.getConfig().getString("replyformatspy").replaceAll("sender_", ""))); + spy = FormatUtils.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(mcp.getPlayer(), plugin.getConfig().getString("replyformatspy").replaceAll("sender_", ""))); } try { out.writeUTF("Message"); out.writeUTF("Send"); - out.writeUTF(MineverseChatAPI.getMineverseChatPlayer(mcp.getReplyPlayer()).getName()); - out.writeUTF(mcp.getUUID().toString()); + out.writeUTF(playerApiService.getMineverseChatPlayer(mcp.getReplyPlayer()).getName()); + out.writeUTF(mcp.getUuid().toString()); out.writeUTF(mcp.getName()); out.writeUTF(send); out.writeUTF(echo); out.writeUTF(spy); out.writeUTF(msg); - mcp.getPlayer().sendPluginMessage(plugin, MineverseChat.PLUGIN_MESSAGING_CHANNEL, byteOutStream.toByteArray()); + pluginMessageController.sendPluginMessage(byteOutStream); out.close(); } catch (Exception e) { e.printStackTrace(); diff --git a/src/main/java/mineverse/Aust1n46/chat/command/chat/Setchannel.java b/src/main/java/venture/Aust1n46/chat/controllers/commands/Setchannel.java similarity index 76% rename from src/main/java/mineverse/Aust1n46/chat/command/chat/Setchannel.java rename to src/main/java/venture/Aust1n46/chat/controllers/commands/Setchannel.java index fb9a969..b70044d 100644 --- a/src/main/java/mineverse/Aust1n46/chat/command/chat/Setchannel.java +++ b/src/main/java/venture/Aust1n46/chat/controllers/commands/Setchannel.java @@ -1,15 +1,21 @@ -package mineverse.Aust1n46.chat.command.chat; +package venture.Aust1n46.chat.controllers.commands; import org.bukkit.command.CommandSender; -import mineverse.Aust1n46.chat.MineverseChat; -import mineverse.Aust1n46.chat.api.MineverseChatAPI; -import mineverse.Aust1n46.chat.api.MineverseChatPlayer; -import mineverse.Aust1n46.chat.channel.ChatChannel; -import mineverse.Aust1n46.chat.command.VentureCommand; +import com.google.inject.Inject; + import mineverse.Aust1n46.chat.localization.LocalizedMessage; +import venture.Aust1n46.chat.controllers.PluginMessageController; +import venture.Aust1n46.chat.model.ChatChannel; +import venture.Aust1n46.chat.model.VentureChatPlayer; +import venture.Aust1n46.chat.model.VentureCommand; +import venture.Aust1n46.chat.service.VentureChatPlayerApiService; public class Setchannel implements VentureCommand { + @Inject + private PluginMessageController pluginMessageController; + @Inject + private VentureChatPlayerApiService playerApiService; @Override public void execute(CommandSender sender, String command, String[] args) { @@ -20,7 +26,7 @@ public class Setchannel implements VentureCommand { .replace("{args}", "[player] [channel]")); return; } - MineverseChatPlayer player = MineverseChatAPI.getMineverseChatPlayer(args[0]); + VentureChatPlayer player = playerApiService.getMineverseChatPlayer(args[0]); if (player == null) { sender.sendMessage(LocalizedMessage.PLAYER_OFFLINE.toString() .replace("{args}", args[0])); @@ -53,16 +59,16 @@ public class Setchannel implements VentureCommand { .replace("{channel_color}", channel.getColor() + "") .replace("{channel_name}", channel.getName())); if (player.hasConversation()) { - for (MineverseChatPlayer p : MineverseChatAPI.getOnlineMineverseChatPlayers()) { + for (VentureChatPlayer p : playerApiService.getOnlineMineverseChatPlayers()) { if (p.isSpy()) { p.getPlayer().sendMessage(LocalizedMessage.EXIT_PRIVATE_CONVERSATION_SPY.toString() .replace("{player_sender}", player.getName()) - .replace("{player_receiver}", MineverseChatAPI.getMineverseChatPlayer(player.getConversation()).getName())); + .replace("{player_receiver}", playerApiService.getMineverseChatPlayer(player.getConversation()).getName())); } } if (player.isOnline()) player.getPlayer().sendMessage(LocalizedMessage.EXIT_PRIVATE_CONVERSATION.toString() - .replace("{player_receiver}", MineverseChatAPI.getMineverseChatPlayer(player.getConversation()).getName())); + .replace("{player_receiver}", playerApiService.getMineverseChatPlayer(player.getConversation()).getName())); else player.setModified(true); player.setConversation(null); @@ -75,7 +81,7 @@ public class Setchannel implements VentureCommand { player.setModified(true); } if (channel.getBungee()) { - MineverseChat.synchronize(player, true); + pluginMessageController.synchronize(player, true); } return; } diff --git a/src/main/java/mineverse/Aust1n46/chat/command/chat/Setchannelall.java b/src/main/java/venture/Aust1n46/chat/controllers/commands/Setchannelall.java similarity index 76% rename from src/main/java/mineverse/Aust1n46/chat/command/chat/Setchannelall.java rename to src/main/java/venture/Aust1n46/chat/controllers/commands/Setchannelall.java index 94543c1..6a9e93f 100644 --- a/src/main/java/mineverse/Aust1n46/chat/command/chat/Setchannelall.java +++ b/src/main/java/venture/Aust1n46/chat/controllers/commands/Setchannelall.java @@ -1,15 +1,21 @@ -package mineverse.Aust1n46.chat.command.chat; +package venture.Aust1n46.chat.controllers.commands; import org.bukkit.command.CommandSender; -import mineverse.Aust1n46.chat.MineverseChat; -import mineverse.Aust1n46.chat.api.MineverseChatAPI; -import mineverse.Aust1n46.chat.api.MineverseChatPlayer; -import mineverse.Aust1n46.chat.channel.ChatChannel; -import mineverse.Aust1n46.chat.command.VentureCommand; +import com.google.inject.Inject; + import mineverse.Aust1n46.chat.localization.LocalizedMessage; +import venture.Aust1n46.chat.controllers.PluginMessageController; +import venture.Aust1n46.chat.model.ChatChannel; +import venture.Aust1n46.chat.model.VentureChatPlayer; +import venture.Aust1n46.chat.model.VentureCommand; +import venture.Aust1n46.chat.service.VentureChatPlayerApiService; public class Setchannelall implements VentureCommand { + @Inject + private PluginMessageController pluginMessageController; + @Inject + private VentureChatPlayerApiService playerApiService; @Override public void execute(CommandSender sender, String command, String[] args) { @@ -20,7 +26,7 @@ public class Setchannelall implements VentureCommand { .replace("{args}", "[player]")); return; } - MineverseChatPlayer player = MineverseChatAPI.getMineverseChatPlayer(args[0]); + VentureChatPlayer player = playerApiService.getMineverseChatPlayer(args[0]); if (player == null) { sender.sendMessage(LocalizedMessage.PLAYER_OFFLINE.toString() .replace("{args}", args[0])); @@ -52,7 +58,7 @@ public class Setchannelall implements VentureCommand { else player.setModified(true); if (isThereABungeeChannel) { - MineverseChat.synchronize(player, true); + pluginMessageController.synchronize(player, true); } return; } diff --git a/src/main/java/mineverse/Aust1n46/chat/command/message/Spy.java b/src/main/java/venture/Aust1n46/chat/controllers/commands/Spy.java similarity index 59% rename from src/main/java/mineverse/Aust1n46/chat/command/message/Spy.java rename to src/main/java/venture/Aust1n46/chat/controllers/commands/Spy.java index 64ab015..dffc044 100644 --- a/src/main/java/mineverse/Aust1n46/chat/command/message/Spy.java +++ b/src/main/java/venture/Aust1n46/chat/controllers/commands/Spy.java @@ -1,16 +1,22 @@ -package mineverse.Aust1n46.chat.command.message; +package venture.Aust1n46.chat.controllers.commands; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import mineverse.Aust1n46.chat.MineverseChat; -import mineverse.Aust1n46.chat.api.MineverseChatAPI; -import mineverse.Aust1n46.chat.api.MineverseChatPlayer; -import mineverse.Aust1n46.chat.command.VentureCommand; +import com.google.inject.Inject; + import mineverse.Aust1n46.chat.localization.LocalizedMessage; +import venture.Aust1n46.chat.controllers.PluginMessageController; +import venture.Aust1n46.chat.model.VentureChatPlayer; +import venture.Aust1n46.chat.model.VentureCommand; +import venture.Aust1n46.chat.service.VentureChatPlayerApiService; public class Spy implements VentureCommand { + @Inject + private PluginMessageController pluginMessageController; + @Inject + private VentureChatPlayerApiService playerApiService; @Override public void execute(CommandSender sender, String command, String[] args) { @@ -18,17 +24,17 @@ public class Spy implements VentureCommand { Bukkit.getServer().getConsoleSender().sendMessage(LocalizedMessage.COMMAND_MUST_BE_RUN_BY_PLAYER.toString()); return; } - MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer((Player) sender); + VentureChatPlayer mcp = playerApiService.getOnlineMineverseChatPlayer((Player) sender); if (mcp.getPlayer().hasPermission("venturechat.spy")) { if (!mcp.isSpy()) { mcp.setSpy(true); mcp.getPlayer().sendMessage(LocalizedMessage.SPY_ON.toString()); - MineverseChat.synchronize(mcp, true); + pluginMessageController.synchronize(mcp, true); return; } mcp.setSpy(false); mcp.getPlayer().sendMessage(LocalizedMessage.SPY_OFF.toString()); - MineverseChat.synchronize(mcp, true); + pluginMessageController.synchronize(mcp, true); return; } mcp.getPlayer().sendMessage(LocalizedMessage.COMMAND_NO_PERMISSION.toString()); diff --git a/src/main/java/mineverse/Aust1n46/chat/command/mute/Unmute.java b/src/main/java/venture/Aust1n46/chat/controllers/commands/Unmute.java similarity index 81% rename from src/main/java/mineverse/Aust1n46/chat/command/mute/Unmute.java rename to src/main/java/venture/Aust1n46/chat/controllers/commands/Unmute.java index 3070e09..6583ac8 100644 --- a/src/main/java/mineverse/Aust1n46/chat/command/mute/Unmute.java +++ b/src/main/java/venture/Aust1n46/chat/controllers/commands/Unmute.java @@ -1,4 +1,4 @@ -package mineverse.Aust1n46.chat.command.mute; +package venture.Aust1n46.chat.controllers.commands; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; @@ -12,14 +12,20 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.util.StringUtil; -import mineverse.Aust1n46.chat.MineverseChat; -import mineverse.Aust1n46.chat.api.MineverseChatAPI; -import mineverse.Aust1n46.chat.api.MineverseChatPlayer; -import mineverse.Aust1n46.chat.channel.ChatChannel; -import mineverse.Aust1n46.chat.command.VentureCommand; +import com.google.inject.Inject; + import mineverse.Aust1n46.chat.localization.LocalizedMessage; +import venture.Aust1n46.chat.controllers.PluginMessageController; +import venture.Aust1n46.chat.model.ChatChannel; +import venture.Aust1n46.chat.model.VentureChatPlayer; +import venture.Aust1n46.chat.model.VentureCommand; +import venture.Aust1n46.chat.service.VentureChatPlayerApiService; public class Unmute implements VentureCommand { + @Inject + private PluginMessageController pluginMessageController; + @Inject + private VentureChatPlayerApiService playerApiService; @Override public void execute(CommandSender sender, String command, String[] args) { @@ -35,7 +41,7 @@ public class Unmute implements VentureCommand { sendBungeeCordUnmute(sender, args[1], channel); return; } - MineverseChatPlayer player = MineverseChatAPI.getMineverseChatPlayer(args[1]); + VentureChatPlayer player = playerApiService.getMineverseChatPlayer(args[1]); if (player == null || (!player.isOnline() && !sender.hasPermission("venturechat.mute.offline"))) { sender.sendMessage(LocalizedMessage.PLAYER_OFFLINE.toString().replace("{args}", args[1])); return; @@ -79,11 +85,11 @@ public class Unmute implements VentureCommand { if (ChatChannel.isChannel(args[0])) { ChatChannel chatChannelObj = ChatChannel.getChannel(args[0]); if (chatChannelObj.getBungee()) { - StringUtil.copyPartialMatches(args[1], MineverseChatAPI.getNetworkPlayerNames(), completions); + StringUtil.copyPartialMatches(args[1], playerApiService.getNetworkPlayerNames(), completions); Collections.sort(completions); return completions; } - StringUtil.copyPartialMatches(args[1], MineverseChatAPI.getOnlineMineverseChatPlayers().stream().filter(mcp -> mcp.isMuted(chatChannelObj.getName())).map(MineverseChatPlayer::getName).collect(Collectors.toList()), completions); + StringUtil.copyPartialMatches(args[1], playerApiService.getOnlineMineverseChatPlayers().stream().filter(mcp -> mcp.isMuted(chatChannelObj.getName())).map(VentureChatPlayer::getName).collect(Collectors.toList()), completions); Collections.sort(completions); return completions; } @@ -104,7 +110,7 @@ public class Unmute implements VentureCommand { } out.writeUTF(playerToUnmute); out.writeUTF(channel.getName()); - MineverseChat.sendPluginMessage(byteOutStream); + pluginMessageController.sendPluginMessage(byteOutStream); out.close(); } catch (Exception e) { e.printStackTrace(); diff --git a/src/main/java/mineverse/Aust1n46/chat/command/mute/Unmuteall.java b/src/main/java/venture/Aust1n46/chat/controllers/commands/Unmuteall.java similarity index 71% rename from src/main/java/mineverse/Aust1n46/chat/command/mute/Unmuteall.java rename to src/main/java/venture/Aust1n46/chat/controllers/commands/Unmuteall.java index 8d634b2..7f5b67c 100644 --- a/src/main/java/mineverse/Aust1n46/chat/command/mute/Unmuteall.java +++ b/src/main/java/venture/Aust1n46/chat/controllers/commands/Unmuteall.java @@ -1,15 +1,21 @@ -package mineverse.Aust1n46.chat.command.mute; +package venture.Aust1n46.chat.controllers.commands; import org.bukkit.command.CommandSender; -import mineverse.Aust1n46.chat.MineverseChat; -import mineverse.Aust1n46.chat.api.MineverseChatAPI; -import mineverse.Aust1n46.chat.api.MineverseChatPlayer; -import mineverse.Aust1n46.chat.channel.ChatChannel; -import mineverse.Aust1n46.chat.command.VentureCommand; +import com.google.inject.Inject; + import mineverse.Aust1n46.chat.localization.LocalizedMessage; +import venture.Aust1n46.chat.controllers.PluginMessageController; +import venture.Aust1n46.chat.model.ChatChannel; +import venture.Aust1n46.chat.model.VentureChatPlayer; +import venture.Aust1n46.chat.model.VentureCommand; +import venture.Aust1n46.chat.service.VentureChatPlayerApiService; public class Unmuteall implements VentureCommand { + @Inject + private PluginMessageController pluginMessageController; + @Inject + private VentureChatPlayerApiService playerApiService; @Override public void execute(CommandSender sender, String command, String[] args) { @@ -20,7 +26,7 @@ public class Unmuteall implements VentureCommand { .replace("{args}", "[player]")); return; } - MineverseChatPlayer player = MineverseChatAPI.getMineverseChatPlayer(args[0]); + VentureChatPlayer player = playerApiService.getMineverseChatPlayer(args[0]); if (player == null || (!player.isOnline() && !sender.hasPermission("venturechat.mute.offline"))) { sender.sendMessage(LocalizedMessage.PLAYER_OFFLINE.toString() .replace("{args}", args[0])); @@ -34,7 +40,7 @@ public class Unmuteall implements VentureCommand { } } if (bungee) { - MineverseChat.synchronize(player, true); + pluginMessageController.synchronize(player, true); } sender.sendMessage(LocalizedMessage.UNMUTE_PLAYER_ALL_SENDER.toString() .replace("{player}", player.getName())); @@ -48,4 +54,4 @@ public class Unmuteall implements VentureCommand { return; } } -} \ No newline at end of file +} diff --git a/src/main/java/mineverse/Aust1n46/chat/command/chat/VentureChatGui.java b/src/main/java/venture/Aust1n46/chat/controllers/commands/VentureChatGui.java similarity index 84% rename from src/main/java/mineverse/Aust1n46/chat/command/chat/VentureChatGui.java rename to src/main/java/venture/Aust1n46/chat/controllers/commands/VentureChatGui.java index e38cfea..edf673d 100644 --- a/src/main/java/mineverse/Aust1n46/chat/command/chat/VentureChatGui.java +++ b/src/main/java/venture/Aust1n46/chat/controllers/commands/VentureChatGui.java @@ -1,4 +1,4 @@ -package mineverse.Aust1n46.chat.command.chat; +package venture.Aust1n46.chat.controllers.commands; import java.util.ArrayList; import java.util.List; @@ -13,19 +13,24 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.SkullMeta; +import com.google.inject.Inject; + import me.clip.placeholderapi.PlaceholderAPI; -import mineverse.Aust1n46.chat.MineverseChat; -import mineverse.Aust1n46.chat.api.MineverseChatAPI; -import mineverse.Aust1n46.chat.api.MineverseChatPlayer; -import mineverse.Aust1n46.chat.channel.ChatChannel; -import mineverse.Aust1n46.chat.command.VentureCommand; -import mineverse.Aust1n46.chat.gui.GuiSlot; import mineverse.Aust1n46.chat.localization.LocalizedMessage; -import mineverse.Aust1n46.chat.utilities.Format; +import mineverse.Aust1n46.chat.utilities.FormatUtils; import mineverse.Aust1n46.chat.versions.VersionHandler; +import venture.Aust1n46.chat.VentureChat; +import venture.Aust1n46.chat.model.ChatChannel; +import venture.Aust1n46.chat.model.GuiSlot; +import venture.Aust1n46.chat.model.VentureChatPlayer; +import venture.Aust1n46.chat.model.VentureCommand; +import venture.Aust1n46.chat.service.VentureChatPlayerApiService; public class VentureChatGui implements VentureCommand { - private MineverseChat plugin = MineverseChat.getInstance(); + @Inject + private VentureChat plugin; + @Inject + private VentureChatPlayerApiService playerApiService; @Override public void execute(CommandSender sender, String command, String[] args) { @@ -39,9 +44,9 @@ public class VentureChatGui implements VentureCommand { .replace("{args}", "[player] [channel] [hashcode]")); return; } - MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer((Player) sender); + VentureChatPlayer mcp = playerApiService.getOnlineMineverseChatPlayer((Player) sender); if (mcp.getPlayer().hasPermission("venturechat.gui")) { - MineverseChatPlayer target = MineverseChatAPI.getMineverseChatPlayer(args[0]); + VentureChatPlayer target = playerApiService.getMineverseChatPlayer(args[0]); if (target == null && !args[0].equals("Discord")) { mcp.getPlayer().sendMessage(LocalizedMessage.PLAYER_OFFLINE.toString() .replace("{args}", args[0])); @@ -72,7 +77,7 @@ public class VentureChatGui implements VentureCommand { } @SuppressWarnings("deprecation") - private void openInventory(MineverseChatPlayer mcp, MineverseChatPlayer target, ChatChannel channel, int hash) { + private void openInventory(VentureChatPlayer mcp, VentureChatPlayer target, ChatChannel channel, int hash) { Inventory inv = Bukkit.createInventory(null, this.getSlots(), "VentureChat: " + target.getName() + " GUI"); ItemStack close = null; ItemStack skull = null; @@ -106,7 +111,7 @@ public class VentureChatGui implements VentureCommand { for (GuiSlot g : GuiSlot.getGuiSlots()) { if (!g.hasPermission() || mcp.getPlayer().hasPermission(g.getPermission())) { if (this.checkSlot(g.getSlot())) { - MineverseChat.getInstance().getServer().getConsoleSender().sendMessage(Format.FormatStringAll("&cGUI: " + g.getName() + " has invalid slot: " + g.getSlot() + "!")); + plugin.getServer().getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&cGUI: " + g.getName() + " has invalid slot: " + g.getSlot() + "!")); continue; } ItemStack gStack = new ItemStack(g.getIcon()); @@ -116,7 +121,7 @@ public class VentureChatGui implements VentureCommand { if (target.isOnline()) { displayName = PlaceholderAPI.setBracketPlaceholders(target.getPlayer(), displayName); } - gMeta.setDisplayName(Format.FormatStringAll(displayName)); + gMeta.setDisplayName(FormatUtils.FormatStringAll(displayName)); List gLore = new ArrayList(); gMeta.setLore(gLore); gStack.setItemMeta(gMeta); @@ -129,7 +134,7 @@ public class VentureChatGui implements VentureCommand { } @SuppressWarnings("deprecation") - private void openInventoryDiscord(MineverseChatPlayer mcp, ChatChannel channel, int hash) { + private void openInventoryDiscord(VentureChatPlayer mcp, ChatChannel channel, int hash) { Inventory inv = Bukkit.createInventory(null, this.getSlots(), "VentureChat: Discord_Message GUI"); ItemStack close = null; ItemStack skull = null; @@ -163,14 +168,14 @@ public class VentureChatGui implements VentureCommand { for (GuiSlot g : GuiSlot.getGuiSlots()) { if (!g.hasPermission() || mcp.getPlayer().hasPermission(g.getPermission())) { if (this.checkSlot(g.getSlot())) { - MineverseChat.getInstance().getServer().getConsoleSender().sendMessage(Format.FormatStringAll("&cGUI: " + g.getName() + " has invalid slot: " + g.getSlot() + "!")); + plugin.getServer().getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&cGUI: " + g.getName() + " has invalid slot: " + g.getSlot() + "!")); continue; } ItemStack gStack = new ItemStack(g.getIcon()); gStack.setDurability((short) g.getDurability()); ItemMeta gMeta = gStack.getItemMeta(); String displayName = g.getText().replace("{player_name}", "Discord_Message").replace("{channel}", channel.getName()).replace("{hash}", hash + ""); - gMeta.setDisplayName(Format.FormatStringAll(displayName)); + gMeta.setDisplayName(FormatUtils.FormatStringAll(displayName)); List gLore = new ArrayList(); gMeta.setLore(gLore); gStack.setItemMeta(gMeta); diff --git a/src/main/java/mineverse/Aust1n46/chat/command/chat/Venturechat.java b/src/main/java/venture/Aust1n46/chat/controllers/commands/Venturechat.java similarity index 91% rename from src/main/java/mineverse/Aust1n46/chat/command/chat/Venturechat.java rename to src/main/java/venture/Aust1n46/chat/controllers/commands/Venturechat.java index 0529880..d112d41 100644 --- a/src/main/java/mineverse/Aust1n46/chat/command/chat/Venturechat.java +++ b/src/main/java/venture/Aust1n46/chat/controllers/commands/Venturechat.java @@ -1,22 +1,25 @@ -package mineverse.Aust1n46.chat.command.chat; +package venture.Aust1n46.chat.controllers.commands; -import mineverse.Aust1n46.chat.MineverseChat; -import mineverse.Aust1n46.chat.command.VentureCommand; import mineverse.Aust1n46.chat.localization.InternalMessage; +import venture.Aust1n46.chat.VentureChat; //import net.md_5.bungee.api.chat.ClickEvent; //import net.md_5.bungee.api.chat.ComponentBuilder; //import net.md_5.bungee.api.chat.HoverEvent; //import net.md_5.bungee.api.chat.TextComponent; //import net.minecraft.server.v1_15_R1.IChatBaseComponent; //import net.minecraft.server.v1_15_R1.PacketPlayOutChat; +import venture.Aust1n46.chat.model.VentureCommand; //import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; //import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer; //import org.bukkit.entity.Player; +import com.google.inject.Inject; + public class Venturechat implements VentureCommand { - private MineverseChat plugin = MineverseChat.getInstance(); + @Inject + private VentureChat plugin; @Override public void execute(CommandSender sender, String command, String[] args) { diff --git a/src/main/java/mineverse/Aust1n46/chat/listeners/ChatListener.java b/src/main/java/venture/Aust1n46/chat/initiators/listeners/ChatListener.java similarity index 72% rename from src/main/java/mineverse/Aust1n46/chat/listeners/ChatListener.java rename to src/main/java/venture/Aust1n46/chat/initiators/listeners/ChatListener.java index e395c07..b08dd4d 100644 --- a/src/main/java/mineverse/Aust1n46/chat/listeners/ChatListener.java +++ b/src/main/java/venture/Aust1n46/chat/initiators/listeners/ChatListener.java @@ -1,566 +1,575 @@ -package mineverse.Aust1n46.chat.listeners; - -import java.io.ByteArrayOutputStream; -import java.io.DataOutputStream; -import java.util.Set; - -import net.essentialsx.api.v2.services.discord.DiscordService; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Location; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.player.AsyncPlayerChatEvent; -import org.bukkit.plugin.PluginManager; - -import com.comphenix.protocol.events.PacketContainer; -import com.massivecraft.factions.entity.MPlayer; -import com.palmergames.bukkit.towny.TownyUniverse; -import com.palmergames.bukkit.towny.object.Resident; - -import me.clip.placeholderapi.PlaceholderAPI; -import mineverse.Aust1n46.chat.MineverseChat; -import mineverse.Aust1n46.chat.api.MineverseChatAPI; -import mineverse.Aust1n46.chat.api.MineverseChatPlayer; -import mineverse.Aust1n46.chat.api.events.ChannelJoinEvent; -import mineverse.Aust1n46.chat.api.events.VentureChatEvent; -import mineverse.Aust1n46.chat.channel.ChatChannel; -import mineverse.Aust1n46.chat.command.mute.MuteContainer; -import mineverse.Aust1n46.chat.database.Database; -import mineverse.Aust1n46.chat.localization.LocalizedMessage; -import mineverse.Aust1n46.chat.utilities.Format; - -//This class listens to chat through the chat event and handles the bulk of the chat channels and formatting. -public class ChatListener implements Listener { - private final boolean essentialsDiscordHook = Bukkit.getPluginManager().isPluginEnabled("EssentialsDiscord"); - private MineverseChat plugin = MineverseChat.getInstance(); - - @EventHandler(priority = EventPriority.NORMAL) - public void onChannelJoin(ChannelJoinEvent event) { - - } - - // this event isn't always asynchronous even though the event's name starts with "Async" - // blame md_5 for that one - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onAsyncPlayerChatEvent(AsyncPlayerChatEvent event) { - event.setCancelled(true); - Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { - @Override - public void run() { - handleTrueAsyncPlayerChatEvent(event); - } - }); - } - - public void handleTrueAsyncPlayerChatEvent(AsyncPlayerChatEvent event) { - boolean bungee = false; - String chat = event.getMessage(); - String format; - Set recipients = event.getRecipients(); - int recipientCount = recipients.size(); // Don't count vanished players - MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer(event.getPlayer()); - ChatChannel eventChannel = mcp.getCurrentChannel(); - - if(mcp.isEditing()) { - mcp.getPlayer().sendMessage(Format.FormatStringAll(chat)); - mcp.setEditing(false); - return; - } - - if(mcp.isQuickChat()) { - eventChannel = mcp.getQuickChannel(); - } - - if(mcp.hasConversation() && !mcp.isQuickChat()) { - MineverseChatPlayer tp = MineverseChatAPI.getMineverseChatPlayer(mcp.getConversation()); - if(!tp.isOnline()) { - mcp.getPlayer().sendMessage(ChatColor.RED + tp.getName() + " is not available."); - if(!mcp.getPlayer().hasPermission("venturechat.spy.override")) { - for(MineverseChatPlayer p : MineverseChatAPI.getOnlineMineverseChatPlayers()) { - if(p.getName().equals(mcp.getName())) { - continue; - } - if(p.isSpy()) { - p.getPlayer().sendMessage(LocalizedMessage.EXIT_PRIVATE_CONVERSATION_SPY.toString() - .replace("{player_sender}", mcp.getName()) - .replace("{player_receiver}", tp.getName())); - } - } - } - mcp.setConversation(null); - } - else { - if(tp.getIgnores().contains(mcp.getUUID())) { - mcp.getPlayer().sendMessage(LocalizedMessage.IGNORING_MESSAGE.toString() - .replace("{player}", tp.getName())); - event.setCancelled(true); - return; - } - if(!tp.getMessageToggle()) { - mcp.getPlayer().sendMessage(LocalizedMessage.BLOCKING_MESSAGE.toString() - .replace("{player}", tp.getName())); - event.setCancelled(true); - return; - } - String filtered = chat; - String echo = ""; - String send = ""; - String spy = ""; - if(mcp.hasFilter()) { - filtered = Format.FilterChat(filtered); - } - if(mcp.getPlayer().hasPermission("venturechat.color.legacy")) { - filtered = Format.FormatStringLegacyColor(filtered); - } - if(mcp.getPlayer().hasPermission("venturechat.color")) { - filtered = Format.FormatStringColor(filtered); - } - if(mcp.getPlayer().hasPermission("venturechat.format")) { - filtered = Format.FormatString(filtered); - } - filtered = " " + filtered; - - send = Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(mcp.getPlayer(), plugin.getConfig().getString("tellformatfrom").replaceAll("sender_", ""))); - echo = Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(mcp.getPlayer(), plugin.getConfig().getString("tellformatto").replaceAll("sender_", ""))); - spy = Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(mcp.getPlayer(), plugin.getConfig().getString("tellformatspy").replaceAll("sender_", ""))); - - send = Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(tp.getPlayer(), send.replaceAll("receiver_", ""))) + filtered; - echo = Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(tp.getPlayer(), echo.replaceAll("receiver_", ""))) + filtered; - spy = Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(tp.getPlayer(), spy.replaceAll("receiver_", ""))) + filtered; - - if(!mcp.getPlayer().hasPermission("venturechat.spy.override")) { - for(MineverseChatPlayer p : MineverseChatAPI.getOnlineMineverseChatPlayers()) { - if(p.getName().equals(mcp.getName()) || p.getName().equals(tp.getName())) { - continue; - } - if(p.isSpy()) { - p.getPlayer().sendMessage(spy); - } - } - } - tp.getPlayer().sendMessage(send); - mcp.getPlayer().sendMessage(echo); - if(tp.hasNotifications()) { - Format.playMessageSound(tp); - } - mcp.setReplyPlayer(tp.getUUID()); - tp.setReplyPlayer(mcp.getUUID()); - if(Database.isEnabled()) { - Database.writeVentureChat(mcp.getUUID().toString(), mcp.getName(), "Local", "Messaging_Component", chat.replace("'", "''"), "Chat"); - } - } - return; - } - - if(mcp.isPartyChat() && !mcp.isQuickChat()) { - if(mcp.hasParty()) { - String partyformat = ""; - for(MineverseChatPlayer p : MineverseChatAPI.getOnlineMineverseChatPlayers()) { - if((p.hasParty() && p.getParty().toString().equals(mcp.getParty().toString()) || p.isSpy())) { - String filtered = chat; - if(mcp.hasFilter()) { - filtered = Format.FilterChat(filtered); - } - if(mcp.getPlayer().hasPermission("venturechat.color.legacy")) { - filtered = Format.FormatStringLegacyColor(filtered); - } - if(mcp.getPlayer().hasPermission("venturechat.color")) { - filtered = Format.FormatStringColor(filtered); - } - if(mcp.getPlayer().hasPermission("venturechat.format")) { - filtered = Format.FormatString(filtered); - } - filtered = " " + filtered; - if(plugin.getConfig().getString("partyformat").equalsIgnoreCase("Default")) { - partyformat = ChatColor.GREEN + "[" + MineverseChatAPI.getMineverseChatPlayer(mcp.getParty()).getName() + "'s Party] " + mcp.getName() + ":" + filtered; - } - else { - partyformat = Format.FormatStringAll(plugin.getConfig().getString("partyformat").replace("{host}", MineverseChatAPI.getMineverseChatPlayer(mcp.getParty()).getName()).replace("{player}", mcp.getName())) + filtered; - } - p.getPlayer().sendMessage(partyformat); - } - } - Bukkit.getConsoleSender().sendMessage(partyformat); - if(Database.isEnabled()) { - Database.writeVentureChat(mcp.getUUID().toString(), mcp.getName(), "Local", "Party_Component", chat.replace("'", "''"), "Chat"); - } - return; - } - mcp.getPlayer().sendMessage(ChatColor.RED + "You are not in a party."); - return; - } - - Location locreceip; - Location locsender = mcp.getPlayer().getLocation(); - Location diff; - Boolean filterthis = true; - mcp.addListening(eventChannel.getName()); - if (mcp.isMuted(eventChannel.getName())) { - MuteContainer muteContainer = mcp.getMute(eventChannel.getName()); - if (muteContainer.hasDuration()) { - long dateTimeMillis = System.currentTimeMillis(); - long muteTimeMillis = muteContainer.getDuration(); - long remainingMuteTime = muteTimeMillis - dateTimeMillis; - if (remainingMuteTime < 1000) { - remainingMuteTime = 1000; - } - String timeString = Format.parseTimeStringFromMillis(remainingMuteTime); - if(muteContainer.hasReason()) { - mcp.getPlayer() - .sendMessage(LocalizedMessage.CHANNEL_MUTED_TIMED_REASON.toString() - .replace("{channel_color}", eventChannel.getColor()) - .replace("{channel_name}", eventChannel.getName()) - .replace("{time}", timeString) - .replace("{reason}", muteContainer.getReason())); - } - else { - mcp.getPlayer() - .sendMessage(LocalizedMessage.CHANNEL_MUTED_TIMED.toString() - .replace("{channel_color}", eventChannel.getColor()) - .replace("{channel_name}", eventChannel.getName()) - .replace("{time}", timeString)); - } - } - else { - if(muteContainer.hasReason()) { - mcp.getPlayer() - .sendMessage(LocalizedMessage.CHANNEL_MUTED_REASON.toString() - .replace("{channel_color}", eventChannel.getColor()) - .replace("{channel_name}", eventChannel.getName()) - .replace("{reason}", muteContainer.getReason())); - } - else { - mcp.getPlayer() - .sendMessage(LocalizedMessage.CHANNEL_MUTED.toString() - .replace("{channel_color}", eventChannel.getColor()) - .replace("{channel_name}", eventChannel.getName())); - } - } - mcp.setQuickChat(false); - return; - } - Double chDistance = (double) 0; - String curColor = ""; - if(eventChannel.hasPermission() && !mcp.getPlayer().hasPermission(eventChannel.getPermission())) { - mcp.getPlayer().sendMessage(LocalizedMessage.CHANNEL_NO_PERMISSION.toString()); - mcp.setQuickChat(false); - mcp.removeListening(eventChannel.getName()); - mcp.setCurrentChannel(ChatChannel.getDefaultChannel()); - return; - } - if(eventChannel.hasSpeakPermission() && !mcp.getPlayer().hasPermission(eventChannel.getSpeakPermission())) { - mcp.getPlayer().sendMessage(LocalizedMessage.CHANNEL_NO_SPEAK_PERMISSIONS.toString()); - mcp.setQuickChat(false); - return; - } - curColor = eventChannel.getChatColor(); - bungee = eventChannel.getBungee(); - - long dateTimeSeconds = System.currentTimeMillis() / Format.MILLISECONDS_PER_SECOND; - - int chCooldown = 0; - if(eventChannel.hasCooldown()) { - chCooldown = eventChannel.getCooldown(); - } - try { - if (mcp.hasCooldown(eventChannel)) { - long cooldownTime = mcp.getCooldowns().get(eventChannel).longValue(); - if (dateTimeSeconds < cooldownTime) { - long remainingCooldownTime = cooldownTime - dateTimeSeconds; - String cooldownString = Format.parseTimeStringFromMillis(remainingCooldownTime * Format.MILLISECONDS_PER_SECOND); - mcp.getPlayer().sendMessage(LocalizedMessage.CHANNEL_COOLDOWN.toString() - .replace("{cooldown}", cooldownString)); - mcp.setQuickChat(false); - bungee = false; - return; - } - } - if (eventChannel.hasCooldown()) { - if (!mcp.getPlayer().hasPermission("venturechat.cooldown.bypass")) { - mcp.addCooldown(eventChannel, dateTimeSeconds + chCooldown); - } - } - } catch (NumberFormatException e) { - e.printStackTrace(); - } - - if (mcp.hasSpam(eventChannel) && plugin.getConfig().getConfigurationSection("antispam").getBoolean("enabled") - && !mcp.getPlayer().hasPermission("venturechat.spam.bypass")) { - long spamcount = mcp.getSpam().get(eventChannel).get(0); - long spamtime = mcp.getSpam().get(eventChannel).get(1); - long spamtimeconfig = plugin.getConfig().getConfigurationSection("antispam").getLong("spamnumber"); - String mutedForTime = plugin.getConfig().getConfigurationSection("antispam").getString("mutetime", "0"); - long dateTime = System.currentTimeMillis(); - if (dateTimeSeconds < spamtime - + plugin.getConfig().getConfigurationSection("antispam").getLong("spamtime")) { - if (spamcount + 1 >= spamtimeconfig) { - long time = Format.parseTimeStringToMillis(mutedForTime); - if (time > 0) { - mcp.addMute(eventChannel.getName(), dateTime + time, LocalizedMessage.SPAM_MUTE_REASON_TEXT.toString()); - String timeString = Format.parseTimeStringFromMillis(time); - mcp.getPlayer() - .sendMessage(LocalizedMessage.MUTE_PLAYER_PLAYER_TIME_REASON.toString() - .replace("{channel_color}", eventChannel.getColor()) - .replace("{channel_name}", eventChannel.getName()) - .replace("{time}", timeString) - .replace("{reason}", LocalizedMessage.SPAM_MUTE_REASON_TEXT.toString())); - } - else { - mcp.addMute(eventChannel.getName(), LocalizedMessage.SPAM_MUTE_REASON_TEXT.toString()); - mcp.getPlayer() - .sendMessage(LocalizedMessage.MUTE_PLAYER_PLAYER_REASON.toString() - .replace("{channel_color}", eventChannel.getColor()) - .replace("{channel_name}", eventChannel.getName()) - .replace("{reason}", LocalizedMessage.SPAM_MUTE_REASON_TEXT.toString())); - } - if(eventChannel.getBungee()) { - MineverseChat.synchronize(mcp, true); - } - mcp.getSpam().get(eventChannel).set(0, 0L); - mcp.setQuickChat(false); - return; - } else { - if (spamtimeconfig % 2 != 0) { - spamtimeconfig++; - } - if (spamcount + 1 == spamtimeconfig / 2) { - mcp.getPlayer().sendMessage(LocalizedMessage.SPAM_WARNING.toString()); - } - mcp.getSpam().get(eventChannel).set(0, spamcount + 1); - } - } else { - mcp.getSpam().get(eventChannel).set(0, 1L); - mcp.getSpam().get(eventChannel).set(1, dateTimeSeconds); - } - } else { - mcp.addSpam(eventChannel); - mcp.getSpam().get(eventChannel).add(0, 1L); - mcp.getSpam().get(eventChannel).add(1, dateTimeSeconds); - } - - if(eventChannel.hasDistance()) { - chDistance = eventChannel.getDistance(); - } - - format = Format.FormatStringAll(eventChannel.getFormat()); - - filterthis = eventChannel.isFiltered(); - if(filterthis) { - if(mcp.hasFilter()) { - chat = Format.FilterChat(chat); - } - } - PluginManager pluginManager = plugin.getServer().getPluginManager(); - for(MineverseChatPlayer p : MineverseChatAPI.getOnlineMineverseChatPlayers()) { - if(p.getPlayer() != mcp.getPlayer()) { - if(!p.isListening(eventChannel.getName())) { - recipients.remove(p.getPlayer()); - recipientCount--; - continue; - } - if(plugin.getConfig().getBoolean("ignorechat", false) && p.getIgnores().contains(mcp.getUUID())) { - recipients.remove(p.getPlayer()); - recipientCount--; - continue; - } - if(plugin.getConfig().getBoolean("enable_towny_channel") && pluginManager.isPluginEnabled("Towny")) { - try { - TownyUniverse towny = TownyUniverse.getInstance(); - if(eventChannel.getName().equalsIgnoreCase("Town")) { - Resident r = towny.getResident(p.getName()); - Resident pp = towny.getResident(mcp.getName()); - if(!pp.hasTown()) { - recipients.remove(p.getPlayer()); - recipientCount--; - continue; - } - else if(!r.hasTown()) { - recipients.remove(p.getPlayer()); - recipientCount--; - continue; - } - else if(!(r.getTown().getName().equals(pp.getTown().getName()))) { - recipients.remove(p.getPlayer()); - recipientCount--; - continue; - } - } - if(eventChannel.getName().equalsIgnoreCase("Nation")) { - Resident r = towny.getResident(p.getName()); - Resident pp = towny.getResident(mcp.getName()); - if(!pp.hasNation()) { - recipients.remove(p.getPlayer()); - recipientCount--; - continue; - } - else if(!r.hasNation()) { - recipients.remove(p.getPlayer()); - recipientCount--; - continue; - } - else if(!(r.getTown().getNation().getName().equals(pp.getTown().getNation().getName()))) { - recipients.remove(p.getPlayer()); - recipientCount--; - continue; - } - } - } - catch(Exception ex) { - ex.printStackTrace(); - } - } - - if(plugin.getConfig().getBoolean("enable_factions_channel") && pluginManager.isPluginEnabled("Factions")) { - try { - if(eventChannel.getName().equalsIgnoreCase("Faction")) { - MPlayer mplayer = MPlayer.get(mcp.getPlayer()); - MPlayer mplayerp = MPlayer.get(p.getPlayer()); - if(!mplayer.hasFaction()) { - recipients.remove(p.getPlayer()); - recipientCount--; - } - else if(!mplayerp.hasFaction()) { - recipients.remove(p.getPlayer()); - recipientCount--; - } - else if(!(mplayer.getFactionName().equals(mplayerp.getFactionName()))) { - recipients.remove(p.getPlayer()); - recipientCount--; - } - } - } - catch(Exception ex) { - ex.printStackTrace(); - } - } - - if(chDistance > (double) 0 && !bungee && !p.getRangedSpy()) { - locreceip = p.getPlayer().getLocation(); - if(locreceip.getWorld() == mcp.getPlayer().getWorld()) { - diff = locreceip.subtract(locsender); - if(Math.abs(diff.getX()) > chDistance || Math.abs(diff.getZ()) > chDistance || Math.abs(diff.getY()) > chDistance) { - recipients.remove(p.getPlayer()); - recipientCount--; - continue; - } - if(!mcp.getPlayer().canSee(p.getPlayer())) { - recipientCount--; - continue; - } - } - else { - recipients.remove(p.getPlayer()); - recipientCount--; - continue; - } - } - if(!mcp.getPlayer().canSee(p.getPlayer())) { - recipientCount--; - continue; - } - } - } - - if(mcp.getPlayer().hasPermission("venturechat.color.legacy")) { - chat = Format.FormatStringLegacyColor(chat); - } - if(mcp.getPlayer().hasPermission("venturechat.color")) { - chat = Format.FormatStringColor(chat); - } - if(mcp.getPlayer().hasPermission("venturechat.format")) { - chat = Format.FormatString(chat); - } - if(!mcp.isQuickChat()) { - chat = " " + chat; - } - if(curColor.equalsIgnoreCase("None")) { - // Format the placeholders and their color codes to determine the last color code to use for the chat message color - chat = Format.getLastCode(Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(mcp.getPlayer(), format))) + chat; - } - else { - chat = curColor + chat; - } - - String globalJSON = Format.convertToJson(mcp, format, chat); - format = Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(mcp.getPlayer(), Format.FormatStringAll(format))); - String message = Format.stripColor(format + chat); // UTF-8 encoding issues. - int hash = message.hashCode(); - - //Create VentureChatEvent - VentureChatEvent ventureChatEvent = new VentureChatEvent(mcp, mcp.getName(), mcp.getNickname(), MineverseChat.getVaultPermission().getPrimaryGroup(mcp.getPlayer()), eventChannel, recipients, recipientCount, format, chat, globalJSON, hash, bungee); - //Fire event and wait for other plugin listeners to act on it - Bukkit.getServer().getPluginManager().callEvent(ventureChatEvent); - //Call method to send the processed chat - handleVentureChatEvent(ventureChatEvent); - // Reset quick chat flag - mcp.setQuickChat(false); - } - - public void handleVentureChatEvent(VentureChatEvent event) { - MineverseChatPlayer mcp = event.getMineverseChatPlayer(); - ChatChannel channel = event.getChannel(); - Set recipients = event.getRecipients(); - int recipientCount = event.getRecipientCount(); - String format = event.getFormat(); - String chat = event.getChat(); - String consoleChat = event.getConsoleChat(); - String globalJSON = event.getGlobalJSON(); - int hash = event.getHash(); - boolean bungee = event.isBungee(); - - if (essentialsDiscordHook && channel.isDefaultchannel()) { - Bukkit.getServicesManager().load(DiscordService.class).sendChatMessage(mcp.getPlayer(), chat); - } - - if(!bungee) { - if(Database.isEnabled()) { - Database.writeVentureChat(mcp.getUUID().toString(), mcp.getName(), "Local", channel.getName(), chat.replace("'", "''"), "Chat"); - } - - if(recipientCount == 1) { - if(!plugin.getConfig().getString("emptychannelalert", "&6No one is listening to you.").equals("")) { - mcp.getPlayer().sendMessage(Format.FormatStringAll(plugin.getConfig().getString("emptychannelalert", "&6No one is listening to you."))); - } - } - for(Player p : recipients) { - String json = Format.formatModerationGUI(globalJSON, p, mcp.getName(), channel.getName(), hash); - PacketContainer packet = Format.createPacketPlayOutChat(json); - Format.sendPacketPlayOutChat(p, packet); - } - Bukkit.getConsoleSender().sendMessage(consoleChat); - return; - } - else { - ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream(); - DataOutputStream out = new DataOutputStream(byteOutStream); - try { - out.writeUTF("Chat"); - out.writeUTF(channel.getName()); - out.writeUTF(mcp.getName()); - out.writeUTF(mcp.getUUID().toString()); - out.writeBoolean(mcp.getBungeeToggle()); - out.writeInt(hash); - out.writeUTF(format); - out.writeUTF(chat); - if(plugin.getConfig().getString("loglevel", "info").equals("debug")) { - System.out.println(out.size() + " size bytes without json"); - } - out.writeUTF(globalJSON); - if(plugin.getConfig().getString("loglevel", "info").equals("debug")) { - System.out.println(out.size() + " bytes size with json"); - } - out.writeUTF(MineverseChat.getVaultPermission().getPrimaryGroup(mcp.getPlayer())); - out.writeUTF(mcp.getNickname()); - mcp.getPlayer().sendPluginMessage(plugin, MineverseChat.PLUGIN_MESSAGING_CHANNEL, byteOutStream.toByteArray()); - out.close(); - } - catch(Exception e) { - e.printStackTrace(); - } - return; - } - } -} +package venture.Aust1n46.chat.initiators.listeners; + +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; +import java.util.Set; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.plugin.PluginManager; + +import com.comphenix.protocol.events.PacketContainer; +import com.google.inject.Inject; +import com.google.inject.Singleton; +import com.massivecraft.factions.entity.MPlayer; +import com.palmergames.bukkit.towny.TownyUniverse; +import com.palmergames.bukkit.towny.object.Resident; + +import me.clip.placeholderapi.PlaceholderAPI; +import mineverse.Aust1n46.chat.api.events.VentureChatEvent; +import mineverse.Aust1n46.chat.localization.LocalizedMessage; +import mineverse.Aust1n46.chat.utilities.FormatUtils; +import net.essentialsx.api.v2.services.discord.DiscordService; +import venture.Aust1n46.chat.VentureChat; +import venture.Aust1n46.chat.controllers.PluginMessageController; +import venture.Aust1n46.chat.controllers.commands.MuteContainer; +import venture.Aust1n46.chat.model.ChatChannel; +import venture.Aust1n46.chat.model.VentureChatPlayer; +import venture.Aust1n46.chat.service.VentureChatDatabaseService; +import venture.Aust1n46.chat.service.VentureChatFormatService; +import venture.Aust1n46.chat.service.VentureChatPlayerApiService; + +//This class listens to chat through the chat event and handles the bulk of the chat channels and formatting. +@Singleton +public class ChatListener implements Listener { + private final boolean essentialsDiscordHook = Bukkit.getPluginManager().isPluginEnabled("EssentialsDiscord"); + @Inject + private VentureChat plugin; + @Inject + private VentureChatFormatService formatService; + @Inject + private VentureChatDatabaseService databaseService; + @Inject + private PluginMessageController pluginMessageController; + @Inject + private VentureChatPlayerApiService playerApiService; + + // this event isn't always asynchronous even though the event's name starts with "Async" + // blame md_5 for that one + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onAsyncPlayerChatEvent(AsyncPlayerChatEvent event) { + event.setCancelled(true); + Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() { + @Override + public void run() { + handleTrueAsyncPlayerChatEvent(event); + } + }); + } + + public void handleTrueAsyncPlayerChatEvent(AsyncPlayerChatEvent event) { + boolean bungee = false; + String chat = event.getMessage(); + String format; + Set recipients = event.getRecipients(); + int recipientCount = recipients.size(); // Don't count vanished players + VentureChatPlayer mcp = playerApiService.getOnlineMineverseChatPlayer(event.getPlayer()); + ChatChannel eventChannel = mcp.getCurrentChannel(); + + if(mcp.isEditing()) { + mcp.getPlayer().sendMessage(FormatUtils.FormatStringAll(chat)); + mcp.setEditing(false); + return; + } + + if(mcp.isQuickChat()) { + eventChannel = mcp.getQuickChannel(); + } + + if(mcp.hasConversation() && !mcp.isQuickChat()) { + VentureChatPlayer tp = playerApiService.getMineverseChatPlayer(mcp.getConversation()); + if(!tp.isOnline()) { + mcp.getPlayer().sendMessage(ChatColor.RED + tp.getName() + " is not available."); + if(!mcp.getPlayer().hasPermission("venturechat.spy.override")) { + for(VentureChatPlayer p : playerApiService.getOnlineMineverseChatPlayers()) { + if(p.getName().equals(mcp.getName())) { + continue; + } + if(p.isSpy()) { + p.getPlayer().sendMessage(LocalizedMessage.EXIT_PRIVATE_CONVERSATION_SPY.toString() + .replace("{player_sender}", mcp.getName()) + .replace("{player_receiver}", tp.getName())); + } + } + } + mcp.setConversation(null); + } + else { + if(tp.getIgnores().contains(mcp.getUuid())) { + mcp.getPlayer().sendMessage(LocalizedMessage.IGNORING_MESSAGE.toString() + .replace("{player}", tp.getName())); + event.setCancelled(true); + return; + } + if(!tp.isMessageToggle()) { + mcp.getPlayer().sendMessage(LocalizedMessage.BLOCKING_MESSAGE.toString() + .replace("{player}", tp.getName())); + event.setCancelled(true); + return; + } + String filtered = chat; + String echo = ""; + String send = ""; + String spy = ""; + if(mcp.isFilter()) { + filtered = formatService.FilterChat(filtered); + } + if(mcp.getPlayer().hasPermission("venturechat.color.legacy")) { + filtered = FormatUtils.FormatStringLegacyColor(filtered); + } + if(mcp.getPlayer().hasPermission("venturechat.color")) { + filtered = FormatUtils.FormatStringColor(filtered); + } + if(mcp.getPlayer().hasPermission("venturechat.format")) { + filtered = FormatUtils.FormatString(filtered); + } + filtered = " " + filtered; + + send = FormatUtils.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(mcp.getPlayer(), plugin.getConfig().getString("tellformatfrom").replaceAll("sender_", ""))); + echo = FormatUtils.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(mcp.getPlayer(), plugin.getConfig().getString("tellformatto").replaceAll("sender_", ""))); + spy = FormatUtils.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(mcp.getPlayer(), plugin.getConfig().getString("tellformatspy").replaceAll("sender_", ""))); + + send = FormatUtils.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(tp.getPlayer(), send.replaceAll("receiver_", ""))) + filtered; + echo = FormatUtils.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(tp.getPlayer(), echo.replaceAll("receiver_", ""))) + filtered; + spy = FormatUtils.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(tp.getPlayer(), spy.replaceAll("receiver_", ""))) + filtered; + + if(!mcp.getPlayer().hasPermission("venturechat.spy.override")) { + for(VentureChatPlayer p : playerApiService.getOnlineMineverseChatPlayers()) { + if(p.getName().equals(mcp.getName()) || p.getName().equals(tp.getName())) { + continue; + } + if(p.isSpy()) { + p.getPlayer().sendMessage(spy); + } + } + } + tp.getPlayer().sendMessage(send); + mcp.getPlayer().sendMessage(echo); + if(tp.hasNotifications()) { + formatService.playMessageSound(tp); + } + mcp.setReplyPlayer(tp.getUuid()); + tp.setReplyPlayer(mcp.getUuid()); + if(databaseService.isEnabled()) { + databaseService.writeVentureChat(mcp.getUuid().toString(), mcp.getName(), "Local", "Messaging_Component", chat.replace("'", "''"), "Chat"); + } + } + return; + } + + if(mcp.isPartyChat() && !mcp.isQuickChat()) { + if(mcp.hasParty()) { + String partyformat = ""; + for(VentureChatPlayer p : playerApiService.getOnlineMineverseChatPlayers()) { + if((p.hasParty() && p.getParty().toString().equals(mcp.getParty().toString()) || p.isSpy())) { + String filtered = chat; + if(mcp.isFilter()) { + filtered = formatService.FilterChat(filtered); + } + if(mcp.getPlayer().hasPermission("venturechat.color.legacy")) { + filtered = FormatUtils.FormatStringLegacyColor(filtered); + } + if(mcp.getPlayer().hasPermission("venturechat.color")) { + filtered = FormatUtils.FormatStringColor(filtered); + } + if(mcp.getPlayer().hasPermission("venturechat.format")) { + filtered = FormatUtils.FormatString(filtered); + } + filtered = " " + filtered; + if(plugin.getConfig().getString("partyformat").equalsIgnoreCase("Default")) { + partyformat = ChatColor.GREEN + "[" + playerApiService.getMineverseChatPlayer(mcp.getParty()).getName() + "'s Party] " + mcp.getName() + ":" + filtered; + } + else { + partyformat = FormatUtils.FormatStringAll(plugin.getConfig().getString("partyformat").replace("{host}", playerApiService.getMineverseChatPlayer(mcp.getParty()).getName()).replace("{player}", mcp.getName())) + filtered; + } + p.getPlayer().sendMessage(partyformat); + } + } + Bukkit.getConsoleSender().sendMessage(partyformat); + if(databaseService.isEnabled()) { + databaseService.writeVentureChat(mcp.getUuid().toString(), mcp.getName(), "Local", "Party_Component", chat.replace("'", "''"), "Chat"); + } + return; + } + mcp.getPlayer().sendMessage(ChatColor.RED + "You are not in a party."); + return; + } + + Location locreceip; + Location locsender = mcp.getPlayer().getLocation(); + Location diff; + Boolean filterthis = true; + mcp.addListening(eventChannel.getName()); + if (mcp.isMuted(eventChannel.getName())) { + MuteContainer muteContainer = mcp.getMute(eventChannel.getName()); + if (muteContainer.hasDuration()) { + long dateTimeMillis = System.currentTimeMillis(); + long muteTimeMillis = muteContainer.getDuration(); + long remainingMuteTime = muteTimeMillis - dateTimeMillis; + if (remainingMuteTime < 1000) { + remainingMuteTime = 1000; + } + String timeString = FormatUtils.parseTimeStringFromMillis(remainingMuteTime); + if(muteContainer.hasReason()) { + mcp.getPlayer() + .sendMessage(LocalizedMessage.CHANNEL_MUTED_TIMED_REASON.toString() + .replace("{channel_color}", eventChannel.getColor()) + .replace("{channel_name}", eventChannel.getName()) + .replace("{time}", timeString) + .replace("{reason}", muteContainer.getReason())); + } + else { + mcp.getPlayer() + .sendMessage(LocalizedMessage.CHANNEL_MUTED_TIMED.toString() + .replace("{channel_color}", eventChannel.getColor()) + .replace("{channel_name}", eventChannel.getName()) + .replace("{time}", timeString)); + } + } + else { + if(muteContainer.hasReason()) { + mcp.getPlayer() + .sendMessage(LocalizedMessage.CHANNEL_MUTED_REASON.toString() + .replace("{channel_color}", eventChannel.getColor()) + .replace("{channel_name}", eventChannel.getName()) + .replace("{reason}", muteContainer.getReason())); + } + else { + mcp.getPlayer() + .sendMessage(LocalizedMessage.CHANNEL_MUTED.toString() + .replace("{channel_color}", eventChannel.getColor()) + .replace("{channel_name}", eventChannel.getName())); + } + } + mcp.setQuickChat(false); + return; + } + Double chDistance = (double) 0; + String curColor = ""; + if(eventChannel.hasPermission() && !mcp.getPlayer().hasPermission(eventChannel.getPermission())) { + mcp.getPlayer().sendMessage(LocalizedMessage.CHANNEL_NO_PERMISSION.toString()); + mcp.setQuickChat(false); + mcp.removeListening(eventChannel.getName()); + mcp.setCurrentChannel(ChatChannel.getDefaultChannel()); + return; + } + if(eventChannel.hasSpeakPermission() && !mcp.getPlayer().hasPermission(eventChannel.getSpeakPermission())) { + mcp.getPlayer().sendMessage(LocalizedMessage.CHANNEL_NO_SPEAK_PERMISSIONS.toString()); + mcp.setQuickChat(false); + return; + } + curColor = eventChannel.getChatColor(); + bungee = eventChannel.getBungee(); + + long dateTimeSeconds = System.currentTimeMillis() / FormatUtils.MILLISECONDS_PER_SECOND; + + int chCooldown = 0; + if(eventChannel.hasCooldown()) { + chCooldown = eventChannel.getCooldown(); + } + try { + if (mcp.hasCooldown(eventChannel)) { + long cooldownTime = mcp.getCooldowns().get(eventChannel).longValue(); + if (dateTimeSeconds < cooldownTime) { + long remainingCooldownTime = cooldownTime - dateTimeSeconds; + String cooldownString = FormatUtils.parseTimeStringFromMillis(remainingCooldownTime * FormatUtils.MILLISECONDS_PER_SECOND); + mcp.getPlayer().sendMessage(LocalizedMessage.CHANNEL_COOLDOWN.toString() + .replace("{cooldown}", cooldownString)); + mcp.setQuickChat(false); + bungee = false; + return; + } + } + if (eventChannel.hasCooldown()) { + if (!mcp.getPlayer().hasPermission("venturechat.cooldown.bypass")) { + mcp.addCooldown(eventChannel, dateTimeSeconds + chCooldown); + } + } + } catch (NumberFormatException e) { + e.printStackTrace(); + } + + if (mcp.hasSpam(eventChannel) && plugin.getConfig().getConfigurationSection("antispam").getBoolean("enabled") + && !mcp.getPlayer().hasPermission("venturechat.spam.bypass")) { + long spamcount = mcp.getSpam().get(eventChannel).get(0); + long spamtime = mcp.getSpam().get(eventChannel).get(1); + long spamtimeconfig = plugin.getConfig().getConfigurationSection("antispam").getLong("spamnumber"); + String mutedForTime = plugin.getConfig().getConfigurationSection("antispam").getString("mutetime", "0"); + long dateTime = System.currentTimeMillis(); + if (dateTimeSeconds < spamtime + + plugin.getConfig().getConfigurationSection("antispam").getLong("spamtime")) { + if (spamcount + 1 >= spamtimeconfig) { + long time = FormatUtils.parseTimeStringToMillis(mutedForTime); + if (time > 0) { + mcp.addMute(eventChannel.getName(), dateTime + time, LocalizedMessage.SPAM_MUTE_REASON_TEXT.toString()); + String timeString = FormatUtils.parseTimeStringFromMillis(time); + mcp.getPlayer() + .sendMessage(LocalizedMessage.MUTE_PLAYER_PLAYER_TIME_REASON.toString() + .replace("{channel_color}", eventChannel.getColor()) + .replace("{channel_name}", eventChannel.getName()) + .replace("{time}", timeString) + .replace("{reason}", LocalizedMessage.SPAM_MUTE_REASON_TEXT.toString())); + } + else { + mcp.addMute(eventChannel.getName(), LocalizedMessage.SPAM_MUTE_REASON_TEXT.toString()); + mcp.getPlayer() + .sendMessage(LocalizedMessage.MUTE_PLAYER_PLAYER_REASON.toString() + .replace("{channel_color}", eventChannel.getColor()) + .replace("{channel_name}", eventChannel.getName()) + .replace("{reason}", LocalizedMessage.SPAM_MUTE_REASON_TEXT.toString())); + } + if(eventChannel.getBungee()) { + pluginMessageController.synchronize(mcp, true); + } + mcp.getSpam().get(eventChannel).set(0, 0L); + mcp.setQuickChat(false); + return; + } else { + if (spamtimeconfig % 2 != 0) { + spamtimeconfig++; + } + if (spamcount + 1 == spamtimeconfig / 2) { + mcp.getPlayer().sendMessage(LocalizedMessage.SPAM_WARNING.toString()); + } + mcp.getSpam().get(eventChannel).set(0, spamcount + 1); + } + } else { + mcp.getSpam().get(eventChannel).set(0, 1L); + mcp.getSpam().get(eventChannel).set(1, dateTimeSeconds); + } + } else { + mcp.addSpam(eventChannel); + mcp.getSpam().get(eventChannel).add(0, 1L); + mcp.getSpam().get(eventChannel).add(1, dateTimeSeconds); + } + + if(eventChannel.hasDistance()) { + chDistance = eventChannel.getDistance(); + } + + format = FormatUtils.FormatStringAll(eventChannel.getFormat()); + + filterthis = eventChannel.isFiltered(); + if(filterthis) { + if(mcp.isFilter()) { + chat = formatService.FilterChat(chat); + } + } + PluginManager pluginManager = plugin.getServer().getPluginManager(); + for(VentureChatPlayer p : playerApiService.getOnlineMineverseChatPlayers()) { + if(p.getPlayer() != mcp.getPlayer()) { + if(!p.isListening(eventChannel.getName())) { + recipients.remove(p.getPlayer()); + recipientCount--; + continue; + } + if(plugin.getConfig().getBoolean("ignorechat", false) && p.getIgnores().contains(mcp.getUuid())) { + recipients.remove(p.getPlayer()); + recipientCount--; + continue; + } + if(plugin.getConfig().getBoolean("enable_towny_channel") && pluginManager.isPluginEnabled("Towny")) { + try { + TownyUniverse towny = TownyUniverse.getInstance(); + if(eventChannel.getName().equalsIgnoreCase("Town")) { + Resident r = towny.getResident(p.getName()); + Resident pp = towny.getResident(mcp.getName()); + if(!pp.hasTown()) { + recipients.remove(p.getPlayer()); + recipientCount--; + continue; + } + else if(!r.hasTown()) { + recipients.remove(p.getPlayer()); + recipientCount--; + continue; + } + else if(!(r.getTown().getName().equals(pp.getTown().getName()))) { + recipients.remove(p.getPlayer()); + recipientCount--; + continue; + } + } + if(eventChannel.getName().equalsIgnoreCase("Nation")) { + Resident r = towny.getResident(p.getName()); + Resident pp = towny.getResident(mcp.getName()); + if(!pp.hasNation()) { + recipients.remove(p.getPlayer()); + recipientCount--; + continue; + } + else if(!r.hasNation()) { + recipients.remove(p.getPlayer()); + recipientCount--; + continue; + } + else if(!(r.getTown().getNation().getName().equals(pp.getTown().getNation().getName()))) { + recipients.remove(p.getPlayer()); + recipientCount--; + continue; + } + } + } + catch(Exception ex) { + ex.printStackTrace(); + } + } + + if(plugin.getConfig().getBoolean("enable_factions_channel") && pluginManager.isPluginEnabled("Factions")) { + try { + if(eventChannel.getName().equalsIgnoreCase("Faction")) { + MPlayer mplayer = MPlayer.get(mcp.getPlayer()); + MPlayer mplayerp = MPlayer.get(p.getPlayer()); + if(!mplayer.hasFaction()) { + recipients.remove(p.getPlayer()); + recipientCount--; + } + else if(!mplayerp.hasFaction()) { + recipients.remove(p.getPlayer()); + recipientCount--; + } + else if(!(mplayer.getFactionName().equals(mplayerp.getFactionName()))) { + recipients.remove(p.getPlayer()); + recipientCount--; + } + } + } + catch(Exception ex) { + ex.printStackTrace(); + } + } + + if(chDistance > (double) 0 && !bungee && !p.getRangedSpy()) { + locreceip = p.getPlayer().getLocation(); + if(locreceip.getWorld() == mcp.getPlayer().getWorld()) { + diff = locreceip.subtract(locsender); + if(Math.abs(diff.getX()) > chDistance || Math.abs(diff.getZ()) > chDistance || Math.abs(diff.getY()) > chDistance) { + recipients.remove(p.getPlayer()); + recipientCount--; + continue; + } + if(!mcp.getPlayer().canSee(p.getPlayer())) { + recipientCount--; + continue; + } + } + else { + recipients.remove(p.getPlayer()); + recipientCount--; + continue; + } + } + if(!mcp.getPlayer().canSee(p.getPlayer())) { + recipientCount--; + continue; + } + } + } + + if(mcp.getPlayer().hasPermission("venturechat.color.legacy")) { + chat = FormatUtils.FormatStringLegacyColor(chat); + } + if(mcp.getPlayer().hasPermission("venturechat.color")) { + chat = FormatUtils.FormatStringColor(chat); + } + if(mcp.getPlayer().hasPermission("venturechat.format")) { + chat = FormatUtils.FormatString(chat); + } + if(!mcp.isQuickChat()) { + chat = " " + chat; + } + if(curColor.equalsIgnoreCase("None")) { + // Format the placeholders and their color codes to determine the last color code to use for the chat message color + chat = formatService.getLastCode(FormatUtils.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(mcp.getPlayer(), format))) + chat; + } + else { + chat = curColor + chat; + } + + String globalJSON = formatService.convertToJson(mcp, format, chat); + format = FormatUtils.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(mcp.getPlayer(), FormatUtils.FormatStringAll(format))); + String message = FormatUtils.stripColor(format + chat); // UTF-8 encoding issues. + int hash = message.hashCode(); + + //Create VentureChatEvent + VentureChatEvent ventureChatEvent = new VentureChatEvent(mcp, mcp.getName(), plugin.getVaultPermission().getPrimaryGroup(mcp.getPlayer()), eventChannel, recipients, recipientCount, format, chat, globalJSON, hash, bungee); + //Fire event and wait for other plugin listeners to act on it + Bukkit.getServer().getPluginManager().callEvent(ventureChatEvent); + //Call method to send the processed chat + handleVentureChatEvent(ventureChatEvent); + // Reset quick chat flag + mcp.setQuickChat(false); + } + + public void handleVentureChatEvent(VentureChatEvent event) { + VentureChatPlayer mcp = event.getMineverseChatPlayer(); + ChatChannel channel = event.getChannel(); + Set recipients = event.getRecipients(); + int recipientCount = event.getRecipientCount(); + String format = event.getFormat(); + String chat = event.getChat(); + String consoleChat = event.getConsoleChat(); + String globalJSON = event.getGlobalJSON(); + int hash = event.getHash(); + boolean bungee = event.isBungee(); + + if (essentialsDiscordHook && channel.isDefaultchannel()) { + Bukkit.getServicesManager().load(DiscordService.class).sendChatMessage(mcp.getPlayer(), chat); + } + + if(!bungee) { + if(databaseService.isEnabled()) { + databaseService.writeVentureChat(mcp.getUuid().toString(), mcp.getName(), "Local", channel.getName(), chat.replace("'", "''"), "Chat"); + } + + if(recipientCount == 1) { + if(!plugin.getConfig().getString("emptychannelalert", "&6No one is listening to you.").equals("")) { + mcp.getPlayer().sendMessage(FormatUtils.FormatStringAll(plugin.getConfig().getString("emptychannelalert", "&6No one is listening to you."))); + } + } + for(Player p : recipients) { + String json = formatService.formatModerationGUI(globalJSON, p, mcp.getName(), channel.getName(), hash); + PacketContainer packet = formatService.createPacketPlayOutChat(json); + formatService.sendPacketPlayOutChat(p, packet); + } + Bukkit.getConsoleSender().sendMessage(consoleChat); + return; + } + else { + ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream(); + DataOutputStream out = new DataOutputStream(byteOutStream); + try { + out.writeUTF("Chat"); + out.writeUTF(channel.getName()); + out.writeUTF(mcp.getName()); + out.writeUTF(mcp.getUuid().toString()); + out.writeBoolean(mcp.isBungeeToggle()); + out.writeInt(hash); + out.writeUTF(format); + out.writeUTF(chat); + if(plugin.getConfig().getString("loglevel", "info").equals("debug")) { + System.out.println(out.size() + " size bytes without json"); + } + out.writeUTF(globalJSON); + if(plugin.getConfig().getString("loglevel", "info").equals("debug")) { + System.out.println(out.size() + " bytes size with json"); + } + out.writeUTF(plugin.getVaultPermission().getPrimaryGroup(mcp.getPlayer())); + // look into not sending this + out.writeUTF(mcp.getPlayer().getDisplayName()); + pluginMessageController.sendPluginMessage(byteOutStream); + out.close(); + } + catch(Exception e) { + e.printStackTrace(); + } + return; + } + } +} diff --git a/src/main/java/mineverse/Aust1n46/chat/listeners/CommandListener.java b/src/main/java/venture/Aust1n46/chat/initiators/listeners/CommandListener.java similarity index 74% rename from src/main/java/mineverse/Aust1n46/chat/listeners/CommandListener.java rename to src/main/java/venture/Aust1n46/chat/initiators/listeners/CommandListener.java index 27963bd..cbbbc7b 100644 --- a/src/main/java/mineverse/Aust1n46/chat/listeners/CommandListener.java +++ b/src/main/java/venture/Aust1n46/chat/initiators/listeners/CommandListener.java @@ -1,18 +1,7 @@ -package mineverse.Aust1n46.chat.listeners; +package venture.Aust1n46.chat.initiators.listeners; import java.io.FileNotFoundException; -import mineverse.Aust1n46.chat.MineverseChat; -import mineverse.Aust1n46.chat.alias.Alias; -import mineverse.Aust1n46.chat.api.MineverseChatAPI; -import mineverse.Aust1n46.chat.api.MineverseChatPlayer; -import mineverse.Aust1n46.chat.channel.ChatChannel; -import mineverse.Aust1n46.chat.database.Database; -import mineverse.Aust1n46.chat.gui.GuiSlot; -import mineverse.Aust1n46.chat.localization.LocalizedMessage; -import mineverse.Aust1n46.chat.utilities.Format; -import mineverse.Aust1n46.chat.versions.VersionHandler; - import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Material; @@ -30,31 +19,56 @@ import org.bukkit.event.server.ServerCommandEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.SkullMeta; -import me.clip.placeholderapi.PlaceholderAPI; - -//This class listens for commands (Any chat that begins with a /) to use in the command spy and -//in the custom commands such as aliases. -public class CommandListener implements CommandExecutor, Listener { - private MineverseChat plugin = MineverseChat.getInstance(); - - @EventHandler - public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) throws FileNotFoundException { - if(event.getPlayer() == null) { - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&c - Event.getPlayer() returned null in PlayerCommandPreprocessEvent")); - return; - } - ConfigurationSection cs = plugin.getConfig().getConfigurationSection("commandspy"); - Boolean wec = cs.getBoolean("worldeditcommands", true); - MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer(event.getPlayer()); +import com.google.inject.Inject; +import com.google.inject.Singleton; + +import me.clip.placeholderapi.PlaceholderAPI; +import mineverse.Aust1n46.chat.localization.LocalizedMessage; +import mineverse.Aust1n46.chat.utilities.FormatUtils; +import mineverse.Aust1n46.chat.versions.VersionHandler; +import venture.Aust1n46.chat.VentureChat; +import venture.Aust1n46.chat.controllers.PluginMessageController; +import venture.Aust1n46.chat.model.Alias; +import venture.Aust1n46.chat.model.ChatChannel; +import venture.Aust1n46.chat.model.GuiSlot; +import venture.Aust1n46.chat.model.VentureChatPlayer; +import venture.Aust1n46.chat.service.VentureChatPlayerApiService; +import venture.Aust1n46.chat.service.VentureChatDatabaseService; +import venture.Aust1n46.chat.service.VentureChatFormatService; + +//This class listens for commands (Any chat that begins with a /) to use in the command spy and +//in the custom commands such as aliases. +@Singleton +public class CommandListener implements CommandExecutor, Listener { + @Inject + private VentureChat plugin; + @Inject + private VentureChatFormatService formatService; + @Inject + private VentureChatDatabaseService databaseService; + @Inject + private PluginMessageController pluginMessageController; + @Inject + private VentureChatPlayerApiService playerApiService; + + @EventHandler + public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) throws FileNotFoundException { + if(event.getPlayer() == null) { + Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&c - Event.getPlayer() returned null in PlayerCommandPreprocessEvent")); + return; + } + ConfigurationSection cs = plugin.getConfig().getConfigurationSection("commandspy"); + Boolean wec = cs.getBoolean("worldeditcommands", true); + VentureChatPlayer mcp = playerApiService.getOnlineMineverseChatPlayer(event.getPlayer()); if(!mcp.getPlayer().hasPermission("venturechat.commandspy.override")) { - for(MineverseChatPlayer p : MineverseChatAPI.getOnlineMineverseChatPlayers()) { + for(VentureChatPlayer p : playerApiService.getOnlineMineverseChatPlayers()) { if(p.hasCommandSpy()) { if(wec) { - p.getPlayer().sendMessage(Format.FormatStringAll(cs.getString("format").replace("{player}", mcp.getName()).replace("{command}", event.getMessage()))); + p.getPlayer().sendMessage(FormatUtils.FormatStringAll(cs.getString("format").replace("{player}", mcp.getName()).replace("{command}", event.getMessage()))); } else { if(!(event.getMessage().toLowerCase().startsWith("//"))) { - p.getPlayer().sendMessage(Format.FormatStringAll(cs.getString("format").replace("{player}", mcp.getName()).replace("{command}", event.getMessage()))); + p.getPlayer().sendMessage(FormatUtils.FormatStringAll(cs.getString("format").replace("{player}", mcp.getName()).replace("{command}", event.getMessage()))); } else { if(!(event.getMessage().toLowerCase().startsWith("//"))) { @@ -76,8 +90,8 @@ public class CommandListener implements CommandExecutor, Listener { String message = event.getMessage(); - if(Database.isEnabled()) { - Database.writeVentureChat(mcp.getUUID().toString(), mcp.getName(), "Local", "Command_Component", event.getMessage().replace("'", "''"), "Command"); + if(databaseService.isEnabled()) { + databaseService.writeVentureChat(mcp.getUuid().toString(), mcp.getName(), "Local", "Command_Component", event.getMessage().replace("'", "''"), "Command"); } for(Alias a : Alias.getAliases()) { @@ -105,15 +119,15 @@ public class CommandListener implements CommandExecutor, Listener { send += " " + args[b]; } if(send.length() > 0) send = send.substring(1); - s = Format.FormatStringAll(s); + s = FormatUtils.FormatStringAll(s); if(mcp.getPlayer().hasPermission("venturechat.color.legacy")) { - send = Format.FormatStringLegacyColor(send); + send = FormatUtils.FormatStringLegacyColor(send); } if(mcp.getPlayer().hasPermission("venturechat.color")) { - send = Format.FormatStringColor(send); + send = FormatUtils.FormatStringColor(send); } if(mcp.getPlayer().hasPermission("venturechat.format")) { - send = Format.FormatString(send); + send = FormatUtils.FormatString(send); } if(s.startsWith("Command:")) { mcp.getPlayer().chat(s.substring(9).replace("$", send)); @@ -124,7 +138,7 @@ public class CommandListener implements CommandExecutor, Listener { event.setCancelled(true); } if(s.startsWith("Broadcast:")) { - Format.broadcastToServer(s.substring(11).replace("$", send)); + formatService.broadcastToServer(s.substring(11).replace("$", send)); event.setCancelled(true); } } @@ -139,21 +153,21 @@ public class CommandListener implements CommandExecutor, Listener { .replace("{channel_color}", channel.getColor() + "") .replace("{channel_name}", channel.getName())); if(mcp.hasConversation()) { - for(MineverseChatPlayer p : MineverseChatAPI.getOnlineMineverseChatPlayers()) { + for(VentureChatPlayer p : playerApiService.getOnlineMineverseChatPlayers()) { if(p.isSpy()) { p.getPlayer().sendMessage(LocalizedMessage.EXIT_PRIVATE_CONVERSATION_SPY.toString() .replace("{player_sender}", mcp.getName()) - .replace("{player_receiver}", MineverseChatAPI.getMineverseChatPlayer(mcp.getConversation()).getName())); + .replace("{player_receiver}", playerApiService.getMineverseChatPlayer(mcp.getConversation()).getName())); } } mcp.getPlayer().sendMessage(LocalizedMessage.EXIT_PRIVATE_CONVERSATION.toString() - .replace("{player_receiver}", MineverseChatAPI.getMineverseChatPlayer(mcp.getConversation()).getName())); + .replace("{player_receiver}", playerApiService.getMineverseChatPlayer(mcp.getConversation()).getName())); mcp.setConversation(null); } mcp.addListening(channel.getName()); mcp.setCurrentChannel(channel); if(channel.getBungee()) { - MineverseChat.synchronize(mcp, true); + pluginMessageController.synchronize(mcp, true); } event.setCancelled(true); return; @@ -162,7 +176,7 @@ public class CommandListener implements CommandExecutor, Listener { message = message.substring(channel.getAlias().length() + 1); mcp.addListening(channel.getName()); if(channel.getBungee()) { - MineverseChat.synchronize(mcp, true); + pluginMessageController.synchronize(mcp, true); } mcp.setQuickChannel(channel); /*String format = ""; @@ -188,8 +202,8 @@ public class CommandListener implements CommandExecutor, Listener { //old 1.8 command map @EventHandler public void onServerCommand(ServerCommandEvent event) { - if (Database.isEnabled()) { - Database.writeVentureChat("N/A", "Console", "Local", "Command_Component", event.getCommand().replace("'", "''") , "Command"); + if (databaseService.isEnabled()) { + databaseService.writeVentureChat("N/A", "Console", "Local", "Command_Component", event.getCommand().replace("'", "''") , "Command"); } } @@ -202,7 +216,7 @@ public class CommandListener implements CommandExecutor, Listener { plugin.getServer().getConsoleSender().sendMessage(ChatColor.RED + "This command must be run by a player."); return true; } - MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer((Player) sender); + VentureChatPlayer mcp = playerApiService.getOnlineMineverseChatPlayer((Player) sender); for(ChatChannel channel : ChatChannel.getChatChannels()) { if(command.getName().toLowerCase().equals(channel.getAlias())) { if(args.length == 0) { @@ -213,7 +227,7 @@ public class CommandListener implements CommandExecutor, Listener { mcp.setQuickChannel(channel); mcp.addListening(channel.getName()); if(channel.getBungee()) { - MineverseChat.synchronize(mcp, true); + pluginMessageController.synchronize(mcp, true); } String msg = ""; for(int x = 0; x < args.length; x++) { @@ -234,9 +248,9 @@ public class CommandListener implements CommandExecutor, Listener { return; } e.setCancelled(true); - MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer((Player) e.getWhoClicked()); + VentureChatPlayer mcp = playerApiService.getOnlineMineverseChatPlayer((Player) e.getWhoClicked()); String playerName = e.getView().getTitle().replace(" GUI", "").replace("VentureChat: ", ""); - MineverseChatPlayer target = MineverseChatAPI.getMineverseChatPlayer(playerName); + VentureChatPlayer target = playerApiService.getMineverseChatPlayer(playerName); ItemStack skull = e.getInventory().getItem(0); SkullMeta skullMeta = (SkullMeta) skull.getItemMeta(); ChatChannel channel = ChatChannel.getChannel(ChatColor.stripColor(skullMeta.getLore().get(0)).replace("Channel: ", "")); @@ -257,7 +271,7 @@ public class CommandListener implements CommandExecutor, Listener { if(target != null) { command = command.replace("{player_name}", target.getName()); if(target.isOnline()) { - command = Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(target.getPlayer(), command)); + command = FormatUtils.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(target.getPlayer(), command)); } } else { diff --git a/src/main/java/venture/Aust1n46/chat/initiators/listeners/LoginListener.java b/src/main/java/venture/Aust1n46/chat/initiators/listeners/LoginListener.java new file mode 100644 index 0000000..716e35a --- /dev/null +++ b/src/main/java/venture/Aust1n46/chat/initiators/listeners/LoginListener.java @@ -0,0 +1,112 @@ +package venture.Aust1n46.chat.initiators.listeners; + +import java.util.UUID; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; + +import com.google.inject.Inject; +import com.google.inject.Singleton; + +import mineverse.Aust1n46.chat.utilities.FormatUtils; +import venture.Aust1n46.chat.Logger; +import venture.Aust1n46.chat.VentureChat; +import venture.Aust1n46.chat.controllers.PluginMessageController; +import venture.Aust1n46.chat.controllers.VentureChatSpigotFlatFileController; +import venture.Aust1n46.chat.model.ChatChannel; +import venture.Aust1n46.chat.model.VentureChatPlayer; +import venture.Aust1n46.chat.service.UUIDService; +import venture.Aust1n46.chat.service.VentureChatPlayerApiService; + +/** + * Manages player login and logout events. + * + * @author Aust1n46 + */ +@Singleton +public class LoginListener implements Listener { + @Inject + private VentureChat plugin; + @Inject + private UUIDService uuidService; + @Inject + private VentureChatSpigotFlatFileController spigotFlatFileController; + @Inject + private PluginMessageController pluginMessageController; + @Inject + private VentureChatPlayerApiService playerApiService; + @Inject + private Logger log; + + @EventHandler(priority = EventPriority.LOW) + public void onPlayerQuit(PlayerQuitEvent playerQuitEvent) { + VentureChatPlayer ventureChatPlayer = playerApiService.getOnlineMineverseChatPlayer(playerQuitEvent.getPlayer()); + if (ventureChatPlayer == null) { + log.warn("onPlayerQuit() Could not find VentureChatPlayer"); + } else { + spigotFlatFileController.savePlayerData(ventureChatPlayer); + ventureChatPlayer.clearMessages(); + ventureChatPlayer.setOnline(false); + playerApiService.removeMineverseChatOnlinePlayerToMap(ventureChatPlayer); + log.debug("onPlayerQuit() ventureChatPlayer:{} quit", ventureChatPlayer); + } + } + + void handleNameChange(VentureChatPlayer mcp, Player eventPlayerInstance) { + plugin.getServer().getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&e - Detected Name Change. Old Name:&c " + mcp.getName() + " &eNew Name:&c " + eventPlayerInstance.getName())); + playerApiService.removeNameFromMap(mcp.getName()); + mcp.setName(eventPlayerInstance.getName()); + playerApiService.addNameToMap(mcp); + } + + @EventHandler(priority = EventPriority.LOW) + public void onPlayerJoin(PlayerJoinEvent event) throws Exception { + VentureChatPlayer mcp = playerApiService.getMineverseChatPlayer(event.getPlayer()); + Player player = event.getPlayer(); + String name = player.getName(); + if(mcp == null) { + UUID uuid = player.getUniqueId(); + mcp = new VentureChatPlayer(uuid, name); + playerApiService.addMineverseChatPlayerToMap(mcp); + playerApiService.addNameToMap(mcp); + } + uuidService.checkOfflineUUIDWarning(mcp.getUuid()); + //check for name change + if(!mcp.getName().equals(name)) { + handleNameChange(mcp, event.getPlayer()); + } + mcp.setOnline(true); + mcp.setHasPlayed(false); + playerApiService.addMineverseChatOnlinePlayerToMap(mcp); + mcp.setJsonFormat(); + for(ChatChannel ch : ChatChannel.getAutojoinList()) { + if(ch.hasPermission()) { + if(mcp.getPlayer().hasPermission(ch.getPermission())) { + mcp.addListening(ch.getName()); + } + } + else { + mcp.addListening(ch.getName()); + } + } + + try { + if(plugin.getServer().spigot().getConfig().getBoolean("settings.bungeecord") || plugin.getServer().spigot().getPaperConfig().getBoolean("settings.velocity-support.enabled")) { + long delayInTicks = 20L; + final VentureChatPlayer sync = mcp; + plugin.getServer().getScheduler().runTaskLaterAsynchronously(plugin, new Runnable() { + public void run() { + pluginMessageController.synchronize(sync, false); + } + }, delayInTicks); + } + } + catch(NoSuchMethodError exception) { // Thrown if server isn't Paper. + // Do nothing + } + } +} diff --git a/src/main/java/mineverse/Aust1n46/chat/listeners/PacketListener.java b/src/main/java/venture/Aust1n46/chat/initiators/listeners/PacketListener.java similarity index 67% rename from src/main/java/mineverse/Aust1n46/chat/listeners/PacketListener.java rename to src/main/java/venture/Aust1n46/chat/initiators/listeners/PacketListener.java index 9a227c6..83a4bd3 100644 --- a/src/main/java/mineverse/Aust1n46/chat/listeners/PacketListener.java +++ b/src/main/java/venture/Aust1n46/chat/initiators/listeners/PacketListener.java @@ -1,11 +1,4 @@ -package mineverse.Aust1n46.chat.listeners; - -import mineverse.Aust1n46.chat.ChatMessage; -import mineverse.Aust1n46.chat.MineverseChat; -import mineverse.Aust1n46.chat.api.MineverseChatAPI; -import mineverse.Aust1n46.chat.api.MineverseChatPlayer; -import mineverse.Aust1n46.chat.utilities.Format; -import mineverse.Aust1n46.chat.versions.VersionHandler; +package venture.Aust1n46.chat.initiators.listeners; import com.comphenix.protocol.PacketType; import com.comphenix.protocol.events.ListenerPriority; @@ -13,13 +6,29 @@ import com.comphenix.protocol.events.PacketAdapter; import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.events.PacketEvent; import com.comphenix.protocol.wrappers.WrappedChatComponent; +import com.google.inject.Inject; +import com.google.inject.Singleton; + +import mineverse.Aust1n46.chat.versions.VersionHandler; +import venture.Aust1n46.chat.VentureChat; +import venture.Aust1n46.chat.model.ChatMessage; +import venture.Aust1n46.chat.model.VentureChatPlayer; +import venture.Aust1n46.chat.service.VentureChatPlayerApiService; +import venture.Aust1n46.chat.service.VentureChatFormatService; //This class listens for chat packets and intercepts them before they are sent to the Player. //The packets are modified to include advanced json formating and the message remover button if the //player has permission to remove messages. +@Singleton public class PacketListener extends PacketAdapter { - public PacketListener() { - super(MineverseChat.getInstance(), ListenerPriority.MONITOR, new PacketType[] { PacketType.Play.Server.CHAT }); + @Inject + private VentureChatFormatService formatter; + @Inject + private VentureChatPlayerApiService playerApiService; + + @Inject + public PacketListener(final VentureChat plugin) { + super(plugin, ListenerPriority.MONITOR, new PacketType[] { PacketType.Play.Server.CHAT }); } @Override @@ -28,7 +37,7 @@ public class PacketListener extends PacketAdapter { return; } - MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer(event.getPlayer()); + VentureChatPlayer mcp = playerApiService.getOnlineMineverseChatPlayer(event.getPlayer()); if(mcp == null) { return; } @@ -63,8 +72,8 @@ public class PacketListener extends PacketAdapter { e.printStackTrace(); } - String message = Format.toPlainText(chat.getHandle(), chat.getHandleType()); - String coloredMessage = Format.toColoredText(chat.getHandle(), chat.getHandleType()); + String message = formatter.toPlainText(chat.getHandle(), chat.getHandleType()); + String coloredMessage = formatter.toColoredText(chat.getHandle(), chat.getHandleType()); if(message == null) { return; } diff --git a/src/main/java/mineverse/Aust1n46/chat/listeners/SignListener.java b/src/main/java/venture/Aust1n46/chat/initiators/listeners/SignListener.java similarity index 54% rename from src/main/java/mineverse/Aust1n46/chat/listeners/SignListener.java rename to src/main/java/venture/Aust1n46/chat/initiators/listeners/SignListener.java index d402368..37f8827 100644 --- a/src/main/java/mineverse/Aust1n46/chat/listeners/SignListener.java +++ b/src/main/java/venture/Aust1n46/chat/initiators/listeners/SignListener.java @@ -1,34 +1,38 @@ -package mineverse.Aust1n46.chat.listeners; +package venture.Aust1n46.chat.initiators.listeners; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.block.SignChangeEvent; -import mineverse.Aust1n46.chat.MineverseChat; -import mineverse.Aust1n46.chat.api.MineverseChatAPI; -import mineverse.Aust1n46.chat.api.MineverseChatPlayer; -import mineverse.Aust1n46.chat.utilities.Format; +import com.google.inject.Inject; +import com.google.inject.Singleton; + +import mineverse.Aust1n46.chat.utilities.FormatUtils; +import venture.Aust1n46.chat.model.VentureChatPlayer; +import venture.Aust1n46.chat.service.VentureChatPlayerApiService; //This class listens for text being added to signs, and it formats them to allow colors and formatting. +@Singleton public class SignListener implements Listener { - MineverseChat plugin = MineverseChat.getInstance(); - + @Inject + private VentureChatPlayerApiService playerApiService; + @EventHandler(priority = EventPriority.HIGH) public void onSignChange(SignChangeEvent event) { - MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer(event.getPlayer()); + VentureChatPlayer mcp = playerApiService.getOnlineMineverseChatPlayer(event.getPlayer()); for(int a = 0; a < event.getLines().length; a++) { String line = event.getLine(a); if(mcp.getPlayer().hasPermission("venturechat.color.legacy")) { - line = Format.FormatStringLegacyColor(line); + line = FormatUtils.FormatStringLegacyColor(line); } if(mcp.getPlayer().hasPermission("venturechat.color")) { - line = Format.FormatStringColor(line); + line = FormatUtils.FormatStringColor(line); } if(mcp.getPlayer().hasPermission("venturechat.format")) { - line = Format.FormatString(line); + line = FormatUtils.FormatString(line); } event.setLine(a, line); } } -} \ No newline at end of file +} diff --git a/src/main/java/venture/Aust1n46/chat/initiators/listeners/VentureCommandExecutor.java b/src/main/java/venture/Aust1n46/chat/initiators/listeners/VentureCommandExecutor.java new file mode 100644 index 0000000..95ee358 --- /dev/null +++ b/src/main/java/venture/Aust1n46/chat/initiators/listeners/VentureCommandExecutor.java @@ -0,0 +1,217 @@ +package venture.Aust1n46.chat.initiators.listeners; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabExecutor; + +import com.google.inject.Inject; +import com.google.inject.Singleton; + +import venture.Aust1n46.chat.VentureChat; +import venture.Aust1n46.chat.controllers.commands.Broadcast; +import venture.Aust1n46.chat.controllers.commands.BungeeToggle; +import venture.Aust1n46.chat.controllers.commands.Channel; +import venture.Aust1n46.chat.controllers.commands.Channelinfo; +import venture.Aust1n46.chat.controllers.commands.Chatinfo; +import venture.Aust1n46.chat.controllers.commands.Chatreload; +import venture.Aust1n46.chat.controllers.commands.Chlist; +import venture.Aust1n46.chat.controllers.commands.Chwho; +import venture.Aust1n46.chat.controllers.commands.Clearchat; +import venture.Aust1n46.chat.controllers.commands.Commandblock; +import venture.Aust1n46.chat.controllers.commands.Commandspy; +import venture.Aust1n46.chat.controllers.commands.Edit; +import venture.Aust1n46.chat.controllers.commands.Filter; +import venture.Aust1n46.chat.controllers.commands.Force; +import venture.Aust1n46.chat.controllers.commands.Forceall; +import venture.Aust1n46.chat.controllers.commands.IgnoreCommandExecutor; +import venture.Aust1n46.chat.controllers.commands.Kickchannel; +import venture.Aust1n46.chat.controllers.commands.Kickchannelall; +import venture.Aust1n46.chat.controllers.commands.Leave; +import venture.Aust1n46.chat.controllers.commands.Listen; +import venture.Aust1n46.chat.controllers.commands.Me; +import venture.Aust1n46.chat.controllers.commands.MessageCommandExecutor; +import venture.Aust1n46.chat.controllers.commands.MessageToggle; +import venture.Aust1n46.chat.controllers.commands.Mute; +import venture.Aust1n46.chat.controllers.commands.Muteall; +import venture.Aust1n46.chat.controllers.commands.Notifications; +import venture.Aust1n46.chat.controllers.commands.Party; +import venture.Aust1n46.chat.controllers.commands.RangedSpy; +import venture.Aust1n46.chat.controllers.commands.Removemessage; +import venture.Aust1n46.chat.controllers.commands.Reply; +import venture.Aust1n46.chat.controllers.commands.Setchannel; +import venture.Aust1n46.chat.controllers.commands.Setchannelall; +import venture.Aust1n46.chat.controllers.commands.Spy; +import venture.Aust1n46.chat.controllers.commands.Unmute; +import venture.Aust1n46.chat.controllers.commands.Unmuteall; +import venture.Aust1n46.chat.controllers.commands.VentureChatGui; +import venture.Aust1n46.chat.controllers.commands.Venturechat; +import venture.Aust1n46.chat.model.VentureCommand; + +/** + * Class that initializes and executes the plugin's commands. + */ +@Singleton +public class VentureCommandExecutor implements TabExecutor { + private Map commands = new HashMap(); + + @Inject + private VentureChat plugin; + @Inject + private MessageCommandExecutor messageCommandExecutor; + @Inject + private IgnoreCommandExecutor ignoreCommandExecutor; + + @Inject + private Broadcast broadcast; + @Inject + private Channel channel; + @Inject + private Channelinfo channelinfo; + @Inject + private Chatinfo chatinfo; + @Inject + private Chatreload chatreload; + @Inject + private Chlist chlist; + @Inject + private Chwho chwho; + @Inject + private Clearchat clearchat; + @Inject + private Commandblock commandblock; + @Inject + private Commandspy commandspy; + @Inject + private Edit edit; + @Inject + private Filter filter; + @Inject + private Force force; + @Inject + private Forceall forceall; + @Inject + private Kickchannel kickchannel; + @Inject + private Kickchannelall kickchannelall; + @Inject + private Leave leave; + @Inject + private Listen listen; + @Inject + private Me me; + @Inject + private Venturechat venturechat; + @Inject + private Notifications notifications; + @Inject + private Party party; + @Inject + private RangedSpy rangedSpy; + @Inject + private Removemessage removemessage; + @Inject + private Setchannel setchannel; + @Inject + private Setchannelall setchannelall; + @Inject + private Spy spy; + @Inject + private VentureChatGui ventureChatGui; + @Inject + private MessageToggle messageToggle; + @Inject + private BungeeToggle bungeeToggle; + @Inject + private Reply reply; + @Inject + private Mute mute; + @Inject + private Muteall muteall; + @Inject + private Unmute unmute; + @Inject + private Unmuteall unmuteall; + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] parameters) { + commands.get(command.getName()).execute(sender, command.getName(), parameters); + return true; + } + + @Override + public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { + return commands.get(command.getName()).onTabComplete(sender, command, label, args); + } + + @Inject + public void postConstruct() { + commands.put("broadcast", broadcast); + commands.put("channel", channel); + commands.put("join", channel); + commands.put("channelinfo", channelinfo); + commands.put("chatinfo", chatinfo); + commands.put("chatreload", chatreload); + commands.put("chlist", chlist); + commands.put("chwho", chwho); + commands.put("clearchat", clearchat); + commands.put("commandblock", commandblock); + commands.put("commandspy", commandspy); + commands.put("edit", edit); + commands.put("filter", filter); + commands.put("force", force); + commands.put("forceall", forceall); + commands.put("kickchannel", kickchannel); + commands.put("kickchannelall", kickchannelall); + commands.put("leave", leave); + commands.put("listen", listen); + commands.put("me", me); + commands.put("venturechat", venturechat); + commands.put("notifications", notifications); + commands.put("party", party); + commands.put("rangedspy", rangedSpy); + commands.put("removemessage", removemessage); + commands.put("setchannel", setchannel); + commands.put("setchannelall", setchannelall); + commands.put("spy", spy); + commands.put("venturechatgui", ventureChatGui); + commands.put("messagetoggle", messageToggle); + commands.put("bungeetoggle", bungeeToggle); + for(String command : commands.keySet()) { + registerCommand(command, this); + } + + plugin.getServer().getScheduler().runTaskLater(plugin, () -> { + commands.put("reply", reply); + commands.put("r", reply); + registerCommand("reply", this); + registerCommand("r", this); + + commands.put("mute", mute); + commands.put("muteall", muteall); + commands.put("unmute", unmute); + commands.put("unmuteall", unmuteall); + registerCommand("mute", this); + registerCommand("muteall", this); + registerCommand("unmute", this); + registerCommand("unmuteall", this); + + registerCommand("message", messageCommandExecutor); + registerCommand("msg", messageCommandExecutor); + registerCommand("tell", messageCommandExecutor); + registerCommand("whisper", messageCommandExecutor); + + registerCommand("ignore", ignoreCommandExecutor); + }, 0); + } + + private void registerCommand(String command, CommandExecutor commandExecutor) { + if(plugin.getCommand(command) != null) { + plugin.getCommand(command).setExecutor(commandExecutor); + } + } +} diff --git a/src/main/java/venture/Aust1n46/chat/initiators/schedulers/UnmuteScheduler.java b/src/main/java/venture/Aust1n46/chat/initiators/schedulers/UnmuteScheduler.java new file mode 100644 index 0000000..c25fcab --- /dev/null +++ b/src/main/java/venture/Aust1n46/chat/initiators/schedulers/UnmuteScheduler.java @@ -0,0 +1,66 @@ +package venture.Aust1n46.chat.initiators.schedulers; + +import java.util.Iterator; + +import org.bukkit.Bukkit; +import org.bukkit.scheduler.BukkitScheduler; + +import com.google.inject.Inject; + +import mineverse.Aust1n46.chat.localization.LocalizedMessage; +import mineverse.Aust1n46.chat.utilities.FormatUtils; +import venture.Aust1n46.chat.VentureChat; +import venture.Aust1n46.chat.controllers.PluginMessageController; +import venture.Aust1n46.chat.controllers.commands.MuteContainer; +import venture.Aust1n46.chat.model.ChatChannel; +import venture.Aust1n46.chat.model.VentureChatPlayer; +import venture.Aust1n46.chat.service.VentureChatPlayerApiService; + +public class UnmuteScheduler { + @Inject + private VentureChat plugin; + @Inject + private PluginMessageController pluginMessageController; + @Inject + private VentureChatPlayerApiService playerApiService; + + @Inject + public void postConstruct() { + BukkitScheduler scheduler = Bukkit.getServer().getScheduler(); + scheduler.runTaskTimerAsynchronously(plugin, new Runnable() { + @Override + public void run() { + for (VentureChatPlayer p : playerApiService.getOnlineMineverseChatPlayers()) { + long currentTimeMillis = System.currentTimeMillis(); + Iterator iterator = p.getMutes().iterator(); + while (iterator.hasNext()) { + MuteContainer mute = iterator.next(); + if(ChatChannel.isChannel(mute.getChannel())) { + ChatChannel channel = ChatChannel.getChannel(mute.getChannel()); + long timemark = mute.getDuration(); + if (timemark == 0) { + continue; + } + if (plugin.getConfig().getString("loglevel", "info").equals("trace")) { + System.out.println(currentTimeMillis + " " + timemark); + } + if (currentTimeMillis >= timemark) { + iterator.remove(); + p.getPlayer().sendMessage(LocalizedMessage.UNMUTE_PLAYER_PLAYER.toString() + .replace("{player}", p.getName()).replace("{channel_color}", channel.getColor()) + .replace("{channel_name}", mute.getChannel())); + if(channel.getBungee()) { + pluginMessageController.synchronize(p, true); + } + } + } + } + } + if (plugin.getConfig().getString("loglevel", "info").equals("trace")) { + Bukkit.getConsoleSender() + .sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&e - Updating Player Mutes")); + } + } + }, 0L, 60L); // three second interval + } +} diff --git a/src/main/java/mineverse/Aust1n46/chat/alias/Alias.java b/src/main/java/venture/Aust1n46/chat/model/Alias.java similarity index 88% rename from src/main/java/mineverse/Aust1n46/chat/alias/Alias.java rename to src/main/java/venture/Aust1n46/chat/model/Alias.java index 282b68b..4714381 100644 --- a/src/main/java/mineverse/Aust1n46/chat/alias/Alias.java +++ b/src/main/java/venture/Aust1n46/chat/model/Alias.java @@ -1,14 +1,13 @@ -package mineverse.Aust1n46.chat.alias; +package venture.Aust1n46.chat.model; import java.util.ArrayList; import java.util.List; import org.bukkit.configuration.ConfigurationSection; -import mineverse.Aust1n46.chat.MineverseChat; +import venture.Aust1n46.chat.VentureChat; public class Alias { - private static MineverseChat plugin = MineverseChat.getInstance(); private static List aliases; private String name; @@ -23,7 +22,7 @@ public class Alias { this.permission = "venturechat." + permission; } - public static void initialize() { + public static void initialize(VentureChat plugin) { aliases = new ArrayList(); ConfigurationSection cs = plugin.getConfig().getConfigurationSection("alias"); for (String key : cs.getKeys(false)) { diff --git a/src/main/java/mineverse/Aust1n46/chat/channel/ChatChannel.java b/src/main/java/venture/Aust1n46/chat/model/ChatChannel.java similarity index 86% rename from src/main/java/mineverse/Aust1n46/chat/channel/ChatChannel.java rename to src/main/java/venture/Aust1n46/chat/model/ChatChannel.java index 436826a..e2633fa 100644 --- a/src/main/java/mineverse/Aust1n46/chat/channel/ChatChannel.java +++ b/src/main/java/venture/Aust1n46/chat/model/ChatChannel.java @@ -1,478 +1,460 @@ -package mineverse.Aust1n46.chat.channel; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.configuration.ConfigurationSection; - -import mineverse.Aust1n46.chat.MineverseChat; -import mineverse.Aust1n46.chat.utilities.Format; - -/** - * Chat channel object pojo. Class also contains static initialization methods - * for reading chat channels from the config file. - * - * @author Aust1n46 - */ -public class ChatChannel { - private static final String PERMISSION_PREFIX = "venturechat."; - private static final String NO_PERMISSIONS = "venturechat.none"; - - private static boolean aliasesRegisteredAsCommands; - - private static MineverseChat plugin = MineverseChat.getInstance(); - private static ChatChannel defaultChatChannel; - private static String defaultColor; - private static HashMap chatChannels; - - @Deprecated - private static ChatChannel[] channels; - - private String name; - private String permission; - private String speakPermission; - private boolean mutable; - private String color; - private String chatColor; - private boolean defaultChannel; - private boolean autojoin; - private String alias; - private double distance; - private boolean filter; - private boolean bungee; - private String format; - private int cooldown; - private String prefix; - - /** - * Read chat channels from config file and initialize channel array. - */ - public static void initialize(boolean aliasesRegisteredAsCommands) { - chatChannels = new HashMap(); - ChatChannel.aliasesRegisteredAsCommands = aliasesRegisteredAsCommands; - ConfigurationSection cs = plugin.getConfig().getConfigurationSection("channels"); - int len = (cs.getKeys(false)).size(); - channels = new ChatChannel[len]; - int counter = 0; - for (String key : cs.getKeys(false)) { - String color = cs.getString(key + ".color", "white"); - String chatColor = cs.getString(key + ".chatcolor", "white"); - String name = key; - String permission = cs.getString(key + ".permissions", "None"); - String speakPermission = cs.getString(key + ".speak_permissions", "None"); - boolean mutable = cs.getBoolean(key + ".mutable", false); - boolean filter = cs.getBoolean(key + ".filter", true); - boolean bungee = cs.getBoolean(key + ".bungeecord", false); - String format = cs.getString(key + ".format", "Default"); - boolean defaultChannel = cs.getBoolean(key + ".default", false); - String alias = cs.getString(key + ".alias", "None"); - double distance = cs.getDouble(key + ".distance", (double) 0); - int cooldown = cs.getInt(key + ".cooldown", 0); - boolean autojoin = cs.getBoolean(key + ".autojoin", false); - String prefix = cs.getString(key + ".channel_prefix"); - ChatChannel chatChannel = new ChatChannel(name, color, chatColor, permission, speakPermission, mutable, - filter, defaultChannel, alias, distance, autojoin, bungee, cooldown, prefix, format); - channels[counter++] = chatChannel; - chatChannels.put(name.toLowerCase(), chatChannel); - chatChannels.put(alias.toLowerCase(), chatChannel); - if (defaultChannel) { - defaultChatChannel = chatChannel; - defaultColor = color; - } - } - // Error handling for missing default channel in the config. - if(defaultChatChannel == null) { - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - &cNo default channel found!")); - defaultChatChannel = new ChatChannel("MissingDefault", "red", "red", "None", "None", false, - true, true, "md", 0, true, false, 0, "&f[&cMissingDefault&f]", "{venturechat_channel_prefix} {vault_prefix}{player_displayname}&c:"); - defaultColor = defaultChatChannel.getColor(); - chatChannels.put("missingdefault", defaultChatChannel); - chatChannels.put("md", defaultChatChannel); - } - } - - public static boolean areAliasesRegisteredAsCommands() { - return aliasesRegisteredAsCommands; - } - - /** - * Get array of chat channels. - * - * @return {@link ChatChannel}[] - */ - @Deprecated - public static ChatChannel[] getChannels() { - return channels; - } - - /** - * Get list of chat channels. - * - * @return {@link Collection}<{@link ChatChannel}> - */ - public static Collection getChatChannels() { - return new HashSet(chatChannels.values()); - } - - /** - * Get a chat channel by name. - * - * @param channelName - * name of channel to get. - * @return {@link ChatChannel} - */ - public static ChatChannel getChannel(String channelName) { - return chatChannels.get(channelName.toLowerCase()); - } - - /** - * Checks if the chat channel exists. - * - * @param channelName - * name of channel to check. - * @return true if channel exists, false otherwise. - */ - public static boolean isChannel(String channelName) { - return getChannel(channelName) != null; - } - - /** - * Get default chat channel color. - * - * @return {@link String} - */ - public static String getDefaultColor() { - return defaultColor; - } - - /** - * Get default chat channel. - * - * @return {@link ChatChannel} - */ - public static ChatChannel getDefaultChannel() { - return defaultChatChannel; - } - - /** - * Get list of chat channels with autojoin set to true. - * - * @return {@link List}<{@link ChatChannel}> - */ - public static List getAutojoinList() { - List joinlist = new ArrayList(); - for (ChatChannel c : channels) { - if (c.getAutojoin()) { - joinlist.add(c); - } - } - return joinlist; - } - - /** - * Parameterized constructor a {@link ChatChannel}. - * - * @param name - * @param color - * @param chatColor - * @param permission - * @param speakPermission - * @param mutable - * @param filter - * @param defaultChannel - * @param alias - * @param distance - * @param autojoin - * @param bungee - * @param cooldown - * @param format - */ - public ChatChannel(String name, String color, String chatColor, String permission, String speakPermission, - boolean mutable, boolean filter, boolean defaultChannel, String alias, double distance, boolean autojoin, - boolean bungee, int cooldown, String prefix, String format) { - this.name = name; - this.color = color; - this.chatColor = chatColor; - this.permission = PERMISSION_PREFIX + permission; - this.speakPermission = PERMISSION_PREFIX + speakPermission; - this.mutable = mutable; - this.filter = filter; - this.defaultChannel = defaultChannel; - this.alias = alias; - this.distance = distance; - this.autojoin = autojoin; - this.bungee = bungee; - this.cooldown = cooldown; - this.format = format; - this.prefix = prefix; - } - - /** - * Deprecated parameterized constructor a {@link ChatChannel}. - * - * @param name - * @param color - * @param chatColor - * @param permission - * @param speakPermission - * @param mutable - * @param filter - * @param defaultChannel - * @param alias - * @param distance - * @param autojoin - * @param bungee - * @param cooldown - * @param format - */ - @Deprecated - public ChatChannel(String name, String color, String chatColor, String permission, String speakPermission, - Boolean mutable, Boolean filter, Boolean defaultChannel, String alias, Double distance, Boolean autojoin, - Boolean bungee, int cooldown, String format) { - this.name = name; - this.color = color; - this.chatColor = chatColor; - this.permission = PERMISSION_PREFIX + permission; - this.speakPermission = PERMISSION_PREFIX + speakPermission; - this.mutable = mutable; - this.filter = filter; - this.defaultChannel = defaultChannel; - this.alias = alias; - this.distance = distance; - this.autojoin = autojoin; - this.bungee = bungee; - this.cooldown = cooldown; - this.format = format; - } - - /** - * Get the name of the chat channel. - * - * @return {@link String} - */ - public String getName() { - return name; - } - - /** - * Get the format of the chat channel. - * - * @return {@link String} - */ - public String getFormat() { - return format; - } - - /** - * Get the cooldown of the chat channel in seconds. - * - * @return int - */ - public int getCooldown() { - return cooldown; - } - - /** - * Get the prefix of the chat channel. - * @return String - */ - public String getPrefix() { - return prefix; - } - - /** - * Check if the chat channel is BungeeCord enabled. - * - * @return {@link Boolean#TRUE} if the chat channel is BungeeCord enabled, - * {@link Boolean#FALSE} otherwise. - */ - public Boolean getBungee() { - return Boolean.valueOf(bungee); - } - - /** - * Get the permissions node for the chat channel. - * - * @return {@link String} - */ - public String getPermission() { - return permission; - } - - /** - * Check if autojoin is enabled for the chat channel. - * - * @return {@link Boolean#TRUE} if autojoin is enabled, {@link Boolean#FALSE} - * otherwise. - */ - public Boolean getAutojoin() { - return Boolean.valueOf(autojoin); - } - - /** - * Check if the chat channel allows muting. - * - * @return {@link Boolean#TRUE} if muting is allowed, {@link Boolean#FALSE} - * otherwise. - */ - public Boolean isMutable() { - return Boolean.valueOf(mutable); - } - - /** - * Get the formatted color of the chat channel. - * - * @return {@link String}. Returns {@link Format#DEFAULT_COLOR_CODE} if the - * color is invalid. - */ - public String getColor() { - if (Format.isValidColor(color)) { - return String.valueOf(ChatColor.valueOf(color.toUpperCase())); - } - if (Format.isValidHexColor(color)) { - return Format.convertHexColorCodeToBukkitColorCode(color); - } - return Format.DEFAULT_COLOR_CODE; - } - - /** - * Get the raw color value of the chat channel. - * - * @return {@link String} - */ - public String getColorRaw() { - return color; - } - - /** - * Get the formatted chat color of the chat channel. - * - * @return {@link String}. Returns {@link Format#DEFAULT_COLOR_CODE} if the chat - * color is invalid. - */ - public String getChatColor() { - if (chatColor.equalsIgnoreCase("None")) { - return chatColor; - } - if (Format.isValidColor(chatColor)) { - return String.valueOf(ChatColor.valueOf(chatColor.toUpperCase())); - } - if (Format.isValidHexColor(chatColor)) { - return Format.convertHexColorCodeToBukkitColorCode(chatColor); - } - return Format.DEFAULT_COLOR_CODE; - } - - /** - * Get the raw chat color value of the chat channel. - * - * @return {@link String} - */ - public String getChatColorRaw() { - return chatColor; - } - - /** - * Check if the chat channel is the default chat channel. - * - * @return {@link Boolean#TRUE} if the chat channel is the default chat channel, - * {@link Boolean#FALSE} otherwise. - */ - public Boolean isDefaultchannel() { - return Boolean.valueOf(defaultChannel); - } - - /** - * Get the alias of the chat channel. - * - * @return {@link String} - */ - public String getAlias() { - return alias; - } - - /** - * Get the distance of the chat channel in blocks. - * - * @return {@link Double} - */ - public Double getDistance() { - return Double.valueOf(distance); - } - - /** - * Checks if the chat channel has a distance set. - * - * @return {@link Boolean#TRUE} if the distance is greater than zero, - * {@link Boolean#FALSE} otherwise. - */ - public Boolean hasDistance() { - return Boolean.valueOf(distance > 0); - } - - /** - * Checks if the chat channel has a cooldown set. - * - * @return {@link Boolean#TRUE} if the cooldown is greater than zero, - * {@link Boolean#FALSE} otherwise. - */ - public Boolean hasCooldown() { - return Boolean.valueOf(cooldown > 0); - } - - /** - * Checks if the chat channel has a permission set. - * - * @return {@link Boolean#TRUE} if the permission does not equal - * {@link ChatChannel#NO_PERMISSIONS}, {@link Boolean#FALSE} otherwise. - */ - public Boolean hasPermission() { - return Boolean.valueOf(!permission.equalsIgnoreCase(NO_PERMISSIONS)); - } - - /** - * Checks if the chat channel has a speak permission set. - * - * @return true if the speak permission does not equal - * {@link ChatChannel#NO_PERMISSIONS}, false otherwise. - */ - public boolean hasSpeakPermission() { - return !speakPermission.equalsIgnoreCase(NO_PERMISSIONS); - } - - /** - * Get the speak permissions node for the chat channel. - * - * @return {@link String} - */ - public String getSpeakPermission() { - return speakPermission; - } - - /** - * Checks if the chat channel has the filter enabled. - * - * @return {@link Boolean#TRUE} if the chat channel has the filter enabled, - * {@link Boolean#FALSE} otherwise. - */ - public Boolean isFiltered() { - return Boolean.valueOf(filter); - } - - /** - * Compares the chat channel by name to determine equality. - * - * @param channel - * Object to compare for equality. - * @return true if the objects are equal, false otherwise. - */ - @Override - public boolean equals(Object channel) { - return channel instanceof ChatChannel && this.name.equals(((ChatChannel) channel).getName()); - } -} +package venture.Aust1n46.chat.model; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.configuration.ConfigurationSection; + +import mineverse.Aust1n46.chat.utilities.FormatUtils; +import venture.Aust1n46.chat.VentureChat; +import venture.Aust1n46.chat.service.VentureChatFormatService; + +/** + * Chat channel object pojo. Class also contains static initialization methods + * for reading chat channels from the config file. + * + * @author Aust1n46 + */ +public class ChatChannel { + private static final String PERMISSION_PREFIX = "venturechat."; + private static final String NO_PERMISSIONS = "venturechat.none"; + + private static boolean aliasesRegisteredAsCommands; + private static ChatChannel defaultChatChannel; + private static String defaultColor; + private static HashMap chatChannels; + + private String name; + private String permission; + private String speakPermission; + private boolean mutable; + private String color; + private String chatColor; + private boolean defaultChannel; + private boolean autojoin; + private String alias; + private double distance; + private boolean filter; + private boolean bungee; + private String format; + private int cooldown; + private String prefix; + + /** + * Read chat channels from config file and initialize channel array. + */ + public static void initialize(final VentureChat plugin, final VentureChatFormatService formatter, final boolean aliasesRegisteredAsCommands) { + chatChannels = new HashMap(); + ChatChannel.aliasesRegisteredAsCommands = aliasesRegisteredAsCommands; + ConfigurationSection cs = plugin.getConfig().getConfigurationSection("channels"); + for (String key : cs.getKeys(false)) { + String color = cs.getString(key + ".color", "white"); + String chatColor = cs.getString(key + ".chatcolor", "white"); + String name = key; + String permission = cs.getString(key + ".permissions", "None"); + String speakPermission = cs.getString(key + ".speak_permissions", "None"); + boolean mutable = cs.getBoolean(key + ".mutable", false); + boolean filter = cs.getBoolean(key + ".filter", true); + boolean bungee = cs.getBoolean(key + ".bungeecord", false); + String format = cs.getString(key + ".format", "Default"); + boolean defaultChannel = cs.getBoolean(key + ".default", false); + String alias = cs.getString(key + ".alias", "None"); + double distance = cs.getDouble(key + ".distance", (double) 0); + int cooldown = cs.getInt(key + ".cooldown", 0); + boolean autojoin = cs.getBoolean(key + ".autojoin", false); + String prefix = cs.getString(key + ".channel_prefix"); + ChatChannel chatChannel = new ChatChannel(name, color, chatColor, permission, speakPermission, mutable, + filter, defaultChannel, alias, distance, autojoin, bungee, cooldown, prefix, format); + chatChannels.put(name.toLowerCase(), chatChannel); + chatChannels.put(alias.toLowerCase(), chatChannel); + if (defaultChannel) { + defaultChatChannel = chatChannel; + defaultColor = color; + } + } + // Error handling for missing default channel in the config. + if(defaultChatChannel == null) { + Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&e - &cNo default channel found!")); + defaultChatChannel = new ChatChannel("MissingDefault", "red", "red", "None", "None", false, + true, true, "md", 0, true, false, 0, "&f[&cMissingDefault&f]", "{venturechat_channel_prefix} {vault_prefix}{player_displayname}&c:"); + defaultColor = defaultChatChannel.getColor(); + chatChannels.put("missingdefault", defaultChatChannel); + chatChannels.put("md", defaultChatChannel); + } + } + + public static boolean areAliasesRegisteredAsCommands() { + return aliasesRegisteredAsCommands; + } + + /** + * Get list of chat channels. + * + * @return {@link Collection}<{@link ChatChannel}> + */ + public static Collection getChatChannels() { + return new HashSet(chatChannels.values()); + } + + /** + * Get a chat channel by name. + * + * @param channelName + * name of channel to get. + * @return {@link ChatChannel} + */ + public static ChatChannel getChannel(String channelName) { + return chatChannels.get(channelName.toLowerCase()); + } + + /** + * Checks if the chat channel exists. + * + * @param channelName + * name of channel to check. + * @return true if channel exists, false otherwise. + */ + public static boolean isChannel(String channelName) { + return getChannel(channelName) != null; + } + + /** + * Get default chat channel color. + * + * @return {@link String} + */ + public static String getDefaultColor() { + return defaultColor; + } + + /** + * Get default chat channel. + * + * @return {@link ChatChannel} + */ + public static ChatChannel getDefaultChannel() { + return defaultChatChannel; + } + + /** + * Get list of chat channels with autojoin set to true. + * + * @return {@link List}<{@link ChatChannel}> + */ + public static List getAutojoinList() { + List joinlist = new ArrayList(); + for (ChatChannel c : chatChannels.values()) { + if (c.getAutojoin()) { + joinlist.add(c); + } + } + return joinlist; + } + + /** + * Parameterized constructor a {@link ChatChannel}. + * + * @param name + * @param color + * @param chatColor + * @param permission + * @param speakPermission + * @param mutable + * @param filter + * @param defaultChannel + * @param alias + * @param distance + * @param autojoin + * @param bungee + * @param cooldown + * @param format + */ + public ChatChannel(String name, String color, String chatColor, String permission, String speakPermission, + boolean mutable, boolean filter, boolean defaultChannel, String alias, double distance, boolean autojoin, + boolean bungee, int cooldown, String prefix, String format) { + this.name = name; + this.color = color; + this.chatColor = chatColor; + this.permission = PERMISSION_PREFIX + permission; + this.speakPermission = PERMISSION_PREFIX + speakPermission; + this.mutable = mutable; + this.filter = filter; + this.defaultChannel = defaultChannel; + this.alias = alias; + this.distance = distance; + this.autojoin = autojoin; + this.bungee = bungee; + this.cooldown = cooldown; + this.format = format; + this.prefix = prefix; + } + + /** + * Deprecated parameterized constructor a {@link ChatChannel}. + * + * @param name + * @param color + * @param chatColor + * @param permission + * @param speakPermission + * @param mutable + * @param filter + * @param defaultChannel + * @param alias + * @param distance + * @param autojoin + * @param bungee + * @param cooldown + * @param format + */ + @Deprecated + public ChatChannel(String name, String color, String chatColor, String permission, String speakPermission, + Boolean mutable, Boolean filter, Boolean defaultChannel, String alias, Double distance, Boolean autojoin, + Boolean bungee, int cooldown, String format) { + this.name = name; + this.color = color; + this.chatColor = chatColor; + this.permission = PERMISSION_PREFIX + permission; + this.speakPermission = PERMISSION_PREFIX + speakPermission; + this.mutable = mutable; + this.filter = filter; + this.defaultChannel = defaultChannel; + this.alias = alias; + this.distance = distance; + this.autojoin = autojoin; + this.bungee = bungee; + this.cooldown = cooldown; + this.format = format; + } + + /** + * Get the name of the chat channel. + * + * @return {@link String} + */ + public String getName() { + return name; + } + + /** + * Get the format of the chat channel. + * + * @return {@link String} + */ + public String getFormat() { + return format; + } + + /** + * Get the cooldown of the chat channel in seconds. + * + * @return int + */ + public int getCooldown() { + return cooldown; + } + + /** + * Get the prefix of the chat channel. + * @return String + */ + public String getPrefix() { + return prefix; + } + + /** + * Check if the chat channel is BungeeCord enabled. + * + * @return {@link Boolean#TRUE} if the chat channel is BungeeCord enabled, + * {@link Boolean#FALSE} otherwise. + */ + public Boolean getBungee() { + return Boolean.valueOf(bungee); + } + + /** + * Get the permissions node for the chat channel. + * + * @return {@link String} + */ + public String getPermission() { + return permission; + } + + /** + * Check if autojoin is enabled for the chat channel. + * + * @return {@link Boolean#TRUE} if autojoin is enabled, {@link Boolean#FALSE} + * otherwise. + */ + public Boolean getAutojoin() { + return Boolean.valueOf(autojoin); + } + + /** + * Check if the chat channel allows muting. + * + * @return {@link Boolean#TRUE} if muting is allowed, {@link Boolean#FALSE} + * otherwise. + */ + public Boolean isMutable() { + return Boolean.valueOf(mutable); + } + + /** + * Get the formatted color of the chat channel. + * + * @return {@link String}. Returns {@link VentureChatFormatService#DEFAULT_COLOR_CODE} if the + * color is invalid. + */ + public String getColor() { + if (FormatUtils.isValidColor(color)) { + return String.valueOf(ChatColor.valueOf(color.toUpperCase())); + } + if (FormatUtils.isValidHexColor(color)) { + return FormatUtils.convertHexColorCodeToBukkitColorCode(color); + } + return FormatUtils.DEFAULT_COLOR_CODE; + } + + /** + * Get the raw color value of the chat channel. + * + * @return {@link String} + */ + public String getColorRaw() { + return color; + } + + /** + * Get the formatted chat color of the chat channel. + * + * @return {@link String}. Returns {@link VentureChatFormatService#DEFAULT_COLOR_CODE} if the chat + * color is invalid. + */ + public String getChatColor() { + if (chatColor.equalsIgnoreCase("None")) { + return chatColor; + } + if (FormatUtils.isValidColor(chatColor)) { + return String.valueOf(ChatColor.valueOf(chatColor.toUpperCase())); + } + if (FormatUtils.isValidHexColor(chatColor)) { + return FormatUtils.convertHexColorCodeToBukkitColorCode(chatColor); + } + return FormatUtils.DEFAULT_COLOR_CODE; + } + + /** + * Get the raw chat color value of the chat channel. + * + * @return {@link String} + */ + public String getChatColorRaw() { + return chatColor; + } + + /** + * Check if the chat channel is the default chat channel. + * + * @return {@link Boolean#TRUE} if the chat channel is the default chat channel, + * {@link Boolean#FALSE} otherwise. + */ + public Boolean isDefaultchannel() { + return Boolean.valueOf(defaultChannel); + } + + /** + * Get the alias of the chat channel. + * + * @return {@link String} + */ + public String getAlias() { + return alias; + } + + /** + * Get the distance of the chat channel in blocks. + * + * @return {@link Double} + */ + public Double getDistance() { + return Double.valueOf(distance); + } + + /** + * Checks if the chat channel has a distance set. + * + * @return {@link Boolean#TRUE} if the distance is greater than zero, + * {@link Boolean#FALSE} otherwise. + */ + public Boolean hasDistance() { + return Boolean.valueOf(distance > 0); + } + + /** + * Checks if the chat channel has a cooldown set. + * + * @return {@link Boolean#TRUE} if the cooldown is greater than zero, + * {@link Boolean#FALSE} otherwise. + */ + public Boolean hasCooldown() { + return Boolean.valueOf(cooldown > 0); + } + + /** + * Checks if the chat channel has a permission set. + * + * @return {@link Boolean#TRUE} if the permission does not equal + * {@link ChatChannel#NO_PERMISSIONS}, {@link Boolean#FALSE} otherwise. + */ + public Boolean hasPermission() { + return Boolean.valueOf(!permission.equalsIgnoreCase(NO_PERMISSIONS)); + } + + /** + * Checks if the chat channel has a speak permission set. + * + * @return true if the speak permission does not equal + * {@link ChatChannel#NO_PERMISSIONS}, false otherwise. + */ + public boolean hasSpeakPermission() { + return !speakPermission.equalsIgnoreCase(NO_PERMISSIONS); + } + + /** + * Get the speak permissions node for the chat channel. + * + * @return {@link String} + */ + public String getSpeakPermission() { + return speakPermission; + } + + /** + * Checks if the chat channel has the filter enabled. + * + * @return {@link Boolean#TRUE} if the chat channel has the filter enabled, + * {@link Boolean#FALSE} otherwise. + */ + public Boolean isFiltered() { + return Boolean.valueOf(filter); + } + + /** + * Compares the chat channel by name to determine equality. + * + * @param channel + * Object to compare for equality. + * @return true if the objects are equal, false otherwise. + */ + @Override + public boolean equals(Object channel) { + return channel instanceof ChatChannel && this.name.equals(((ChatChannel) channel).getName()); + } +} diff --git a/src/main/java/mineverse/Aust1n46/chat/ChatMessage.java b/src/main/java/venture/Aust1n46/chat/model/ChatMessage.java similarity index 96% rename from src/main/java/mineverse/Aust1n46/chat/ChatMessage.java rename to src/main/java/venture/Aust1n46/chat/model/ChatMessage.java index 7e388a9..b53db90 100644 --- a/src/main/java/mineverse/Aust1n46/chat/ChatMessage.java +++ b/src/main/java/venture/Aust1n46/chat/model/ChatMessage.java @@ -1,4 +1,4 @@ -package mineverse.Aust1n46.chat; +package venture.Aust1n46.chat.model; import com.comphenix.protocol.wrappers.WrappedChatComponent; diff --git a/src/main/java/mineverse/Aust1n46/chat/gui/GuiSlot.java b/src/main/java/venture/Aust1n46/chat/model/GuiSlot.java similarity index 91% rename from src/main/java/mineverse/Aust1n46/chat/gui/GuiSlot.java rename to src/main/java/venture/Aust1n46/chat/model/GuiSlot.java index 1ecc64b..cbf51fe 100644 --- a/src/main/java/mineverse/Aust1n46/chat/gui/GuiSlot.java +++ b/src/main/java/venture/Aust1n46/chat/model/GuiSlot.java @@ -1,4 +1,4 @@ -package mineverse.Aust1n46.chat.gui; +package venture.Aust1n46.chat.model; import java.util.ArrayList; import java.util.List; @@ -6,10 +6,9 @@ import java.util.List; import org.bukkit.Material; import org.bukkit.configuration.ConfigurationSection; -import mineverse.Aust1n46.chat.MineverseChat; +import venture.Aust1n46.chat.VentureChat; public class GuiSlot { - private static MineverseChat plugin = MineverseChat.getInstance(); private static List guiSlots; private String text; @@ -30,7 +29,7 @@ public class GuiSlot { this.slot = slot; } - public static void initialize() { + public static void initialize(final VentureChat plugin) { guiSlots = new ArrayList(); ConfigurationSection cs = plugin.getConfig().getConfigurationSection("venturegui"); for (String key : cs.getKeys(false)) { diff --git a/src/main/java/mineverse/Aust1n46/chat/json/JsonAttribute.java b/src/main/java/venture/Aust1n46/chat/model/JsonAttribute.java similarity index 94% rename from src/main/java/mineverse/Aust1n46/chat/json/JsonAttribute.java rename to src/main/java/venture/Aust1n46/chat/model/JsonAttribute.java index 3b7ec26..97efb1a 100644 --- a/src/main/java/mineverse/Aust1n46/chat/json/JsonAttribute.java +++ b/src/main/java/venture/Aust1n46/chat/model/JsonAttribute.java @@ -1,4 +1,4 @@ -package mineverse.Aust1n46.chat.json; +package venture.Aust1n46.chat.model; import java.util.List; diff --git a/src/main/java/mineverse/Aust1n46/chat/json/JsonFormat.java b/src/main/java/venture/Aust1n46/chat/model/JsonFormat.java similarity index 91% rename from src/main/java/mineverse/Aust1n46/chat/json/JsonFormat.java rename to src/main/java/venture/Aust1n46/chat/model/JsonFormat.java index 1ab0032..4948123 100644 --- a/src/main/java/mineverse/Aust1n46/chat/json/JsonFormat.java +++ b/src/main/java/venture/Aust1n46/chat/model/JsonFormat.java @@ -1,4 +1,4 @@ -package mineverse.Aust1n46.chat.json; +package venture.Aust1n46.chat.model; import java.util.ArrayList; import java.util.Collection; @@ -7,10 +7,9 @@ import java.util.List; import org.bukkit.configuration.ConfigurationSection; -import mineverse.Aust1n46.chat.MineverseChat; +import venture.Aust1n46.chat.VentureChat; public class JsonFormat { - private static MineverseChat plugin = MineverseChat.getInstance(); private static HashMap jsonFormats; private List jsonAttributes; @@ -23,7 +22,7 @@ public class JsonFormat { this.jsonAttributes = jsonAttributes; } - public static void initialize() { + public static void initialize(final VentureChat plugin) { jsonFormats = new HashMap(); ConfigurationSection jsonFormatSection = plugin.getConfig().getConfigurationSection("jsonformatting"); for (String jsonFormat : jsonFormatSection.getKeys(false)) { diff --git a/src/main/java/mineverse/Aust1n46/chat/api/SynchronizedMineverseChatPlayer.java b/src/main/java/venture/Aust1n46/chat/model/SynchronizedVentureChatPlayer.java similarity index 83% rename from src/main/java/mineverse/Aust1n46/chat/api/SynchronizedMineverseChatPlayer.java rename to src/main/java/venture/Aust1n46/chat/model/SynchronizedVentureChatPlayer.java index 8607a7f..ece3fb9 100644 --- a/src/main/java/mineverse/Aust1n46/chat/api/SynchronizedMineverseChatPlayer.java +++ b/src/main/java/venture/Aust1n46/chat/model/SynchronizedVentureChatPlayer.java @@ -1,4 +1,4 @@ -package mineverse.Aust1n46.chat.api; +package venture.Aust1n46.chat.model; import java.util.ArrayList; import java.util.Collection; @@ -8,9 +8,9 @@ import java.util.List; import java.util.Set; import java.util.UUID; -import mineverse.Aust1n46.chat.command.mute.MuteContainer; +import venture.Aust1n46.chat.controllers.commands.MuteContainer; -public class SynchronizedMineverseChatPlayer { +public class SynchronizedVentureChatPlayer { private UUID uuid; private Set listening; private HashMap mutes; @@ -20,7 +20,7 @@ public class SynchronizedMineverseChatPlayer { private boolean spy; private boolean messageToggle; - public SynchronizedMineverseChatPlayer(UUID uuid, Set listening, HashMap mutes, Set ignores, boolean spy, boolean messageToggle) { + public SynchronizedVentureChatPlayer(UUID uuid, Set listening, HashMap mutes, Set ignores, boolean spy, boolean messageToggle) { this.uuid = uuid; this.listening = listening; this.mutes = mutes; @@ -29,7 +29,7 @@ public class SynchronizedMineverseChatPlayer { this.messageToggle = messageToggle; } - public SynchronizedMineverseChatPlayer(UUID uuid) { + public SynchronizedVentureChatPlayer(UUID uuid) { this.uuid = uuid; listening = new HashSet(); mutes = new HashMap(); @@ -62,11 +62,11 @@ public class SynchronizedMineverseChatPlayer { this.messagePackets = 0; } - public void addIgnore(SynchronizedMineverseChatPlayer smcp) { + public void addIgnore(SynchronizedVentureChatPlayer smcp) { this.ignores.add(smcp.getUUID()); } - public void removeIgnore(SynchronizedMineverseChatPlayer smcp) { + public void removeIgnore(SynchronizedVentureChatPlayer smcp) { this.ignores.remove(smcp.getUUID()); } diff --git a/src/main/java/mineverse/Aust1n46/chat/database/TemporaryDataInstance.java b/src/main/java/venture/Aust1n46/chat/model/TemporaryDataInstance.java similarity index 95% rename from src/main/java/mineverse/Aust1n46/chat/database/TemporaryDataInstance.java rename to src/main/java/venture/Aust1n46/chat/model/TemporaryDataInstance.java index 37e20c2..0f89ee8 100644 --- a/src/main/java/mineverse/Aust1n46/chat/database/TemporaryDataInstance.java +++ b/src/main/java/venture/Aust1n46/chat/model/TemporaryDataInstance.java @@ -1,4 +1,4 @@ -package mineverse.Aust1n46.chat.database; +package venture.Aust1n46.chat.model; import java.util.HashMap; import java.util.UUID; diff --git a/src/main/java/mineverse/Aust1n46/chat/api/MineverseChatPlayer.java b/src/main/java/venture/Aust1n46/chat/model/VentureChatPlayer.java similarity index 76% rename from src/main/java/mineverse/Aust1n46/chat/api/MineverseChatPlayer.java rename to src/main/java/venture/Aust1n46/chat/model/VentureChatPlayer.java index 2a3a5d7..d6991be 100644 --- a/src/main/java/mineverse/Aust1n46/chat/api/MineverseChatPlayer.java +++ b/src/main/java/venture/Aust1n46/chat/model/VentureChatPlayer.java @@ -1,4 +1,4 @@ -package mineverse.Aust1n46.chat.api; +package venture.Aust1n46.chat.model; import java.util.ArrayList; import java.util.Collection; @@ -11,17 +11,19 @@ import java.util.UUID; import org.bukkit.Bukkit; import org.bukkit.entity.Player; -import mineverse.Aust1n46.chat.ChatMessage; -import mineverse.Aust1n46.chat.channel.ChatChannel; -import mineverse.Aust1n46.chat.command.mute.MuteContainer; -import mineverse.Aust1n46.chat.json.JsonFormat; +import lombok.AccessLevel; +import lombok.Data; +import lombok.Setter; +import venture.Aust1n46.chat.controllers.commands.MuteContainer; /** * Wrapper for {@link Player} * * @author Aust1n46 */ -public class MineverseChatPlayer { +@Data +public class VentureChatPlayer { + @Setter(value = AccessLevel.NONE) private UUID uuid; private String name; private ChatChannel currentChannel; @@ -55,11 +57,11 @@ public class MineverseChatPlayer { private boolean bungeeToggle; @Deprecated - public MineverseChatPlayer(UUID uuid, String name, ChatChannel currentChannel, Set ignores, Set listening, HashMap mutes, Set blockedCommands, boolean host, UUID party, boolean filter, boolean notifications, String nickname, String jsonFormat, boolean spy, boolean commandSpy, boolean rangedSpy, boolean messageToggle, boolean bungeeToggle) { + public VentureChatPlayer(UUID uuid, String name, ChatChannel currentChannel, Set ignores, Set listening, HashMap mutes, Set blockedCommands, boolean host, UUID party, boolean filter, boolean notifications, String nickname, String jsonFormat, boolean spy, boolean commandSpy, boolean rangedSpy, boolean messageToggle, boolean bungeeToggle) { this(uuid, name, currentChannel, ignores, listening, mutes, blockedCommands, host, party, filter, notifications, jsonFormat, spy, commandSpy, rangedSpy, messageToggle, bungeeToggle); } - public MineverseChatPlayer(UUID uuid, String name, ChatChannel currentChannel, Set ignores, Set listening, HashMap mutes, Set blockedCommands, boolean host, UUID party, boolean filter, boolean notifications, String jsonFormat, boolean spy, boolean commandSpy, boolean rangedSpy, boolean messageToggle, boolean bungeeToggle) { + public VentureChatPlayer(UUID uuid, String name, ChatChannel currentChannel, Set ignores, Set listening, HashMap mutes, Set blockedCommands, boolean host, UUID party, boolean filter, boolean notifications, String jsonFormat, boolean spy, boolean commandSpy, boolean rangedSpy, boolean messageToggle, boolean bungeeToggle) { this.uuid = uuid; this.name = name; this.currentChannel = currentChannel; @@ -91,7 +93,7 @@ public class MineverseChatPlayer { this.bungeeToggle = bungeeToggle; } - public MineverseChatPlayer(UUID uuid, String name) { + public VentureChatPlayer(UUID uuid, String name) { this.uuid = uuid; this.name = name; this.currentChannel = ChatChannel.getDefaultChannel(); @@ -124,35 +126,6 @@ public class MineverseChatPlayer { this.bungeeToggle = true; } - @Deprecated - public String getNickname() { - return this.online ? this.player.getDisplayName() : ""; - } - - @Deprecated - public void setNickname(String nick) {} - - @Deprecated - public boolean hasNickname() { - return false; - } - - public boolean getBungeeToggle() { - return this.bungeeToggle; - } - - public void setBungeeToggle(boolean bungeeToggle) { - this.bungeeToggle = bungeeToggle; - } - - public boolean getMessageToggle() { - return this.messageToggle; - } - - public void setMessageToggle(boolean messageToggle) { - this.messageToggle = messageToggle; - } - public boolean getRangedSpy() { if(isOnline()) { if(!getPlayer().hasPermission("venturechat.rangedspy")) { @@ -162,42 +135,6 @@ public class MineverseChatPlayer { } return this.rangedSpy; } - - public void setRangedSpy(boolean rangedSpy) { - this.rangedSpy = rangedSpy; - } - - public int getEditHash() { - return this.editHash; - } - - public void setEditHash(int editHash) { - this.editHash = editHash; - } - - public boolean isEditing() { - return this.editing; - } - - public void setEditing(boolean editing) { - this.editing = editing; - } - - public UUID getUUID() { - return this.uuid; - } - - public String getName() { - return this.name; - } - - public void setName(String name) { - this.name = name; - } - - public ChatChannel getCurrentChannel() { - return this.currentChannel; - } public boolean setCurrentChannel(ChatChannel channel) { if(channel != null) { @@ -207,10 +144,6 @@ public class MineverseChatPlayer { return false; } - public Set getIgnores() { - return this.ignores; - } - public void addIgnore(UUID ignore) { this.ignores.add(ignore); } @@ -317,46 +250,10 @@ public class MineverseChatPlayer { return this.blockedCommands.contains(command); } - public boolean isHost() { - return this.host; - } - - public void setHost(boolean host) { - this.host = host; - } - - public UUID getParty() { - return this.party; - } - - public void setParty(UUID party) { - this.party = party; - } - public boolean hasParty() { return this.party != null; } - public boolean hasFilter() { - return this.filter; - } - - public void setFilter(boolean filter) { - this.filter = filter; - } - - public boolean hasNotifications() { - return this.notifications; - } - - public void setNotifications(boolean notifications) { - this.notifications = notifications; - } - - public boolean isOnline() { - return this.online; - } - public void setOnline(boolean online) { this.online = online; if(this.online) { @@ -371,14 +268,6 @@ public class MineverseChatPlayer { return this.online ? this.player : null; } - public boolean hasPlayed() { - return this.hasPlayed; - } - - public void setHasPlayed(boolean played) { - this.hasPlayed = played; - } - public UUID getConversation() { return this.conversation; } diff --git a/src/main/java/mineverse/Aust1n46/chat/command/VentureCommand.java b/src/main/java/venture/Aust1n46/chat/model/VentureCommand.java similarity index 90% rename from src/main/java/mineverse/Aust1n46/chat/command/VentureCommand.java rename to src/main/java/venture/Aust1n46/chat/model/VentureCommand.java index 29f5c14..ffd1390 100644 --- a/src/main/java/mineverse/Aust1n46/chat/command/VentureCommand.java +++ b/src/main/java/venture/Aust1n46/chat/model/VentureCommand.java @@ -1,4 +1,4 @@ -package mineverse.Aust1n46.chat.command; +package venture.Aust1n46.chat.model; import java.util.List; diff --git a/src/main/java/venture/Aust1n46/chat/service/UUIDService.java b/src/main/java/venture/Aust1n46/chat/service/UUIDService.java new file mode 100644 index 0000000..43e107d --- /dev/null +++ b/src/main/java/venture/Aust1n46/chat/service/UUIDService.java @@ -0,0 +1,62 @@ +package venture.Aust1n46.chat.service; + +import java.util.UUID; + +import org.bukkit.Bukkit; + +import com.google.inject.Inject; +import com.google.inject.Singleton; + +import mineverse.Aust1n46.chat.proxy.VentureChatProxySource; +import mineverse.Aust1n46.chat.utilities.FormatUtils; +import venture.Aust1n46.chat.VentureChat; + +@Singleton +public class UUIDService { + @Inject + private VentureChat plugin; + + /** + * Returns whether the passed UUID is a v3 UUID. Offline UUIDs are v3, online are v4. + * + * @param uuid the UUID to check + * @return whether the UUID is a v3 UUID & thus is offline + */ + public boolean uuidIsOffline(UUID uuid) { + return uuid.version() == 3; + } + + public boolean shouldSkipOfflineUUID(UUID uuid) { + return (uuidIsOffline(uuid) && !plugin.getConfig().getBoolean("offline_server_acknowledgement", false)); + } + + public boolean shouldSkipOfflineUUIDProxy(UUID uuid, VentureChatProxySource source) { + return (uuidIsOffline(uuid) && !source.isOfflineServerAcknowledgementSet()); + } + + public void checkOfflineUUIDWarning(UUID uuid) { + if(shouldSkipOfflineUUID(uuid)) { + Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&c - Detected Offline UUID!")); + Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&c - If you are using BungeeCord, make sure you have properly setup IP Forwarding.")); + Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&c - https://www.spigotmc.org/wiki/bungeecord-ip-forwarding/")); + Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&c - You can access this wiki page from the log file or just Google it.")); + Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&c - If you're running a \"cracked\" server, player data might not be stored properly, and thus, you are on your own.")); + Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&c - If you run your server in offline mode, you will probably lose your player data when switching to online mode!")); + Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&c - No player data will be saved in offline mode unless you set the \"cracked\" server acknowledgement in the config!")); + return; + } + } + + public void checkOfflineUUIDWarningProxy(UUID uuid, VentureChatProxySource source) { + if(shouldSkipOfflineUUIDProxy(uuid, source)) { + source.sendConsoleMessage("&8[&eVentureChat&8]&c - Detected Offline UUID!"); + source.sendConsoleMessage("&8[&eVentureChat&8]&c - If you are using BungeeCord, make sure you have properly setup IP Forwarding."); + source.sendConsoleMessage("&8[&eVentureChat&8]&c - https://www.spigotmc.org/wiki/bungeecord-ip-forwarding/"); + source.sendConsoleMessage("&8[&eVentureChat&8]&c - You can access this wiki page from the log file or just Google it."); + source.sendConsoleMessage("&8[&eVentureChat&8]&c - If you're running a \"cracked\" server, player data might not be stored properly, and thus, you are on your own."); + source.sendConsoleMessage("&8[&eVentureChat&8]&c - If you run your server in offline mode, you will probably lose your player data when switching to online mode!"); + source.sendConsoleMessage("&8[&eVentureChat&8]&c - No player data will be saved in offline mode unless you set the \"cracked\" server acknowledgement in the config!"); + return; + } + } +} diff --git a/src/main/java/mineverse/Aust1n46/chat/database/Database.java b/src/main/java/venture/Aust1n46/chat/service/VentureChatDatabaseService.java similarity index 79% rename from src/main/java/mineverse/Aust1n46/chat/database/Database.java rename to src/main/java/venture/Aust1n46/chat/service/VentureChatDatabaseService.java index 7eb8f40..779bc33 100644 --- a/src/main/java/mineverse/Aust1n46/chat/database/Database.java +++ b/src/main/java/venture/Aust1n46/chat/service/VentureChatDatabaseService.java @@ -1,4 +1,4 @@ -package mineverse.Aust1n46.chat.database; +package venture.Aust1n46.chat.service; import java.sql.Connection; import java.sql.PreparedStatement; @@ -9,21 +9,28 @@ import java.util.Calendar; import org.bukkit.Bukkit; import org.bukkit.configuration.ConfigurationSection; +import com.google.inject.Inject; +import com.google.inject.Singleton; import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; -import mineverse.Aust1n46.chat.MineverseChat; -import mineverse.Aust1n46.chat.utilities.Format; +import mineverse.Aust1n46.chat.utilities.FormatUtils; +import venture.Aust1n46.chat.VentureChat; /** * Initializes and handles writing to the chat logging database. */ -public class Database { - private static HikariDataSource dataSource = null; +@Singleton +public class VentureChatDatabaseService { + @Inject + private VentureChat plugin; + + private HikariDataSource dataSource; - public static void initializeMySQL() { + @Inject + public void postConstruct() { try { - ConfigurationSection mysqlConfig = MineverseChat.getInstance().getConfig().getConfigurationSection("mysql"); + ConfigurationSection mysqlConfig = plugin.getConfig().getConfigurationSection("mysql"); if (mysqlConfig.getBoolean("enabled", false)) { String host = mysqlConfig.getString("host"); int port = mysqlConfig.getInt("port"); @@ -53,17 +60,16 @@ public class Database { } } catch (Exception exception) { Bukkit.getConsoleSender().sendMessage( - Format.FormatStringAll("&8[&eVentureChat&8]&c - Database could not be loaded. Is it running?")); + FormatUtils.FormatStringAll("&8[&eVentureChat&8]&c - Database could not be loaded. Is it running?")); } } - public static boolean isEnabled() { + public boolean isEnabled() { return dataSource != null; } - public static void writeVentureChat(String uuid, String name, String server, String channel, String text, + public void writeVentureChat(String uuid, String name, String server, String channel, String text, String type) { - MineverseChat plugin = MineverseChat.getInstance(); Calendar currentDate = Calendar.getInstance(); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String date = formatter.format(currentDate.getTime()); diff --git a/src/main/java/mineverse/Aust1n46/chat/utilities/Format.java b/src/main/java/venture/Aust1n46/chat/service/VentureChatFormatService.java similarity index 52% rename from src/main/java/mineverse/Aust1n46/chat/utilities/Format.java rename to src/main/java/venture/Aust1n46/chat/service/VentureChatFormatService.java index d18768e..a8c7b2a 100644 --- a/src/main/java/mineverse/Aust1n46/chat/utilities/Format.java +++ b/src/main/java/venture/Aust1n46/chat/service/VentureChatFormatService.java @@ -1,886 +1,606 @@ -package mineverse.Aust1n46.chat.utilities; - -import static mineverse.Aust1n46.chat.MineverseChat.getInstance; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.StringTokenizer; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import java.util.stream.Collectors; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Sound; -import org.bukkit.entity.Player; -import org.json.simple.JSONObject; - -import com.comphenix.protocol.PacketType; -import com.comphenix.protocol.ProtocolLibrary; -import com.comphenix.protocol.events.PacketContainer; -import com.comphenix.protocol.wrappers.WrappedChatComponent; - -import me.clip.placeholderapi.PlaceholderAPI; -import mineverse.Aust1n46.chat.api.MineverseChatAPI; -import mineverse.Aust1n46.chat.api.MineverseChatPlayer; -import mineverse.Aust1n46.chat.json.JsonAttribute; -import mineverse.Aust1n46.chat.json.JsonFormat; -import mineverse.Aust1n46.chat.localization.LocalizedMessage; -import mineverse.Aust1n46.chat.versions.VersionHandler; - -/** - * Class containing chat formatting methods. - */ -public class Format { - public static final int LEGACY_COLOR_CODE_LENGTH = 2; - public static final int HEX_COLOR_CODE_LENGTH = 14; - public static final String HEX_COLOR_CODE_PREFIX = "#"; - public static final char BUKKIT_COLOR_CODE_PREFIX_CHAR = '\u00A7'; - public static final String BUKKIT_COLOR_CODE_PREFIX = String.valueOf(BUKKIT_COLOR_CODE_PREFIX_CHAR); - public static final String BUKKIT_HEX_COLOR_CODE_PREFIX = "x"; - public static final String DEFAULT_COLOR_CODE = BUKKIT_COLOR_CODE_PREFIX + "f"; - - private static final Pattern LEGACY_CHAT_COLOR_DIGITS_PATTERN = Pattern.compile("&([0-9])"); - private static final Pattern LEGACY_CHAT_COLOR_PATTERN = Pattern.compile( - "(? a + 13) { - if (String.valueOf(ch[a + 3]).matches("[0123456789abcdefABCDEF]") - && String.valueOf(ch[a + 5]).matches("[0123456789abcdefABCDEF]") - && String.valueOf(ch[a + 7]).matches("[0123456789abcdefABCDEF]") - && String.valueOf(ch[a + 9]).matches("[0123456789abcdefABCDEF]") - && String.valueOf(ch[a + 11]).matches("[0123456789abcdefABCDEF]") - && String.valueOf(ch[a + 13]).matches("[0123456789abcdefABCDEF]") - && ch[a + 2] == BUKKIT_COLOR_CODE_PREFIX_CHAR && ch[a + 4] == BUKKIT_COLOR_CODE_PREFIX_CHAR - && ch[a + 6] == BUKKIT_COLOR_CODE_PREFIX_CHAR && ch[a + 8] == BUKKIT_COLOR_CODE_PREFIX_CHAR - && ch[a + 10] == BUKKIT_COLOR_CODE_PREFIX_CHAR - && ch[a + 12] == BUKKIT_COLOR_CODE_PREFIX_CHAR) { - ts = String.valueOf(ch[a]) + ch[a + 1] + ch[a + 2] + ch[a + 3] + ch[a + 4] + ch[a + 5] - + ch[a + 6] + ch[a + 7] + ch[a + 8] + ch[a + 9] + ch[a + 10] + ch[a + 11] + ch[a + 12] - + ch[a + 13]; - a += 13; - } - } - } - } - return ts; - } - - /** - * Converts a message to JSON colors with no additional JSON extensions. - * - * @param s - * @return {@link String} - */ - public static String convertToJsonColors(String s) { - return convertToJsonColors(s, ""); - } - - /** - * Converts a message to JSON colors with additional JSON extensions. - * - * @param s - * @param extensions - * @return {@link String} - */ - private static String convertToJsonColors(String s, String extensions) { - String remaining = s; - String temp = ""; - int indexColor = -1; - int indexNextColor = -1; - String color = ""; - String modifier = ""; - boolean bold = false; - boolean obfuscated = false; - boolean italic = false; - boolean strikethrough = false; - boolean underlined = false; - String previousColor = ""; - int colorLength = LEGACY_COLOR_CODE_LENGTH; - do { - if (remaining.length() < LEGACY_COLOR_CODE_LENGTH) { - temp = "{\"text\":\"" + remaining + "\"},"; - break; - } - modifier = ""; - indexColor = remaining.indexOf(BUKKIT_COLOR_CODE_PREFIX); - previousColor = color; - - color = remaining.substring(1, indexColor + LEGACY_COLOR_CODE_LENGTH); - if (color.equals(BUKKIT_HEX_COLOR_CODE_PREFIX)) { - if (remaining.length() >= HEX_COLOR_CODE_LENGTH) { - color = HEX_COLOR_CODE_PREFIX - + remaining.substring(LEGACY_COLOR_CODE_LENGTH, indexColor + HEX_COLOR_CODE_LENGTH) - .replace(BUKKIT_COLOR_CODE_PREFIX, ""); - colorLength = HEX_COLOR_CODE_LENGTH; - bold = false; - obfuscated = false; - italic = false; - strikethrough = false; - underlined = false; - } - } else if (!color.matches("[0123456789abcdefABCDEF]")) { - switch (color) { - case "l": - case "L": { - bold = true; - break; - } - case "k": - case "K": { - obfuscated = true; - break; - } - case "o": - case "O": { - italic = true; - break; - } - case "m": - case "M": { - strikethrough = true; - break; - } - case "n": - case "N": { - underlined = true; - break; - } - case "r": - case "R": { - bold = false; - obfuscated = false; - italic = false; - strikethrough = false; - underlined = false; - color = "f"; - break; - } - } - if (!color.equals("f")) - color = previousColor; - if (color.length() == 0) - color = "f"; - } else { - bold = false; - obfuscated = false; - italic = false; - strikethrough = false; - underlined = false; - } - if (bold) - modifier += ",\"bold\":\"true\""; - if (obfuscated) - modifier += ",\"obfuscated\":\"true\""; - if (italic) - modifier += ",\"italic\":\"true\""; - if (underlined) - modifier += ",\"underlined\":\"true\""; - if (strikethrough) - modifier += ",\"strikethrough\":\"true\""; - remaining = remaining.substring(colorLength); - colorLength = LEGACY_COLOR_CODE_LENGTH; - indexNextColor = remaining.indexOf(BUKKIT_COLOR_CODE_PREFIX); - if (indexNextColor == -1) { - indexNextColor = remaining.length(); - } - temp += "{\"text\":\"" + remaining.substring(0, indexNextColor) + "\",\"color\":\"" - + hexidecimalToJsonColorRGB(color) + "\"" + modifier + extensions + "},"; - remaining = remaining.substring(indexNextColor); - } while (remaining.length() > 1 && indexColor != -1); - if (temp.length() > 1) - temp = temp.substring(0, temp.length() - 1); - return temp; - } - - private static String hexidecimalToJsonColorRGB(String c) { - if (c.length() == 1) { - switch (c) { - case "0": - return "black"; - case "1": - return "dark_blue"; - case "2": - return "dark_green"; - case "3": - return "dark_aqua"; - case "4": - return "dark_red"; - case "5": - return "dark_purple"; - case "6": - return "gold"; - case "7": - return "gray"; - case "8": - return "dark_gray"; - case "9": - return "blue"; - case "a": - case "A": - return "green"; - case "b": - case "B": - return "aqua"; - case "c": - case "C": - return "red"; - case "d": - case "D": - return "light_purple"; - case "e": - case "E": - return "yellow"; - case "f": - case "F": - return "white"; - default: - return "white"; - } - } - if (isValidHexColor(c)) { - return c; - } - return "white"; - } - - public static String convertPlainTextToJson(String s, boolean convertURL) { - s = escapeJsonChars(s); - if (convertURL) { - return "[" + Format.convertLinks(s) + "]"; - } else { - return "[" + convertToJsonColors(DEFAULT_COLOR_CODE + s) + "]"; - } - } - - private static String escapeJsonChars(String s) { - return s.replace("\\", "\\\\").replace("\"", "\\\""); - } - - public static String formatModerationGUI(String json, Player player, String sender, String channelName, int hash) { - if (player.hasPermission("venturechat.gui")) { - json = json.substring(0, json.length() - 1); - json += "," + Format.convertToJsonColors(Format.FormatStringAll(getInstance().getConfig().getString("guiicon")), - ",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/vchatgui " + sender + " " + channelName - + " " + hash - + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[" - + Format.convertToJsonColors( - Format.FormatStringAll(getInstance().getConfig().getString("guitext"))) - + "]}}") - + "]"; - } - return json; - } - - public static PacketContainer createPacketPlayOutChat(String json) { - WrappedChatComponent component = WrappedChatComponent.fromJson(json); - PacketContainer container = new PacketContainer(PacketType.Play.Server.CHAT); - container.getModifier().writeDefaults(); - container.getChatComponents().write(0, component); - return container; - } - - public static PacketContainer createPacketPlayOutChat(WrappedChatComponent component) { - PacketContainer container = new PacketContainer(PacketType.Play.Server.CHAT); - container.getModifier().writeDefaults(); - container.getChatComponents().write(0, component); - return container; - } - - public static void sendPacketPlayOutChat(Player player, PacketContainer packet) { - try { - ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet); - } catch (Exception e) { - e.printStackTrace(); - } - } - - @SuppressWarnings("unchecked") - public static String toColoredText(Object o, Class c) { - if (VersionHandler.is1_7()) { - return "\"extra\":[{\"text\":\"Hover to see original message is not currently supported in 1.7\",\"color\":\"red\"}]"; - } - List finalList = new ArrayList<>(); - StringBuilder stringbuilder = new StringBuilder(); - stringbuilder.append("\"extra\":["); - try { - splitComponents(finalList, o, c); - for (Object component : finalList) { - try { - String text = (String) component.getClass().getMethod("getText").invoke(component); - Object chatModifier = component.getClass().getMethod("getChatModifier").invoke(component); - String color = chatModifier.getClass().getMethod("getColor").invoke(chatModifier).toString(); - boolean bold = (boolean) chatModifier.getClass().getMethod("isBold").invoke(chatModifier); - boolean strikethrough = (boolean) chatModifier.getClass().getMethod("isStrikethrough").invoke(chatModifier); - boolean italic = (boolean) chatModifier.getClass().getMethod("isItalic").invoke(chatModifier); - boolean underlined = (boolean) chatModifier.getClass().getMethod("isUnderlined").invoke(chatModifier); - boolean obfuscated = (boolean) chatModifier.getClass().getMethod("isRandom").invoke(chatModifier); - JSONObject jsonObject = new JSONObject(); - jsonObject.put("text", text); - jsonObject.put("color", color); - jsonObject.put("bold", bold); - jsonObject.put("strikethrough", strikethrough); - jsonObject.put("italic", italic); - jsonObject.put("underlined", underlined); - jsonObject.put("obfuscated", obfuscated); - stringbuilder.append(jsonObject.toJSONString() + ","); - } - catch(Exception e) { - return "\"extra\":[{\"text\":\"Something went wrong. Could not access color.\",\"color\":\"red\"}]"; - } - } - } catch (Exception e) { - e.printStackTrace(); - } - String coloredText = stringbuilder.toString(); - if(coloredText.endsWith(",")) { - coloredText = coloredText.substring(0, coloredText.length() - 1); - } - coloredText += "]"; - return coloredText; - } - - public static String toPlainText(Object o, Class c) { - List finalList = new ArrayList<>(); - StringBuilder stringbuilder = new StringBuilder(); - try { - splitComponents(finalList, o, c); - for (Object component : finalList) { - if (VersionHandler.is1_7()) { - stringbuilder.append((String) component.getClass().getMethod("e").invoke(component)); - } else { - stringbuilder.append((String) component.getClass().getMethod("getText").invoke(component)); - } - } - } catch (Exception e) { - e.printStackTrace(); - } - // if(plugin.getConfig().getString("loglevel", "info").equals("debug")) { - // System.out.println("my string"); - // System.out.println("my string"); - // System.out.println("my string"); - // System.out.println("my string"); - // System.out.println("my string"); - // System.out.println(stringbuilder.toString()); - // } - return stringbuilder.toString(); - } - - private static void splitComponents(List finalList, Object o, Class c) throws Exception { -// for(Method m : c.getMethods()) { -// System.out.println(m.getName()); -// } - - if (VersionHandler.is1_7() || VersionHandler.is1_8() || VersionHandler.is1_9() || VersionHandler.is1_10() - || VersionHandler.is1_11() || VersionHandler.is1_12() || VersionHandler.is1_13() - || (VersionHandler.is1_14() && !VersionHandler.is1_14_4())) { - ArrayList list = (ArrayList) c.getMethod("a").invoke(o, new Object[0]); - for (Object component : list) { - ArrayList innerList = (ArrayList) c.getMethod("a").invoke(component, new Object[0]); - if (innerList.size() > 0) { - splitComponents(finalList, component, c); - } else { - finalList.add(component); - } - } - } else { - ArrayList list = (ArrayList) c.getMethod("getSiblings").invoke(o, new Object[0]); - for (Object component : list) { - ArrayList innerList = (ArrayList) c.getMethod("getSiblings").invoke(component, new Object[0]); - if (innerList.size() > 0) { - splitComponents(finalList, component, c); - } else { - finalList.add(component); - } - } - } - } - - /** - * Formats a string with both Spigot legacy colors codes and Spigot and - * VentureChat hex color codes. - * - * @param string to format. - * @return {@link String} - */ - public static String FormatStringColor(String string) { - String allFormated = string; - allFormated = LEGACY_CHAT_COLOR_DIGITS_PATTERN.matcher(allFormated).replaceAll("\u00A7$1"); - - allFormated = allFormated.replaceAll("&[x]", BUKKIT_COLOR_CODE_PREFIX + "x"); - allFormated = allFormated.replaceAll("&[aA]", BUKKIT_COLOR_CODE_PREFIX + "a"); - allFormated = allFormated.replaceAll("&[bB]", BUKKIT_COLOR_CODE_PREFIX + "b"); - allFormated = allFormated.replaceAll("&[cC]", BUKKIT_COLOR_CODE_PREFIX + "c"); - allFormated = allFormated.replaceAll("&[dD]", BUKKIT_COLOR_CODE_PREFIX + "d"); - allFormated = allFormated.replaceAll("&[eE]", BUKKIT_COLOR_CODE_PREFIX + "e"); - allFormated = allFormated.replaceAll("&[fF]", BUKKIT_COLOR_CODE_PREFIX + "f"); - - allFormated = allFormated.replaceAll("%", "\\%"); - - allFormated = convertHexColorCodeStringToBukkitColorCodeString(allFormated); - return allFormated; - } - - /** - * Formats a string with only legacy Spigot color codes &[0-9a-f]. Does not - * format the legacy color codes that make up a Spigot hex color code. - * - * @param string to format. - * @return {@link String} - */ - public static String FormatStringLegacyColor(String string) { - String allFormated = string; - - allFormated = LEGACY_CHAT_COLOR_PATTERN.matcher(allFormated).replaceAll("\u00A7$13"); - allFormated = allFormated.replaceAll(BUKKIT_COLOR_CODE_PREFIX + "[A]", BUKKIT_COLOR_CODE_PREFIX + "a"); - allFormated = allFormated.replaceAll(BUKKIT_COLOR_CODE_PREFIX + "[B]", BUKKIT_COLOR_CODE_PREFIX + "b"); - allFormated = allFormated.replaceAll(BUKKIT_COLOR_CODE_PREFIX + "[C]", BUKKIT_COLOR_CODE_PREFIX + "c"); - allFormated = allFormated.replaceAll(BUKKIT_COLOR_CODE_PREFIX + "[D]", BUKKIT_COLOR_CODE_PREFIX + "d"); - allFormated = allFormated.replaceAll(BUKKIT_COLOR_CODE_PREFIX + "[E]", BUKKIT_COLOR_CODE_PREFIX + "e"); - allFormated = allFormated.replaceAll(BUKKIT_COLOR_CODE_PREFIX + "[F]", BUKKIT_COLOR_CODE_PREFIX + "f"); - - allFormated = allFormated.replaceAll("%", "\\%"); - return allFormated; - } - - /** - * Formats a string with Spigot formatting codes. - * - * @param string to format. - * @return {@link String} - */ - public static String FormatString(String string) { - String allFormated = string; - allFormated = allFormated.replaceAll("&[kK]", BUKKIT_COLOR_CODE_PREFIX + "k"); - allFormated = allFormated.replaceAll("&[lL]", BUKKIT_COLOR_CODE_PREFIX + "l"); - allFormated = allFormated.replaceAll("&[mM]", BUKKIT_COLOR_CODE_PREFIX + "m"); - allFormated = allFormated.replaceAll("&[nN]", BUKKIT_COLOR_CODE_PREFIX + "n"); - allFormated = allFormated.replaceAll("&[oO]", BUKKIT_COLOR_CODE_PREFIX + "o"); - allFormated = allFormated.replaceAll("&[rR]", BUKKIT_COLOR_CODE_PREFIX + "r"); - - allFormated = allFormated.replaceAll("%", "\\%"); - return allFormated; - } - - /** - * Formats a string with Spigot legacy colors codes, Spigot and VentureChat hex - * color codes, and Spigot formatting codes. - * - * @param string to format. - * @return {@link String} - */ - public static String FormatStringAll(String string) { - String allFormated = Format.FormatString(string); - allFormated = Format.FormatStringColor(allFormated); - return allFormated; - } - - public static String FilterChat(String msg) { - int t = 0; - List filters = getInstance().getConfig().getStringList("filters"); - for (String s : filters) { - t = 0; - String[] pparse = new String[2]; - pparse[0] = " "; - pparse[1] = " "; - StringTokenizer st = new StringTokenizer(s, ","); - while (st.hasMoreTokens()) { - if (t < 2) { - pparse[t++] = st.nextToken(); - } - } - // (?i) = case insensitive - msg = msg.replaceAll("(?i)" + pparse[0], pparse[1]); - } - return msg; - } - - public static boolean isValidColor(String color) { - Boolean bFound = false; - for (ChatColor bkColors : ChatColor.values()) { - if (color.equalsIgnoreCase(bkColors.name())) { - bFound = true; - } - } - return bFound; - } - - /** - * Validates a hex color code. - * - * @param color to validate. - * @return true if color code is valid, false otherwise. - */ - public static boolean isValidHexColor(String color) { - Pattern pattern = Pattern.compile("(^&?#[0-9a-fA-F]{6}\\b)"); - Matcher matcher = pattern.matcher(color); - return matcher.find(); - } - - /** - * Convert a single hex color code to a single Bukkit hex color code. - * - * @param color to convert. - * @return {@link String} - */ - public static String convertHexColorCodeToBukkitColorCode(String color) { - color = color.replace("&", ""); - StringBuilder bukkitColorCode = new StringBuilder(BUKKIT_COLOR_CODE_PREFIX + BUKKIT_HEX_COLOR_CODE_PREFIX); - for (int a = 1; a < color.length(); a++) { - bukkitColorCode.append(BUKKIT_COLOR_CODE_PREFIX + color.charAt(a)); - } - return bukkitColorCode.toString().toLowerCase(); - } - - /** - * Convert an entire String of hex color codes to Bukkit hex color codes. - * - * @param string to convert. - * @return {@link String} - */ - public static String convertHexColorCodeStringToBukkitColorCodeString(String string) { - Pattern pattern = Pattern.compile("(&?#[0-9a-fA-F]{6})"); - Matcher matcher = pattern.matcher(string); - while (matcher.find()) { - int indexStart = matcher.start(); - int indexEnd = matcher.end(); - String hexColor = string.substring(indexStart, indexEnd); - String bukkitColor = convertHexColorCodeToBukkitColorCode(hexColor); - string = string.replaceAll(hexColor, bukkitColor); - matcher.reset(string); - } - return string; - } - - public static String escapeAllRegex(String input) { - return input.replace("[", "\\[").replace("]", "\\]").replace("{", "\\{").replace("}", "\\}").replace("(", "\\(") - .replace(")", "\\)").replace("|", "\\|").replace("+", "\\+").replace("*", "\\*"); - } - - public static boolean underlineURLs() { - return getInstance().getConfig().getBoolean("underlineurls", true); - } - - public static String parseTimeStringFromMillis(long millis) { - String timeString = ""; - if(millis >= Format.MILLISECONDS_PER_DAY) { - long numberOfDays = millis / Format.MILLISECONDS_PER_DAY; - millis -= Format.MILLISECONDS_PER_DAY * numberOfDays; - - String units = LocalizedMessage.UNITS_DAY_PLURAL.toString(); - if (numberOfDays == 1) { - units = LocalizedMessage.UNITS_DAY_SINGULAR.toString(); - } - timeString += numberOfDays + " " + units + " "; - } - - if(millis >= Format.MILLISECONDS_PER_HOUR) { - long numberOfHours = millis / Format.MILLISECONDS_PER_HOUR; - millis -= Format.MILLISECONDS_PER_HOUR * numberOfHours; - - String units = LocalizedMessage.UNITS_HOUR_PLURAL.toString(); - if (numberOfHours == 1) { - units = LocalizedMessage.UNITS_HOUR_SINGULAR.toString(); - } - timeString += numberOfHours + " " + units + " "; - } - - if(millis >= Format.MILLISECONDS_PER_MINUTE) { - long numberOfMinutes = millis / Format.MILLISECONDS_PER_MINUTE; - millis -= Format.MILLISECONDS_PER_MINUTE * numberOfMinutes; - - String units = LocalizedMessage.UNITS_MINUTE_PLURAL.toString(); - if (numberOfMinutes == 1) { - units = LocalizedMessage.UNITS_MINUTE_SINGULAR.toString(); - } - timeString += numberOfMinutes + " " + units + " "; - } - - if(millis >= Format.MILLISECONDS_PER_SECOND) { - long numberOfSeconds = millis / Format.MILLISECONDS_PER_SECOND; - millis -= Format.MILLISECONDS_PER_SECOND * numberOfSeconds; - - String units = LocalizedMessage.UNITS_SECOND_PLURAL.toString(); - if (numberOfSeconds == 1) { - units = LocalizedMessage.UNITS_SECOND_SINGULAR.toString(); - } - timeString += numberOfSeconds + " " + units; - } - return timeString.trim(); - } - - public static long parseTimeStringToMillis(String timeInput) { - long millis = 0L; - timeInput = timeInput.toLowerCase(); - char validChars[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'd', 'h', 'm', 's' }; - if(containsInvalidChars(validChars, timeInput)) { - return -1; - } - - long countDayTokens = timeInput.chars().filter(ch -> ch == 'd').count(); - long countHourTokens = timeInput.chars().filter(ch -> ch == 'h').count(); - long countMinuteTokens = timeInput.chars().filter(ch -> ch == 'm').count(); - long countSecondTokens = timeInput.chars().filter(ch -> ch == 's').count(); - if(countDayTokens > 1 || countHourTokens > 1 || countMinuteTokens > 1 || countSecondTokens > 1) { - return -1; - } - - int indexOfSecondToken = timeInput.indexOf("s"); - int indexOfMinuteToken = timeInput.indexOf("m"); - int indexOfHourToken = timeInput.indexOf("h"); - int indexOfDayToken = timeInput.indexOf("d"); - if(indexOfDayToken != -1) { - if((indexOfHourToken != -1 && indexOfHourToken < indexOfDayToken) || (indexOfMinuteToken != -1 && indexOfMinuteToken < indexOfDayToken) || (indexOfSecondToken != -1 && indexOfSecondToken < indexOfDayToken)) { - return -1; - } - } - if(indexOfHourToken != -1) { - if((indexOfMinuteToken != -1 && indexOfMinuteToken < indexOfHourToken) || (indexOfSecondToken != -1 && indexOfSecondToken < indexOfHourToken)) { - return -1; - } - } - if(indexOfMinuteToken != -1) { - if((indexOfSecondToken != -1 && indexOfSecondToken < indexOfMinuteToken)) { - return -1; - } - } - - if(indexOfDayToken != -1) { - int numberOfDays = Integer.parseInt(timeInput.substring(0, indexOfDayToken)); - timeInput = timeInput.substring(indexOfDayToken + 1); - millis += MILLISECONDS_PER_DAY * numberOfDays; - } - if(timeInput.length() > 0) { - indexOfHourToken = timeInput.indexOf("h"); - if(indexOfHourToken != -1) { - int numberOfHours = Integer.parseInt(timeInput.substring(0, indexOfHourToken)); - timeInput = timeInput.substring(indexOfHourToken + 1); - millis += MILLISECONDS_PER_HOUR * numberOfHours; - } - } - if(timeInput.length() > 0) { - indexOfMinuteToken = timeInput.indexOf("m"); - if(indexOfMinuteToken != -1) { - int numberOfMinutes = Integer.parseInt(timeInput.substring(0, indexOfMinuteToken)); - timeInput = timeInput.substring(indexOfMinuteToken + 1); - millis += MILLISECONDS_PER_MINUTE * numberOfMinutes; - } - } - if(timeInput.length() > 0) { - indexOfSecondToken = timeInput.indexOf("s"); - if(indexOfSecondToken != -1) { - int numberOfSeconds = Integer.parseInt(timeInput.substring(0, indexOfSecondToken)); - timeInput = timeInput.substring(indexOfSecondToken + 1); - millis += MILLISECONDS_PER_SECOND * numberOfSeconds; - } - } - return millis; - } - - private static boolean containsInvalidChars(char[] validChars, String validate) { - for(char c : validate.toCharArray()) { - boolean isValidChar = false; - for(char v : validChars) { - if(c == v) { - isValidChar = true; - } - } - if(!isValidChar) { - return true; - } - } - return false; - } - - public static void broadcastToServer(String message) { - for(MineverseChatPlayer mcp : MineverseChatAPI.getOnlineMineverseChatPlayers()) { - mcp.getPlayer().sendMessage(message); - } - } - - public static void playMessageSound(MineverseChatPlayer mcp) { - Player player = mcp.getPlayer(); - String soundName = getInstance().getConfig().getString("message_sound", DEFAULT_MESSAGE_SOUND); - if(!soundName.equalsIgnoreCase("None")) { - Sound messageSound = getSound(soundName); - player.playSound(player.getLocation(), messageSound, 1, 0); - } - } - - private static Sound getSound(String soundName) { - if(Arrays.asList(Sound.values()).stream().map(Sound::toString).collect(Collectors.toList()).contains(soundName)) { - return Sound.valueOf(soundName); - } - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&c - Message sound invalid!")); - return getDefaultMessageSound(); - } - - private static Sound getDefaultMessageSound() { - if(VersionHandler.is1_7() || VersionHandler.is1_8()) { - return Sound.valueOf(DEFAULT_LEGACY_MESSAGE_SOUND); - } - else { - return Sound.valueOf(DEFAULT_MESSAGE_SOUND); - } - } - - public static String stripColor(String message) { - return message.replaceAll("(\u00A7([a-z0-9]))", ""); - } -} +package venture.Aust1n46.chat.service; + +import static mineverse.Aust1n46.chat.utilities.FormatUtils.BUKKIT_COLOR_CODE_PREFIX; +import static mineverse.Aust1n46.chat.utilities.FormatUtils.BUKKIT_COLOR_CODE_PREFIX_CHAR; +import static mineverse.Aust1n46.chat.utilities.FormatUtils.BUKKIT_HEX_COLOR_CODE_PREFIX; +import static mineverse.Aust1n46.chat.utilities.FormatUtils.DEFAULT_COLOR_CODE; +import static mineverse.Aust1n46.chat.utilities.FormatUtils.HEX_COLOR_CODE_PREFIX; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.StringTokenizer; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.json.simple.JSONObject; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.ProtocolLibrary; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.WrappedChatComponent; +import com.google.inject.Inject; +import com.google.inject.Singleton; + +import me.clip.placeholderapi.PlaceholderAPI; +import mineverse.Aust1n46.chat.utilities.FormatUtils; +import mineverse.Aust1n46.chat.versions.VersionHandler; +import venture.Aust1n46.chat.VentureChat; +import venture.Aust1n46.chat.model.JsonAttribute; +import venture.Aust1n46.chat.model.JsonFormat; +import venture.Aust1n46.chat.model.VentureChatPlayer; + +/** + * Class containing chat formatting methods. + */ +@Singleton +public class VentureChatFormatService { + public static final int LEGACY_COLOR_CODE_LENGTH = 2; + public static final int HEX_COLOR_CODE_LENGTH = 14; + private static final Pattern PLACEHOLDERAPI_PLACEHOLDER_PATTERN = Pattern.compile("\\{([^\\{\\}]+)\\}"); + public static final String DEFAULT_MESSAGE_SOUND = "ENTITY_PLAYER_LEVELUP"; + public static final String DEFAULT_LEGACY_MESSAGE_SOUND = "LEVEL_UP"; + + @Inject + private VentureChat plugin; + @Inject + private VentureChatPlayerApiService playerApiService; + + /** + * Converts a message to Minecraft JSON formatting while applying the + * {@link JsonFormat} from the config. + * + * @param sender {@link VentureChatPlayer} wrapper of the message sender. + * @param format The format section of the message. + * @param chat The chat section of the message. + * @return {@link String} + */ + public String convertToJson(VentureChatPlayer sender, String format, String chat) { + JsonFormat JSONformat = JsonFormat.getJsonFormat(sender.getJsonFormat()); + String f = escapeJsonChars(format); + String c = escapeJsonChars(chat); + String json = "[\"\",{\"text\":\"\",\"extra\":["; + json += convertPlaceholders(f, JSONformat, sender); + json += "]}"; + json += "," + convertLinks(c); + json += "]"; + if (plugin.getConfig().getString("loglevel", "info").equals("debug")) { + System.out.println(json); + System.out.println("END OF JSON"); + System.out.println("END OF JSON"); + System.out.println("END OF JSON"); + System.out.println("END OF JSON"); + System.out.println("END OF JSON"); + } + return json; + } + + /** + * Converts the format section of a message to JSON using PlaceholderAPI. + * + * @param s + * @param format + * @param prefix + * @param nickname + * @param suffix + * @param icp + * @return {@link String} + */ + private String convertPlaceholders(String s, JsonFormat format, VentureChatPlayer icp) { + String remaining = s; + String temp = ""; + int indexStart = -1; + int indexEnd = -1; + String placeholder = ""; + String formattedPlaceholder = ""; + String lastCode = DEFAULT_COLOR_CODE; + do { + Matcher matcher = PLACEHOLDERAPI_PLACEHOLDER_PATTERN.matcher(remaining); + if (matcher.find()) { + indexStart = matcher.start(); + indexEnd = matcher.end(); + placeholder = remaining.substring(indexStart, indexEnd); + formattedPlaceholder = FormatUtils.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(icp.getPlayer(), placeholder)); + temp += convertToJsonColors(lastCode + remaining.substring(0, indexStart)) + ","; + lastCode = getLastCode(lastCode + remaining.substring(0, indexStart)); + String action = ""; + String text = ""; + String hover = ""; + for (JsonAttribute jsonAttribute : format.getJsonAttributes()) { + if (placeholder.contains(jsonAttribute.getName().replace("{", "").replace("}", ""))) { + action = jsonAttribute.getClickAction(); + text = FormatUtils.FormatStringAll( + PlaceholderAPI.setBracketPlaceholders(icp.getPlayer(), jsonAttribute.getClickText())); + for (String st : jsonAttribute.getHoverText()) { + hover += FormatUtils.FormatStringAll(st) + "\n"; + } + } + } + if(!hover.isEmpty()) { + hover = FormatUtils.FormatStringAll( + PlaceholderAPI.setBracketPlaceholders(icp.getPlayer(), hover.substring(0, hover.length() - 1))); + } + temp += convertToJsonColors(lastCode + formattedPlaceholder, + ",\"clickEvent\":{\"action\":\"" + action + "\",\"value\":\"" + text + + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[" + + convertToJsonColors(hover) + "]}}") + + ","; + lastCode = getLastCode(lastCode + formattedPlaceholder); + remaining = remaining.substring(indexEnd); + } else { + temp += convertToJsonColors(lastCode + remaining); + break; + } + } while (true); + return temp; + } + + /** + * Converts URL's to JSON. + * + * @param s + * @return {@link String} + */ + private String convertLinks(String s) { + String remaining = s; + String temp = ""; + int indexLink = -1; + int indexLinkEnd = -1; + String link = ""; + String lastCode = DEFAULT_COLOR_CODE; + do { + Pattern pattern = Pattern.compile( + "([a-zA-Z0-9" + BUKKIT_COLOR_CODE_PREFIX + "\\-:/]+\\.[a-zA-Z/0-9" + BUKKIT_COLOR_CODE_PREFIX + + "\\-:_#]+(\\.[a-zA-Z/0-9." + BUKKIT_COLOR_CODE_PREFIX + "\\-:#\\?\\+=_]+)?)"); + Matcher matcher = pattern.matcher(remaining); + if (matcher.find()) { + indexLink = matcher.start(); + indexLinkEnd = matcher.end(); + link = remaining.substring(indexLink, indexLinkEnd); + temp += convertToJsonColors(lastCode + remaining.substring(0, indexLink)) + ","; + lastCode = getLastCode(lastCode + remaining.substring(0, indexLink)); + String https = ""; + if (ChatColor.stripColor(link).contains("https://")) + https = "s"; + temp += convertToJsonColors(lastCode + link, + ",\"underlined\":\"" + underlineURLs() + + "\",\"clickEvent\":{\"action\":\"open_url\",\"value\":\"http" + https + "://" + + ChatColor.stripColor(link.replace("http://", "").replace("https://", "")) + + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[" + + convertToJsonColors(lastCode + link) + "]}}") + + ","; + lastCode = getLastCode(lastCode + link); + remaining = remaining.substring(indexLinkEnd); + } else { + temp += convertToJsonColors(lastCode + remaining); + break; + } + } while (true); + return temp; + } + + public String getLastCode(String s) { + String ts = ""; + char[] ch = s.toCharArray(); + for (int a = 0; a < s.length() - 1; a++) { + if (String.valueOf(ch[a + 1]).matches("[lkomnLKOMN]") && ch[a] == BUKKIT_COLOR_CODE_PREFIX_CHAR) { + ts += String.valueOf(ch[a]) + ch[a + 1]; + a++; + } else if (String.valueOf(ch[a + 1]).matches("[0123456789abcdefrABCDEFR]") + && ch[a] == BUKKIT_COLOR_CODE_PREFIX_CHAR) { + ts = String.valueOf(ch[a]) + ch[a + 1]; + a++; + } else if (ch[a + 1] == 'x' && ch[a] == BUKKIT_COLOR_CODE_PREFIX_CHAR) { + if (ch.length > a + 13) { + if (String.valueOf(ch[a + 3]).matches("[0123456789abcdefABCDEF]") + && String.valueOf(ch[a + 5]).matches("[0123456789abcdefABCDEF]") + && String.valueOf(ch[a + 7]).matches("[0123456789abcdefABCDEF]") + && String.valueOf(ch[a + 9]).matches("[0123456789abcdefABCDEF]") + && String.valueOf(ch[a + 11]).matches("[0123456789abcdefABCDEF]") + && String.valueOf(ch[a + 13]).matches("[0123456789abcdefABCDEF]") + && ch[a + 2] == BUKKIT_COLOR_CODE_PREFIX_CHAR && ch[a + 4] == BUKKIT_COLOR_CODE_PREFIX_CHAR + && ch[a + 6] == BUKKIT_COLOR_CODE_PREFIX_CHAR && ch[a + 8] == BUKKIT_COLOR_CODE_PREFIX_CHAR + && ch[a + 10] == BUKKIT_COLOR_CODE_PREFIX_CHAR + && ch[a + 12] == BUKKIT_COLOR_CODE_PREFIX_CHAR) { + ts = String.valueOf(ch[a]) + ch[a + 1] + ch[a + 2] + ch[a + 3] + ch[a + 4] + ch[a + 5] + + ch[a + 6] + ch[a + 7] + ch[a + 8] + ch[a + 9] + ch[a + 10] + ch[a + 11] + ch[a + 12] + + ch[a + 13]; + a += 13; + } + } + } + } + return ts; + } + + /** + * Converts a message to JSON colors with no additional JSON extensions. + * + * @param s + * @return {@link String} + */ + public String convertToJsonColors(String s) { + return convertToJsonColors(s, ""); + } + + /** + * Converts a message to JSON colors with additional JSON extensions. + * + * @param s + * @param extensions + * @return {@link String} + */ + private String convertToJsonColors(String s, String extensions) { + String remaining = s; + String temp = ""; + int indexColor = -1; + int indexNextColor = -1; + String color = ""; + String modifier = ""; + boolean bold = false; + boolean obfuscated = false; + boolean italic = false; + boolean strikethrough = false; + boolean underlined = false; + String previousColor = ""; + int colorLength = LEGACY_COLOR_CODE_LENGTH; + do { + if (remaining.length() < LEGACY_COLOR_CODE_LENGTH) { + temp = "{\"text\":\"" + remaining + "\"},"; + break; + } + modifier = ""; + indexColor = remaining.indexOf(BUKKIT_COLOR_CODE_PREFIX); + previousColor = color; + + color = remaining.substring(1, indexColor + LEGACY_COLOR_CODE_LENGTH); + if (color.equals(BUKKIT_HEX_COLOR_CODE_PREFIX)) { + if (remaining.length() >= HEX_COLOR_CODE_LENGTH) { + color = HEX_COLOR_CODE_PREFIX + + remaining.substring(LEGACY_COLOR_CODE_LENGTH, indexColor + HEX_COLOR_CODE_LENGTH) + .replace(BUKKIT_COLOR_CODE_PREFIX, ""); + colorLength = HEX_COLOR_CODE_LENGTH; + bold = false; + obfuscated = false; + italic = false; + strikethrough = false; + underlined = false; + } + } else if (!color.matches("[0123456789abcdefABCDEF]")) { + switch (color) { + case "l": + case "L": { + bold = true; + break; + } + case "k": + case "K": { + obfuscated = true; + break; + } + case "o": + case "O": { + italic = true; + break; + } + case "m": + case "M": { + strikethrough = true; + break; + } + case "n": + case "N": { + underlined = true; + break; + } + case "r": + case "R": { + bold = false; + obfuscated = false; + italic = false; + strikethrough = false; + underlined = false; + color = "f"; + break; + } + } + if (!color.equals("f")) + color = previousColor; + if (color.length() == 0) + color = "f"; + } else { + bold = false; + obfuscated = false; + italic = false; + strikethrough = false; + underlined = false; + } + if (bold) + modifier += ",\"bold\":\"true\""; + if (obfuscated) + modifier += ",\"obfuscated\":\"true\""; + if (italic) + modifier += ",\"italic\":\"true\""; + if (underlined) + modifier += ",\"underlined\":\"true\""; + if (strikethrough) + modifier += ",\"strikethrough\":\"true\""; + remaining = remaining.substring(colorLength); + colorLength = LEGACY_COLOR_CODE_LENGTH; + indexNextColor = remaining.indexOf(BUKKIT_COLOR_CODE_PREFIX); + if (indexNextColor == -1) { + indexNextColor = remaining.length(); + } + temp += "{\"text\":\"" + remaining.substring(0, indexNextColor) + "\",\"color\":\"" + + hexidecimalToJsonColorRGB(color) + "\"" + modifier + extensions + "},"; + remaining = remaining.substring(indexNextColor); + } while (remaining.length() > 1 && indexColor != -1); + if (temp.length() > 1) + temp = temp.substring(0, temp.length() - 1); + return temp; + } + + private String hexidecimalToJsonColorRGB(String c) { + if (c.length() == 1) { + switch (c) { + case "0": + return "black"; + case "1": + return "dark_blue"; + case "2": + return "dark_green"; + case "3": + return "dark_aqua"; + case "4": + return "dark_red"; + case "5": + return "dark_purple"; + case "6": + return "gold"; + case "7": + return "gray"; + case "8": + return "dark_gray"; + case "9": + return "blue"; + case "a": + case "A": + return "green"; + case "b": + case "B": + return "aqua"; + case "c": + case "C": + return "red"; + case "d": + case "D": + return "light_purple"; + case "e": + case "E": + return "yellow"; + case "f": + case "F": + return "white"; + default: + return "white"; + } + } + if (FormatUtils.isValidHexColor(c)) { + return c; + } + return "white"; + } + + public String convertPlainTextToJson(String s, boolean convertURL) { + s = escapeJsonChars(s); + if (convertURL) { + return "[" + convertLinks(s) + "]"; + } else { + return "[" + convertToJsonColors(DEFAULT_COLOR_CODE + s) + "]"; + } + } + + private String escapeJsonChars(String s) { + return s.replace("\\", "\\\\").replace("\"", "\\\""); + } + + public String formatModerationGUI(String json, Player player, String sender, String channelName, int hash) { + if (player.hasPermission("venturechat.gui")) { + json = json.substring(0, json.length() - 1); + json += "," + convertToJsonColors(FormatUtils.FormatStringAll(plugin.getConfig().getString("guiicon")), + ",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/vchatgui " + sender + " " + channelName + + " " + hash + + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[" + + convertToJsonColors( + FormatUtils.FormatStringAll(plugin.getConfig().getString("guitext"))) + + "]}}") + + "]"; + } + return json; + } + + public PacketContainer createPacketPlayOutChat(String json) { + WrappedChatComponent component = WrappedChatComponent.fromJson(json); + PacketContainer container = new PacketContainer(PacketType.Play.Server.CHAT); + container.getModifier().writeDefaults(); + container.getChatComponents().write(0, component); + return container; + } + + public PacketContainer createPacketPlayOutChat(WrappedChatComponent component) { + PacketContainer container = new PacketContainer(PacketType.Play.Server.CHAT); + container.getModifier().writeDefaults(); + container.getChatComponents().write(0, component); + return container; + } + + public void sendPacketPlayOutChat(Player player, PacketContainer packet) { + try { + ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @SuppressWarnings("unchecked") + public String toColoredText(Object o, Class c) { + if (VersionHandler.is1_7()) { + return "\"extra\":[{\"text\":\"Hover to see original message is not currently supported in 1.7\",\"color\":\"red\"}]"; + } + List finalList = new ArrayList<>(); + StringBuilder stringbuilder = new StringBuilder(); + stringbuilder.append("\"extra\":["); + try { + splitComponents(finalList, o, c); + for (Object component : finalList) { + try { + String text = (String) component.getClass().getMethod("getText").invoke(component); + Object chatModifier = component.getClass().getMethod("getChatModifier").invoke(component); + String color = chatModifier.getClass().getMethod("getColor").invoke(chatModifier).toString(); + boolean bold = (boolean) chatModifier.getClass().getMethod("isBold").invoke(chatModifier); + boolean strikethrough = (boolean) chatModifier.getClass().getMethod("isStrikethrough").invoke(chatModifier); + boolean italic = (boolean) chatModifier.getClass().getMethod("isItalic").invoke(chatModifier); + boolean underlined = (boolean) chatModifier.getClass().getMethod("isUnderlined").invoke(chatModifier); + boolean obfuscated = (boolean) chatModifier.getClass().getMethod("isRandom").invoke(chatModifier); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("text", text); + jsonObject.put("color", color); + jsonObject.put("bold", bold); + jsonObject.put("strikethrough", strikethrough); + jsonObject.put("italic", italic); + jsonObject.put("underlined", underlined); + jsonObject.put("obfuscated", obfuscated); + stringbuilder.append(jsonObject.toJSONString() + ","); + } + catch(Exception e) { + return "\"extra\":[{\"text\":\"Something went wrong. Could not access color.\",\"color\":\"red\"}]"; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + String coloredText = stringbuilder.toString(); + if(coloredText.endsWith(",")) { + coloredText = coloredText.substring(0, coloredText.length() - 1); + } + coloredText += "]"; + return coloredText; + } + + public String toPlainText(Object o, Class c) { + List finalList = new ArrayList<>(); + StringBuilder stringbuilder = new StringBuilder(); + try { + splitComponents(finalList, o, c); + for (Object component : finalList) { + if (VersionHandler.is1_7()) { + stringbuilder.append((String) component.getClass().getMethod("e").invoke(component)); + } else { + stringbuilder.append((String) component.getClass().getMethod("getText").invoke(component)); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + // if(plugin.getConfig().getString("loglevel", "info").equals("debug")) { + // System.out.println("my string"); + // System.out.println("my string"); + // System.out.println("my string"); + // System.out.println("my string"); + // System.out.println("my string"); + // System.out.println(stringbuilder.toString()); + // } + return stringbuilder.toString(); + } + + private void splitComponents(List finalList, Object o, Class c) throws Exception { +// for(Method m : c.getMethods()) { +// System.out.println(m.getName()); +// } + + if (VersionHandler.is1_7() || VersionHandler.is1_8() || VersionHandler.is1_9() || VersionHandler.is1_10() + || VersionHandler.is1_11() || VersionHandler.is1_12() || VersionHandler.is1_13() + || (VersionHandler.is1_14() && !VersionHandler.is1_14_4())) { + ArrayList list = (ArrayList) c.getMethod("a").invoke(o, new Object[0]); + for (Object component : list) { + ArrayList innerList = (ArrayList) c.getMethod("a").invoke(component, new Object[0]); + if (innerList.size() > 0) { + splitComponents(finalList, component, c); + } else { + finalList.add(component); + } + } + } else { + ArrayList list = (ArrayList) c.getMethod("getSiblings").invoke(o, new Object[0]); + for (Object component : list) { + ArrayList innerList = (ArrayList) c.getMethod("getSiblings").invoke(component, new Object[0]); + if (innerList.size() > 0) { + splitComponents(finalList, component, c); + } else { + finalList.add(component); + } + } + } + } + + public String FilterChat(String msg) { + int t = 0; + List filters = plugin.getConfig().getStringList("filters"); + for (String s : filters) { + t = 0; + String[] pparse = new String[2]; + pparse[0] = " "; + pparse[1] = " "; + StringTokenizer st = new StringTokenizer(s, ","); + while (st.hasMoreTokens()) { + if (t < 2) { + pparse[t++] = st.nextToken(); + } + } + // (?i) = case insensitive + msg = msg.replaceAll("(?i)" + pparse[0], pparse[1]); + } + return msg; + } + + public boolean underlineURLs() { + return plugin.getConfig().getBoolean("underlineurls", true); + } + + public void broadcastToServer(String message) { + for(VentureChatPlayer mcp : playerApiService.getOnlineMineverseChatPlayers()) { + mcp.getPlayer().sendMessage(message); + } + } + + public void playMessageSound(VentureChatPlayer mcp) { + Player player = mcp.getPlayer(); + String soundName = plugin.getConfig().getString("message_sound", DEFAULT_MESSAGE_SOUND); + if(!soundName.equalsIgnoreCase("None")) { + Sound messageSound = getSound(soundName); + player.playSound(player.getLocation(), messageSound, 1, 0); + } + } + + private Sound getSound(String soundName) { + if(Arrays.asList(Sound.values()).stream().map(Sound::toString).collect(Collectors.toList()).contains(soundName)) { + return Sound.valueOf(soundName); + } + Bukkit.getConsoleSender().sendMessage(FormatUtils.FormatStringAll("&8[&eVentureChat&8]&c - Message sound invalid!")); + return getDefaultMessageSound(); + } + + private Sound getDefaultMessageSound() { + if(VersionHandler.is1_7() || VersionHandler.is1_8()) { + return Sound.valueOf(DEFAULT_LEGACY_MESSAGE_SOUND); + } + else { + return Sound.valueOf(DEFAULT_MESSAGE_SOUND); + } + } +} diff --git a/src/main/java/venture/Aust1n46/chat/service/VentureChatPlayerApiService.java b/src/main/java/venture/Aust1n46/chat/service/VentureChatPlayerApiService.java new file mode 100644 index 0000000..a5f7aae --- /dev/null +++ b/src/main/java/venture/Aust1n46/chat/service/VentureChatPlayerApiService.java @@ -0,0 +1,174 @@ +package venture.Aust1n46.chat.service; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.UUID; + +import org.bukkit.entity.Player; + +import venture.Aust1n46.chat.model.VentureChatPlayer; +import venture.Aust1n46.chat.model.SynchronizedVentureChatPlayer; + +/** + * API class for looking up wrapped {@link VentureChatPlayer} objects from + * {@link Player}, {@link UUID}, or {@link String} user names. + * + * @author Aust1n46 + */ +public final class VentureChatPlayerApiService { + private static HashMap playerMap = new HashMap(); + private static HashMap namesMap = new HashMap(); + private static HashMap onlinePlayerMap = new HashMap(); + + private static List networkPlayerNames = new ArrayList(); + private static HashMap proxyPlayerMap = new HashMap(); + + public void addNameToMap(VentureChatPlayer mcp) { + namesMap.put(mcp.getName(), mcp.getUuid()); + } + + public void removeNameFromMap(String name) { + namesMap.remove(name); + } + + public void clearNameMap() { + namesMap.clear(); + } + + public void addMineverseChatPlayerToMap(VentureChatPlayer mcp) { + playerMap.put(mcp.getUuid(), mcp); + } + + public void clearMineverseChatPlayerMap() { + playerMap.clear(); + } + + public Collection getMineverseChatPlayers() { + return playerMap.values(); + } + + public void addMineverseChatOnlinePlayerToMap(VentureChatPlayer mcp) { + onlinePlayerMap.put(mcp.getUuid(), mcp); + } + + public void removeMineverseChatOnlinePlayerToMap(VentureChatPlayer mcp) { + onlinePlayerMap.remove(mcp.getUuid()); + } + + public void clearOnlineMineverseChatPlayerMap() { + onlinePlayerMap.clear(); + } + + public Collection getOnlineMineverseChatPlayers() { + return onlinePlayerMap.values(); + } + + /** + * Get a MineverseChatPlayer wrapper from a Bukkit Player instance. + * + * @param player {@link Player} object. + * @return {@link VentureChatPlayer} + */ + public VentureChatPlayer getMineverseChatPlayer(Player player) { + return getMineverseChatPlayer(player.getUniqueId()); + } + + /** + * Get a MineverseChatPlayer wrapper from a UUID. + * + * @param uuid {@link UUID}. + * @return {@link VentureChatPlayer} + */ + public VentureChatPlayer getMineverseChatPlayer(UUID uuid) { + return playerMap.get(uuid); + } + + /** + * Get a MineverseChatPlayer wrapper from a user name. + * + * @param name {@link String}. + * @return {@link VentureChatPlayer} + */ + public VentureChatPlayer getMineverseChatPlayer(String name) { + return getMineverseChatPlayer(namesMap.get(name)); + } + + /** + * Get a MineverseChatPlayer wrapper from a Bukkit Player instance. Only checks + * current online players. Much more efficient! + * + * @param player {@link Player} object. + * @return {@link VentureChatPlayer} + */ + public VentureChatPlayer getOnlineMineverseChatPlayer(Player player) { + return getOnlineMineverseChatPlayer(player.getUniqueId()); + } + + /** + * Get a MineverseChatPlayer wrapper from a UUID. Only checks current online + * players. Much more efficient! + * + * @param uuid {@link UUID}. + * @return {@link VentureChatPlayer} + */ + public VentureChatPlayer getOnlineMineverseChatPlayer(UUID uuid) { + return onlinePlayerMap.get(uuid); + } + + /** + * Get a MineverseChatPlayer wrapper from a user name. Only checks current + * online players. Much more efficient! + * + * @param name {@link String}. + * @return {@link VentureChatPlayer} + */ + public VentureChatPlayer getOnlineMineverseChatPlayer(String name) { + return getOnlineMineverseChatPlayer(namesMap.get(name)); + } + + + + + + + public List getNetworkPlayerNames() { + return networkPlayerNames; + } + + public void clearNetworkPlayerNames() { + networkPlayerNames.clear(); + } + + public void addNetworkPlayerName(String name) { + networkPlayerNames.add(name); + } + + public void addSynchronizedMineverseChatPlayerToMap(SynchronizedVentureChatPlayer smcp) { + proxyPlayerMap.put(smcp.getUUID(), smcp); + } + +// @Deprecated +// public static void clearBungeePlayerMap() { +// clearProxyPlayerMap(); +// } + + public void clearProxyPlayerMap() { + proxyPlayerMap.clear(); + } + + public Collection getSynchronizedMineverseChatPlayers() { + return proxyPlayerMap.values(); + } + + /** + * Get a SynchronizedMineverseChatPlayer from a UUID. + * + * @param uuid {@link UUID} + * @return {@link SynchronizedVentureChatPlayer} + */ + public SynchronizedVentureChatPlayer getSynchronizedMineverseChatPlayer(UUID uuid) { + return proxyPlayerMap.get(uuid); + } +} diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 583d560..ba3c12f 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,7 +1,7 @@ name: VentureChat version: ${project.version} api-version: 1.13 -main: mineverse.Aust1n46.chat.MineverseChat +main: venture.Aust1n46.chat.VentureChat depend: [Vault, ProtocolLib, PlaceholderAPI] softdepend: [Towny, Factions, EssentialsDiscord] author: Aust1n46 diff --git a/src/test/java/mineverse/Aust1n46/chat/listeners/LoginListenerTest.java b/src/test/java/mineverse/Aust1n46/chat/listeners/LoginListenerTest.java deleted file mode 100644 index 99faa1f..0000000 --- a/src/test/java/mineverse/Aust1n46/chat/listeners/LoginListenerTest.java +++ /dev/null @@ -1,92 +0,0 @@ -package mineverse.Aust1n46.chat.listeners; - -import java.io.File; - -import org.bukkit.Bukkit; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.entity.Player; -import org.bukkit.event.player.PlayerQuitEvent; -import org.junit.After; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; -import org.mockito.MockedStatic; -import org.mockito.Mockito; - -import mineverse.Aust1n46.chat.MineverseChat; -import mineverse.Aust1n46.chat.api.MineverseChatAPI; -import mineverse.Aust1n46.chat.api.MineverseChatPlayer; -import mineverse.Aust1n46.chat.database.PlayerData; - -/** - * Tests {@link LoginListener}. - */ -public class LoginListenerTest { - private static MockedStatic mockedMineverseChat; - private static MockedStatic mockedBukkit; - private static MockedStatic mockedPlayerData; - private static MockedStatic mockedMineverseChatAPI; - - private static MineverseChat mockPlugin; - private Player mockPlayer; - private MineverseChatPlayer mockMCP; - private ConsoleCommandSender mockConsoleSender; - private LoginListener testLoginListener; - private PlayerQuitEvent mockPlayerQuitEvent; - private static File mockDataFile; - - @BeforeClass - public static void init() { - mockedMineverseChat = Mockito.mockStatic(MineverseChat.class); - mockPlugin = Mockito.mock(MineverseChat.class); - Mockito.when(MineverseChat.getInstance()).thenReturn(mockPlugin); - mockedBukkit = Mockito.mockStatic(Bukkit.class); - mockDataFile = Mockito.mock(File.class); - Mockito.when(mockPlugin.getDataFolder()).thenReturn(mockDataFile); - Mockito.when(mockDataFile.getAbsolutePath()).thenReturn(""); - mockedPlayerData = Mockito.mockStatic(PlayerData.class); - mockedMineverseChatAPI = Mockito.mockStatic(MineverseChatAPI.class); - } - - @AfterClass - public static void close() { - mockedMineverseChat.close(); - mockedBukkit.close(); - mockedPlayerData.close(); - mockedMineverseChatAPI.close(); - } - - @Before - public void setUp() { - mockPlayer = Mockito.mock(Player.class); - mockMCP = Mockito.mock(MineverseChatPlayer.class); - mockConsoleSender = Mockito.mock(ConsoleCommandSender.class); - mockPlayerQuitEvent = Mockito.mock(PlayerQuitEvent.class); - Mockito.when(mockPlayerQuitEvent.getPlayer()).thenReturn(mockPlayer); - Mockito.when(MineverseChatAPI.getMineverseChatPlayer(Mockito.any(Player.class))).thenReturn(mockMCP); - Mockito.when(MineverseChatAPI.getOnlineMineverseChatPlayer(Mockito.any(Player.class))).thenReturn(mockMCP); - Mockito.when(Bukkit.getConsoleSender()).thenReturn(mockConsoleSender); - testLoginListener = new LoginListener(); - } - - @After - public void tearDown() { - mockPlugin = null; - } - - @Test - public void testLoginWithNameChange() throws Exception { - Mockito.when(mockPlayer.getName()).thenReturn("NewName"); - Mockito.when(mockMCP.getName()).thenReturn("OldName"); - testLoginListener.handleNameChange(mockMCP, mockPlayer); - Mockito.verify(mockMCP, Mockito.times(1)).setName("NewName"); - } - - @Test - public void testPlayerQuit() { - testLoginListener.onPlayerQuit(mockPlayerQuitEvent); - Mockito.verify(mockMCP, Mockito.times(1)).clearMessages(); - Mockito.verify(mockMCP, Mockito.times(1)).setOnline(false); - } -} diff --git a/src/test/java/mineverse/Aust1n46/chat/utilities/FormatTest.java b/src/test/java/mineverse/Aust1n46/chat/utilities/FormatTest.java deleted file mode 100644 index dd32e32..0000000 --- a/src/test/java/mineverse/Aust1n46/chat/utilities/FormatTest.java +++ /dev/null @@ -1,191 +0,0 @@ -package mineverse.Aust1n46.chat.utilities; - -import static mineverse.Aust1n46.chat.utilities.Format.BUKKIT_COLOR_CODE_PREFIX; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -import java.util.ArrayList; -import java.util.List; - -import org.bukkit.configuration.file.FileConfiguration; -import org.junit.After; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; -import org.mockito.MockedStatic; -import org.mockito.Mockito; - -import mineverse.Aust1n46.chat.MineverseChat; - -/** - * Tests {@link Format}. - */ -public class FormatTest { - private static MockedStatic mockedMineverseChat; - - private static MineverseChat mockPlugin; - private FileConfiguration mockConfig; - - private List filters; - - @BeforeClass - public static void init() { - mockedMineverseChat = Mockito.mockStatic(MineverseChat.class); - mockPlugin = Mockito.mock(MineverseChat.class); - Mockito.when(MineverseChat.getInstance()).thenReturn(mockPlugin); - } - - @AfterClass - public static void close() { - mockedMineverseChat.close(); - } - - @Before - public void setUp() { - filters = new ArrayList(); - filters.add("ass,donut"); - - mockConfig = Mockito.mock(FileConfiguration.class); - Mockito.when(mockPlugin.getConfig()).thenReturn(mockConfig); - Mockito.when(mockConfig.getStringList("filters")).thenReturn(filters); - } - - @After - public void tearDown() { - filters = new ArrayList(); - } - - @Test - public void testGetLastCodeSingleColor() { - String input = BUKKIT_COLOR_CODE_PREFIX + "cHello"; - String expectedResult = BUKKIT_COLOR_CODE_PREFIX + "c"; - - String result = Format.getLastCode(input); - - assertEquals(expectedResult, result); - } - - @Test - public void testGetLastCodeColorAfterFormat() { - String input = BUKKIT_COLOR_CODE_PREFIX + "o" + BUKKIT_COLOR_CODE_PREFIX + "cHello"; - String expectedResult = BUKKIT_COLOR_CODE_PREFIX + "c"; - - String result = Format.getLastCode(input); - - assertEquals(expectedResult, result); - } - - @Test - public void testGetLastCodeColorBeforeFormat() { - String input = BUKKIT_COLOR_CODE_PREFIX + "c" + BUKKIT_COLOR_CODE_PREFIX + "oHello"; - String expectedResult = BUKKIT_COLOR_CODE_PREFIX + "c" + BUKKIT_COLOR_CODE_PREFIX + "o"; - - String result = Format.getLastCode(input); - - assertEquals(expectedResult, result); - } - - @Test - public void testFilterChat() { - String test = "I am an ass"; - String expectedResult = "I am an donut"; - - String result = Format.FilterChat(test); - assertEquals(expectedResult, result); - } - - @Test - public void testIsValidColor() { - String color = "red"; - - boolean result = Format.isValidColor(color); - assertTrue(result); - } - - @Test - public void testIsInvalidColor() { - String color = "randomString"; - - boolean result = Format.isValidColor(color); - assertFalse(result); - } - - @Test - public void testIsValidHexColor() { - String hexColor = "#ff00ff"; - - boolean result = Format.isValidHexColor(hexColor); - assertTrue(result); - } - - @Test - public void testIsInvalidHexColor() { - String hexColor = "#random"; - - boolean result = Format.isValidHexColor(hexColor); - assertFalse(result); - } - - @Test - public void testConvertHexColorCodeToBukkitColorCode() { - String hexColor = "#ff00ff"; - String expectedResult = BUKKIT_COLOR_CODE_PREFIX + "x" + BUKKIT_COLOR_CODE_PREFIX + "f" - + BUKKIT_COLOR_CODE_PREFIX + "f" + BUKKIT_COLOR_CODE_PREFIX + "0" + BUKKIT_COLOR_CODE_PREFIX + "0" - + BUKKIT_COLOR_CODE_PREFIX + "f" + BUKKIT_COLOR_CODE_PREFIX + "f"; - - String result = Format.convertHexColorCodeToBukkitColorCode(hexColor); - assertEquals(expectedResult, result); - } - - @Test - public void testConvertHexColorCodeStringToBukkitColorCodeString() { - String input = "#ff00ffHello" + BUKKIT_COLOR_CODE_PREFIX + "cThere#00ff00Austin"; - String expectedResult = BUKKIT_COLOR_CODE_PREFIX + "x" + BUKKIT_COLOR_CODE_PREFIX + "f" - + BUKKIT_COLOR_CODE_PREFIX + "f" + BUKKIT_COLOR_CODE_PREFIX + "0" + BUKKIT_COLOR_CODE_PREFIX + "0" - + BUKKIT_COLOR_CODE_PREFIX + "f" + BUKKIT_COLOR_CODE_PREFIX + "fHello" + BUKKIT_COLOR_CODE_PREFIX - + "cThere" + BUKKIT_COLOR_CODE_PREFIX + "x" + BUKKIT_COLOR_CODE_PREFIX + "0" + BUKKIT_COLOR_CODE_PREFIX - + "0" + BUKKIT_COLOR_CODE_PREFIX + "f" + BUKKIT_COLOR_CODE_PREFIX + "f" + BUKKIT_COLOR_CODE_PREFIX + "0" - + BUKKIT_COLOR_CODE_PREFIX + "0Austin"; - - String result = Format.convertHexColorCodeStringToBukkitColorCodeString(input); - assertEquals(expectedResult, result); - } - - @Test - public void testFormatStringLegacyColor_NoColorCode() { - String input = "Hello There Austin"; - String expectedResult = "Hello There Austin"; - - String result = Format.FormatStringLegacyColor(input); - assertEquals(expectedResult, result); - } - - @Test - public void testFormatStringLegacyColor_LegacyCodeOnly() { - String input = "Hello &cThere Austin"; - String expectedResult = "Hello " + BUKKIT_COLOR_CODE_PREFIX + "cThere Austin"; - - String result = Format.FormatStringLegacyColor(input); - assertEquals(expectedResult, result); - } - - @Test - public void testFormatStringLegacyColor_SpigotHexCodeOnly() { - String input = "&x&f&f&f&f&f&fHello There Austin"; - String expectedResult = "&x&f&f&f&f&f&fHello There Austin"; - - String result = Format.FormatStringLegacyColor(input); - assertEquals(expectedResult, result); - } - - @Test - public void testFormatStringLegacyColor_BothColorCodes() { - String input = "&x&f&f&f&f&f&f&cHello There Austin"; - String expectedResult = "&x&f&f&f&f&f&f" + BUKKIT_COLOR_CODE_PREFIX + "cHello There Austin"; - - String result = Format.FormatStringLegacyColor(input); - assertEquals(expectedResult, result); - } -} diff --git a/src/test/java/venture/Aust1n46/chat/initiators/listeners/LoginListenerTest.java b/src/test/java/venture/Aust1n46/chat/initiators/listeners/LoginListenerTest.java new file mode 100644 index 0000000..a50468c --- /dev/null +++ b/src/test/java/venture/Aust1n46/chat/initiators/listeners/LoginListenerTest.java @@ -0,0 +1,56 @@ +package venture.Aust1n46.chat.initiators.listeners; + +import static org.mockito.Mockito.when; + +import org.bukkit.entity.Player; +import org.bukkit.event.player.PlayerQuitEvent; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; + +import venture.Aust1n46.chat.Logger; +import venture.Aust1n46.chat.VentureChat; +import venture.Aust1n46.chat.controllers.PluginMessageController; +import venture.Aust1n46.chat.controllers.VentureChatSpigotFlatFileController; +import venture.Aust1n46.chat.model.VentureChatPlayer; +import venture.Aust1n46.chat.service.UUIDService; +import venture.Aust1n46.chat.service.VentureChatPlayerApiService; + +@RunWith(MockitoJUnitRunner.class) +public class LoginListenerTest { + @Mock + private VentureChat plugin; + @Mock + private UUIDService uuidService; + @Mock + private VentureChatSpigotFlatFileController spigotFlatFileController; + @Mock + private PluginMessageController pluginMessageController; + @Mock + private VentureChatPlayerApiService playerApiService; + @Mock + private Logger log; + @InjectMocks + private LoginListener loginListener; + + @Mock + private PlayerQuitEvent mockPlayerQuitEvent; + @Mock + private Player mockPlayer; + @Mock + private VentureChatPlayer mockVentureChatPlayer; + + @Test + public void testPlayerQuit() { + when(mockPlayerQuitEvent.getPlayer()).thenReturn(mockPlayer); + when(playerApiService.getOnlineMineverseChatPlayer(mockPlayer)).thenReturn(mockVentureChatPlayer); + loginListener.onPlayerQuit(mockPlayerQuitEvent); + } + + @Test + public void testPlayerJoin_successful() { + + } +}