diff --git a/MineverseChat/.classpath b/MineverseChat/.classpath index 10216f0..0c78240 100644 --- a/MineverseChat/.classpath +++ b/MineverseChat/.classpath @@ -8,11 +8,12 @@ - + + diff --git a/MineverseChat/bungee.yml b/MineverseChat/bungee.yml index fb0b19b..902a888 100644 --- a/MineverseChat/bungee.yml +++ b/MineverseChat/bungee.yml @@ -1,4 +1,4 @@ name: VentureChat main: mineverse.Aust1n46.chat.bungee.MineverseChatBungee -version: 2.12.3 +version: 2.12.2 author: Aust1n46 \ No newline at end of file diff --git a/MineverseChat/mineverse/Aust1n46/chat/MineverseChat.java b/MineverseChat/mineverse/Aust1n46/chat/MineverseChat.java index 16faf55..0139dd6 100644 --- a/MineverseChat/mineverse/Aust1n46/chat/MineverseChat.java +++ b/MineverseChat/mineverse/Aust1n46/chat/MineverseChat.java @@ -1,1397 +1,1402 @@ -/* - * VentureChat plugin for Minecraft servers running Bukkit or Spigot software. - * @author Aust1n46 - */ -package mineverse.Aust1n46.chat; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.File; -import java.io.IOException; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.sql.Connection; -import java.sql.SQLException; -import java.sql.Statement; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.StringTokenizer; -import java.util.UUID; -import java.util.logging.Level; -import java.util.logging.Logger; - -import net.milkbowl.vault.chat.Chat; -import net.milkbowl.vault.permission.Permission; - -import mineverse.Aust1n46.chat.irc.Bot; -import mineverse.Aust1n46.chat.irc.command.IRCCommandInfo; -//import mineverse.Aust1n46.chat.json.JsonButtonInfo; -import mineverse.Aust1n46.chat.json.JsonFormatInfo; -import mineverse.Aust1n46.chat.listeners.CapeListener; -import mineverse.Aust1n46.chat.listeners.CommandListener; -import mineverse.Aust1n46.chat.listeners.LoginListener; -import mineverse.Aust1n46.chat.listeners.ChatListener; -import mineverse.Aust1n46.chat.listeners.PacketListener; -import mineverse.Aust1n46.chat.listeners.SignListener; -//import mineverse.Aust1n46.chat.alias.Alias; -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.channel.ChatChannelInfo; -//import mineverse.Aust1n46.chat.command.CCommand; -import mineverse.Aust1n46.chat.command.MineverseCommand; -import mineverse.Aust1n46.chat.command.MineverseCommandExecutor; -import mineverse.Aust1n46.chat.command.chat.Broadcast; -import mineverse.Aust1n46.chat.command.chat.Buttons; -import mineverse.Aust1n46.chat.command.chat.Channel; -import mineverse.Aust1n46.chat.command.chat.Channelinfo; -import mineverse.Aust1n46.chat.command.chat.Chatinfo; -import mineverse.Aust1n46.chat.command.chat.Chatreload; -import mineverse.Aust1n46.chat.command.chat.Chlist; -import mineverse.Aust1n46.chat.command.chat.Chwho; -import mineverse.Aust1n46.chat.command.chat.Clearchat; -import mineverse.Aust1n46.chat.command.chat.Commandblock; -import mineverse.Aust1n46.chat.command.chat.Commandspy; -import mineverse.Aust1n46.chat.command.chat.Config; -import mineverse.Aust1n46.chat.command.chat.Edit; -import mineverse.Aust1n46.chat.command.chat.Filter; -import mineverse.Aust1n46.chat.command.chat.Force; -import mineverse.Aust1n46.chat.command.chat.Forceall; -import mineverse.Aust1n46.chat.command.chat.Kickchannel; -import mineverse.Aust1n46.chat.command.chat.Kickchannelall; -import mineverse.Aust1n46.chat.command.chat.Leave; -import mineverse.Aust1n46.chat.command.chat.Listen; -import mineverse.Aust1n46.chat.command.chat.Mail; -import mineverse.Aust1n46.chat.command.chat.Me; -import mineverse.Aust1n46.chat.command.chat.Nick; -import mineverse.Aust1n46.chat.command.chat.Party; -import mineverse.Aust1n46.chat.command.chat.RangedSpy; -import mineverse.Aust1n46.chat.command.chat.Removemessage; -import mineverse.Aust1n46.chat.command.chat.Setchannel; -import mineverse.Aust1n46.chat.command.chat.Setchannelall; -import mineverse.Aust1n46.chat.command.chat.VentureChatGui; -import mineverse.Aust1n46.chat.command.chat.Venturechat; -import mineverse.Aust1n46.chat.command.message.Afk; -import mineverse.Aust1n46.chat.command.message.Ignore; -import mineverse.Aust1n46.chat.command.message.Message; -import mineverse.Aust1n46.chat.command.message.MessageToggle; -import mineverse.Aust1n46.chat.command.message.Notifications; -import mineverse.Aust1n46.chat.command.message.Reply; -import mineverse.Aust1n46.chat.command.message.Spy; -import mineverse.Aust1n46.chat.command.mute.Mute; -import mineverse.Aust1n46.chat.command.mute.Muteall; -import mineverse.Aust1n46.chat.command.mute.Unmute; -import mineverse.Aust1n46.chat.command.mute.Unmuteall; -import mineverse.Aust1n46.chat.database.MySQL; -import mineverse.Aust1n46.chat.database.PlayerData; -import mineverse.Aust1n46.chat.gui.GuiSlotInfo; -import mineverse.Aust1n46.chat.utilities.Format; -import mineverse.Aust1n46.chat.versions.V1_8; -import mineverse.Aust1n46.chat.versions.VersionHandler; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandMap; -import org.bukkit.command.SimpleCommandMap; -import org.bukkit.entity.ArmorStand; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.plugin.PluginManager; -import org.bukkit.plugin.RegisteredServiceProvider; -import org.bukkit.plugin.java.JavaPlugin; -import org.bukkit.plugin.messaging.PluginMessageListener; -import org.bukkit.scheduler.BukkitScheduler; -import org.bukkit.Sound; - -import com.comphenix.protocol.ProtocolLibrary; -import com.comphenix.protocol.ProtocolManager; -import com.comphenix.protocol.utility.MinecraftReflection; - -import me.clip.placeholderapi.PlaceholderAPI; - -public class MineverseChat extends JavaPlugin implements PluginMessageListener { - // Listeners -------------------------------- - private ChatListener chatListener; - private LoginListener loginListener; - private SignListener signListener; - private CommandListener commandListener; - private PacketListener packetListener; - private CapeListener capeListener; - private Channel channelListener; - public static String[] playerlist; - public static String playerlist_server; - public boolean ircListen; - public ProtocolManager protocolManager; - public static ChatMessage lastChatMessage; - public static String lastJson; - public static Method messageMethod; - public static Field posField; - public static Class chatMessageType; - private static Field commandMap; - private static Field knownCommands; - - // Executors -------------------------------- - private MineverseCommandExecutor commandExecutor; - private Map commands = new HashMap(); - - // MySQL ------------------------------------ - public Connection c = null; - public MySQL MySQL; - public boolean mysql = false; - - // SQLite ------------------------------------- - // public Connection lite = null; - - // Misc -------------------------------- - public static ChatChannelInfo ccInfo; - public static AliasInfo aaInfo; - public static JsonFormatInfo jfInfo; - // public static JsonButtonInfo jbInfo; - public static IRCCommandInfo ircInfo; - public static GuiSlotInfo gsInfo; - public boolean quickchat = true; - private static final Logger log = Logger.getLogger("Minecraft"); - private static MineverseChat plugin; - public static Set players = new HashSet(); - public static Set onlinePlayers = new HashSet(); - public static HashMap networkPlayers = new HashMap(); - public static ArmorStand cape; - public static ItemStack banner; - public static boolean capeToggle = false; - private boolean firstRun = true; - - // Vault -------------------------------- - public static Permission permission = null; - public static Chat chat = null; - public static CommandMap cmap; - - // Offline data ---------------------------- - public Map mutes = new HashMap(); - public Map> mail = new HashMap>(); - - // IRC Bot ----------- - public Bot bot; - public boolean irc = false; - - private LogLevels curLogLevel; - - public long LINELENGTH = 40; - - @Override - public void onEnable() { - plugin = this; - try { - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Initializing...")); - if(!getDataFolder().exists()) { - getDataFolder().mkdirs(); - } - File file = new File(getDataFolder(), "config.yml"); - if(!file.exists()) { - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Config not found! Generating file.")); - saveDefaultConfig(); - } - else { - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Config found! Loading file.")); - } - - if(!new File(getDataFolder(), "defaultconfig.yml").exists()) { - saveResource("defaultconfig.yml", false); - } - } - catch(Exception ex) { - log.severe(String.format("[" + String.format("VentureChat") + "]" + " - Could not load configuration!\n " + ex, getDescription().getName())); - } - ccInfo = new ChatChannelInfo(this); - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Checking for Vault...")); - // Set up Vault - if(!this.setupPermissions()) { - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - &cCould not find Vault dependency, disabling.")); - Bukkit.getPluginManager().disablePlugin(this); - } - this.setupChat(); - // Log completion of initialization - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Enabled Successfully")); - // Get config and handle - // Configuration - PlayerData.initialize(); - if(this.firstRun) { - for(String uuidString : PlayerData.getPlayerData().getConfigurationSection("players").getKeys(false)) { - UUID uuid = UUID.fromString(uuidString); - String name = PlayerData.getPlayerData().getConfigurationSection("players." + uuid).getString("name"); - String currentChannelName = PlayerData.getPlayerData().getConfigurationSection("players." + uuid).getString("current"); - ChatChannel currentChannel = ccInfo.isChannel(currentChannelName) ? ccInfo.getChannelInfo(currentChannelName) : ccInfo.getDefaultChannel(); - Set ignores = new HashSet(); - StringTokenizer i = new StringTokenizer(PlayerData.getPlayerData().getConfigurationSection("players." + uuidString).getString("ignores"), ","); - while(i.hasMoreTokens()) { - ignores.add(UUID.fromString(i.nextToken())); - } - Set listening = new HashSet(); - StringTokenizer l = new StringTokenizer(PlayerData.getPlayerData().getConfigurationSection("players." + uuidString).getString("listen"), ","); - while(l.hasMoreTokens()) { - String channel = l.nextToken(); - if(ccInfo.isChannel(channel)) { - listening.add(channel); - } - } - HashMap mutes = new HashMap(); - StringTokenizer m = new StringTokenizer(PlayerData.getPlayerData().getConfigurationSection("players." + uuidString).getString("mutes"), ","); - while(m.hasMoreTokens()) { - String[] parts = m.nextToken().split(":"); - if(ccInfo.isChannel(parts[0])) { - if(parts[1].equals("null")) { - log.info("[VentureChat] Null Mute Time: " + parts[0] + " " + name); - continue; - } - mutes.put(ccInfo.getChannelInfo(parts[0]).getName(), Integer.parseInt(parts[1])); - } - } - Set blockedCommands = new HashSet(); - StringTokenizer b = new StringTokenizer(PlayerData.getPlayerData().getConfigurationSection("players." + uuidString).getString("blockedcommands"), ","); - while(b.hasMoreTokens()) { - blockedCommands.add(b.nextToken()); - } - List mail = new ArrayList(); - StringTokenizer ma = new StringTokenizer(PlayerData.getPlayerData().getConfigurationSection("players." + uuidString).getString("mail"), ","); - while(ma.hasMoreTokens()) { - mail.add(ma.nextToken()); - } - boolean host = PlayerData.getPlayerData().getConfigurationSection("players." + uuidString).getBoolean("host"); - UUID party = PlayerData.getPlayerData().getConfigurationSection("players." + uuidString).getString("party").length() > 0 ? UUID.fromString(PlayerData.getPlayerData().getConfigurationSection("players." + uuidString).getString("party")) : null; - boolean filter = PlayerData.getPlayerData().getConfigurationSection("players." + uuidString).getBoolean("filter"); - boolean notifications = PlayerData.getPlayerData().getConfigurationSection("players." + uuidString).getBoolean("notifications"); - String nickname = PlayerData.getPlayerData().getConfigurationSection("players." + uuidString).getString("nickname"); - String jsonFormat = PlayerData.getPlayerData().getConfigurationSection("players." + uuidString).getString("jsonformat"); - boolean spy = PlayerData.getPlayerData().getConfigurationSection("players." + uuidString).getBoolean("spy", false); - boolean commandSpy = PlayerData.getPlayerData().getConfigurationSection("players." + uuidString).getBoolean("commandspy", false); - boolean rangedSpy = PlayerData.getPlayerData().getConfigurationSection("players." + uuidString).getBoolean("rangedspy", false); - boolean buttons = PlayerData.getPlayerData().getConfigurationSection("players." + uuidString).getBoolean("buttons", true); - boolean messageToggle = PlayerData.getPlayerData().getConfigurationSection("players." + uuidString).getBoolean("messagetoggle", true); - players.add(new MineverseChatPlayer(uuid, name, currentChannel, ignores, listening, mutes, blockedCommands, mail, host, party, filter, notifications, nickname, jsonFormat, spy, commandSpy, rangedSpy, buttons, messageToggle)); - } - } - else { - for(Player p : this.getServer().getOnlinePlayers()) { - MineverseChatPlayer mcp = MineverseChatAPI.getMineverseChatPlayer(p); - mcp.setOnline(true); - } - } - - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Registering Listeners")); - // Channel information reference - ircInfo = new IRCCommandInfo(this); - aaInfo = new AliasInfo(this); - jfInfo = new JsonFormatInfo(this); - // jbInfo = new JsonButtonInfo(); - gsInfo = new GuiSlotInfo(); - - if(ccInfo == null) { - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - &cConfiguration is BAD!")); - } - - if(this.getConfig().getConfigurationSection("mysql").getBoolean("enabled")) { - this.MySQL = new MySQL(this, getConfig().getConfigurationSection("mysql").getString("host"), getConfig().getConfigurationSection("mysql").getString("port"), getConfig().getConfigurationSection("mysql").getString("database"), getConfig().getConfigurationSection("mysql").getString("user"), getConfig().getConfigurationSection("mysql").getString("password")); - this.mysql = true; - try { - c = MySQL.openConnection(); - Statement statement = c.createStatement(); - statement.executeUpdate("CREATE TABLE IF NOT EXISTS `VentureChat` (`rowid` INT(7) NOT NULL AUTO_INCREMENT, `ChatTime` TEXT(100), `UUID` TEXT(100), `Name` TEXT(100), `Server` TEXT(100), `Channel` TEXT(100), `Text` TEXT(300), `Type` TEXT(100), PRIMARY KEY (rowid));"); - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Connecting to MySQL Database")); - } - catch(ClassNotFoundException | SQLException e) { - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - &cFailed to connect to MySQL Database, Reason: " + e)); - this.mysql = false; - } - } - - /* - * Future SQLite data storage option SQLite SQLite = new SQLite(this, - * "PlayerData.db"); try { lite = SQLite.openConnection(); Statement - * statement = lite.createStatement(); statement.executeUpdate( - * "CREATE TABLE IF NOT EXISTS `PlayerData` (`Player` TEXT(100), `UUID` TEXT(100), `Default Channel` TEXT(100), `Ignores` TEXT(1000), `Channels` TEXT(1000), `Mutes` TEXT(1000), `Timed Mutes` TEXT(1000), `Blocked Commands` TEXT(1000), `Date` TEXT(100));" - * ); //statement.executeUpdate( - * "INSERT INTO `PlayerData` (`Player`, `UUID`, `Default Channel`, `Ignores`, `Channels`, `Mutes`, `Timed Mutes`, `Blocked Commands`, `Date`) VALUES ('bob', 'derp', 'dered', '" - * +plugin.getServer().getServerName()+ - * "', 'Messaging_Component', 'COMMAND', 'Chat', 'HI', ':D');"); - * log.info(String.format("[" + - * String.format(getConfig().getString("pluginname", "VentureChat") + - * "]" + " - Connecting to SQLite Database", - * getDescription().getName()))); } catch(ClassNotFoundException | - * SQLException e) { e.printStackTrace(); } - */ - - //this.loadCommandMap(); - //this.unregister("msg"); - - if(this.getConfig().getConfigurationSection("irc").getBoolean("enabled", false)) { - bot = new Bot(this, ccInfo, ircInfo); - bot.init(); - irc = true; - } - - commands.put("afk", new Afk("afk")); - commands.put("buttons", new Buttons("button")); - commands.put("broadcast", new Broadcast("broadcast")); - commands.put("channel", new Channel("channel")); - commands.put("join", new Channel("join")); - commands.put("channelinfo", new Channelinfo("channelinfo")); - commands.put("chatinfo", new Chatinfo("chatinfo")); - commands.put("chatreload", new Chatreload("chatreload")); - commands.put("chlist", new Chlist("chlist")); - commands.put("chwho", new Chwho("chwho")); - commands.put("clearchat", new Clearchat("clearchat")); - commands.put("commandblock", new Commandblock("commandblock")); - commands.put("commandspy", new Commandspy("commandspy")); - commands.put("config", new Config("config")); - commands.put("edit", new Edit("edit")); - commands.put("filter", new Filter("filter")); - commands.put("force", new Force("force")); - commands.put("forceall", new Forceall("forceall")); - commands.put("ignore", new Ignore("ignore")); - commands.put("kickchannel", new Kickchannel("kickchannel")); - commands.put("kickchannelall", new Kickchannelall("kickchannelall")); - commands.put("leave", new Leave("leave")); - commands.put("listen", new Listen("listen")); - commands.put("mail", new Mail("mail")); - commands.put("me", new Me("me")); - commands.put("message", new Message("message")); - commands.put("tell", new Message("tell")); - commands.put("whisper", new Message("whisper")); - commands.put("venturechat", new Venturechat("venturechat")); - commands.put("mute", new Mute("mute")); - commands.put("muteall", new Muteall("muteall")); - commands.put("nick", new Nick("nick")); - commands.put("notifications", new Notifications("notifications")); - commands.put("party", new Party("party")); - commands.put("rangedspy", new RangedSpy("rangedspy")); - commands.put("removemessage", new Removemessage("removemessage")); - commands.put("reply", new Reply("reply")); - commands.put("setchannel", new Setchannel("setchannel")); - commands.put("setchannelall", new Setchannelall("setchannelall")); - commands.put("spy", new Spy("spy")); - commands.put("unmute", new Unmute("unmute")); - commands.put("unmuteall", new Unmuteall("unmuteall")); - commands.put("venturechatgui", new VentureChatGui("venturechatgui")); - commands.put("messagetoggle", new MessageToggle("messagetoggle")); - commandExecutor = new MineverseCommandExecutor(commands); - for(String command : commands.keySet()) { - this.getCommand(command).setExecutor(commandExecutor); - } - - channelListener = new Channel(); - signListener = new SignListener(this, ccInfo); - chatListener = new ChatListener(this, ccInfo, bot); - commandListener = new CommandListener(this, ccInfo, aaInfo, bot); - - PluginManager pluginManager = getServer().getPluginManager(); - pluginManager.registerEvents(channelListener, this); - pluginManager.registerEvents(chatListener, this); - pluginManager.registerEvents(signListener, this); - pluginManager.registerEvents(commandListener, this); - if(!VersionHandler.is1_7_10() && !VersionHandler.is1_7_9() && !VersionHandler.is1_7_2()) { - capeListener = new CapeListener(); - pluginManager.registerEvents(capeListener, this); - } - loginListener = new LoginListener(this, ccInfo); - pluginManager.registerEvents(loginListener, this); - this.registerPacketListeners(); - try { - this.loadNMS(); - } - catch(ClassNotFoundException e) { - e.printStackTrace(); - } - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Attaching to Executors")); - try { - // if(VersionHandler.is1_7_9()) cmap = V1_7_9.v1_7_9(); - // if(VersionHandler.is1_7_10()) cmap = V1_7_10.v1_7_10(); - if(VersionHandler.is1_8()) cmap = V1_8.v1_8(); - } - catch(Exception e) { - e.printStackTrace(); - } - this.quickchat = false; - if(cmap == null) { - this.quickchat = false; - // log.info(String.format("[" + String.format("VentureChat" + "]" + - // " - Unrecognized server version, Quickchat commands not - // registering", - // getDescription().getName()))); - // log.info(String.format("[" + String.format("VentureChat" + "]" + - // " - Unrecognized server version, Alias commands not registering", - // getDescription().getName()))); - } - else { - /*Don't run this code right now - for(ChatChannel c : ccInfo.getChannelsInfo()) { - CCommand cmd = new CCommand(c.getAlias()); - cmap.register("", cmd); - cmd.setExecutor(commandListener); - } - for(Alias a : aaInfo.getAliases()) { - CCommand cmd = new CCommand(a.getName()); - cmap.register("", cmd); - } - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Registering Alias commands")); - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Registering Quickchat commands")); - */ - } - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Establishing BungeeCord")); - Bukkit.getMessenger().registerOutgoingPluginChannel(this, "VentureChat"); - Bukkit.getMessenger().registerIncomingPluginChannel(this, "VentureChat", this); - if(pluginManager.isPluginEnabled("Towny")) { - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Enabling Towny Formatting")); - } - if(pluginManager.isPluginEnabled("Jobs")) { - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Enabling Jobs Formatting")); - } - if(pluginManager.isPluginEnabled("Factions")) { - String version = pluginManager.getPlugin("Factions").getDescription().getVersion(); - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Enabling Factions Formatting version " + version)); - } - if(pluginManager.isPluginEnabled("Heroes")) { - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Enabling Heroes Formatting")); - } - if(pluginManager.isPluginEnabled("PlaceholderAPI")) { - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Enabling PlaceholderAPI Hook")); - } - boolean hooked = PlaceholderAPI.registerPlaceholderHook("venturechat", new VentureChatPlaceholders()); - if(hooked) { - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Added placeholders to PlaceholderAPI!")); - } - else { - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - &cPlaceholders were not added to PlaceholderAPI!")); - } - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Loading player data")); - BukkitScheduler scheduler = Bukkit.getServer().getScheduler(); - scheduler.scheduleSyncRepeatingTask(this, new Runnable() { - @Override - public void run() { - PlayerData.savePlayerData(); - if(getConfig().getString("loglevel", "info").equals("debug")) { - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Saving Player Data")); - } - } - }, 0L, getConfig().getInt("saveinterval") * 1200); - scheduler.scheduleSyncRepeatingTask(this, new Runnable() { - @Override - public void run() { - for(MineverseChatPlayer p : MineverseChat.players) { - //Calendar currentDate = Calendar.getInstance(); - //SimpleDateFormat formatter = new SimpleDateFormat("dd:HH:mm:ss"); - //String date = formatter.format(currentDate.getTime()); - //String[] datearray = date.split(":"); - //int time = (Integer.parseInt(datearray[0]) * 1440) + (Integer.parseInt(datearray[1]) * 60) + (Integer.parseInt(datearray[2])); - - int time = (int) (System.currentTimeMillis() / 60000); - - for(String c : p.getMutes().keySet()) { - ChatChannel channel = ccInfo.getChannelInfo(c); - int timemark = p.getMutes().get(channel.getName()); - if(timemark == 0) return; - // System.out.println(time + " " + timemark); - if(time > timemark) { - p.removeMute(channel.getName()); - if(p.isOnline()) p.getPlayer().sendMessage(ChatColor.RED + "You have just been unmuted in: " + ChatColor.valueOf(channel.getColor().toUpperCase()) + channel.getName()); - else p.setModified(true); - } - } - } - if(getConfig().getString("loglevel", "info").equals("debug")) { - // log.info(String.format("[" + - // String.format(getConfig().getString("pluginname", - // "VentureChat") + "]" + " - Updating Player Mutes", - // getDescription().getName()))); - } - } - }, 0L, 20L); - this.firstRun = false; - } - - @SuppressWarnings("unchecked") - public void unregister(String name) { - try { - ((Map) knownCommands.get((SimpleCommandMap) commandMap.get(Bukkit.getServer()))).remove(name); - } - catch(Exception e) { - } - } - - @SuppressWarnings("unused") - private void loadCommandMap() { - try { - commandMap = Bukkit.getServer().getClass().getDeclaredField("commandMap"); - commandMap.setAccessible(true); - knownCommands = SimpleCommandMap.class.getDeclaredField("knownCommands"); - knownCommands.setAccessible(true); - } - catch(Exception e) { - } - } - - public CommandMap getCommandMap() { - return cmap; - } - - public static MineverseChat getInstance() { - return MineverseChat.plugin; - } - - private void registerPacketListeners() { - this.protocolManager = ProtocolLibrary.getProtocolManager(); - this.packetListener = new PacketListener(this); - this.protocolManager.addPacketListener(this.packetListener); - } - - private void loadNMS() throws ClassNotFoundException { - /*if(VersionHandler.is1_7_10()) { - try { - MineverseChat.posField = MinecraftReflection.getMinecraftClass("PacketPlayOutChat").getDeclaredField("b"); - MineverseChat.posField.setAccessible(true); - } - catch(NoSuchFieldException | SecurityException localNoSuchFieldException) { - localNoSuchFieldException.printStackTrace(); - } - try { - MineverseChat.messageMethod = MinecraftReflection.getMinecraftClass("IChatBaseComponent").getDeclaredMethod("c", new Class[0]); - MineverseChat.messageMethod.setAccessible(true); - } - catch(SecurityException | NoSuchMethodException e) { - e.printStackTrace(); - } - return; - }*/ - if(VersionHandler.is1_8() || VersionHandler.is1_7_10()) { - try { - MineverseChat.posField = MinecraftReflection.getMinecraftClass("PacketPlayOutChat").getDeclaredField("b"); - MineverseChat.posField.setAccessible(true); - } - catch(NoSuchFieldException | SecurityException localNoSuchFieldException) { - localNoSuchFieldException.printStackTrace(); - } - try { - MineverseChat.messageMethod = MinecraftReflection.getMinecraftClass("IChatBaseComponent").getDeclaredMethod("c", new Class[0]); - MineverseChat.messageMethod.setAccessible(true); - } - catch(SecurityException | NoSuchMethodException e) { - e.printStackTrace(); - } - } - else { - try { - MineverseChat.posField = MinecraftReflection.getMinecraftClass("PacketPlayOutChat").getDeclaredField("b"); - MineverseChat.posField.setAccessible(true); - } - catch(NoSuchFieldException | SecurityException localNoSuchFieldException) { - localNoSuchFieldException.printStackTrace(); - } - try { - MineverseChat.messageMethod = MinecraftReflection.getMinecraftClass("ChatBaseComponent").getDeclaredMethod("toPlainText", new Class[0]); - MineverseChat.messageMethod.setAccessible(true); - } - catch(SecurityException | NoSuchMethodException e) { - e.printStackTrace(); - } - try { - MineverseChat.chatMessageType = getNMSClass("ChatMessageType"); - } - catch(Exception e) { - e.printStackTrace(); - } - } - } - - private Class getNMSClass(String name) { - try { - return Class.forName("net.minecraft.server." + getVersion() + "." + name); - } catch (ClassNotFoundException e) { - e.printStackTrace(); - return null; - } - } - - private String getVersion() { - return Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3]; - } - - private boolean setupPermissions() { - RegisteredServiceProvider permissionProvider = getServer().getServicesManager().getRegistration(net.milkbowl.vault.permission.Permission.class); - if(permissionProvider != null) { - permission = permissionProvider.getProvider(); - } - return(permission != null); - } - - private boolean setupChat() { - RegisteredServiceProvider chatProvider = getServer().getServicesManager().getRegistration(net.milkbowl.vault.chat.Chat.class); - if(chatProvider != null) { - chat = chatProvider.getProvider(); - } - return(chat != null); - } - - public long getLineLength() { - return LINELENGTH; - } - - @Override - public void onDisable() { - PlayerData.savePlayerData(); - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Disabling...")); - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Disabled Successfully")); - if(irc) { - bot.terminate(); - } - if(MineverseChat.cape != null) { - MineverseChat.cape.remove(); - } - } - - public void setLogLevel(String loglevel) { - if(LogLevels.valueOf(loglevel) != null) { - curLogLevel = LogLevels.valueOf(loglevel); - } - else { - curLogLevel = LogLevels.INFO; - } - } - - public void logme(LogLevels level, String location, String logline) { - if(level.ordinal() >= curLogLevel.ordinal()) { - log.log(Level.INFO, "[VentureChat]: {0}:{1} : {2}", new Object[] { level.toString(), location, logline }); - } - } - - public void synchronize(MineverseChatPlayer mcp, boolean changes) { - // System.out.println("Sync started..."); - ByteArrayOutputStream outstream = new ByteArrayOutputStream(); - DataOutputStream out = new DataOutputStream(outstream); - try { - out.writeUTF("Sync"); - if(!changes) { - out.writeUTF("Receive"); - // System.out.println(mcp.getPlayer().getServer().getServerName()); - // out.writeUTF(mcp.getPlayer().getServer().getServerName()); - out.writeUTF(mcp.getUUID().toString()); - } - else { - out.writeUTF("Update"); - out.writeUTF(mcp.getUUID().toString()); - // out.writeUTF("Channels"); - int channelCount = 0; - for(String c : mcp.getListening()) { - ChatChannel channel = ccInfo.getChannelInfo(c); - if(channel.getBungee()) { - channelCount++; - } - } - out.write(channelCount); - for(String c : mcp.getListening()) { - ChatChannel channel = ccInfo.getChannelInfo(c); - if(channel.getBungee()) { - out.writeUTF(channel.getName()); - } - } - // out.writeUTF("Mutes"); - int muteCount = 0; - for(String c : mcp.getMutes().keySet()) { - ChatChannel channel = ccInfo.getChannelInfo(c); - if(channel.getBungee()) { - muteCount++; - } - } - // System.out.println(muteCount + " mutes"); - out.write(muteCount); - for(String c : mcp.getMutes().keySet()) { - ChatChannel channel = ccInfo.getChannelInfo(c); - if(channel.getBungee()) { - out.writeUTF(channel.getName()); - } - } - int ignoreCount = 0; - for(@SuppressWarnings("unused") - UUID c : mcp.getIgnores()) { - ignoreCount++; - } - out.write(ignoreCount); - for(UUID c : mcp.getIgnores()) { - out.writeUTF(c.toString()); - } - out.writeBoolean(mcp.isSpy()); - out.writeBoolean(mcp.getMessageToggle()); - } - for(MineverseChatPlayer p : MineverseChat.onlinePlayers) { - p.getPlayer().sendPluginMessage(this, "VentureChat", outstream.toByteArray()); - break; - } - //System.out.println("Sync start bottom..."); - out.close(); - } - catch(IOException e) { - e.printStackTrace(); - } - } - - public void updatePlayerList(MineverseChatPlayer mcp, boolean request) { - ByteArrayOutputStream outstream = new ByteArrayOutputStream(); - DataOutputStream out = new DataOutputStream(outstream); - try { - out.writeUTF("Sync"); - if(request) { - out.writeUTF("PlayersReceive"); - // System.out.println(mcp.getPlayer().getServer().getServerName()); - out.writeUTF(this.getServer().getServerName()); - } - else { - out.writeUTF("PlayersUpdate"); - // System.out.println(networkPlayers.keySet().size()); - out.write(networkPlayers.keySet().size()); - for(String p : networkPlayers.keySet()) { - out.writeUTF(p + "," + networkPlayers.get(p)); - } - } - mcp.getPlayer().sendPluginMessage(this, "VentureChat", outstream.toByteArray()); - // System.out.println("Sync start bottom..."); - out.close(); - } - catch(IOException e) { - e.printStackTrace(); - } - } - - @Override - public void onPluginMessageReceived(String channel, Player player, byte[] message) { - if(!channel.equals("VentureChat")) { - return; - } - try { - DataInputStream msgin = new DataInputStream(new ByteArrayInputStream(message)); - // System.out.println(msgin.available() + " size"); - String subchannel = msgin.readUTF(); - if(subchannel.equals("Chat")) { - String chatchannel = msgin.readUTF(); - String chat = msgin.readUTF(); - String playerName = msgin.readUTF(); - String lastMessage = msgin.readUTF(); - String f = msgin.readUTF(); - String c = msgin.readUTF(); - String json = msgin.readUTF(); - MineverseChat.lastChatMessage = new ChatMessage(playerName, lastMessage, lastMessage.hashCode(), f, c, chatchannel); - lastJson = json; - Bukkit.getConsoleSender().sendMessage(chat); - MineverseChatPlayer sender = MineverseChatAPI.getMineverseChatPlayer(playerName); - for(MineverseChatPlayer p : MineverseChat.onlinePlayers) { - // System.out.println(p.getName()); - if(p.isOnline() && p.getListening().contains(ccInfo.getChannelInfo(chatchannel).getName())) { - if(plugin.getConfig().getBoolean("ignorechat", false)) { - // System.out.println(p.getIgnores()); - if(sender == null) { - // System.out.println("null sender"); - p.getPlayer().sendMessage(chat); - continue; - } - if(!p.getIgnores().contains(sender.getUUID())) { - // System.out.println("Chat sent"); - p.getPlayer().sendMessage(chat); - } - continue; - } - p.getPlayer().sendMessage(chat); - } - } - } - if(subchannel.equals("RemoveMessage")) { - String hash = msgin.readUTF(); - this.getServer().dispatchCommand(this.getServer().getConsoleSender(), "removemessage " + hash); - } - if(subchannel.equals("PlayersUpdate")) { - networkPlayers.clear(); - int size = msgin.read(); - for(int a = 1; a <= size; a++) { - String p = msgin.readUTF(); - String[] parts = p.split(","); - networkPlayers.put(parts[0], parts[1]); - System.out.print(p); - } - } - if(subchannel.equals("Sync")) { - if(plugin.getConfig().getString("loglevel", "info").equals("debug")) { - Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Received update...")); - } - String uuid = msgin.readUTF(); - MineverseChatPlayer p = MineverseChatAPI.getMineverseChatPlayer(UUID.fromString(uuid)); - for(Object ch : p.getListening().toArray()) { - String c = ch.toString(); - ChatChannel cha = ccInfo.getChannelInfo(c); - if(cha.getBungee()) { - p.removeListening(c); - } - } - int size = msgin.read(); - // System.out.println(size); - for(int a = 0; a < size; a++) { - String ch = msgin.readUTF(); - if(ccInfo.isChannel(ch)) { - ChatChannel cha = ccInfo.getChannelInfo(ch); - if(cha.hasPermission() && p.getPlayer().hasPermission(cha.getPermission())) { - p.addListening(ch); - } - } - } - for(Object o : p.getMutes().keySet().toArray()) { - ChatChannel ch = ccInfo.getChannelInfo((String) o); - if(ch.getBungee()) { - p.removeMute(ch.getName()); - } - } - int sizeB = msgin.read(); - // System.out.println(sizeB + " mute size"); - for(int b = 0; b < sizeB; b++) { - String ch = msgin.readUTF(); - // System.out.println(ch); - if(ccInfo.isChannel(ch)) { - p.addMute(ch, 0); - } - } - // System.out.println(msgin.available() + " available before"); - p.setSpy(msgin.readBoolean()); - p.setMessageToggle(msgin.readBoolean()); - // System.out.println(msgin.available() + " available after"); - for(Object o : p.getIgnores().toArray()) { - p.removeIgnore((UUID) o); - } - int sizeC = msgin.read(); - // System.out.println(sizeC + " ignore size"); - for(int c = 0; c < sizeC; c++) { - String i = msgin.readUTF(); - // System.out.println(i); - p.addIgnore(UUID.fromString(i)); - } - if(!p.hasPlayed()) { - for(ChatChannel ch : ccInfo.getAutojoinList()) { - if(ch.hasPermission()) { - if(p.getPlayer().hasPermission(ch.getPermission())) { - p.addListening(ch.getName()); - } - } - else { - p.addListening(ch.getName()); - } - } - p.setHasPlayed(true); - plugin.synchronize(p, true); - } - } - if(subchannel.equals("Ignore")) { - String identifier = msgin.readUTF(); - if(identifier.equals("Send")) { - String server = msgin.readUTF(); - String receiver = msgin.readUTF(); - MineverseChatPlayer p = MineverseChatAPI.getOnlineMineverseChatPlayer(receiver); - UUID sender = UUID.fromString(msgin.readUTF()); - ByteArrayOutputStream stream = new ByteArrayOutputStream(); - DataOutputStream out = new DataOutputStream(stream); - if(p == null || !p.isOnline()) { - out.writeUTF("Ignore"); - out.writeUTF("Offline"); - out.writeUTF(server); - out.writeUTF(receiver); - out.writeUTF(sender.toString()); - player.sendPluginMessage(this, "VentureChat", stream.toByteArray()); - return; - } - p.setReplyPlayer(sender); - out.writeUTF("Ignore"); - out.writeUTF("Echo"); - out.writeUTF(server); - out.writeUTF(p.getNickname()); - out.writeUTF(sender.toString()); - player.sendPluginMessage(this, "VentureChat", stream.toByteArray()); - return; - } - if(identifier.equals("Offline")) { - String receiver = msgin.readUTF(); - UUID sender = UUID.fromString(msgin.readUTF()); - MineverseChatPlayer p = MineverseChatAPI.getOnlineMineverseChatPlayer(sender); - p.getPlayer().sendMessage(ChatColor.RED + "Player: " + ChatColor.GOLD + receiver + ChatColor.RED + " is not online."); - } - if(identifier.equals("Echo")) { - String receiver = msgin.readUTF(); - UUID sender = UUID.fromString(msgin.readUTF()); - MineverseChatPlayer p = MineverseChatAPI.getOnlineMineverseChatPlayer(sender); - MineverseChatPlayer r = MineverseChatAPI.getMineverseChatPlayer(receiver); - String rName = Format.FormatStringAll(receiver); - if(r != null) { - rName = Format.FormatStringAll(r.getNickname()); - } - p.getPlayer().sendMessage(ChatColor.GOLD + "You are now ignoring player: " + ChatColor.RED + rName); - p.addIgnore(r.getUUID()); - this.synchronize(p, true); - } - } - if(subchannel.equals("Message")) { - String identifier = msgin.readUTF(); - if(identifier.equals("Send")) { - String server = msgin.readUTF(); - String receiver = msgin.readUTF(); - MineverseChatPlayer p = MineverseChatAPI.getOnlineMineverseChatPlayer(receiver); - UUID sender = UUID.fromString(msgin.readUTF()); - String sName = msgin.readUTF(); - MineverseChatPlayer s = MineverseChatAPI.getMineverseChatPlayer(sender); - String msg = msgin.readUTF(); - String echo = msgin.readUTF(); - String spy = msgin.readUTF(); - ByteArrayOutputStream stream = new ByteArrayOutputStream(); - DataOutputStream out = new DataOutputStream(stream); - // System.out.println((p == null) + " null"); - if(p != null) { - // System.out.println(p.isOnline() + " online"); - } - if(p == null || !p.isOnline()) { - out.writeUTF("Message"); - out.writeUTF("Offline"); - out.writeUTF(server); - out.writeUTF(receiver); - out.writeUTF(sender.toString()); - player.sendPluginMessage(this, "VentureChat", stream.toByteArray()); - return; - } - if(p.getIgnores().contains(sender)) { - out.writeUTF("Message"); - out.writeUTF("Ignore"); - out.writeUTF(server); - out.writeUTF(receiver); - out.writeUTF(sender.toString()); - player.sendPluginMessage(this, "VentureChat", stream.toByteArray()); - return; - } - if(!p.getMessageToggle()) { - out.writeUTF("Message"); - out.writeUTF("Blocked"); - out.writeUTF(server); - out.writeUTF(receiver); - out.writeUTF(sender.toString()); - player.sendPluginMessage(this, "VentureChat", stream.toByteArray()); - return; - } - if(s != null) { - sName = Format.FormatStringAll(s.getNickname()); - } - else { - UUID uuid = sender; - String name = sName; - ChatChannel current = ccInfo.getDefaultChannel(); - Set ignores = new HashSet(); - Set listening = new HashSet(); - listening.add(current.getName()); - HashMap mutes = new HashMap(); - Set blockedCommands = new HashSet(); - List mail = new ArrayList(); - String jsonFormat = "Default"; - s = new MineverseChatPlayer(uuid, name, current, ignores, listening, mutes, blockedCommands, mail, false, null, true, true, name, jsonFormat, false, false, false, true, true); - MineverseChat.players.add(s); - } - p.getPlayer().sendMessage(msg.replace("{playerfrom}", sName).replace("{playerto}", Format.FormatStringAll(p.getNickname()))); - 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); - } - } - p.setReplyPlayer(sender); - out.writeUTF("Message"); - out.writeUTF("Echo"); - out.writeUTF(server); - out.writeUTF(p.getNickname()); - out.writeUTF(sender.toString()); - out.writeUTF(sName); - out.writeUTF(echo); - out.writeUTF(spy); - player.sendPluginMessage(this, "VentureChat", stream.toByteArray()); - return; - } - if(identifier.equals("Offline")) { - String receiver = msgin.readUTF(); - UUID sender = UUID.fromString(msgin.readUTF()); - MineverseChatPlayer p = MineverseChatAPI.getOnlineMineverseChatPlayer(sender); - p.getPlayer().sendMessage(ChatColor.RED + "Player: " + ChatColor.GOLD + receiver + ChatColor.RED + " is not online."); - p.setReplyPlayer(null); - } - if(identifier.equals("Ignore")) { - String receiver = msgin.readUTF(); - UUID sender = UUID.fromString(msgin.readUTF()); - MineverseChatPlayer p = MineverseChatAPI.getOnlineMineverseChatPlayer(sender); - p.getPlayer().sendMessage(ChatColor.GOLD + receiver + " is currently ignoring your messages."); - } - if(identifier.equals("Blocked")) { - String receiver = msgin.readUTF(); - UUID sender = UUID.fromString(msgin.readUTF()); - MineverseChatPlayer p = MineverseChatAPI.getOnlineMineverseChatPlayer(sender); - p.getPlayer().sendMessage(ChatColor.GOLD + receiver + " is currently blocking messages."); - } - if(identifier.equals("Echo")) { - String receiver = msgin.readUTF(); - UUID sender = UUID.fromString(msgin.readUTF()); - MineverseChatPlayer p = MineverseChatAPI.getOnlineMineverseChatPlayer(sender); - MineverseChatPlayer r = MineverseChatAPI.getMineverseChatPlayer(receiver); - String echo = msgin.readUTF(); - String rName = Format.FormatStringAll(receiver); - if(r != null) { - rName = Format.FormatStringAll(r.getNickname()); - p.setReplyPlayer(r.getUUID()); - } - p.getPlayer().sendMessage(echo.replace("{playerfrom}", Format.FormatStringAll(p.getNickname())).replace("{playerto}", rName)); - } - if(identifier.equals("Spy")) { - String receiver = msgin.readUTF(); - MineverseChatPlayer r = MineverseChatAPI.getMineverseChatPlayer(receiver); - UUID sender = UUID.fromString(msgin.readUTF()); - MineverseChatPlayer p = MineverseChatAPI.getOnlineMineverseChatPlayer(sender); - String sName = msgin.readUTF(); - String spy = msgin.readUTF(); - String rName = receiver; - if(r != null) { - rName = Format.FormatStringAll(r.getNickname()); - } - if(p != null) { - sName = Format.FormatStringAll(p.getNickname()); - } - for(MineverseChatPlayer pl : onlinePlayers) { - if(pl.isSpy() && !pl.getName().equals(sName) && !pl.getName().equals(rName)) { - pl.getPlayer().sendMessage(spy.replace("{playerto}", rName).replace("{playerfrom}", sName)); - } - } - } - } - 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 = ccInfo.getChannelInfo(chatchannel); - ByteArrayOutputStream stream = new ByteArrayOutputStream(); - DataOutputStream out = new DataOutputStream(stream); - if(cc == null) { - try { - out.writeUTF("Mute"); - out.writeUTF("Channel"); - out.writeUTF(sendplayer); - out.writeUTF(chatchannel); - player.sendPluginMessage(this, "VentureChat", 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, "VentureChat", 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, "VentureChat", 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, "VentureChat", 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, "VentureChat", stream.toByteArray()); - } - catch(Exception e) { - e.printStackTrace(); - } - return; - } - try { - out.writeUTF("Mute"); - out.writeUTF("Time"); - out.writeUTF(sendplayer); - out.writeUTF(time); - player.sendPluginMessage(this, "VentureChat", 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, "VentureChat", 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, "VentureChat", 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); - ByteArrayOutputStream stream = new ByteArrayOutputStream(); - DataOutputStream out = new DataOutputStream(stream); - if(mp == null) { - try { - out.writeUTF("Muteall"); - out.writeUTF("Player"); - out.writeUTF(sendplayer); - out.writeUTF(muteplayer); - out.writeUTF(server); - player.sendPluginMessage(this, "VentureChat", stream.toByteArray()); - } - catch(Exception e) { - e.printStackTrace(); - } - return; - } - boolean bungee = false; - for(ChatChannel c : ccInfo.getChannelsInfo()) { - 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, "VentureChat", 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); - ByteArrayOutputStream stream = new ByteArrayOutputStream(); - DataOutputStream out = new DataOutputStream(stream); - if(mp == null) { - try { - out.writeUTF("Unmuteall"); - out.writeUTF("Player"); - out.writeUTF(sendplayer); - out.writeUTF(muteplayer); - out.writeUTF(server); - player.sendPluginMessage(this, "VentureChat", stream.toByteArray()); - } - catch(Exception e) { - e.printStackTrace(); - } - return; - } - boolean bungee = false; - for(ChatChannel c : ccInfo.getChannelsInfo()) { - 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, "VentureChat", 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 = ccInfo.getChannelInfo(chatchannel); - ByteArrayOutputStream stream = new ByteArrayOutputStream(); - DataOutputStream out = new DataOutputStream(stream); - if(cc == null) { - try { - out.writeUTF("Unmute"); - out.writeUTF("Channel"); - out.writeUTF(sendplayer); - out.writeUTF(chatchannel); - player.sendPluginMessage(this, "VentureChat", 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, "VentureChat", 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, "VentureChat", 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, "VentureChat", stream.toByteArray()); - } - catch(Exception e) { - e.printStackTrace(); - } - return; - } - } - catch(Exception e) { - e.printStackTrace(); - } - } +/* + * VentureChat plugin for Minecraft servers running Bukkit or Spigot software. + * @author Aust1n46 + */ +package mineverse.Aust1n46.chat; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.File; +import java.io.IOException; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.sql.Connection; +import java.sql.SQLException; +import java.sql.Statement; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.StringTokenizer; +import java.util.UUID; +import java.util.logging.Level; +import java.util.logging.Logger; + +import net.milkbowl.vault.chat.Chat; +import net.milkbowl.vault.permission.Permission; + +import mineverse.Aust1n46.chat.irc.Bot; +import mineverse.Aust1n46.chat.irc.command.IRCCommandInfo; +//import mineverse.Aust1n46.chat.json.JsonButtonInfo; +import mineverse.Aust1n46.chat.json.JsonFormatInfo; +import mineverse.Aust1n46.chat.listeners.CapeListener; +import mineverse.Aust1n46.chat.listeners.CommandListener; +import mineverse.Aust1n46.chat.listeners.LoginListener; +import mineverse.Aust1n46.chat.listeners.ChatListener; +import mineverse.Aust1n46.chat.listeners.PacketListener; +import mineverse.Aust1n46.chat.listeners.SignListener; +//import mineverse.Aust1n46.chat.alias.Alias; +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.channel.ChatChannelInfo; +//import mineverse.Aust1n46.chat.command.CCommand; +import mineverse.Aust1n46.chat.command.MineverseCommand; +import mineverse.Aust1n46.chat.command.MineverseCommandExecutor; +import mineverse.Aust1n46.chat.command.chat.Broadcast; +import mineverse.Aust1n46.chat.command.chat.Buttons; +import mineverse.Aust1n46.chat.command.chat.Channel; +import mineverse.Aust1n46.chat.command.chat.Channelinfo; +import mineverse.Aust1n46.chat.command.chat.Chatinfo; +import mineverse.Aust1n46.chat.command.chat.Chatreload; +import mineverse.Aust1n46.chat.command.chat.Chlist; +import mineverse.Aust1n46.chat.command.chat.Chwho; +import mineverse.Aust1n46.chat.command.chat.Clearchat; +import mineverse.Aust1n46.chat.command.chat.Commandblock; +import mineverse.Aust1n46.chat.command.chat.Commandspy; +import mineverse.Aust1n46.chat.command.chat.Config; +import mineverse.Aust1n46.chat.command.chat.Edit; +import mineverse.Aust1n46.chat.command.chat.Filter; +import mineverse.Aust1n46.chat.command.chat.Force; +import mineverse.Aust1n46.chat.command.chat.Forceall; +import mineverse.Aust1n46.chat.command.chat.Kickchannel; +import mineverse.Aust1n46.chat.command.chat.Kickchannelall; +import mineverse.Aust1n46.chat.command.chat.Leave; +import mineverse.Aust1n46.chat.command.chat.Listen; +import mineverse.Aust1n46.chat.command.chat.Mail; +import mineverse.Aust1n46.chat.command.chat.Me; +import mineverse.Aust1n46.chat.command.chat.Nick; +import mineverse.Aust1n46.chat.command.chat.Party; +import mineverse.Aust1n46.chat.command.chat.RangedSpy; +import mineverse.Aust1n46.chat.command.chat.Removemessage; +import mineverse.Aust1n46.chat.command.chat.Setchannel; +import mineverse.Aust1n46.chat.command.chat.Setchannelall; +import mineverse.Aust1n46.chat.command.chat.VentureChatGui; +import mineverse.Aust1n46.chat.command.chat.Venturechat; +import mineverse.Aust1n46.chat.command.message.Afk; +import mineverse.Aust1n46.chat.command.message.Ignore; +import mineverse.Aust1n46.chat.command.message.Message; +import mineverse.Aust1n46.chat.command.message.MessageToggle; +import mineverse.Aust1n46.chat.command.message.Notifications; +import mineverse.Aust1n46.chat.command.message.Reply; +import mineverse.Aust1n46.chat.command.message.Spy; +import mineverse.Aust1n46.chat.command.mute.Mute; +import mineverse.Aust1n46.chat.command.mute.Muteall; +import mineverse.Aust1n46.chat.command.mute.Unmute; +import mineverse.Aust1n46.chat.command.mute.Unmuteall; +import mineverse.Aust1n46.chat.database.MySQL; +import mineverse.Aust1n46.chat.database.PlayerData; +import mineverse.Aust1n46.chat.gui.GuiSlotInfo; +import mineverse.Aust1n46.chat.utilities.Format; +import mineverse.Aust1n46.chat.versions.V1_8; +import mineverse.Aust1n46.chat.versions.VersionHandler; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandMap; +import org.bukkit.command.SimpleCommandMap; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.plugin.PluginManager; +import org.bukkit.plugin.RegisteredServiceProvider; +import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.plugin.messaging.PluginMessageListener; +import org.bukkit.scheduler.BukkitScheduler; +import org.bukkit.Sound; + +import com.comphenix.protocol.ProtocolLibrary; +import com.comphenix.protocol.ProtocolManager; +import com.comphenix.protocol.utility.MinecraftReflection; + +import me.clip.placeholderapi.PlaceholderAPI; + +public class MineverseChat extends JavaPlugin implements PluginMessageListener { + // Listeners -------------------------------- + private ChatListener chatListener; + private LoginListener loginListener; + private SignListener signListener; + private CommandListener commandListener; + private PacketListener packetListener; + private CapeListener capeListener; + private Channel channelListener; + public static String[] playerlist; + public static String playerlist_server; + public boolean ircListen; + public ProtocolManager protocolManager; + public static ChatMessage lastChatMessage; + public static String lastJson; + public static Method messageMethod; + public static Field posField; + public static Class chatMessageType; + private static Field commandMap; + private static Field knownCommands; + + // Executors -------------------------------- + private MineverseCommandExecutor commandExecutor; + private Map commands = new HashMap(); + + // MySQL ------------------------------------ + public Connection c = null; + public MySQL MySQL; + public boolean mysql = false; + + // SQLite ------------------------------------- + // public Connection lite = null; + + // Misc -------------------------------- + public static ChatChannelInfo ccInfo; + public static AliasInfo aaInfo; + public static JsonFormatInfo jfInfo; + // public static JsonButtonInfo jbInfo; + public static IRCCommandInfo ircInfo; + public static GuiSlotInfo gsInfo; + public boolean quickchat = true; + private static final Logger log = Logger.getLogger("Minecraft"); + private static MineverseChat plugin; + public static Set players = new HashSet(); + public static Set onlinePlayers = new HashSet(); + public static HashMap networkPlayers = new HashMap(); + public static ArmorStand cape; + public static ItemStack banner; + public static boolean capeToggle = false; + private boolean firstRun = true; + + // Vault -------------------------------- + public static Permission permission = null; + public static Chat chat = null; + public static CommandMap cmap; + + // Offline data ---------------------------- + public Map mutes = new HashMap(); + public Map> mail = new HashMap>(); + + // IRC Bot ----------- + public Bot bot; + public boolean irc = false; + + private LogLevels curLogLevel; + + public long LINELENGTH = 40; + + @Override + public void onEnable() { + plugin = this; + try { + Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Initializing...")); + if(!getDataFolder().exists()) { + getDataFolder().mkdirs(); + } + File file = new File(getDataFolder(), "config.yml"); + if(!file.exists()) { + Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Config not found! Generating file.")); + saveDefaultConfig(); + } + else { + Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Config found! Loading file.")); + } + + if(!new File(getDataFolder(), "defaultconfig.yml").exists()) { + saveResource("defaultconfig.yml", false); + } + } + catch(Exception ex) { + log.severe(String.format("[" + String.format("VentureChat") + "]" + " - Could not load configuration!\n " + ex, getDescription().getName())); + } + ccInfo = new ChatChannelInfo(this); + Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Checking for Vault...")); + // Set up Vault + if(!this.setupPermissions()) { + Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - &cCould not find Vault dependency, disabling.")); + Bukkit.getPluginManager().disablePlugin(this); + } + this.setupChat(); + // Log completion of initialization + Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Enabled Successfully")); + // Get config and handle + // Configuration + PlayerData.initialize(); + if(this.firstRun) { + for(String uuidString : PlayerData.getPlayerData().getConfigurationSection("players").getKeys(false)) { + UUID uuid = UUID.fromString(uuidString); + String name = PlayerData.getPlayerData().getConfigurationSection("players." + uuid).getString("name"); + String currentChannelName = PlayerData.getPlayerData().getConfigurationSection("players." + uuid).getString("current"); + ChatChannel currentChannel = ccInfo.isChannel(currentChannelName) ? ccInfo.getChannelInfo(currentChannelName) : ccInfo.getDefaultChannel(); + Set ignores = new HashSet(); + StringTokenizer i = new StringTokenizer(PlayerData.getPlayerData().getConfigurationSection("players." + uuidString).getString("ignores"), ","); + while(i.hasMoreTokens()) { + ignores.add(UUID.fromString(i.nextToken())); + } + Set listening = new HashSet(); + StringTokenizer l = new StringTokenizer(PlayerData.getPlayerData().getConfigurationSection("players." + uuidString).getString("listen"), ","); + while(l.hasMoreTokens()) { + String channel = l.nextToken(); + if(ccInfo.isChannel(channel)) { + listening.add(channel); + } + } + HashMap mutes = new HashMap(); + StringTokenizer m = new StringTokenizer(PlayerData.getPlayerData().getConfigurationSection("players." + uuidString).getString("mutes"), ","); + while(m.hasMoreTokens()) { + String[] parts = m.nextToken().split(":"); + if(ccInfo.isChannel(parts[0])) { + if(parts[1].equals("null")) { + log.info("[VentureChat] Null Mute Time: " + parts[0] + " " + name); + continue; + } + mutes.put(ccInfo.getChannelInfo(parts[0]).getName(), Integer.parseInt(parts[1])); + } + } + Set blockedCommands = new HashSet(); + StringTokenizer b = new StringTokenizer(PlayerData.getPlayerData().getConfigurationSection("players." + uuidString).getString("blockedcommands"), ","); + while(b.hasMoreTokens()) { + blockedCommands.add(b.nextToken()); + } + List mail = new ArrayList(); + StringTokenizer ma = new StringTokenizer(PlayerData.getPlayerData().getConfigurationSection("players." + uuidString).getString("mail"), ","); + while(ma.hasMoreTokens()) { + mail.add(ma.nextToken()); + } + boolean host = PlayerData.getPlayerData().getConfigurationSection("players." + uuidString).getBoolean("host"); + UUID party = PlayerData.getPlayerData().getConfigurationSection("players." + uuidString).getString("party").length() > 0 ? UUID.fromString(PlayerData.getPlayerData().getConfigurationSection("players." + uuidString).getString("party")) : null; + boolean filter = PlayerData.getPlayerData().getConfigurationSection("players." + uuidString).getBoolean("filter"); + boolean notifications = PlayerData.getPlayerData().getConfigurationSection("players." + uuidString).getBoolean("notifications"); + String nickname = PlayerData.getPlayerData().getConfigurationSection("players." + uuidString).getString("nickname"); + String jsonFormat = PlayerData.getPlayerData().getConfigurationSection("players." + uuidString).getString("jsonformat"); + boolean spy = PlayerData.getPlayerData().getConfigurationSection("players." + uuidString).getBoolean("spy", false); + boolean commandSpy = PlayerData.getPlayerData().getConfigurationSection("players." + uuidString).getBoolean("commandspy", false); + boolean rangedSpy = PlayerData.getPlayerData().getConfigurationSection("players." + uuidString).getBoolean("rangedspy", false); + boolean buttons = PlayerData.getPlayerData().getConfigurationSection("players." + uuidString).getBoolean("buttons", true); + boolean messageToggle = PlayerData.getPlayerData().getConfigurationSection("players." + uuidString).getBoolean("messagetoggle", true); + players.add(new MineverseChatPlayer(uuid, name, currentChannel, ignores, listening, mutes, blockedCommands, mail, host, party, filter, notifications, nickname, jsonFormat, spy, commandSpy, rangedSpy, buttons, messageToggle)); + } + } + else { + for(Player p : this.getServer().getOnlinePlayers()) { + MineverseChatPlayer mcp = MineverseChatAPI.getMineverseChatPlayer(p); + mcp.setOnline(true); + } + } + + Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Registering Listeners")); + // Channel information reference + ircInfo = new IRCCommandInfo(this); + aaInfo = new AliasInfo(this); + jfInfo = new JsonFormatInfo(this); + // jbInfo = new JsonButtonInfo(); + gsInfo = new GuiSlotInfo(); + + if(ccInfo == null) { + Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - &cConfiguration is BAD!")); + } + + if(this.getConfig().getConfigurationSection("mysql").getBoolean("enabled")) { + this.MySQL = new MySQL(this, getConfig().getConfigurationSection("mysql").getString("host"), getConfig().getConfigurationSection("mysql").getString("port"), getConfig().getConfigurationSection("mysql").getString("database"), getConfig().getConfigurationSection("mysql").getString("user"), getConfig().getConfigurationSection("mysql").getString("password")); + this.mysql = true; + try { + c = MySQL.openConnection(); + Statement statement = c.createStatement(); + statement.executeUpdate("CREATE TABLE IF NOT EXISTS `VentureChat` (`rowid` INT(7) NOT NULL AUTO_INCREMENT, `ChatTime` TEXT(100), `UUID` TEXT(100), `Name` TEXT(100), `Server` TEXT(100), `Channel` TEXT(100), `Text` TEXT(300), `Type` TEXT(100), PRIMARY KEY (rowid));"); + Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Connecting to MySQL Database")); + } + catch(ClassNotFoundException | SQLException e) { + Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - &cFailed to connect to MySQL Database, Reason: " + e)); + this.mysql = false; + } + } + + /* + * Future SQLite data storage option SQLite SQLite = new SQLite(this, + * "PlayerData.db"); try { lite = SQLite.openConnection(); Statement + * statement = lite.createStatement(); statement.executeUpdate( + * "CREATE TABLE IF NOT EXISTS `PlayerData` (`Player` TEXT(100), `UUID` TEXT(100), `Default Channel` TEXT(100), `Ignores` TEXT(1000), `Channels` TEXT(1000), `Mutes` TEXT(1000), `Timed Mutes` TEXT(1000), `Blocked Commands` TEXT(1000), `Date` TEXT(100));" + * ); //statement.executeUpdate( + * "INSERT INTO `PlayerData` (`Player`, `UUID`, `Default Channel`, `Ignores`, `Channels`, `Mutes`, `Timed Mutes`, `Blocked Commands`, `Date`) VALUES ('bob', 'derp', 'dered', '" + * +plugin.getServer().getServerName()+ + * "', 'Messaging_Component', 'COMMAND', 'Chat', 'HI', ':D');"); + * log.info(String.format("[" + + * String.format(getConfig().getString("pluginname", "VentureChat") + + * "]" + " - Connecting to SQLite Database", + * getDescription().getName()))); } catch(ClassNotFoundException | + * SQLException e) { e.printStackTrace(); } + */ + + // this.loadCommandMap(); + // this.unregister("msg"); + + if(this.getConfig().getConfigurationSection("irc").getBoolean("enabled", false)) { + bot = new Bot(this, ccInfo, ircInfo); + bot.init(); + irc = true; + } + + commands.put("afk", new Afk("afk")); + commands.put("buttons", new Buttons("button")); + commands.put("broadcast", new Broadcast("broadcast")); + commands.put("channel", new Channel("channel")); + commands.put("join", new Channel("join")); + commands.put("channelinfo", new Channelinfo("channelinfo")); + commands.put("chatinfo", new Chatinfo("chatinfo")); + commands.put("chatreload", new Chatreload("chatreload")); + commands.put("chlist", new Chlist("chlist")); + commands.put("chwho", new Chwho("chwho")); + commands.put("clearchat", new Clearchat("clearchat")); + commands.put("commandblock", new Commandblock("commandblock")); + commands.put("commandspy", new Commandspy("commandspy")); + commands.put("config", new Config("config")); + commands.put("edit", new Edit("edit")); + commands.put("filter", new Filter("filter")); + commands.put("force", new Force("force")); + commands.put("forceall", new Forceall("forceall")); + commands.put("ignore", new Ignore("ignore")); + commands.put("kickchannel", new Kickchannel("kickchannel")); + commands.put("kickchannelall", new Kickchannelall("kickchannelall")); + commands.put("leave", new Leave("leave")); + commands.put("listen", new Listen("listen")); + commands.put("mail", new Mail("mail")); + commands.put("me", new Me("me")); + commands.put("message", new Message("message")); + commands.put("tell", new Message("tell")); + commands.put("whisper", new Message("whisper")); + commands.put("venturechat", new Venturechat("venturechat")); + commands.put("mute", new Mute("mute")); + commands.put("muteall", new Muteall("muteall")); + commands.put("nick", new Nick("nick")); + commands.put("notifications", new Notifications("notifications")); + commands.put("party", new Party("party")); + commands.put("rangedspy", new RangedSpy("rangedspy")); + commands.put("removemessage", new Removemessage("removemessage")); + commands.put("reply", new Reply("reply")); + commands.put("setchannel", new Setchannel("setchannel")); + commands.put("setchannelall", new Setchannelall("setchannelall")); + commands.put("spy", new Spy("spy")); + commands.put("unmute", new Unmute("unmute")); + commands.put("unmuteall", new Unmuteall("unmuteall")); + commands.put("venturechatgui", new VentureChatGui("venturechatgui")); + commands.put("messagetoggle", new MessageToggle("messagetoggle")); + commandExecutor = new MineverseCommandExecutor(commands); + for(String command : commands.keySet()) { + this.getCommand(command).setExecutor(commandExecutor); + } + + channelListener = new Channel(); + signListener = new SignListener(this, ccInfo); + chatListener = new ChatListener(this, ccInfo, bot); + commandListener = new CommandListener(this, ccInfo, aaInfo, bot); + + PluginManager pluginManager = getServer().getPluginManager(); + pluginManager.registerEvents(channelListener, this); + pluginManager.registerEvents(chatListener, this); + pluginManager.registerEvents(signListener, this); + pluginManager.registerEvents(commandListener, this); + if(!VersionHandler.is1_7_10() && !VersionHandler.is1_7_9() && !VersionHandler.is1_7_2()) { + capeListener = new CapeListener(); + pluginManager.registerEvents(capeListener, this); + } + loginListener = new LoginListener(this, ccInfo); + pluginManager.registerEvents(loginListener, this); + this.registerPacketListeners(); + try { + this.loadNMS(); + } + catch(ClassNotFoundException e) { + e.printStackTrace(); + } + Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Attaching to Executors")); + try { + // if(VersionHandler.is1_7_9()) cmap = V1_7_9.v1_7_9(); + // if(VersionHandler.is1_7_10()) cmap = V1_7_10.v1_7_10(); + if(VersionHandler.is1_8()) cmap = V1_8.v1_8(); + } + catch(Exception e) { + e.printStackTrace(); + } + this.quickchat = false; + if(cmap == null) { + this.quickchat = false; + // log.info(String.format("[" + String.format("VentureChat" + "]" + + // " - Unrecognized server version, Quickchat commands not + // registering", + // getDescription().getName()))); + // log.info(String.format("[" + String.format("VentureChat" + "]" + + // " - Unrecognized server version, Alias commands not registering", + // getDescription().getName()))); + } + else { + /* + * Don't run this code right now for(ChatChannel c : + * ccInfo.getChannelsInfo()) { CCommand cmd = new + * CCommand(c.getAlias()); cmap.register("", cmd); + * cmd.setExecutor(commandListener); } for(Alias a : + * aaInfo.getAliases()) { CCommand cmd = new CCommand(a.getName()); + * cmap.register("", cmd); } + * Bukkit.getConsoleSender().sendMessage(Format. + * FormatStringAll("&8[&eVentureChat&8]&e - Registering Alias commands" + * )); Bukkit.getConsoleSender().sendMessage(Format. + * FormatStringAll("&8[&eVentureChat&8]&e - Registering Quickchat commands" + * )); + */ + } + Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Establishing BungeeCord")); + Bukkit.getMessenger().registerOutgoingPluginChannel(this, "VentureChat"); + Bukkit.getMessenger().registerIncomingPluginChannel(this, "VentureChat", this); + if(pluginManager.isPluginEnabled("Towny")) { + Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Enabling Towny Formatting")); + } + if(pluginManager.isPluginEnabled("Jobs")) { + Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Enabling Jobs Formatting")); + } + if(pluginManager.isPluginEnabled("Factions")) { + String version = pluginManager.getPlugin("Factions").getDescription().getVersion(); + Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Enabling Factions Formatting version " + version)); + } + if(pluginManager.isPluginEnabled("Heroes")) { + Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Enabling Heroes Formatting")); + } + if(pluginManager.isPluginEnabled("PlaceholderAPI")) { + Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Enabling PlaceholderAPI Hook")); + } + boolean hooked = PlaceholderAPI.registerPlaceholderHook("venturechat", new VentureChatPlaceholders()); + if(hooked) { + Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Added placeholders to PlaceholderAPI!")); + } + else { + Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - &cPlaceholders were not added to PlaceholderAPI!")); + } + Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Loading player data")); + BukkitScheduler scheduler = Bukkit.getServer().getScheduler(); + scheduler.scheduleSyncRepeatingTask(this, new Runnable() { + @Override + public void run() { + PlayerData.savePlayerData(); + if(getConfig().getString("loglevel", "info").equals("debug")) { + Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Saving Player Data")); + } + } + }, 0L, getConfig().getInt("saveinterval") * 1200); + scheduler.scheduleSyncRepeatingTask(this, new Runnable() { + @Override + public void run() { + for(MineverseChatPlayer p : MineverseChat.players) { + // Calendar currentDate = Calendar.getInstance(); + // SimpleDateFormat formatter = new + // SimpleDateFormat("dd:HH:mm:ss"); + // String date = formatter.format(currentDate.getTime()); + // String[] datearray = date.split(":"); + // int time = (Integer.parseInt(datearray[0]) * 1440) + + // (Integer.parseInt(datearray[1]) * 60) + + // (Integer.parseInt(datearray[2])); + + int time = (int) (System.currentTimeMillis() / 60000); + + for(String c : p.getMutes().keySet()) { + ChatChannel channel = ccInfo.getChannelInfo(c); + int timemark = p.getMutes().get(channel.getName()); + if(timemark == 0) return; + // System.out.println(time + " " + timemark); + if(time > timemark) { + p.removeMute(channel.getName()); + if(p.isOnline()) p.getPlayer().sendMessage(ChatColor.RED + "You have just been unmuted in: " + ChatColor.valueOf(channel.getColor().toUpperCase()) + channel.getName()); + else p.setModified(true); + } + } + } + if(getConfig().getString("loglevel", "info").equals("debug")) { + // log.info(String.format("[" + + // String.format(getConfig().getString("pluginname", + // "VentureChat") + "]" + " - Updating Player Mutes", + // getDescription().getName()))); + } + } + }, 0L, 20L); + this.firstRun = false; + } + + @SuppressWarnings("unchecked") + public void unregister(String name) { + try { + ((Map) knownCommands.get((SimpleCommandMap) commandMap.get(Bukkit.getServer()))).remove(name); + } + catch(Exception e) { + } + } + + @SuppressWarnings("unused") + private void loadCommandMap() { + try { + commandMap = Bukkit.getServer().getClass().getDeclaredField("commandMap"); + commandMap.setAccessible(true); + knownCommands = SimpleCommandMap.class.getDeclaredField("knownCommands"); + knownCommands.setAccessible(true); + } + catch(Exception e) { + } + } + + public CommandMap getCommandMap() { + return cmap; + } + + public static MineverseChat getInstance() { + return MineverseChat.plugin; + } + + private void registerPacketListeners() { + this.protocolManager = ProtocolLibrary.getProtocolManager(); + this.packetListener = new PacketListener(this); + this.protocolManager.addPacketListener(this.packetListener); + } + + private void loadNMS() throws ClassNotFoundException { + /* + * if(VersionHandler.is1_7_10()) { try { MineverseChat.posField = + * MinecraftReflection.getMinecraftClass("PacketPlayOutChat"). + * getDeclaredField("b"); MineverseChat.posField.setAccessible(true); } + * catch(NoSuchFieldException | SecurityException + * localNoSuchFieldException) { + * localNoSuchFieldException.printStackTrace(); } try { + * MineverseChat.messageMethod = + * MinecraftReflection.getMinecraftClass("IChatBaseComponent"). + * getDeclaredMethod("c", new Class[0]); + * MineverseChat.messageMethod.setAccessible(true); } + * catch(SecurityException | NoSuchMethodException e) { + * e.printStackTrace(); } return; } + */ + if(VersionHandler.is1_8() || VersionHandler.is1_7_10()) { + try { + MineverseChat.posField = MinecraftReflection.getMinecraftClass("PacketPlayOutChat").getDeclaredField("b"); + MineverseChat.posField.setAccessible(true); + } + catch(NoSuchFieldException | SecurityException localNoSuchFieldException) { + localNoSuchFieldException.printStackTrace(); + } + try { + MineverseChat.messageMethod = MinecraftReflection.getMinecraftClass("IChatBaseComponent").getDeclaredMethod("c", new Class[0]); + MineverseChat.messageMethod.setAccessible(true); + } + catch(SecurityException | NoSuchMethodException e) { + e.printStackTrace(); + } + } + else { + try { + MineverseChat.posField = MinecraftReflection.getMinecraftClass("PacketPlayOutChat").getDeclaredField("b"); + MineverseChat.posField.setAccessible(true); + } + catch(NoSuchFieldException | SecurityException localNoSuchFieldException) { + localNoSuchFieldException.printStackTrace(); + } + try { + MineverseChat.messageMethod = MinecraftReflection.getMinecraftClass("ChatBaseComponent").getDeclaredMethod("toPlainText", new Class[0]); + MineverseChat.messageMethod.setAccessible(true); + } + catch(SecurityException | NoSuchMethodException e) { + e.printStackTrace(); + } + if(!VersionHandler.is1_9() && !VersionHandler.is1_10() && !VersionHandler.is1_11()) { + try { + MineverseChat.chatMessageType = getNMSClass("ChatMessageType"); + } + catch(Exception e) { + e.printStackTrace(); + } + } + } + } + + private Class getNMSClass(String name) { + try { + return Class.forName("net.minecraft.server." + getVersion() + "." + name); + } + catch(ClassNotFoundException e) { + e.printStackTrace(); + return null; + } + } + + private String getVersion() { + return Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3]; + } + + private boolean setupPermissions() { + RegisteredServiceProvider permissionProvider = getServer().getServicesManager().getRegistration(net.milkbowl.vault.permission.Permission.class); + if(permissionProvider != null) { + permission = permissionProvider.getProvider(); + } + return(permission != null); + } + + private boolean setupChat() { + RegisteredServiceProvider chatProvider = getServer().getServicesManager().getRegistration(net.milkbowl.vault.chat.Chat.class); + if(chatProvider != null) { + chat = chatProvider.getProvider(); + } + return(chat != null); + } + + public long getLineLength() { + return LINELENGTH; + } + + @Override + public void onDisable() { + PlayerData.savePlayerData(); + Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Disabling...")); + Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Disabled Successfully")); + if(irc) { + bot.terminate(); + } + if(MineverseChat.cape != null) { + MineverseChat.cape.remove(); + } + } + + public void setLogLevel(String loglevel) { + if(LogLevels.valueOf(loglevel) != null) { + curLogLevel = LogLevels.valueOf(loglevel); + } + else { + curLogLevel = LogLevels.INFO; + } + } + + public void logme(LogLevels level, String location, String logline) { + if(level.ordinal() >= curLogLevel.ordinal()) { + log.log(Level.INFO, "[VentureChat]: {0}:{1} : {2}", new Object[] { level.toString(), location, logline }); + } + } + + public void synchronize(MineverseChatPlayer mcp, boolean changes) { + // System.out.println("Sync started..."); + ByteArrayOutputStream outstream = new ByteArrayOutputStream(); + DataOutputStream out = new DataOutputStream(outstream); + try { + out.writeUTF("Sync"); + if(!changes) { + out.writeUTF("Receive"); + // System.out.println(mcp.getPlayer().getServer().getServerName()); + // out.writeUTF(mcp.getPlayer().getServer().getServerName()); + out.writeUTF(mcp.getUUID().toString()); + } + else { + out.writeUTF("Update"); + out.writeUTF(mcp.getUUID().toString()); + // out.writeUTF("Channels"); + int channelCount = 0; + for(String c : mcp.getListening()) { + ChatChannel channel = ccInfo.getChannelInfo(c); + if(channel.getBungee()) { + channelCount++; + } + } + out.write(channelCount); + for(String c : mcp.getListening()) { + ChatChannel channel = ccInfo.getChannelInfo(c); + if(channel.getBungee()) { + out.writeUTF(channel.getName()); + } + } + // out.writeUTF("Mutes"); + int muteCount = 0; + for(String c : mcp.getMutes().keySet()) { + ChatChannel channel = ccInfo.getChannelInfo(c); + if(channel.getBungee()) { + muteCount++; + } + } + // System.out.println(muteCount + " mutes"); + out.write(muteCount); + for(String c : mcp.getMutes().keySet()) { + ChatChannel channel = ccInfo.getChannelInfo(c); + if(channel.getBungee()) { + out.writeUTF(channel.getName()); + } + } + int ignoreCount = 0; + for(@SuppressWarnings("unused") + UUID c : mcp.getIgnores()) { + ignoreCount++; + } + out.write(ignoreCount); + for(UUID c : mcp.getIgnores()) { + out.writeUTF(c.toString()); + } + out.writeBoolean(mcp.isSpy()); + out.writeBoolean(mcp.getMessageToggle()); + } + for(MineverseChatPlayer p : MineverseChat.onlinePlayers) { + p.getPlayer().sendPluginMessage(this, "VentureChat", outstream.toByteArray()); + break; + } + // System.out.println("Sync start bottom..."); + out.close(); + } + catch(IOException e) { + e.printStackTrace(); + } + } + + public void updatePlayerList(MineverseChatPlayer mcp, boolean request) { + ByteArrayOutputStream outstream = new ByteArrayOutputStream(); + DataOutputStream out = new DataOutputStream(outstream); + try { + out.writeUTF("Sync"); + if(request) { + out.writeUTF("PlayersReceive"); + // System.out.println(mcp.getPlayer().getServer().getServerName()); + out.writeUTF(this.getServer().getServerName()); + } + else { + out.writeUTF("PlayersUpdate"); + // System.out.println(networkPlayers.keySet().size()); + out.write(networkPlayers.keySet().size()); + for(String p : networkPlayers.keySet()) { + out.writeUTF(p + "," + networkPlayers.get(p)); + } + } + mcp.getPlayer().sendPluginMessage(this, "VentureChat", outstream.toByteArray()); + // System.out.println("Sync start bottom..."); + out.close(); + } + catch(IOException e) { + e.printStackTrace(); + } + } + + @Override + public void onPluginMessageReceived(String channel, Player player, byte[] message) { + if(!channel.equals("VentureChat")) { + return; + } + try { + DataInputStream msgin = new DataInputStream(new ByteArrayInputStream(message)); + if(plugin.getConfig().getString("loglevel", "info").equals("debug")) { + System.out.println(msgin.available() + " size on receiving end"); + } + String subchannel = msgin.readUTF(); + if(subchannel.equals("Chat")) { + String chatchannel = msgin.readUTF(); + String chat = msgin.readUTF(); + String playerName = msgin.readUTF(); + String lastMessage = msgin.readUTF(); + String f = msgin.readUTF(); + String c = msgin.readUTF(); + String json = msgin.readUTF(); + MineverseChat.lastChatMessage = new ChatMessage(playerName, lastMessage, lastMessage.hashCode(), f, c, chatchannel); + lastJson = json; + Bukkit.getConsoleSender().sendMessage(chat); + MineverseChatPlayer sender = MineverseChatAPI.getMineverseChatPlayer(playerName); + for(MineverseChatPlayer p : MineverseChat.onlinePlayers) { + //System.out.println(p.getName() + " received chat message"); + if(p.isOnline() && p.getListening().contains(ccInfo.getChannelInfo(chatchannel).getName())) { + if(plugin.getConfig().getBoolean("ignorechat", false)) { + // System.out.println(p.getIgnores()); + if(sender == null) { + // System.out.println("null sender"); + p.getPlayer().sendMessage(chat); + continue; + } + if(!p.getIgnores().contains(sender.getUUID())) { + // System.out.println("Chat sent"); + p.getPlayer().sendMessage(chat); + } + continue; + } + p.getPlayer().sendMessage(chat); + } + } + } + if(subchannel.equals("RemoveMessage")) { + String hash = msgin.readUTF(); + this.getServer().dispatchCommand(this.getServer().getConsoleSender(), "removemessage " + hash); + } + if(subchannel.equals("PlayersUpdate")) { + networkPlayers.clear(); + int size = msgin.read(); + for(int a = 1; a <= size; a++) { + String p = msgin.readUTF(); + String[] parts = p.split(","); + networkPlayers.put(parts[0], parts[1]); + System.out.print(p); + } + } + if(subchannel.equals("Sync")) { + if(plugin.getConfig().getString("loglevel", "info").equals("debug")) { + Bukkit.getConsoleSender().sendMessage(Format.FormatStringAll("&8[&eVentureChat&8]&e - Received update...")); + } + String uuid = msgin.readUTF(); + MineverseChatPlayer p = MineverseChatAPI.getMineverseChatPlayer(UUID.fromString(uuid)); + for(Object ch : p.getListening().toArray()) { + String c = ch.toString(); + ChatChannel cha = ccInfo.getChannelInfo(c); + if(cha.getBungee()) { + p.removeListening(c); + } + } + int size = msgin.read(); + // System.out.println(size); + for(int a = 0; a < size; a++) { + String ch = msgin.readUTF(); + if(ccInfo.isChannel(ch)) { + ChatChannel cha = ccInfo.getChannelInfo(ch); + if(cha.hasPermission() && p.getPlayer().hasPermission(cha.getPermission())) { + p.addListening(ch); + } + } + } + for(Object o : p.getMutes().keySet().toArray()) { + ChatChannel ch = ccInfo.getChannelInfo((String) o); + if(ch.getBungee()) { + p.removeMute(ch.getName()); + } + } + int sizeB = msgin.read(); + // System.out.println(sizeB + " mute size"); + for(int b = 0; b < sizeB; b++) { + String ch = msgin.readUTF(); + // System.out.println(ch); + if(ccInfo.isChannel(ch)) { + p.addMute(ch, 0); + } + } + // System.out.println(msgin.available() + " available before"); + p.setSpy(msgin.readBoolean()); + p.setMessageToggle(msgin.readBoolean()); + // System.out.println(msgin.available() + " available after"); + for(Object o : p.getIgnores().toArray()) { + p.removeIgnore((UUID) o); + } + int sizeC = msgin.read(); + // System.out.println(sizeC + " ignore size"); + for(int c = 0; c < sizeC; c++) { + String i = msgin.readUTF(); + // System.out.println(i); + p.addIgnore(UUID.fromString(i)); + } + if(!p.hasPlayed()) { + for(ChatChannel ch : ccInfo.getAutojoinList()) { + if(ch.hasPermission()) { + if(p.getPlayer().hasPermission(ch.getPermission())) { + p.addListening(ch.getName()); + } + } + else { + p.addListening(ch.getName()); + } + } + p.setHasPlayed(true); + plugin.synchronize(p, true); + } + } + if(subchannel.equals("Ignore")) { + String identifier = msgin.readUTF(); + if(identifier.equals("Send")) { + String server = msgin.readUTF(); + String receiver = msgin.readUTF(); + MineverseChatPlayer p = MineverseChatAPI.getOnlineMineverseChatPlayer(receiver); + UUID sender = UUID.fromString(msgin.readUTF()); + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + DataOutputStream out = new DataOutputStream(stream); + if(p == null || !p.isOnline()) { + out.writeUTF("Ignore"); + out.writeUTF("Offline"); + out.writeUTF(server); + out.writeUTF(receiver); + out.writeUTF(sender.toString()); + player.sendPluginMessage(this, "VentureChat", stream.toByteArray()); + return; + } + p.setReplyPlayer(sender); + out.writeUTF("Ignore"); + out.writeUTF("Echo"); + out.writeUTF(server); + out.writeUTF(p.getUUID().toString()); + out.writeUTF(sender.toString()); + player.sendPluginMessage(this, "VentureChat", stream.toByteArray()); + return; + } + if(identifier.equals("Offline")) { + String receiver = msgin.readUTF(); + UUID sender = UUID.fromString(msgin.readUTF()); + MineverseChatPlayer p = MineverseChatAPI.getOnlineMineverseChatPlayer(sender); + p.getPlayer().sendMessage(ChatColor.RED + "Player: " + ChatColor.GOLD + receiver + ChatColor.RED + " is not online."); + } + if(identifier.equals("Echo")) { + UUID receiver = UUID.fromString(msgin.readUTF()); + UUID sender = UUID.fromString(msgin.readUTF()); + MineverseChatPlayer p = MineverseChatAPI.getOnlineMineverseChatPlayer(sender); + MineverseChatPlayer r = MineverseChatAPI.getMineverseChatPlayer(receiver); + String rName = receiver.toString(); + if(r != null) { + rName = Format.FormatStringAll(r.getNickname()); + } + p.addIgnore(receiver); + p.getPlayer().sendMessage(ChatColor.GOLD + "You are now ignoring player: " + ChatColor.RED + rName); + this.synchronize(p, true); + } + } + if(subchannel.equals("Message")) { + String identifier = msgin.readUTF(); + if(identifier.equals("Send")) { + String server = msgin.readUTF(); + String receiver = msgin.readUTF(); + MineverseChatPlayer p = MineverseChatAPI.getOnlineMineverseChatPlayer(receiver); + UUID sender = UUID.fromString(msgin.readUTF()); + String sName = msgin.readUTF(); + MineverseChatPlayer s = MineverseChatAPI.getMineverseChatPlayer(sender); + String msg = msgin.readUTF(); + String echo = msgin.readUTF(); + String spy = msgin.readUTF(); + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + DataOutputStream out = new DataOutputStream(stream); + // System.out.println((p == null) + " null"); + if(p != null) { + // System.out.println(p.isOnline() + " online"); + } + if(p == null || !p.isOnline()) { + out.writeUTF("Message"); + out.writeUTF("Offline"); + out.writeUTF(server); + out.writeUTF(receiver); + out.writeUTF(sender.toString()); + player.sendPluginMessage(this, "VentureChat", stream.toByteArray()); + return; + } + if(p.getIgnores().contains(sender)) { + out.writeUTF("Message"); + out.writeUTF("Ignore"); + out.writeUTF(server); + out.writeUTF(receiver); + out.writeUTF(sender.toString()); + player.sendPluginMessage(this, "VentureChat", stream.toByteArray()); + return; + } + if(!p.getMessageToggle()) { + out.writeUTF("Message"); + out.writeUTF("Blocked"); + out.writeUTF(server); + out.writeUTF(receiver); + out.writeUTF(sender.toString()); + player.sendPluginMessage(this, "VentureChat", stream.toByteArray()); + return; + } + if(s != null) { + sName = Format.FormatStringAll(s.getNickname()); + } + else { + UUID uuid = sender; + String name = sName; + ChatChannel current = ccInfo.getDefaultChannel(); + Set ignores = new HashSet(); + Set listening = new HashSet(); + listening.add(current.getName()); + HashMap mutes = new HashMap(); + Set blockedCommands = new HashSet(); + List mail = new ArrayList(); + String jsonFormat = "Default"; + s = new MineverseChatPlayer(uuid, name, current, ignores, listening, mutes, blockedCommands, mail, false, null, true, true, name, jsonFormat, false, false, false, true, true); + MineverseChat.players.add(s); + } + p.getPlayer().sendMessage(msg.replace("{playerfrom}", sName).replace("{playerto}", Format.FormatStringAll(p.getNickname()))); + 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); + } + } + p.setReplyPlayer(sender); + out.writeUTF("Message"); + out.writeUTF("Echo"); + out.writeUTF(server); + out.writeUTF(p.getNickname()); + out.writeUTF(sender.toString()); + out.writeUTF(sName); + out.writeUTF(echo); + out.writeUTF(spy); + player.sendPluginMessage(this, "VentureChat", stream.toByteArray()); + return; + } + if(identifier.equals("Offline")) { + String receiver = msgin.readUTF(); + UUID sender = UUID.fromString(msgin.readUTF()); + MineverseChatPlayer p = MineverseChatAPI.getOnlineMineverseChatPlayer(sender); + p.getPlayer().sendMessage(ChatColor.RED + "Player: " + ChatColor.GOLD + receiver + ChatColor.RED + " is not online."); + p.setReplyPlayer(null); + } + if(identifier.equals("Ignore")) { + String receiver = msgin.readUTF(); + UUID sender = UUID.fromString(msgin.readUTF()); + MineverseChatPlayer p = MineverseChatAPI.getOnlineMineverseChatPlayer(sender); + p.getPlayer().sendMessage(ChatColor.GOLD + receiver + " is currently ignoring your messages."); + } + if(identifier.equals("Blocked")) { + String receiver = msgin.readUTF(); + UUID sender = UUID.fromString(msgin.readUTF()); + MineverseChatPlayer p = MineverseChatAPI.getOnlineMineverseChatPlayer(sender); + p.getPlayer().sendMessage(ChatColor.GOLD + receiver + " is currently blocking messages."); + } + if(identifier.equals("Echo")) { + String receiver = msgin.readUTF(); + UUID sender = UUID.fromString(msgin.readUTF()); + MineverseChatPlayer p = MineverseChatAPI.getOnlineMineverseChatPlayer(sender); + MineverseChatPlayer r = MineverseChatAPI.getMineverseChatPlayer(receiver); + String echo = msgin.readUTF(); + String rName = Format.FormatStringAll(receiver); + if(r != null) { + rName = Format.FormatStringAll(r.getNickname()); + p.setReplyPlayer(r.getUUID()); + } + p.getPlayer().sendMessage(echo.replace("{playerfrom}", Format.FormatStringAll(p.getNickname())).replace("{playerto}", rName)); + } + if(identifier.equals("Spy")) { + String receiver = msgin.readUTF(); + MineverseChatPlayer r = MineverseChatAPI.getMineverseChatPlayer(receiver); + UUID sender = UUID.fromString(msgin.readUTF()); + MineverseChatPlayer p = MineverseChatAPI.getOnlineMineverseChatPlayer(sender); + String sName = msgin.readUTF(); + String spy = msgin.readUTF(); + String rName = receiver; + if(r != null) { + rName = Format.FormatStringAll(r.getNickname()); + } + if(p != null) { + sName = Format.FormatStringAll(p.getNickname()); + } + for(MineverseChatPlayer pl : onlinePlayers) { + if(pl.isSpy() && !pl.getName().equals(sName) && !pl.getName().equals(rName)) { + pl.getPlayer().sendMessage(spy.replace("{playerto}", rName).replace("{playerfrom}", sName)); + } + } + } + } + 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 = ccInfo.getChannelInfo(chatchannel); + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + DataOutputStream out = new DataOutputStream(stream); + if(cc == null) { + try { + out.writeUTF("Mute"); + out.writeUTF("Channel"); + out.writeUTF(sendplayer); + out.writeUTF(chatchannel); + player.sendPluginMessage(this, "VentureChat", 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, "VentureChat", 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, "VentureChat", 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, "VentureChat", 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, "VentureChat", stream.toByteArray()); + } + catch(Exception e) { + e.printStackTrace(); + } + return; + } + try { + out.writeUTF("Mute"); + out.writeUTF("Time"); + out.writeUTF(sendplayer); + out.writeUTF(time); + player.sendPluginMessage(this, "VentureChat", 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, "VentureChat", 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, "VentureChat", 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); + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + DataOutputStream out = new DataOutputStream(stream); + if(mp == null) { + try { + out.writeUTF("Muteall"); + out.writeUTF("Player"); + out.writeUTF(sendplayer); + out.writeUTF(muteplayer); + out.writeUTF(server); + player.sendPluginMessage(this, "VentureChat", stream.toByteArray()); + } + catch(Exception e) { + e.printStackTrace(); + } + return; + } + boolean bungee = false; + for(ChatChannel c : ccInfo.getChannelsInfo()) { + 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, "VentureChat", 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); + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + DataOutputStream out = new DataOutputStream(stream); + if(mp == null) { + try { + out.writeUTF("Unmuteall"); + out.writeUTF("Player"); + out.writeUTF(sendplayer); + out.writeUTF(muteplayer); + out.writeUTF(server); + player.sendPluginMessage(this, "VentureChat", stream.toByteArray()); + } + catch(Exception e) { + e.printStackTrace(); + } + return; + } + boolean bungee = false; + for(ChatChannel c : ccInfo.getChannelsInfo()) { + 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, "VentureChat", 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 = ccInfo.getChannelInfo(chatchannel); + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + DataOutputStream out = new DataOutputStream(stream); + if(cc == null) { + try { + out.writeUTF("Unmute"); + out.writeUTF("Channel"); + out.writeUTF(sendplayer); + out.writeUTF(chatchannel); + player.sendPluginMessage(this, "VentureChat", 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, "VentureChat", 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, "VentureChat", 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, "VentureChat", stream.toByteArray()); + } + catch(Exception e) { + e.printStackTrace(); + } + return; + } + } + catch(Exception e) { + e.printStackTrace(); + } + } } \ No newline at end of file diff --git a/MineverseChat/mineverse/Aust1n46/chat/bungee/MineverseChatBungee.java b/MineverseChat/mineverse/Aust1n46/chat/bungee/MineverseChatBungee.java index 69b03f5..df5a5bc 100644 --- a/MineverseChat/mineverse/Aust1n46/chat/bungee/MineverseChatBungee.java +++ b/MineverseChat/mineverse/Aust1n46/chat/bungee/MineverseChatBungee.java @@ -158,15 +158,15 @@ public class MineverseChatBungee extends Plugin implements Listener { String f = in.readUTF(); String c = in.readUTF(); String json = in.readUTF(); + out.writeUTF("Chat"); + out.writeUTF(chatchannel); + out.writeUTF(message); + out.writeUTF(playerName); + out.writeUTF(lastMessage); + out.writeUTF(f); + out.writeUTF(c); + out.writeUTF(json); for(String send : getProxy().getServers().keySet()) { - out.writeUTF("Chat"); - out.writeUTF(chatchannel); - out.writeUTF(message); - out.writeUTF(playerName); - out.writeUTF(lastMessage); - out.writeUTF(f); - out.writeUTF(c); - out.writeUTF(json); if(getProxy().getServers().get(send).getPlayers().size() > 0) { getProxy().getServers().get(send).sendData("VentureChat", outstream.toByteArray()); } @@ -174,9 +174,9 @@ public class MineverseChatBungee extends Plugin implements Listener { } if(subchannel.equals("RemoveMessage")) { String hash = in.readUTF(); + out.writeUTF("RemoveMessage"); + out.writeUTF(hash); for(String send : getProxy().getServers().keySet()) { - out.writeUTF("RemoveMessage"); - out.writeUTF(hash); if(getProxy().getServers().get(send).getPlayers().size() > 0) { getProxy().getServers().get(send).sendData("VentureChat", outstream.toByteArray()); } diff --git a/MineverseChat/mineverse/Aust1n46/chat/command/chat/Removemessage.java b/MineverseChat/mineverse/Aust1n46/chat/command/chat/Removemessage.java index 72ae9dd..47390a8 100644 --- a/MineverseChat/mineverse/Aust1n46/chat/command/chat/Removemessage.java +++ b/MineverseChat/mineverse/Aust1n46/chat/command/chat/Removemessage.java @@ -1,190 +1,194 @@ -package mineverse.Aust1n46.chat.command.chat; - -import java.io.ByteArrayOutputStream; -import java.io.DataOutputStream; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import mineverse.Aust1n46.chat.ChatMessage; -import mineverse.Aust1n46.chat.MineverseChat; -import mineverse.Aust1n46.chat.api.MineverseChatPlayer; -import mineverse.Aust1n46.chat.command.MineverseCommand; -//import mineverse.Aust1n46.chat.json.JsonButton; -import mineverse.Aust1n46.chat.utilities.Format; - -import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.bukkit.scheduler.BukkitRunnable; - -import com.comphenix.protocol.PacketType; -import com.comphenix.protocol.events.PacketContainer; -import com.comphenix.protocol.wrappers.EnumWrappers.ChatType; -import com.comphenix.protocol.wrappers.WrappedChatComponent; - -public class Removemessage extends MineverseCommand { - private PacketContainer emptyLinePacketContainer = createPacketPlayOutChat(WrappedChatComponent.fromJson("{\"extra\":[\" \"],\"text\":\"\"}")); - private MineverseChat plugin; - private WrappedChatComponent messageDeletedComponentPlayer; - - public Removemessage(String name) { - super(name); - this.plugin = MineverseChat.getInstance(); - } - - @Override - @SuppressWarnings({ "unchecked", "rawtypes" }) - public void execute(CommandSender sender, String command, String[] args) { - if(args.length == 0) { - sender.sendMessage(ChatColor.RED + "Invalid command: /removemessage [hashcode]"); - return; - } - final int hash; - try { - hash = Integer.parseInt(args[0]); - } - catch(Exception e) { - sender.sendMessage(ChatColor.RED + "Invalid hashcode."); - return; - } - if(args.length > 1 && Boolean.parseBoolean(args[1]) && sender instanceof Player) { - ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream(); - DataOutputStream out = new DataOutputStream(byteOutStream); - try { - out.writeUTF("RemoveMessage"); - out.writeUTF(String.valueOf(hash)); - ((Player) sender).sendPluginMessage(plugin, "VentureChat", byteOutStream.toByteArray()); - out.close(); - } - catch(Exception e) { - e.printStackTrace(); - } - } - new BukkitRunnable() { - public void run() { - final Map> packets = new HashMap(); - for(MineverseChatPlayer p : MineverseChat.onlinePlayers) { - List messages = p.getMessages(); - List playerPackets = new ArrayList(); - boolean resend = false; - for(int fill = 0; fill < 100 - messages.size(); fill++) { - playerPackets.add(Removemessage.this.emptyLinePacketContainer); - } - for(ChatMessage message : messages) { - if(message.getHash() == hash) { - WrappedChatComponent removedComponent = p.getPlayer().hasPermission("venturechat.message.bypass") ? Removemessage.this.getMessageDeletedChatComponentAdmin(message) : Removemessage.this.getMessageDeletedChatComponentPlayer(); - message.setComponent(removedComponent); - message.setHash(-1); - playerPackets.add(Removemessage.this.createPacketPlayOutChat(removedComponent)); - resend = true; - continue; - } - if(message.getMessage().contains(ChatColor.stripColor(Format.FormatStringAll(plugin.getConfig().getString("guiicon"))))) { - String submessage = message.getMessage().substring(0, message.getMessage().length() - ChatColor.stripColor(Format.FormatStringAll(plugin.getConfig().getString("guiicon"))).length()); - if(submessage.hashCode() == hash) { - WrappedChatComponent removedComponent = p.getPlayer().hasPermission("venturechat.message.bypass") ? Removemessage.this.getMessageDeletedChatComponentAdmin(message) : Removemessage.this.getMessageDeletedChatComponentPlayer(); - message.setComponent(removedComponent); - message.setHash(-1); - playerPackets.add(Removemessage.this.createPacketPlayOutChat(removedComponent)); - resend = true; - continue; - } - } - /*if(message.getMessage().contains(Format.FormatStringAll(plugin.getConfig().getString("messageremovericon")))) { - String submessage = message.getMessage().substring(0, message.getMessage().length() - plugin.getConfig().getString("messageremovericon").length() - 1).replaceAll("(§([a-z0-9]))", ""); - if(submessage.hashCode() == hash) { - WrappedChatComponent removedComponent = p.getPlayer().hasPermission("venturechat.message.bypass") ? Removemessage.this.getMessageDeletedChatComponentAdmin(message) : Removemessage.this.getMessageDeletedChatComponentPlayer(); - message.setComponent(removedComponent); - message.setHash(-1); - playerPackets.add(Removemessage.this.createPacketPlayOutChat(removedComponent)); - resend = true; - continue; - } - int cut = 0; - for(JsonButton b : MineverseChat.jbInfo.getJsonButtons()) { - if(b.hasPermission() && p.getPlayer().hasPermission(b.getPermission())) { - cut += b.getIcon().length() - 1; - } - } - submessage = submessage.substring(0, submessage.length() - cut).replaceAll("(§([a-z0-9]))", ""); - //System.out.println(submessage + " submess"); - if(submessage.hashCode() == hash) { - WrappedChatComponent removedComponent = p.getPlayer().hasPermission("venturechat.message.bypass") ? Removemessage.this.getMessageDeletedChatComponentAdmin(message) : Removemessage.this.getMessageDeletedChatComponentPlayer(); - message.setComponent(removedComponent); - message.setHash(-1); - playerPackets.add(Removemessage.this.createPacketPlayOutChat(removedComponent)); - resend = true; - continue; - } - } - int cut = 0; - for(JsonButton b : MineverseChat.jbInfo.getJsonButtons()) { - if(b.hasPermission() && p.getPlayer().hasPermission(b.getPermission()) && message.getMessage().contains(b.getIcon())) { - cut += b.getIcon().length() - 1; - } - } - String submessage = message.getMessage().replaceAll("(§([a-z0-9]))", ""); - //System.out.println(submessage + " " + submessage.length()); - submessage = submessage.substring(0, submessage.length() - cut); - //System.out.println(submessage); - if(submessage.hashCode() == hash) { - WrappedChatComponent removedComponent = p.getPlayer().hasPermission("venturechat.message.bypass") ? Removemessage.this.getMessageDeletedChatComponentAdmin(message) : Removemessage.this.getMessageDeletedChatComponentPlayer(); - message.setComponent(removedComponent); - message.setHash(-1); - playerPackets.add(Removemessage.this.createPacketPlayOutChat(removedComponent)); - resend = true; - continue; - }*/ - playerPackets.add(Removemessage.this.createPacketPlayOutChat(message.getComponent())); - } - if(resend) { - packets.put(p.getPlayer(), playerPackets); - } - } - new BukkitRunnable() { - public void run() { - for(Player p : packets.keySet()) { - List pPackets = packets.get(p); - for(PacketContainer c : pPackets) { - Removemessage.this.sendPacketPlayOutChat(p, c); - } - } - } - }.runTask(plugin); - } - }.runTaskAsynchronously(plugin); - } - - private PacketContainer createPacketPlayOutChat(WrappedChatComponent component) { - PacketContainer container = new PacketContainer(PacketType.Play.Server.CHAT); - container.getChatComponents().write(0, component); - container.getChatTypes().write(0, ChatType.CHAT); - return container; - } - - private void sendPacketPlayOutChat(Player player, PacketContainer packet) { - try { - plugin.protocolManager.sendServerPacket(player, packet); - } - catch(Exception e) { - e.printStackTrace(); - } - } - - public WrappedChatComponent getMessageDeletedChatComponentPlayer() { - if(this.messageDeletedComponentPlayer == null) { - this.messageDeletedComponentPlayer = WrappedChatComponent.fromJson("{\"text\":\"\",\"extra\":[{\"text\":\"\",\"color\":\"red\",\"italic\":\"true\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + Format.FormatStringAll(plugin.getConfig().getString("messageremoverpermissions")) + "\"}]}}}]}"); - } - return this.messageDeletedComponentPlayer; - } - - public WrappedChatComponent getMessageDeletedChatComponentAdmin(ChatMessage message) { - String oMessage = message.getOriginalComponent().getJson().substring(1, message.getOriginalComponent().getJson().length() - 11); - if(message.getMessage().contains(ChatColor.stripColor(Format.FormatStringAll(plugin.getConfig().getString("guiicon"))))) { - oMessage = oMessage.substring(0, oMessage.length() - ChatColor.stripColor(Format.FormatStringAll(plugin.getConfig().getString("guiicon"))).length() - 3) + "\"}]"; - } - return WrappedChatComponent.fromJson(Format.FormatStringAll("{\"text\":\"\",\"extra\":[{\"text\":\"&c&o\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"&7Message: \"," + oMessage + "}}}]}")); - } +package mineverse.Aust1n46.chat.command.chat; + +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import mineverse.Aust1n46.chat.ChatMessage; +import mineverse.Aust1n46.chat.MineverseChat; +import mineverse.Aust1n46.chat.api.MineverseChatPlayer; +import mineverse.Aust1n46.chat.command.MineverseCommand; +//import mineverse.Aust1n46.chat.json.JsonButton; +import mineverse.Aust1n46.chat.utilities.Format; +import mineverse.Aust1n46.chat.versions.VersionHandler; + +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.EnumWrappers.ChatType; +import com.comphenix.protocol.wrappers.WrappedChatComponent; + +public class Removemessage extends MineverseCommand { + private PacketContainer emptyLinePacketContainer = createPacketPlayOutChat(WrappedChatComponent.fromJson("{\"extra\":[\" \"],\"text\":\"\"}")); + private MineverseChat plugin; + private WrappedChatComponent messageDeletedComponentPlayer; + + public Removemessage(String name) { + super(name); + this.plugin = MineverseChat.getInstance(); + } + + @Override + @SuppressWarnings({ "unchecked", "rawtypes" }) + public void execute(CommandSender sender, String command, String[] args) { + if(args.length == 0) { + sender.sendMessage(ChatColor.RED + "Invalid command: /removemessage [hashcode]"); + return; + } + final int hash; + try { + hash = Integer.parseInt(args[0]); + } + catch(Exception e) { + sender.sendMessage(ChatColor.RED + "Invalid hashcode."); + return; + } + if(args.length > 1 && Boolean.parseBoolean(args[1]) && sender instanceof Player) { + ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream(); + DataOutputStream out = new DataOutputStream(byteOutStream); + try { + out.writeUTF("RemoveMessage"); + out.writeUTF(String.valueOf(hash)); + ((Player) sender).sendPluginMessage(plugin, "VentureChat", byteOutStream.toByteArray()); + out.close(); + } + catch(Exception e) { + e.printStackTrace(); + } + return; + } + new BukkitRunnable() { + public void run() { + final Map> packets = new HashMap(); + for(MineverseChatPlayer p : MineverseChat.onlinePlayers) { + List messages = p.getMessages(); + List playerPackets = new ArrayList(); + boolean resend = false; + for(int fill = 0; fill < 100 - messages.size(); fill++) { + playerPackets.add(Removemessage.this.emptyLinePacketContainer); + } + for(ChatMessage message : messages) { + if(message.getHash() == hash) { + WrappedChatComponent removedComponent = p.getPlayer().hasPermission("venturechat.message.bypass") ? Removemessage.this.getMessageDeletedChatComponentAdmin(message) : Removemessage.this.getMessageDeletedChatComponentPlayer(); + message.setComponent(removedComponent); + message.setHash(-1); + playerPackets.add(Removemessage.this.createPacketPlayOutChat(removedComponent)); + resend = true; + continue; + } + if(message.getMessage().contains(ChatColor.stripColor(Format.FormatStringAll(plugin.getConfig().getString("guiicon"))))) { + String submessage = message.getMessage().substring(0, message.getMessage().length() - ChatColor.stripColor(Format.FormatStringAll(plugin.getConfig().getString("guiicon"))).length()); + if(submessage.hashCode() == hash) { + WrappedChatComponent removedComponent = p.getPlayer().hasPermission("venturechat.message.bypass") ? Removemessage.this.getMessageDeletedChatComponentAdmin(message) : Removemessage.this.getMessageDeletedChatComponentPlayer(); + message.setComponent(removedComponent); + message.setHash(-1); + playerPackets.add(Removemessage.this.createPacketPlayOutChat(removedComponent)); + resend = true; + continue; + } + } + /*if(message.getMessage().contains(Format.FormatStringAll(plugin.getConfig().getString("messageremovericon")))) { + String submessage = message.getMessage().substring(0, message.getMessage().length() - plugin.getConfig().getString("messageremovericon").length() - 1).replaceAll("(§([a-z0-9]))", ""); + if(submessage.hashCode() == hash) { + WrappedChatComponent removedComponent = p.getPlayer().hasPermission("venturechat.message.bypass") ? Removemessage.this.getMessageDeletedChatComponentAdmin(message) : Removemessage.this.getMessageDeletedChatComponentPlayer(); + message.setComponent(removedComponent); + message.setHash(-1); + playerPackets.add(Removemessage.this.createPacketPlayOutChat(removedComponent)); + resend = true; + continue; + } + int cut = 0; + for(JsonButton b : MineverseChat.jbInfo.getJsonButtons()) { + if(b.hasPermission() && p.getPlayer().hasPermission(b.getPermission())) { + cut += b.getIcon().length() - 1; + } + } + submessage = submessage.substring(0, submessage.length() - cut).replaceAll("(§([a-z0-9]))", ""); + //System.out.println(submessage + " submess"); + if(submessage.hashCode() == hash) { + WrappedChatComponent removedComponent = p.getPlayer().hasPermission("venturechat.message.bypass") ? Removemessage.this.getMessageDeletedChatComponentAdmin(message) : Removemessage.this.getMessageDeletedChatComponentPlayer(); + message.setComponent(removedComponent); + message.setHash(-1); + playerPackets.add(Removemessage.this.createPacketPlayOutChat(removedComponent)); + resend = true; + continue; + } + } + int cut = 0; + for(JsonButton b : MineverseChat.jbInfo.getJsonButtons()) { + if(b.hasPermission() && p.getPlayer().hasPermission(b.getPermission()) && message.getMessage().contains(b.getIcon())) { + cut += b.getIcon().length() - 1; + } + } + String submessage = message.getMessage().replaceAll("(§([a-z0-9]))", ""); + //System.out.println(submessage + " " + submessage.length()); + submessage = submessage.substring(0, submessage.length() - cut); + //System.out.println(submessage); + if(submessage.hashCode() == hash) { + WrappedChatComponent removedComponent = p.getPlayer().hasPermission("venturechat.message.bypass") ? Removemessage.this.getMessageDeletedChatComponentAdmin(message) : Removemessage.this.getMessageDeletedChatComponentPlayer(); + message.setComponent(removedComponent); + message.setHash(-1); + playerPackets.add(Removemessage.this.createPacketPlayOutChat(removedComponent)); + resend = true; + continue; + }*/ + playerPackets.add(Removemessage.this.createPacketPlayOutChat(message.getComponent())); + } + if(resend) { + packets.put(p.getPlayer(), playerPackets); + } + } + new BukkitRunnable() { + public void run() { + for(Player p : packets.keySet()) { + List pPackets = packets.get(p); + for(PacketContainer c : pPackets) { + Removemessage.this.sendPacketPlayOutChat(p, c); + } + } + } + }.runTask(plugin); + } + }.runTaskAsynchronously(plugin); + } + + private PacketContainer createPacketPlayOutChat(WrappedChatComponent component) { + PacketContainer container = new PacketContainer(PacketType.Play.Server.CHAT); + container.getChatComponents().write(0, component); + if(!VersionHandler.is1_7_10() && !VersionHandler.is1_8() && !VersionHandler.is1_9() && !VersionHandler.is1_10() && !VersionHandler.is1_11()) { + container.getChatTypes().write(0, ChatType.CHAT); + } + return container; + } + + private void sendPacketPlayOutChat(Player player, PacketContainer packet) { + try { + plugin.protocolManager.sendServerPacket(player, packet); + } + catch(Exception e) { + e.printStackTrace(); + } + } + + public WrappedChatComponent getMessageDeletedChatComponentPlayer() { + if(this.messageDeletedComponentPlayer == null) { + this.messageDeletedComponentPlayer = WrappedChatComponent.fromJson("{\"text\":\"\",\"extra\":[{\"text\":\"\",\"color\":\"red\",\"italic\":\"true\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + Format.FormatStringAll(plugin.getConfig().getString("messageremoverpermissions")) + "\"}]}}}]}"); + } + return this.messageDeletedComponentPlayer; + } + + public WrappedChatComponent getMessageDeletedChatComponentAdmin(ChatMessage message) { + String oMessage = message.getOriginalComponent().getJson().substring(1, message.getOriginalComponent().getJson().length() - 11); + if(message.getMessage().contains(ChatColor.stripColor(Format.FormatStringAll(plugin.getConfig().getString("guiicon"))))) { + oMessage = oMessage.substring(0, oMessage.length() - ChatColor.stripColor(Format.FormatStringAll(plugin.getConfig().getString("guiicon"))).length() - 3) + "\"}]"; + } + return WrappedChatComponent.fromJson(Format.FormatStringAll("{\"text\":\"\",\"extra\":[{\"text\":\"&c&o\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"&7Message: \"," + oMessage + "}}}]}")); + } } \ No newline at end of file diff --git a/MineverseChat/mineverse/Aust1n46/chat/command/chat/VentureChatGui.java b/MineverseChat/mineverse/Aust1n46/chat/command/chat/VentureChatGui.java index 13c2e38..3cfcd7c 100644 --- a/MineverseChat/mineverse/Aust1n46/chat/command/chat/VentureChatGui.java +++ b/MineverseChat/mineverse/Aust1n46/chat/command/chat/VentureChatGui.java @@ -66,7 +66,7 @@ public class VentureChatGui extends MineverseCommand { Set blockedCommands = new HashSet(); List mail = new ArrayList(); String jsonFormat = "Default"; - target = new MineverseChatPlayer(uuid, name, current, ignores, listening, mutes, blockedCommands, mail, false, null, true, true, name, jsonFormat, false, false, false, true, true, true); + target = new MineverseChatPlayer(uuid, name, current, ignores, listening, mutes, blockedCommands, mail, false, null, true, true, name, jsonFormat, false, false, false, true, true); MineverseChat.players.add(target); } if(MineverseChat.ccInfo.isChannel(args[1])) { diff --git a/MineverseChat/mineverse/Aust1n46/chat/listeners/PacketListener.java b/MineverseChat/mineverse/Aust1n46/chat/listeners/PacketListener.java index 0d8b058..a147d7b 100644 --- a/MineverseChat/mineverse/Aust1n46/chat/listeners/PacketListener.java +++ b/MineverseChat/mineverse/Aust1n46/chat/listeners/PacketListener.java @@ -1,152 +1,152 @@ -package mineverse.Aust1n46.chat.listeners; - -import java.util.Iterator; - -import org.json.simple.JSONArray; -import org.json.simple.JSONObject; -import org.json.simple.JSONValue; - -import mineverse.Aust1n46.chat.ChatMessage; -import mineverse.Aust1n46.chat.MineverseChat; -import mineverse.Aust1n46.chat.api.MineverseChatAPI; -import mineverse.Aust1n46.chat.api.MineverseChatPlayer; -import mineverse.Aust1n46.chat.utilities.Format; -import mineverse.Aust1n46.chat.versions.VersionHandler; -import net.md_5.bungee.api.chat.BaseComponent; -import net.md_5.bungee.api.chat.TextComponent; -import net.md_5.bungee.chat.ComponentSerializer; - -import com.comphenix.protocol.PacketType; -import com.comphenix.protocol.events.ListenerPriority; -import com.comphenix.protocol.events.PacketAdapter; -import com.comphenix.protocol.events.PacketEvent; -import com.comphenix.protocol.reflect.StructureModifier; -import com.comphenix.protocol.wrappers.WrappedChatComponent; - -import me.clip.placeholderapi.PlaceholderAPI; - -//This class listens for chat packets and intercepts them before they are sent to the Player. -//The packets are modified to include advanced json formating and the message remover button if the -//player has permission to remove messages. -public class PacketListener extends PacketAdapter { - public PacketListener(MineverseChat plugin) { - super(plugin, ListenerPriority.MONITOR, new PacketType[] { PacketType.Play.Server.CHAT }); - this.plugin = plugin; - } - - @Override - public void onPacketSending(PacketEvent event) { - if(event.isCancelled() || event.getPacketType() != PacketType.Play.Server.CHAT) { - return; - } - - StructureModifier chatP = event.getPacket().getChatComponents(); - WrappedChatComponent c = chatP.read(0); - if (c == null) { - StructureModifier modifier = event.getPacket().getSpecificModifier(BaseComponent[].class); - BaseComponent[] components = modifier.readSafely(0); - if (components == null) { - return; - } - String msg = ComponentSerializer.toString(components); - if (msg == null) { - return; - } - if (!PlaceholderAPI.getBracketPlaceholderPattern().matcher(msg).find()) { - return; - } - msg = PlaceholderAPI.setBracketPlaceholders(event.getPlayer(), msg); - modifier.write(0, ComponentSerializer.parse(msg)); - return; - } - String msg = c.getJson(); - if (msg == null) { - return; - } - if (!PlaceholderAPI.getBracketPlaceholderPattern().matcher(msg).find()) { - return; - } - msg = PlaceholderAPI.setBracketPlaceholders(event.getPlayer(), msg); - chatP.write(0, WrappedChatComponent.fromJson(msg)); - - try { - if(VersionHandler.is1_7_10() || VersionHandler.is1_7_9() || VersionHandler.is1_7_2()) { - if((MineverseChat.posField != null) && !(((boolean) MineverseChat.posField.get(event.getPacket().getHandle())))) { - return; - } - } - else if(VersionHandler.is1_8()) { - if((MineverseChat.posField != null) && (((Byte) MineverseChat.posField.get(event.getPacket().getHandle())).intValue() > 1)) { - return; - } - } - else if(VersionHandler.is1_9() || VersionHandler.is1_10() || VersionHandler.is1_11()){ - if((MineverseChat.posField != null) && (((Byte) MineverseChat.posField.get(event.getPacket().getHandle())).intValue() > 1)) { - return; - } - } - else { - if((MineverseChat.posField != null) && ((Object) MineverseChat.posField.get(event.getPacket().getHandle())) == MineverseChat.chatMessageType.getEnumConstants()[2]) { - return; - } - } - } - catch(IllegalArgumentException | IllegalAccessException e) { - e.printStackTrace(); - } - WrappedChatComponent chat = (WrappedChatComponent) event.getPacket().getChatComponents().read(0); - WrappedChatComponent originalChat = (WrappedChatComponent) event.getPacket().getChatComponents().read(0); - String message = null; - int hash = -1; - try { - //System.out.println(chat.getJson()); - //message = TextComponent.toPlainText(new TextComponent(chat.getJson())); - message = (String) MineverseChat.messageMethod.invoke(chat.getHandle(), new Object[0]); - //System.out.println(MineverseChat.lastChatMessage.getMessage()); - hash = message != null ? message.hashCode() : -1; - } - catch(Exception ex) { - message = TextComponent.toPlainText(new TextComponent(chat.getJson())); - System.out.println(message); - //ex.printStackTrace(); - } - ChatMessage lastChatMessage = MineverseChat.lastChatMessage; - MineverseChatPlayer mcp = MineverseChatAPI.getMineverseChatPlayer(event.getPlayer()); - if(lastChatMessage != null && lastChatMessage.getHash() == hash) { - String json = MineverseChat.lastJson; - /*if(mcp.getPlayer().hasPermission("venturechat.message.remove")) { - json = json.substring(0, json.length() - 1); - json += ",{\"text\":\" " + Format.FormatStringAll(plugin.getConfig().getString("messageremovericon")) + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/removemessage " + lastChatMessage.getHash() + " true" +"\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"" + Format.FormatStringAll(plugin.getConfig().getString("messageremovertext")) + "\"}}}]"; - } - if(!mcp.getButtons()) { - for(JsonButton j : MineverseChat.jbInfo.getJsonButtons()) { - if(j.hasPermission() && mcp.getPlayer().hasPermission(j.getPermission())) { - json = json.substring(0, json.length() - 1); - json += ",{\"text\":\" " + Format.FormatStringAll(j.getIcon()) + "\",\"clickEvent\":{\"action\":\"" + j.getAction() + "\",\"value\":\"/" + j.getCommand().replace("{channel}", lastChatMessage.getChannel()).replace("{player}", lastChatMessage.getSender()) + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"" + Format.FormatStringAll(j.getText()) + "\"}}}]"; - } - } - }*/ - if(mcp.getPlayer().hasPermission("venturechat.gui")) { - json = json.substring(0, json.length() - 1); - json += "," + Format.convertToJsonColors(Format.FormatStringAll(plugin.getConfig().getString("guiicon")), ",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/vchatgui " + lastChatMessage.getSender() + " " + lastChatMessage.getChannel() + " " + lastChatMessage.getHash() +"\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[" + Format.convertToJsonColors(Format.FormatStringAll(plugin.getConfig().getString("guitext"))) + "]}}") + "]}]"; - } - //System.out.println(json); - chat.setJson(json); - event.getPacket().getChatComponents().write(0, chat); - } - if((message != null) && (chat.getHandle() != null) && mcp != null) { - mcp.addMessage(new ChatMessage(originalChat, chat, lastChatMessage != null ? lastChatMessage.getSender() : null, message, hash)); - } - } - - @SuppressWarnings("unused") - private String getMessage(String json) { - JSONArray components = (JSONArray) ((JSONObject) JSONValue.parse(json)).get("extra"); - Iterator iterator = components.iterator(); - StringBuilder builder = new StringBuilder(); - while(iterator.hasNext()) { - builder.append(((JSONObject) iterator.next()).get("text").toString()); - } - return builder.toString(); - } +package mineverse.Aust1n46.chat.listeners; + +import java.util.Iterator; + +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; +import org.json.simple.JSONValue; + +import mineverse.Aust1n46.chat.ChatMessage; +import mineverse.Aust1n46.chat.MineverseChat; +import mineverse.Aust1n46.chat.api.MineverseChatAPI; +import mineverse.Aust1n46.chat.api.MineverseChatPlayer; +import mineverse.Aust1n46.chat.utilities.Format; +import mineverse.Aust1n46.chat.versions.VersionHandler; +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.chat.TextComponent; +import net.md_5.bungee.chat.ComponentSerializer; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.ListenerPriority; +import com.comphenix.protocol.events.PacketAdapter; +import com.comphenix.protocol.events.PacketEvent; +import com.comphenix.protocol.reflect.StructureModifier; +import com.comphenix.protocol.wrappers.WrappedChatComponent; + +import me.clip.placeholderapi.PlaceholderAPI; + +//This class listens for chat packets and intercepts them before they are sent to the Player. +//The packets are modified to include advanced json formating and the message remover button if the +//player has permission to remove messages. +public class PacketListener extends PacketAdapter { + public PacketListener(MineverseChat plugin) { + super(plugin, ListenerPriority.MONITOR, new PacketType[] { PacketType.Play.Server.CHAT }); + this.plugin = plugin; + } + + @Override + public void onPacketSending(PacketEvent event) { + if(event.isCancelled() || event.getPacketType() != PacketType.Play.Server.CHAT) { + return; + } + + StructureModifier chatP = event.getPacket().getChatComponents(); + WrappedChatComponent c = chatP.read(0); + if (c == null) { + StructureModifier modifier = event.getPacket().getSpecificModifier(BaseComponent[].class); + BaseComponent[] components = modifier.readSafely(0); + if (components == null) { + return; + } + String msg = ComponentSerializer.toString(components); + if (msg == null) { + return; + } + if (!PlaceholderAPI.getBracketPlaceholderPattern().matcher(msg).find()) { + return; + } + msg = PlaceholderAPI.setBracketPlaceholders(event.getPlayer(), msg); + modifier.write(0, ComponentSerializer.parse(msg)); + return; + } + String msg = c.getJson(); + if (msg == null) { + return; + } + if (!PlaceholderAPI.getBracketPlaceholderPattern().matcher(msg).find()) { + return; + } + msg = PlaceholderAPI.setBracketPlaceholders(event.getPlayer(), msg); + chatP.write(0, WrappedChatComponent.fromJson(msg)); + + try { + if(VersionHandler.is1_7_10() || VersionHandler.is1_7_9() || VersionHandler.is1_7_2()) { + if((MineverseChat.posField != null) && !(((boolean) MineverseChat.posField.get(event.getPacket().getHandle())))) { + return; + } + } + else if(VersionHandler.is1_8()) { + if((MineverseChat.posField != null) && (((Byte) MineverseChat.posField.get(event.getPacket().getHandle())).intValue() > 1)) { + return; + } + } + else if(VersionHandler.is1_9() || VersionHandler.is1_10() || VersionHandler.is1_11()){ + if((MineverseChat.posField != null) && (((Byte) MineverseChat.posField.get(event.getPacket().getHandle())).intValue() > 1)) { + return; + } + } + else { + if((MineverseChat.posField != null) && ((Object) MineverseChat.posField.get(event.getPacket().getHandle())) == MineverseChat.chatMessageType.getEnumConstants()[2]) { + return; + } + } + } + catch(IllegalArgumentException | IllegalAccessException e) { + e.printStackTrace(); + } + WrappedChatComponent chat = (WrappedChatComponent) event.getPacket().getChatComponents().read(0); + WrappedChatComponent originalChat = (WrappedChatComponent) event.getPacket().getChatComponents().read(0); + String message = null; + int hash = -1; + try { + //System.out.println(chat.getJson()); + //message = TextComponent.toPlainText(new TextComponent(chat.getJson())); + message = (String) MineverseChat.messageMethod.invoke(chat.getHandle(), new Object[0]); + //System.out.println(MineverseChat.lastChatMessage.getMessage()); + hash = message != null ? message.hashCode() : -1; + } + catch(Exception ex) { + message = TextComponent.toPlainText(new TextComponent(chat.getJson())); + System.out.println(message); + //ex.printStackTrace(); + } + ChatMessage lastChatMessage = MineverseChat.lastChatMessage; + MineverseChatPlayer mcp = MineverseChatAPI.getMineverseChatPlayer(event.getPlayer()); + if(lastChatMessage != null && lastChatMessage.getHash() == hash) { + String json = MineverseChat.lastJson; + /*if(mcp.getPlayer().hasPermission("venturechat.message.remove")) { + json = json.substring(0, json.length() - 1); + json += ",{\"text\":\" " + Format.FormatStringAll(plugin.getConfig().getString("messageremovericon")) + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/removemessage " + lastChatMessage.getHash() + " true" +"\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"" + Format.FormatStringAll(plugin.getConfig().getString("messageremovertext")) + "\"}}}]"; + } + if(!mcp.getButtons()) { + for(JsonButton j : MineverseChat.jbInfo.getJsonButtons()) { + if(j.hasPermission() && mcp.getPlayer().hasPermission(j.getPermission())) { + json = json.substring(0, json.length() - 1); + json += ",{\"text\":\" " + Format.FormatStringAll(j.getIcon()) + "\",\"clickEvent\":{\"action\":\"" + j.getAction() + "\",\"value\":\"/" + j.getCommand().replace("{channel}", lastChatMessage.getChannel()).replace("{player}", lastChatMessage.getSender()) + "\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"" + Format.FormatStringAll(j.getText()) + "\"}}}]"; + } + } + }*/ + if(mcp.getPlayer().hasPermission("venturechat.gui")) { + json = json.substring(0, json.length() - 1); + json += "," + Format.convertToJsonColors(Format.FormatStringAll(plugin.getConfig().getString("guiicon")), ",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/vchatgui " + lastChatMessage.getSender() + " " + lastChatMessage.getChannel() + " " + lastChatMessage.getHash() +"\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[" + Format.convertToJsonColors(Format.FormatStringAll(plugin.getConfig().getString("guitext"))) + "]}}") + "]}]"; + } + //System.out.println(json); + chat.setJson(json); + event.getPacket().getChatComponents().write(0, chat); + } + if((message != null) && (chat.getHandle() != null) && mcp != null) { + mcp.addMessage(new ChatMessage(originalChat, chat, lastChatMessage != null ? lastChatMessage.getSender() : null, message, hash)); + } + } + + @SuppressWarnings("unused") + private String getMessage(String json) { + JSONArray components = (JSONArray) ((JSONObject) JSONValue.parse(json)).get("extra"); + Iterator iterator = components.iterator(); + StringBuilder builder = new StringBuilder(); + while(iterator.hasNext()) { + builder.append(((JSONObject) iterator.next()).get("text").toString()); + } + return builder.toString(); + } } \ No newline at end of file diff --git a/MineverseChat/plugin.yml b/MineverseChat/plugin.yml index 1734bb6..b99ead2 100644 --- a/MineverseChat/plugin.yml +++ b/MineverseChat/plugin.yml @@ -1,227 +1,227 @@ -name: VentureChat -version: 2.12.0 -main: mineverse.Aust1n46.chat.MineverseChat -depend: [Vault, ProtocolLib, PlaceholderAPI] -softdepend: [Towny, Factions, Heroes] -Author: Aust1n46 -description: Chat with channels with many features! -commands: - mute: - usage: /mute [playername] [channel] - aliases: [mp,vmute] - description: Mutes player in a channel so they cannot talk. - permission-message: You don't have - unmute: - usage: /unmute [playername] [channel] - aliases: [ump,vunmute] - description: Unmutes player in a channel so they can talk again. - permission-message: You don't have - tell: - usage: /tell [playername] [msg] - aliases: [vtell] - description: Send a message to a player - permission-message: You don't have - ignore: - usage: /ignore [playername] or /ignore ? for more information - aliases: [vignore] - description: This allows you to prevent a player from sending you a tell /ignore list to see who you have ignored - permission-message: You don't have - whisper: - usage: /whisper [playername] [msg] - aliases: [w,vwhisper] - description: Send a message to a player - permission-message: You don't have - channel: - usage: /channel [channelname] - aliases: [ch,vchannel] - description: Allows players to add the ability to listen to the channel - permission-message: You don't have - leave: - usage: /leave [channelname] - aliases: [lev,vleave] - description: Allows players to leave listening to a channel - permission-message: You don't have - join: - usage: /join [channelname] - aliases: [vjoin] - description: Allows players to join a channel - permission-message: You don't have - chlist: - usage: /chlist - aliases: [chl,vchlist] - description: Allows players to see a listing of available channels - permission-message: You don't have - chwho: - usage: /chwho [channelname] - aliases: [chw,vchwho] - description: Allows players to see a listing of who is listening on a channel - permission-message: You don't have - setchannel: - usage: /setchannel [playername] [channel] - aliases: [sc,vsetchannel] - description: Sets a players channel - permission-message: You don't have - kickchannel: - usage: /kickchannel [playername] [channel] - aliases: [kc,vkickchannel] - description: Kicks a player out of a channel - permission-message: You don't have - message: - usage: /message [playername] [msg] - aliases: [msg,pm,vmessage] - description: Send a message to a player - muteall: - usage: /muteall [playername] - aliases: [mpa,vmuteall] - description: Mute a player in all channels - permission-message: You don't have - unmuteall: - usage: /unmuteall [playername] - aliases: [umpa,vunmuteall] - description: Unmute a player in all channels - permission-message: You don't have - kickchannelall: - usage: /kickchannelall [playername] - aliases: [kca,vkickchannelall] - description: Kick a player from all channels - permission-message: You don't have - setchannelall: - usage: /setchannelall [playername] - aliases: [sca,vsetchannelall] - description: Set a player into all channels - permission-message: You don't have - force: - usage: /force [playername] [message] - aliases: [for,vforce] - description: Force a player to chat or execute a command - permission-message: You don't have - forceall: - usage: /forceall [message] - aliases: [fora,vforceall] - description: Force all players to chat or execute a command - permission-message: You don't have - listen: - usage: /listen [channel] - aliases: [lis,vlisten] - description: Listen to a channel without setting it as the one your chatting in - permission-message: You don't have - chatreload: - usage: /chatreload - aliases: [cr,vchatreload] - description: Reload the config file - permission-message: You don't have - afk: - usage: /afk - aliases: [vafk] - description: Set yourself as afk - permission-message: You don't have - reply: - usage: /reply [msg] - aliases: [r,vreply] - description: Reply to a message - permission-message: You don't have - spy: - usage: /spy - aliases: [vspy] - description: Spy on tells - permission-message: You don't have - commandspy: - usage: /commandspy - aliases: [comspy,vcommandspy] - description: Spy on commands - permission-message: You don't have - chatinfo: - usage: /chatinfo - aliases: [ci,vchatinfo] - description: Check a players chat info - permission-message: You don't have - channelinfo: - usage: /channelinfo - aliases: [chi,vchannelinfo] - description: Check a channels info - permission-message: You don't have - venturechat: - usage: /venturechat - aliases: [vc] - description: Check plugin information - permission-message: You don't have - me: - usage: /me - aliases: [vme] - description: Send an emote - permission-message: You don't have - filter: - usage: /filter - aliases: [fil,vfilter] - description: Toggle filter on and off - permission-message: You don't have - broadcast: - usage: /broadcast [msg] - aliases: [bc,vbroadcast] - description: Broadcast a message - permission-message: You don't have - commandblock: - usage: /commandblock [player] [command] - aliases: [cb,vcommandblock] - description: Toggle a player blocked from entering a command - permission-message: You don't have - nick: - usage: /nick {player} [nickname] - aliases: [vnick] - description: Set a players nickname - permission-message: You don't have - party: - usage: /party help - aliases: [p,chatparty,cp,vparty] - description: Party commands - permission-message: You don't have - config: - usage: /config help - aliases: [vconfig] - description: Edit commands - permission-message: You don't have - clearchat: - usage: /clearchat - aliases: [cc,vclearchat] - description: Clear every players chat - permission-message: You don't have - notifications: - usage: /notifications - aliases: [notify,vnotify] - description: Toggles your notifications - permission-message: You don't have - mail: - usage: /mail help - aliases: [vmail] - description: Mail commands - permission-message: You don't have - removemessage: - usage: /removemessage [hashcode] - aliases: [rm,vremovemessage] - description: Remove a message from the chat - permission-message: You don't have - edit: - usage: / - aliases: [vedit] - description: Edit your last chat message - permission-message: You don't have - rangedspy: - usage: / - aliases: [rspy,vrangedspy] - description: Toggle spying on ranged channels - permission-message: You don't have - buttons: - usage: / - aliases: [vbuttons] - description: Toggle viewing json buttons - permission-message: You don't have - venturechatgui: - usage: / - aliases: [vchatgui] - description: Opens the chat management gui - permission-message: You don't have - messagetoggle: - usage: / - aliases: [mtoggle,vmessagetoggle] - description: Toggle receiving messages +name: VentureChat +version: 2.12.2 +main: mineverse.Aust1n46.chat.MineverseChat +depend: [Vault, ProtocolLib, PlaceholderAPI] +softdepend: [Towny, Factions, Heroes] +Author: Aust1n46 +description: Chat with channels with many features! +commands: + mute: + usage: /mute [playername] [channel] + aliases: [mp,vmute] + description: Mutes player in a channel so they cannot talk. + permission-message: You don't have + unmute: + usage: /unmute [playername] [channel] + aliases: [ump,vunmute] + description: Unmutes player in a channel so they can talk again. + permission-message: You don't have + tell: + usage: /tell [playername] [msg] + aliases: [vtell] + description: Send a message to a player + permission-message: You don't have + ignore: + usage: /ignore [playername] or /ignore ? for more information + aliases: [vignore] + description: This allows you to prevent a player from sending you a tell /ignore list to see who you have ignored + permission-message: You don't have + whisper: + usage: /whisper [playername] [msg] + aliases: [w,vwhisper] + description: Send a message to a player + permission-message: You don't have + channel: + usage: /channel [channelname] + aliases: [ch,vchannel] + description: Allows players to add the ability to listen to the channel + permission-message: You don't have + leave: + usage: /leave [channelname] + aliases: [lev,vleave] + description: Allows players to leave listening to a channel + permission-message: You don't have + join: + usage: /join [channelname] + aliases: [vjoin] + description: Allows players to join a channel + permission-message: You don't have + chlist: + usage: /chlist + aliases: [chl,vchlist] + description: Allows players to see a listing of available channels + permission-message: You don't have + chwho: + usage: /chwho [channelname] + aliases: [chw,vchwho] + description: Allows players to see a listing of who is listening on a channel + permission-message: You don't have + setchannel: + usage: /setchannel [playername] [channel] + aliases: [sc,vsetchannel] + description: Sets a players channel + permission-message: You don't have + kickchannel: + usage: /kickchannel [playername] [channel] + aliases: [kc,vkickchannel] + description: Kicks a player out of a channel + permission-message: You don't have + message: + usage: /message [playername] [msg] + aliases: [msg,pm,vmessage] + description: Send a message to a player + muteall: + usage: /muteall [playername] + aliases: [mpa,vmuteall] + description: Mute a player in all channels + permission-message: You don't have + unmuteall: + usage: /unmuteall [playername] + aliases: [umpa,vunmuteall] + description: Unmute a player in all channels + permission-message: You don't have + kickchannelall: + usage: /kickchannelall [playername] + aliases: [kca,vkickchannelall] + description: Kick a player from all channels + permission-message: You don't have + setchannelall: + usage: /setchannelall [playername] + aliases: [sca,vsetchannelall] + description: Set a player into all channels + permission-message: You don't have + force: + usage: /force [playername] [message] + aliases: [for,vforce] + description: Force a player to chat or execute a command + permission-message: You don't have + forceall: + usage: /forceall [message] + aliases: [fora,vforceall] + description: Force all players to chat or execute a command + permission-message: You don't have + listen: + usage: /listen [channel] + aliases: [lis,vlisten] + description: Listen to a channel without setting it as the one your chatting in + permission-message: You don't have + chatreload: + usage: /chatreload + aliases: [cr,vchatreload] + description: Reload the config file + permission-message: You don't have + afk: + usage: /afk + aliases: [vafk] + description: Set yourself as afk + permission-message: You don't have + reply: + usage: /reply [msg] + aliases: [r,vreply] + description: Reply to a message + permission-message: You don't have + spy: + usage: /spy + aliases: [vspy] + description: Spy on tells + permission-message: You don't have + commandspy: + usage: /commandspy + aliases: [comspy,vcommandspy] + description: Spy on commands + permission-message: You don't have + chatinfo: + usage: /chatinfo + aliases: [ci,vchatinfo] + description: Check a players chat info + permission-message: You don't have + channelinfo: + usage: /channelinfo + aliases: [chi,vchannelinfo] + description: Check a channels info + permission-message: You don't have + venturechat: + usage: /venturechat + aliases: [vc] + description: Check plugin information + permission-message: You don't have + me: + usage: /me + aliases: [vme] + description: Send an emote + permission-message: You don't have + filter: + usage: /filter + aliases: [fil,vfilter] + description: Toggle filter on and off + permission-message: You don't have + broadcast: + usage: /broadcast [msg] + aliases: [bc,vbroadcast] + description: Broadcast a message + permission-message: You don't have + commandblock: + usage: /commandblock [player] [command] + aliases: [cb,vcommandblock] + description: Toggle a player blocked from entering a command + permission-message: You don't have + nick: + usage: /nick {player} [nickname] + aliases: [vnick] + description: Set a players nickname + permission-message: You don't have + party: + usage: /party help + aliases: [p,chatparty,cp,vparty] + description: Party commands + permission-message: You don't have + config: + usage: /config help + aliases: [vconfig] + description: Edit commands + permission-message: You don't have + clearchat: + usage: /clearchat + aliases: [cc,vclearchat] + description: Clear every players chat + permission-message: You don't have + notifications: + usage: /notifications + aliases: [notify,vnotify] + description: Toggles your notifications + permission-message: You don't have + mail: + usage: /mail help + aliases: [vmail] + description: Mail commands + permission-message: You don't have + removemessage: + usage: /removemessage [hashcode] + aliases: [rm,vremovemessage] + description: Remove a message from the chat + permission-message: You don't have + edit: + usage: / + aliases: [vedit] + description: Edit your last chat message + permission-message: You don't have + rangedspy: + usage: / + aliases: [rspy,vrangedspy] + description: Toggle spying on ranged channels + permission-message: You don't have + buttons: + usage: / + aliases: [vbuttons] + description: Toggle viewing json buttons + permission-message: You don't have + venturechatgui: + usage: / + aliases: [vchatgui] + description: Opens the chat management gui + permission-message: You don't have + messagetoggle: + usage: / + aliases: [mtoggle,vmessagetoggle] + description: Toggle receiving messages permission-message: You don't have \ No newline at end of file