Reworked chat and JSON formatting to be applied in a single outgoing

packet.
This commit is contained in:
Aust1n46 2020-03-06 23:38:02 -05:00
parent 20f8f3d242
commit 1ef0b818c2
11 changed files with 210 additions and 355 deletions

View File

@ -5,7 +5,6 @@ import com.comphenix.protocol.wrappers.WrappedChatComponent;
//This class is used to create ChatMessage objects, which are used to store information about previous text components //This class is used to create ChatMessage objects, which are used to store information about previous text components
//that were sent to the player. This is a main component in making the message remover work. //that were sent to the player. This is a main component in making the message remover work.
public class ChatMessage { public class ChatMessage {
private WrappedChatComponent originalComponent;
private WrappedChatComponent component; private WrappedChatComponent component;
private String sender; private String sender;
private String message; private String message;
@ -27,31 +26,10 @@ public class ChatMessage {
this.hash = hash; this.hash = hash;
} }
public ChatMessage(String sender, String message, int hash, String format, String chat, String channel) {
this.sender = sender;
this.message = message;
this.format = format;
this.chat = chat;
this.channel = channel;
this.hash = hash;
}
public ChatMessage(WrappedChatComponent originalComponent, WrappedChatComponent component, String sender, String message, int hash) {
this.originalComponent = originalComponent;
this.component = component;
this.sender = sender;
this.message = message;
this.hash = hash;
}
public WrappedChatComponent getComponent() { public WrappedChatComponent getComponent() {
return this.component; return this.component;
} }
public WrappedChatComponent getOriginalComponent() {
return this.originalComponent;
}
public void setComponent(WrappedChatComponent component) { public void setComponent(WrappedChatComponent component) {
this.component = component; this.component = component;
} }

View File

@ -108,8 +108,9 @@ import org.bukkit.scheduler.BukkitScheduler;
import org.bukkit.Sound; import org.bukkit.Sound;
import com.comphenix.protocol.ProtocolLibrary; import com.comphenix.protocol.ProtocolLibrary;
import com.comphenix.protocol.ProtocolManager; import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.utility.MinecraftReflection; import com.comphenix.protocol.utility.MinecraftReflection;
import com.comphenix.protocol.wrappers.WrappedChatComponent;
import me.clip.placeholderapi.PlaceholderAPI; import me.clip.placeholderapi.PlaceholderAPI;
@ -119,12 +120,10 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener {
private LoginListener loginListener; private LoginListener loginListener;
private SignListener signListener; private SignListener signListener;
private CommandListener commandListener; private CommandListener commandListener;
private PacketListener packetListener;
private Channel channelListener; private Channel channelListener;
public static String[] playerlist; public static String[] playerlist;
public static String playerlist_server; public static String playerlist_server;
public boolean ircListen; public boolean ircListen;
public ProtocolManager protocolManager;
public static ChatMessage lastChatMessage; public static ChatMessage lastChatMessage;
public static String lastJson; public static String lastJson;
public static Method messageMethod; public static Method messageMethod;
@ -371,16 +370,16 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener {
} }
channelListener = new Channel(); channelListener = new Channel();
signListener = new SignListener(this, ccInfo); signListener = new SignListener(ccInfo);
chatListener = new ChatListener(this, ccInfo); chatListener = new ChatListener(ccInfo);
commandListener = new CommandListener(this, ccInfo, aaInfo); commandListener = new CommandListener(ccInfo, aaInfo);
PluginManager pluginManager = getServer().getPluginManager(); PluginManager pluginManager = getServer().getPluginManager();
pluginManager.registerEvents(channelListener, this); pluginManager.registerEvents(channelListener, this);
pluginManager.registerEvents(chatListener, this); pluginManager.registerEvents(chatListener, this);
pluginManager.registerEvents(signListener, this); pluginManager.registerEvents(signListener, this);
pluginManager.registerEvents(commandListener, this); pluginManager.registerEvents(commandListener, this);
loginListener = new LoginListener(this, ccInfo); loginListener = new LoginListener(ccInfo);
pluginManager.registerEvents(loginListener, this); pluginManager.registerEvents(loginListener, this);
this.registerPacketListeners(); this.registerPacketListeners();
this.loadNMS(); this.loadNMS();
@ -524,9 +523,7 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener {
} }
private void registerPacketListeners() { private void registerPacketListeners() {
this.protocolManager = ProtocolLibrary.getProtocolManager(); ProtocolLibrary.getProtocolManager().addPacketListener(new PacketListener());
this.packetListener = new PacketListener(this);
this.protocolManager.addPacketListener(this.packetListener);
} }
public static String toPlainText(Object o, Class<?> c) { public static String toPlainText(Object o, Class<?> c) {
@ -779,37 +776,32 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener {
DataOutputStream out = new DataOutputStream(stream); DataOutputStream out = new DataOutputStream(stream);
if(subchannel.equals("Chat")) { if(subchannel.equals("Chat")) {
String chatchannel = msgin.readUTF(); String chatchannel = msgin.readUTF();
String chat = msgin.readUTF(); String senderName = msgin.readUTF();
String playerName = msgin.readUTF(); UUID senderUUID = UUID.fromString(msgin.readUTF());
String lastMessage = msgin.readUTF(); int hash = msgin.readInt();
String f = msgin.readUTF(); String consoleChat = msgin.readUTF();
String c = msgin.readUTF(); String globalJSON = msgin.readUTF();
String json = msgin.readUTF();
if(ccInfo.isChannel(chatchannel) && ccInfo.getChannelInfo(chatchannel).getBungee()) { if(ccInfo.isChannel(chatchannel) && ccInfo.getChannelInfo(chatchannel).getBungee()) {
MineverseChat.lastChatMessage = new ChatMessage(playerName, lastMessage, lastMessage.hashCode(), f, c, chatchannel); Bukkit.getConsoleSender().sendMessage(consoleChat);
lastJson = json;
Bukkit.getConsoleSender().sendMessage(chat);
MineverseChatPlayer sender = MineverseChatAPI.getMineverseChatPlayer(playerName);
for(MineverseChatPlayer p : MineverseChat.onlinePlayers) { for(MineverseChatPlayer p : MineverseChat.onlinePlayers) {
//System.out.println(p.getName() + " received chat message"); System.out.println(p.getName() + " received chat message");
if(p.isOnline() && p.getListening().contains(ccInfo.getChannelInfo(chatchannel).getName())) { if(p.getListening().contains(ccInfo.getChannelInfo(chatchannel).getName())) {
if(!p.getBungeeToggle() && MineverseChatAPI.getOnlineMineverseChatPlayer(playerName) == null) { if(!p.getBungeeToggle() && MineverseChatAPI.getOnlineMineverseChatPlayer(senderName) == null) {
continue; continue;
} }
String json = Format.formatModerationGUI(globalJSON, p.getPlayer(), senderName, chatchannel, hash);
WrappedChatComponent chatComponent = WrappedChatComponent.fromJson(json);
PacketContainer packet = Format.createPacketPlayOutChat(chatComponent);
if(plugin.getConfig().getBoolean("ignorechat", false)) { if(plugin.getConfig().getBoolean("ignorechat", false)) {
// System.out.println(p.getIgnores()); if(!p.getIgnores().contains(senderUUID)) {
if(sender == null) {
// System.out.println("null sender");
p.getPlayer().sendMessage(chat);
continue;
}
if(!p.getIgnores().contains(sender.getUUID())) {
// System.out.println("Chat sent"); // System.out.println("Chat sent");
p.getPlayer().sendMessage(chat); Format.sendPacketPlayOutChat(p.getPlayer(), packet);
} }
continue; continue;
} }
p.getPlayer().sendMessage(chat); Format.sendPacketPlayOutChat(p.getPlayer(), packet);
} }
} }
} }

View File

@ -153,20 +153,18 @@ public class MineverseChatBungee extends Plugin implements Listener {
DataOutputStream out = new DataOutputStream(outstream); DataOutputStream out = new DataOutputStream(outstream);
if(subchannel.equals("Chat")) { if(subchannel.equals("Chat")) {
String chatchannel = in.readUTF(); String chatchannel = in.readUTF();
String message = in.readUTF(); String senderName = in.readUTF();
String playerName = in.readUTF(); String senderUUID = in.readUTF();
boolean bungeeToggle = in.readBoolean(); boolean bungeeToggle = in.readBoolean();
String lastMessage = in.readUTF(); int hash = in.readInt();
String f = in.readUTF(); String consoleChat = in.readUTF();
String c = in.readUTF();
String json = in.readUTF(); String json = in.readUTF();
out.writeUTF("Chat"); out.writeUTF("Chat");
out.writeUTF(chatchannel); out.writeUTF(chatchannel);
out.writeUTF(message); out.writeUTF(senderName);
out.writeUTF(playerName); out.writeUTF(senderUUID);
out.writeUTF(lastMessage); out.writeInt(hash);
out.writeUTF(f); out.writeUTF(consoleChat);
out.writeUTF(c);
out.writeUTF(json); out.writeUTF(json);
for(String send : getProxy().getServers().keySet()) { for(String send : getProxy().getServers().keySet()) {
if(getProxy().getServers().get(send).getPlayers().size() > 0) { if(getProxy().getServers().get(send).getPlayers().size() > 0) {

View File

@ -10,7 +10,6 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.wrappers.WrappedChatComponent; import com.comphenix.protocol.wrappers.WrappedChatComponent;
@ -21,13 +20,12 @@ import mineverse.Aust1n46.chat.command.MineverseCommand;
import mineverse.Aust1n46.chat.utilities.Format; import mineverse.Aust1n46.chat.utilities.Format;
public class Edit extends MineverseCommand { public class Edit extends MineverseCommand {
private PacketContainer emptyLinePacketContainer = createPacketPlayOutChat(WrappedChatComponent.fromJson("{\"extra\":[\" \"],\"text\":\"\"}")); private PacketContainer emptyLinePacketContainer = Format.createPacketPlayOutChat(WrappedChatComponent.fromJson("{\"extra\":[\" \"],\"text\":\"\"}"));
private MineverseChat plugin; private MineverseChat plugin = MineverseChat.getInstance();
private WrappedChatComponent messageDeletedComponentPlayer; private WrappedChatComponent messageDeletedComponentPlayer;
public Edit(String name) { public Edit(String name) {
super(name); super(name);
this.plugin = MineverseChat.getInstance();
} }
@Override @Override
@ -60,7 +58,7 @@ public class Edit extends MineverseCommand {
WrappedChatComponent removedComponent = p.getPlayer().hasPermission("venturechat.message.bypass") ? Edit.this.getMessageDeletedChatComponentAdmin(message) : Edit.this.getMessageDeletedChatComponentPlayer(); WrappedChatComponent removedComponent = p.getPlayer().hasPermission("venturechat.message.bypass") ? Edit.this.getMessageDeletedChatComponentAdmin(message) : Edit.this.getMessageDeletedChatComponentPlayer();
message.setComponent(removedComponent); message.setComponent(removedComponent);
message.setHash(-1); message.setHash(-1);
playerPackets.add(Edit.this.createPacketPlayOutChat(removedComponent)); playerPackets.add(Format.createPacketPlayOutChat(removedComponent));
resend = true; resend = true;
continue; continue;
} }
@ -70,12 +68,12 @@ public class Edit extends MineverseCommand {
WrappedChatComponent removedComponent = p.getPlayer().hasPermission("venturechat.message.bypass") ? Edit.this.getMessageDeletedChatComponentAdmin(message) : Edit.this.getMessageDeletedChatComponentPlayer(); WrappedChatComponent removedComponent = p.getPlayer().hasPermission("venturechat.message.bypass") ? Edit.this.getMessageDeletedChatComponentAdmin(message) : Edit.this.getMessageDeletedChatComponentPlayer();
message.setComponent(removedComponent); message.setComponent(removedComponent);
message.setHash(-1); message.setHash(-1);
playerPackets.add(Edit.this.createPacketPlayOutChat(removedComponent)); playerPackets.add(Format.createPacketPlayOutChat(removedComponent));
resend = true; resend = true;
continue; continue;
} }
} }
playerPackets.add(Edit.this.createPacketPlayOutChat(message.getComponent())); playerPackets.add(Format.createPacketPlayOutChat(message.getComponent()));
} }
if(resend) { if(resend) {
packets.put(p.getPlayer(), playerPackets); packets.put(p.getPlayer(), playerPackets);
@ -86,7 +84,7 @@ public class Edit extends MineverseCommand {
for(Player p : packets.keySet()) { for(Player p : packets.keySet()) {
List<PacketContainer> pPackets = packets.get(p); List<PacketContainer> pPackets = packets.get(p);
for(PacketContainer c : pPackets) { for(PacketContainer c : pPackets) {
Edit.this.sendPacketPlayOutChat(p, c); Format.sendPacketPlayOutChat(p, c);
} }
} }
} }
@ -95,21 +93,6 @@ public class Edit extends MineverseCommand {
}.runTaskAsynchronously(plugin); }.runTaskAsynchronously(plugin);
} }
private PacketContainer createPacketPlayOutChat(WrappedChatComponent component) {
PacketContainer container = new PacketContainer(PacketType.Play.Server.CHAT);
container.getChatComponents().write(0, component);
return container;
}
private void sendPacketPlayOutChat(Player player, PacketContainer packet) {
try {
plugin.protocolManager.sendServerPacket(player, packet);
}
catch(Exception e) {
e.printStackTrace();
}
}
public WrappedChatComponent getMessageDeletedChatComponentPlayer() { public WrappedChatComponent getMessageDeletedChatComponentPlayer() {
if(this.messageDeletedComponentPlayer == null) { if(this.messageDeletedComponentPlayer == null) {
this.messageDeletedComponentPlayer = WrappedChatComponent.fromJson("{\"text\":\"\",\"extra\":[{\"text\":\"<message removed>\",\"color\":\"red\",\"italic\":\"true\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + Format.FormatStringAll(plugin.getConfig().getString("messageremoverpermissions")) + "\"}]}}}]}"); this.messageDeletedComponentPlayer = WrappedChatComponent.fromJson("{\"text\":\"\",\"extra\":[{\"text\":\"<message removed>\",\"color\":\"red\",\"italic\":\"true\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + Format.FormatStringAll(plugin.getConfig().getString("messageremoverpermissions")) + "\"}]}}}]}");
@ -118,7 +101,7 @@ public class Edit extends MineverseCommand {
} }
public WrappedChatComponent getMessageDeletedChatComponentAdmin(ChatMessage message) { public WrappedChatComponent getMessageDeletedChatComponentAdmin(ChatMessage message) {
String oMessage = message.getOriginalComponent().getJson().substring(1, message.getOriginalComponent().getJson().length() - 11); String oMessage = message.getComponent().getJson().substring(1, message.getComponent().getJson().length() - 11);
if(message.getMessage().contains(Format.FormatStringAll(plugin.getConfig().getString("messageremovericon")))) { if(message.getMessage().contains(Format.FormatStringAll(plugin.getConfig().getString("messageremovericon")))) {
oMessage = oMessage.substring(0, oMessage.length() - plugin.getConfig().getString("messageremovericon").length() - 4) + "\"}]"; oMessage = oMessage.substring(0, oMessage.length() - plugin.getConfig().getString("messageremovericon").length() - 4) + "\"}]";
} }

View File

@ -11,22 +11,18 @@ import mineverse.Aust1n46.chat.ChatMessage;
import mineverse.Aust1n46.chat.MineverseChat; import mineverse.Aust1n46.chat.MineverseChat;
import mineverse.Aust1n46.chat.api.MineverseChatPlayer; import mineverse.Aust1n46.chat.api.MineverseChatPlayer;
import mineverse.Aust1n46.chat.command.MineverseCommand; import mineverse.Aust1n46.chat.command.MineverseCommand;
//import mineverse.Aust1n46.chat.json.JsonButton;
import mineverse.Aust1n46.chat.utilities.Format; import mineverse.Aust1n46.chat.utilities.Format;
import mineverse.Aust1n46.chat.versions.VersionHandler;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.wrappers.EnumWrappers.ChatType;
import com.comphenix.protocol.wrappers.WrappedChatComponent; import com.comphenix.protocol.wrappers.WrappedChatComponent;
public class Removemessage extends MineverseCommand { public class Removemessage extends MineverseCommand {
private PacketContainer emptyLinePacketContainer = createPacketPlayOutChat(WrappedChatComponent.fromJson("{\"extra\":[\" \"],\"text\":\"\"}")); private PacketContainer emptyLinePacketContainer = Format.createPacketPlayOutChat(WrappedChatComponent.fromJson("{\"extra\":[\" \"],\"text\":\"\"}"));
private MineverseChat plugin; private MineverseChat plugin;
private WrappedChatComponent messageDeletedComponentPlayer; private WrappedChatComponent messageDeletedComponentPlayer;
@ -76,12 +72,11 @@ public class Removemessage extends MineverseCommand {
playerPackets.add(Removemessage.this.emptyLinePacketContainer); playerPackets.add(Removemessage.this.emptyLinePacketContainer);
} }
for(ChatMessage message : messages) { for(ChatMessage message : messages) {
//System.out.println(message.getMessage() + " remover test");
if(message.getHash() == hash) { if(message.getHash() == hash) {
WrappedChatComponent removedComponent = p.getPlayer().hasPermission("venturechat.message.bypass") ? Removemessage.this.getMessageDeletedChatComponentAdmin(message) : Removemessage.this.getMessageDeletedChatComponentPlayer(); WrappedChatComponent removedComponent = p.getPlayer().hasPermission("venturechat.message.bypass") ? Removemessage.this.getMessageDeletedChatComponentAdmin(message) : Removemessage.this.getMessageDeletedChatComponentPlayer();
message.setComponent(removedComponent); message.setComponent(removedComponent);
message.setHash(-1); message.setHash(-1);
playerPackets.add(Removemessage.this.createPacketPlayOutChat(removedComponent)); playerPackets.add(Format.createPacketPlayOutChat(removedComponent));
resend = true; resend = true;
continue; continue;
} }
@ -91,58 +86,12 @@ public class Removemessage extends MineverseCommand {
WrappedChatComponent removedComponent = p.getPlayer().hasPermission("venturechat.message.bypass") ? Removemessage.this.getMessageDeletedChatComponentAdmin(message) : Removemessage.this.getMessageDeletedChatComponentPlayer(); WrappedChatComponent removedComponent = p.getPlayer().hasPermission("venturechat.message.bypass") ? Removemessage.this.getMessageDeletedChatComponentAdmin(message) : Removemessage.this.getMessageDeletedChatComponentPlayer();
message.setComponent(removedComponent); message.setComponent(removedComponent);
message.setHash(-1); message.setHash(-1);
playerPackets.add(Removemessage.this.createPacketPlayOutChat(removedComponent)); playerPackets.add(Format.createPacketPlayOutChat(removedComponent));
resend = true; resend = true;
continue; continue;
} }
} }
/*if(message.getMessage().contains(Format.FormatStringAll(plugin.getConfig().getString("messageremovericon")))) { playerPackets.add(Format.createPacketPlayOutChat(message.getComponent()));
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;
}*/
//System.out.println(message.getComponent().getJson());
playerPackets.add(Removemessage.this.createPacketPlayOutChat(message.getComponent()));
} }
if(resend) { if(resend) {
@ -154,7 +103,7 @@ public class Removemessage extends MineverseCommand {
for(Player p : packets.keySet()) { for(Player p : packets.keySet()) {
List<PacketContainer> pPackets = packets.get(p); List<PacketContainer> pPackets = packets.get(p);
for(PacketContainer c : pPackets) { for(PacketContainer c : pPackets) {
Removemessage.this.sendPacketPlayOutChat(p, c); Format.sendPacketPlayOutChat(p, c);
} }
} }
} }
@ -164,34 +113,15 @@ public class Removemessage extends MineverseCommand {
} }
} }
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() { public WrappedChatComponent getMessageDeletedChatComponentPlayer() {
if(this.messageDeletedComponentPlayer == null) { if(this.messageDeletedComponentPlayer == null) {
//this.messageDeletedComponentPlayer = WrappedChatComponent.fromJson("{\"text\":\"\",\"extra\":[{\"text\":\"<message removed>\",\"color\":\"red\",\"italic\":\"true\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + Format.FormatStringAll(plugin.getConfig().getString("messageremoverpermissions")) + "\"}]}}}]}");
this.messageDeletedComponentPlayer = WrappedChatComponent.fromJson("{\"text\":\"\",\"extra\":[{\"text\":\"" + Format.FormatStringAll(plugin.getConfig().getString("messageremovertext")) + "\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + Format.FormatStringAll(plugin.getConfig().getString("messageremoverpermissions")) + "\"}]}}}]}"); this.messageDeletedComponentPlayer = WrappedChatComponent.fromJson("{\"text\":\"\",\"extra\":[{\"text\":\"" + Format.FormatStringAll(plugin.getConfig().getString("messageremovertext")) + "\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[{\"text\":\"" + Format.FormatStringAll(plugin.getConfig().getString("messageremoverpermissions")) + "\"}]}}}]}");
} }
return this.messageDeletedComponentPlayer; return this.messageDeletedComponentPlayer;
} }
public WrappedChatComponent getMessageDeletedChatComponentAdmin(ChatMessage message) { public WrappedChatComponent getMessageDeletedChatComponentAdmin(ChatMessage message) {
String oMessage = message.getOriginalComponent().getJson().substring(1, message.getOriginalComponent().getJson().length() - 11); String oMessage = message.getComponent().getJson().substring(1, message.getComponent().getJson().length() - 11);
if(message.getMessage().contains(ChatColor.stripColor(Format.FormatStringAll(plugin.getConfig().getString("guiicon"))))) { 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) + "\"}]"; oMessage = oMessage.substring(0, oMessage.length() - ChatColor.stripColor(Format.FormatStringAll(plugin.getConfig().getString("guiicon"))).length() - 3) + "\"}]";
} }

View File

@ -2,6 +2,7 @@ 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.lang.reflect.Method;
import java.sql.SQLException; import java.sql.SQLException;
import java.sql.Statement; import java.sql.Statement;
@ -24,6 +25,10 @@ import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.messaging.PluginMessageRecipient; 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.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;
@ -51,12 +56,8 @@ public class ChatListener implements Listener {
private MineverseChat plugin; private MineverseChat plugin;
private ChatChannelInfo cc; private ChatChannelInfo cc;
public ChatListener(MineverseChat plugin) { public ChatListener(ChatChannelInfo cc) {
this.plugin = plugin; this.plugin = MineverseChat.getInstance();
}
public ChatListener(MineverseChat plugin, ChatChannelInfo cc) {
this.plugin = plugin;
this.cc = cc; this.cc = cc;
} }
@ -83,7 +84,8 @@ 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; boolean bungee = false;
String evMessage; String chat;
String format;
if(event.isCancelled()) { if(event.isCancelled()) {
return; return;
} }
@ -93,6 +95,7 @@ public class ChatListener implements Listener {
mcp.getPlayer().sendMessage(Format.FormatStringAll(event.getMessage())); mcp.getPlayer().sendMessage(Format.FormatStringAll(event.getMessage()));
mcp.setEditing(false); mcp.setEditing(false);
event.setCancelled(true); event.setCancelled(true);
return;
} }
if(mcp.isQuickChat()) { if(mcp.isQuickChat()) {
eventChannel = mcp.getQuickChannel(); eventChannel = mcp.getQuickChannel();
@ -247,7 +250,7 @@ public class ChatListener implements Listener {
if(p.isOnline() && event.getMessage().startsWith("@" + p.getPlayer().getDisplayName().replace("§r", ""))) { if(p.isOnline() && event.getMessage().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 format = event.getMessage().substring(p.getPlayer().getDisplayName().length() + 1 - add); String messageFormat = event.getMessage().substring(p.getPlayer().getDisplayName().length() + 1 - add);
if(event.getMessage().length() <= p.getPlayer().getDisplayName().length() + 1 - add) { if(event.getMessage().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);
@ -274,31 +277,31 @@ public class ChatListener implements Listener {
mcp.getPlayer().sendMessage(ChatColor.GOLD + p.getPlayer().getDisplayName() + " is currently afk and might be unable to chat at this time."); mcp.getPlayer().sendMessage(ChatColor.GOLD + p.getPlayer().getDisplayName() + " is currently afk and might be unable to chat at this time.");
} }
if(mcp.hasFilter()) { if(mcp.hasFilter()) {
format = cc.FilterChat(format); messageFormat = cc.FilterChat(messageFormat);
} }
if(mcp.getPlayer().hasPermission("venturechat.color")) { if(mcp.getPlayer().hasPermission("venturechat.color")) {
format = Format.FormatStringColor(format); messageFormat = Format.FormatStringColor(messageFormat);
} }
if(mcp.getPlayer().hasPermission("venturechat.format")) { if(mcp.getPlayer().hasPermission("venturechat.format")) {
format = Format.FormatString(format); messageFormat = Format.FormatString(messageFormat);
} }
if(plugin.getConfig().getString("tellformatto").equalsIgnoreCase("Default")) { if(plugin.getConfig().getString("tellformatto").equalsIgnoreCase("Default")) {
echo = "You message " + p.getPlayer().getDisplayName() + ":" + ChatColor.valueOf(cc.tellColor.toUpperCase()) + format; echo = "You message " + p.getPlayer().getDisplayName() + ":" + ChatColor.valueOf(cc.tellColor.toUpperCase()) + messageFormat;
} }
else { else {
echo = Format.FormatStringAll(plugin.getConfig().getString("tellformatto").replace("{playerto}", p.getPlayer().getDisplayName()).replace("{playerfrom}", mcp.getPlayer().getDisplayName())) + format; echo = Format.FormatStringAll(plugin.getConfig().getString("tellformatto").replace("{playerto}", p.getPlayer().getDisplayName()).replace("{playerfrom}", mcp.getPlayer().getDisplayName())) + messageFormat;
} }
if(plugin.getConfig().getString("tellformatfrom").equalsIgnoreCase("Default")) { if(plugin.getConfig().getString("tellformatfrom").equalsIgnoreCase("Default")) {
send = mcp.getPlayer().getDisplayName() + " messages you:" + ChatColor.valueOf(cc.tellColor.toUpperCase()) + format; send = mcp.getPlayer().getDisplayName() + " messages you:" + ChatColor.valueOf(cc.tellColor.toUpperCase()) + messageFormat;
} }
else { else {
send = Format.FormatStringAll(plugin.getConfig().getString("tellformatfrom").replace("{playerto}", p.getPlayer().getDisplayName()).replace("{playerfrom}", mcp.getPlayer().getDisplayName())) + format; send = Format.FormatStringAll(plugin.getConfig().getString("tellformatfrom").replace("{playerto}", p.getPlayer().getDisplayName()).replace("{playerfrom}", mcp.getPlayer().getDisplayName())) + messageFormat;
} }
if(plugin.getConfig().getString("tellformatspy").equalsIgnoreCase("Default")) { if(plugin.getConfig().getString("tellformatspy").equalsIgnoreCase("Default")) {
spy = p.getName() + " messages " + p.getName() + ":" + ChatColor.valueOf(cc.tellColor.toUpperCase()) + format; spy = p.getName() + " messages " + p.getName() + ":" + ChatColor.valueOf(cc.tellColor.toUpperCase()) + messageFormat;
} }
else { else {
spy = Format.FormatStringAll(plugin.getConfig().getString("tellformatspy").replace("{playerto}", p.getName()).replace("{playerfrom}", mcp.getName())) + format; spy = Format.FormatStringAll(plugin.getConfig().getString("tellformatspy").replace("{playerto}", p.getName()).replace("{playerfrom}", mcp.getName())) + messageFormat;
} }
for(MineverseChatPlayer sp : MineverseChat.onlinePlayers) { for(MineverseChatPlayer sp : MineverseChat.onlinePlayers) {
if(sp.isSpy()) { if(sp.isSpy()) {
@ -318,12 +321,12 @@ public class ChatListener implements Listener {
} }
p.setReplyPlayer(mcp.getUUID()); p.setReplyPlayer(mcp.getUUID());
mcp.setReplyPlayer(p.getUUID()); mcp.setReplyPlayer(p.getUUID());
Bukkit.getConsoleSender().sendMessage(mcp.getName() + " messages " + p.getName() + ":" + ChatColor.valueOf(cc.tellColor.toUpperCase()) + format); Bukkit.getConsoleSender().sendMessage(mcp.getName() + " messages " + p.getName() + ":" + ChatColor.valueOf(cc.tellColor.toUpperCase()) + messageFormat);
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
if(event.getMessage().startsWith("@" + p.getName())) { if(event.getMessage().startsWith("@" + p.getName())) {
String format = event.getMessage().substring(p.getName().length() + 1); String messageFormat = event.getMessage().substring(p.getName().length() + 1);
if(event.getMessage().length() <= p.getName().length() + 1) { if(event.getMessage().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);
@ -349,31 +352,31 @@ public class ChatListener implements Listener {
mcp.getPlayer().sendMessage(ChatColor.GOLD + p.getPlayer().getDisplayName() + " is currently afk and might be unable to chat at this time."); mcp.getPlayer().sendMessage(ChatColor.GOLD + p.getPlayer().getDisplayName() + " is currently afk and might be unable to chat at this time.");
} }
if(mcp.hasFilter()) { if(mcp.hasFilter()) {
format = cc.FilterChat(format); messageFormat = cc.FilterChat(messageFormat);
} }
if(mcp.getPlayer().hasPermission("venturechat.color")) { if(mcp.getPlayer().hasPermission("venturechat.color")) {
format = Format.FormatStringColor(format); messageFormat = Format.FormatStringColor(messageFormat);
} }
if(mcp.getPlayer().hasPermission("venturechat.format")) { if(mcp.getPlayer().hasPermission("venturechat.format")) {
format = Format.FormatString(format); messageFormat = Format.FormatString(messageFormat);
} }
if(plugin.getConfig().getString("tellformatto").equalsIgnoreCase("Default")) { if(plugin.getConfig().getString("tellformatto").equalsIgnoreCase("Default")) {
echo = "You message " + p.getNickname() + ":" + ChatColor.valueOf(cc.tellColor.toUpperCase()) + format; echo = "You message " + p.getNickname() + ":" + ChatColor.valueOf(cc.tellColor.toUpperCase()) + messageFormat;
} }
else { else {
echo = Format.FormatStringAll(plugin.getConfig().getString("tellformatto").replace("{playerto}", p.getPlayer().getDisplayName()).replace("{playerfrom}", mcp.getPlayer().getDisplayName())) + format; echo = Format.FormatStringAll(plugin.getConfig().getString("tellformatto").replace("{playerto}", p.getPlayer().getDisplayName()).replace("{playerfrom}", mcp.getPlayer().getDisplayName())) + messageFormat;
} }
if(plugin.getConfig().getString("tellformatfrom").equalsIgnoreCase("Default")) { if(plugin.getConfig().getString("tellformatfrom").equalsIgnoreCase("Default")) {
send = mcp.getNickname() + " messages you:" + ChatColor.valueOf(cc.tellColor.toUpperCase()) + format; send = mcp.getNickname() + " messages you:" + ChatColor.valueOf(cc.tellColor.toUpperCase()) + messageFormat;
} }
else { else {
send = Format.FormatStringAll(plugin.getConfig().getString("tellformatfrom").replace("{playerto}", p.getPlayer().getDisplayName()).replace("{playerfrom}", mcp.getPlayer().getDisplayName())) + format; send = Format.FormatStringAll(plugin.getConfig().getString("tellformatfrom").replace("{playerto}", p.getPlayer().getDisplayName()).replace("{playerfrom}", mcp.getPlayer().getDisplayName())) + messageFormat;
} }
if(plugin.getConfig().getString("tellformatspy").equalsIgnoreCase("Default")) { if(plugin.getConfig().getString("tellformatspy").equalsIgnoreCase("Default")) {
spy = mcp.getName() + " messages " + p.getName() + ":" + ChatColor.valueOf(cc.tellColor.toUpperCase()) + format; spy = mcp.getName() + " messages " + p.getName() + ":" + ChatColor.valueOf(cc.tellColor.toUpperCase()) + messageFormat;
} }
else { else {
spy = Format.FormatStringAll(plugin.getConfig().getString("tellformatspy").replace("{playerto}", p.getName()).replace("{playerfrom}", mcp.getName())) + format; spy = Format.FormatStringAll(plugin.getConfig().getString("tellformatspy").replace("{playerto}", p.getName()).replace("{playerfrom}", mcp.getName())) + messageFormat;
} }
for(MineverseChatPlayer sp : MineverseChat.onlinePlayers) { for(MineverseChatPlayer sp : MineverseChat.onlinePlayers) {
if(sp.isSpy()) { if(sp.isSpy()) {
@ -392,13 +395,13 @@ public class ChatListener implements Listener {
} }
p.setReplyPlayer(mcp.getUUID()); p.setReplyPlayer(mcp.getUUID());
mcp.setReplyPlayer(p.getUUID()); mcp.setReplyPlayer(p.getUUID());
Bukkit.getConsoleSender().sendMessage(mcp.getName() + " messages " + p.getName() + ":" + ChatColor.valueOf(cc.tellColor.toUpperCase()) + format); Bukkit.getConsoleSender().sendMessage(mcp.getName() + " messages " + p.getName() + ":" + ChatColor.valueOf(cc.tellColor.toUpperCase()) + messageFormat);
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
} }
} }
evMessage = event.getMessage(); chat = event.getMessage();
Location locreceip; Location locreceip;
Location locsender = mcp.getPlayer().getLocation(); Location locsender = mcp.getPlayer().getLocation();
Location diff; Location diff;
@ -430,7 +433,6 @@ public class ChatListener implements Listener {
Double chDistance = (double) 0; Double chDistance = (double) 0;
int chCooldown = 0; int chCooldown = 0;
String curColor = ""; String curColor = "";
String Channelformat;
boolean irc = false; 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.");
@ -469,7 +471,7 @@ public class ChatListener implements Listener {
return; return;
} }
} }
if(eventChannel.hasCooldown() && !event.isCancelled()) { if(eventChannel.hasCooldown()) {
if(!mcp.getPlayer().hasPermission("venturechat.cooldown.bypass")) { if(!mcp.getPlayer().hasPermission("venturechat.cooldown.bypass")) {
mcp.addCooldown(eventChannel, time + chCooldown); mcp.addCooldown(eventChannel, time + chCooldown);
} }
@ -499,6 +501,7 @@ public class ChatListener implements Listener {
mcp.getPlayer().sendMessage(ChatColor.RED + "You have been muted for spamming in: " + ChatColor.valueOf(eventChannel.getColor().toUpperCase()) + eventChannel.getName() + timedmute); mcp.getPlayer().sendMessage(ChatColor.RED + "You have been muted for spamming in: " + ChatColor.valueOf(eventChannel.getColor().toUpperCase()) + eventChannel.getName() + timedmute);
mcp.setQuickChat(false); mcp.setQuickChat(false);
event.setCancelled(true); event.setCancelled(true);
return;
} }
else { else {
if(spamtimeconfig % 2 != 0) spamtimeconfig++; if(spamtimeconfig % 2 != 0) spamtimeconfig++;
@ -527,23 +530,23 @@ public class ChatListener implements Listener {
} }
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")) {
Channelformat = 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"));
} }
else { else {
Channelformat = FormatTags.ChatFormat(ChatColor.valueOf(eventChannel.getColor().toUpperCase()) + "[" + eventChannel.getName() + "] {prefix}{name}" + ChatColor.valueOf(eventChannel.getColor().toUpperCase()) + ":" + ChatColor.valueOf(eventChannel.getChatColor().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()) + ":" + ChatColor.valueOf(eventChannel.getChatColor().toUpperCase()), mcp.getPlayer(), plugin, cc, eventChannel, plugin.getConfig().getBoolean("jsonFormat"));
} }
} }
else { else {
Channelformat = FormatTags.ChatFormat(plugin.getConfig().getConfigurationSection("channels." + eventChannel.getName()).getString("format"), mcp.getPlayer(), plugin, cc, eventChannel, plugin.getConfig().getBoolean("jsonFormat")); format = FormatTags.ChatFormat(plugin.getConfig().getConfigurationSection("channels." + eventChannel.getName()).getString("format"), mcp.getPlayer(), plugin, cc, eventChannel, plugin.getConfig().getBoolean("jsonFormat"));
if(plugin.getConfig().getBoolean("formatcleaner", false)) { if(plugin.getConfig().getBoolean("formatcleaner", false)) {
Channelformat = Channelformat.replace("[]", " "); format = format.replace("[]", " ");
Channelformat = Channelformat.replace(" ", " ").replace(" ", " ").replace(" ", " "); format = format.replace(" ", " ").replace(" ", " ").replace(" ", " ");
} }
} }
filterthis = eventChannel.isFiltered(); filterthis = eventChannel.isFiltered();
if(filterthis) { if(filterthis) {
if(mcp.hasFilter()) { if(mcp.hasFilter()) {
evMessage = cc.FilterChat(evMessage); chat = cc.FilterChat(chat);
} }
} }
Player[] pl = event.getRecipients().toArray(new Player[0]); Player[] pl = event.getRecipients().toArray(new Player[0]);
@ -647,44 +650,38 @@ public class ChatListener implements Listener {
} }
} }
if(!mcp.getPlayer().canSee(p.getPlayer())) { if(!mcp.getPlayer().canSee(p.getPlayer())) {
event.getRecipients().remove(p.getPlayer());
recipientSize--; recipientSize--;
continue; continue;
} }
} }
} }
if(recipientSize == 1 && !bungee && !event.isCancelled()) { if(recipientSize == 1 && !bungee) {
if(!plugin.getConfig().getString("emptychannelalert", "&6No one is listening to you.").equals("")) 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."))); mcp.getPlayer().sendMessage(Format.FormatStringAll(plugin.getConfig().getString("emptychannelalert", "&6No one is listening to you.")));
} }
try { }
if(mcp.getPlayer().hasPermission("venturechat.color")) { if(mcp.getPlayer().hasPermission("venturechat.color")) {
evMessage = Format.FormatStringColor(evMessage); chat = Format.FormatStringColor(chat);
} }
if(mcp.getPlayer().hasPermission("venturechat.format")) { if(mcp.getPlayer().hasPermission("venturechat.format")) {
evMessage = Format.FormatString(evMessage); chat = Format.FormatString(chat);
} }
if(!mcp.isQuickChat()) { if(!mcp.isQuickChat()) {
evMessage = " " + evMessage; chat = " " + chat;
}
if(curColor.equalsIgnoreCase("None")) {
event.setMessage(evMessage);
}
else {
event.setMessage(ChatColor.valueOf(curColor) + evMessage);
} }
mcp.setQuickChat(false); mcp.setQuickChat(false);
String message = String.format(Channelformat + "%s", new Object[] { event.getMessage() });
event.setFormat(message.replace("%", "%%"));
message = message.replaceAll("(§([a-z0-9]))", "");
String format = Channelformat;
String chat = event.getMessage();
if(curColor.equalsIgnoreCase("None")) { if(curColor.equalsIgnoreCase("None")) {
chat = Format.getLastCode(format) + chat; chat = Format.getLastCode(format) + chat;
event.setMessage(chat);
} }
MineverseChat.lastChatMessage = new ChatMessage(mcp.getPlayer().getName(), message, message.hashCode(), format, chat, eventChannel.getName()); else {
MineverseChat.lastJson = Format.convertToJson(MineverseChat.lastChatMessage); chat = ChatColor.valueOf(curColor) + chat;
}
String globalJSON = Format.convertToJson(mcp, format, chat);
String consoleChat = format + chat;
String message = consoleChat.replaceAll("(§([a-z0-9]))", "");
/* Temp disabled for 1.14 /* Temp disabled for 1.14
* ChatMessageEvent chatMessageEvent = new ChatMessageEvent(mcp, eventChannel, bungee, MineverseChat.lastChatMessage, MineverseChat.lastJson); * ChatMessageEvent chatMessageEvent = new ChatMessageEvent(mcp, eventChannel, bungee, MineverseChat.lastChatMessage, MineverseChat.lastJson);
@ -704,53 +701,45 @@ public class ChatListener implements Listener {
e.printStackTrace(); e.printStackTrace();
} }
} }
if(bungee && !event.isCancelled()) {
message = String.format(Channelformat + event.getMessage(), new Object[] { event.getPlayer().getDisplayName(), event.getMessage() }).replaceAll("(§([a-z0-9]))", ""); if(!bungee) {
format = String.format(Channelformat, new Object[] { event.getPlayer().getDisplayName() }); for(Player p : event.getRecipients()) {
chat = event.getMessage(); String json = Format.formatModerationGUI(globalJSON, p, mcp.getName(), eventChannel.getName(), message.hashCode());
//MineverseChat.lastChatMessage = new ChatMessage(mcp.getPlayer().getName(), message, message.hashCode(), format, chat, eventChannel.getName()); WrappedChatComponent chatComponent = WrappedChatComponent.fromJson(json);
//MineverseChat.lastJson = Format.convertToJson(MineverseChat.lastChatMessage); PacketContainer packet = Format.createPacketPlayOutChat(chatComponent);
Format.sendPacketPlayOutChat(p, packet);
}
Bukkit.getConsoleSender().sendMessage(consoleChat);
event.setCancelled(true); event.setCancelled(true);
return;
}
else {
ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream(); ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream();
DataOutputStream out = new DataOutputStream(byteOutStream); DataOutputStream out = new DataOutputStream(byteOutStream);
try { try {
out.writeUTF("Chat"); out.writeUTF("Chat");
out.writeUTF(eventChannel.getName()); out.writeUTF(eventChannel.getName());
out.writeUTF(Channelformat + event.getMessage());
out.writeUTF(mcp.getName()); out.writeUTF(mcp.getName());
out.writeUTF(mcp.getUUID().toString());
out.writeBoolean(mcp.getBungeeToggle()); out.writeBoolean(mcp.getBungeeToggle());
out.writeUTF(message); out.writeInt(message.hashCode());
out.writeUTF(format); out.writeUTF(consoleChat);
out.writeUTF(chat);
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");
} }
out.writeUTF(MineverseChat.lastJson); out.writeUTF(globalJSON);
if(plugin.getConfig().getString("loglevel", "info").equals("debug")) { if(plugin.getConfig().getString("loglevel", "info").equals("debug")) {
System.out.println(out.size() + " bytes size with json"); System.out.println(out.size() + " bytes size with json");
} }
mcp.getPlayer().sendPluginMessage(plugin, MineverseChat.PLUGIN_MESSAGING_CHANNEL, byteOutStream.toByteArray()); mcp.getPlayer().sendPluginMessage(plugin, MineverseChat.PLUGIN_MESSAGING_CHANNEL, byteOutStream.toByteArray());
//PluginMessageRecipient test = (PluginMessageRecipient) mcp.getPlayer();
//System.out.println("Listening plugin channels?");
//System.out.println(test.getListeningPluginChannels());
//System.out.println("PluginMessageRecipient methods?");
//for(Method m : test.getClass().getMethods()) {
//System.out.println(m.getName());
//}
out.close(); out.close();
} }
catch(Exception e) { catch(Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
event.setCancelled(true);
} return;
}
catch(IllegalFormatException ex) {
// plugin.getLogger().log(Level.INFO,
// "Message Format issue: {0}:{1}", new Object[] { ex.getMessage(),
// evMessage });
event.setMessage(Channelformat + evMessage);
} }
} }
} }

View File

@ -38,12 +38,11 @@ import me.clip.placeholderapi.PlaceholderAPI;
//This class listens for commands (Any chat that begins with a /) to use in the command spy and //This class listens for commands (Any chat that begins with a /) to use in the command spy and
//in the custom commands such as aliases. //in the custom commands such as aliases.
public class CommandListener implements CommandExecutor, Listener { public class CommandListener implements CommandExecutor, Listener {
private MineverseChat plugin; private MineverseChat plugin = MineverseChat.getInstance();
private ChatChannelInfo cc; private ChatChannelInfo cc;
private AliasInfo aa; private AliasInfo aa;
public CommandListener(MineverseChat plugin, ChatChannelInfo cc, AliasInfo aa) { public CommandListener(ChatChannelInfo cc, AliasInfo aa) {
this.plugin = plugin;
this.cc = cc; this.cc = cc;
this.aa = aa; this.aa = aa;
} }

View File

@ -30,12 +30,11 @@ import org.bukkit.event.player.PlayerQuitEvent;
//This class listens for when Players login or logout and manages their wrapped MineverseChatPlayer //This class listens for when Players login or logout and manages their wrapped MineverseChatPlayer
//and it's data. //and it's data.
public class LoginListener implements Listener { public class LoginListener implements Listener {
private MineverseChat plugin; private MineverseChat plugin = MineverseChat.getInstance();
private ChatChannelInfo cc; private ChatChannelInfo cc;
private FileConfiguration playerData = PlayerData.getPlayerData(); private FileConfiguration playerData = PlayerData.getPlayerData();
public LoginListener(MineverseChat plugin, ChatChannelInfo cc) { public LoginListener(ChatChannelInfo cc) {
this.plugin = plugin;
this.cc = cc; this.cc = cc;
} }

View File

@ -1,16 +1,9 @@
package mineverse.Aust1n46.chat.listeners; 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.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.utilities.Format;
import mineverse.Aust1n46.chat.versions.VersionHandler; import mineverse.Aust1n46.chat.versions.VersionHandler;
import com.comphenix.protocol.PacketType; import com.comphenix.protocol.PacketType;
@ -23,9 +16,8 @@ import com.comphenix.protocol.wrappers.WrappedChatComponent;
//The packets are modified to include advanced json formating and the message remover button if the //The packets are modified to include advanced json formating and the message remover button if the
//player has permission to remove messages. //player has permission to remove messages.
public class PacketListener extends PacketAdapter { public class PacketListener extends PacketAdapter {
public PacketListener(MineverseChat plugin) { public PacketListener() {
super(plugin, ListenerPriority.MONITOR, new PacketType[] { PacketType.Play.Server.CHAT }); super(MineverseChat.getInstance(), ListenerPriority.MONITOR, new PacketType[] { PacketType.Play.Server.CHAT });
this.plugin = plugin;
} }
@Override @Override
@ -61,44 +53,13 @@ public class PacketListener extends PacketAdapter {
} }
WrappedChatComponent chat = event.getPacket().getChatComponents().read(0); WrappedChatComponent chat = event.getPacket().getChatComponents().read(0);
WrappedChatComponent originalChat = event.getPacket().getChatComponents().read(0);
String message = null; String message = null;
int hash = -1; int hash = -1;
//System.out.println(chat.getJson());
//System.out.println(MineverseChat.lastChatMessage.getMessage());
message = MineverseChat.toPlainText(chat.getHandle(), chat.getHandleType()); message = MineverseChat.toPlainText(chat.getHandle(), chat.getHandleType());
//System.out.println(chat.getJson());
//System.out.println(message + " message");
hash = message != null ? message.hashCode() : -1; hash = message != null ? message.hashCode() : -1;
//System.out.println("remover goes in here?");
ChatMessage lastChatMessage = MineverseChat.lastChatMessage;
MineverseChatPlayer mcp = MineverseChatAPI.getMineverseChatPlayer(event.getPlayer()); MineverseChatPlayer mcp = MineverseChatAPI.getMineverseChatPlayer(event.getPlayer());
if(lastChatMessage != null && lastChatMessage.getHash() == hash) {
String json = MineverseChat.lastJson;
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"))) + "]}}") + "]";
//json += ",{\"text\":\"" + "json test" + "\"}]";
}
//System.out.println("," + 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("\nline break\n");
//System.out.println(json);
chat.setJson(json);
event.getPacket().getChatComponents().write(0, chat);
}
if((message != null) && (chat.getHandle() != null) && mcp != null) { if((message != null) && (chat.getHandle() != null) && mcp != null) {
mcp.addMessage(new ChatMessage(originalChat, chat, lastChatMessage != null ? lastChatMessage.getSender() : null, message, hash)); mcp.addMessage(new ChatMessage(chat, 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();
}
} }

View File

@ -13,11 +13,10 @@ import mineverse.Aust1n46.chat.utilities.Format;
//This class listens for text being added to signs, and it formats them to allow colors and formatting. //This class listens for text being added to signs, and it formats them to allow colors and formatting.
public class SignListener implements Listener { public class SignListener implements Listener {
MineverseChat plugin; MineverseChat plugin = MineverseChat.getInstance();
ChatChannelInfo cc; ChatChannelInfo cc;
public SignListener(MineverseChat plugin, ChatChannelInfo cc) { public SignListener(ChatChannelInfo cc) {
this.plugin = plugin;
this.cc = cc; this.cc = cc;
} }

View File

@ -5,11 +5,15 @@ import java.util.regex.Pattern;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.ProtocolLibrary;
import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.wrappers.WrappedChatComponent;
import me.clip.placeholderapi.PlaceholderAPI; import me.clip.placeholderapi.PlaceholderAPI;
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.MineverseChatPlayer; import mineverse.Aust1n46.chat.api.MineverseChatPlayer;
import mineverse.Aust1n46.chat.json.JsonFormat; import mineverse.Aust1n46.chat.json.JsonFormat;
@ -17,17 +21,16 @@ import mineverse.Aust1n46.chat.json.JsonFormat;
public class Format { public class Format {
private static MineverseChat plugin = MineverseChat.getInstance(); private static MineverseChat plugin = MineverseChat.getInstance();
public static String convertToJson(ChatMessage lastChatMessage) { public static String convertToJson(MineverseChatPlayer sender, String format, String chat) {
MineverseChatPlayer icp = MineverseChatAPI.getMineverseChatPlayer(lastChatMessage.getSender()); JsonFormat JSONformat = MineverseChat.jfInfo.getJsonFormat(sender.getJsonFormat());
JsonFormat format = MineverseChat.jfInfo.getJsonFormat(icp.getJsonFormat()); String f = format.replace("\\", "\\\\").replace("\"", "\\\"");
String f = lastChatMessage.getFormat().replace("\\", "\\\\").replace("\"", "\\\""); String c = chat.replace("\\", "\\\\").replace("\"", "\\\"");
String c = lastChatMessage.getChat().replace("\\", "\\\\").replace("\"", "\\\"");
String json = "[\"\",{\"text\":\"\",\"extra\":["; String json = "[\"\",{\"text\":\"\",\"extra\":[";
String prefix = ""; String prefix = "";
String suffix = ""; String suffix = "";
try { try {
prefix = FormatStringAll(MineverseChat.chat.getPlayerPrefix(icp.getPlayer())); prefix = FormatStringAll(MineverseChat.chat.getPlayerPrefix(sender.getPlayer()));
suffix = FormatStringAll(MineverseChat.chat.getPlayerSuffix(icp.getPlayer())); suffix = FormatStringAll(MineverseChat.chat.getPlayerSuffix(sender.getPlayer()));
if(suffix.equals("")) { if(suffix.equals("")) {
suffix = "venturechat_no_suffix_code"; suffix = "venturechat_no_suffix_code";
} }
@ -43,10 +46,10 @@ public class Format {
prefix = "venturechat_no_prefix_code"; prefix = "venturechat_no_prefix_code";
} }
String nickname = ""; String nickname = "";
if(icp.getPlayer() != null) { if(sender.getPlayer() != null) {
nickname = FormatStringAll(icp.getPlayer().getDisplayName()); nickname = FormatStringAll(sender.getPlayer().getDisplayName());
} }
json += convertPlaceholders(f, format, prefix, nickname, suffix, icp); json += convertPlaceholders(f, JSONformat, prefix, nickname, suffix, sender);
json += "]}"; json += "]}";
json += "," + convertLinks(c); json += "," + convertLinks(c);
json += "]"; json += "]";
@ -277,6 +280,30 @@ public class Format {
return ""; return "";
} }
public static String formatModerationGUI(String json, Player player, String sender, String channelName, int hash) {
if(player.hasPermission("venturechat.gui")) {
json = json.substring(0, json.length() - 1);
json += "," + Format.convertToJsonColors(Format.FormatStringAll(plugin.getConfig().getString("guiicon")), ",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/vchatgui " + sender + " " + channelName + " " + hash +"\"},\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"\",\"extra\":[" + Format.convertToJsonColors(Format.FormatStringAll(plugin.getConfig().getString("guitext"))) + "]}}") + "]";
}
return json;
}
public static PacketContainer createPacketPlayOutChat(WrappedChatComponent component) {
PacketContainer container = new PacketContainer(PacketType.Play.Server.CHAT);
container.getModifier().writeDefaults();
container.getChatComponents().write(0, component);
return container;
}
public static void sendPacketPlayOutChat(Player player, PacketContainer packet) {
try {
ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet);
}
catch(Exception e) {
e.printStackTrace();
}
}
protected static Pattern chatColorPattern = Pattern.compile("(?i)&([0-9A-F])"); protected static Pattern chatColorPattern = Pattern.compile("(?i)&([0-9A-F])");
protected static Pattern chatMagicPattern = Pattern.compile("(?i)&([K])"); protected static Pattern chatMagicPattern = Pattern.compile("(?i)&([K])");
protected static Pattern chatBoldPattern = Pattern.compile("(?i)&([L])"); protected static Pattern chatBoldPattern = Pattern.compile("(?i)&([L])");