Added new VentureChatEvent for other plugin's to hook into

Cleaned up ChatListener
Cleaned up ChatMessage
Fixed minor Ignore bug
This commit is contained in:
Aust1n46 2020-03-07 14:34:26 -05:00
parent f822aae015
commit 1841cadcd2
6 changed files with 171 additions and 192 deletions

View File

@ -8,17 +8,8 @@ public class ChatMessage {
private WrappedChatComponent component; private WrappedChatComponent component;
private String sender; private String sender;
private String message; private String message;
private String format;
private String chat;
private String channel;
private int hash; private int hash;
public ChatMessage(String sender, String message, int hash) {
this.sender = sender;
this.message = message;
this.hash = hash;
}
public ChatMessage(WrappedChatComponent component, String sender, String message, int hash) { public ChatMessage(WrappedChatComponent component, String sender, String message, int hash) {
this.component = component; this.component = component;
this.sender = sender; this.sender = sender;
@ -49,16 +40,4 @@ public class ChatMessage {
public void setHash(int hash) { public void setHash(int hash) {
this.hash = hash; this.hash = hash;
} }
public String getFormat() {
return this.format;
}
public String getChat() {
return this.chat;
}
public String getChannel() {
return this.channel;
}
} }

View File

@ -158,7 +158,11 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener {
private boolean firstRun = true; private boolean firstRun = true;
// Plugin Messaging Channel // Plugin Messaging Channel
public static String PLUGIN_MESSAGING_CHANNEL = "venturechat:data"; public static final String PLUGIN_MESSAGING_CHANNEL = "venturechat:data";
// Event constants
public static final boolean ASYNC = true;
public static final boolean SYNC = false;
// Vault -------------------------------- // Vault --------------------------------
public static Permission permission = null; public static Permission permission = null;
@ -949,7 +953,6 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener {
player.sendPluginMessage(this, MineverseChat.PLUGIN_MESSAGING_CHANNEL, stream.toByteArray()); player.sendPluginMessage(this, MineverseChat.PLUGIN_MESSAGING_CHANNEL, stream.toByteArray());
return; return;
} }
p.setReplyPlayer(sender);
out.writeUTF("Ignore"); out.writeUTF("Ignore");
out.writeUTF("Echo"); out.writeUTF("Echo");
out.writeUTF(server); out.writeUTF(server);

View File

@ -1,59 +0,0 @@
package mineverse.Aust1n46.chat.api.events;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import mineverse.Aust1n46.chat.ChatMessage;
import mineverse.Aust1n46.chat.api.MineverseChatPlayer;
import mineverse.Aust1n46.chat.channel.ChatChannel;
/**
* Event called when a message has been sent to a channel.
* This event can not be cancelled.
* @author Mark Hughes, Aust1n46
*/
public class ChatMessageEvent extends Event {
private static final HandlerList handlers = new HandlerList();
private final MineverseChatPlayer mcp;
private final ChatChannel channel;
private final boolean bungee;
private final ChatMessage chatMessage;
private final String json;
public ChatMessageEvent(MineverseChatPlayer mcp, ChatChannel channel, boolean bungee, ChatMessage chatMessage, String json) {
this.mcp = mcp;
this.channel = channel;
this.bungee = bungee;
this.chatMessage = chatMessage;
this.json = json;
}
public MineverseChatPlayer getMineverseChatPlayer() {
return mcp;
}
public ChatChannel getChannel() {
return channel;
}
public boolean isBungee() {
return bungee;
}
public ChatMessage getChatMessage() {
return this.chatMessage;
}
public String getJson() {
return this.json;
}
@Override
public HandlerList getHandlers() {
return handlers;
}
public static HandlerList getHandlerList() {
return handlers;
}
}

View File

@ -0,0 +1,85 @@
package mineverse.Aust1n46.chat.api.events;
import java.util.Set;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import mineverse.Aust1n46.chat.MineverseChat;
import mineverse.Aust1n46.chat.api.MineverseChatPlayer;
import mineverse.Aust1n46.chat.channel.ChatChannel;
/**
* Event called when a message has been sent to a channel.
* This event can not be cancelled.
* @author Aust1n46
*/
public class VentureChatEvent extends Event {
private static final HandlerList handlers = new HandlerList();
private final MineverseChatPlayer mcp;
private final ChatChannel channel;
private final Set<Player> recipients;
private final String format;
private final String chat;
private final String globalJSON;
private final int hash;
private final boolean bungee;
public VentureChatEvent(MineverseChatPlayer mcp, ChatChannel channel, Set<Player> recipients, String format, String chat, String globalJSON, int hash, boolean bungee) {
super(MineverseChat.ASYNC);
this.mcp = mcp;
this.channel = channel;
this.recipients = recipients;
this.format = format;
this.chat = chat;
this.globalJSON = globalJSON;
this.hash = hash;
this.bungee = bungee;
}
public MineverseChatPlayer getMineverseChatPlayer() {
return this.mcp;
}
public ChatChannel getChannel() {
return this.channel;
}
public Set<Player> getRecipients() {
return this.recipients;
}
public String getFormat() {
return this.format;
}
public String getChat() {
return this.chat;
}
public String getConsoleChat() {
return this.format + this.chat;
}
public String getGlobalJSON() {
return this.globalJSON;
}
public int getHash() {
return this.hash;
}
public boolean isBungee() {
return this.bungee;
}
@Override
public HandlerList getHandlers() {
return handlers;
}
public static HandlerList getHandlerList() {
return handlers;
}
}

View File

@ -36,12 +36,11 @@ public class Ignore extends MineverseCommand {
String ignoreList = ""; String ignoreList = "";
for(UUID ignore : mcp.getIgnores()) { for(UUID ignore : mcp.getIgnores()) {
MineverseChatPlayer i = MineverseChatAPI.getMineverseChatPlayer(ignore); MineverseChatPlayer i = MineverseChatAPI.getMineverseChatPlayer(ignore);
String iName = ignore.toString();
if(i != null) { if(i != null) {
ignoreList += ChatColor.RED + i.getName() + ChatColor.WHITE + ", "; iName = i.getName();
}
else {
ignoreList += ChatColor.RED + ignore.toString() + ChatColor.WHITE + ", ";
} }
ignoreList += ChatColor.RED + iName + ChatColor.WHITE + ", ";
} }
mcp.getPlayer().sendMessage(ChatColor.GOLD + "You are currently ignoring these players:"); mcp.getPlayer().sendMessage(ChatColor.GOLD + "You are currently ignoring these players:");
if(ignoreList.length() > 0) { if(ignoreList.length() > 0) {
@ -50,6 +49,10 @@ public class Ignore extends MineverseCommand {
return; return;
} }
MineverseChatPlayer player = MineverseChatAPI.getMineverseChatPlayer(args[0]); MineverseChatPlayer player = MineverseChatAPI.getMineverseChatPlayer(args[0]);
if(mcp.getName().equalsIgnoreCase(args[0])) {
mcp.getPlayer().sendMessage(ChatColor.RED + "You can not ignore yourself!");
return;
}
if(plugin.getConfig().getBoolean("bungeecordmessaging", true)) { if(plugin.getConfig().getBoolean("bungeecordmessaging", true)) {
ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream(); ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream();
DataOutputStream out = new DataOutputStream(byteOutStream); DataOutputStream out = new DataOutputStream(byteOutStream);
@ -66,7 +69,7 @@ public class Ignore extends MineverseCommand {
} }
return; return;
} }
if(player == null) { if(player == null || !player.isOnline()) {
mcp.getPlayer().sendMessage(ChatColor.RED + "Player: " + ChatColor.GOLD + args[0] + ChatColor.RED + " is not online."); mcp.getPlayer().sendMessage(ChatColor.RED + "Player: " + ChatColor.GOLD + args[0] + ChatColor.RED + " is not online.");
return; return;
} }
@ -76,14 +79,6 @@ public class Ignore extends MineverseCommand {
plugin.synchronize(mcp, true); plugin.synchronize(mcp, true);
return; return;
} }
if(mcp.getName().equalsIgnoreCase(player.getName())) {
mcp.getPlayer().sendMessage(ChatColor.RED + "You can not ignore yourself!");
return;
}
if(!player.isOnline()) {
mcp.getPlayer().sendMessage(ChatColor.RED + "Player: " + ChatColor.GOLD + player.getName() + ChatColor.RED + " is not online.");
return;
}
if(player.getPlayer().hasPermission("venturechat.ignore.bypass")) { if(player.getPlayer().hasPermission("venturechat.ignore.bypass")) {
mcp.getPlayer().sendMessage(ChatColor.RED + "You cannot ignore player: " + ChatColor.GOLD + player.getName() + ChatColor.RED + "."); mcp.getPlayer().sendMessage(ChatColor.RED + "You cannot ignore player: " + ChatColor.GOLD + player.getName() + ChatColor.RED + ".");
return; return;

View File

@ -2,47 +2,35 @@ package mineverse.Aust1n46.chat.listeners;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream; import java.io.DataOutputStream;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.SQLException; import java.sql.SQLException;
import java.sql.Statement; import java.sql.Statement;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Set;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Sound; import org.bukkit.Sound;
import org.bukkit.entity.ArmorStand;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryOpenEvent;
import org.bukkit.event.player.AsyncPlayerChatEvent; import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.messaging.PluginMessageRecipient;
import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.ProtocolLibrary;
import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.wrappers.WrappedChatComponent; import com.comphenix.protocol.wrappers.WrappedChatComponent;
import com.massivecraft.factions.entity.MPlayer; import com.massivecraft.factions.entity.MPlayer;
import com.palmergames.bukkit.towny.object.Resident; import com.palmergames.bukkit.towny.object.Resident;
import com.palmergames.bukkit.towny.object.TownyUniverse; import com.palmergames.bukkit.towny.object.TownyUniverse;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.IllegalFormatException;
import mineverse.Aust1n46.chat.ChatMessage;
import mineverse.Aust1n46.chat.MineverseChat; import mineverse.Aust1n46.chat.MineverseChat;
import mineverse.Aust1n46.chat.api.MineverseChatAPI; import mineverse.Aust1n46.chat.api.MineverseChatAPI;
import mineverse.Aust1n46.chat.api.MineverseChatPlayer; import mineverse.Aust1n46.chat.api.MineverseChatPlayer;
import mineverse.Aust1n46.chat.api.events.ChannelJoinEvent; import mineverse.Aust1n46.chat.api.events.ChannelJoinEvent;
import mineverse.Aust1n46.chat.api.events.ChatMessageEvent; import mineverse.Aust1n46.chat.api.events.VentureChatEvent;
import mineverse.Aust1n46.chat.channel.ChatChannel; import mineverse.Aust1n46.chat.channel.ChatChannel;
import mineverse.Aust1n46.chat.channel.ChatChannelInfo; import mineverse.Aust1n46.chat.channel.ChatChannelInfo;
import mineverse.Aust1n46.chat.database.DatabaseSender; import mineverse.Aust1n46.chat.database.DatabaseSender;
@ -51,13 +39,11 @@ import mineverse.Aust1n46.chat.utilities.FormatTags;
import mineverse.Aust1n46.chat.versions.VersionHandler; import mineverse.Aust1n46.chat.versions.VersionHandler;
//This class listens to chat through the chat event and handles the bulk of the chat channels and formatting. //This class listens to chat through the chat event and handles the bulk of the chat channels and formatting.
@SuppressWarnings("unused")
public class ChatListener implements Listener { public class ChatListener implements Listener {
private MineverseChat plugin; private MineverseChat plugin = MineverseChat.getInstance();
private ChatChannelInfo cc; private ChatChannelInfo cc;
public ChatListener(ChatChannelInfo cc) { public ChatListener(ChatChannelInfo cc) {
this.plugin = MineverseChat.getInstance();
this.cc = cc; this.cc = cc;
} }
@ -83,23 +69,27 @@ public class ChatListener implements Listener {
@EventHandler(priority = EventPriority.HIGHEST) @EventHandler(priority = EventPriority.HIGHEST)
public void onAsyncPlayerChatEvent(AsyncPlayerChatEvent event) { public void onAsyncPlayerChatEvent(AsyncPlayerChatEvent event) {
boolean bungee = false;
String chat;
String format;
if(event.isCancelled()) { if(event.isCancelled()) {
return; return;
} }
boolean bungee = false;
String chat = event.getMessage();
String format;
Set<Player> recipients = event.getRecipients();
MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer(event.getPlayer()); MineverseChatPlayer mcp = MineverseChatAPI.getOnlineMineverseChatPlayer(event.getPlayer());
ChatChannel eventChannel = mcp.getCurrentChannel(); ChatChannel eventChannel = mcp.getCurrentChannel();
if(mcp.isEditing()) { if(mcp.isEditing()) {
mcp.getPlayer().sendMessage(Format.FormatStringAll(event.getMessage())); mcp.getPlayer().sendMessage(Format.FormatStringAll(chat));
mcp.setEditing(false); mcp.setEditing(false);
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
if(mcp.isQuickChat()) { if(mcp.isQuickChat()) {
eventChannel = mcp.getQuickChannel(); eventChannel = mcp.getQuickChannel();
} }
if(mcp.isAFK()) { if(mcp.isAFK()) {
mcp.setAFK(false); mcp.setAFK(false);
mcp.getPlayer().sendMessage(ChatColor.GOLD + "You are no longer AFK."); mcp.getPlayer().sendMessage(ChatColor.GOLD + "You are no longer AFK.");
@ -111,6 +101,7 @@ public class ChatListener implements Listener {
} }
} }
} }
if(mcp.hasConversation() && !mcp.isQuickChat()) { if(mcp.hasConversation() && !mcp.isQuickChat()) {
MineverseChatPlayer tp = MineverseChatAPI.getMineverseChatPlayer(mcp.getConversation()); MineverseChatPlayer tp = MineverseChatAPI.getMineverseChatPlayer(mcp.getConversation());
if(!tp.isOnline()) { if(!tp.isOnline()) {
@ -135,18 +126,18 @@ public class ChatListener implements Listener {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
String filtered = event.getMessage(); String filtered = chat;
String echo = ""; String echo = "";
String send = ""; String send = "";
String spy = ""; String spy = "";
if(mcp.hasFilter()) { if(mcp.hasFilter()) {
filtered = cc.FilterChat(event.getMessage()); filtered = cc.FilterChat(filtered);
} }
if(mcp.getPlayer().hasPermission("venturechat.color")) { if(mcp.getPlayer().hasPermission("venturechat.color")) {
//filtered = Format.FormatStringColor(filtered); filtered = Format.FormatStringColor(filtered);
} }
if(mcp.getPlayer().hasPermission("venturechat.format")) { if(mcp.getPlayer().hasPermission("venturechat.format")) {
//filtered = Format.FormatString(filtered); filtered = Format.FormatString(filtered);
} }
filtered = " " + filtered; filtered = " " + filtered;
if(plugin.getConfig().getString("tellformatto").equalsIgnoreCase("Default")) { if(plugin.getConfig().getString("tellformatto").equalsIgnoreCase("Default")) {
@ -191,7 +182,7 @@ public class ChatListener implements Listener {
Calendar currentDate = Calendar.getInstance(); Calendar currentDate = Calendar.getInstance();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date = formatter.format(currentDate.getTime()); String date = formatter.format(currentDate.getTime());
DatabaseSender.writeToMySQL("ChatTime", "UUID", "Name", "Server", "Channel", "Text", "Type", date, mcp.getUUID().toString(), mcp.getName(), plugin.getServer().getName(), "Messaging_Component", event.getMessage().replace("'", "''"), "Chat"); DatabaseSender.writeToMySQL("ChatTime", "UUID", "Name", "Server", "Channel", "Text", "Type", date, mcp.getUUID().toString(), mcp.getName(), plugin.getServer().getName(), "Messaging_Component", chat.replace("'", "''"), "Chat");
} }
} }
event.setCancelled(true); event.setCancelled(true);
@ -203,9 +194,9 @@ public class ChatListener implements Listener {
String partyformat = ""; String partyformat = "";
for(MineverseChatPlayer p : MineverseChat.onlinePlayers) { for(MineverseChatPlayer p : MineverseChat.onlinePlayers) {
if((p.hasParty() && p.getParty().toString().equals(mcp.getParty().toString()) || p.isSpy())) { if((p.hasParty() && p.getParty().toString().equals(mcp.getParty().toString()) || p.isSpy())) {
String filtered = event.getMessage(); String filtered = chat;
if(mcp.hasFilter()) { if(mcp.hasFilter()) {
filtered = cc.FilterChat(event.getMessage()); filtered = cc.FilterChat(filtered);
} }
if(mcp.getPlayer().hasPermission("venturechat.color")) { if(mcp.getPlayer().hasPermission("venturechat.color")) {
filtered = Format.FormatStringColor(filtered); filtered = Format.FormatStringColor(filtered);
@ -231,7 +222,7 @@ public class ChatListener implements Listener {
String date = formatter.format(currentDate.getTime()); String date = formatter.format(currentDate.getTime());
try { try {
statement = plugin.c.createStatement(); statement = plugin.c.createStatement();
statement.executeUpdate("INSERT INTO `VentureChat` (`ChatTime`, `UUID`, `Name`, `Server`, `Channel`, `Text`, `Type`) VALUES ('" + date + "', '" + mcp.getUUID().toString() + "', '" + mcp.getName() + "', '" + plugin.getServer().getName() + "', 'Party_Component', '" + event.getMessage().replace("'", "''") + "', 'Chat');"); statement.executeUpdate("INSERT INTO `VentureChat` (`ChatTime`, `UUID`, `Name`, `Server`, `Channel`, `Text`, `Type`) VALUES ('" + date + "', '" + mcp.getUUID().toString() + "', '" + mcp.getName() + "', '" + plugin.getServer().getName() + "', 'Party_Component', '" + chat.replace("'", "''") + "', 'Chat');");
} }
catch(SQLException e) { catch(SQLException e) {
e.printStackTrace(); e.printStackTrace();
@ -245,18 +236,17 @@ public class ChatListener implements Listener {
return; return;
} }
if(event.getMessage().startsWith("@")) { if(chat.startsWith("@")) {
for(MineverseChatPlayer p : MineverseChat.onlinePlayers) { for(MineverseChatPlayer p : MineverseChat.onlinePlayers) {
if(p.isOnline() && event.getMessage().startsWith("@" + p.getPlayer().getDisplayName().replace("§r", ""))) { if(p.isOnline() && chat.startsWith("@" + p.getPlayer().getDisplayName().replace("§r", "") + " ")) {
int add = 0; int add = 0;
if(p.getPlayer().getDisplayName().contains("§r")) add = 2; if(p.getPlayer().getDisplayName().contains("§r")) add = 2;
String messageFormat = event.getMessage().substring(p.getPlayer().getDisplayName().length() + 1 - add); String messageFormat = chat.substring(p.getPlayer().getDisplayName().length() + 1 - add);
if(event.getMessage().length() <= p.getPlayer().getDisplayName().length() + 1 - add) { if(chat.length() <= p.getPlayer().getDisplayName().length() + 1 - add) {
mcp.getPlayer().sendMessage(ChatColor.RED + "You must include a message."); mcp.getPlayer().sendMessage(ChatColor.RED + "You must include a message.");
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
PluginManager pluginManager = plugin.getServer().getPluginManager();
if(!mcp.getPlayer().canSee(p.getPlayer())) { if(!mcp.getPlayer().canSee(p.getPlayer())) {
break; break;
} }
@ -325,9 +315,9 @@ public class ChatListener implements Listener {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
if(event.getMessage().startsWith("@" + p.getName())) { if(chat.startsWith("@" + p.getName() + " ")) {
String messageFormat = event.getMessage().substring(p.getName().length() + 1); String messageFormat = chat.substring(p.getName().length() + 1);
if(event.getMessage().length() <= p.getName().length() + 1) { if(chat.length() <= p.getName().length() + 1) {
mcp.getPlayer().sendMessage(ChatColor.RED + "You must include a message."); mcp.getPlayer().sendMessage(ChatColor.RED + "You must include a message.");
event.setCancelled(true); event.setCancelled(true);
return; return;
@ -401,7 +391,7 @@ public class ChatListener implements Listener {
} }
} }
} }
chat = event.getMessage();
Location locreceip; Location locreceip;
Location locsender = mcp.getPlayer().getLocation(); Location locsender = mcp.getPlayer().getLocation();
Location diff; Location diff;
@ -433,7 +423,6 @@ public class ChatListener implements Listener {
Double chDistance = (double) 0; Double chDistance = (double) 0;
int chCooldown = 0; int chCooldown = 0;
String curColor = ""; String curColor = "";
boolean irc = false;
if(eventChannel.hasPermission() && !mcp.getPlayer().hasPermission(eventChannel.getPermission())) { if(eventChannel.hasPermission() && !mcp.getPlayer().hasPermission(eventChannel.getPermission())) {
mcp.getPlayer().sendMessage(ChatColor.RED + "You do not have permission for this channel."); mcp.getPlayer().sendMessage(ChatColor.RED + "You do not have permission for this channel.");
mcp.setQuickChat(false); mcp.setQuickChat(false);
@ -445,13 +434,6 @@ public class ChatListener implements Listener {
curColor = eventChannel.getChatColor().toUpperCase(); curColor = eventChannel.getChatColor().toUpperCase();
bungee = eventChannel.getBungee(); bungee = eventChannel.getBungee();
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]) * 86400) + (Integer.parseInt(datearray[1]) * 3600) + (Integer.parseInt(datearray[2]) * 60) + (Integer.parseInt(datearray[3]));
//int datetime = (Integer.parseInt(datearray[0]) * 1440) + (Integer.parseInt(datearray[1]) * 60) + (Integer.parseInt(datearray[2]));
int time = (int) (System.currentTimeMillis() / 1000); int time = (int) (System.currentTimeMillis() / 1000);
if(eventChannel.hasCooldown()) { if(eventChannel.hasCooldown()) {
@ -525,9 +507,6 @@ public class ChatListener implements Listener {
if(eventChannel.hasDistance()) { if(eventChannel.hasDistance()) {
chDistance = eventChannel.getDistance(); chDistance = eventChannel.getDistance();
} }
if(eventChannel.isIRC()) {
irc = true;
}
if(plugin.getConfig().getConfigurationSection("channels." + eventChannel.getName()).getString("format").equalsIgnoreCase("Default")) { if(plugin.getConfig().getConfigurationSection("channels." + eventChannel.getName()).getString("format").equalsIgnoreCase("Default")) {
if(curColor.equalsIgnoreCase("None")) { if(curColor.equalsIgnoreCase("None")) {
format = FormatTags.ChatFormat(ChatColor.valueOf(eventChannel.getColor().toUpperCase()) + "[" + eventChannel.getName() + "] {prefix}{name}" + ChatColor.valueOf(eventChannel.getColor().toUpperCase()) + ":", mcp.getPlayer(), plugin, cc, eventChannel, plugin.getConfig().getBoolean("jsonFormat")); format = FormatTags.ChatFormat(ChatColor.valueOf(eventChannel.getColor().toUpperCase()) + "[" + eventChannel.getName() + "] {prefix}{name}" + ChatColor.valueOf(eventChannel.getColor().toUpperCase()) + ":", mcp.getPlayer(), plugin, cc, eventChannel, plugin.getConfig().getBoolean("jsonFormat"));
@ -549,19 +528,15 @@ public class ChatListener implements Listener {
chat = cc.FilterChat(chat); chat = cc.FilterChat(chat);
} }
} }
Player[] pl = event.getRecipients().toArray(new Player[0]);
PluginManager pluginManager = plugin.getServer().getPluginManager(); PluginManager pluginManager = plugin.getServer().getPluginManager();
int recipientSize = event.getRecipients().size();
for(MineverseChatPlayer p : MineverseChat.onlinePlayers) { for(MineverseChatPlayer p : MineverseChat.onlinePlayers) {
if(p.getPlayer() != mcp.getPlayer()) { if(p.getPlayer() != mcp.getPlayer()) {
if(!p.getListening().contains(eventChannel.getName())) { if(!p.getListening().contains(eventChannel.getName())) {
event.getRecipients().remove(p.getPlayer()); recipients.remove(p.getPlayer());
recipientSize--;
continue; continue;
} }
if(plugin.getConfig().getBoolean("ignorechat", false) && p.getIgnores().contains(mcp.getUUID())) { if(plugin.getConfig().getBoolean("ignorechat", false) && p.getIgnores().contains(mcp.getUUID())) {
event.getRecipients().remove(p.getPlayer()); recipients.remove(p.getPlayer());
recipientSize--;
continue; continue;
} }
if(plugin.getConfig().getBoolean("enable_towny_channel") && pluginManager.isPluginEnabled("Towny")) { if(plugin.getConfig().getBoolean("enable_towny_channel") && pluginManager.isPluginEnabled("Towny")) {
@ -570,35 +545,29 @@ public class ChatListener implements Listener {
Resident pp = TownyUniverse.getDataSource().getResident(mcp.getName()); Resident pp = TownyUniverse.getDataSource().getResident(mcp.getName());
if(eventChannel.getName().equalsIgnoreCase("Town")) { if(eventChannel.getName().equalsIgnoreCase("Town")) {
if(!pp.hasTown()) { if(!pp.hasTown()) {
event.getRecipients().remove(p.getPlayer()); recipients.remove(p.getPlayer());
recipientSize--;
continue; continue;
} }
else if(!r.hasTown()) { else if(!r.hasTown()) {
event.getRecipients().remove(p.getPlayer()); recipients.remove(p.getPlayer());
recipientSize--;
continue; continue;
} }
else if(!(r.getTown().getName().equals(pp.getTown().getName()))) { else if(!(r.getTown().getName().equals(pp.getTown().getName()))) {
event.getRecipients().remove(p.getPlayer()); recipients.remove(p.getPlayer());
recipientSize--;
continue; continue;
} }
} }
if(eventChannel.getName().equalsIgnoreCase("Nation")) { if(eventChannel.getName().equalsIgnoreCase("Nation")) {
if(!pp.hasNation()) { if(!pp.hasNation()) {
event.getRecipients().remove(p.getPlayer()); recipients.remove(p.getPlayer());
recipientSize--;
continue; continue;
} }
else if(!r.hasNation()) { else if(!r.hasNation()) {
event.getRecipients().remove(p.getPlayer()); recipients.remove(p.getPlayer());
recipientSize--;
continue; continue;
} }
else if(!(r.getTown().getNation().getName().equals(pp.getTown().getNation().getName()))) { else if(!(r.getTown().getNation().getName().equals(pp.getTown().getNation().getName()))) {
event.getRecipients().remove(p.getPlayer()); recipients.remove(p.getPlayer());
recipientSize--;
continue; continue;
} }
} }
@ -614,13 +583,13 @@ public class ChatListener implements Listener {
MPlayer mplayerp = MPlayer.get(p.getPlayer()); MPlayer mplayerp = MPlayer.get(p.getPlayer());
if(eventChannel.getName().equalsIgnoreCase("Faction")) { if(eventChannel.getName().equalsIgnoreCase("Faction")) {
if(!mplayer.hasFaction()) { if(!mplayer.hasFaction()) {
event.getRecipients().remove(p.getPlayer()); recipients.remove(p.getPlayer());
} }
else if(!mplayerp.hasFaction()) { else if(!mplayerp.hasFaction()) {
event.getRecipients().remove(p.getPlayer()); recipients.remove(p.getPlayer());
} }
else if(!(mplayer.getFactionName().equals(mplayerp.getFactionName()))) { else if(!(mplayer.getFactionName().equals(mplayerp.getFactionName()))) {
event.getRecipients().remove(p.getPlayer()); recipients.remove(p.getPlayer());
} }
} }
} }
@ -634,33 +603,25 @@ public class ChatListener implements Listener {
if(locreceip.getWorld() == mcp.getPlayer().getWorld()) { if(locreceip.getWorld() == mcp.getPlayer().getWorld()) {
diff = locreceip.subtract(locsender); diff = locreceip.subtract(locsender);
if(Math.abs(diff.getX()) > chDistance || Math.abs(diff.getZ()) > chDistance) { if(Math.abs(diff.getX()) > chDistance || Math.abs(diff.getZ()) > chDistance) {
event.getRecipients().remove(p.getPlayer()); recipients.remove(p.getPlayer());
recipientSize--;
continue; continue;
} }
if(!mcp.getPlayer().canSee(p.getPlayer())) { if(!mcp.getPlayer().canSee(p.getPlayer())) {
recipientSize--; recipients.remove(p.getPlayer());
continue; continue;
} }
} }
else { else {
event.getRecipients().remove(p.getPlayer()); recipients.remove(p.getPlayer());
recipientSize--;
continue; continue;
} }
} }
if(!mcp.getPlayer().canSee(p.getPlayer())) { if(!mcp.getPlayer().canSee(p.getPlayer())) {
event.getRecipients().remove(p.getPlayer()); recipients.remove(p.getPlayer());
recipientSize--;
continue; continue;
} }
} }
} }
if(recipientSize == 1 && !bungee) {
if(!plugin.getConfig().getString("emptychannelalert", "&6No one is listening to you.").equals("")) {
mcp.getPlayer().sendMessage(Format.FormatStringAll(plugin.getConfig().getString("emptychannelalert", "&6No one is listening to you.")));
}
}
if(mcp.getPlayer().hasPermission("venturechat.color")) { if(mcp.getPlayer().hasPermission("venturechat.color")) {
chat = Format.FormatStringColor(chat); chat = Format.FormatStringColor(chat);
@ -682,20 +643,32 @@ public class ChatListener implements Listener {
String globalJSON = Format.convertToJson(mcp, format, chat); String globalJSON = Format.convertToJson(mcp, format, chat);
String consoleChat = format + chat; String consoleChat = format + chat;
String message = consoleChat.replaceAll("(§([a-z0-9]))", ""); String message = consoleChat.replaceAll("(§([a-z0-9]))", "");
int hash = message.hashCode();
/* Temp disabled for 1.14 VentureChatEvent ventureChatEvent = new VentureChatEvent(mcp, eventChannel, recipients, format, chat, globalJSON, hash, bungee);
* ChatMessageEvent chatMessageEvent = new ChatMessageEvent(mcp, eventChannel, bungee, MineverseChat.lastChatMessage, MineverseChat.lastJson); Bukkit.getServer().getPluginManager().callEvent(ventureChatEvent);
Bukkit.getServer().getPluginManager().callEvent(chatMessageEvent); event.setCancelled(true);
*/ }
@EventHandler(priority = EventPriority.NORMAL)
public void onVentureChatEvent(VentureChatEvent event) {
MineverseChatPlayer mcp = event.getMineverseChatPlayer();
ChatChannel channel = event.getChannel();
Set<Player> recipients = event.getRecipients();
String chat = event.getChat();
String consoleChat = event.getConsoleChat();
String globalJSON = event.getGlobalJSON();
int hash = event.getHash();
boolean bungee = event.isBungee();
if(plugin.mysql) { if(plugin.mysql) {
Statement statement; Statement statement;
currentDate = Calendar.getInstance(); Calendar currentDate = Calendar.getInstance();
formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
date = formatter.format(currentDate.getTime()); String date = formatter.format(currentDate.getTime());
try { try {
statement = plugin.c.createStatement(); statement = plugin.c.createStatement();
statement.executeUpdate("INSERT INTO `VentureChat` (`ChatTime`, `UUID`, `Name`, `Server`, `Channel`, `Text`, `Type`) VALUES ('" + date + "', '" + mcp.getUUID().toString() + "', '" + mcp.getName() + "', '" + plugin.getServer().getName() + "', '" + eventChannel.getName() + "', '" + event.getMessage().replace("'", "''") + "', 'Chat');"); statement.executeUpdate("INSERT INTO `VentureChat` (`ChatTime`, `UUID`, `Name`, `Server`, `Channel`, `Text`, `Type`) VALUES ('" + date + "', '" + mcp.getUUID().toString() + "', '" + mcp.getName() + "', '" + plugin.getServer().getName() + "', '" + channel.getName() + "', '" + chat.replace("'", "''") + "', 'Chat');");
} }
catch(SQLException e) { catch(SQLException e) {
e.printStackTrace(); e.printStackTrace();
@ -703,14 +676,18 @@ public class ChatListener implements Listener {
} }
if(!bungee) { if(!bungee) {
for(Player p : event.getRecipients()) { if(recipients.size() == 1) {
String json = Format.formatModerationGUI(globalJSON, p, mcp.getName(), eventChannel.getName(), message.hashCode()); if(!plugin.getConfig().getString("emptychannelalert", "&6No one is listening to you.").equals("")) {
mcp.getPlayer().sendMessage(Format.FormatStringAll(plugin.getConfig().getString("emptychannelalert", "&6No one is listening to you.")));
}
}
for(Player p : recipients) {
String json = Format.formatModerationGUI(globalJSON, p, mcp.getName(), channel.getName(), hash);
WrappedChatComponent chatComponent = WrappedChatComponent.fromJson(json); WrappedChatComponent chatComponent = WrappedChatComponent.fromJson(json);
PacketContainer packet = Format.createPacketPlayOutChat(chatComponent); PacketContainer packet = Format.createPacketPlayOutChat(chatComponent);
Format.sendPacketPlayOutChat(p, packet); Format.sendPacketPlayOutChat(p, packet);
} }
Bukkit.getConsoleSender().sendMessage(consoleChat); Bukkit.getConsoleSender().sendMessage(consoleChat);
event.setCancelled(true);
return; return;
} }
else { else {
@ -718,11 +695,11 @@ public class ChatListener implements Listener {
DataOutputStream out = new DataOutputStream(byteOutStream); DataOutputStream out = new DataOutputStream(byteOutStream);
try { try {
out.writeUTF("Chat"); out.writeUTF("Chat");
out.writeUTF(eventChannel.getName()); out.writeUTF(channel.getName());
out.writeUTF(mcp.getName()); out.writeUTF(mcp.getName());
out.writeUTF(mcp.getUUID().toString()); out.writeUTF(mcp.getUUID().toString());
out.writeBoolean(mcp.getBungeeToggle()); out.writeBoolean(mcp.getBungeeToggle());
out.writeInt(message.hashCode()); out.writeInt(hash);
out.writeUTF(consoleChat); out.writeUTF(consoleChat);
if(plugin.getConfig().getString("loglevel", "info").equals("debug")) { if(plugin.getConfig().getString("loglevel", "info").equals("debug")) {
System.out.println(out.size() + " size bytes without json"); System.out.println(out.size() + " size bytes without json");
@ -738,7 +715,6 @@ public class ChatListener implements Listener {
catch(Exception e) { catch(Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
event.setCancelled(true);
return; return;
} }
} }