From b91e54bbe4c6b8211450940df3f531910cab7ba9 Mon Sep 17 00:00:00 2001 From: Aust1n46 Date: Sun, 21 Mar 2021 19:08:49 -0500 Subject: [PATCH] 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(); + } + } +}