From 241fe7a3195116fb157e80fe17a2ae1093489f2e Mon Sep 17 00:00:00 2001 From: Aust1n46 Date: Fri, 19 Feb 2021 17:13:34 -0600 Subject: [PATCH 01/25] Overhauled mute system. Improved timed muting. Added new arg parser for mute duration. Fixed cooldown overflow issue. Fixed timed mutes not expiring properly issue. Updated data file format to properly use yml formatting. Properly sync timed mutes over BungeeCord. --- src/Messages.yml | 14 +- .../Aust1n46/chat/MineverseChat.java | 40 ++--- .../chat/api/MineverseChatPlayer.java | 31 ++-- .../api/SynchronizedMineverseChatPlayer.java | 10 +- .../chat/bungee/MineverseChatBungee.java | 8 +- .../Aust1n46/chat/command/mute/Mute.java | 17 +-- .../chat/database/BungeePlayerData.java | 8 +- .../Aust1n46/chat/database/PlayerData.java | 50 ++++--- .../Aust1n46/chat/listeners/ChatListener.java | 67 ++++----- .../chat/listeners/LoginListener.java | 2 +- .../chat/localization/LocalizedMessage.java | 4 + .../Aust1n46/chat/utilities/Format.java | 137 +++++++++++++++++- 12 files changed, 258 insertions(+), 130 deletions(-) diff --git a/src/Messages.yml b/src/Messages.yml index 8b0e3b2..61f7f01 100644 --- a/src/Messages.yml +++ b/src/Messages.yml @@ -8,7 +8,7 @@ BungeeToggleOn: '&6You are now receiving BungeeCord chat.' ClearChatSender: '&aCleared the server chat.' ClearChatServer: '&aYour chat has been cleared.' ChannelCannotMute: '&cYou cannot mute players in this channel: {channel_color}{channel_name}' -ChannelCooldown: '&c{cooldown} {units} of cooldown remaining.' +ChannelCooldown: '&c{cooldown} of cooldown remaining.' ChannelList: '{channel_color}{channel_name} : {channel_alias}' ChannelListHeader: '&6Channel List : Alias' ChannelListWithPermissions: '{channel_color}{channel_name} : {channel_alias} - Permission Required' @@ -17,7 +17,7 @@ ChannelNoPermissionView: '&cYou do not have permission to look at this channel.' ChannelNoSpeakPermissions: '&cYou do not have permission to speak in this channel.' ChannelPlayerListHeader: '&6Players in Channel: {channel_color}{channel_name}' ChannelMuted: '&cYou are muted in this channel: {channel_color}{channel_name}' -ChannelMutedTimed: '&cYou are muted in this channel: {channel_color}{channel_name}&c for {time} more {units}' +ChannelMutedTimed: '&cYou are muted in this channel: {channel_color}{channel_name}&c for {time}' CommandInvalidArguments: '&cInvalid command: {command} {args}' CommandInvalidArgumentsIgnore: '&cInvalid command: /ignore [player] or /ignore list' CommandMustBeRunByPlayer: '&cThis command must be run by a player.' @@ -54,11 +54,11 @@ MustListenOneChannel: '&cYou need to be listening on at least one channel, setti MutePlayerAllPlayer: '&cYou have just been muted in all channels.' MutePlayerAllSender: '&cMuted player &6{player} &cin all channels.' MutePlayerPlayer: '&cYou have just been muted in: {channel_color}{channel_name}' -MutePlayerPlayerTime: '&cYou have just been muted in: {channel_color}{channel_name} &cfor {time} {units}' +MutePlayerPlayerTime: '&cYou have just been muted in: {channel_color}{channel_name} &cfor {time}' MutePlayerSpam: '&cYou have been muted for spamming in: {channel_color}{channel_name}' -MutePlayerSpamTime: '&cYou have been muted for spamming in: {channel_color}{channel_name} &cfor {time} {units}' +MutePlayerSpamTime: '&cYou have been muted for spamming in: {channel_color}{channel_name} &cfor {time}' MutePlayerSender: '&cMuted player &6{player} &cin: {channel_color}{channel_name}' -MutePlayerSenderTime: '&cMuted player &6{player} &cin: {channel_color}{channel_name} &cfor {time} {units}' +MutePlayerSenderTime: '&cMuted player &6{player} &cin: {channel_color}{channel_name} &cfor {time}' NoPlayerToReplyTo: '&cYou do not have anyone to reply to.' NotificationsOff: '&aYou are no longer receiving notifications.' NotificationsOn: '&aYou are now receiving notifications.' @@ -78,6 +78,10 @@ SpyOff: '&6You are no longer spying.' SpyOn: '&6You are now spying.' UnblockCommandPlayer: '&cYou have been unblocked from entering command {command}.' UnblockCommandSender: '&cUnblocked player &6{player} &cfrom entering command {command}.' +UnitsDayPlural: 'days' +UnitsDaySingular: 'day' +UnitsHourPlural: 'hours' +UnitsHourSingular: 'hour' UnitsMinutePlural: 'minutes' UnitsMinuteSingular: 'minute' UnitsSecondPlural: 'seconds' diff --git a/src/mineverse/Aust1n46/chat/MineverseChat.java b/src/mineverse/Aust1n46/chat/MineverseChat.java index 186610b..d292910 100644 --- a/src/mineverse/Aust1n46/chat/MineverseChat.java +++ b/src/mineverse/Aust1n46/chat/MineverseChat.java @@ -377,25 +377,27 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener { @Override public void run() { for (MineverseChatPlayer p : MineverseChatAPI.getOnlineMineverseChatPlayers()) { - int time = Format.currentTimeMillis(); + long currentTimeMillis = System.currentTimeMillis(); Iterator iterator = p.getMutes().keySet().iterator(); while (iterator.hasNext()) { - ChatChannel channel = ChatChannel.getChannel(iterator.next()); - int timemark = p.getMutes().get(channel.getName()); - if (timemark == 0) { - continue; - } - if (getConfig().getString("loglevel", "info").equals("debug")) { - System.out.println(time + " " + timemark); - } - if (time >= timemark) { - iterator.remove(); - if (p.isOnline()) { + String channelName = iterator.next(); + if(ChatChannel.isChannel(channelName)) { + ChatChannel channel = ChatChannel.getChannel(channelName); + long timemark = p.getMutes().get(channelName); + 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}", channel.getName())); - } else { - p.setModified(true); + .replace("{channel_name}", channelName)); + if(channel.getBungee()) { + MineverseChat.getInstance().synchronize(p, true); + } } } } @@ -405,7 +407,7 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener { .sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Updating Player Mutes")); } } - }, 0L, 1200L); // one minute interval + }, 0L, 60L); // three second interval } @Override @@ -567,6 +569,7 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener { ChatChannel channel = ChatChannel.getChannel(c); if(channel.getBungee()) { out.writeUTF(channel.getName()); + out.writeLong(mcp.getMutes().get(c)); } } int ignoreCount = 0; @@ -807,9 +810,10 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener { // System.out.println(sizeB + " mute size"); for(int b = 0; b < sizeB; b++) { String ch = msgin.readUTF(); + long muteTime = msgin.readLong(); // System.out.println(ch); if(ChatChannel.isChannel(ch)) { - p.addMute(ch, 0); + p.addMute(ch, muteTime); } } // System.out.println(msgin.available() + " available before"); @@ -942,7 +946,7 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener { Set ignores = new HashSet(); Set listening = new HashSet(); listening.add(current.getName()); - HashMap mutes = new HashMap(); + HashMap mutes = new HashMap(); Set blockedCommands = new HashSet(); String jsonFormat = "Default"; s = new MineverseChatPlayer(uuid, name, current, ignores, listening, mutes, blockedCommands, false, null, true, true, name, jsonFormat, false, false, false, true, true); diff --git a/src/mineverse/Aust1n46/chat/api/MineverseChatPlayer.java b/src/mineverse/Aust1n46/chat/api/MineverseChatPlayer.java index 70ca53a..1851b66 100644 --- a/src/mineverse/Aust1n46/chat/api/MineverseChatPlayer.java +++ b/src/mineverse/Aust1n46/chat/api/MineverseChatPlayer.java @@ -22,7 +22,7 @@ public class MineverseChatPlayer { private ChatChannel currentChannel; private Set ignores; private Set listening; - private HashMap mutes; + private HashMap mutes; private Set blockedCommands; private boolean host; private UUID party; @@ -38,9 +38,9 @@ public class MineverseChatPlayer { private boolean quickChat; private ChatChannel quickChannel; private UUID replyPlayer; - private HashMap cooldowns; + private HashMap cooldowns; private boolean partyChat; - private HashMap> spam; + private HashMap> spam; private boolean modified; private List messages; private String jsonFormat; @@ -49,15 +49,8 @@ public class MineverseChatPlayer { private boolean rangedSpy; private boolean messageToggle; private boolean bungeeToggle; - - //buttons variable no longer used - //mail variable no longer used - @Deprecated - public MineverseChatPlayer(UUID uuid, String name, ChatChannel currentChannel, Set ignores, Set listening, HashMap mutes, Set blockedCommands, List mail, boolean host, UUID party, boolean filter, boolean notifications, String nickname, String jsonFormat, boolean spy, boolean commandSpy, boolean rangedSpy, boolean buttons, boolean messageToggle, boolean bungeeToggle) { - this(uuid, name, currentChannel, ignores, listening, mutes, blockedCommands, host, party, filter, notifications, nickname, 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 nickname, String jsonFormat, boolean spy, boolean commandSpy, boolean rangedSpy, boolean messageToggle, boolean 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 nickname, String jsonFormat, boolean spy, boolean commandSpy, boolean rangedSpy, boolean messageToggle, boolean bungeeToggle) { this.uuid = uuid; this.name = name; this.currentChannel = currentChannel; @@ -84,8 +77,8 @@ public class MineverseChatPlayer { this.modified = false; this.messages = new ArrayList(); this.jsonFormat = jsonFormat; - this.cooldowns = new HashMap(); - this.spam = new HashMap>(); + this.cooldowns = new HashMap(); + this.spam = new HashMap>(); this.messageToggle = messageToggle; this.bungeeToggle = bungeeToggle; } @@ -214,11 +207,11 @@ public class MineverseChatPlayer { this.listening.clear(); } - public HashMap getMutes() { + public HashMap getMutes() { return this.mutes; } - public boolean addMute(String channel, int time) { + public boolean addMute(String channel, long time) { if(channel != null && time >= 0) { mutes.put(channel, time); return true; @@ -412,11 +405,11 @@ public class MineverseChatPlayer { this.partyChat = partyChat; } - public HashMap getCooldowns() { + public HashMap getCooldowns() { return this.cooldowns; } - public boolean addCooldown(ChatChannel channel, int time) { + public boolean addCooldown(ChatChannel channel, long time) { if(channel != null && time > 0) { cooldowns.put(channel, time); return true; @@ -436,7 +429,7 @@ public class MineverseChatPlayer { return channel != null && this.cooldowns != null ? this.cooldowns.containsKey(channel) : false; } - public HashMap> getSpam() { + public HashMap> getSpam() { return this.spam; } @@ -446,7 +439,7 @@ public class MineverseChatPlayer { public boolean addSpam(ChatChannel channel) { if(channel != null) { - spam.put(channel, new ArrayList()); + spam.put(channel, new ArrayList()); return true; } return false; diff --git a/src/mineverse/Aust1n46/chat/api/SynchronizedMineverseChatPlayer.java b/src/mineverse/Aust1n46/chat/api/SynchronizedMineverseChatPlayer.java index 591aaa0..f05b06a 100644 --- a/src/mineverse/Aust1n46/chat/api/SynchronizedMineverseChatPlayer.java +++ b/src/mineverse/Aust1n46/chat/api/SynchronizedMineverseChatPlayer.java @@ -9,14 +9,14 @@ import java.util.UUID; public class SynchronizedMineverseChatPlayer { private UUID uuid; private Set listening; - private HashMap mutes; + private HashMap mutes; private Set ignores; private int messagePackets; private List messageData = new ArrayList(); private boolean spy; private boolean messageToggle; - public SynchronizedMineverseChatPlayer(UUID uuid, Set listening, HashMap mutes, Set ignores, boolean spy, boolean messageToggle) { + public SynchronizedMineverseChatPlayer(UUID uuid, Set listening, HashMap mutes, Set ignores, boolean spy, boolean messageToggle) { this.uuid = uuid; this.listening = listening; this.mutes = mutes; @@ -61,15 +61,15 @@ public class SynchronizedMineverseChatPlayer { return this.ignores; } - public void addMute(String channel) { - this.mutes.put(channel, 0); + public void addMute(String channel, long muteTime) { + this.mutes.put(channel, muteTime); } public void removeMute(String channel) { this.mutes.remove(channel); } - public HashMap getMutes() { + public HashMap getMutes() { return this.mutes; } diff --git a/src/mineverse/Aust1n46/chat/bungee/MineverseChatBungee.java b/src/mineverse/Aust1n46/chat/bungee/MineverseChatBungee.java index 27cd8a1..f7c76d7 100644 --- a/src/mineverse/Aust1n46/chat/bungee/MineverseChatBungee.java +++ b/src/mineverse/Aust1n46/chat/bungee/MineverseChatBungee.java @@ -423,7 +423,7 @@ public class MineverseChatBungee extends Plugin implements Listener { UUID uuid = UUID.fromString(in.readUTF()); SynchronizedMineverseChatPlayer smcp = MineverseChatAPI.getSynchronizedMineverseChatPlayer(uuid); if(smcp == null) { - smcp = new SynchronizedMineverseChatPlayer(uuid, new HashSet(), new HashMap(), new HashSet(), false, true); + smcp = new SynchronizedMineverseChatPlayer(uuid, new HashSet(), new HashMap(), new HashSet(), false, true); MineverseChatAPI.addSynchronizedMineverseChatPlayerToMap(smcp); } out.writeUTF("Sync"); @@ -440,6 +440,7 @@ public class MineverseChatBungee extends Plugin implements Listener { for(String channel : smcp.getMutes().keySet()) { //System.out.println(channel); out.writeUTF(channel); + out.writeLong(smcp.getMutes().get(channel)); } //System.out.println(smcp.isSpy() + " spy value"); //System.out.println(out.size() + " size before"); @@ -459,7 +460,7 @@ public class MineverseChatBungee extends Plugin implements Listener { UUID uuid = UUID.fromString(in.readUTF()); SynchronizedMineverseChatPlayer smcp = MineverseChatAPI.getSynchronizedMineverseChatPlayer(uuid); if(smcp == null) { - smcp = new SynchronizedMineverseChatPlayer(uuid, new HashSet(), new HashMap(), new HashSet(), false, true); + smcp = new SynchronizedMineverseChatPlayer(uuid, new HashSet(), new HashMap(), new HashSet(), false, true); MineverseChatAPI.addSynchronizedMineverseChatPlayerToMap(smcp); } smcp.getListening().clear(); @@ -474,8 +475,9 @@ public class MineverseChatBungee extends Plugin implements Listener { //System.out.println(size + " mutes"); for(int b = 0; b < sizeM; b++) { String mute = in.readUTF(); + long muteTime = in.readLong(); //System.out.println(mute); - smcp.addMute(mute); + smcp.addMute(mute, muteTime); } int sizeI = in.read(); for(int c = 0; c < sizeI; c++) { diff --git a/src/mineverse/Aust1n46/chat/command/mute/Mute.java b/src/mineverse/Aust1n46/chat/command/mute/Mute.java index 2006a02..8d990ae 100644 --- a/src/mineverse/Aust1n46/chat/command/mute/Mute.java +++ b/src/mineverse/Aust1n46/chat/command/mute/Mute.java @@ -11,7 +11,6 @@ import mineverse.Aust1n46.chat.localization.LocalizedMessage; import mineverse.Aust1n46.chat.utilities.Format; public class Mute extends MineverseCommand { - private static final int MILLISECONDS_PER_MINUTE = 60000; public Mute(String name) { super(name); @@ -74,24 +73,22 @@ public class Mute extends MineverseCommand { } if (channel.isMutable()) { try { - int datetime = Format.currentTimeMillis(); - int time = Integer.parseInt(args[2]); + long datetime = System.currentTimeMillis(); + long time = Format.parseTimeStringToMillis(args[2]); if (time > 0) { - player.addMute(channel.getName(), datetime + (time * MILLISECONDS_PER_MINUTE)); - String units = LocalizedMessage.UNITS_MINUTE_PLURAL.toString(); - if (time == 1) - units = LocalizedMessage.UNITS_MINUTE_SINGULAR.toString(); + player.addMute(channel.getName(), datetime + time); + String timeString = Format.parseTimeStringFromMillis(time); sender.sendMessage(LocalizedMessage.MUTE_PLAYER_SENDER_TIME.toString() .replace("{player}", player.getName()) .replace("{channel_color}", channel.getColor()) - .replace("{channel_name}", channel.getName()).replace("{time}", time + "") - .replace("{units}", units)); + .replace("{channel_name}", channel.getName()) + .replace("{time}", timeString)); if (player.isOnline()) player.getPlayer() .sendMessage(LocalizedMessage.MUTE_PLAYER_PLAYER_TIME.toString() .replace("{channel_color}", channel.getColor()) .replace("{channel_name}", channel.getName()) - .replace("{time}", time + "").replace("{units}", units)); + .replace("{time}", timeString)); else player.setModified(true); if (channel.getBungee()) { diff --git a/src/mineverse/Aust1n46/chat/database/BungeePlayerData.java b/src/mineverse/Aust1n46/chat/database/BungeePlayerData.java index 591301e..823ae13 100644 --- a/src/mineverse/Aust1n46/chat/database/BungeePlayerData.java +++ b/src/mineverse/Aust1n46/chat/database/BungeePlayerData.java @@ -52,11 +52,11 @@ public class BungeePlayerData { String channel = l.nextToken(); listening.add(channel); } - HashMap mutes = new HashMap(); + HashMap mutes = new HashMap(); StringTokenizer m = new StringTokenizer(playerData.getString(uuidString + ".mutes"), ","); while(m.hasMoreTokens()) { String[] parts = m.nextToken().split(":"); - mutes.put(parts[0], Integer.parseInt(parts[1])); + mutes.put(parts[0], Long.parseLong(parts[1])); } HashSet ignores = new HashSet(); StringTokenizer n = new StringTokenizer(playerData.getString(uuidString + ".ignores"), ","); @@ -115,11 +115,11 @@ public class BungeePlayerData { String channel = l.nextToken(); listening.add(channel); } - HashMap mutes = new HashMap(); + HashMap mutes = new HashMap(); StringTokenizer m = new StringTokenizer(bungeePlayerDataFileConfiguration.getString("mutes"), ","); while(m.hasMoreTokens()) { String[] parts = m.nextToken().split(":"); - mutes.put(parts[0], Integer.parseInt(parts[1])); + mutes.put(parts[0], Long.parseLong(parts[1])); } HashSet ignores = new HashSet(); StringTokenizer n = new StringTokenizer(bungeePlayerDataFileConfiguration.getString("ignores"), ","); diff --git a/src/mineverse/Aust1n46/chat/database/PlayerData.java b/src/mineverse/Aust1n46/chat/database/PlayerData.java index 6e3c513..ad9fe0b 100644 --- a/src/mineverse/Aust1n46/chat/database/PlayerData.java +++ b/src/mineverse/Aust1n46/chat/database/PlayerData.java @@ -14,6 +14,7 @@ import java.util.StringTokenizer; import java.util.UUID; import org.bukkit.Bukkit; +import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; @@ -64,7 +65,7 @@ public class PlayerData { listening.add(channel); } } - HashMap mutes = new HashMap(); + HashMap mutes = new HashMap(); StringTokenizer m = new StringTokenizer(playerData.getConfigurationSection("players." + uuidString).getString("mutes"), ","); while(m.hasMoreTokens()) { String[] parts = m.nextToken().split(":"); @@ -73,7 +74,7 @@ public class PlayerData { Bukkit.getConsoleSender().sendMessage("[VentureChat] Null Mute Time: " + parts[0] + " " + name); continue; } - mutes.put(ChatChannel.getChannel(parts[0]).getName(), Integer.parseInt(parts[1])); + mutes.put(ChatChannel.getChannel(parts[0]).getName(), Long.parseLong(parts[1])); } } Set blockedCommands = new HashSet(); @@ -160,18 +161,24 @@ public class PlayerData { listening.add(channel); } } - HashMap mutes = new HashMap(); - StringTokenizer m = new StringTokenizer(playerDataFileYamlConfiguration.getString("mutes"), ","); - while(m.hasMoreTokens()) { - String[] parts = m.nextToken().split(":"); - if(ChatChannel.isChannel(parts[0])) { - if(parts[1].equals("null")) { - Bukkit.getConsoleSender().sendMessage("[VentureChat] Null Mute Time: " + parts[0] + " " + name); - continue; - } - mutes.put(ChatChannel.getChannel(parts[0]).getName(), Integer.parseInt(parts[1])); - } + HashMap mutes = new HashMap(); +// StringTokenizer m = new StringTokenizer(playerDataFileYamlConfiguration.getString("mutes"), ","); +// while(m.hasMoreTokens()) { +// String[] parts = m.nextToken().split(":"); +// if(ChatChannel.isChannel(parts[0])) { +// if(parts[1].equals("null")) { +// Bukkit.getConsoleSender().sendMessage("[VentureChat] Null Mute Time: " + parts[0] + " " + name); +// continue; +// } +// mutes.put(ChatChannel.getChannel(parts[0]).getName(), Long.parseLong(parts[1])); +// } +// } + ConfigurationSection muteSection = playerDataFileYamlConfiguration.getConfigurationSection("mutes"); + for(String channelName : muteSection.getKeys(false)) { + ConfigurationSection channelSection = muteSection.getConfigurationSection(channelName); + mutes.put(channelName, channelSection.getLong("time")); } + Set blockedCommands = new HashSet(); StringTokenizer b = new StringTokenizer(playerDataFileYamlConfiguration.getString("blockedcommands"), ","); while(b.hasMoreTokens()) { @@ -225,11 +232,6 @@ public class PlayerData { ChatChannel c = ChatChannel.getChannel(channel); listening += c.getName() + ","; } - String mutes = ""; - for(String channel : mcp.getMutes().keySet()) { - ChatChannel c = ChatChannel.getChannel(channel); - mutes += c.getName() + ":" + mcp.getMutes().get(c.getName()) + ","; - } String blockedCommands = ""; for(String s : mcp.getBlockedCommands()) { blockedCommands += s + ","; @@ -238,13 +240,13 @@ public class PlayerData { listening = listening.substring(0, listening.length() - 1); } playerDataFileYamlConfiguration.set("listen", listening); - if(mutes.length() > 0) { - mutes = mutes.substring(0, mutes.length() - 1); - } - playerDataFileYamlConfiguration.set("mutes", mutes); - if(blockedCommands.length() > 0) { - blockedCommands = blockedCommands.substring(0, blockedCommands.length() - 1); + + ConfigurationSection muteSection = playerDataFileYamlConfiguration.createSection("mutes"); + for(String channelName : mcp.getMutes().keySet()) { + ConfigurationSection channelSection = muteSection.createSection(channelName); + channelSection.set("time", mcp.getMutes().get(channelName)); } + playerDataFileYamlConfiguration.set("blockedcommands", blockedCommands); playerDataFileYamlConfiguration.set("host", mcp.isHost()); playerDataFileYamlConfiguration.set("party", mcp.hasParty() ? mcp.getParty().toString() : ""); diff --git a/src/mineverse/Aust1n46/chat/listeners/ChatListener.java b/src/mineverse/Aust1n46/chat/listeners/ChatListener.java index 401f95c..d143655 100644 --- a/src/mineverse/Aust1n46/chat/listeners/ChatListener.java +++ b/src/mineverse/Aust1n46/chat/listeners/ChatListener.java @@ -35,9 +35,6 @@ import mineverse.Aust1n46.chat.versions.VersionHandler; //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 static final int MILLISECONDS_PER_MINUTE = 60000; - private static final int MILLISECONDS_PER_SECOND = 1000; - private MineverseChat plugin = MineverseChat.getInstance(); @EventHandler(priority = EventPriority.NORMAL) @@ -213,22 +210,19 @@ public class ChatListener implements Listener { Boolean filterthis = true; mcp.addListening(eventChannel.getName()); if (mcp.isMuted(eventChannel.getName())) { - if (mcp.getMutes().get(eventChannel.getName()).intValue() > 0) { - int dateTimeMillis = Format.currentTimeMillis(); - String units = LocalizedMessage.UNITS_MINUTE_PLURAL.toString(); - int muteTimeMillis = mcp.getMutes().get(eventChannel.getName()).intValue(); - int remainingMuteTime = (muteTimeMillis - dateTimeMillis) / MILLISECONDS_PER_MINUTE; - if (remainingMuteTime <= 0) { - remainingMuteTime = 1; - } - if (remainingMuteTime == 1) { - units = LocalizedMessage.UNITS_MINUTE_SINGULAR.toString(); + if (mcp.getMutes().get(eventChannel.getName()).longValue() > 0) { + long dateTimeMillis = System.currentTimeMillis(); + long muteTimeMillis = mcp.getMutes().get(eventChannel.getName()).longValue(); + long remainingMuteTime = muteTimeMillis - dateTimeMillis; + if (remainingMuteTime < 1000) { + remainingMuteTime = 1000; } + String timeString = Format.parseTimeStringFromMillis(remainingMuteTime); mcp.getPlayer() .sendMessage(LocalizedMessage.CHANNEL_MUTED_TIMED.toString() .replace("{channel_color}", eventChannel.getColor()) .replace("{channel_name}", eventChannel.getName()) - .replace("{time}", String.valueOf(remainingMuteTime)).replace("{units}", units)); + .replace("{time}", timeString)); } else { mcp.getPlayer() @@ -240,7 +234,6 @@ public class ChatListener implements Listener { return; } Double chDistance = (double) 0; - int chCooldown = 0; String curColor = ""; if(eventChannel.hasPermission() && !mcp.getPlayer().hasPermission(eventChannel.getPermission())) { mcp.getPlayer().sendMessage(LocalizedMessage.CHANNEL_NO_PERMISSION.toString()); @@ -257,22 +250,20 @@ public class ChatListener implements Listener { curColor = eventChannel.getChatColor(); bungee = eventChannel.getBungee(); - int dateTimeSeconds = Format.currentTimeMillis() / MILLISECONDS_PER_SECOND; + long dateTimeSeconds = System.currentTimeMillis() / Format.MILLISECONDS_PER_SECOND; + int chCooldown = 0; if(eventChannel.hasCooldown()) { chCooldown = eventChannel.getCooldown(); } try { if (mcp.hasCooldown(eventChannel)) { - int cooldownTime = mcp.getCooldowns().get(eventChannel).intValue(); + long cooldownTime = mcp.getCooldowns().get(eventChannel).longValue(); if (dateTimeSeconds < cooldownTime) { - int remainingCooldownTime = cooldownTime - dateTimeSeconds; - String units = LocalizedMessage.UNITS_SECOND_PLURAL.toString(); - if (remainingCooldownTime == 1) { - units = LocalizedMessage.UNITS_SECOND_SINGULAR.toString(); - } + long remainingCooldownTime = cooldownTime - dateTimeSeconds; + String cooldownString = Format.parseTimeStringFromMillis(remainingCooldownTime * Format.MILLISECONDS_PER_SECOND); mcp.getPlayer().sendMessage(LocalizedMessage.CHANNEL_COOLDOWN.toString() - .replace("{cooldown}", String.valueOf(remainingCooldownTime)).replace("{units}", units)); + .replace("{cooldown}", cooldownString)); mcp.setQuickChat(false); bungee = false; return; @@ -289,25 +280,23 @@ public class ChatListener implements Listener { if (mcp.hasSpam(eventChannel) && plugin.getConfig().getConfigurationSection("antispam").getBoolean("enabled") && !mcp.getPlayer().hasPermission("venturechat.spam.bypass")) { - int spamcount = mcp.getSpam().get(eventChannel).get(0); - int spamtime = mcp.getSpam().get(eventChannel).get(1); - int spamtimeconfig = plugin.getConfig().getConfigurationSection("antispam").getInt("spamnumber"); - int mutedForTime = plugin.getConfig().getConfigurationSection("antispam").getInt("mutetime", 0); - int dateTime = Format.currentTimeMillis(); + 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").getInt("spamtime")) { + + plugin.getConfig().getConfigurationSection("antispam").getLong("spamtime")) { if (spamcount + 1 >= spamtimeconfig) { - if (mutedForTime > 0) { - mcp.addMute(eventChannel.getName(), dateTime + (mutedForTime * MILLISECONDS_PER_MINUTE)); - String units = LocalizedMessage.UNITS_MINUTE_PLURAL.toString(); - if (mutedForTime == 1) { - units = LocalizedMessage.UNITS_MINUTE_SINGULAR.toString(); - } + long time = Format.parseTimeStringToMillis(mutedForTime); + if (time > 0) { + mcp.addMute(eventChannel.getName(), dateTime + time); + String timeString = Format.parseTimeStringFromMillis(time); mcp.getPlayer() .sendMessage(LocalizedMessage.MUTE_PLAYER_SPAM_TIME.toString() .replace("{channel_color}", eventChannel.getColor()) .replace("{channel_name}", eventChannel.getName()) - .replace("{time}", String.valueOf(mutedForTime)).replace("{units}", units)); + .replace("{time}", timeString)); } else { mcp.addMute(eventChannel.getName(), 0); @@ -316,7 +305,7 @@ public class ChatListener implements Listener { .replace("{channel_color}", eventChannel.getColor()) .replace("{channel_name}", eventChannel.getName())); } - mcp.getSpam().get(eventChannel).set(0, 0); + mcp.getSpam().get(eventChannel).set(0, 0L); mcp.setQuickChat(false); return; } else { @@ -329,12 +318,12 @@ public class ChatListener implements Listener { mcp.getSpam().get(eventChannel).set(0, spamcount + 1); } } else { - mcp.getSpam().get(eventChannel).set(0, 1); + mcp.getSpam().get(eventChannel).set(0, 1L); mcp.getSpam().get(eventChannel).set(1, dateTimeSeconds); } } else { mcp.addSpam(eventChannel); - mcp.getSpam().get(eventChannel).add(0, 1); + mcp.getSpam().get(eventChannel).add(0, 1L); mcp.getSpam().get(eventChannel).add(1, dateTimeSeconds); } diff --git a/src/mineverse/Aust1n46/chat/listeners/LoginListener.java b/src/mineverse/Aust1n46/chat/listeners/LoginListener.java index d54c962..8ba79e0 100644 --- a/src/mineverse/Aust1n46/chat/listeners/LoginListener.java +++ b/src/mineverse/Aust1n46/chat/listeners/LoginListener.java @@ -57,7 +57,7 @@ public class LoginListener implements Listener { Set ignores = new HashSet(); Set listening = new HashSet(); listening.add(current.getName()); - HashMap mutes = new HashMap(); + HashMap mutes = new HashMap(); Set blockedCommands = new HashSet(); String jsonFormat = "Default"; mcp = new MineverseChatPlayer(uuid, name, current, ignores, listening, mutes, blockedCommands, false, null, true, true, name, jsonFormat, false, false, false, true, true); diff --git a/src/mineverse/Aust1n46/chat/localization/LocalizedMessage.java b/src/mineverse/Aust1n46/chat/localization/LocalizedMessage.java index 0a0fa5d..aceffe4 100644 --- a/src/mineverse/Aust1n46/chat/localization/LocalizedMessage.java +++ b/src/mineverse/Aust1n46/chat/localization/LocalizedMessage.java @@ -85,6 +85,10 @@ public enum LocalizedMessage { SPY_ON("SpyOn"), UNBLOCK_COMMAND_PLAYER("UnblockCommandPlayer"), UNBLOCK_COMMAND_SENDER("UnblockCommandSender"), + UNITS_DAY_PLURAL("UnitsDayPlural"), + UNITS_DAY_SINGULAR("UnitsDaySingular"), + UNITS_HOUR_PLURAL("UnitsHourPlural"), + UNITS_HOUR_SINGULAR("UnitsHourSingular"), UNITS_MINUTE_PLURAL("UnitsMinutePlural"), UNITS_MINUTE_SINGULAR("UnitsMinuteSingular"), UNITS_SECOND_PLURAL("UnitsSecondPlural"), diff --git a/src/mineverse/Aust1n46/chat/utilities/Format.java b/src/mineverse/Aust1n46/chat/utilities/Format.java index e29eb26..554bff0 100644 --- a/src/mineverse/Aust1n46/chat/utilities/Format.java +++ b/src/mineverse/Aust1n46/chat/utilities/Format.java @@ -21,6 +21,7 @@ import me.clip.placeholderapi.PlaceholderAPI; import mineverse.Aust1n46.chat.MineverseChat; import mineverse.Aust1n46.chat.api.MineverseChatPlayer; import mineverse.Aust1n46.chat.json.JsonFormat; +import mineverse.Aust1n46.chat.localization.LocalizedMessage; import mineverse.Aust1n46.chat.versions.VersionHandler; /** @@ -38,6 +39,11 @@ public class Format { private static final Pattern LEGACY_CHAT_COLOR_DIGITS_PATTERN = Pattern.compile("&([0-9])"); private static final Pattern LEGACY_CHAT_COLOR_PATTERN = Pattern.compile( "(?= 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; - public static int currentTimeMillis() { - return (int) (System.currentTimeMillis() % Integer.MAX_VALUE); + 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; } } From 1da382bb3807863b090af8f8e5ff34dd5697bbf0 Mon Sep 17 00:00:00 2001 From: Aust1n46 Date: Sat, 20 Mar 2021 23:47:24 -0500 Subject: [PATCH 02/25] Added networking for BungeeCord /mute. --- .../Aust1n46/chat/MineverseChat.java | 452 ++++++------------ .../chat/bungee/MineverseChatBungee.java | 199 +++----- .../chat/command/MineverseCommand.java | 11 +- .../command/MineverseCommandExecutor.java | 21 +- .../Aust1n46/chat/command/mute/Mute.java | 177 ++++--- .../chat/database/TemporaryDataInstance.java | 37 ++ 6 files changed, 387 insertions(+), 510 deletions(-) create mode 100644 src/mineverse/Aust1n46/chat/database/TemporaryDataInstance.java diff --git a/src/mineverse/Aust1n46/chat/MineverseChat.java b/src/mineverse/Aust1n46/chat/MineverseChat.java index d292910..13a2a61 100644 --- a/src/mineverse/Aust1n46/chat/MineverseChat.java +++ b/src/mineverse/Aust1n46/chat/MineverseChat.java @@ -899,6 +899,149 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener { this.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(); + 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); + player.sendPluginMessage(this, MineverseChat.PLUGIN_MESSAGING_CHANNEL, stream.toByteArray()); + 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); + player.sendPluginMessage(this, MineverseChat.PLUGIN_MESSAGING_CHANNEL, stream.toByteArray()); + return; + } + if(time > 0) { + playerToMuteMCP.addMute(chatChannelObj.getName(), 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(), 0); + playerToMuteMCP.getPlayer() + .sendMessage(LocalizedMessage.MUTE_PLAYER_PLAYER.toString() + .replace("{channel_color}", chatChannelObj.getColor()) + .replace("{channel_name}", chatChannelObj.getName())); + } + synchronize(playerToMuteMCP, true); + out.writeUTF("Mute"); + out.writeUTF("Valid"); + out.writeUTF(server); + out.writeUTF(senderIdentifier); + out.writeUTF(playerToMute); + out.writeUTF(channelName); + out.writeLong(time); + player.sendPluginMessage(this, MineverseChat.PLUGIN_MESSAGING_CHANNEL, stream.toByteArray()); + return; + } + if(identifier.equals("Valid")) { + String senderIdentifier = msgin.readUTF(); + String playerToMute = msgin.readUTF(); + String channelName = msgin.readUTF(); + long time = msgin.readLong(); + if(!ChatChannel.isChannel(channelName)) { + return; + } + ChatChannel chatChannelObj = ChatChannel.getChannel(channelName); + if(time > 0) { + String timeString = Format.parseTimeStringFromMillis(time); + 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.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())); + } + } + 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("Message")) { String identifier = msgin.readUTF(); if(identifier.equals("Send")) { @@ -912,7 +1055,7 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener { String echo = msgin.readUTF(); String spy = msgin.readUTF(); String msg = msgin.readUTF(); - if(!this.getConfig().getBoolean("bungeecordmessaging", true) || p == null || !p.isOnline()) { + if(!this.getConfig().getBoolean("bungeecordmessaging", true) || p == null) { out.writeUTF("Message"); out.writeUTF("Offline"); out.writeUTF(server); @@ -1018,313 +1161,6 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener { } } } - if(subchannel.equals("Mute")) { - String sendplayer = msgin.readUTF(); - String mutePlayer = msgin.readUTF(); - String chatchannel = msgin.readUTF(); - String server = msgin.readUTF(); - String time = msgin.readUTF(); - int numtime = 0; - MineverseChatPlayer p = MineverseChatAPI.getMineverseChatPlayer(mutePlayer); - ChatChannel cc = ChatChannel.getChannel(chatchannel); - if(cc == null) { - try { - out.writeUTF("Mute"); - out.writeUTF("Channel"); - out.writeUTF(sendplayer); - out.writeUTF(chatchannel); - player.sendPluginMessage(this, MineverseChat.PLUGIN_MESSAGING_CHANNEL, stream.toByteArray()); - } - catch(Exception e) { - e.printStackTrace(); - } - return; - } - if(p == null) { - try { - out.writeUTF("Mute"); - out.writeUTF("Player"); - out.writeUTF(sendplayer); - out.writeUTF(mutePlayer); - out.writeUTF(server); - player.sendPluginMessage(this, MineverseChat.PLUGIN_MESSAGING_CHANNEL, stream.toByteArray()); - } - catch(Exception e) { - e.printStackTrace(); - } - return; - } - if(!cc.isMutable()) { - try { - out.writeUTF("Mute"); - out.writeUTF("Mutable"); - out.writeUTF(sendplayer); - out.writeUTF(cc.getName()); - out.writeUTF(cc.getColor()); - player.sendPluginMessage(this, MineverseChat.PLUGIN_MESSAGING_CHANNEL, stream.toByteArray()); - } - catch(Exception e) { - e.printStackTrace(); - } - return; - } - if(p.isMuted(cc.getName())) { - try { - out.writeUTF("Mute"); - out.writeUTF("Already"); - out.writeUTF(sendplayer); - out.writeUTF(mutePlayer); - out.writeUTF(cc.getName()); - out.writeUTF(cc.getColor()); - player.sendPluginMessage(this, MineverseChat.PLUGIN_MESSAGING_CHANNEL, stream.toByteArray()); - } - catch(Exception e) { - e.printStackTrace(); - } - return; - } - if(!time.equals("None\n")) { - try { - numtime = Integer.parseInt(time); - if(numtime > 0) { - Calendar currentDate = Calendar.getInstance(); - SimpleDateFormat formatter = new SimpleDateFormat("dd:HH:mm:ss"); - String date = formatter.format(currentDate.getTime()); - String[] datearray = date.split(":"); - int datetime = (Integer.parseInt(datearray[0]) * 1440) + (Integer.parseInt(datearray[1]) * 60) + (Integer.parseInt(datearray[2])); - p.addMute(cc.getName(), datetime + numtime); - String keyword = "minutes"; - if(numtime == 1) keyword = "minute"; - if(p.isOnline()) p.getPlayer().sendMessage(ChatColor.RED + "You have just been muted in: " + ChatColor.valueOf(cc.getColor().toUpperCase()) + cc.getName() + ChatColor.RED + " for " + time + " " + keyword); - else p.setModified(true); - if(cc.getBungee()) { - MineverseChat.getInstance().synchronize(p, true); - } - try { - out.writeUTF("Mute"); - out.writeUTF("Valid"); - out.writeUTF(sendplayer); - out.writeUTF(mutePlayer); - out.writeUTF(cc.getName()); - out.writeUTF(cc.getColor()); - out.writeUTF(time); - player.sendPluginMessage(this, MineverseChat.PLUGIN_MESSAGING_CHANNEL, stream.toByteArray()); - } - catch(Exception e) { - e.printStackTrace(); - } - return; - } - try { - out.writeUTF("Mute"); - out.writeUTF("Time"); - out.writeUTF(sendplayer); - out.writeUTF(time); - player.sendPluginMessage(this, MineverseChat.PLUGIN_MESSAGING_CHANNEL, stream.toByteArray()); - } - catch(Exception e) { - e.printStackTrace(); - } - return; - } - catch(Exception e) { - try { - out.writeUTF("Mute"); - out.writeUTF("Time"); - out.writeUTF(sendplayer); - out.writeUTF(time); - player.sendPluginMessage(this, MineverseChat.PLUGIN_MESSAGING_CHANNEL, stream.toByteArray()); - } - catch(Exception e1) { - e1.printStackTrace(); - } - return; - } - } - p.addMute(cc.getName(), 0); - if(p.isOnline()) p.getPlayer().sendMessage(ChatColor.RED + "You have just been muted in: " + ChatColor.valueOf(cc.getColor().toUpperCase()) + cc.getName()); - else p.setModified(true); - if(cc.getBungee()) { - MineverseChat.getInstance().synchronize(p, true); - } - try { - out.writeUTF("Mute"); - out.writeUTF("Valid"); - out.writeUTF(sendplayer); - out.writeUTF(mutePlayer); - out.writeUTF(cc.getName()); - out.writeUTF(cc.getColor()); - out.writeUTF(time); - player.sendPluginMessage(this, MineverseChat.PLUGIN_MESSAGING_CHANNEL, stream.toByteArray()); - } - catch(Exception e) { - e.printStackTrace(); - } - return; - } - if(subchannel.equals("Muteall")) { - String sendplayer = msgin.readUTF(); - String muteplayer = msgin.readUTF(); - String server = msgin.readUTF(); - Player mp = Bukkit.getPlayer(muteplayer); - MineverseChatPlayer p = MineverseChatAPI.getMineverseChatPlayer(mp); - if(mp == null) { - try { - out.writeUTF("Muteall"); - out.writeUTF("Player"); - out.writeUTF(sendplayer); - out.writeUTF(muteplayer); - out.writeUTF(server); - player.sendPluginMessage(this, MineverseChat.PLUGIN_MESSAGING_CHANNEL, stream.toByteArray()); - } - catch(Exception e) { - e.printStackTrace(); - } - return; - } - boolean bungee = false; - for(ChatChannel c : ChatChannel.getChannels()) { - if(c.isMutable()) { - p.addMute(c.getName(), 0); - if(c.getBungee()) { - bungee = true; - } - } - } - if(bungee) { - MineverseChat.getInstance().synchronize(p, true); - } - if(p.isOnline()) { - p.getPlayer().sendMessage(ChatColor.RED + "You have just been muted in all channels."); - } - else p.setModified(true); - try { - out.writeUTF("Muteall"); - out.writeUTF("Valid"); - out.writeUTF(sendplayer); - out.writeUTF(muteplayer); - player.sendPluginMessage(this, MineverseChat.PLUGIN_MESSAGING_CHANNEL, stream.toByteArray()); - } - catch(Exception e) { - e.printStackTrace(); - } - return; - } - if(subchannel.equals("Unmuteall")) { - String sendplayer = msgin.readUTF(); - String muteplayer = msgin.readUTF(); - String server = msgin.readUTF(); - Player mp = Bukkit.getPlayer(muteplayer); - MineverseChatPlayer p = MineverseChatAPI.getMineverseChatPlayer(mp); - if(mp == null) { - try { - out.writeUTF("Unmuteall"); - out.writeUTF("Player"); - out.writeUTF(sendplayer); - out.writeUTF(muteplayer); - out.writeUTF(server); - player.sendPluginMessage(this, MineverseChat.PLUGIN_MESSAGING_CHANNEL, stream.toByteArray()); - } - catch(Exception e) { - e.printStackTrace(); - } - return; - } - boolean bungee = false; - for(ChatChannel c : ChatChannel.getChannels()) { - p.removeMute(c.getName()); - if(c.getBungee()) { - bungee = true; - } - } - if(bungee) { - MineverseChat.getInstance().synchronize(p, true); - } - if(p.isOnline()) { - p.getPlayer().sendMessage(ChatColor.RED + "You have just been unmuted in all channels."); - } - else p.setModified(true); - try { - out.writeUTF("Unmuteall"); - out.writeUTF("Valid"); - out.writeUTF(sendplayer); - out.writeUTF(muteplayer); - player.sendPluginMessage(this, MineverseChat.PLUGIN_MESSAGING_CHANNEL, stream.toByteArray()); - } - catch(Exception e) { - e.printStackTrace(); - } - return; - } - if(subchannel.equals("Unmute")) { - String sendplayer = msgin.readUTF(); - String mutePlayer = msgin.readUTF(); - String chatchannel = msgin.readUTF(); - String server = msgin.readUTF(); - MineverseChatPlayer p = MineverseChatAPI.getMineverseChatPlayer(mutePlayer); - ChatChannel cc = ChatChannel.getChannel(chatchannel); - if(cc == null) { - try { - out.writeUTF("Unmute"); - out.writeUTF("Channel"); - out.writeUTF(sendplayer); - out.writeUTF(chatchannel); - player.sendPluginMessage(this, MineverseChat.PLUGIN_MESSAGING_CHANNEL, stream.toByteArray()); - } - catch(Exception e) { - e.printStackTrace(); - } - return; - } - if(p == null) { - try { - out.writeUTF("Unmute"); - out.writeUTF("Player"); - out.writeUTF(sendplayer); - out.writeUTF(mutePlayer); - out.writeUTF(server); - player.sendPluginMessage(this, MineverseChat.PLUGIN_MESSAGING_CHANNEL, stream.toByteArray()); - } - catch(Exception e) { - e.printStackTrace(); - } - return; - } - if(!p.isMuted(cc.getName())) { - try { - out.writeUTF("Unmute"); - out.writeUTF("Already"); - out.writeUTF(sendplayer); - out.writeUTF(mutePlayer); - out.writeUTF(cc.getName()); - out.writeUTF(cc.getColor()); - player.sendPluginMessage(this, MineverseChat.PLUGIN_MESSAGING_CHANNEL, stream.toByteArray()); - } - catch(Exception e) { - e.printStackTrace(); - } - return; - } - p.removeMute(cc.getName()); - if(p.isOnline()) p.getPlayer().sendMessage(ChatColor.RED + "You have just been unmuted in: " + ChatColor.valueOf(cc.getColor().toUpperCase()) + cc.getName()); - else p.setModified(true); - if(cc.getBungee()) { - MineverseChat.getInstance().synchronize(p, true); - } - try { - out.writeUTF("Unmute"); - out.writeUTF("Valid"); - out.writeUTF(sendplayer); - out.writeUTF(mutePlayer); - out.writeUTF(cc.getName()); - out.writeUTF(cc.getColor()); - player.sendPluginMessage(this, MineverseChat.PLUGIN_MESSAGING_CHANNEL, stream.toByteArray()); - } - catch(Exception e) { - e.printStackTrace(); - } - return; - } } catch(Exception e) { e.printStackTrace(); diff --git a/src/mineverse/Aust1n46/chat/bungee/MineverseChatBungee.java b/src/mineverse/Aust1n46/chat/bungee/MineverseChatBungee.java index f7c76d7..5d33d5f 100644 --- a/src/mineverse/Aust1n46/chat/bungee/MineverseChatBungee.java +++ b/src/mineverse/Aust1n46/chat/bungee/MineverseChatBungee.java @@ -17,9 +17,8 @@ import mineverse.Aust1n46.chat.bungee.command.GlobalMuteAll; import mineverse.Aust1n46.chat.bungee.command.GlobalUnmute; import mineverse.Aust1n46.chat.bungee.command.GlobalUnmuteAll; import mineverse.Aust1n46.chat.database.BungeePlayerData; +import mineverse.Aust1n46.chat.database.TemporaryDataInstance; import mineverse.Aust1n46.chat.utilities.UUIDFetcher; -import net.md_5.bungee.api.ChatColor; -import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.connection.Server; import net.md_5.bungee.api.event.PluginMessageEvent; @@ -309,6 +308,84 @@ public class MineverseChatBungee extends Plugin implements Listener { } } } + if(subchannel.equals("Mute")) { + String identifier = in.readUTF(); + if(identifier.equals("Send")) { + String server = ser.getInfo().getName(); + String senderIdentifier = in.readUTF(); + String playerToMute = in.readUTF(); + String channelName = in.readUTF(); + long time = in.readLong(); + UUID temporaryDataInstanceUUID = TemporaryDataInstance.createTemporaryDataInstance(); + out.writeUTF("Mute"); + out.writeUTF("Send"); + out.writeUTF(server); + out.writeUTF(senderIdentifier); + out.writeUTF(temporaryDataInstanceUUID.toString()); + out.writeUTF(playerToMute); + out.writeUTF(channelName); + out.writeLong(time); + for(String send : getProxy().getServers().keySet()) { + if(getProxy().getServers().get(send).getPlayers().size() > 0) { + getProxy().getServers().get(send).sendData(MineverseChatBungee.PLUGIN_MESSAGING_CHANNEL, outstream.toByteArray()); + } + } + } + if(identifier.equals("Valid")) { + String server = in.readUTF(); + String senderIdentifier = in.readUTF(); + String playerToMute = in.readUTF(); + String channelName = in.readUTF(); + long time = in.readLong(); + out.writeUTF("Mute"); + out.writeUTF("Valid"); + out.writeUTF(senderIdentifier); + out.writeUTF(playerToMute); + out.writeUTF(channelName); + out.writeLong(time); + if(getProxy().getServers().get(server).getPlayers().size() > 0) { + getProxy().getServers().get(server).sendData(MineverseChatBungee.PLUGIN_MESSAGING_CHANNEL, outstream.toByteArray()); + } + } + if(identifier.equals("Offline")) { + String server = in.readUTF(); + UUID temporaryDataInstanceUUID = UUID.fromString(in.readUTF()); + String senderIdentifier = in.readUTF(); + String playerToMute = in.readUTF(); + TemporaryDataInstance temporaryDataInstance = TemporaryDataInstance.getTemporaryDataInstance(temporaryDataInstanceUUID); + temporaryDataInstance.incrementMessagePackets(); + int servers = 0; + for(String send : getProxy().getServers().keySet()) { + if(getProxy().getServers().get(send).getPlayers().size() > 0) { + servers ++; + } + } + if(temporaryDataInstance.getMessagePackets() >= servers) { + temporaryDataInstance.destroyInstance(); + out.writeUTF("Mute"); + out.writeUTF("Offline"); + out.writeUTF(senderIdentifier); + out.writeUTF(playerToMute); + if(getProxy().getServers().get(server).getPlayers().size() > 0) { + getProxy().getServers().get(server).sendData(MineverseChatBungee.PLUGIN_MESSAGING_CHANNEL, outstream.toByteArray()); + } + } + } + if(identifier.equals("AlreadyMuted")) { + String server = in.readUTF(); + String senderIdentifier = in.readUTF(); + String playerToMute = in.readUTF(); + String channelName = in.readUTF(); + out.writeUTF("Mute"); + out.writeUTF("AlreadyMuted"); + out.writeUTF(senderIdentifier); + out.writeUTF(playerToMute); + out.writeUTF(channelName); + if(getProxy().getServers().get(server).getPlayers().size() > 0) { + getProxy().getServers().get(server).sendData(MineverseChatBungee.PLUGIN_MESSAGING_CHANNEL, outstream.toByteArray()); + } + } + } if(subchannel.equals("Message")) { String identifier = in.readUTF(); if(identifier.equals("Send")) { @@ -489,124 +566,6 @@ public class MineverseChatBungee extends Plugin implements Listener { smcp.setMessageToggle(in.readBoolean()); } } - if(subchannel.equals("Mute")) { - String identifier = in.readUTF(); - if(identifier.equals("Channel")) { - String player = in.readUTF(); - String channel = in.readUTF(); - ProxiedPlayer p = getProxy().getPlayer(player); - p.sendMessage(new TextComponent(ChatColor.RED + "Invalid channel: " + channel)); - } - if(identifier.equals("Player")) { - String player = in.readUTF(); - String muteplayer = in.readUTF(); - String server = in.readUTF(); - ProxiedPlayer p = getProxy().getPlayer(player); - p.sendMessage(new TextComponent(ChatColor.RED + "Player: " + ChatColor.GOLD + muteplayer + ChatColor.RED + " is not connected to server: " + server)); - } - if(identifier.equals("Mutable")) { - String player = in.readUTF(); - String channel = in.readUTF(); - String color = in.readUTF(); - ProxiedPlayer p = getProxy().getPlayer(player); - p.sendMessage(new TextComponent(ChatColor.RED + "You cannot mute players in this channel: " + ChatColor.valueOf(color.toUpperCase()) + channel)); - } - if(identifier.equals("Already")) { - String player = in.readUTF(); - String muteplayer = in.readUTF(); - String channel = in.readUTF(); - String color = in.readUTF(); - ProxiedPlayer p = getProxy().getPlayer(player); - p.sendMessage(new TextComponent(ChatColor.GOLD + muteplayer + ChatColor.RED + " is already muted in channel: " + ChatColor.valueOf(color.toUpperCase()) + channel)); - } - if(identifier.equals("Time")) { - String player = in.readUTF(); - String muteplayer = in.readUTF(); - String channel = in.readUTF(); - String color = in.readUTF(); - ProxiedPlayer p = getProxy().getPlayer(player); - p.sendMessage(new TextComponent(ChatColor.RED + "Muted player " + ChatColor.GOLD + muteplayer + ChatColor.RED + " in: " + ChatColor.valueOf(color.toUpperCase()) + channel)); - } - if(identifier.equals("Valid")) { - String player = in.readUTF(); - String muteplayer = in.readUTF(); - String channel = in.readUTF(); - String color = in.readUTF(); - String time = in.readUTF(); - ProxiedPlayer p = getProxy().getPlayer(player); - String timedmute = ""; - if(!time.equals("None\n")) { - String keyword = "minutes"; - if(time.equals("1")) keyword = "minute"; - timedmute = ChatColor.RED + " for " + time + " " + keyword; - } - p.sendMessage(new TextComponent(ChatColor.RED + "Muted player " + ChatColor.GOLD + muteplayer + ChatColor.RED + " in: " + ChatColor.valueOf(color.toUpperCase()) + channel + timedmute)); - } - } - if(subchannel.equals("Muteall")) { - String identifier = in.readUTF(); - if(identifier.equals("Player")) { - String player = in.readUTF(); - String muteplayer = in.readUTF(); - String server = in.readUTF(); - ProxiedPlayer p = getProxy().getPlayer(player); - p.sendMessage(new TextComponent(ChatColor.RED + "Player: " + ChatColor.GOLD + muteplayer + ChatColor.RED + " is not connected to server: " + server)); - } - if(identifier.equals("Valid")) { - String player = in.readUTF(); - String muteplayer = in.readUTF(); - ProxiedPlayer p = getProxy().getPlayer(player); - p.sendMessage(new TextComponent(ChatColor.RED + "Muted player " + ChatColor.GOLD + muteplayer + ChatColor.RED + " in all channels.")); - } - } - if(subchannel.equals("Unmuteall")) { - String identifier = in.readUTF(); - if(identifier.equals("Player")) { - String player = in.readUTF(); - String muteplayer = in.readUTF(); - String server = in.readUTF(); - ProxiedPlayer p = getProxy().getPlayer(player); - p.sendMessage(new TextComponent(ChatColor.RED + "Player: " + ChatColor.GOLD + muteplayer + ChatColor.RED + " is not connected to server: " + server)); - } - if(identifier.equals("Valid")) { - String player = in.readUTF(); - String muteplayer = in.readUTF(); - ProxiedPlayer p = getProxy().getPlayer(player); - p.sendMessage(new TextComponent(ChatColor.RED + "Unmuted player " + ChatColor.GOLD + muteplayer + ChatColor.RED + " in all channels.")); - } - } - if(subchannel.equals("Unmute")) { - String identifier = in.readUTF(); - if(identifier.equals("Channel")) { - String player = in.readUTF(); - String channel = in.readUTF(); - ProxiedPlayer p = getProxy().getPlayer(player); - p.sendMessage(new TextComponent(ChatColor.RED + "Invalid channel: " + channel)); - } - if(identifier.equals("Player")) { - String player = in.readUTF(); - String muteplayer = in.readUTF(); - String server = in.readUTF(); - ProxiedPlayer p = getProxy().getPlayer(player); - p.sendMessage(new TextComponent(ChatColor.RED + "Player: " + ChatColor.GOLD + muteplayer + ChatColor.RED + " is not connected to server: " + server)); - } - if(identifier.equals("Already")) { - String player = in.readUTF(); - String muteplayer = in.readUTF(); - String channel = in.readUTF(); - String color = in.readUTF(); - ProxiedPlayer p = getProxy().getPlayer(player); - p.sendMessage(new TextComponent(ChatColor.GOLD + muteplayer + ChatColor.RED + " is not muted in channel: " + ChatColor.valueOf(color.toUpperCase()) + channel)); - } - if(identifier.equals("Valid")) { - String player = in.readUTF(); - String muteplayer = in.readUTF(); - String channel = in.readUTF(); - String color = in.readUTF(); - ProxiedPlayer p = getProxy().getPlayer(player); - p.sendMessage(new TextComponent(ChatColor.RED + "Unmuted player " + ChatColor.GOLD + muteplayer + ChatColor.RED + " in: " + ChatColor.valueOf(color.toUpperCase()) + channel)); - } - } } catch(Exception e) { e.printStackTrace(); diff --git a/src/mineverse/Aust1n46/chat/command/MineverseCommand.java b/src/mineverse/Aust1n46/chat/command/MineverseCommand.java index e1a5876..818a793 100644 --- a/src/mineverse/Aust1n46/chat/command/MineverseCommand.java +++ b/src/mineverse/Aust1n46/chat/command/MineverseCommand.java @@ -1,5 +1,8 @@ package mineverse.Aust1n46.chat.command; +import java.util.List; + +import org.bukkit.command.Command; import org.bukkit.command.CommandSender; //This class is the parent class of all of the plugins commands. The execute method runs the command. @@ -13,8 +16,12 @@ public abstract class MineverseCommand { } public abstract void execute(CommandSender sender, String command, String[] args); - + + public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { + return null; + } + public String getName() { return name; } -} \ No newline at end of file +} diff --git a/src/mineverse/Aust1n46/chat/command/MineverseCommandExecutor.java b/src/mineverse/Aust1n46/chat/command/MineverseCommandExecutor.java index 1518bbf..fe442f8 100644 --- a/src/mineverse/Aust1n46/chat/command/MineverseCommandExecutor.java +++ b/src/mineverse/Aust1n46/chat/command/MineverseCommandExecutor.java @@ -1,13 +1,14 @@ package mineverse.Aust1n46.chat.command; +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; //This class is a standard command executor that is used to run the MineverseCommand's. -public class MineverseCommandExecutor implements CommandExecutor { +public class MineverseCommandExecutor implements TabExecutor { private Map commands; public MineverseCommandExecutor(Map commands) { @@ -16,12 +17,12 @@ public class MineverseCommandExecutor implements CommandExecutor { @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] parameters) { - for(String com : commands.keySet()) { - if(command.getName().equalsIgnoreCase(com)) { - commands.get(com).execute(sender, command.getName(), parameters); - return true; - } - } - return false; + commands.get(command.getName()).execute(sender, command.getName(), parameters); + return true; } -} \ No newline at end of file + + @Override + public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { + return commands.get(command.getName()).onTabComplete(sender, command, label, args); + } +} diff --git a/src/mineverse/Aust1n46/chat/command/mute/Mute.java b/src/mineverse/Aust1n46/chat/command/mute/Mute.java index 8d990ae..980a16b 100644 --- a/src/mineverse/Aust1n46/chat/command/mute/Mute.java +++ b/src/mineverse/Aust1n46/chat/command/mute/Mute.java @@ -1,6 +1,15 @@ package mineverse.Aust1n46.chat.command.mute; +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import org.bukkit.command.Command; 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; @@ -11,6 +20,7 @@ import mineverse.Aust1n46.chat.localization.LocalizedMessage; import mineverse.Aust1n46.chat.utilities.Format; public class Mute extends MineverseCommand { + private MineverseChat plugin = MineverseChat.getInstance(); public Mute(String name) { super(name); @@ -24,86 +34,81 @@ public class Mute extends MineverseCommand { .replace("{args}", "[player] [channel] {time}")); return; } - MineverseChatPlayer player = MineverseChatAPI.getMineverseChatPlayer(args[0]); - if (player == null || (!player.isOnline() && !sender.hasPermission("venturechat.mute.offline"))) { - sender.sendMessage(LocalizedMessage.PLAYER_OFFLINE.toString().replace("{args}", args[0])); - return; - } - if (args.length == 2) { - if (ChatChannel.isChannel(args[1])) { - ChatChannel channel = ChatChannel.getChannel(args[1]); - if (player.isMuted(channel.getName())) { - sender.sendMessage(LocalizedMessage.PLAYER_ALREADY_MUTED.toString() - .replace("{player}", player.getName()).replace("{channel_color}", channel.getColor()) - .replace("{channel_name}", channel.getName())); - return; - } - if (channel.isMutable()) { - player.addMute(channel.getName(), 0); - sender.sendMessage(LocalizedMessage.MUTE_PLAYER_SENDER.toString() - .replace("{player}", player.getName()).replace("{channel_color}", channel.getColor()) - .replace("{channel_name}", channel.getName())); - if (player.isOnline()) - player.getPlayer() - .sendMessage(LocalizedMessage.MUTE_PLAYER_PLAYER.toString() - .replace("{channel_color}", channel.getColor()) - .replace("{channel_name}", channel.getName())); - else - player.setModified(true); - if (channel.getBungee()) { - MineverseChat.getInstance().synchronize(player, true); - } - return; - } - sender.sendMessage(LocalizedMessage.CHANNEL_CANNOT_MUTE.toString() - .replace("{channel_color}", channel.getColor()) - .replace("{channel_name}", channel.getName())); - return; - } - sender.sendMessage(LocalizedMessage.INVALID_CHANNEL.toString().replace("{args}", args[1])); - return; - } if (ChatChannel.isChannel(args[1])) { ChatChannel channel = ChatChannel.getChannel(args[1]); - if (player.isMuted(channel.getName())) { - sender.sendMessage(LocalizedMessage.PLAYER_ALREADY_MUTED.toString() - .replace("{player}", player.getName()).replace("{channel_color}", channel.getColor()) - .replace("{channel_name}", channel.getName())); - return; - } if (channel.isMutable()) { - try { - long datetime = System.currentTimeMillis(); - long time = Format.parseTimeStringToMillis(args[2]); - if (time > 0) { - player.addMute(channel.getName(), datetime + time); - String timeString = Format.parseTimeStringFromMillis(time); - sender.sendMessage(LocalizedMessage.MUTE_PLAYER_SENDER_TIME.toString() - .replace("{player}", player.getName()) - .replace("{channel_color}", channel.getColor()) - .replace("{channel_name}", channel.getName()) - .replace("{time}", timeString)); - if (player.isOnline()) - player.getPlayer() - .sendMessage(LocalizedMessage.MUTE_PLAYER_PLAYER_TIME.toString() - .replace("{channel_color}", channel.getColor()) - .replace("{channel_name}", channel.getName()) - .replace("{time}", timeString)); - else - player.setModified(true); - if (channel.getBungee()) { - MineverseChat.getInstance().synchronize(player, true); + long datetime = System.currentTimeMillis(); + long time = 0; + if(args.length > 2) { + try { + time = Format.parseTimeStringToMillis(args[2]); + if (time <= 0) { + sender.sendMessage(LocalizedMessage.INVALID_TIME.toString().replace("{args}", args[2])); + return; } + } + catch (Exception e) { + sender.sendMessage(LocalizedMessage.INVALID_TIME.toString().replace("{args}", args[2])); return; } - sender.sendMessage(LocalizedMessage.INVALID_TIME.toString().replace("{args}", args[2])); - } catch (Exception e) { - sender.sendMessage(LocalizedMessage.INVALID_TIME.toString().replace("{args}", args[2])); + } + if(channel.getBungee()) { + if(args.length > 2) { + sendBungeeCordMute(sender, args[0], channel, datetime + time); + return; + } + sendBungeeCordMute(sender, args[0], channel, 0); + return; + } + MineverseChatPlayer playerToMute = MineverseChatAPI.getMineverseChatPlayer(args[0]); + if (playerToMute == null || (!playerToMute.isOnline() && !sender.hasPermission("venturechat.mute.offline"))) { + sender.sendMessage(LocalizedMessage.PLAYER_OFFLINE.toString().replace("{args}", args[0])); + return; + } + if (playerToMute.isMuted(channel.getName())) { + sender.sendMessage(LocalizedMessage.PLAYER_ALREADY_MUTED.toString() + .replace("{player}", playerToMute.getName()).replace("{channel_color}", channel.getColor()) + .replace("{channel_name}", channel.getName())); + return; + } + if(args.length > 2) { + playerToMute.addMute(channel.getName(), datetime + time); + String timeString = Format.parseTimeStringFromMillis(time); + sender.sendMessage(LocalizedMessage.MUTE_PLAYER_SENDER_TIME.toString() + .replace("{player}", playerToMute.getName()) + .replace("{channel_color}", channel.getColor()) + .replace("{channel_name}", channel.getName()) + .replace("{time}", timeString)); + if (playerToMute.isOnline()) { + playerToMute.getPlayer() + .sendMessage(LocalizedMessage.MUTE_PLAYER_PLAYER_TIME.toString() + .replace("{channel_color}", channel.getColor()) + .replace("{channel_name}", channel.getName()) + .replace("{time}", timeString)); + } + else { + playerToMute.setModified(true); + } + return; + } + playerToMute.addMute(channel.getName(), 0); + sender.sendMessage(LocalizedMessage.MUTE_PLAYER_SENDER.toString() + .replace("{player}", playerToMute.getName()).replace("{channel_color}", channel.getColor()) + .replace("{channel_name}", channel.getName())); + if (playerToMute.isOnline()) { + playerToMute.getPlayer() + .sendMessage(LocalizedMessage.MUTE_PLAYER_PLAYER.toString() + .replace("{channel_color}", channel.getColor()) + .replace("{channel_name}", channel.getName())); + } + else { + playerToMute.setModified(true); } return; } sender.sendMessage(LocalizedMessage.CHANNEL_CANNOT_MUTE.toString() - .replace("{channel_color}", channel.getColor()).replace("{channel_name}", channel.getName())); + .replace("{channel_color}", channel.getColor()) + .replace("{channel_name}", channel.getName())); return; } sender.sendMessage(LocalizedMessage.INVALID_CHANNEL.toString().replace("{args}", args[1])); @@ -111,4 +116,36 @@ public class Mute extends MineverseCommand { } sender.sendMessage(LocalizedMessage.COMMAND_NO_PERMISSION.toString()); } + + @Override + public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { + List completions = new ArrayList<>(); + StringUtil.copyPartialMatches(args[args.length - 1], MineverseChat.networkPlayerNames, completions); + completions.add("tester"); + Collections.sort(completions); + return completions; + } + + private void sendBungeeCordMute(CommandSender sender, String playerToMute, ChatChannel channel, long time) { + ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream(); + DataOutputStream out = new DataOutputStream(byteOutStream); + try { + out.writeUTF("Mute"); + out.writeUTF("Send"); + if(sender instanceof Player) { + out.writeUTF(((Player) sender).getUniqueId().toString()); + } + else { + out.writeUTF("VentureChat:Console"); + } + out.writeUTF(playerToMute); + out.writeUTF(channel.getName()); + out.writeLong(time); + plugin.getServer().getOnlinePlayers().iterator().next().sendPluginMessage(plugin, MineverseChat.PLUGIN_MESSAGING_CHANNEL, byteOutStream.toByteArray()); + out.close(); + } + catch(Exception e) { + e.printStackTrace(); + } + } } diff --git a/src/mineverse/Aust1n46/chat/database/TemporaryDataInstance.java b/src/mineverse/Aust1n46/chat/database/TemporaryDataInstance.java new file mode 100644 index 0000000..af7b9dc --- /dev/null +++ b/src/mineverse/Aust1n46/chat/database/TemporaryDataInstance.java @@ -0,0 +1,37 @@ +package mineverse.Aust1n46.chat.database; + +import java.util.HashMap; +import java.util.UUID; + +public class TemporaryDataInstance { + private int messagePackets; + private UUID uuid; + + private static HashMap temporaryDataInstances = new HashMap(); + + private TemporaryDataInstance(UUID uuid) { + this.uuid = uuid; + } + + public static UUID createTemporaryDataInstance() { + UUID uuid = UUID.randomUUID(); + temporaryDataInstances.put(uuid, new TemporaryDataInstance(uuid)); + return uuid; + } + + public static TemporaryDataInstance getTemporaryDataInstance(UUID uuid) { + return temporaryDataInstances.get(uuid); + } + + public int getMessagePackets() { + return this.messagePackets; + } + + public void incrementMessagePackets() { + this.messagePackets++; + } + + public void destroyInstance() { + temporaryDataInstances.remove(uuid); + } +} From 72153b57c65da6f697830876ee193e61be3fd237 Mon Sep 17 00:00:00 2001 From: Aust1n46 Date: Sun, 21 Mar 2021 00:28:59 -0500 Subject: [PATCH 03/25] Added new API method for getting list of channels. Added channel tab completion for /mute command. --- .../Aust1n46/chat/channel/ChatChannel.java | 13 +++++++++++++ .../Aust1n46/chat/command/chat/Chlist.java | 2 +- .../chat/command/chat/Setchannelall.java | 2 +- .../Aust1n46/chat/command/mute/Mute.java | 16 ++++++++++++---- .../Aust1n46/chat/command/mute/Muteall.java | 2 +- .../Aust1n46/chat/command/mute/Unmute.java | 2 +- .../Aust1n46/chat/command/mute/Unmuteall.java | 2 +- .../Aust1n46/chat/listeners/CommandListener.java | 4 ++-- 8 files changed, 32 insertions(+), 11 deletions(-) diff --git a/src/mineverse/Aust1n46/chat/channel/ChatChannel.java b/src/mineverse/Aust1n46/chat/channel/ChatChannel.java index a51c3a1..6202741 100644 --- a/src/mineverse/Aust1n46/chat/channel/ChatChannel.java +++ b/src/mineverse/Aust1n46/chat/channel/ChatChannel.java @@ -21,8 +21,10 @@ public class ChatChannel { private static MineverseChat plugin = MineverseChat.getInstance(); private static ChatChannel defaultChatChannel; + @Deprecated private static ChatChannel[] channels; private static String defaultColor; + private static List chatChannels = new ArrayList(); private String name; private String permission; @@ -65,6 +67,7 @@ public class ChatChannel { ChatChannel chatChannel = new ChatChannel(name, color, chatColor, permission, speakPermission, mutable, filter, defaultChannel, alias, distance, autojoin, bungee, cooldown, format); channels[counter++] = chatChannel; + chatChannels.add(chatChannel); if (defaultChannel) { defaultChatChannel = chatChannel; defaultColor = color; @@ -77,9 +80,19 @@ public class ChatChannel { * * @return {@link ChatChannel}[] */ + @Deprecated public static ChatChannel[] getChannels() { return channels; } + + /** + * Get list of chat channels. + * + * @return {@link List}<{@link ChatChannel}> + */ + public static List getChatChannels() { + return chatChannels; + } /** * Get a chat channel by name. diff --git a/src/mineverse/Aust1n46/chat/command/chat/Chlist.java b/src/mineverse/Aust1n46/chat/command/chat/Chlist.java index 65fe61e..f526c55 100644 --- a/src/mineverse/Aust1n46/chat/command/chat/Chlist.java +++ b/src/mineverse/Aust1n46/chat/command/chat/Chlist.java @@ -15,7 +15,7 @@ public class Chlist extends MineverseCommand { @Override public void execute(CommandSender sender, String command, String[] args) { sender.sendMessage(LocalizedMessage.CHANNEL_LIST_HEADER.toString()); - for(ChatChannel chname : ChatChannel.getChannels()) { + for(ChatChannel chname : ChatChannel.getChatChannels()) { if(chname.hasPermission()) { if(sender.hasPermission(chname.getPermission())) { sender.sendMessage(LocalizedMessage.CHANNEL_LIST_WITH_PERMISSIONS.toString() diff --git a/src/mineverse/Aust1n46/chat/command/chat/Setchannelall.java b/src/mineverse/Aust1n46/chat/command/chat/Setchannelall.java index c85eb05..a21e427 100644 --- a/src/mineverse/Aust1n46/chat/command/chat/Setchannelall.java +++ b/src/mineverse/Aust1n46/chat/command/chat/Setchannelall.java @@ -29,7 +29,7 @@ public class Setchannelall extends MineverseCommand { .replace("{args}", args[0])); return; } - for(ChatChannel channel : ChatChannel.getChannels()) { + for(ChatChannel channel : ChatChannel.getChatChannels()) { if(channel.hasPermission()) { if(!player.isOnline()) { sender.sendMessage(LocalizedMessage.PLAYER_OFFLINE_NO_PERMISSIONS_CHECK.toString()); diff --git a/src/mineverse/Aust1n46/chat/command/mute/Mute.java b/src/mineverse/Aust1n46/chat/command/mute/Mute.java index 980a16b..2b7e362 100644 --- a/src/mineverse/Aust1n46/chat/command/mute/Mute.java +++ b/src/mineverse/Aust1n46/chat/command/mute/Mute.java @@ -5,6 +5,7 @@ import java.io.DataOutputStream; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.stream.Collectors; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; @@ -120,10 +121,17 @@ public class Mute extends MineverseCommand { @Override public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { List completions = new ArrayList<>(); - StringUtil.copyPartialMatches(args[args.length - 1], MineverseChat.networkPlayerNames, completions); - completions.add("tester"); - Collections.sort(completions); - return completions; + if(args.length == 1) { + StringUtil.copyPartialMatches(args[0], MineverseChat.networkPlayerNames, completions); + Collections.sort(completions); + return completions; + } + if(args.length == 2) { + StringUtil.copyPartialMatches(args[1], ChatChannel.getChatChannels().stream().map(ChatChannel::getName).collect(Collectors.toList()), completions); + Collections.sort(completions); + return completions; + } + return Collections.emptyList(); } private void sendBungeeCordMute(CommandSender sender, String playerToMute, ChatChannel channel, long time) { diff --git a/src/mineverse/Aust1n46/chat/command/mute/Muteall.java b/src/mineverse/Aust1n46/chat/command/mute/Muteall.java index 4d8d5b3..364d61f 100644 --- a/src/mineverse/Aust1n46/chat/command/mute/Muteall.java +++ b/src/mineverse/Aust1n46/chat/command/mute/Muteall.java @@ -31,7 +31,7 @@ public class Muteall extends MineverseCommand { return; } boolean bungee = false; - for(ChatChannel channel : ChatChannel.getChannels()) { + for(ChatChannel channel : ChatChannel.getChatChannels()) { if(channel.isMutable()) { player.addMute(channel.getName(), 0); if(channel.getBungee()) { diff --git a/src/mineverse/Aust1n46/chat/command/mute/Unmute.java b/src/mineverse/Aust1n46/chat/command/mute/Unmute.java index 9d27e99..ae5d619 100644 --- a/src/mineverse/Aust1n46/chat/command/mute/Unmute.java +++ b/src/mineverse/Aust1n46/chat/command/mute/Unmute.java @@ -28,7 +28,7 @@ public class Unmute extends MineverseCommand { sender.sendMessage(LocalizedMessage.PLAYER_OFFLINE.toString().replace("{args}", args[0])); return; } - for (ChatChannel channel : ChatChannel.getChannels()) { + for (ChatChannel channel : ChatChannel.getChatChannels()) { if (channel.getName().equalsIgnoreCase(args[1]) || channel.getAlias().equalsIgnoreCase(args[1])) { if (!player.isMuted(channel.getName())) { sender.sendMessage(LocalizedMessage.PLAYER_NOT_MUTED.toString() diff --git a/src/mineverse/Aust1n46/chat/command/mute/Unmuteall.java b/src/mineverse/Aust1n46/chat/command/mute/Unmuteall.java index 841d4c6..6bc2648 100644 --- a/src/mineverse/Aust1n46/chat/command/mute/Unmuteall.java +++ b/src/mineverse/Aust1n46/chat/command/mute/Unmuteall.java @@ -31,7 +31,7 @@ public class Unmuteall extends MineverseCommand { return; } boolean bungee = false; - for(ChatChannel channel : ChatChannel.getChannels()) { + for(ChatChannel channel : ChatChannel.getChatChannels()) { player.removeMute(channel.getName()); if(channel.getBungee()) { bungee = true; diff --git a/src/mineverse/Aust1n46/chat/listeners/CommandListener.java b/src/mineverse/Aust1n46/chat/listeners/CommandListener.java index 87830cb..267f801 100644 --- a/src/mineverse/Aust1n46/chat/listeners/CommandListener.java +++ b/src/mineverse/Aust1n46/chat/listeners/CommandListener.java @@ -153,7 +153,7 @@ public class CommandListener implements CommandExecutor, Listener { } if(!plugin.quickchat) { - for(ChatChannel channel : ChatChannel.getChannels()) { + for(ChatChannel channel : ChatChannel.getChatChannels()) { if(!channel.hasPermission() || mcp.getPlayer().hasPermission(channel.getPermission())) { if(message.equals("/" + channel.getAlias())) { mcp.getPlayer().sendMessage(LocalizedMessage.SET_CHANNEL.toString() @@ -227,7 +227,7 @@ public class CommandListener implements CommandExecutor, Listener { return true; } MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer((Player) sender); - for(ChatChannel channel : ChatChannel.getChannels()) { + for(ChatChannel channel : ChatChannel.getChatChannels()) { if(command.getName().toLowerCase().equals(channel.getAlias())) { if(args.length == 0) { mcp.getPlayer().sendMessage(ChatColor.RED + "Invalid command: /" + channel.getAlias() + " message"); From a867c2d23af5a4865d3bde5a0bedf57a05d448a7 Mon Sep 17 00:00:00 2001 From: Aust1n46 Date: Sun, 21 Mar 2021 13:58:29 -0500 Subject: [PATCH 04/25] Added common mute times to tab completion. --- src/mineverse/Aust1n46/chat/command/mute/Mute.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/mineverse/Aust1n46/chat/command/mute/Mute.java b/src/mineverse/Aust1n46/chat/command/mute/Mute.java index 2b7e362..d41df9d 100644 --- a/src/mineverse/Aust1n46/chat/command/mute/Mute.java +++ b/src/mineverse/Aust1n46/chat/command/mute/Mute.java @@ -3,6 +3,7 @@ package mineverse.Aust1n46.chat.command.mute; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @@ -22,6 +23,8 @@ import mineverse.Aust1n46.chat.utilities.Format; public class Mute extends MineverseCommand { private MineverseChat plugin = MineverseChat.getInstance(); + + private static final List COMMON_MUTE_TIMES = Collections.unmodifiableList(Arrays.asList(new String[]{"12h", "15m", "1d", "1h", "1m", "30s"})); public Mute(String name) { super(name); @@ -130,6 +133,12 @@ public class Mute extends MineverseCommand { StringUtil.copyPartialMatches(args[1], ChatChannel.getChatChannels().stream().map(ChatChannel::getName).collect(Collectors.toList()), completions); Collections.sort(completions); return completions; + } + if(args.length == 3) { + StringUtil.copyPartialMatches(args[2], COMMON_MUTE_TIMES, completions); + Collections.sort(completions); + return completions; + } return Collections.emptyList(); } From b91e54bbe4c6b8211450940df3f531910cab7ba9 Mon Sep 17 00:00:00 2001 From: Aust1n46 Date: Sun, 21 Mar 2021 19:08:49 -0500 Subject: [PATCH 05/25] Added BungeeCord functionality to /unmute command. --- .../Aust1n46/chat/MineverseChat.java | 117 +++++++++++++++++- .../chat/bungee/MineverseChatBungee.java | 74 +++++++++++ .../Aust1n46/chat/command/mute/Mute.java | 4 +- .../Aust1n46/chat/command/mute/Unmute.java | 105 +++++++++++----- 4 files changed, 266 insertions(+), 34 deletions(-) diff --git a/src/mineverse/Aust1n46/chat/MineverseChat.java b/src/mineverse/Aust1n46/chat/MineverseChat.java index 13a2a61..0530256 100644 --- a/src/mineverse/Aust1n46/chat/MineverseChat.java +++ b/src/mineverse/Aust1n46/chat/MineverseChat.java @@ -596,6 +596,10 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener { } } + public static void sendPluginMessage(ByteArrayOutputStream byteOutStream) { + MineverseChatAPI.getOnlineMineverseChatPlayers().iterator().next().getPlayer().sendPluginMessage(MineverseChat.getInstance(), MineverseChat.PLUGIN_MESSAGING_CHANNEL, byteOutStream.toByteArray()); + } + public static void sendDiscordSRVPluginMessage(String chatChannel, String message) { if(MineverseChatAPI.getOnlineMineverseChatPlayers().size() == 0) { return; @@ -916,7 +920,7 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener { out.writeUTF(temporaryDataInstanceUUIDString); out.writeUTF(senderIdentifier); out.writeUTF(playerToMute); - player.sendPluginMessage(this, MineverseChat.PLUGIN_MESSAGING_CHANNEL, stream.toByteArray()); + sendPluginMessage(stream); return; } if(!ChatChannel.isChannel(channelName)) { @@ -930,7 +934,7 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener { out.writeUTF(senderIdentifier); out.writeUTF(playerToMute); out.writeUTF(channelName); - player.sendPluginMessage(this, MineverseChat.PLUGIN_MESSAGING_CHANNEL, stream.toByteArray()); + sendPluginMessage(stream); return; } if(time > 0) { @@ -957,7 +961,7 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener { out.writeUTF(playerToMute); out.writeUTF(channelName); out.writeLong(time); - player.sendPluginMessage(this, MineverseChat.PLUGIN_MESSAGING_CHANNEL, stream.toByteArray()); + sendPluginMessage(stream); return; } if(identifier.equals("Valid")) { @@ -1042,6 +1046,113 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener { 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")) { diff --git a/src/mineverse/Aust1n46/chat/bungee/MineverseChatBungee.java b/src/mineverse/Aust1n46/chat/bungee/MineverseChatBungee.java index 5d33d5f..3b27a87 100644 --- a/src/mineverse/Aust1n46/chat/bungee/MineverseChatBungee.java +++ b/src/mineverse/Aust1n46/chat/bungee/MineverseChatBungee.java @@ -386,6 +386,80 @@ public class MineverseChatBungee extends Plugin implements Listener { } } } + if(subchannel.equals("Unmute")) { + String identifier = in.readUTF(); + if(identifier.equals("Send")) { + String server = ser.getInfo().getName(); + String senderIdentifier = in.readUTF(); + String playerToUnmute = in.readUTF(); + String channelName = in.readUTF(); + UUID temporaryDataInstanceUUID = TemporaryDataInstance.createTemporaryDataInstance(); + out.writeUTF("Unmute"); + out.writeUTF("Send"); + out.writeUTF(server); + out.writeUTF(senderIdentifier); + out.writeUTF(temporaryDataInstanceUUID.toString()); + out.writeUTF(playerToUnmute); + out.writeUTF(channelName); + for(String send : getProxy().getServers().keySet()) { + if(getProxy().getServers().get(send).getPlayers().size() > 0) { + getProxy().getServers().get(send).sendData(MineverseChatBungee.PLUGIN_MESSAGING_CHANNEL, outstream.toByteArray()); + } + } + } + if(identifier.equals("Valid")) { + String server = in.readUTF(); + String senderIdentifier = in.readUTF(); + String playerToUnmute = in.readUTF(); + String channelName = in.readUTF(); + out.writeUTF("Unmute"); + out.writeUTF("Valid"); + out.writeUTF(senderIdentifier); + out.writeUTF(playerToUnmute); + out.writeUTF(channelName); + if(getProxy().getServers().get(server).getPlayers().size() > 0) { + getProxy().getServers().get(server).sendData(MineverseChatBungee.PLUGIN_MESSAGING_CHANNEL, outstream.toByteArray()); + } + } + if(identifier.equals("Offline")) { + String server = in.readUTF(); + UUID temporaryDataInstanceUUID = UUID.fromString(in.readUTF()); + String senderIdentifier = in.readUTF(); + String playerToUnmute = in.readUTF(); + TemporaryDataInstance temporaryDataInstance = TemporaryDataInstance.getTemporaryDataInstance(temporaryDataInstanceUUID); + temporaryDataInstance.incrementMessagePackets(); + int servers = 0; + for(String send : getProxy().getServers().keySet()) { + if(getProxy().getServers().get(send).getPlayers().size() > 0) { + servers ++; + } + } + if(temporaryDataInstance.getMessagePackets() >= servers) { + temporaryDataInstance.destroyInstance(); + out.writeUTF("Unmute"); + out.writeUTF("Offline"); + out.writeUTF(senderIdentifier); + out.writeUTF(playerToUnmute); + if(getProxy().getServers().get(server).getPlayers().size() > 0) { + getProxy().getServers().get(server).sendData(MineverseChatBungee.PLUGIN_MESSAGING_CHANNEL, outstream.toByteArray()); + } + } + } + if(identifier.equals("NotMuted")) { + String server = in.readUTF(); + String senderIdentifier = in.readUTF(); + String playerToUnmute = in.readUTF(); + String channelName = in.readUTF(); + out.writeUTF("Unmute"); + out.writeUTF("NotMuted"); + out.writeUTF(senderIdentifier); + out.writeUTF(playerToUnmute); + out.writeUTF(channelName); + if(getProxy().getServers().get(server).getPlayers().size() > 0) { + getProxy().getServers().get(server).sendData(MineverseChatBungee.PLUGIN_MESSAGING_CHANNEL, outstream.toByteArray()); + } + } + } if(subchannel.equals("Message")) { String identifier = in.readUTF(); if(identifier.equals("Send")) { diff --git a/src/mineverse/Aust1n46/chat/command/mute/Mute.java b/src/mineverse/Aust1n46/chat/command/mute/Mute.java index d41df9d..7f88bb5 100644 --- a/src/mineverse/Aust1n46/chat/command/mute/Mute.java +++ b/src/mineverse/Aust1n46/chat/command/mute/Mute.java @@ -22,8 +22,6 @@ import mineverse.Aust1n46.chat.localization.LocalizedMessage; import mineverse.Aust1n46.chat.utilities.Format; public class Mute extends MineverseCommand { - private MineverseChat plugin = MineverseChat.getInstance(); - private static final List COMMON_MUTE_TIMES = Collections.unmodifiableList(Arrays.asList(new String[]{"12h", "15m", "1d", "1h", "1m", "30s"})); public Mute(String name) { @@ -158,7 +156,7 @@ public class Mute extends MineverseCommand { out.writeUTF(playerToMute); out.writeUTF(channel.getName()); out.writeLong(time); - plugin.getServer().getOnlinePlayers().iterator().next().sendPluginMessage(plugin, MineverseChat.PLUGIN_MESSAGING_CHANNEL, byteOutStream.toByteArray()); + MineverseChat.sendPluginMessage(byteOutStream); out.close(); } catch(Exception e) { diff --git a/src/mineverse/Aust1n46/chat/command/mute/Unmute.java b/src/mineverse/Aust1n46/chat/command/mute/Unmute.java index ae5d619..961dd45 100644 --- a/src/mineverse/Aust1n46/chat/command/mute/Unmute.java +++ b/src/mineverse/Aust1n46/chat/command/mute/Unmute.java @@ -1,6 +1,16 @@ package mineverse.Aust1n46.chat.command.mute; +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +import org.bukkit.command.Command; 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; @@ -23,35 +33,36 @@ public class Unmute extends MineverseCommand { .replace("{args}", "[player] [channel]")); return; } - MineverseChatPlayer player = MineverseChatAPI.getMineverseChatPlayer(args[0]); - if (player == null || (!player.isOnline() && !sender.hasPermission("venturechat.mute.offline"))) { - sender.sendMessage(LocalizedMessage.PLAYER_OFFLINE.toString().replace("{args}", args[0])); - return; - } - for (ChatChannel channel : ChatChannel.getChatChannels()) { - if (channel.getName().equalsIgnoreCase(args[1]) || channel.getAlias().equalsIgnoreCase(args[1])) { - if (!player.isMuted(channel.getName())) { - sender.sendMessage(LocalizedMessage.PLAYER_NOT_MUTED.toString() - .replace("{player}", player.getName()).replace("{channel_color}", channel.getColor()) - .replace("{channel_name}", channel.getName())); - return; - } - player.removeMute(channel.getName()); - sender.sendMessage(LocalizedMessage.UNMUTE_PLAYER_SENDER.toString() - .replace("{player}", player.getName()).replace("{channel_color}", channel.getColor()) - .replace("{channel_name}", channel.getName())); - if (player.isOnline()) { - player.getPlayer().sendMessage(LocalizedMessage.UNMUTE_PLAYER_PLAYER.toString() - .replace("{player}", player.getName()).replace("{channel_color}", channel.getColor()) - .replace("{channel_name}", channel.getName())); - } else { - player.setModified(true); - } - if (channel.getBungee()) { - MineverseChat.getInstance().synchronize(player, true); - } + if (ChatChannel.isChannel(args[1])) { + ChatChannel channel = ChatChannel.getChannel(args[1]); + if(channel.getBungee()) { + sendBungeeCordUnmute(sender, args[0], channel); return; } + MineverseChatPlayer player = MineverseChatAPI.getMineverseChatPlayer(args[0]); + if (player == null || (!player.isOnline() && !sender.hasPermission("venturechat.mute.offline"))) { + sender.sendMessage(LocalizedMessage.PLAYER_OFFLINE.toString().replace("{args}", args[0])); + return; + } + if (!player.isMuted(channel.getName())) { + sender.sendMessage(LocalizedMessage.PLAYER_NOT_MUTED.toString() + .replace("{player}", player.getName()).replace("{channel_color}", channel.getColor()) + .replace("{channel_name}", channel.getName())); + return; + } + player.removeMute(channel.getName()); + sender.sendMessage(LocalizedMessage.UNMUTE_PLAYER_SENDER.toString() + .replace("{player}", player.getName()).replace("{channel_color}", channel.getColor()) + .replace("{channel_name}", channel.getName())); + if (player.isOnline()) { + player.getPlayer().sendMessage(LocalizedMessage.UNMUTE_PLAYER_PLAYER.toString() + .replace("{player}", player.getName()).replace("{channel_color}", channel.getColor()) + .replace("{channel_name}", channel.getName())); + } + else { + player.setModified(true); + } + return; } sender.sendMessage(LocalizedMessage.INVALID_CHANNEL.toString().replace("{args}", args[1])); return; @@ -60,4 +71,42 @@ public class Unmute extends MineverseCommand { return; } } -} \ No newline at end of file + + @Override + public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { + List completions = new ArrayList<>(); + if(args.length == 1) { + StringUtil.copyPartialMatches(args[0], MineverseChat.networkPlayerNames, completions); + Collections.sort(completions); + return completions; + } + if(args.length == 2) { + StringUtil.copyPartialMatches(args[1], ChatChannel.getChatChannels().stream().map(ChatChannel::getName).collect(Collectors.toList()), completions); + Collections.sort(completions); + return completions; + } + return Collections.emptyList(); + } + + private void sendBungeeCordUnmute(CommandSender sender, String playerToUnmute, ChatChannel channel) { + ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream(); + DataOutputStream out = new DataOutputStream(byteOutStream); + try { + out.writeUTF("Unmute"); + out.writeUTF("Send"); + if(sender instanceof Player) { + out.writeUTF(((Player) sender).getUniqueId().toString()); + } + else { + out.writeUTF("VentureChat:Console"); + } + out.writeUTF(playerToUnmute); + out.writeUTF(channel.getName()); + MineverseChat.sendPluginMessage(byteOutStream); + out.close(); + } + catch(Exception e) { + e.printStackTrace(); + } + } +} From 264ddf8c2e33c1cdcb1d08ea1ee50f971fd7a146 Mon Sep 17 00:00:00 2001 From: Aust1n46 Date: Sun, 21 Mar 2021 20:33:28 -0500 Subject: [PATCH 06/25] Changed parameter order for /mute and /unmute. For better tab completion control. --- .../Aust1n46/chat/MineverseChat.java | 3 ++- .../Aust1n46/chat/command/mute/Mute.java | 27 ++++++++++--------- .../Aust1n46/chat/command/mute/Unmute.java | 25 +++++++++-------- 3 files changed, 31 insertions(+), 24 deletions(-) diff --git a/src/mineverse/Aust1n46/chat/MineverseChat.java b/src/mineverse/Aust1n46/chat/MineverseChat.java index 0530256..21f7801 100644 --- a/src/mineverse/Aust1n46/chat/MineverseChat.java +++ b/src/mineverse/Aust1n46/chat/MineverseChat.java @@ -938,7 +938,8 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener { return; } if(time > 0) { - playerToMuteMCP.addMute(chatChannelObj.getName(), time); + long datetime = System.currentTimeMillis(); + playerToMuteMCP.addMute(chatChannelObj.getName(), datetime + time); String timeString = Format.parseTimeStringFromMillis(time); playerToMuteMCP.getPlayer() .sendMessage(LocalizedMessage.MUTE_PLAYER_PLAYER_TIME.toString() diff --git a/src/mineverse/Aust1n46/chat/command/mute/Mute.java b/src/mineverse/Aust1n46/chat/command/mute/Mute.java index 7f88bb5..3836da6 100644 --- a/src/mineverse/Aust1n46/chat/command/mute/Mute.java +++ b/src/mineverse/Aust1n46/chat/command/mute/Mute.java @@ -33,11 +33,11 @@ public class Mute extends MineverseCommand { if (sender.hasPermission("venturechat.mute")) { if (args.length < 2) { sender.sendMessage(LocalizedMessage.COMMAND_INVALID_ARGUMENTS.toString().replace("{command}", "/mute") - .replace("{args}", "[player] [channel] {time}")); + .replace("{args}", "[channel] [player] {time}")); return; } - if (ChatChannel.isChannel(args[1])) { - ChatChannel channel = ChatChannel.getChannel(args[1]); + if (ChatChannel.isChannel(args[0])) { + ChatChannel channel = ChatChannel.getChannel(args[0]); if (channel.isMutable()) { long datetime = System.currentTimeMillis(); long time = 0; @@ -56,15 +56,15 @@ public class Mute extends MineverseCommand { } if(channel.getBungee()) { if(args.length > 2) { - sendBungeeCordMute(sender, args[0], channel, datetime + time); + sendBungeeCordMute(sender, args[1], channel, time); return; } - sendBungeeCordMute(sender, args[0], channel, 0); + sendBungeeCordMute(sender, args[1], channel, 0); return; } - MineverseChatPlayer playerToMute = MineverseChatAPI.getMineverseChatPlayer(args[0]); + MineverseChatPlayer playerToMute = MineverseChatAPI.getMineverseChatPlayer(args[1]); if (playerToMute == null || (!playerToMute.isOnline() && !sender.hasPermission("venturechat.mute.offline"))) { - sender.sendMessage(LocalizedMessage.PLAYER_OFFLINE.toString().replace("{args}", args[0])); + sender.sendMessage(LocalizedMessage.PLAYER_OFFLINE.toString().replace("{args}", args[1])); return; } if (playerToMute.isMuted(channel.getName())) { @@ -113,7 +113,7 @@ public class Mute extends MineverseCommand { .replace("{channel_name}", channel.getName())); return; } - sender.sendMessage(LocalizedMessage.INVALID_CHANNEL.toString().replace("{args}", args[1])); + sender.sendMessage(LocalizedMessage.INVALID_CHANNEL.toString().replace("{args}", args[0])); return; } sender.sendMessage(LocalizedMessage.COMMAND_NO_PERMISSION.toString()); @@ -123,14 +123,17 @@ public class Mute extends MineverseCommand { public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { List completions = new ArrayList<>(); if(args.length == 1) { - StringUtil.copyPartialMatches(args[0], MineverseChat.networkPlayerNames, completions); + StringUtil.copyPartialMatches(args[0], ChatChannel.getChatChannels().stream().map(ChatChannel::getName).collect(Collectors.toList()), completions); Collections.sort(completions); return completions; } if(args.length == 2) { - StringUtil.copyPartialMatches(args[1], ChatChannel.getChatChannels().stream().map(ChatChannel::getName).collect(Collectors.toList()), completions); - Collections.sort(completions); - return completions; + if(ChatChannel.isChannel(args[0]) && ChatChannel.getChannel(args[0]).getBungee()) { + StringUtil.copyPartialMatches(args[1], MineverseChat.networkPlayerNames, completions); + Collections.sort(completions); + return completions; + } + return null; } if(args.length == 3) { StringUtil.copyPartialMatches(args[2], COMMON_MUTE_TIMES, completions); diff --git a/src/mineverse/Aust1n46/chat/command/mute/Unmute.java b/src/mineverse/Aust1n46/chat/command/mute/Unmute.java index 961dd45..289d326 100644 --- a/src/mineverse/Aust1n46/chat/command/mute/Unmute.java +++ b/src/mineverse/Aust1n46/chat/command/mute/Unmute.java @@ -30,18 +30,18 @@ public class Unmute extends MineverseCommand { if (sender.hasPermission("venturechat.mute")) { if (args.length < 2) { sender.sendMessage(LocalizedMessage.COMMAND_INVALID_ARGUMENTS.toString().replace("{command}", "/unmute") - .replace("{args}", "[player] [channel]")); + .replace("{args}", "[channel] [player]")); return; } - if (ChatChannel.isChannel(args[1])) { - ChatChannel channel = ChatChannel.getChannel(args[1]); + if (ChatChannel.isChannel(args[0])) { + ChatChannel channel = ChatChannel.getChannel(args[0]); if(channel.getBungee()) { - sendBungeeCordUnmute(sender, args[0], channel); + sendBungeeCordUnmute(sender, args[1], channel); return; } - MineverseChatPlayer player = MineverseChatAPI.getMineverseChatPlayer(args[0]); + MineverseChatPlayer player = MineverseChatAPI.getMineverseChatPlayer(args[1]); if (player == null || (!player.isOnline() && !sender.hasPermission("venturechat.mute.offline"))) { - sender.sendMessage(LocalizedMessage.PLAYER_OFFLINE.toString().replace("{args}", args[0])); + sender.sendMessage(LocalizedMessage.PLAYER_OFFLINE.toString().replace("{args}", args[1])); return; } if (!player.isMuted(channel.getName())) { @@ -64,7 +64,7 @@ public class Unmute extends MineverseCommand { } return; } - sender.sendMessage(LocalizedMessage.INVALID_CHANNEL.toString().replace("{args}", args[1])); + sender.sendMessage(LocalizedMessage.INVALID_CHANNEL.toString().replace("{args}", args[0])); return; } else { sender.sendMessage(LocalizedMessage.COMMAND_NO_PERMISSION.toString()); @@ -76,14 +76,17 @@ public class Unmute extends MineverseCommand { public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { List completions = new ArrayList<>(); if(args.length == 1) { - StringUtil.copyPartialMatches(args[0], MineverseChat.networkPlayerNames, completions); + StringUtil.copyPartialMatches(args[0], ChatChannel.getChatChannels().stream().map(ChatChannel::getName).collect(Collectors.toList()), completions); Collections.sort(completions); return completions; } if(args.length == 2) { - StringUtil.copyPartialMatches(args[1], ChatChannel.getChatChannels().stream().map(ChatChannel::getName).collect(Collectors.toList()), completions); - Collections.sort(completions); - return completions; + if(ChatChannel.isChannel(args[0]) && ChatChannel.getChannel(args[0]).getBungee()) { + StringUtil.copyPartialMatches(args[1], MineverseChat.networkPlayerNames, completions); + Collections.sort(completions); + return completions; + } + return null; } return Collections.emptyList(); } From c4c41336d76ee6e5afcf448595fa63ba060582b3 Mon Sep 17 00:00:00 2001 From: Aust1n46 Date: Fri, 2 Apr 2021 20:06:06 -0500 Subject: [PATCH 07/25] Hotfix to handle name change properly. --- .../Aust1n46/chat/listeners/LoginListener.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/mineverse/Aust1n46/chat/listeners/LoginListener.java b/src/mineverse/Aust1n46/chat/listeners/LoginListener.java index 8ba79e0..1d4b299 100644 --- a/src/mineverse/Aust1n46/chat/listeners/LoginListener.java +++ b/src/mineverse/Aust1n46/chat/listeners/LoginListener.java @@ -45,6 +45,18 @@ public class LoginListener implements Listener { 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()); + //reset nickname if nickname equals old username + if(mcp.getName().equals(eventPlayerInstance.getDisplayName())) { + eventPlayerInstance.setDisplayName(eventPlayerInstance.getName()); + mcp.setNickname(eventPlayerInstance.getName()); + } + mcp.setName(eventPlayerInstance.getName()); + MineverseChatAPI.addNameToMap(mcp); + } @EventHandler(priority = EventPriority.LOW) public void onPlayerJoin(PlayerJoinEvent event) throws Exception { @@ -67,10 +79,7 @@ public class LoginListener implements Listener { UUIDFetcher.checkOfflineUUIDWarning(mcp.getUUID()); //check for name change if(!mcp.getName().equals(event.getPlayer().getName())) { - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Detected Name Change. Old Name:&c " + mcp.getName() + " &eNew Name:&c " + event.getPlayer().getName())); - MineverseChatAPI.removeNameFromMap(mcp.getName()); - mcp.setName(event.getPlayer().getName()); - MineverseChatAPI.addNameToMap(mcp); + handleNameChange(mcp, event.getPlayer()); } if(!event.getPlayer().getDisplayName().equals(mcp.getName())) { mcp.setNickname(event.getPlayer().getDisplayName()); From 9d42262e0f77cc825cc8b81eafe66bc10be4f808 Mon Sep 17 00:00:00 2001 From: Aust1n46 Date: Fri, 2 Apr 2021 20:06:26 -0500 Subject: [PATCH 08/25] Add smart tab completion for non-Bungee channels. --- .../Aust1n46/chat/command/mute/Mute.java | 11 +++- .../Aust1n46/chat/command/mute/Unmute.java | 11 +++- .../chat/listeners/LoginListenerTest.java | 62 +++++++++++++++++++ 3 files changed, 78 insertions(+), 6 deletions(-) create mode 100644 test/mineverse/Aust1n46/chat/listeners/LoginListenerTest.java diff --git a/src/mineverse/Aust1n46/chat/command/mute/Mute.java b/src/mineverse/Aust1n46/chat/command/mute/Mute.java index 3836da6..7ff6313 100644 --- a/src/mineverse/Aust1n46/chat/command/mute/Mute.java +++ b/src/mineverse/Aust1n46/chat/command/mute/Mute.java @@ -128,12 +128,17 @@ public class Mute extends MineverseCommand { return completions; } if(args.length == 2) { - if(ChatChannel.isChannel(args[0]) && ChatChannel.getChannel(args[0]).getBungee()) { - StringUtil.copyPartialMatches(args[1], MineverseChat.networkPlayerNames, completions); + if(ChatChannel.isChannel(args[0])) { + ChatChannel chatChannelObj = ChatChannel.getChannel(args[0]); + if(chatChannelObj.getBungee()) { + StringUtil.copyPartialMatches(args[1], MineverseChat.networkPlayerNames, 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); Collections.sort(completions); return completions; } - return null; } if(args.length == 3) { StringUtil.copyPartialMatches(args[2], COMMON_MUTE_TIMES, completions); diff --git a/src/mineverse/Aust1n46/chat/command/mute/Unmute.java b/src/mineverse/Aust1n46/chat/command/mute/Unmute.java index 289d326..6461a8d 100644 --- a/src/mineverse/Aust1n46/chat/command/mute/Unmute.java +++ b/src/mineverse/Aust1n46/chat/command/mute/Unmute.java @@ -81,12 +81,17 @@ public class Unmute extends MineverseCommand { return completions; } if(args.length == 2) { - if(ChatChannel.isChannel(args[0]) && ChatChannel.getChannel(args[0]).getBungee()) { - StringUtil.copyPartialMatches(args[1], MineverseChat.networkPlayerNames, completions); + if(ChatChannel.isChannel(args[0])) { + ChatChannel chatChannelObj = ChatChannel.getChannel(args[0]); + if(chatChannelObj.getBungee()) { + StringUtil.copyPartialMatches(args[1], MineverseChat.networkPlayerNames, 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); Collections.sort(completions); return completions; } - return null; } return Collections.emptyList(); } diff --git a/test/mineverse/Aust1n46/chat/listeners/LoginListenerTest.java b/test/mineverse/Aust1n46/chat/listeners/LoginListenerTest.java new file mode 100644 index 0000000..08ee786 --- /dev/null +++ b/test/mineverse/Aust1n46/chat/listeners/LoginListenerTest.java @@ -0,0 +1,62 @@ +package mineverse.Aust1n46.chat.listeners; + +import org.bukkit.Bukkit; +import org.bukkit.command.ConsoleCommandSender; +import org.bukkit.entity.Player; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; + +import mineverse.Aust1n46.chat.MineverseChat; +import mineverse.Aust1n46.chat.api.MineverseChatAPI; +import mineverse.Aust1n46.chat.api.MineverseChatPlayer; +import mineverse.Aust1n46.chat.listeners.LoginListener;; + +/** + * Tests {@link LoginListener}. + */ +@RunWith(PowerMockRunner.class) +@PrepareForTest({ MineverseChat.class, MineverseChatAPI.class, Bukkit.class}) +public class LoginListenerTest { + private MineverseChat mockPlugin; + private Player mockPlayer; + private MineverseChatPlayer mockMCP; + private ConsoleCommandSender mockConsoleSender; + + @Before + public void setUp() { + mockPlugin = Mockito.mock(MineverseChat.class); + mockPlayer = Mockito.mock(Player.class); + mockMCP = Mockito.mock(MineverseChatPlayer.class); + mockConsoleSender = Mockito.mock(ConsoleCommandSender.class); + + PowerMockito.mockStatic(MineverseChat.class); + PowerMockito.when(MineverseChat.getInstance()).thenReturn(mockPlugin); + + PowerMockito.mockStatic(MineverseChatAPI.class); + PowerMockito.when(MineverseChatAPI.getMineverseChatPlayer(Mockito.any(Player.class))).thenReturn(mockMCP); + + PowerMockito.mockStatic(Bukkit.class); + PowerMockito.when(Bukkit.getConsoleSender()).thenReturn(mockConsoleSender); + } + + @After + public void tearDown() { + mockPlugin = null; + } + + @Test + public void testLoginWithNameChange() throws Exception { + Mockito.when(mockPlayer.getName()).thenReturn("NewName"); + Mockito.when(mockMCP.getName()).thenReturn("OldName"); + Mockito.when(mockPlayer.getDisplayName()).thenReturn("OldName"); + LoginListener testLoginListener = new LoginListener(); + testLoginListener.handleNameChange(mockMCP, mockPlayer); + Mockito.verify(mockMCP, Mockito.times(1)).setNickname("NewName"); + } +} From 803170f8c2af22cec9800e35d82692186cf0c3c2 Mon Sep 17 00:00:00 2001 From: Aust1n46 Date: Fri, 2 Apr 2021 21:03:22 -0500 Subject: [PATCH 09/25] Hotfix for BungeeCord sync not working if the delay isn't long enough. --- src/mineverse/Aust1n46/chat/MineverseChat.java | 12 ++++++++++++ .../Aust1n46/chat/listeners/LoginListener.java | 6 ------ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/mineverse/Aust1n46/chat/MineverseChat.java b/src/mineverse/Aust1n46/chat/MineverseChat.java index 21f7801..9fcdb78 100644 --- a/src/mineverse/Aust1n46/chat/MineverseChat.java +++ b/src/mineverse/Aust1n46/chat/MineverseChat.java @@ -536,6 +536,15 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener { // System.out.println(mcp.getPlayer().getServer().getServerName()); // out.writeUTF(mcp.getPlayer().getServer().getServerName()); out.writeUTF(mcp.getUUID().toString()); + Bukkit.getServer().getScheduler().runTaskLaterAsynchronously(this, new Runnable() { + @Override + public void run() { + if(mcp.hasPlayed()) { + return; + } + synchronize(mcp, false); + } + }, 20L); // one second delay before running again } else { out.writeUTF("Update"); @@ -787,6 +796,9 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener { } String uuid = msgin.readUTF(); MineverseChatPlayer p = MineverseChatAPI.getMineverseChatPlayer(UUID.fromString(uuid)); + if(p.hasPlayed()) { + return; + } for(Object ch : p.getListening().toArray()) { String c = ch.toString(); ChatChannel cha = ChatChannel.getChannel(c); diff --git a/src/mineverse/Aust1n46/chat/listeners/LoginListener.java b/src/mineverse/Aust1n46/chat/listeners/LoginListener.java index 1d4b299..62700af 100644 --- a/src/mineverse/Aust1n46/chat/listeners/LoginListener.java +++ b/src/mineverse/Aust1n46/chat/listeners/LoginListener.java @@ -25,7 +25,6 @@ import mineverse.Aust1n46.chat.utilities.UUIDFetcher; //and it's data. public class LoginListener implements Listener { private MineverseChat plugin = MineverseChat.getInstance(); - private boolean firstPlayerHasJoined = false; @EventHandler(priority = EventPriority.LOW) public void onPlayerQuit(PlayerQuitEvent plog) { @@ -108,11 +107,6 @@ public class LoginListener implements Listener { } long delayInTicks = 20L; - // Add extra delay to allow the sync to run properly - if(!firstPlayerHasJoined) { - delayInTicks = 100L; - firstPlayerHasJoined = true; - } final MineverseChatPlayer sync = mcp; plugin.getServer().getScheduler().runTaskLaterAsynchronously(plugin, new Runnable() { public void run() { From 113e04aa19de7ef5f5547f85fb981a77a70fe82a Mon Sep 17 00:00:00 2001 From: Aust1n46 Date: Sat, 3 Apr 2021 17:36:23 -0500 Subject: [PATCH 10/25] Remove extra tab. --- src/mineverse/Aust1n46/chat/MineverseChat.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mineverse/Aust1n46/chat/MineverseChat.java b/src/mineverse/Aust1n46/chat/MineverseChat.java index 9fcdb78..5009965 100644 --- a/src/mineverse/Aust1n46/chat/MineverseChat.java +++ b/src/mineverse/Aust1n46/chat/MineverseChat.java @@ -542,7 +542,7 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener { if(mcp.hasPlayed()) { return; } - synchronize(mcp, false); + synchronize(mcp, false); } }, 20L); // one second delay before running again } From 704905d4395f42ced5287c38b078c7219cf21a38 Mon Sep 17 00:00:00 2001 From: Aust1n46 Date: Sun, 4 Apr 2021 18:03:29 -0500 Subject: [PATCH 11/25] Add reason support for muting. --- src/Messages.yml | 6 + .../Aust1n46/chat/MineverseChat.java | 190 +++++++++++------- .../chat/api/MineverseChatPlayer.java | 63 +++++- .../api/SynchronizedMineverseChatPlayer.java | 29 ++- .../chat/bungee/MineverseChatBungee.java | 48 ++--- .../Aust1n46/chat/command/chat/Chatinfo.java | 9 +- .../Aust1n46/chat/command/mute/Mute.java | 131 ++++++++---- .../chat/command/mute/MuteContainer.java | 45 +++++ .../chat/database/BungeePlayerData.java | 40 ++-- .../Aust1n46/chat/database/PlayerData.java | 28 +-- .../Aust1n46/chat/listeners/ChatListener.java | 43 +++- .../chat/listeners/LoginListener.java | 12 +- .../chat/localization/LocalizedMessage.java | 6 + 13 files changed, 436 insertions(+), 214 deletions(-) create mode 100644 src/mineverse/Aust1n46/chat/command/mute/MuteContainer.java diff --git a/src/Messages.yml b/src/Messages.yml index 61f7f01..c1db960 100644 --- a/src/Messages.yml +++ b/src/Messages.yml @@ -17,7 +17,9 @@ ChannelNoPermissionView: '&cYou do not have permission to look at this channel.' ChannelNoSpeakPermissions: '&cYou do not have permission to speak in this channel.' ChannelPlayerListHeader: '&6Players in Channel: {channel_color}{channel_name}' ChannelMuted: '&cYou are muted in this channel: {channel_color}{channel_name}' +ChannelMutedReason: '&cYou are muted in this channel: {channel_color}{channel_name} &4Reason:&c {reason}' ChannelMutedTimed: '&cYou are muted in this channel: {channel_color}{channel_name}&c for {time}' +ChannelMutedTimedReason: '&cYou are muted in this channel: {channel_color}{channel_name}&c for {time} &4Reason:&c {reason}' CommandInvalidArguments: '&cInvalid command: {command} {args}' CommandInvalidArgumentsIgnore: '&cInvalid command: /ignore [player] or /ignore list' CommandMustBeRunByPlayer: '&cThis command must be run by a player.' @@ -54,11 +56,15 @@ MustListenOneChannel: '&cYou need to be listening on at least one channel, setti MutePlayerAllPlayer: '&cYou have just been muted in all channels.' MutePlayerAllSender: '&cMuted player &6{player} &cin all channels.' MutePlayerPlayer: '&cYou have just been muted in: {channel_color}{channel_name}' +MutePlayerPlayerReason: '&cYou have just been muted in: {channel_color}{channel_name} &4Reason:&c {reason}' MutePlayerPlayerTime: '&cYou have just been muted in: {channel_color}{channel_name} &cfor {time}' +MutePlayerPlayerTimeReason: '&cYou have just been muted in: {channel_color}{channel_name} &cfor {time} &4Reason:&c {reason}' MutePlayerSpam: '&cYou have been muted for spamming in: {channel_color}{channel_name}' MutePlayerSpamTime: '&cYou have been muted for spamming in: {channel_color}{channel_name} &cfor {time}' MutePlayerSender: '&cMuted player &6{player} &cin: {channel_color}{channel_name}' +MutePlayerSenderReason: '&cMuted player &6{player} &cin: {channel_color}{channel_name} &4Reason:&c {reason}' MutePlayerSenderTime: '&cMuted player &6{player} &cin: {channel_color}{channel_name} &cfor {time}' +MutePlayerSenderTimeReason: '&cMuted player &6{player} &cin: {channel_color}{channel_name} &cfor {time} &4Reason:&c {reason}' NoPlayerToReplyTo: '&cYou do not have anyone to reply to.' NotificationsOff: '&aYou are no longer receiving notifications.' NotificationsOn: '&aYou are now receiving notifications.' diff --git a/src/mineverse/Aust1n46/chat/MineverseChat.java b/src/mineverse/Aust1n46/chat/MineverseChat.java index 5009965..ae003f6 100644 --- a/src/mineverse/Aust1n46/chat/MineverseChat.java +++ b/src/mineverse/Aust1n46/chat/MineverseChat.java @@ -81,6 +81,7 @@ 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.MuteContainer; import mineverse.Aust1n46.chat.command.mute.Muteall; import mineverse.Aust1n46.chat.command.mute.Unmute; import mineverse.Aust1n46.chat.command.mute.Unmuteall; @@ -378,12 +379,12 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener { public void run() { for (MineverseChatPlayer p : MineverseChatAPI.getOnlineMineverseChatPlayers()) { long currentTimeMillis = System.currentTimeMillis(); - Iterator iterator = p.getMutes().keySet().iterator(); + Iterator iterator = p.getMutes().iterator(); while (iterator.hasNext()) { - String channelName = iterator.next(); - if(ChatChannel.isChannel(channelName)) { - ChatChannel channel = ChatChannel.getChannel(channelName); - long timemark = p.getMutes().get(channelName); + MuteContainer mute = iterator.next(); + if(ChatChannel.isChannel(mute.getChannel())) { + ChatChannel channel = ChatChannel.getChannel(mute.getChannel()); + long timemark = mute.getDuration(); if (timemark == 0) { continue; } @@ -394,7 +395,7 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener { iterator.remove(); p.getPlayer().sendMessage(LocalizedMessage.UNMUTE_PLAYER_PLAYER.toString() .replace("{player}", p.getName()).replace("{channel_color}", channel.getColor()) - .replace("{channel_name}", channelName)); + .replace("{channel_name}", mute.getChannel())); if(channel.getBungee()) { MineverseChat.getInstance().synchronize(p, true); } @@ -566,19 +567,20 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener { } // out.writeUTF("Mutes"); int muteCount = 0; - for(String c : mcp.getMutes().keySet()) { - ChatChannel channel = ChatChannel.getChannel(c); + for(MuteContainer mute : mcp.getMutes()) { + ChatChannel channel = ChatChannel.getChannel(mute.getChannel()); if(channel.getBungee()) { muteCount++; } } // System.out.println(muteCount + " mutes"); out.write(muteCount); - for(String c : mcp.getMutes().keySet()) { - ChatChannel channel = ChatChannel.getChannel(c); + for(MuteContainer mute : mcp.getMutes()) { + ChatChannel channel = ChatChannel.getChannel(mute.getChannel()); if(channel.getBungee()) { out.writeUTF(channel.getName()); - out.writeLong(mcp.getMutes().get(c)); + out.writeLong(mute.getDuration()); + out.writeUTF(mute.getReason()); } } int ignoreCount = 0; @@ -816,20 +818,16 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener { } } } - for(Object o : p.getMutes().keySet().toArray()) { - ChatChannel ch = ChatChannel.getChannel((String) o); - if(ch.getBungee()) { - p.removeMute(ch.getName()); - } - } + 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); + p.addMute(ch, muteTime, muteReason); } } // System.out.println(msgin.available() + " available before"); @@ -849,7 +847,7 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener { if(!p.hasPlayed()) { boolean isThereABungeeChannel = false; for(ChatChannel ch : ChatChannel.getAutojoinList()) { - if(!ch.hasPermission() || p.getPlayer().hasPermission(ch.getPermission())) { + if((!ch.hasPermission() || p.getPlayer().hasPermission(ch.getPermission())) && !p.isListening(ch.getName())) { p.addListening(ch.getName()); if(ch.getBungee()) { isThereABungeeChannel = true; @@ -924,6 +922,7 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener { 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"); @@ -951,20 +950,42 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener { } if(time > 0) { long datetime = System.currentTimeMillis(); - 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)); + 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 { - playerToMuteMCP.addMute(chatChannelObj.getName(), 0); - playerToMuteMCP.getPlayer() - .sendMessage(LocalizedMessage.MUTE_PLAYER_PLAYER.toString() - .replace("{channel_color}", chatChannelObj.getColor()) - .replace("{channel_name}", chatChannelObj.getName())); + 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"); @@ -974,6 +995,7 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener { out.writeUTF(playerToMute); out.writeUTF(channelName); out.writeLong(time); + out.writeUTF(reason); sendPluginMessage(stream); return; } @@ -982,43 +1004,86 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener { 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(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)); + 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 { - 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)); + 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(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())); + 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 { - 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())); + 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; @@ -1174,7 +1239,6 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener { MineverseChatPlayer p = MineverseChatAPI.getOnlineMineverseChatPlayer(receiver); UUID sender = UUID.fromString(msgin.readUTF()); String sName = msgin.readUTF(); - MineverseChatPlayer s = MineverseChatAPI.getMineverseChatPlayer(sender); String send = msgin.readUTF(); String echo = msgin.readUTF(); String spy = msgin.readUTF(); @@ -1206,20 +1270,6 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener { player.sendPluginMessage(this, MineverseChat.PLUGIN_MESSAGING_CHANNEL, stream.toByteArray()); return; } - else { - UUID uuid = sender; - String name = sName; - ChatChannel current = ChatChannel.getDefaultChannel(); - Set ignores = new HashSet(); - Set listening = new HashSet(); - listening.add(current.getName()); - HashMap mutes = new HashMap(); - Set blockedCommands = new HashSet(); - String jsonFormat = "Default"; - s = new MineverseChatPlayer(uuid, name, current, ignores, listening, mutes, blockedCommands, false, null, true, true, name, jsonFormat, false, false, false, true, true); - MineverseChatAPI.addMineverseChatPlayerToMap(s); - MineverseChatAPI.addNameToMap(s); - } p.getPlayer().sendMessage(Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(p.getPlayer(), send.replaceAll("receiver_", ""))) + msg); if(p.hasNotifications()) { if(VersionHandler.is1_8() || VersionHandler.is1_7_10() || VersionHandler.is1_7_2() || VersionHandler.is1_7_9()) { diff --git a/src/mineverse/Aust1n46/chat/api/MineverseChatPlayer.java b/src/mineverse/Aust1n46/chat/api/MineverseChatPlayer.java index 1851b66..6f811e8 100644 --- a/src/mineverse/Aust1n46/chat/api/MineverseChatPlayer.java +++ b/src/mineverse/Aust1n46/chat/api/MineverseChatPlayer.java @@ -1,7 +1,9 @@ package mineverse.Aust1n46.chat.api; import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.UUID; @@ -9,6 +11,7 @@ import java.util.UUID; import mineverse.Aust1n46.chat.ChatMessage; import mineverse.Aust1n46.chat.MineverseChat; import mineverse.Aust1n46.chat.channel.ChatChannel; +import mineverse.Aust1n46.chat.command.mute.MuteContainer; import mineverse.Aust1n46.chat.json.JsonFormat; import org.bukkit.Bukkit; @@ -22,7 +25,7 @@ public class MineverseChatPlayer { private ChatChannel currentChannel; private Set ignores; private Set listening; - private HashMap mutes; + private HashMap mutes; private Set blockedCommands; private boolean host; private UUID party; @@ -50,7 +53,7 @@ public class MineverseChatPlayer { private boolean messageToggle; private boolean 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 nickname, String jsonFormat, boolean spy, boolean commandSpy, boolean rangedSpy, boolean messageToggle, boolean 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 nickname, String jsonFormat, boolean spy, boolean commandSpy, boolean rangedSpy, boolean messageToggle, boolean bungeeToggle) { this.uuid = uuid; this.name = name; this.currentChannel = currentChannel; @@ -83,6 +86,40 @@ public class MineverseChatPlayer { this.bungeeToggle = bungeeToggle; } + public MineverseChatPlayer(UUID uuid, String name) { + this.uuid = uuid; + this.name = name; + this.currentChannel = ChatChannel.getDefaultChannel(); + this.ignores = new HashSet(); + this.listening = new HashSet(); + listening.add(currentChannel.getName()); + this.mutes = new HashMap(); + this.blockedCommands = new HashSet(); + this.host = false; + this.party = null; + this.filter = true; + this.notifications = true; + this.nickname = name; + this.online = false; + this.player = null; + this.hasPlayed = false; + this.conversation = null; + this.spy = false; + this.rangedSpy = false; + this.commandSpy = false; + this.quickChat = false; + this.quickChannel = null; + this.replyPlayer = null; + this.partyChat = false; + this.modified = false; + this.messages = new ArrayList(); + this.jsonFormat = "Default"; + this.cooldowns = new HashMap(); + this.spam = new HashMap>(); + this.messageToggle = true; + this.bungeeToggle = true; + } + public boolean getBungeeToggle() { return this.bungeeToggle; } @@ -207,13 +244,29 @@ public class MineverseChatPlayer { this.listening.clear(); } - public HashMap getMutes() { - return this.mutes; + public Collection getMutes() { + return this.mutes.values(); + } + + public MuteContainer getMute(String channel) { + return mutes.get(channel); } + public boolean addMute(String channel) { + return addMute(channel, 0, ""); + } + public boolean addMute(String channel, long time) { + return addMute(channel, time, ""); + } + + public boolean addMute(String channel, String reason) { + return addMute(channel, 0, reason); + } + + public boolean addMute(String channel, long time, String reason) { if(channel != null && time >= 0) { - mutes.put(channel, time); + mutes.put(channel, new MuteContainer(channel, time, reason)); return true; } return false; diff --git a/src/mineverse/Aust1n46/chat/api/SynchronizedMineverseChatPlayer.java b/src/mineverse/Aust1n46/chat/api/SynchronizedMineverseChatPlayer.java index f05b06a..a6cee45 100644 --- a/src/mineverse/Aust1n46/chat/api/SynchronizedMineverseChatPlayer.java +++ b/src/mineverse/Aust1n46/chat/api/SynchronizedMineverseChatPlayer.java @@ -1,22 +1,26 @@ package mineverse.Aust1n46.chat.api; import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.UUID; +import mineverse.Aust1n46.chat.command.mute.MuteContainer; + public class SynchronizedMineverseChatPlayer { private UUID uuid; private Set listening; - private HashMap mutes; + private HashMap mutes; private Set ignores; private int messagePackets; private List messageData = new ArrayList(); private boolean spy; private boolean messageToggle; - public SynchronizedMineverseChatPlayer(UUID uuid, Set listening, HashMap mutes, Set ignores, boolean spy, boolean messageToggle) { + public SynchronizedMineverseChatPlayer(UUID uuid, Set listening, HashMap mutes, Set ignores, boolean spy, boolean messageToggle) { this.uuid = uuid; this.listening = listening; this.mutes = mutes; @@ -25,6 +29,15 @@ public class SynchronizedMineverseChatPlayer { this.messageToggle = messageToggle; } + public SynchronizedMineverseChatPlayer(UUID uuid) { + this.uuid = uuid; + listening = new HashSet(); + mutes = new HashMap(); + ignores = new HashSet(); + spy = false; + messageToggle = true; + } + public List getMessageData() { return this.messageData; } @@ -61,16 +74,16 @@ public class SynchronizedMineverseChatPlayer { return this.ignores; } - public void addMute(String channel, long muteTime) { - this.mutes.put(channel, muteTime); + public void addMute(String channel, long time, String reason) { + mutes.put(channel, new MuteContainer(channel, time, reason)); } - public void removeMute(String channel) { - this.mutes.remove(channel); + public void clearMutes() { + this.mutes.clear(); } - public HashMap getMutes() { - return this.mutes; + public Collection getMutes() { + return this.mutes.values(); } public void addListening(String channel) { diff --git a/src/mineverse/Aust1n46/chat/bungee/MineverseChatBungee.java b/src/mineverse/Aust1n46/chat/bungee/MineverseChatBungee.java index 3b27a87..2493b1e 100644 --- a/src/mineverse/Aust1n46/chat/bungee/MineverseChatBungee.java +++ b/src/mineverse/Aust1n46/chat/bungee/MineverseChatBungee.java @@ -6,16 +6,11 @@ import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.nio.file.Files; -import java.util.HashMap; -import java.util.HashSet; import java.util.UUID; import mineverse.Aust1n46.chat.api.MineverseChatAPI; import mineverse.Aust1n46.chat.api.SynchronizedMineverseChatPlayer; -import mineverse.Aust1n46.chat.bungee.command.GlobalMute; -import mineverse.Aust1n46.chat.bungee.command.GlobalMuteAll; -import mineverse.Aust1n46.chat.bungee.command.GlobalUnmute; -import mineverse.Aust1n46.chat.bungee.command.GlobalUnmuteAll; +import mineverse.Aust1n46.chat.command.mute.MuteContainer; import mineverse.Aust1n46.chat.database.BungeePlayerData; import mineverse.Aust1n46.chat.database.TemporaryDataInstance; import mineverse.Aust1n46.chat.utilities.UUIDFetcher; @@ -61,8 +56,6 @@ public class MineverseChatBungee extends Plugin implements Listener { this.getProxy().registerChannel(MineverseChatBungee.PLUGIN_MESSAGING_CHANNEL); this.getProxy().getPluginManager().registerListener(this, this); - - registerBungeeCordMuteCommands(); } @Override @@ -70,21 +63,6 @@ public class MineverseChatBungee extends Plugin implements Listener { BungeePlayerData.saveBungeePlayerData(); } - /** - * Old BungeeCord mute commands that pretty much no one even knows about let alone uses... - * Slated for removal when the mute system is reworked. - */ - private void registerBungeeCordMuteCommands() { - getProxy().getPluginManager().registerCommand(this, new GlobalMute(this, "globalmute")); - getProxy().getPluginManager().registerCommand(this, new GlobalMute(this, "gmute")); - getProxy().getPluginManager().registerCommand(this, new GlobalMuteAll(this, "globalmuteall")); - getProxy().getPluginManager().registerCommand(this, new GlobalMuteAll(this, "gmuteall")); - getProxy().getPluginManager().registerCommand(this, new GlobalUnmute(this, "globalunmute")); - getProxy().getPluginManager().registerCommand(this, new GlobalUnmute(this, "gunmute")); - getProxy().getPluginManager().registerCommand(this, new GlobalUnmuteAll(this, "globalunmuteall")); - getProxy().getPluginManager().registerCommand(this, new GlobalUnmuteAll(this, "gunmuteall")); - } - public static MineverseChatBungee getInstance() { return instance; } @@ -316,6 +294,7 @@ public class MineverseChatBungee extends Plugin implements Listener { String playerToMute = in.readUTF(); String channelName = in.readUTF(); long time = in.readLong(); + String reason = in.readUTF(); UUID temporaryDataInstanceUUID = TemporaryDataInstance.createTemporaryDataInstance(); out.writeUTF("Mute"); out.writeUTF("Send"); @@ -325,6 +304,7 @@ public class MineverseChatBungee extends Plugin implements Listener { out.writeUTF(playerToMute); out.writeUTF(channelName); out.writeLong(time); + out.writeUTF(reason); for(String send : getProxy().getServers().keySet()) { if(getProxy().getServers().get(send).getPlayers().size() > 0) { getProxy().getServers().get(send).sendData(MineverseChatBungee.PLUGIN_MESSAGING_CHANNEL, outstream.toByteArray()); @@ -337,12 +317,14 @@ public class MineverseChatBungee extends Plugin implements Listener { String playerToMute = in.readUTF(); String channelName = in.readUTF(); long time = in.readLong(); + String reason = in.readUTF(); out.writeUTF("Mute"); out.writeUTF("Valid"); out.writeUTF(senderIdentifier); out.writeUTF(playerToMute); out.writeUTF(channelName); out.writeLong(time); + out.writeUTF(reason); if(getProxy().getServers().get(server).getPlayers().size() > 0) { getProxy().getServers().get(server).sendData(MineverseChatBungee.PLUGIN_MESSAGING_CHANNEL, outstream.toByteArray()); } @@ -574,7 +556,7 @@ public class MineverseChatBungee extends Plugin implements Listener { UUID uuid = UUID.fromString(in.readUTF()); SynchronizedMineverseChatPlayer smcp = MineverseChatAPI.getSynchronizedMineverseChatPlayer(uuid); if(smcp == null) { - smcp = new SynchronizedMineverseChatPlayer(uuid, new HashSet(), new HashMap(), new HashSet(), false, true); + smcp = new SynchronizedMineverseChatPlayer(uuid); MineverseChatAPI.addSynchronizedMineverseChatPlayerToMap(smcp); } out.writeUTF("Sync"); @@ -585,13 +567,13 @@ public class MineverseChatBungee extends Plugin implements Listener { for(String channel : smcp.getListening()) { out.writeUTF(channel); } - int muteCount = smcp.getMutes().keySet().size(); + int muteCount = smcp.getMutes().size(); //System.out.println(muteCount); out.write(muteCount); - for(String channel : smcp.getMutes().keySet()) { - //System.out.println(channel); - out.writeUTF(channel); - out.writeLong(smcp.getMutes().get(channel)); + for(MuteContainer muteContainer : smcp.getMutes()) { + out.writeUTF(muteContainer.getChannel()); + out.writeLong(muteContainer.getDuration()); + out.writeUTF(muteContainer.getReason()); } //System.out.println(smcp.isSpy() + " spy value"); //System.out.println(out.size() + " size before"); @@ -611,11 +593,11 @@ public class MineverseChatBungee extends Plugin implements Listener { UUID uuid = UUID.fromString(in.readUTF()); SynchronizedMineverseChatPlayer smcp = MineverseChatAPI.getSynchronizedMineverseChatPlayer(uuid); if(smcp == null) { - smcp = new SynchronizedMineverseChatPlayer(uuid, new HashSet(), new HashMap(), new HashSet(), false, true); + smcp = new SynchronizedMineverseChatPlayer(uuid); MineverseChatAPI.addSynchronizedMineverseChatPlayerToMap(smcp); } smcp.getListening().clear(); - smcp.getMutes().clear(); + smcp.clearMutes(); smcp.getIgnores().clear(); int sizeL = in.read(); //System.out.println(sizeL + " listening"); @@ -623,12 +605,12 @@ public class MineverseChatBungee extends Plugin implements Listener { smcp.addListening(in.readUTF()); } int sizeM = in.read(); - //System.out.println(size + " mutes"); for(int b = 0; b < sizeM; b++) { String mute = in.readUTF(); long muteTime = in.readLong(); + String muteReason = in.readUTF(); //System.out.println(mute); - smcp.addMute(mute, muteTime); + smcp.addMute(mute, muteTime, muteReason); } int sizeI = in.read(); for(int c = 0; c < sizeI; c++) { diff --git a/src/mineverse/Aust1n46/chat/command/chat/Chatinfo.java b/src/mineverse/Aust1n46/chat/command/chat/Chatinfo.java index 227929b..9cd1872 100644 --- a/src/mineverse/Aust1n46/chat/command/chat/Chatinfo.java +++ b/src/mineverse/Aust1n46/chat/command/chat/Chatinfo.java @@ -9,6 +9,7 @@ import mineverse.Aust1n46.chat.api.MineverseChatAPI; import mineverse.Aust1n46.chat.api.MineverseChatPlayer; import mineverse.Aust1n46.chat.channel.ChatChannel; import mineverse.Aust1n46.chat.command.MineverseCommand; +import mineverse.Aust1n46.chat.command.mute.MuteContainer; public class Chatinfo extends MineverseCommand { private MineverseChat plugin = MineverseChat.getInstance();; @@ -36,8 +37,8 @@ public class Chatinfo extends MineverseCommand { ChatChannel channel = ChatChannel.getChannel(c); listen += channel.getColor() + channel.getName() + " "; } - for(String c : mcp.getMutes().keySet()) { - ChatChannel channel = ChatChannel.getChannel(c); + for(MuteContainer muteContainer : mcp.getMutes()) { + ChatChannel channel = ChatChannel.getChannel(muteContainer.getChannel()); mute += channel.getColor() + channel.getName() + " "; } for(String bc : mcp.getBlockedCommands()) { @@ -97,8 +98,8 @@ public class Chatinfo extends MineverseCommand { ChatChannel channel = ChatChannel.getChannel(c); listen += channel.getColor() + channel.getName() + " "; } - for(String c : p.getMutes().keySet()) { - ChatChannel channel = ChatChannel.getChannel(c); + for(MuteContainer muteContainer : p.getMutes()) { + ChatChannel channel = ChatChannel.getChannel(muteContainer.getChannel()); mute += channel.getColor() + channel.getName() + " "; } for(String bc : p.getBlockedCommands()) { diff --git a/src/mineverse/Aust1n46/chat/command/mute/Mute.java b/src/mineverse/Aust1n46/chat/command/mute/Mute.java index 7ff6313..589d8ac 100644 --- a/src/mineverse/Aust1n46/chat/command/mute/Mute.java +++ b/src/mineverse/Aust1n46/chat/command/mute/Mute.java @@ -41,25 +41,26 @@ public class Mute extends MineverseCommand { if (channel.isMutable()) { long datetime = System.currentTimeMillis(); long time = 0; + int reasonStartPos = 2; + String reason = ""; if(args.length > 2) { - try { - time = Format.parseTimeStringToMillis(args[2]); + String timeString = args[2]; + if(Character.isDigit(timeString.charAt(0))) { + reasonStartPos = 3; + time = Format.parseTimeStringToMillis(timeString); if (time <= 0) { - sender.sendMessage(LocalizedMessage.INVALID_TIME.toString().replace("{args}", args[2])); + sender.sendMessage(LocalizedMessage.INVALID_TIME.toString().replace("{args}", timeString)); return; } - } - catch (Exception e) { - sender.sendMessage(LocalizedMessage.INVALID_TIME.toString().replace("{args}", args[2])); - return; } + StringBuilder reasonBuilder = new StringBuilder(); + for(int a = reasonStartPos; a < args.length; a ++) { + reasonBuilder.append(args[a]); + } + reason = reasonBuilder.toString(); } if(channel.getBungee()) { - if(args.length > 2) { - sendBungeeCordMute(sender, args[1], channel, time); - return; - } - sendBungeeCordMute(sender, args[1], channel, 0); + sendBungeeCordMute(sender, args[1], channel, time, reason); return; } MineverseChatPlayer playerToMute = MineverseChatAPI.getMineverseChatPlayer(args[1]); @@ -73,40 +74,87 @@ public class Mute extends MineverseCommand { .replace("{channel_name}", channel.getName())); return; } - if(args.length > 2) { - playerToMute.addMute(channel.getName(), datetime + time); - String timeString = Format.parseTimeStringFromMillis(time); - sender.sendMessage(LocalizedMessage.MUTE_PLAYER_SENDER_TIME.toString() - .replace("{player}", playerToMute.getName()) - .replace("{channel_color}", channel.getColor()) - .replace("{channel_name}", channel.getName()) - .replace("{time}", timeString)); - if (playerToMute.isOnline()) { - playerToMute.getPlayer() - .sendMessage(LocalizedMessage.MUTE_PLAYER_PLAYER_TIME.toString() - .replace("{channel_color}", channel.getColor()) - .replace("{channel_name}", channel.getName()) - .replace("{time}", timeString)); + + if(time > 0) { + if(reason.isEmpty()) { + playerToMute.addMute(channel.getName(), datetime + time); + String timeString = Format.parseTimeStringFromMillis(time); + sender.sendMessage(LocalizedMessage.MUTE_PLAYER_SENDER_TIME.toString() + .replace("{player}", playerToMute.getName()) + .replace("{channel_color}", channel.getColor()) + .replace("{channel_name}", channel.getName()) + .replace("{time}", timeString)); + if (playerToMute.isOnline()) { + playerToMute.getPlayer() + .sendMessage(LocalizedMessage.MUTE_PLAYER_PLAYER_TIME.toString() + .replace("{channel_color}", channel.getColor()) + .replace("{channel_name}", channel.getName()) + .replace("{time}", timeString)); + } + else { + playerToMute.setModified(true); + } + return; } else { - playerToMute.setModified(true); + playerToMute.addMute(channel.getName(), datetime + time, reason); + String timeString = Format.parseTimeStringFromMillis(time); + sender.sendMessage(LocalizedMessage.MUTE_PLAYER_SENDER_TIME_REASON.toString() + .replace("{player}", playerToMute.getName()) + .replace("{channel_color}", channel.getColor()) + .replace("{channel_name}", channel.getName()) + .replace("{time}", timeString) + .replace("{reason}", reason)); + if (playerToMute.isOnline()) { + playerToMute.getPlayer() + .sendMessage(LocalizedMessage.MUTE_PLAYER_PLAYER_TIME_REASON.toString() + .replace("{channel_color}", channel.getColor()) + .replace("{channel_name}", channel.getName()) + .replace("{time}", timeString) + .replace("{reason}", reason)); + } + else { + playerToMute.setModified(true); + } + return; } - return; - } - playerToMute.addMute(channel.getName(), 0); - sender.sendMessage(LocalizedMessage.MUTE_PLAYER_SENDER.toString() - .replace("{player}", playerToMute.getName()).replace("{channel_color}", channel.getColor()) - .replace("{channel_name}", channel.getName())); - if (playerToMute.isOnline()) { - playerToMute.getPlayer() - .sendMessage(LocalizedMessage.MUTE_PLAYER_PLAYER.toString() - .replace("{channel_color}", channel.getColor()) - .replace("{channel_name}", channel.getName())); } else { - playerToMute.setModified(true); + if(reason.isEmpty()) { + playerToMute.addMute(channel.getName()); + sender.sendMessage(LocalizedMessage.MUTE_PLAYER_SENDER.toString() + .replace("{player}", playerToMute.getName()).replace("{channel_color}", channel.getColor()) + .replace("{channel_name}", channel.getName())); + if (playerToMute.isOnline()) { + playerToMute.getPlayer() + .sendMessage(LocalizedMessage.MUTE_PLAYER_PLAYER.toString() + .replace("{channel_color}", channel.getColor()) + .replace("{channel_name}", channel.getName())); + } + else { + playerToMute.setModified(true); + } + return; + } + else { + playerToMute.addMute(channel.getName(), reason); + sender.sendMessage(LocalizedMessage.MUTE_PLAYER_SENDER_REASON.toString() + .replace("{player}", playerToMute.getName()).replace("{channel_color}", channel.getColor()) + .replace("{channel_name}", channel.getName()) + .replace("{reason}", reason)); + if (playerToMute.isOnline()) { + playerToMute.getPlayer() + .sendMessage(LocalizedMessage.MUTE_PLAYER_PLAYER_REASON.toString() + .replace("{channel_color}", channel.getColor()) + .replace("{channel_name}", channel.getName()) + .replace("{reason}", reason)); + } + else { + playerToMute.setModified(true); + } + return; + } } - return; } sender.sendMessage(LocalizedMessage.CHANNEL_CANNOT_MUTE.toString() .replace("{channel_color}", channel.getColor()) @@ -149,7 +197,7 @@ public class Mute extends MineverseCommand { return Collections.emptyList(); } - private void sendBungeeCordMute(CommandSender sender, String playerToMute, ChatChannel channel, long time) { + private void sendBungeeCordMute(CommandSender sender, String playerToMute, ChatChannel channel, long time, String reason) { ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream(); DataOutputStream out = new DataOutputStream(byteOutStream); try { @@ -164,6 +212,7 @@ public class Mute extends MineverseCommand { out.writeUTF(playerToMute); out.writeUTF(channel.getName()); out.writeLong(time); + out.writeUTF(reason); MineverseChat.sendPluginMessage(byteOutStream); out.close(); } diff --git a/src/mineverse/Aust1n46/chat/command/mute/MuteContainer.java b/src/mineverse/Aust1n46/chat/command/mute/MuteContainer.java new file mode 100644 index 0000000..49d37da --- /dev/null +++ b/src/mineverse/Aust1n46/chat/command/mute/MuteContainer.java @@ -0,0 +1,45 @@ +package mineverse.Aust1n46.chat.command.mute; + +public class MuteContainer { + private String channel; + private String reason; + private long duration; + + public MuteContainer(String channel) { + this(channel, 0, ""); + } + + public MuteContainer(String channel, long duration) { + this(channel, duration, ""); + } + + public MuteContainer(String channel, String reason) { + this(channel, 0, reason); + } + + public MuteContainer(String channel, long duration, String reason) { + this.channel = channel; + this.reason = reason; + this.duration = duration; + } + + public String getChannel() { + return channel; + } + + public boolean hasReason() { + return !reason.equals(""); + } + + public String getReason() { + return reason; + } + + public boolean hasDuration() { + return duration > 0; + } + + public long getDuration() { + return duration; + } +} diff --git a/src/mineverse/Aust1n46/chat/database/BungeePlayerData.java b/src/mineverse/Aust1n46/chat/database/BungeePlayerData.java index 823ae13..c454d50 100644 --- a/src/mineverse/Aust1n46/chat/database/BungeePlayerData.java +++ b/src/mineverse/Aust1n46/chat/database/BungeePlayerData.java @@ -14,6 +14,7 @@ import java.util.UUID; import mineverse.Aust1n46.chat.api.MineverseChatAPI; import mineverse.Aust1n46.chat.api.SynchronizedMineverseChatPlayer; import mineverse.Aust1n46.chat.bungee.MineverseChatBungee; +import mineverse.Aust1n46.chat.command.mute.MuteContainer; import mineverse.Aust1n46.chat.utilities.Format; import mineverse.Aust1n46.chat.utilities.UUIDFetcher; import net.md_5.bungee.api.ProxyServer; @@ -52,11 +53,12 @@ public class BungeePlayerData { String channel = l.nextToken(); listening.add(channel); } - HashMap mutes = new HashMap(); + HashMap mutes = new HashMap(); StringTokenizer m = new StringTokenizer(playerData.getString(uuidString + ".mutes"), ","); while(m.hasMoreTokens()) { String[] parts = m.nextToken().split(":"); - mutes.put(parts[0], Long.parseLong(parts[1])); + String channelName = parts[0]; + mutes.put(channelName, new MuteContainer(channelName, Long.parseLong(parts[1]))); } HashSet ignores = new HashSet(); StringTokenizer n = new StringTokenizer(playerData.getString(uuidString + ".ignores"), ","); @@ -115,11 +117,11 @@ public class BungeePlayerData { String channel = l.nextToken(); listening.add(channel); } - HashMap mutes = new HashMap(); - StringTokenizer m = new StringTokenizer(bungeePlayerDataFileConfiguration.getString("mutes"), ","); - while(m.hasMoreTokens()) { - String[] parts = m.nextToken().split(":"); - mutes.put(parts[0], Long.parseLong(parts[1])); + HashMap mutes = new HashMap(); + Configuration muteSection = bungeePlayerDataFileConfiguration.getSection("mutes"); + for(String channelName : muteSection.getKeys()) { + Configuration channelSection = muteSection.getSection(channelName); + mutes.put(channelName, new MuteContainer(channelName, channelSection.getLong("time"), channelSection.getString("reason"))); } HashSet ignores = new HashSet(); StringTokenizer n = new StringTokenizer(bungeePlayerDataFileConfiguration.getString("ignores"), ","); @@ -157,20 +159,20 @@ public class BungeePlayerData { String listen = ""; for(String s : p.getListening()) listen += s + ","; - String mute = ""; - for(String s : p.getMutes().keySet()) - mute += s + ":0,"; String ignore = ""; for(UUID s : p.getIgnores()) ignore += s.toString() + ","; if(listen.length() > 0) listen = listen.substring(0, listen.length() - 1); - if(mute.length() > 0) - mute = mute.substring(0, mute.length() - 1); if(ignore.length() > 0) ignore = ignore.substring(0, ignore.length() - 1); bungeePlayerDataFileConfiguration.set("channels", listen); - bungeePlayerDataFileConfiguration.set("mutes", mute); + Configuration muteSection = createSection(bungeePlayerDataFileConfiguration, "mutes"); + for(MuteContainer mute : p.getMutes()) { + Configuration channelSection = createSection(muteSection, mute.getChannel()); + channelSection.set("time", mute.getDuration()); + channelSection.set("reason", mute.getReason()); + } bungeePlayerDataFileConfiguration.set("ignores", ignore); bungeePlayerDataFileConfiguration.set("spy", p.isSpy()); bungeePlayerDataFileConfiguration.set("messagetoggle", p.getMessageToggle()); @@ -182,4 +184,16 @@ public class BungeePlayerData { e.printStackTrace(); } } + + /** + * Create a new {@link Configuration} section. + * + * @param configurationSection + * @param sectionKey + * @return Configuration + */ + private static Configuration createSection(Configuration configurationSection, String sectionKey) { + configurationSection.set(sectionKey, null); + return configurationSection.getSection(sectionKey); + } } diff --git a/src/mineverse/Aust1n46/chat/database/PlayerData.java b/src/mineverse/Aust1n46/chat/database/PlayerData.java index ad9fe0b..1c26466 100644 --- a/src/mineverse/Aust1n46/chat/database/PlayerData.java +++ b/src/mineverse/Aust1n46/chat/database/PlayerData.java @@ -22,6 +22,7 @@ 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; @@ -65,7 +66,7 @@ public class PlayerData { listening.add(channel); } } - HashMap mutes = new HashMap(); + HashMap mutes = new HashMap(); StringTokenizer m = new StringTokenizer(playerData.getConfigurationSection("players." + uuidString).getString("mutes"), ","); while(m.hasMoreTokens()) { String[] parts = m.nextToken().split(":"); @@ -74,7 +75,8 @@ public class PlayerData { Bukkit.getConsoleSender().sendMessage("[VentureChat] Null Mute Time: " + parts[0] + " " + name); continue; } - mutes.put(ChatChannel.getChannel(parts[0]).getName(), Long.parseLong(parts[1])); + String channelName = parts[0]; + mutes.put(channelName, new MuteContainer(channelName, Long.parseLong(parts[1]))); } } Set blockedCommands = new HashSet(); @@ -161,22 +163,11 @@ public class PlayerData { listening.add(channel); } } - HashMap mutes = new HashMap(); -// StringTokenizer m = new StringTokenizer(playerDataFileYamlConfiguration.getString("mutes"), ","); -// while(m.hasMoreTokens()) { -// String[] parts = m.nextToken().split(":"); -// if(ChatChannel.isChannel(parts[0])) { -// if(parts[1].equals("null")) { -// Bukkit.getConsoleSender().sendMessage("[VentureChat] Null Mute Time: " + parts[0] + " " + name); -// continue; -// } -// mutes.put(ChatChannel.getChannel(parts[0]).getName(), Long.parseLong(parts[1])); -// } -// } + HashMap mutes = new HashMap(); ConfigurationSection muteSection = playerDataFileYamlConfiguration.getConfigurationSection("mutes"); for(String channelName : muteSection.getKeys(false)) { ConfigurationSection channelSection = muteSection.getConfigurationSection(channelName); - mutes.put(channelName, channelSection.getLong("time")); + mutes.put(channelName, new MuteContainer(channelName, channelSection.getLong("time"), channelSection.getString("reason"))); } Set blockedCommands = new HashSet(); @@ -242,9 +233,10 @@ public class PlayerData { playerDataFileYamlConfiguration.set("listen", listening); ConfigurationSection muteSection = playerDataFileYamlConfiguration.createSection("mutes"); - for(String channelName : mcp.getMutes().keySet()) { - ConfigurationSection channelSection = muteSection.createSection(channelName); - channelSection.set("time", mcp.getMutes().get(channelName)); + for(MuteContainer mute : mcp.getMutes()) { + ConfigurationSection channelSection = muteSection.createSection(mute.getChannel()); + channelSection.set("time", mute.getDuration()); + channelSection.set("reason", mute.getReason()); } playerDataFileYamlConfiguration.set("blockedcommands", blockedCommands); diff --git a/src/mineverse/Aust1n46/chat/listeners/ChatListener.java b/src/mineverse/Aust1n46/chat/listeners/ChatListener.java index d143655..be46f38 100644 --- a/src/mineverse/Aust1n46/chat/listeners/ChatListener.java +++ b/src/mineverse/Aust1n46/chat/listeners/ChatListener.java @@ -29,6 +29,7 @@ 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.localization.LocalizedMessage; import mineverse.Aust1n46.chat.utilities.Format; import mineverse.Aust1n46.chat.versions.VersionHandler; @@ -210,25 +211,45 @@ public class ChatListener implements Listener { Boolean filterthis = true; mcp.addListening(eventChannel.getName()); if (mcp.isMuted(eventChannel.getName())) { - if (mcp.getMutes().get(eventChannel.getName()).longValue() > 0) { + MuteContainer muteContainer = mcp.getMute(eventChannel.getName()); + if (muteContainer.hasDuration()) { long dateTimeMillis = System.currentTimeMillis(); - long muteTimeMillis = mcp.getMutes().get(eventChannel.getName()).longValue(); + long muteTimeMillis = muteContainer.getDuration(); long remainingMuteTime = muteTimeMillis - dateTimeMillis; if (remainingMuteTime < 1000) { remainingMuteTime = 1000; } String timeString = Format.parseTimeStringFromMillis(remainingMuteTime); - mcp.getPlayer() - .sendMessage(LocalizedMessage.CHANNEL_MUTED_TIMED.toString() - .replace("{channel_color}", eventChannel.getColor()) - .replace("{channel_name}", eventChannel.getName()) - .replace("{time}", timeString)); + 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 { - mcp.getPlayer() - .sendMessage(LocalizedMessage.CHANNEL_MUTED.toString() - .replace("{channel_color}", eventChannel.getColor()) - .replace("{channel_name}", eventChannel.getName())); + 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; diff --git a/src/mineverse/Aust1n46/chat/listeners/LoginListener.java b/src/mineverse/Aust1n46/chat/listeners/LoginListener.java index 62700af..8071a4d 100644 --- a/src/mineverse/Aust1n46/chat/listeners/LoginListener.java +++ b/src/mineverse/Aust1n46/chat/listeners/LoginListener.java @@ -1,8 +1,5 @@ package mineverse.Aust1n46.chat.listeners; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Set; import java.util.UUID; import org.bukkit.Bukkit; @@ -64,14 +61,7 @@ public class LoginListener implements Listener { Player player = event.getPlayer(); String name = player.getName(); UUID uuid = player.getUniqueId(); - ChatChannel current = ChatChannel.getDefaultChannel(); - Set ignores = new HashSet(); - Set listening = new HashSet(); - listening.add(current.getName()); - HashMap mutes = new HashMap(); - Set blockedCommands = new HashSet(); - String jsonFormat = "Default"; - mcp = new MineverseChatPlayer(uuid, name, current, ignores, listening, mutes, blockedCommands, false, null, true, true, name, jsonFormat, false, false, false, true, true); + mcp = new MineverseChatPlayer(uuid, name); MineverseChatAPI.addMineverseChatPlayerToMap(mcp); MineverseChatAPI.addNameToMap(mcp); } diff --git a/src/mineverse/Aust1n46/chat/localization/LocalizedMessage.java b/src/mineverse/Aust1n46/chat/localization/LocalizedMessage.java index aceffe4..de40a2e 100644 --- a/src/mineverse/Aust1n46/chat/localization/LocalizedMessage.java +++ b/src/mineverse/Aust1n46/chat/localization/LocalizedMessage.java @@ -24,7 +24,9 @@ public enum LocalizedMessage { CHANNEL_NO_SPEAK_PERMISSIONS("ChannelNoSpeakPermissions"), CHANNEL_PLAYER_LIST_HEADER("ChannelPlayerListHeader"), CHANNEL_MUTED("ChannelMuted"), + CHANNEL_MUTED_REASON("ChannelMutedReason"), CHANNEL_MUTED_TIMED("ChannelMutedTimed"), + CHANNEL_MUTED_TIMED_REASON("ChannelMutedTimedReason"), COMMAND_INVALID_ARGUMENTS("CommandInvalidArguments"), COMMAND_INVALID_ARGUMENTS_IGNORE("CommandInvalidArgumentsIgnore"), COMMAND_MUST_BE_RUN_BY_PLAYER("CommandMustBeRunByPlayer"), @@ -62,10 +64,14 @@ public enum LocalizedMessage { MUTE_PLAYER_ALL_SENDER("MutePlayerAllSender"), MUTE_PLAYER_PLAYER("MutePlayerPlayer"), MUTE_PLAYER_PLAYER_TIME("MutePlayerPlayerTime"), + MUTE_PLAYER_PLAYER_TIME_REASON("MutePlayerPlayerTimeReason"), + MUTE_PLAYER_PLAYER_REASON("MutePlayerPlayerReason"), MUTE_PLAYER_SPAM("MutePlayerSpam"), MUTE_PLAYER_SPAM_TIME("MutePlayerSpamTime"), MUTE_PLAYER_SENDER("MutePlayerSender"), + MUTE_PLAYER_SENDER_REASON("MutePlayerSenderReason"), MUTE_PLAYER_SENDER_TIME("MutePlayerSenderTime"), + MUTE_PLAYER_SENDER_TIME_REASON("MutePlayerSenderTimeReason"), NO_PLAYER_TO_REPLY_TO("NoPlayerToReplyTo"), NOTIFICATIONS_OFF("NotificationsOff"), NOTIFICATIONS_ON("NotificationsOn"), From 4f1cd8b49437865c42b5874fde206034b900d234 Mon Sep 17 00:00:00 2001 From: Aust1n46 Date: Sun, 4 Apr 2021 18:04:53 -0500 Subject: [PATCH 12/25] Delete outdated BungeeCord muting commands. --- .../Aust1n46/chat/bungee/command/.gitignore | 4 -- .../chat/bungee/command/GlobalMute.java | 70 ------------------- .../chat/bungee/command/GlobalMuteAll.java | 62 ---------------- .../chat/bungee/command/GlobalUnmute.java | 64 ----------------- .../chat/bungee/command/GlobalUnmuteAll.java | 62 ---------------- 5 files changed, 262 deletions(-) delete mode 100644 src/mineverse/Aust1n46/chat/bungee/command/.gitignore delete mode 100644 src/mineverse/Aust1n46/chat/bungee/command/GlobalMute.java delete mode 100644 src/mineverse/Aust1n46/chat/bungee/command/GlobalMuteAll.java delete mode 100644 src/mineverse/Aust1n46/chat/bungee/command/GlobalUnmute.java delete mode 100644 src/mineverse/Aust1n46/chat/bungee/command/GlobalUnmuteAll.java diff --git a/src/mineverse/Aust1n46/chat/bungee/command/.gitignore b/src/mineverse/Aust1n46/chat/bungee/command/.gitignore deleted file mode 100644 index aca4cb5..0000000 --- a/src/mineverse/Aust1n46/chat/bungee/command/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -/GlobalMute.class -/GlobalMuteAll.class -/GlobalUnmute.class -/GlobalUnmuteAll.class diff --git a/src/mineverse/Aust1n46/chat/bungee/command/GlobalMute.java b/src/mineverse/Aust1n46/chat/bungee/command/GlobalMute.java deleted file mode 100644 index f22ca30..0000000 --- a/src/mineverse/Aust1n46/chat/bungee/command/GlobalMute.java +++ /dev/null @@ -1,70 +0,0 @@ -package mineverse.Aust1n46.chat.bungee.command; - -import java.io.ByteArrayOutputStream; -import java.io.DataOutputStream; - -import mineverse.Aust1n46.chat.bungee.MineverseChatBungee; - -import net.md_5.bungee.api.ChatColor; -import net.md_5.bungee.api.CommandSender; -import net.md_5.bungee.api.chat.TextComponent; -import net.md_5.bungee.api.connection.ProxiedPlayer; -import net.md_5.bungee.api.plugin.Command; - -public class GlobalMute extends Command { - private MineverseChatBungee plugin; - private String alias; - - public GlobalMute(MineverseChatBungee plugin, String alias) { - super(alias); - this.plugin = plugin; - this.alias = alias; - } - - @Override - public void execute(CommandSender commandSender, String[] args) { - if(!(commandSender instanceof ProxiedPlayer)) { - return; - } - if(commandSender.hasPermission("venturechat.mute")) { - if(args.length < 3) { - commandSender.sendMessage(new TextComponent(ChatColor.RED + "Invalid command: /" + alias + " [server] [player] [channel] {time}")); - return; - } - ProxiedPlayer player = plugin.getProxy().getPlayer(args[1]); - if(player != null) { - if(plugin.getProxy().getServers().containsKey(args[0])) { - ByteArrayOutputStream stream = new ByteArrayOutputStream(); - DataOutputStream out = new DataOutputStream(stream); - try { - out.writeUTF("Mute"); - out.writeUTF(commandSender.getName()); - out.writeUTF(args[1]); - out.writeUTF(args[2]); - out.writeUTF(args[0]); - String time = "None\n"; - if(args.length > 3) { - time = args[3]; - } - out.writeUTF(time); - if(plugin.getProxy().getServers().get(args[0]).getPlayers().size() > 0) { - plugin.getProxy().getServers().get(args[0]).sendData(MineverseChatBungee.PLUGIN_MESSAGING_CHANNEL, stream.toByteArray()); - return; - } - commandSender.sendMessage(new TextComponent(ChatColor.RED + "Player: " + ChatColor.GOLD + args[1] + ChatColor.RED + " is not connected to server: " + args[0])); - } - catch(Exception e) { - e.printStackTrace(); - } - return; - } - commandSender.sendMessage(new TextComponent(ChatColor.RED + "Invalid server: " + args[0])); - return; - } - commandSender.sendMessage(new TextComponent(ChatColor.RED + "Player: " + ChatColor.GOLD + args[1] + ChatColor.RED + " is not online.")); - return; - } - commandSender.sendMessage(new TextComponent(ChatColor.RED + "You do not have permission for this command.")); - return; - } -} \ No newline at end of file diff --git a/src/mineverse/Aust1n46/chat/bungee/command/GlobalMuteAll.java b/src/mineverse/Aust1n46/chat/bungee/command/GlobalMuteAll.java deleted file mode 100644 index 3a5578d..0000000 --- a/src/mineverse/Aust1n46/chat/bungee/command/GlobalMuteAll.java +++ /dev/null @@ -1,62 +0,0 @@ -package mineverse.Aust1n46.chat.bungee.command; - -import java.io.ByteArrayOutputStream; -import java.io.DataOutputStream; -import mineverse.Aust1n46.chat.bungee.MineverseChatBungee; -import net.md_5.bungee.api.ChatColor; -import net.md_5.bungee.api.CommandSender; -import net.md_5.bungee.api.chat.TextComponent; -import net.md_5.bungee.api.connection.ProxiedPlayer; -import net.md_5.bungee.api.plugin.Command; - -public class GlobalMuteAll extends Command { - private MineverseChatBungee plugin; - private String alias; - - public GlobalMuteAll(MineverseChatBungee plugin, String alias) { - super(alias); - this.plugin = plugin; - this.alias = alias; - } - - @Override - public void execute(CommandSender commandSender, String[] args) { - if(!(commandSender instanceof ProxiedPlayer)) { - return; - } - if(commandSender.hasPermission("venturechat.mute")) { - if(args.length < 2) { - commandSender.sendMessage(new TextComponent(ChatColor.RED + "Invalid command: /" + alias + " [server] [player]")); - return; - } - ProxiedPlayer player = plugin.getProxy().getPlayer(args[1]); - if(player != null) { - if(plugin.getProxy().getServers().containsKey(args[0])) { - ByteArrayOutputStream stream = new ByteArrayOutputStream(); - DataOutputStream out = new DataOutputStream(stream); - try { - out.writeUTF("Muteall"); - out.writeUTF(commandSender.getName()); - out.writeUTF(args[1]); - out.writeUTF(args[0]); - if(plugin.getProxy().getServers().get(args[0]).getPlayers().size() > 0) { - plugin.getProxy().getServers().get(args[0]).sendData(MineverseChatBungee.PLUGIN_MESSAGING_CHANNEL, stream.toByteArray()); - return; - } - commandSender.sendMessage(new TextComponent(ChatColor.RED + "Player: " + ChatColor.GOLD + args[1] + ChatColor.RED + " is not connected to server: " + args[0])); - } - catch(Exception e) { - e.printStackTrace(); - } - return; - } - commandSender.sendMessage(new TextComponent(ChatColor.RED + "Invalid server: " + args[0])); - return; - } - commandSender.sendMessage(new TextComponent(ChatColor.RED + "Player: " + ChatColor.GOLD + args[1] + ChatColor.RED + " is not online.")); - return; - } - commandSender.sendMessage(new TextComponent(ChatColor.RED + "You do not have permission for this command.")); - return; - } -} \ No newline at end of file diff --git a/src/mineverse/Aust1n46/chat/bungee/command/GlobalUnmute.java b/src/mineverse/Aust1n46/chat/bungee/command/GlobalUnmute.java deleted file mode 100644 index b7d1234..0000000 --- a/src/mineverse/Aust1n46/chat/bungee/command/GlobalUnmute.java +++ /dev/null @@ -1,64 +0,0 @@ -package mineverse.Aust1n46.chat.bungee.command; - -import java.io.ByteArrayOutputStream; -import java.io.DataOutputStream; - -import mineverse.Aust1n46.chat.bungee.MineverseChatBungee; -import net.md_5.bungee.api.ChatColor; -import net.md_5.bungee.api.CommandSender; -import net.md_5.bungee.api.chat.TextComponent; -import net.md_5.bungee.api.connection.ProxiedPlayer; -import net.md_5.bungee.api.plugin.Command; - -public class GlobalUnmute extends Command { - private MineverseChatBungee plugin; - private String alias; - - public GlobalUnmute(MineverseChatBungee plugin, String alias) { - super(alias); - this.plugin = plugin; - this.alias = alias; - } - - @Override - public void execute(CommandSender commandSender, String[] args) { - if(!(commandSender instanceof ProxiedPlayer)) { - return; - } - if(commandSender.hasPermission("venturechat.mute")) { - if(args.length < 3) { - commandSender.sendMessage(new TextComponent(ChatColor.RED + "Invalid command: /" + alias + " [server] [player] [channel]")); - return; - } - ProxiedPlayer player = plugin.getProxy().getPlayer(args[1]); - if(player != null) { - if(plugin.getProxy().getServers().containsKey(args[0])) { - ByteArrayOutputStream stream = new ByteArrayOutputStream(); - DataOutputStream out = new DataOutputStream(stream); - try { - out.writeUTF("Unmute"); - out.writeUTF(commandSender.getName()); - out.writeUTF(args[1]); - out.writeUTF(args[2]); - out.writeUTF(args[0]); - if(plugin.getProxy().getServers().get(args[0]).getPlayers().size() > 0) { - plugin.getProxy().getServers().get(args[0]).sendData(MineverseChatBungee.PLUGIN_MESSAGING_CHANNEL, stream.toByteArray()); - return; - } - commandSender.sendMessage(new TextComponent(ChatColor.RED + "Player: " + ChatColor.GOLD + args[1] + ChatColor.RED + " is not connected to server: " + args[0])); - } - catch(Exception e) { - e.printStackTrace(); - } - return; - } - commandSender.sendMessage(new TextComponent(ChatColor.RED + "Invalid server: " + args[0])); - return; - } - commandSender.sendMessage(new TextComponent(ChatColor.RED + "Player: " + ChatColor.GOLD + args[1] + ChatColor.RED + " is not online.")); - return; - } - commandSender.sendMessage(new TextComponent(ChatColor.RED + "You do not have permission for this command.")); - return; - } -} \ No newline at end of file diff --git a/src/mineverse/Aust1n46/chat/bungee/command/GlobalUnmuteAll.java b/src/mineverse/Aust1n46/chat/bungee/command/GlobalUnmuteAll.java deleted file mode 100644 index 15538d1..0000000 --- a/src/mineverse/Aust1n46/chat/bungee/command/GlobalUnmuteAll.java +++ /dev/null @@ -1,62 +0,0 @@ -package mineverse.Aust1n46.chat.bungee.command; - -import java.io.ByteArrayOutputStream; -import java.io.DataOutputStream; -import mineverse.Aust1n46.chat.bungee.MineverseChatBungee; -import net.md_5.bungee.api.ChatColor; -import net.md_5.bungee.api.CommandSender; -import net.md_5.bungee.api.chat.TextComponent; -import net.md_5.bungee.api.connection.ProxiedPlayer; -import net.md_5.bungee.api.plugin.Command; - -public class GlobalUnmuteAll extends Command { - private MineverseChatBungee plugin; - private String alias; - - public GlobalUnmuteAll(MineverseChatBungee plugin, String alias) { - super(alias); - this.plugin = plugin; - this.alias = alias; - } - - @Override - public void execute(CommandSender commandSender, String[] args) { - if(!(commandSender instanceof ProxiedPlayer)) { - return; - } - if(commandSender.hasPermission("venturechat.mute")) { - if(args.length < 2) { - commandSender.sendMessage(new TextComponent(ChatColor.RED + "Invalid command: /" + alias + " [server] [player]")); - return; - } - ProxiedPlayer player = plugin.getProxy().getPlayer(args[1]); - if(player != null) { - if(plugin.getProxy().getServers().containsKey(args[0])) { - ByteArrayOutputStream stream = new ByteArrayOutputStream(); - DataOutputStream out = new DataOutputStream(stream); - try { - out.writeUTF("Unmuteall"); - out.writeUTF(commandSender.getName()); - out.writeUTF(args[1]); - out.writeUTF(args[0]); - if(plugin.getProxy().getServers().get(args[0]).getPlayers().size() > 0) { - plugin.getProxy().getServers().get(args[0]).sendData(MineverseChatBungee.PLUGIN_MESSAGING_CHANNEL, stream.toByteArray()); - return; - } - commandSender.sendMessage(new TextComponent(ChatColor.RED + "Player: " + ChatColor.GOLD + args[1] + ChatColor.RED + " is not connected to server: " + args[0])); - } - catch(Exception e) { - e.printStackTrace(); - } - return; - } - commandSender.sendMessage(new TextComponent(ChatColor.RED + "Invalid server: " + args[0])); - return; - } - commandSender.sendMessage(new TextComponent(ChatColor.RED + "Player: " + ChatColor.GOLD + args[1] + ChatColor.RED + " is not online.")); - return; - } - commandSender.sendMessage(new TextComponent(ChatColor.RED + "You do not have permission for this command.")); - return; - } -} \ No newline at end of file From 54fd1d53848d3b0665def5e8edfc65eaaed1aa5a Mon Sep 17 00:00:00 2001 From: Aust1n46 Date: Sun, 4 Apr 2021 18:12:18 -0500 Subject: [PATCH 13/25] Update version. --- src/bungee.yml | 2 +- src/plugin.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bungee.yml b/src/bungee.yml index 975ba27..cfb2fd6 100644 --- a/src/bungee.yml +++ b/src/bungee.yml @@ -1,4 +1,4 @@ name: VentureChat main: mineverse.Aust1n46.chat.bungee.MineverseChatBungee -version: 2.22.2 +version: 2.22.4 author: Aust1n46 \ No newline at end of file diff --git a/src/plugin.yml b/src/plugin.yml index 3e4c557..4a005fb 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,5 +1,5 @@ name: VentureChat -version: 2.22.2 +version: 2.22.4 api-version: 1.13 main: mineverse.Aust1n46.chat.MineverseChat depend: [Vault, ProtocolLib, PlaceholderAPI] From c12c00b784c5626372b8593d31756b2962e342fa Mon Sep 17 00:00:00 2001 From: Aust1n46 Date: Sun, 4 Apr 2021 22:06:15 -0500 Subject: [PATCH 14/25] Update config for new timed mute. Update spam mute message. --- src/Messages.yml | 3 +-- src/config.yml | 17 ++++++++++------- .../Aust1n46/chat/command/mute/Mute.java | 2 +- .../Aust1n46/chat/command/mute/Muteall.java | 2 +- .../Aust1n46/chat/listeners/ChatListener.java | 17 +++++++++++------ .../chat/localization/LocalizedMessage.java | 1 + 6 files changed, 25 insertions(+), 17 deletions(-) diff --git a/src/Messages.yml b/src/Messages.yml index c1db960..599d2fd 100644 --- a/src/Messages.yml +++ b/src/Messages.yml @@ -59,8 +59,6 @@ MutePlayerPlayer: '&cYou have just been muted in: {channel_color}{channel_name}' MutePlayerPlayerReason: '&cYou have just been muted in: {channel_color}{channel_name} &4Reason:&c {reason}' MutePlayerPlayerTime: '&cYou have just been muted in: {channel_color}{channel_name} &cfor {time}' MutePlayerPlayerTimeReason: '&cYou have just been muted in: {channel_color}{channel_name} &cfor {time} &4Reason:&c {reason}' -MutePlayerSpam: '&cYou have been muted for spamming in: {channel_color}{channel_name}' -MutePlayerSpamTime: '&cYou have been muted for spamming in: {channel_color}{channel_name} &cfor {time}' MutePlayerSender: '&cMuted player &6{player} &cin: {channel_color}{channel_name}' MutePlayerSenderReason: '&cMuted player &6{player} &cin: {channel_color}{channel_name} &4Reason:&c {reason}' MutePlayerSenderTime: '&cMuted player &6{player} &cin: {channel_color}{channel_name} &cfor {time}' @@ -79,6 +77,7 @@ SetChannelAllPlayer: '&cYou have been set into all channels.' SetChannelAllSender: '&6Set player &c{player} &6into all channels.' SetChannelPlayerChannelNoPermission: '&cThis player does not have permission for channel: {channel_color}{channel_name}' SetChannelSender: '&6Set player &c{player} &6into channel: {channel_color}{channel_name}' +SpamMuteReasonText: 'Spamming' SpamWarning: '&cSlow down your chat! You''re halfway to being muted for spam!' SpyOff: '&6You are no longer spying.' SpyOn: '&6You are now spying.' diff --git a/src/config.yml b/src/config.yml index 270e63d..c15f824 100644 --- a/src/config.yml +++ b/src/config.yml @@ -55,14 +55,17 @@ commandspy: antispam: enabled: true - # number of messages to be spam + # Number of messages to be spam spamnumber: 5 - # amount of time in seconds for it to be spam + # Amount of time in seconds for it to be spam spamtime: 10 - # amount of time in minutes for the mute to last, use 0 for untimed mute - mutetime: 10 + # Amount of time for the mute to last + # Acceptable units are: d,h,m,s + # Units can be combined, for example: 1d8h30m15s + # Use 0 for untimed mute + mutetime: 10m # Logging chat and commands to a mysql database mysql: @@ -179,16 +182,16 @@ venturegui: mute: icon: 'REDSTONE_BLOCK' durability: 0 - text: '&cMute {player_name}' + text: '&cMute {player_name} &410m' permission: 'mute' - command: '/mute {player_name} {channel} 10' + command: '/mute {channel} {player_name} 10m' slot: 1 unmute: icon: 'DIAMOND_BLOCK' durability: 0 text: '&bUnmute {player_name}' permission: 'mute' - command: '/unmute {player_name} {channel}' + command: '/unmute {channel} {player_name} ' slot: 2 removemessage: icon: 'DIAMOND_AXE' diff --git a/src/mineverse/Aust1n46/chat/command/mute/Mute.java b/src/mineverse/Aust1n46/chat/command/mute/Mute.java index 589d8ac..570b7ef 100644 --- a/src/mineverse/Aust1n46/chat/command/mute/Mute.java +++ b/src/mineverse/Aust1n46/chat/command/mute/Mute.java @@ -33,7 +33,7 @@ public class Mute extends MineverseCommand { if (sender.hasPermission("venturechat.mute")) { if (args.length < 2) { sender.sendMessage(LocalizedMessage.COMMAND_INVALID_ARGUMENTS.toString().replace("{command}", "/mute") - .replace("{args}", "[channel] [player] {time}")); + .replace("{args}", "[channel] [player] {time} {reason}")); return; } if (ChatChannel.isChannel(args[0])) { diff --git a/src/mineverse/Aust1n46/chat/command/mute/Muteall.java b/src/mineverse/Aust1n46/chat/command/mute/Muteall.java index 364d61f..b759709 100644 --- a/src/mineverse/Aust1n46/chat/command/mute/Muteall.java +++ b/src/mineverse/Aust1n46/chat/command/mute/Muteall.java @@ -33,7 +33,7 @@ public class Muteall extends MineverseCommand { boolean bungee = false; for(ChatChannel channel : ChatChannel.getChatChannels()) { if(channel.isMutable()) { - player.addMute(channel.getName(), 0); + player.addMute(channel.getName()); if(channel.getBungee()) { bungee = true; } diff --git a/src/mineverse/Aust1n46/chat/listeners/ChatListener.java b/src/mineverse/Aust1n46/chat/listeners/ChatListener.java index be46f38..ed185ed 100644 --- a/src/mineverse/Aust1n46/chat/listeners/ChatListener.java +++ b/src/mineverse/Aust1n46/chat/listeners/ChatListener.java @@ -311,20 +311,25 @@ public class ChatListener implements Listener { if (spamcount + 1 >= spamtimeconfig) { long time = Format.parseTimeStringToMillis(mutedForTime); if (time > 0) { - mcp.addMute(eventChannel.getName(), dateTime + time); + mcp.addMute(eventChannel.getName(), dateTime + time, LocalizedMessage.SPAM_MUTE_REASON_TEXT.toString()); String timeString = Format.parseTimeStringFromMillis(time); mcp.getPlayer() - .sendMessage(LocalizedMessage.MUTE_PLAYER_SPAM_TIME.toString() + .sendMessage(LocalizedMessage.MUTE_PLAYER_PLAYER_TIME_REASON.toString() .replace("{channel_color}", eventChannel.getColor()) .replace("{channel_name}", eventChannel.getName()) - .replace("{time}", timeString)); + .replace("{time}", timeString) + .replace("{reason}", LocalizedMessage.SPAM_MUTE_REASON_TEXT.toString())); } else { - mcp.addMute(eventChannel.getName(), 0); + mcp.addMute(eventChannel.getName(), LocalizedMessage.SPAM_MUTE_REASON_TEXT.toString()); mcp.getPlayer() - .sendMessage(LocalizedMessage.MUTE_PLAYER_SPAM.toString() + .sendMessage(LocalizedMessage.MUTE_PLAYER_PLAYER_REASON.toString() .replace("{channel_color}", eventChannel.getColor()) - .replace("{channel_name}", eventChannel.getName())); + .replace("{channel_name}", eventChannel.getName()) + .replace("{reason}", LocalizedMessage.SPAM_MUTE_REASON_TEXT.toString())); + } + if(eventChannel.getBungee()) { + plugin.synchronize(mcp, true); } mcp.getSpam().get(eventChannel).set(0, 0L); mcp.setQuickChat(false); diff --git a/src/mineverse/Aust1n46/chat/localization/LocalizedMessage.java b/src/mineverse/Aust1n46/chat/localization/LocalizedMessage.java index de40a2e..f99ceb8 100644 --- a/src/mineverse/Aust1n46/chat/localization/LocalizedMessage.java +++ b/src/mineverse/Aust1n46/chat/localization/LocalizedMessage.java @@ -86,6 +86,7 @@ public enum LocalizedMessage { SET_CHANNEL_ALL_SENDER("SetChannelAllSender"), SET_CHANNEL_PLAYER_CHANNEL_NO_PERMISSION("SetChannelPlayerChannelNoPermission"), SET_CHANNEL_SENDER("SetChannelSender"), + SPAM_MUTE_REASON_TEXT("SpamMuteReasonText"), SPAM_WARNING("SpamWarning"), SPY_OFF("SpyOff"), SPY_ON("SpyOn"), From 44c2363db31dbcb3c5cc72bf11c11461986a188a Mon Sep 17 00:00:00 2001 From: Aust1n46 Date: Sun, 4 Apr 2021 22:57:30 -0500 Subject: [PATCH 15/25] Add reason for /muteall. --- src/Messages.yml | 2 + .../Aust1n46/chat/command/mute/Muteall.java | 70 ++++++++++++++----- .../chat/localization/LocalizedMessage.java | 2 + 3 files changed, 56 insertions(+), 18 deletions(-) diff --git a/src/Messages.yml b/src/Messages.yml index 599d2fd..8e1fb48 100644 --- a/src/Messages.yml +++ b/src/Messages.yml @@ -54,7 +54,9 @@ MessageToggleOff: '&6You are now blocking messages.' MessageToggleOn: '&6You are now receiving messages.' MustListenOneChannel: '&cYou need to be listening on at least one channel, setting you into the default channel.' MutePlayerAllPlayer: '&cYou have just been muted in all channels.' +MutePlayerAllPlayerReason: '&cYou have just been muted in all channels. &4Reason:&c {reason}' MutePlayerAllSender: '&cMuted player &6{player} &cin all channels.' +MutePlayerAllSenderReason: '&cMuted player &6{player} &cin all channels. &4Reason:&c {reason}' MutePlayerPlayer: '&cYou have just been muted in: {channel_color}{channel_name}' MutePlayerPlayerReason: '&cYou have just been muted in: {channel_color}{channel_name} &4Reason:&c {reason}' MutePlayerPlayerTime: '&cYou have just been muted in: {channel_color}{channel_name} &cfor {time}' diff --git a/src/mineverse/Aust1n46/chat/command/mute/Muteall.java b/src/mineverse/Aust1n46/chat/command/mute/Muteall.java index b759709..66b4a27 100644 --- a/src/mineverse/Aust1n46/chat/command/mute/Muteall.java +++ b/src/mineverse/Aust1n46/chat/command/mute/Muteall.java @@ -21,7 +21,7 @@ public class Muteall extends MineverseCommand { if(args.length < 1) { sender.sendMessage(LocalizedMessage.COMMAND_INVALID_ARGUMENTS.toString() .replace("{command}", "/muteall") - .replace("{args}", "[player]")); + .replace("{args}", "[player] {reason}")); return; } MineverseChatPlayer player = MineverseChatAPI.getMineverseChatPlayer(args[0]); @@ -30,30 +30,64 @@ public class Muteall extends MineverseCommand { .replace("{args}", args[0])); return; } - boolean bungee = false; - for(ChatChannel channel : ChatChannel.getChatChannels()) { - if(channel.isMutable()) { - player.addMute(channel.getName()); - if(channel.getBungee()) { - bungee = true; + String reason = ""; + if(args.length > 1) { + StringBuilder reasonBuilder = new StringBuilder(); + for(int a = 1; a < args.length; a ++) { + reasonBuilder.append(args[a]); + } + reason = reasonBuilder.toString(); + } + if(reason.isEmpty()) { + boolean bungee = false; + for(ChatChannel channel : ChatChannel.getChatChannels()) { + if(channel.isMutable()) { + player.addMute(channel.getName()); + if(channel.getBungee()) { + bungee = true; + } } } + if(bungee) { + MineverseChat.getInstance().synchronize(player, true); + } + sender.sendMessage(LocalizedMessage.MUTE_PLAYER_ALL_SENDER.toString() + .replace("{player}", player.getName())); + if(player.isOnline()) { + player.getPlayer().sendMessage(LocalizedMessage.MUTE_PLAYER_ALL_PLAYER.toString()); + } + else + player.setModified(true); + return; } - if(bungee) { - MineverseChat.getInstance().synchronize(player, true); + else { + boolean bungee = false; + for(ChatChannel channel : ChatChannel.getChatChannels()) { + if(channel.isMutable()) { + player.addMute(channel.getName(), reason); + if(channel.getBungee()) { + bungee = true; + } + } + } + if(bungee) { + MineverseChat.getInstance().synchronize(player, true); + } + sender.sendMessage(LocalizedMessage.MUTE_PLAYER_ALL_SENDER_REASON.toString() + .replace("{player}", player.getName()) + .replace("{reason}", reason)); + if(player.isOnline()) { + player.getPlayer().sendMessage(LocalizedMessage.MUTE_PLAYER_ALL_PLAYER_REASON.toString() + .replace("{reason}", reason)); + } + else + player.setModified(true); + return; } - sender.sendMessage(LocalizedMessage.MUTE_PLAYER_ALL_SENDER.toString() - .replace("{player}", player.getName())); - if(player.isOnline()) { - player.getPlayer().sendMessage(LocalizedMessage.MUTE_PLAYER_ALL_PLAYER.toString()); - } - else - player.setModified(true); - return; } else { sender.sendMessage(LocalizedMessage.COMMAND_NO_PERMISSION.toString()); return; } } -} \ No newline at end of file +} diff --git a/src/mineverse/Aust1n46/chat/localization/LocalizedMessage.java b/src/mineverse/Aust1n46/chat/localization/LocalizedMessage.java index f99ceb8..f13b99e 100644 --- a/src/mineverse/Aust1n46/chat/localization/LocalizedMessage.java +++ b/src/mineverse/Aust1n46/chat/localization/LocalizedMessage.java @@ -61,7 +61,9 @@ public enum LocalizedMessage { MESSAGE_TOGGLE_ON("MessageToggleOn"), MUST_LISTEN_ONE_CHANNEL("MustListenOneChannel"), MUTE_PLAYER_ALL_PLAYER("MutePlayerAllPlayer"), + MUTE_PLAYER_ALL_PLAYER_REASON("MutePlayerAllPlayerReason"), MUTE_PLAYER_ALL_SENDER("MutePlayerAllSender"), + MUTE_PLAYER_ALL_SENDER_REASON("MutePlayerAllSenderReason"), MUTE_PLAYER_PLAYER("MutePlayerPlayer"), MUTE_PLAYER_PLAYER_TIME("MutePlayerPlayerTime"), MUTE_PLAYER_PLAYER_TIME_REASON("MutePlayerPlayerTimeReason"), From 32e4420712ef2677650bd093947ee8266b4ec0db Mon Sep 17 00:00:00 2001 From: Aust1n46 Date: Sun, 4 Apr 2021 23:00:42 -0500 Subject: [PATCH 16/25] Rename "defaultconfig" to something more... verbose. --- ... => example_config_always_up_to_date!.yml} | 19 +++++++++++-------- .../Aust1n46/chat/MineverseChat.java | 2 +- 2 files changed, 12 insertions(+), 9 deletions(-) rename src/{defaultconfig.yml => example_config_always_up_to_date!.yml} (93%) diff --git a/src/defaultconfig.yml b/src/example_config_always_up_to_date!.yml similarity index 93% rename from src/defaultconfig.yml rename to src/example_config_always_up_to_date!.yml index 06b1c27..c15f824 100644 --- a/src/defaultconfig.yml +++ b/src/example_config_always_up_to_date!.yml @@ -1,6 +1,6 @@ #=============================================================== # VentureChat Config = -# Author: Aust1n46 = +# Author: Aust1n46 = #=============================================================== # - regex1,regex2 @@ -55,14 +55,17 @@ commandspy: antispam: enabled: true - # number of messages to be spam + # Number of messages to be spam spamnumber: 5 - # amount of time in seconds for it to be spam + # Amount of time in seconds for it to be spam spamtime: 10 - # amount of time in minutes for the mute to last, use 0 for untimed mute - mutetime: 10 + # Amount of time for the mute to last + # Acceptable units are: d,h,m,s + # Units can be combined, for example: 1d8h30m15s + # Use 0 for untimed mute + mutetime: 10m # Logging chat and commands to a mysql database mysql: @@ -179,16 +182,16 @@ venturegui: mute: icon: 'REDSTONE_BLOCK' durability: 0 - text: '&cMute {player_name}' + text: '&cMute {player_name} &410m' permission: 'mute' - command: '/mute {player_name} {channel} 10' + command: '/mute {channel} {player_name} 10m' slot: 1 unmute: icon: 'DIAMOND_BLOCK' durability: 0 text: '&bUnmute {player_name}' permission: 'mute' - command: '/unmute {player_name} {channel}' + command: '/unmute {channel} {player_name} ' slot: 2 removemessage: icon: 'DIAMOND_AXE' diff --git a/src/mineverse/Aust1n46/chat/MineverseChat.java b/src/mineverse/Aust1n46/chat/MineverseChat.java index ae003f6..6d561c0 100644 --- a/src/mineverse/Aust1n46/chat/MineverseChat.java +++ b/src/mineverse/Aust1n46/chat/MineverseChat.java @@ -196,7 +196,7 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener { Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Config found! Loading file.")); } - saveResource("defaultconfig.yml", true); + saveResource("example_config_always_up_to_date!.yml", true); } catch(Exception ex) { log.severe(String.format("[" + String.format("VentureChat") + "]" + " - Could not load configuration!\n " + ex, getDescription().getName())); From eae285f84f0e7f4dc4f0a46e52fce8067334d7b3 Mon Sep 17 00:00:00 2001 From: Aust1n46 Date: Sun, 4 Apr 2021 23:02:42 -0500 Subject: [PATCH 17/25] Update messages file version. --- src/Messages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Messages.yml b/src/Messages.yml index 8e1fb48..8c77454 100644 --- a/src/Messages.yml +++ b/src/Messages.yml @@ -1,4 +1,4 @@ -Version: 2.20.0 +Version: 2.22.4 BlockCommandPlayer: '&cYou have been blocked from entering command {command}.' BlockCommandSender: '&cBlocked player &6{player} &cfrom entering command {command}.' BlockedCommand: '&cYou are blocked from entering this command: {command}' From f5d5ce0e6fe9420a73ae8c18157a6b929b8fe780 Mon Sep 17 00:00:00 2001 From: Aust1n46 Date: Sun, 4 Apr 2021 23:04:15 -0500 Subject: [PATCH 18/25] Actually update messages file version in the Localization handler... --- src/mineverse/Aust1n46/chat/localization/Localization.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mineverse/Aust1n46/chat/localization/Localization.java b/src/mineverse/Aust1n46/chat/localization/Localization.java index 4a28528..f96eb2e 100644 --- a/src/mineverse/Aust1n46/chat/localization/Localization.java +++ b/src/mineverse/Aust1n46/chat/localization/Localization.java @@ -14,7 +14,7 @@ public class Localization { private static MineverseChat plugin = MineverseChat.getInstance(); private static FileConfiguration localization; - private static final String VERSION = "2.20.0"; + private static final String VERSION = "2.22.4"; public static void initialize() { File localizationFile = new File(plugin.getDataFolder().getAbsolutePath(), "Messages.yml"); From 80cb47c03c81a18b759e8a69f91d1312eb5329f4 Mon Sep 17 00:00:00 2001 From: Aust1n46 Date: Mon, 5 Apr 2021 17:42:44 -0500 Subject: [PATCH 19/25] Only initiate sync if BungeeCord is being used. --- .../Aust1n46/chat/listeners/LoginListener.java | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/mineverse/Aust1n46/chat/listeners/LoginListener.java b/src/mineverse/Aust1n46/chat/listeners/LoginListener.java index 8071a4d..8879658 100644 --- a/src/mineverse/Aust1n46/chat/listeners/LoginListener.java +++ b/src/mineverse/Aust1n46/chat/listeners/LoginListener.java @@ -9,6 +9,7 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; +import org.spigotmc.SpigotConfig; import mineverse.Aust1n46.chat.MineverseChat; import mineverse.Aust1n46.chat.api.MineverseChatAPI; @@ -95,14 +96,15 @@ public class LoginListener implements Listener { mcp.addListening(ch.getName()); } } - - long delayInTicks = 20L; - final MineverseChatPlayer sync = mcp; - plugin.getServer().getScheduler().runTaskLaterAsynchronously(plugin, new Runnable() { - public void run() { - plugin.synchronize(sync, false); - } - }, delayInTicks); + if(SpigotConfig.bungee) { + long delayInTicks = 20L; + final MineverseChatPlayer sync = mcp; + plugin.getServer().getScheduler().runTaskLaterAsynchronously(plugin, new Runnable() { + public void run() { + plugin.synchronize(sync, false); + } + }, delayInTicks); + } if(!plugin.getConfig().getConfigurationSection("login").getString("message", "Default").equalsIgnoreCase("Default")) { event.setJoinMessage(Format.FormatStringAll(plugin.getConfig().getConfigurationSection("login").getString("message", "Default").replace("{player}", event.getPlayer().getName()))); } From c663c49e9c8687292d5ab62d338586f58975b90d Mon Sep 17 00:00:00 2001 From: Aust1n46 Date: Thu, 8 Apr 2021 17:32:58 -0500 Subject: [PATCH 20/25] Refactor MySQL database logging implementation. --- .../Aust1n46/chat/MineverseChat.java | 34 +++------- .../Aust1n46/chat/database/Database.java | 63 ++++++++++++++++--- .../Aust1n46/chat/database/MySQL.java | 36 ----------- .../Aust1n46/chat/database/SQLite.java | 28 --------- .../Aust1n46/chat/listeners/ChatListener.java | 24 +++---- .../chat/listeners/CommandListener.java | 35 ++--------- 6 files changed, 73 insertions(+), 147 deletions(-) delete mode 100644 src/mineverse/Aust1n46/chat/database/MySQL.java delete mode 100644 src/mineverse/Aust1n46/chat/database/SQLite.java diff --git a/src/mineverse/Aust1n46/chat/MineverseChat.java b/src/mineverse/Aust1n46/chat/MineverseChat.java index 6d561c0..834245f 100644 --- a/src/mineverse/Aust1n46/chat/MineverseChat.java +++ b/src/mineverse/Aust1n46/chat/MineverseChat.java @@ -1,7 +1,3 @@ -/* - * VentureChat plugin for Minecraft servers running Bukkit or Spigot software. - * @author Aust1n46 - */ package mineverse.Aust1n46.chat; import java.io.ByteArrayInputStream; @@ -12,9 +8,7 @@ import java.io.File; import java.io.IOException; import java.lang.reflect.Field; import java.lang.reflect.Method; -import java.text.SimpleDateFormat; import java.util.ArrayList; -import java.util.Calendar; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; @@ -86,7 +80,6 @@ import mineverse.Aust1n46.chat.command.mute.Muteall; import mineverse.Aust1n46.chat.command.mute.Unmute; import mineverse.Aust1n46.chat.command.mute.Unmuteall; import mineverse.Aust1n46.chat.database.Database; -import mineverse.Aust1n46.chat.database.MySQL; import mineverse.Aust1n46.chat.database.PlayerData; import mineverse.Aust1n46.chat.gui.GuiSlotInfo; import mineverse.Aust1n46.chat.utilities.Format; @@ -98,8 +91,6 @@ import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandMap; import org.bukkit.command.SimpleCommandMap; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.entity.Player; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.RegisteredServiceProvider; @@ -114,6 +105,10 @@ import com.comphenix.protocol.utility.MinecraftReflection; import me.clip.placeholderapi.PlaceholderAPI; +/** + * VentureChat Minecraft plugin for servers running Spigot or Paper software. + * @author Aust1n46 + */ public class MineverseChat extends JavaPlugin implements PluginMessageListener { // Listeners -------------------------------- private ChatListener chatListener; @@ -136,9 +131,6 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener { private MineverseCommandExecutor commandExecutor; private Map commands = new HashMap(); - // Database ------------------------------------ - public Database db = null; - // Misc -------------------------------- public static AliasInfo aaInfo; public static JsonFormatInfo jfInfo; @@ -236,16 +228,7 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener { MineverseChatAPI.addMineverseChatOnlinePlayerToMap(mcp); } - FileConfiguration config = getConfig(); - ConfigurationSection mysqlConfig = config.getConfigurationSection("mysql"); - if (this.getConfig().getConfigurationSection("mysql").getBoolean("enabled")) { - String host = mysqlConfig.getString("host"); - int port = mysqlConfig.getInt("port"); - String database = mysqlConfig.getString("database"); - String user = mysqlConfig.getString("user"); - String password = mysqlConfig.getString("password"); - db = new MySQL(host, port, database, user, password); - } + Database.initializeMySQL(); commands.put("broadcast", new Broadcast("broadcast")); commands.put("channel", new Channel("channel")); @@ -684,11 +667,8 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener { Bukkit.getConsoleSender().sendMessage(consoleChat); - if(db != null) { - Calendar currentDate = Calendar.getInstance(); - SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - String date = formatter.format(currentDate.getTime()); - db.writeVentureChat(date, senderUUID.toString(), senderName, server, chatchannel, chat.replace("'", "''"), "Chat"); + if(Database.isEnabled()) { + Database.writeVentureChat(senderUUID.toString(), senderName, server, chatchannel, chat.replace("'", "''"), "Chat"); } for(MineverseChatPlayer p : MineverseChatAPI.getOnlineMineverseChatPlayers()) { diff --git a/src/mineverse/Aust1n46/chat/database/Database.java b/src/mineverse/Aust1n46/chat/database/Database.java index 63d68e5..b3dc867 100644 --- a/src/mineverse/Aust1n46/chat/database/Database.java +++ b/src/mineverse/Aust1n46/chat/database/Database.java @@ -3,27 +3,72 @@ package mineverse.Aust1n46.chat.database; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; +import java.text.SimpleDateFormat; +import java.util.Calendar; import org.bukkit.Bukkit; +import org.bukkit.configuration.ConfigurationSection; +import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; import mineverse.Aust1n46.chat.MineverseChat; -//Parent class for both the MySQL and SQLite database classes. -public abstract class Database { +/** + * Initializes and handles writing to the chat logging database. + */ +public class Database { + private static HikariDataSource dataSource = null; + + public static void initializeMySQL() { + ConfigurationSection mysqlConfig = MineverseChat.getInstance().getConfig().getConfigurationSection("mysql"); + if (mysqlConfig.getBoolean("enabled", false)) { + String host = mysqlConfig.getString("host"); + int port = mysqlConfig.getInt("port"); + String database = mysqlConfig.getString("database"); + String user = mysqlConfig.getString("user"); + String password = mysqlConfig.getString("password"); + + final HikariConfig config = new HikariConfig(); + //config.setDriverClassName(org.postgresql.Driver.class.getName()); + //final String jdbcUrl = String.format("jdbc:postgresql://%s:%d/%s", hostname, port, database); + final String jdbcUrl = String.format("jdbc:mysql://%s:%d/%s?autoReconnect=true&useSSL=false", host, port, database); + config.setJdbcUrl(jdbcUrl); + config.setUsername(user); + config.setPassword(password); + config.addDataSourceProperty("cachePrepStmts", "true"); + config.addDataSourceProperty("prepStmtCacheSize", "250"); + config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048"); + dataSource = new HikariDataSource(config); + final String SQL_CREATE_TABLE = "CREATE TABLE IF NOT EXISTS VentureChat " + + "(ID SERIAL PRIMARY KEY, ChatTime TEXT, UUID TEXT, Name TEXT, " + + "Server TEXT, Channel TEXT, Text TEXT, Type TEXT)"; + try (final Connection conn = dataSource.getConnection(); + final PreparedStatement statement = conn.prepareStatement(SQL_CREATE_TABLE)) { + statement.executeUpdate(); + } + catch (SQLException e) { + throw new RuntimeException(e); + } + } + } + + public static boolean isEnabled() { + return dataSource != null; + } - protected HikariDataSource dataSource = null; - - public void writeVentureChat(String time, String uuid, String name, String server, String channel, String text, String type) { + public static 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()); Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> { try(final Connection conn = dataSource.getConnection(); final PreparedStatement statement = conn.prepareStatement( "INSERT INTO VentureChat " + "(ChatTime, UUID, Name, Server, Channel, Text, Type) " + "VALUES (?, ?, ?, ?, ?, ?, ?)")) { - statement.setString(1, time); + statement.setString(1, date); statement.setString(2, uuid); statement.setString(3, name); statement.setString(4, server); @@ -32,9 +77,9 @@ public abstract class Database { statement.setString(7, type); statement.executeUpdate(); } - catch(SQLException e) { - throw new RuntimeException(e); + catch(SQLException error) { + error.printStackTrace(); } }); } -} \ No newline at end of file +} diff --git a/src/mineverse/Aust1n46/chat/database/MySQL.java b/src/mineverse/Aust1n46/chat/database/MySQL.java deleted file mode 100644 index 8ba5a79..0000000 --- a/src/mineverse/Aust1n46/chat/database/MySQL.java +++ /dev/null @@ -1,36 +0,0 @@ -package mineverse.Aust1n46.chat.database; - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.SQLException; - -import com.zaxxer.hikari.HikariConfig; -import com.zaxxer.hikari.HikariDataSource; - -//This class initializes the plugin's connection to the MySQL database if it's enabled. -public class MySQL extends Database { - - public MySQL(String hostname, int port, String database, String user, String password) { - final HikariConfig config = new HikariConfig(); - //config.setDriverClassName(org.postgresql.Driver.class.getName()); - //final String jdbcUrl = String.format("jdbc:postgresql://%s:%d/%s", hostname, port, database); - final String jdbcUrl = String.format("jdbc:mysql://%s:%d/%s", hostname, port, database); - config.setJdbcUrl(jdbcUrl); - config.setUsername(user); - config.setPassword(password); - config.addDataSourceProperty("cachePrepStmts", "true"); - config.addDataSourceProperty("prepStmtCacheSize", "250"); - config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048"); - dataSource = new HikariDataSource(config); - final String SQL_CREATE_TABLE = "CREATE TABLE IF NOT EXISTS VentureChat " + - "(ID SERIAL PRIMARY KEY, ChatTime TEXT, UUID TEXT, Name TEXT, " + - "Server TEXT, Channel TEXT, Text TEXT, Type TEXT)"; - try (final Connection conn = dataSource.getConnection(); - final PreparedStatement statement = conn.prepareStatement(SQL_CREATE_TABLE)) { - statement.executeUpdate(); - } - catch (SQLException e) { - throw new RuntimeException(e); - } - } -} \ No newline at end of file diff --git a/src/mineverse/Aust1n46/chat/database/SQLite.java b/src/mineverse/Aust1n46/chat/database/SQLite.java deleted file mode 100644 index 75f17ed..0000000 --- a/src/mineverse/Aust1n46/chat/database/SQLite.java +++ /dev/null @@ -1,28 +0,0 @@ -package mineverse.Aust1n46.chat.database; - -import java.io.File; -import java.io.IOException; - -import com.zaxxer.hikari.HikariConfig; -import com.zaxxer.hikari.HikariDataSource; - -import mineverse.Aust1n46.chat.MineverseChat; - -//This class initializes the connection to a SQLite database, which has no implementations currently in the plugin. -public class SQLite extends Database { - - public SQLite(String dbLocation) { - File dataFolder = MineverseChat.getInstance().getDataFolder(); - if (!dataFolder.exists()) dataFolder.mkdirs(); - File databaseFile = new File(dataFolder, dbLocation); - try { - if (!databaseFile.exists()) databaseFile.createNewFile(); - } catch (IOException e) { - throw new RuntimeException(e); - } - HikariConfig config = new HikariConfig(); - final String jdbcUrl = String.format("jdbc:sqlite:%s", databaseFile); - config.setJdbcUrl(jdbcUrl); - dataSource = new HikariDataSource(config); - } -} \ No newline at end of file diff --git a/src/mineverse/Aust1n46/chat/listeners/ChatListener.java b/src/mineverse/Aust1n46/chat/listeners/ChatListener.java index ed185ed..2e7c563 100644 --- a/src/mineverse/Aust1n46/chat/listeners/ChatListener.java +++ b/src/mineverse/Aust1n46/chat/listeners/ChatListener.java @@ -2,8 +2,6 @@ package mineverse.Aust1n46.chat.listeners; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; -import java.text.SimpleDateFormat; -import java.util.Calendar; import java.util.Set; import org.bukkit.Bukkit; @@ -30,6 +28,7 @@ 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; import mineverse.Aust1n46.chat.versions.VersionHandler; @@ -154,11 +153,8 @@ public class ChatListener implements Listener { } mcp.setReplyPlayer(tp.getUUID()); tp.setReplyPlayer(mcp.getUUID()); - if(plugin.db != null) { - Calendar currentDate = Calendar.getInstance(); - SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - String date = formatter.format(currentDate.getTime()); - plugin.db.writeVentureChat(date, mcp.getUUID().toString(), mcp.getName(), "Local", "Messaging_Component", chat.replace("'", "''"), "Chat"); + if(Database.isEnabled()) { + Database.writeVentureChat(mcp.getUUID().toString(), mcp.getName(), "Local", "Messaging_Component", chat.replace("'", "''"), "Chat"); } } return; @@ -193,11 +189,8 @@ public class ChatListener implements Listener { } } Bukkit.getConsoleSender().sendMessage(partyformat); - if(plugin.db != null) { - Calendar currentDate = Calendar.getInstance(); - SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - String date = formatter.format(currentDate.getTime()); - plugin.db.writeVentureChat(date, mcp.getUUID().toString(), mcp.getName(), "Local", "Party_Component", chat.replace("'", "''"), "Chat"); + if(Database.isEnabled()) { + Database.writeVentureChat(mcp.getUUID().toString(), mcp.getName(), "Local", "Party_Component", chat.replace("'", "''"), "Chat"); } return; } @@ -526,11 +519,8 @@ public class ChatListener implements Listener { boolean bungee = event.isBungee(); if(!bungee) { - if(plugin.db != null) { - Calendar currentDate = Calendar.getInstance(); - SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - String date = formatter.format(currentDate.getTime()); - plugin.db.writeVentureChat(date, mcp.getUUID().toString(), mcp.getName(), "Local", channel.getName(), chat.replace("'", "''"), "Chat"); + if(Database.isEnabled()) { + Database.writeVentureChat(mcp.getUUID().toString(), mcp.getName(), "Local", channel.getName(), chat.replace("'", "''"), "Chat"); } if(recipientCount == 1) { diff --git a/src/mineverse/Aust1n46/chat/listeners/CommandListener.java b/src/mineverse/Aust1n46/chat/listeners/CommandListener.java index 267f801..25d8e00 100644 --- a/src/mineverse/Aust1n46/chat/listeners/CommandListener.java +++ b/src/mineverse/Aust1n46/chat/listeners/CommandListener.java @@ -1,8 +1,6 @@ package mineverse.Aust1n46.chat.listeners; import java.io.FileNotFoundException; -import java.text.SimpleDateFormat; -import java.util.Calendar; import mineverse.Aust1n46.chat.MineverseChat; import mineverse.Aust1n46.chat.alias.Alias; @@ -10,6 +8,7 @@ import mineverse.Aust1n46.chat.alias.AliasInfo; 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; @@ -75,30 +74,9 @@ public class CommandListener implements CommandExecutor, Listener { } String message = event.getMessage(); - /* - * boolean cus = false; if((message.startsWith("/pl") || - * message.startsWith("/plugins")) && - * plugin.getConfig().getBoolean("modifypluginlist", true)) { - * if(message.contains(" ")) { if(message.split(" ")[0].equals("/pl") || - * message.split(" ")[0].equals("/plugins")) { cus = true; } } - * if(message.equals("/pl") || message.equals("/plugins")) { cus = true; - * } if(cus && mcp.getPlayer().hasPermission("bukkit.command.plugins")) - * { String pluginlist = ""; for(Plugin p : - * Bukkit.getPluginManager().getPlugins()) { pluginlist += - * ChatColor.GREEN + p.getName().replace("VentureChat", - * plugin.getConfig().getString("pluginname", "VentureChat")) + - * ChatColor.WHITE + ", "; } if(pluginlist.length() > 2) { pluginlist = - * pluginlist.substring(0, pluginlist.length() - 2); } - * mcp.getPlayer().sendMessage("Plugins (" + - * Bukkit.getPluginManager().getPlugins().length + "): " + pluginlist); - * event.setCancelled(true); return; } } - */ - if(plugin.db != null) { - Calendar currentDate = Calendar.getInstance(); - SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - String date = formatter.format(currentDate.getTime()); - plugin.db.writeVentureChat(date, mcp.getUUID().toString(), mcp.getName(), "Local", "Command_Component", event.getMessage().replace("'", "''"), "Command"); + if(Database.isEnabled()) { + Database.writeVentureChat(mcp.getUUID().toString(), mcp.getName(), "Local", "Command_Component", event.getMessage().replace("'", "''"), "Command"); } for(Alias a : aa.getAliases()) { @@ -209,11 +187,8 @@ public class CommandListener implements CommandExecutor, Listener { //old 1.8 command map @EventHandler public void onServerCommand(ServerCommandEvent event) { - if (plugin.db != null) { - Calendar currentDate = Calendar.getInstance(); - SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - String date = formatter.format(currentDate.getTime()); - plugin.db.writeVentureChat(date, "N/A", "Console", "Local", "Command_Component", event.getCommand().replace("'", "''") , "Command"); + if (Database.isEnabled()) { + Database.writeVentureChat("N/A", "Console", "Local", "Command_Component", event.getCommand().replace("'", "''") , "Command"); } } From 8a6a4d61f2c4c69f4334335a234bbb1d0c3efbf6 Mon Sep 17 00:00:00 2001 From: Aust1n46 Date: Fri, 9 Apr 2021 17:19:08 -0500 Subject: [PATCH 21/25] Load database async and add exception handling. Hikari seems to print it's own stacktrace even when you catch the exception. --- .../Aust1n46/chat/MineverseChat.java | 6 +- .../Aust1n46/chat/database/Database.java | 77 ++++++++++--------- 2 files changed, 44 insertions(+), 39 deletions(-) diff --git a/src/mineverse/Aust1n46/chat/MineverseChat.java b/src/mineverse/Aust1n46/chat/MineverseChat.java index 834245f..adb60ee 100644 --- a/src/mineverse/Aust1n46/chat/MineverseChat.java +++ b/src/mineverse/Aust1n46/chat/MineverseChat.java @@ -227,8 +227,10 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener { mcp.setJsonFormat(); MineverseChatAPI.addMineverseChatOnlinePlayerToMap(mcp); } - - Database.initializeMySQL(); + + Bukkit.getScheduler().runTaskAsynchronously(this, () -> { + Database.initializeMySQL(); + }); commands.put("broadcast", new Broadcast("broadcast")); commands.put("channel", new Channel("channel")); diff --git a/src/mineverse/Aust1n46/chat/database/Database.java b/src/mineverse/Aust1n46/chat/database/Database.java index b3dc867..b65bd8c 100644 --- a/src/mineverse/Aust1n46/chat/database/Database.java +++ b/src/mineverse/Aust1n46/chat/database/Database.java @@ -13,61 +13,65 @@ import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; import mineverse.Aust1n46.chat.MineverseChat; +import mineverse.Aust1n46.chat.utilities.Format; /** * Initializes and handles writing to the chat logging database. */ public class Database { private static HikariDataSource dataSource = null; - + public static void initializeMySQL() { - ConfigurationSection mysqlConfig = MineverseChat.getInstance().getConfig().getConfigurationSection("mysql"); - if (mysqlConfig.getBoolean("enabled", false)) { - String host = mysqlConfig.getString("host"); - int port = mysqlConfig.getInt("port"); - String database = mysqlConfig.getString("database"); - String user = mysqlConfig.getString("user"); - String password = mysqlConfig.getString("password"); - - final HikariConfig config = new HikariConfig(); - //config.setDriverClassName(org.postgresql.Driver.class.getName()); - //final String jdbcUrl = String.format("jdbc:postgresql://%s:%d/%s", hostname, port, database); - final String jdbcUrl = String.format("jdbc:mysql://%s:%d/%s?autoReconnect=true&useSSL=false", host, port, database); - config.setJdbcUrl(jdbcUrl); - config.setUsername(user); - config.setPassword(password); - config.addDataSourceProperty("cachePrepStmts", "true"); - config.addDataSourceProperty("prepStmtCacheSize", "250"); - config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048"); - dataSource = new HikariDataSource(config); - final String SQL_CREATE_TABLE = "CREATE TABLE IF NOT EXISTS VentureChat " + - "(ID SERIAL PRIMARY KEY, ChatTime TEXT, UUID TEXT, Name TEXT, " + - "Server TEXT, Channel TEXT, Text TEXT, Type TEXT)"; - try (final Connection conn = dataSource.getConnection(); - final PreparedStatement statement = conn.prepareStatement(SQL_CREATE_TABLE)) { - statement.executeUpdate(); - } - catch (SQLException e) { - throw new RuntimeException(e); + try { + ConfigurationSection mysqlConfig = MineverseChat.getInstance().getConfig().getConfigurationSection("mysql"); + if (mysqlConfig.getBoolean("enabled", false)) { + String host = mysqlConfig.getString("host"); + int port = mysqlConfig.getInt("port"); + String database = mysqlConfig.getString("database"); + String user = mysqlConfig.getString("user"); + String password = mysqlConfig.getString("password"); + + final HikariConfig config = new HikariConfig(); + // config.setDriverClassName(org.postgresql.Driver.class.getName()); + // final String jdbcUrl = String.format("jdbc:postgresql://%s:%d/%s", hostname, + // port, database); + final String jdbcUrl = String.format("jdbc:mysql://%s:%d/%s?autoReconnect=true&useSSL=false", host, + port, database); + config.setJdbcUrl(jdbcUrl); + config.setUsername(user); + config.setPassword(password); + config.addDataSourceProperty("cachePrepStmts", "true"); + config.addDataSourceProperty("prepStmtCacheSize", "250"); + config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048"); + dataSource = new HikariDataSource(config); + final String SQL_CREATE_TABLE = "CREATE TABLE IF NOT EXISTS VentureChat " + + "(ID SERIAL PRIMARY KEY, ChatTime TEXT, UUID TEXT, Name TEXT, " + + "Server TEXT, Channel TEXT, Text TEXT, Type TEXT)"; + final Connection conn = dataSource.getConnection(); + final PreparedStatement statement = conn.prepareStatement(SQL_CREATE_TABLE); + statement.executeUpdate(); } + } catch (Exception exception) { + Bukkit.getConsoleSender().sendMessage( + Format.FormatStringAll("&8[&eVentureChat&8]&c - Database could not be loaded. Is it running?")); } } - + public static boolean isEnabled() { return dataSource != null; } - public static void writeVentureChat(String uuid, String name, String server, String channel, String text, String type) { + public static 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()); Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> { - try(final Connection conn = dataSource.getConnection(); + try (final Connection conn = dataSource.getConnection(); final PreparedStatement statement = conn.prepareStatement( - "INSERT INTO VentureChat " + - "(ChatTime, UUID, Name, Server, Channel, Text, Type) " + - "VALUES (?, ?, ?, ?, ?, ?, ?)")) { + "INSERT INTO VentureChat " + "(ChatTime, UUID, Name, Server, Channel, Text, Type) " + + "VALUES (?, ?, ?, ?, ?, ?, ?)")) { statement.setString(1, date); statement.setString(2, uuid); statement.setString(3, name); @@ -76,8 +80,7 @@ public class Database { statement.setString(6, text); statement.setString(7, type); statement.executeUpdate(); - } - catch(SQLException error) { + } catch (SQLException error) { error.printStackTrace(); } }); From 704b724b9e50bfba601f1bea8ef9559f5b26d249 Mon Sep 17 00:00:00 2001 From: Aust1n46 Date: Sat, 10 Apr 2021 13:54:51 -0500 Subject: [PATCH 22/25] Added override permission for commandspy. --- .../chat/listeners/CommandListener.java | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/mineverse/Aust1n46/chat/listeners/CommandListener.java b/src/mineverse/Aust1n46/chat/listeners/CommandListener.java index 25d8e00..7b05909 100644 --- a/src/mineverse/Aust1n46/chat/listeners/CommandListener.java +++ b/src/mineverse/Aust1n46/chat/listeners/CommandListener.java @@ -46,19 +46,21 @@ public class CommandListener implements CommandExecutor, Listener { public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) throws FileNotFoundException { ConfigurationSection cs = plugin.getConfig().getConfigurationSection("commandspy"); Boolean wec = cs.getBoolean("worldeditcommands", true); - MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer(event.getPlayer()); - for(MineverseChatPlayer p : MineverseChatAPI.getOnlineMineverseChatPlayers()) { - if(p.hasCommandSpy()) { - if(wec) { - p.getPlayer().sendMessage(Format.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()))); + MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer(event.getPlayer()); + if(!mcp.getPlayer().hasPermission("venturechat.commandspy.override")) { + for(MineverseChatPlayer p : MineverseChatAPI.getOnlineMineverseChatPlayers()) { + if(p.hasCommandSpy()) { + if(wec) { + p.getPlayer().sendMessage(Format.FormatStringAll(cs.getString("format").replace("{player}", mcp.getName()).replace("{command}", event.getMessage()))); } else { if(!(event.getMessage().toLowerCase().startsWith("//"))) { - p.getPlayer().sendMessage(ChatColor.GOLD + mcp.getName() + ": " + event.getMessage()); + p.getPlayer().sendMessage(Format.FormatStringAll(cs.getString("format").replace("{player}", mcp.getName()).replace("{command}", event.getMessage()))); + } + else { + if(!(event.getMessage().toLowerCase().startsWith("//"))) { + p.getPlayer().sendMessage(ChatColor.GOLD + mcp.getName() + ": " + event.getMessage()); + } } } } From 9f49a41bbced73eee58aea49bc48b54039792631 Mon Sep 17 00:00:00 2001 From: Aust1n46 Date: Sat, 10 Apr 2021 14:25:48 -0500 Subject: [PATCH 23/25] Added spy override to Bungee messaging. --- src/mineverse/Aust1n46/chat/MineverseChat.java | 8 +++++--- .../command/message/MessageCommandExecutor.java | 17 +++++++++-------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/mineverse/Aust1n46/chat/MineverseChat.java b/src/mineverse/Aust1n46/chat/MineverseChat.java index adb60ee..76184a8 100644 --- a/src/mineverse/Aust1n46/chat/MineverseChat.java +++ b/src/mineverse/Aust1n46/chat/MineverseChat.java @@ -1310,9 +1310,11 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener { String receiverName = msgin.readUTF(); String senderName = msgin.readUTF(); String spy = msgin.readUTF(); - for(MineverseChatPlayer pl : MineverseChatAPI.getOnlineMineverseChatPlayers()) { - if(pl.isSpy() && !pl.getName().equals(senderName) && !pl.getName().equals(receiverName)) { - pl.getPlayer().sendMessage(spy); + 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); + } } } } diff --git a/src/mineverse/Aust1n46/chat/command/message/MessageCommandExecutor.java b/src/mineverse/Aust1n46/chat/command/message/MessageCommandExecutor.java index 11407fc..e1586ba 100644 --- a/src/mineverse/Aust1n46/chat/command/message/MessageCommandExecutor.java +++ b/src/mineverse/Aust1n46/chat/command/message/MessageCommandExecutor.java @@ -181,13 +181,11 @@ public class MessageCommandExecutor implements TabExecutor { } ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream(); DataOutputStream out = new DataOutputStream(byteOutStream); - String msg = ""; - String send = ""; - String echo = ""; - String spy = ""; + StringBuilder msgBuilder = new StringBuilder(); for(int r = 1; r < args.length; r++) { - msg += " " + args[r]; + msgBuilder.append(" " + args[r]); } + String msg = msgBuilder.toString(); if(mcp.hasFilter()) { msg = Format.FilterChat(msg); } @@ -201,9 +199,12 @@ public class MessageCommandExecutor implements TabExecutor { msg = Format.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_", ""))); + 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 spy = "VentureChat:NoSpy"; + if(!mcp.getPlayer().hasPermission("venturechat.spy.override")) { + spy = Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(mcp.getPlayer(), plugin.getConfig().getString("tellformatspy").replaceAll("sender_", ""))); + } try { out.writeUTF("Message"); out.writeUTF("Send"); From 0c0e4da5f051bd8d2bf6c1eb7b60ee6a5044c361 Mon Sep 17 00:00:00 2001 From: Aust1n46 Date: Sat, 10 Apr 2021 14:40:53 -0500 Subject: [PATCH 24/25] Fixed /broadcast not working with URL's. --- src/mineverse/Aust1n46/chat/command/chat/Broadcast.java | 4 ++-- src/mineverse/Aust1n46/chat/listeners/CommandListener.java | 2 +- src/mineverse/Aust1n46/chat/utilities/Format.java | 7 +++++++ 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/mineverse/Aust1n46/chat/command/chat/Broadcast.java b/src/mineverse/Aust1n46/chat/command/chat/Broadcast.java index 5574860..33da48f 100644 --- a/src/mineverse/Aust1n46/chat/command/chat/Broadcast.java +++ b/src/mineverse/Aust1n46/chat/command/chat/Broadcast.java @@ -20,7 +20,7 @@ public class Broadcast extends MineverseCommand { 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", ""); + String broadcastPermissions = bs.getString("permissions", "None"); String broadcastDisplayTag = Format.FormatStringAll(bs.getString("displaytag", "[Broadcast]")); if(broadcastPermissions.equalsIgnoreCase("None") || sender.hasPermission(broadcastPermissions)) { if(args.length > 0) { @@ -29,7 +29,7 @@ public class Broadcast extends MineverseCommand { if(args[x].length() > 0) bc += args[x] + " "; } bc = Format.FormatStringAll(bc); - plugin.getServer().broadcastMessage(broadcastDisplayTag + ChatColor.valueOf(broadcastColor.toUpperCase()) + " " + bc); + Format.broadcastToServer(broadcastDisplayTag + ChatColor.valueOf(broadcastColor.toUpperCase()) + " " + bc); return; } else { diff --git a/src/mineverse/Aust1n46/chat/listeners/CommandListener.java b/src/mineverse/Aust1n46/chat/listeners/CommandListener.java index 7b05909..710494e 100644 --- a/src/mineverse/Aust1n46/chat/listeners/CommandListener.java +++ b/src/mineverse/Aust1n46/chat/listeners/CommandListener.java @@ -125,7 +125,7 @@ public class CommandListener implements CommandExecutor, Listener { event.setCancelled(true); } if(s.startsWith("Broadcast:")) { - plugin.getServer().broadcastMessage(s.substring(11).replace("$", send)); + Format.broadcastToServer(s.substring(11).replace("$", send)); event.setCancelled(true); } } diff --git a/src/mineverse/Aust1n46/chat/utilities/Format.java b/src/mineverse/Aust1n46/chat/utilities/Format.java index 554bff0..82e0784 100644 --- a/src/mineverse/Aust1n46/chat/utilities/Format.java +++ b/src/mineverse/Aust1n46/chat/utilities/Format.java @@ -19,6 +19,7 @@ import com.comphenix.protocol.wrappers.WrappedChatComponent; 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.json.JsonFormat; import mineverse.Aust1n46.chat.localization.LocalizedMessage; @@ -836,4 +837,10 @@ public class Format { } return false; } + + public static void broadcastToServer(String message) { + for(MineverseChatPlayer mcp : MineverseChatAPI.getOnlineMineverseChatPlayers()) { + mcp.getPlayer().sendMessage(message); + } + } } From 40a7d70270cb08a76582141ba5c90ca7e006e5cf Mon Sep 17 00:00:00 2001 From: Aust1n46 Date: Sat, 10 Apr 2021 16:30:48 -0500 Subject: [PATCH 25/25] Added configurable message sound. Added spy override to /reply command. --- src/config.yml | 3 ++ src/example_config_always_up_to_date!.yml | 3 ++ .../Aust1n46/chat/MineverseChat.java | 8 +---- .../message/MessageCommandExecutor.java | 9 +----- .../Aust1n46/chat/command/message/Reply.java | 26 +++++++---------- .../Aust1n46/chat/listeners/ChatListener.java | 9 +----- .../Aust1n46/chat/utilities/Format.java | 29 +++++++++++++++++++ 7 files changed, 48 insertions(+), 39 deletions(-) diff --git a/src/config.yml b/src/config.yml index c15f824..e89b849 100644 --- a/src/config.yml +++ b/src/config.yml @@ -108,6 +108,9 @@ unmuteinterval: 60 # Enables or disabled BungeeCord messaging bungeecordmessaging: false +# Sound for message notification +message_sound: ENTITY_PLAYER_LEVELUP + # This will allow vanished players to be exempt from being sent private messages, and will act as if they aren't online vanishsupport: true diff --git a/src/example_config_always_up_to_date!.yml b/src/example_config_always_up_to_date!.yml index c15f824..e89b849 100644 --- a/src/example_config_always_up_to_date!.yml +++ b/src/example_config_always_up_to_date!.yml @@ -108,6 +108,9 @@ unmuteinterval: 60 # Enables or disabled BungeeCord messaging bungeecordmessaging: false +# Sound for message notification +message_sound: ENTITY_PLAYER_LEVELUP + # This will allow vanished players to be exempt from being sent private messages, and will act as if they aren't online vanishsupport: true diff --git a/src/mineverse/Aust1n46/chat/MineverseChat.java b/src/mineverse/Aust1n46/chat/MineverseChat.java index 76184a8..59029af 100644 --- a/src/mineverse/Aust1n46/chat/MineverseChat.java +++ b/src/mineverse/Aust1n46/chat/MineverseChat.java @@ -97,7 +97,6 @@ import org.bukkit.plugin.RegisteredServiceProvider; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.messaging.PluginMessageListener; import org.bukkit.scheduler.BukkitScheduler; -import org.bukkit.Sound; import com.comphenix.protocol.ProtocolLibrary; import com.comphenix.protocol.events.PacketContainer; @@ -1254,12 +1253,7 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener { } p.getPlayer().sendMessage(Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(p.getPlayer(), send.replaceAll("receiver_", ""))) + msg); if(p.hasNotifications()) { - if(VersionHandler.is1_8() || VersionHandler.is1_7_10() || VersionHandler.is1_7_2() || VersionHandler.is1_7_9()) { - p.getPlayer().playSound(p.getPlayer().getLocation(), Sound.valueOf("LEVEL_UP"), 1, 0); - } - else { - p.getPlayer().playSound(p.getPlayer().getLocation(), Sound.valueOf("ENTITY_PLAYER_LEVELUP"), 1, 0); - } + Format.playMessageSound(p); } p.setReplyPlayer(sender); out.writeUTF("Message"); diff --git a/src/mineverse/Aust1n46/chat/command/message/MessageCommandExecutor.java b/src/mineverse/Aust1n46/chat/command/message/MessageCommandExecutor.java index e1586ba..aaeef4b 100644 --- a/src/mineverse/Aust1n46/chat/command/message/MessageCommandExecutor.java +++ b/src/mineverse/Aust1n46/chat/command/message/MessageCommandExecutor.java @@ -6,7 +6,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -import org.bukkit.Sound; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.command.TabExecutor; @@ -19,7 +18,6 @@ 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.versions.VersionHandler; public class MessageCommandExecutor implements TabExecutor { private MineverseChat plugin = MineverseChat.getInstance(); @@ -101,12 +99,7 @@ public class MessageCommandExecutor implements TabExecutor { player.getPlayer().sendMessage(send); mcp.getPlayer().sendMessage(echo); if(player.hasNotifications()) { - if(VersionHandler.is1_8() || VersionHandler.is1_7_10() || VersionHandler.is1_7_2() || VersionHandler.is1_7_9()) { - player.getPlayer().playSound(player.getPlayer().getLocation(), Sound.valueOf("LEVEL_UP"), 1, 0); - } - else { - player.getPlayer().playSound(player.getPlayer().getLocation(), Sound.valueOf("ENTITY_PLAYER_LEVELUP"), 1, 0); - } + Format.playMessageSound(player); } if(!mcp.getPlayer().hasPermission("venturechat.spy.override")) { for(MineverseChatPlayer sp : MineverseChatAPI.getOnlineMineverseChatPlayers()) { diff --git a/src/mineverse/Aust1n46/chat/command/message/Reply.java b/src/mineverse/Aust1n46/chat/command/message/Reply.java index ea90389..d6863ab 100644 --- a/src/mineverse/Aust1n46/chat/command/message/Reply.java +++ b/src/mineverse/Aust1n46/chat/command/message/Reply.java @@ -3,7 +3,6 @@ package mineverse.Aust1n46.chat.command.message; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; -import org.bukkit.Sound; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -14,7 +13,6 @@ import mineverse.Aust1n46.chat.api.MineverseChatPlayer; import mineverse.Aust1n46.chat.command.MineverseCommand; import mineverse.Aust1n46.chat.localization.LocalizedMessage; import mineverse.Aust1n46.chat.utilities.Format; -import mineverse.Aust1n46.chat.versions.VersionHandler; public class Reply extends MineverseCommand { private MineverseChat plugin = MineverseChat.getInstance(); @@ -97,12 +95,7 @@ public class Reply extends MineverseCommand { player.getPlayer().sendMessage(send); mcp.getPlayer().sendMessage(echo); if(player.hasNotifications()) { - if(VersionHandler.is1_8() || VersionHandler.is1_7_10() || VersionHandler.is1_7_2() || VersionHandler.is1_7_9()) { - player.getPlayer().playSound(player.getPlayer().getLocation(), Sound.valueOf("LEVEL_UP"), 1, 0); - } - else { - player.getPlayer().playSound(player.getPlayer().getLocation(), Sound.valueOf("ENTITY_PLAYER_LEVELUP"), 1, 0); - } + Format.playMessageSound(player); } player.setReplyPlayer(mcp.getUUID()); return; @@ -119,13 +112,11 @@ public class Reply extends MineverseCommand { private void sendBungeeCordReply(MineverseChatPlayer mcp, String[] args) { ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream(); DataOutputStream out = new DataOutputStream(byteOutStream); - String msg = ""; - String send = ""; - String echo = ""; - String spy = ""; + StringBuilder msgBuilder = new StringBuilder(); for(int r = 0; r < args.length; r++) { - msg += " " + args[r]; + msgBuilder.append(" " + args[r]); } + String msg = msgBuilder.toString(); if(mcp.hasFilter()) { msg = Format.FilterChat(msg); } @@ -139,9 +130,12 @@ public class Reply extends MineverseCommand { msg = Format.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_", ""))); + 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 spy = "VentureChat:NoSpy"; + if(!mcp.getPlayer().hasPermission("venturechat.spy.override")) { + spy = Format.FormatStringAll(PlaceholderAPI.setBracketPlaceholders(mcp.getPlayer(), plugin.getConfig().getString("replyformatspy").replaceAll("sender_", ""))); + } try { out.writeUTF("Message"); out.writeUTF("Send"); diff --git a/src/mineverse/Aust1n46/chat/listeners/ChatListener.java b/src/mineverse/Aust1n46/chat/listeners/ChatListener.java index 2e7c563..4345b94 100644 --- a/src/mineverse/Aust1n46/chat/listeners/ChatListener.java +++ b/src/mineverse/Aust1n46/chat/listeners/ChatListener.java @@ -7,7 +7,6 @@ import java.util.Set; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Location; -import org.bukkit.Sound; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -31,7 +30,6 @@ 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; -import mineverse.Aust1n46.chat.versions.VersionHandler; //This class listens to chat through the chat event and handles the bulk of the chat channels and formatting. public class ChatListener implements Listener { @@ -144,12 +142,7 @@ public class ChatListener implements Listener { tp.getPlayer().sendMessage(send); mcp.getPlayer().sendMessage(echo); if(tp.hasNotifications()) { - if(VersionHandler.is1_8()) { - tp.getPlayer().playSound(tp.getPlayer().getLocation(), Sound.valueOf("LEVEL_UP"), 1, 0); - } - if(VersionHandler.is1_9()) { - tp.getPlayer().playSound(tp.getPlayer().getLocation(), Sound.valueOf("ENTITY_PLAYER_LEVELUP"), 1, 0); - } + Format.playMessageSound(tp); } mcp.setReplyPlayer(tp.getUUID()); tp.setReplyPlayer(mcp.getUUID()); diff --git a/src/mineverse/Aust1n46/chat/utilities/Format.java b/src/mineverse/Aust1n46/chat/utilities/Format.java index 82e0784..fe45c0e 100644 --- a/src/mineverse/Aust1n46/chat/utilities/Format.java +++ b/src/mineverse/Aust1n46/chat/utilities/Format.java @@ -3,13 +3,16 @@ 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 com.comphenix.protocol.PacketType; @@ -45,6 +48,9 @@ public class Format { public static final long MILLISECONDS_PER_HOUR = 3600000; public static final long MILLISECONDS_PER_MINUTE = 60000; public static final long MILLISECONDS_PER_SECOND = 1000; + + public static final String DEFAULT_MESSAGE_SOUND = "ENTITY_PLAYER_LEVELUP"; + public static final String DEFAULT_LEGACY_MESSAGE_SOUND = "LEVEL_UP"; /** * Converts a message to Minecraft JSON formatting while applying the @@ -843,4 +849,27 @@ public class Format { mcp.getPlayer().sendMessage(message); } } + + public static void playMessageSound(MineverseChatPlayer mcp) { + Player player = mcp.getPlayer(); + Sound messageSound = getSound(getInstance().getConfig().getString("message_sound", DEFAULT_MESSAGE_SOUND)); + 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_8() || VersionHandler.is1_7_10() || VersionHandler.is1_7_2() || VersionHandler.is1_7_9()) { + return Sound.valueOf(DEFAULT_LEGACY_MESSAGE_SOUND); + } + else { + return Sound.valueOf(DEFAULT_MESSAGE_SOUND); + } + } }