diff --git a/pom.xml b/pom.xml
index d132250..a252e8f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -100,6 +100,10 @@
essentialsx-repo
https://repo.essentialsx.net/snapshots/
+
+ velocity
+ https://repo.velocitypowered.com/snapshots/
+
@@ -170,6 +174,12 @@
+
+ com.velocitypowered
+ velocity-api
+ 1.0.0-SNAPSHOT
+ provided
+
net.md-5
bungeecord-api
diff --git a/src/main/java/mineverse/Aust1n46/chat/MineverseChat.java b/src/main/java/mineverse/Aust1n46/chat/MineverseChat.java
index 234bc93..4fd902a 100644
--- a/src/main/java/mineverse/Aust1n46/chat/MineverseChat.java
+++ b/src/main/java/mineverse/Aust1n46/chat/MineverseChat.java
@@ -468,8 +468,8 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener {
if(subchannel.equals("Chwho")) {
String identifier = msgin.readUTF();
if(identifier.equals("Get")) {
+ String server = msgin.readUTF();
String sender = msgin.readUTF();
- String name = msgin.readUTF();
String chatchannel = msgin.readUTF();
List listening = new ArrayList();
if(ChatChannel.isChannel(chatchannel)) {
@@ -485,8 +485,8 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener {
}
out.writeUTF("Chwho");
out.writeUTF("Receive");
+ out.writeUTF(server);
out.writeUTF(sender);
- out.writeUTF(name);
out.writeUTF(chatchannel);
out.writeInt(listening.size());
for(String s : listening) {
diff --git a/src/main/java/mineverse/Aust1n46/chat/bungee/MineverseChatBungee.java b/src/main/java/mineverse/Aust1n46/chat/bungee/MineverseChatBungee.java
index 60f13a0..e2146b1 100644
--- a/src/main/java/mineverse/Aust1n46/chat/bungee/MineverseChatBungee.java
+++ b/src/main/java/mineverse/Aust1n46/chat/bungee/MineverseChatBungee.java
@@ -1,19 +1,15 @@
package mineverse.Aust1n46.chat.bungee;
-import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
-import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.nio.file.Files;
-import java.util.UUID;
+import java.util.List;
+import java.util.stream.Collectors;
-import mineverse.Aust1n46.chat.api.MineverseChatAPI;
-import mineverse.Aust1n46.chat.api.SynchronizedMineverseChatPlayer;
-import mineverse.Aust1n46.chat.command.mute.MuteContainer;
import mineverse.Aust1n46.chat.database.BungeePlayerData;
-import mineverse.Aust1n46.chat.database.TemporaryDataInstance;
import mineverse.Aust1n46.chat.utilities.UUIDFetcher;
+import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.api.connection.Server;
import net.md_5.bungee.api.event.PluginMessageEvent;
@@ -32,10 +28,9 @@ import net.md_5.bungee.event.EventHandler;
*
* @author Aust1n46
*/
-public class MineverseChatBungee extends Plugin implements Listener {
+public class MineverseChatBungee extends Plugin implements Listener, VentureChatProxySource {
private static MineverseChatBungee instance;
private static Configuration bungeeConfig;
- public static String PLUGIN_MESSAGING_CHANNEL = "venturechat:data";
@Override
public void onEnable() {
@@ -58,7 +53,7 @@ public class MineverseChatBungee extends Plugin implements Listener {
BungeePlayerData.loadLegacyBungeePlayerData();
BungeePlayerData.loadBungeePlayerData();
- this.getProxy().registerChannel(PLUGIN_MESSAGING_CHANNEL);
+ this.getProxy().registerChannel(VentureChatProxy.PLUGIN_MESSAGING_CHANNEL_STRING);
this.getProxy().getPluginManager().registerListener(this, this);
}
@@ -102,7 +97,7 @@ public class MineverseChatBungee extends Plugin implements Listener {
for(String send : getProxy().getServers().keySet()) {
if(getProxy().getServers().get(send).getPlayers().size() > 0) {
- getProxy().getServers().get(send).sendData(PLUGIN_MESSAGING_CHANNEL, outstream.toByteArray());
+ getProxy().getServers().get(send).sendData(VentureChatProxy.PLUGIN_MESSAGING_CHANNEL_STRING, outstream.toByteArray());
}
}
}
@@ -112,525 +107,30 @@ public class MineverseChatBungee extends Plugin implements Listener {
}
@EventHandler
- public void onPluginMessage(PluginMessageEvent ev) {
- //System.out.println(ev.getTag() + "," + ev.getSender().toString() + "," + (ev.getSender() instanceof Server));
- if(!ev.getTag().equals(PLUGIN_MESSAGING_CHANNEL) && !ev.getTag().contains("viaversion:")) {
+ public void onPluginMessage(PluginMessageEvent event) {
+ if(!event.getTag().equals(VentureChatProxy.PLUGIN_MESSAGING_CHANNEL_STRING) && !event.getTag().contains("viaversion:")) {
return;
}
- if(!(ev.getSender() instanceof Server)) {
+ if(!(event.getSender() instanceof Server)) {
return;
}
- Server ser = (Server) ev.getSender();
- ByteArrayInputStream instream = new ByteArrayInputStream(ev.getData());
- DataInputStream in = new DataInputStream(instream);
- try {
- String subchannel = in.readUTF();
- //System.out.println(subchannel);
- ByteArrayOutputStream outstream = new ByteArrayOutputStream();
- DataOutputStream out = new DataOutputStream(outstream);
- if(subchannel.equals("Chat")) {
- String chatchannel = in.readUTF();
- String senderName = in.readUTF();
- String senderUUID = in.readUTF();
- boolean bungeeToggle = in.readBoolean();
- int hash = in.readInt();
- String format = in.readUTF();
- String chat = in.readUTF();
- String json = in.readUTF();
- String primaryGroup = in.readUTF();
- String nickname = in.readUTF();
- out.writeUTF("Chat");
- out.writeUTF(ser.getInfo().getName());
- out.writeUTF(chatchannel);
- out.writeUTF(senderName);
- out.writeUTF(senderUUID);
- out.writeInt(hash);
- out.writeUTF(format);
- out.writeUTF(chat);
- out.writeUTF(json);
- out.writeUTF(primaryGroup);
- out.writeUTF(nickname);
- for(String send : getProxy().getServers().keySet()) {
- if(getProxy().getServers().get(send).getPlayers().size() > 0) {
- if(!bungeeToggle && !getProxy().getServers().get(send).getName().equalsIgnoreCase(ser.getInfo().getName())) {
- continue;
- }
- getProxy().getServers().get(send).sendData(PLUGIN_MESSAGING_CHANNEL, outstream.toByteArray());
- }
- }
- }
- if(subchannel.equals("DiscordSRV")) {
- String chatchannel = in.readUTF();
- String message = in.readUTF();
- out.writeUTF("DiscordSRV");
- out.writeUTF(chatchannel);
- out.writeUTF(message);
- for(String send : getProxy().getServers().keySet()) {
- if(getProxy().getServers().get(send).getPlayers().size() > 0) {
- getProxy().getServers().get(send).sendData(PLUGIN_MESSAGING_CHANNEL, outstream.toByteArray());
- }
- }
- }
- if(subchannel.equals("Chwho")) {
- String identifier = in.readUTF();
- if(identifier.equals("Get")) {
- String sender = in.readUTF();
- String name = in.readUTF();
- String channel = in.readUTF();
- SynchronizedMineverseChatPlayer smcp = MineverseChatAPI.getSynchronizedMineverseChatPlayer(UUID.fromString(sender));
- smcp.clearMessagePackets();
- smcp.clearMessageData();
- out.writeUTF("Chwho");
- out.writeUTF("Get");
- out.writeUTF(sender);
- out.writeUTF(name);
- out.writeUTF(channel);
- for(String send : getProxy().getServers().keySet()) {
- if(getProxy().getServers().get(send).getPlayers().size() > 0) {
- getProxy().getServers().get(send).sendData(PLUGIN_MESSAGING_CHANNEL, outstream.toByteArray());
- }
- }
- }
- if(identifier.equals("Receive")) {
- String sender = in.readUTF();
- String name = in.readUTF();
- String channel = in.readUTF();
- SynchronizedMineverseChatPlayer smcp = MineverseChatAPI.getSynchronizedMineverseChatPlayer(UUID.fromString(sender));
- smcp.incrementMessagePackets();
- int players = in.readInt();
- for(int a = 0; a < players; a++) {
- smcp.addData(in.readUTF());
- }
- int servers = 0;
- for(String send : getProxy().getServers().keySet()) {
- if(getProxy().getServers().get(send).getPlayers().size() > 0) {
- servers ++;
- }
- }
- if(smcp.getMessagePackets() >= servers) {
- smcp.clearMessagePackets();
- out.writeUTF("Chwho");
- out.writeUTF("Receive");
- out.writeUTF(sender);
- out.writeUTF(channel);
- out.writeInt(smcp.getMessageData().size());
- for(String s : smcp.getMessageData()) {
- out.writeUTF(s);
- }
- smcp.clearMessageData();
- Server server = getProxy().getPlayer(name).getServer();
- server.sendData(PLUGIN_MESSAGING_CHANNEL, outstream.toByteArray());
- }
- }
- }
- if(subchannel.equals("RemoveMessage")) {
- String hash = in.readUTF();
- out.writeUTF("RemoveMessage");
- out.writeUTF(hash);
- for(String send : getProxy().getServers().keySet()) {
- if(getProxy().getServers().get(send).getPlayers().size() > 0) {
- getProxy().getServers().get(send).sendData(PLUGIN_MESSAGING_CHANNEL, outstream.toByteArray());
- }
- }
- }
- if(subchannel.equals("Ignore")) {
- String identifier = in.readUTF();
- if(identifier.equals("Send")) {
- String server = ser.getInfo().getName();
- String player = in.readUTF();
- String sender = in.readUTF();
- SynchronizedMineverseChatPlayer smcp = MineverseChatAPI.getSynchronizedMineverseChatPlayer(UUID.fromString(sender));
- smcp.clearMessagePackets();
- out.writeUTF("Ignore");
- out.writeUTF("Send");
- out.writeUTF(server);
- out.writeUTF(player);
- out.writeUTF(sender);
- for(String send : getProxy().getServers().keySet()) {
- if(getProxy().getServers().get(send).getPlayers().size() > 0) {
- getProxy().getServers().get(send).sendData(PLUGIN_MESSAGING_CHANNEL, outstream.toByteArray());
- }
- }
- }
- if(identifier.equals("Offline")) {
- String server = in.readUTF();
- String player = in.readUTF();
- String sender = in.readUTF();
- SynchronizedMineverseChatPlayer smcp = MineverseChatAPI.getSynchronizedMineverseChatPlayer(UUID.fromString(sender));
- smcp.incrementMessagePackets();
- int servers = 0;
- for(String send : getProxy().getServers().keySet()) {
- if(getProxy().getServers().get(send).getPlayers().size() > 0) {
- servers ++;
- }
- }
- if(smcp.getMessagePackets() >= servers) {
- smcp.clearMessagePackets();
- out.writeUTF("Ignore");
- out.writeUTF("Offline");
- out.writeUTF(player);
- out.writeUTF(sender);
- if(getProxy().getServers().get(server).getPlayers().size() > 0) {
- getProxy().getServers().get(server).sendData(PLUGIN_MESSAGING_CHANNEL, outstream.toByteArray());
- }
- }
- }
- if(identifier.equals("Echo")) {
- String server = in.readUTF();
- String player = in.readUTF();
- String receiverName = in.readUTF();
- String sender = in.readUTF();
- out.writeUTF("Ignore");
- out.writeUTF("Echo");
- out.writeUTF(player);
- out.writeUTF(receiverName);
- out.writeUTF(sender);
- if(getProxy().getServers().get(server).getPlayers().size() > 0) {
- getProxy().getServers().get(server).sendData(PLUGIN_MESSAGING_CHANNEL, outstream.toByteArray());
- }
- }
- }
- if(subchannel.equals("Mute")) {
- String identifier = in.readUTF();
- if(identifier.equals("Send")) {
- String server = ser.getInfo().getName();
- String senderIdentifier = in.readUTF();
- String playerToMute = in.readUTF();
- String channelName = in.readUTF();
- long time = in.readLong();
- String reason = in.readUTF();
- UUID temporaryDataInstanceUUID = TemporaryDataInstance.createTemporaryDataInstance();
- out.writeUTF("Mute");
- out.writeUTF("Send");
- out.writeUTF(server);
- out.writeUTF(senderIdentifier);
- out.writeUTF(temporaryDataInstanceUUID.toString());
- out.writeUTF(playerToMute);
- out.writeUTF(channelName);
- out.writeLong(time);
- out.writeUTF(reason);
- for(String send : getProxy().getServers().keySet()) {
- if(getProxy().getServers().get(send).getPlayers().size() > 0) {
- getProxy().getServers().get(send).sendData(PLUGIN_MESSAGING_CHANNEL, outstream.toByteArray());
- }
- }
- }
- if(identifier.equals("Valid")) {
- String server = in.readUTF();
- String senderIdentifier = in.readUTF();
- String playerToMute = in.readUTF();
- String channelName = in.readUTF();
- long time = in.readLong();
- String reason = in.readUTF();
- out.writeUTF("Mute");
- out.writeUTF("Valid");
- out.writeUTF(senderIdentifier);
- out.writeUTF(playerToMute);
- out.writeUTF(channelName);
- out.writeLong(time);
- out.writeUTF(reason);
- if(getProxy().getServers().get(server).getPlayers().size() > 0) {
- getProxy().getServers().get(server).sendData(PLUGIN_MESSAGING_CHANNEL, outstream.toByteArray());
- }
- }
- if(identifier.equals("Offline")) {
- String server = in.readUTF();
- UUID temporaryDataInstanceUUID = UUID.fromString(in.readUTF());
- String senderIdentifier = in.readUTF();
- String playerToMute = in.readUTF();
- TemporaryDataInstance temporaryDataInstance = TemporaryDataInstance.getTemporaryDataInstance(temporaryDataInstanceUUID);
- temporaryDataInstance.incrementMessagePackets();
- int servers = 0;
- for(String send : getProxy().getServers().keySet()) {
- if(getProxy().getServers().get(send).getPlayers().size() > 0) {
- servers ++;
- }
- }
- if(temporaryDataInstance.getMessagePackets() >= servers) {
- temporaryDataInstance.destroyInstance();
- out.writeUTF("Mute");
- out.writeUTF("Offline");
- out.writeUTF(senderIdentifier);
- out.writeUTF(playerToMute);
- if(getProxy().getServers().get(server).getPlayers().size() > 0) {
- getProxy().getServers().get(server).sendData(PLUGIN_MESSAGING_CHANNEL, outstream.toByteArray());
- }
- }
- }
- if(identifier.equals("AlreadyMuted")) {
- String server = in.readUTF();
- String senderIdentifier = in.readUTF();
- String playerToMute = in.readUTF();
- String channelName = in.readUTF();
- out.writeUTF("Mute");
- out.writeUTF("AlreadyMuted");
- out.writeUTF(senderIdentifier);
- out.writeUTF(playerToMute);
- out.writeUTF(channelName);
- if(getProxy().getServers().get(server).getPlayers().size() > 0) {
- getProxy().getServers().get(server).sendData(PLUGIN_MESSAGING_CHANNEL, outstream.toByteArray());
- }
- }
- }
- if(subchannel.equals("Unmute")) {
- String identifier = in.readUTF();
- if(identifier.equals("Send")) {
- String server = ser.getInfo().getName();
- String senderIdentifier = in.readUTF();
- String playerToUnmute = in.readUTF();
- String channelName = in.readUTF();
- UUID temporaryDataInstanceUUID = TemporaryDataInstance.createTemporaryDataInstance();
- out.writeUTF("Unmute");
- out.writeUTF("Send");
- out.writeUTF(server);
- out.writeUTF(senderIdentifier);
- out.writeUTF(temporaryDataInstanceUUID.toString());
- out.writeUTF(playerToUnmute);
- out.writeUTF(channelName);
- for(String send : getProxy().getServers().keySet()) {
- if(getProxy().getServers().get(send).getPlayers().size() > 0) {
- getProxy().getServers().get(send).sendData(PLUGIN_MESSAGING_CHANNEL, outstream.toByteArray());
- }
- }
- }
- if(identifier.equals("Valid")) {
- String server = in.readUTF();
- String senderIdentifier = in.readUTF();
- String playerToUnmute = in.readUTF();
- String channelName = in.readUTF();
- out.writeUTF("Unmute");
- out.writeUTF("Valid");
- out.writeUTF(senderIdentifier);
- out.writeUTF(playerToUnmute);
- out.writeUTF(channelName);
- if(getProxy().getServers().get(server).getPlayers().size() > 0) {
- getProxy().getServers().get(server).sendData(PLUGIN_MESSAGING_CHANNEL, outstream.toByteArray());
- }
- }
- if(identifier.equals("Offline")) {
- String server = in.readUTF();
- UUID temporaryDataInstanceUUID = UUID.fromString(in.readUTF());
- String senderIdentifier = in.readUTF();
- String playerToUnmute = in.readUTF();
- TemporaryDataInstance temporaryDataInstance = TemporaryDataInstance.getTemporaryDataInstance(temporaryDataInstanceUUID);
- temporaryDataInstance.incrementMessagePackets();
- int servers = 0;
- for(String send : getProxy().getServers().keySet()) {
- if(getProxy().getServers().get(send).getPlayers().size() > 0) {
- servers ++;
- }
- }
- if(temporaryDataInstance.getMessagePackets() >= servers) {
- temporaryDataInstance.destroyInstance();
- out.writeUTF("Unmute");
- out.writeUTF("Offline");
- out.writeUTF(senderIdentifier);
- out.writeUTF(playerToUnmute);
- if(getProxy().getServers().get(server).getPlayers().size() > 0) {
- getProxy().getServers().get(server).sendData(PLUGIN_MESSAGING_CHANNEL, outstream.toByteArray());
- }
- }
- }
- if(identifier.equals("NotMuted")) {
- String server = in.readUTF();
- String senderIdentifier = in.readUTF();
- String playerToUnmute = in.readUTF();
- String channelName = in.readUTF();
- out.writeUTF("Unmute");
- out.writeUTF("NotMuted");
- out.writeUTF(senderIdentifier);
- out.writeUTF(playerToUnmute);
- out.writeUTF(channelName);
- if(getProxy().getServers().get(server).getPlayers().size() > 0) {
- getProxy().getServers().get(server).sendData(PLUGIN_MESSAGING_CHANNEL, outstream.toByteArray());
- }
- }
- }
- if(subchannel.equals("Message")) {
- String identifier = in.readUTF();
- if(identifier.equals("Send")) {
- String server = ser.getInfo().getName();
- String player = in.readUTF();
- String sender = in.readUTF();
- String sName = in.readUTF();
- String send = in.readUTF();
- String echo = in.readUTF();
- String spy = in.readUTF();
- String msg = in.readUTF();
- SynchronizedMineverseChatPlayer smcp = MineverseChatAPI.getSynchronizedMineverseChatPlayer(UUID.fromString(sender));
- smcp.clearMessagePackets();
- out.writeUTF("Message");
- out.writeUTF("Send");
- out.writeUTF(server);
- out.writeUTF(player);
- out.writeUTF(sender);
- out.writeUTF(sName);
- out.writeUTF(send);
- out.writeUTF(echo);
- out.writeUTF(spy);
- out.writeUTF(msg);
- for(String serv : getProxy().getServers().keySet()) {
- if(getProxy().getServers().get(serv).getPlayers().size() > 0) {
- getProxy().getServers().get(serv).sendData(PLUGIN_MESSAGING_CHANNEL, outstream.toByteArray());
- }
- }
- }
- if(identifier.equals("Offline")) {
- String server = in.readUTF();
- String player = in.readUTF();
- String sender = in.readUTF();
- SynchronizedMineverseChatPlayer smcp = MineverseChatAPI.getSynchronizedMineverseChatPlayer(UUID.fromString(sender));
- smcp.incrementMessagePackets();
- int servers = 0;
- for(String send : getProxy().getServers().keySet()) {
- if(getProxy().getServers().get(send).getPlayers().size() > 0) {
- servers ++;
- }
- }
- if(smcp.getMessagePackets() >= servers) {
- smcp.clearMessagePackets();
- out.writeUTF("Message");
- out.writeUTF("Offline");
- out.writeUTF(player);
- out.writeUTF(sender);
- if(getProxy().getServers().get(server).getPlayers().size() > 0) {
- getProxy().getServers().get(server).sendData(PLUGIN_MESSAGING_CHANNEL, outstream.toByteArray());
- }
- }
- }
- if(identifier.equals("Ignore")) {
- String server = in.readUTF();
- String player = in.readUTF();
- String sender = in.readUTF();
- out.writeUTF("Message");
- out.writeUTF("Ignore");
- out.writeUTF(player);
- out.writeUTF(sender);
- if(getProxy().getServers().get(server).getPlayers().size() > 0) {
- getProxy().getServers().get(server).sendData(PLUGIN_MESSAGING_CHANNEL, outstream.toByteArray());
- }
- }
- if(identifier.equals("Blocked")) {
- String server = in.readUTF();
- String player = in.readUTF();
- String sender = in.readUTF();
- out.writeUTF("Message");
- out.writeUTF("Blocked");
- out.writeUTF(player);
- out.writeUTF(sender);
- if(getProxy().getServers().get(server).getPlayers().size() > 0) {
- getProxy().getServers().get(server).sendData(PLUGIN_MESSAGING_CHANNEL, outstream.toByteArray());
- }
- }
- if(identifier.equals("Echo")) {
- String server = in.readUTF();
- String player = in.readUTF();
- String receiverUUID = in.readUTF();
- String sender = in.readUTF();
- String sName = in.readUTF();
- String echo = in.readUTF();
- String spy = in.readUTF();
- out.writeUTF("Message");
- out.writeUTF("Echo");
- out.writeUTF(player);
- out.writeUTF(receiverUUID);
- out.writeUTF(sender);
- out.writeUTF(echo);
- if(getProxy().getServers().get(server).getPlayers().size() > 0) {
- getProxy().getServers().get(server).sendData(PLUGIN_MESSAGING_CHANNEL, outstream.toByteArray());
- }
- outstream = new ByteArrayOutputStream();
- out = new DataOutputStream(outstream);
- out.writeUTF("Message");
- out.writeUTF("Spy");
- out.writeUTF(player);
- out.writeUTF(sName);
- out.writeUTF(spy);
- for(String send : getProxy().getServers().keySet()) {
- if(getProxy().getServers().get(send).getPlayers().size() > 0) {
- getProxy().getServers().get(send).sendData(PLUGIN_MESSAGING_CHANNEL, outstream.toByteArray());
- }
- }
- }
- }
- if(subchannel.equals("Sync")) {
- //System.out.println("Sync received...");
- String identifier = in.readUTF();
- if(identifier.equals("Receive")) {
- //System.out.println("Sending update...");
- String server = ser.getInfo().getName();
- UUID uuid = UUID.fromString(in.readUTF());
- SynchronizedMineverseChatPlayer smcp = MineverseChatAPI.getSynchronizedMineverseChatPlayer(uuid);
- if(smcp == null) {
- smcp = new SynchronizedMineverseChatPlayer(uuid);
- MineverseChatAPI.addSynchronizedMineverseChatPlayerToMap(smcp);
- }
- out.writeUTF("Sync");
- out.writeUTF(uuid.toString());
- int channelCount = smcp.getListening().size();
- //System.out.println(channelCount);
- out.write(channelCount);
- for(String channel : smcp.getListening()) {
- out.writeUTF(channel);
- }
- int muteCount = smcp.getMutes().size();
- //System.out.println(muteCount);
- out.write(muteCount);
- for(MuteContainer muteContainer : smcp.getMutes()) {
- out.writeUTF(muteContainer.getChannel());
- out.writeLong(muteContainer.getDuration());
- out.writeUTF(muteContainer.getReason());
- }
- //System.out.println(smcp.isSpy() + " spy value");
- //System.out.println(out.size() + " size before");
- out.writeBoolean(smcp.isSpy());
- out.writeBoolean(smcp.getMessageToggle());
- //System.out.println(out.size() + " size after");
- int ignoreCount = smcp.getIgnores().size();
- //System.out.println(ignoreCount + " ignore size");
- out.write(ignoreCount);
- for(UUID ignore : smcp.getIgnores()) {
- out.writeUTF(ignore.toString());
- }
- if(getProxy().getServers().get(server).getPlayers().size() > 0)
- getProxy().getServers().get(server).sendData(PLUGIN_MESSAGING_CHANNEL, outstream.toByteArray());
- }
- if(identifier.equals("Update")) {
- UUID uuid = UUID.fromString(in.readUTF());
- SynchronizedMineverseChatPlayer smcp = MineverseChatAPI.getSynchronizedMineverseChatPlayer(uuid);
- if(smcp == null) {
- smcp = new SynchronizedMineverseChatPlayer(uuid);
- MineverseChatAPI.addSynchronizedMineverseChatPlayerToMap(smcp);
- }
- smcp.getListening().clear();
- smcp.clearMutes();
- smcp.getIgnores().clear();
- int sizeL = in.read();
- //System.out.println(sizeL + " listening");
- for(int a = 0; a < sizeL; a++) {
- smcp.addListening(in.readUTF());
- }
- int sizeM = in.read();
- for(int b = 0; b < sizeM; b++) {
- String mute = in.readUTF();
- long muteTime = in.readLong();
- String muteReason = in.readUTF();
- //System.out.println(mute);
- smcp.addMute(mute, muteTime, muteReason);
- }
- int sizeI = in.read();
- for(int c = 0; c < sizeI; c++) {
- String ignore = in.readUTF();
- //System.out.println(mute);
- smcp.addIgnore(MineverseChatAPI.getSynchronizedMineverseChatPlayer(UUID.fromString(ignore)));
- }
- smcp.setSpy(in.readBoolean());
- smcp.setMessageToggle(in.readBoolean());
- }
- }
- }
- catch(Exception e) {
- e.printStackTrace();
- }
+ String serverName = ((Server) event.getSender()).getInfo().getName();
+ VentureChatProxy.onPluginMessage(event.getData(), serverName, this);
+ }
+
+ @Override
+ public void sendPluginMessage(String serverName, byte[] data) {
+ getProxy().getServers().get(serverName).sendData(VentureChatProxy.PLUGIN_MESSAGING_CHANNEL_STRING, data);
+ }
+
+ @Override
+ public List getServers() {
+ return getProxy().getServers().values().stream().map(bungeeServer -> new VentureChatProxyServer(bungeeServer.getName(), bungeeServer.getPlayers().isEmpty())).collect(Collectors.toList());
+ }
+
+ @Override
+ public VentureChatProxyServer getServer(String serverName) {
+ ProxyServer server = (ProxyServer) getProxy().getServers().get(serverName);
+ return new VentureChatProxyServer(serverName, server.getPlayers().isEmpty());
}
}
diff --git a/src/main/java/mineverse/Aust1n46/chat/bungee/VentureChatProxy.java b/src/main/java/mineverse/Aust1n46/chat/bungee/VentureChatProxy.java
new file mode 100644
index 0000000..49c073f
--- /dev/null
+++ b/src/main/java/mineverse/Aust1n46/chat/bungee/VentureChatProxy.java
@@ -0,0 +1,533 @@
+package mineverse.Aust1n46.chat.bungee;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.util.UUID;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import mineverse.Aust1n46.chat.api.MineverseChatAPI;
+import mineverse.Aust1n46.chat.api.SynchronizedMineverseChatPlayer;
+import mineverse.Aust1n46.chat.command.mute.MuteContainer;
+import mineverse.Aust1n46.chat.database.TemporaryDataInstance;
+
+public class VentureChatProxy {
+ public static String PLUGIN_MESSAGING_CHANNEL_NAMESPACE = "venturechat";
+ public static String PLUGIN_MESSAGING_CHANNEL_NAME = "data";
+ public static String PLUGIN_MESSAGING_CHANNEL_STRING = "venturechat:data";
+
+ public static void onPluginMessage(byte[] data, String serverName, VentureChatProxySource source) {
+ ByteArrayInputStream instream = new ByteArrayInputStream(data);
+ DataInputStream in = new DataInputStream(instream);
+ try {
+ String subchannel = in.readUTF();
+ //System.out.println(subchannel);
+ final ByteArrayOutputStream outstream = new ByteArrayOutputStream();
+ DataOutputStream out = new DataOutputStream(outstream);
+ if(subchannel.equals("Chat")) {
+ String chatchannel = in.readUTF();
+ String senderName = in.readUTF();
+ String senderUUID = in.readUTF();
+ boolean bungeeToggle = in.readBoolean();
+ int hash = in.readInt();
+ String format = in.readUTF();
+ String chat = in.readUTF();
+ String json = in.readUTF();
+ String primaryGroup = in.readUTF();
+ String nickname = in.readUTF();
+ out.writeUTF("Chat");
+ out.writeUTF(serverName);
+ out.writeUTF(chatchannel);
+ out.writeUTF(senderName);
+ out.writeUTF(senderUUID);
+ out.writeInt(hash);
+ out.writeUTF(format);
+ out.writeUTF(chat);
+ out.writeUTF(json);
+ out.writeUTF(primaryGroup);
+ out.writeUTF(nickname);
+ for(VentureChatProxyServer send : source.getServers()) {
+ if(!send.isEmpty()) {
+ if(!bungeeToggle && !send.getName().equalsIgnoreCase(serverName)) {
+ continue;
+ }
+ source.sendPluginMessage(send.getName(), outstream.toByteArray());
+ }
+ }
+ }
+ if(subchannel.equals("DiscordSRV")) {
+ String chatchannel = in.readUTF();
+ String message = in.readUTF();
+ out.writeUTF("DiscordSRV");
+ out.writeUTF(chatchannel);
+ out.writeUTF(message);
+ source.getServers().forEach(send -> {
+ if(!send.isEmpty()) {
+ source.sendPluginMessage(send.getName(), outstream.toByteArray());
+ }
+ });
+ }
+ if(subchannel.equals("Chwho")) {
+ String identifier = in.readUTF();
+ if(identifier.equals("Get")) {
+ String server = serverName;
+ String sender = in.readUTF();
+ String channel = in.readUTF();
+ SynchronizedMineverseChatPlayer smcp = MineverseChatAPI.getSynchronizedMineverseChatPlayer(UUID.fromString(sender));
+ smcp.clearMessagePackets();
+ smcp.clearMessageData();
+ out.writeUTF("Chwho");
+ out.writeUTF("Get");
+ out.writeUTF(server);
+ out.writeUTF(sender);
+ out.writeUTF(channel);
+ source.getServers().forEach(send -> {
+ if(!send.isEmpty()) {
+ source.sendPluginMessage(send.getName(), outstream.toByteArray());
+ }
+ });
+ }
+ if(identifier.equals("Receive")) {
+ String server = in.readUTF();
+ String sender = in.readUTF();
+ String channel = in.readUTF();
+ SynchronizedMineverseChatPlayer smcp = MineverseChatAPI.getSynchronizedMineverseChatPlayer(UUID.fromString(sender));
+ smcp.incrementMessagePackets();
+ int players = in.readInt();
+ for(int a = 0; a < players; a++) {
+ smcp.addData(in.readUTF());
+ }
+ AtomicInteger servers = new AtomicInteger(0);
+ source.getServers().forEach(send -> {
+ if(!send.isEmpty()) {
+ servers.incrementAndGet();
+ }
+ });
+ if(smcp.getMessagePackets() >= servers.get()) {
+ smcp.clearMessagePackets();
+ out.writeUTF("Chwho");
+ out.writeUTF("Receive");
+ out.writeUTF(sender);
+ out.writeUTF(channel);
+ out.writeInt(smcp.getMessageData().size());
+ for(String s : smcp.getMessageData()) {
+ out.writeUTF(s);
+ }
+ smcp.clearMessageData();
+ source.sendPluginMessage(server, outstream.toByteArray());
+ }
+ }
+ }
+ if(subchannel.equals("RemoveMessage")) {
+ String hash = in.readUTF();
+ out.writeUTF("RemoveMessage");
+ out.writeUTF(hash);
+ source.getServers().forEach(send -> {
+ if(!send.isEmpty()) {
+ source.sendPluginMessage(send.getName(), outstream.toByteArray());
+ }
+ });
+ }
+ if(subchannel.equals("Ignore")) {
+ String identifier = in.readUTF();
+ if(identifier.equals("Send")) {
+ String server = serverName;
+ String player = in.readUTF();
+ String sender = in.readUTF();
+ SynchronizedMineverseChatPlayer smcp = MineverseChatAPI.getSynchronizedMineverseChatPlayer(UUID.fromString(sender));
+ smcp.clearMessagePackets();
+ out.writeUTF("Ignore");
+ out.writeUTF("Send");
+ out.writeUTF(server);
+ out.writeUTF(player);
+ out.writeUTF(sender);
+ source.getServers().forEach(send -> {
+ if(!send.isEmpty()) {
+ source.sendPluginMessage(send.getName(), outstream.toByteArray());
+ }
+ });
+ }
+ if(identifier.equals("Offline")) {
+ String server = in.readUTF();
+ String player = in.readUTF();
+ String sender = in.readUTF();
+ SynchronizedMineverseChatPlayer smcp = MineverseChatAPI.getSynchronizedMineverseChatPlayer(UUID.fromString(sender));
+ smcp.incrementMessagePackets();
+ AtomicInteger servers = new AtomicInteger(0);
+ source.getServers().forEach(send -> {
+ if(!send.isEmpty()) {
+ servers.incrementAndGet();
+ }
+ });
+ if(smcp.getMessagePackets() >= servers.get()) {
+ smcp.clearMessagePackets();
+ out.writeUTF("Ignore");
+ out.writeUTF("Offline");
+ out.writeUTF(player);
+ out.writeUTF(sender);
+ if(!source.getServer(server).isEmpty()) {
+ source.sendPluginMessage(server, outstream.toByteArray());
+ }
+ }
+ }
+ if(identifier.equals("Echo")) {
+ String server = in.readUTF();
+ String player = in.readUTF();
+ String receiverName = in.readUTF();
+ String sender = in.readUTF();
+ out.writeUTF("Ignore");
+ out.writeUTF("Echo");
+ out.writeUTF(player);
+ out.writeUTF(receiverName);
+ out.writeUTF(sender);
+ if(!source.getServer(server).isEmpty()) {
+ source.sendPluginMessage(server, outstream.toByteArray());
+ }
+ }
+ }
+ if(subchannel.equals("Mute")) {
+ String identifier = in.readUTF();
+ if(identifier.equals("Send")) {
+ String server = serverName;
+ String senderIdentifier = in.readUTF();
+ String playerToMute = in.readUTF();
+ String channelName = in.readUTF();
+ long time = in.readLong();
+ String reason = in.readUTF();
+ UUID temporaryDataInstanceUUID = TemporaryDataInstance.createTemporaryDataInstance();
+ out.writeUTF("Mute");
+ out.writeUTF("Send");
+ out.writeUTF(server);
+ out.writeUTF(senderIdentifier);
+ out.writeUTF(temporaryDataInstanceUUID.toString());
+ out.writeUTF(playerToMute);
+ out.writeUTF(channelName);
+ out.writeLong(time);
+ out.writeUTF(reason);
+ source.getServers().forEach(send -> {
+ if(!send.isEmpty()) {
+ source.sendPluginMessage(send.getName(), outstream.toByteArray());
+ }
+ });
+ }
+ if(identifier.equals("Valid")) {
+ String server = in.readUTF();
+ String senderIdentifier = in.readUTF();
+ String playerToMute = in.readUTF();
+ String channelName = in.readUTF();
+ long time = in.readLong();
+ String reason = in.readUTF();
+ out.writeUTF("Mute");
+ out.writeUTF("Valid");
+ out.writeUTF(senderIdentifier);
+ out.writeUTF(playerToMute);
+ out.writeUTF(channelName);
+ out.writeLong(time);
+ out.writeUTF(reason);
+ if(!source.getServer(server).isEmpty()) {
+ source.sendPluginMessage(server, outstream.toByteArray());
+ }
+ }
+ if(identifier.equals("Offline")) {
+ String server = in.readUTF();
+ UUID temporaryDataInstanceUUID = UUID.fromString(in.readUTF());
+ String senderIdentifier = in.readUTF();
+ String playerToMute = in.readUTF();
+ TemporaryDataInstance temporaryDataInstance = TemporaryDataInstance.getTemporaryDataInstance(temporaryDataInstanceUUID);
+ temporaryDataInstance.incrementMessagePackets();
+ AtomicInteger servers = new AtomicInteger(0);
+ source.getServers().forEach(send -> {
+ if(!send.isEmpty()) {
+ servers.incrementAndGet();
+ }
+ });
+ if(temporaryDataInstance.getMessagePackets() >= servers.get()) {
+ temporaryDataInstance.destroyInstance();
+ out.writeUTF("Mute");
+ out.writeUTF("Offline");
+ out.writeUTF(senderIdentifier);
+ out.writeUTF(playerToMute);
+ if(!source.getServer(server).isEmpty()) {
+ source.sendPluginMessage(server, outstream.toByteArray());
+ }
+ }
+ }
+ if(identifier.equals("AlreadyMuted")) {
+ String server = in.readUTF();
+ String senderIdentifier = in.readUTF();
+ String playerToMute = in.readUTF();
+ String channelName = in.readUTF();
+ out.writeUTF("Mute");
+ out.writeUTF("AlreadyMuted");
+ out.writeUTF(senderIdentifier);
+ out.writeUTF(playerToMute);
+ out.writeUTF(channelName);
+ if(!source.getServer(server).isEmpty()) {
+ source.sendPluginMessage(server, outstream.toByteArray());
+ }
+ }
+ }
+ if(subchannel.equals("Unmute")) {
+ String identifier = in.readUTF();
+ if(identifier.equals("Send")) {
+ String server = serverName;
+ String senderIdentifier = in.readUTF();
+ String playerToUnmute = in.readUTF();
+ String channelName = in.readUTF();
+ UUID temporaryDataInstanceUUID = TemporaryDataInstance.createTemporaryDataInstance();
+ out.writeUTF("Unmute");
+ out.writeUTF("Send");
+ out.writeUTF(server);
+ out.writeUTF(senderIdentifier);
+ out.writeUTF(temporaryDataInstanceUUID.toString());
+ out.writeUTF(playerToUnmute);
+ out.writeUTF(channelName);
+ source.getServers().forEach(send -> {
+ if(!send.isEmpty()) {
+ source.sendPluginMessage(send.getName(), outstream.toByteArray());
+ }
+ });
+ }
+ if(identifier.equals("Valid")) {
+ String server = in.readUTF();
+ String senderIdentifier = in.readUTF();
+ String playerToUnmute = in.readUTF();
+ String channelName = in.readUTF();
+ out.writeUTF("Unmute");
+ out.writeUTF("Valid");
+ out.writeUTF(senderIdentifier);
+ out.writeUTF(playerToUnmute);
+ out.writeUTF(channelName);
+ if(!source.getServer(server).isEmpty()) {
+ source.sendPluginMessage(server, outstream.toByteArray());
+ }
+ }
+ if(identifier.equals("Offline")) {
+ String server = in.readUTF();
+ UUID temporaryDataInstanceUUID = UUID.fromString(in.readUTF());
+ String senderIdentifier = in.readUTF();
+ String playerToUnmute = in.readUTF();
+ TemporaryDataInstance temporaryDataInstance = TemporaryDataInstance.getTemporaryDataInstance(temporaryDataInstanceUUID);
+ temporaryDataInstance.incrementMessagePackets();
+ AtomicInteger servers = new AtomicInteger(0);
+ source.getServers().forEach(send -> {
+ if(!send.isEmpty()) {
+ servers.incrementAndGet();
+ }
+ });
+ if(temporaryDataInstance.getMessagePackets() >= servers.get()) {
+ temporaryDataInstance.destroyInstance();
+ out.writeUTF("Unmute");
+ out.writeUTF("Offline");
+ out.writeUTF(senderIdentifier);
+ out.writeUTF(playerToUnmute);
+ if(!source.getServer(server).isEmpty()) {
+ source.sendPluginMessage(server, outstream.toByteArray());
+ }
+ }
+ }
+ if(identifier.equals("NotMuted")) {
+ String server = in.readUTF();
+ String senderIdentifier = in.readUTF();
+ String playerToUnmute = in.readUTF();
+ String channelName = in.readUTF();
+ out.writeUTF("Unmute");
+ out.writeUTF("NotMuted");
+ out.writeUTF(senderIdentifier);
+ out.writeUTF(playerToUnmute);
+ out.writeUTF(channelName);
+ if(!source.getServer(server).isEmpty()) {
+ source.sendPluginMessage(server, outstream.toByteArray());
+ }
+ }
+ }
+ if(subchannel.equals("Message")) {
+ String identifier = in.readUTF();
+ if(identifier.equals("Send")) {
+ String server = serverName;
+ String player = in.readUTF();
+ String sender = in.readUTF();
+ String sName = in.readUTF();
+ String send = in.readUTF();
+ String echo = in.readUTF();
+ String spy = in.readUTF();
+ String msg = in.readUTF();
+ SynchronizedMineverseChatPlayer smcp = MineverseChatAPI.getSynchronizedMineverseChatPlayer(UUID.fromString(sender));
+ smcp.clearMessagePackets();
+ out.writeUTF("Message");
+ out.writeUTF("Send");
+ out.writeUTF(server);
+ out.writeUTF(player);
+ out.writeUTF(sender);
+ out.writeUTF(sName);
+ out.writeUTF(send);
+ out.writeUTF(echo);
+ out.writeUTF(spy);
+ out.writeUTF(msg);
+ source.getServers().forEach(serv -> {
+ if(!send.isEmpty()) {
+ source.sendPluginMessage(serv.getName(), outstream.toByteArray());
+ }
+ });
+ }
+ if(identifier.equals("Offline")) {
+ String server = in.readUTF();
+ String player = in.readUTF();
+ String sender = in.readUTF();
+ SynchronizedMineverseChatPlayer smcp = MineverseChatAPI.getSynchronizedMineverseChatPlayer(UUID.fromString(sender));
+ smcp.incrementMessagePackets();
+ AtomicInteger servers = new AtomicInteger(0);
+ source.getServers().forEach(send -> {
+ if(!send.isEmpty()) {
+ servers.incrementAndGet();
+ }
+ });
+ if(smcp.getMessagePackets() >= servers.get()) {
+ smcp.clearMessagePackets();
+ out.writeUTF("Message");
+ out.writeUTF("Offline");
+ out.writeUTF(player);
+ out.writeUTF(sender);
+ if(!source.getServer(server).isEmpty()) {
+ source.sendPluginMessage(server, outstream.toByteArray());
+ }
+ }
+ }
+ if(identifier.equals("Ignore")) {
+ String server = in.readUTF();
+ String player = in.readUTF();
+ String sender = in.readUTF();
+ out.writeUTF("Message");
+ out.writeUTF("Ignore");
+ out.writeUTF(player);
+ out.writeUTF(sender);
+ if(!source.getServer(server).isEmpty()) {
+ source.sendPluginMessage(server, outstream.toByteArray());
+ }
+ }
+ if(identifier.equals("Blocked")) {
+ String server = in.readUTF();
+ String player = in.readUTF();
+ String sender = in.readUTF();
+ out.writeUTF("Message");
+ out.writeUTF("Blocked");
+ out.writeUTF(player);
+ out.writeUTF(sender);
+ if(!source.getServer(server).isEmpty()) {
+ source.sendPluginMessage(server, outstream.toByteArray());
+ }
+ }
+ if(identifier.equals("Echo")) {
+ String server = in.readUTF();
+ String player = in.readUTF();
+ String receiverUUID = in.readUTF();
+ String sender = in.readUTF();
+ String sName = in.readUTF();
+ String echo = in.readUTF();
+ String spy = in.readUTF();
+ out.writeUTF("Message");
+ out.writeUTF("Echo");
+ out.writeUTF(player);
+ out.writeUTF(receiverUUID);
+ out.writeUTF(sender);
+ out.writeUTF(echo);
+ if(!source.getServer(server).isEmpty()) {
+ source.sendPluginMessage(server, outstream.toByteArray());
+ }
+ outstream.reset();
+ out = new DataOutputStream(outstream);
+ out.writeUTF("Message");
+ out.writeUTF("Spy");
+ out.writeUTF(player);
+ out.writeUTF(sName);
+ out.writeUTF(spy);
+ source.getServers().forEach(send -> {
+ if(!send.isEmpty()) {
+ source.sendPluginMessage(send.getName(), outstream.toByteArray());
+ }
+ });
+ }
+ }
+ if(subchannel.equals("Sync")) {
+ //System.out.println("Sync received...");
+ String identifier = in.readUTF();
+ if(identifier.equals("Receive")) {
+ //System.out.println("Sending update...");
+ String server = serverName;
+ UUID uuid = UUID.fromString(in.readUTF());
+ SynchronizedMineverseChatPlayer smcp = MineverseChatAPI.getSynchronizedMineverseChatPlayer(uuid);
+ if(smcp == null) {
+ smcp = new SynchronizedMineverseChatPlayer(uuid);
+ MineverseChatAPI.addSynchronizedMineverseChatPlayerToMap(smcp);
+ }
+ out.writeUTF("Sync");
+ out.writeUTF(uuid.toString());
+ int channelCount = smcp.getListening().size();
+ //System.out.println(channelCount);
+ out.write(channelCount);
+ for(String channel : smcp.getListening()) {
+ out.writeUTF(channel);
+ }
+ int muteCount = smcp.getMutes().size();
+ //System.out.println(muteCount);
+ out.write(muteCount);
+ for(MuteContainer muteContainer : smcp.getMutes()) {
+ out.writeUTF(muteContainer.getChannel());
+ out.writeLong(muteContainer.getDuration());
+ out.writeUTF(muteContainer.getReason());
+ }
+ //System.out.println(smcp.isSpy() + " spy value");
+ //System.out.println(out.size() + " size before");
+ out.writeBoolean(smcp.isSpy());
+ out.writeBoolean(smcp.getMessageToggle());
+ //System.out.println(out.size() + " size after");
+ int ignoreCount = smcp.getIgnores().size();
+ //System.out.println(ignoreCount + " ignore size");
+ out.write(ignoreCount);
+ for(UUID ignore : smcp.getIgnores()) {
+ out.writeUTF(ignore.toString());
+ }
+ if(!source.getServer(server).isEmpty()) {
+ source.sendPluginMessage(server, outstream.toByteArray());
+ }
+ }
+ if(identifier.equals("Update")) {
+ UUID uuid = UUID.fromString(in.readUTF());
+ SynchronizedMineverseChatPlayer smcp = MineverseChatAPI.getSynchronizedMineverseChatPlayer(uuid);
+ if(smcp == null) {
+ smcp = new SynchronizedMineverseChatPlayer(uuid);
+ MineverseChatAPI.addSynchronizedMineverseChatPlayerToMap(smcp);
+ }
+ smcp.getListening().clear();
+ smcp.clearMutes();
+ smcp.getIgnores().clear();
+ int sizeL = in.read();
+ //System.out.println(sizeL + " listening");
+ for(int a = 0; a < sizeL; a++) {
+ smcp.addListening(in.readUTF());
+ }
+ int sizeM = in.read();
+ for(int b = 0; b < sizeM; b++) {
+ String mute = in.readUTF();
+ long muteTime = in.readLong();
+ String muteReason = in.readUTF();
+ //System.out.println(mute);
+ smcp.addMute(mute, muteTime, muteReason);
+ }
+ int sizeI = in.read();
+ for(int c = 0; c < sizeI; c++) {
+ String ignore = in.readUTF();
+ //System.out.println(mute);
+ smcp.addIgnore(MineverseChatAPI.getSynchronizedMineverseChatPlayer(UUID.fromString(ignore)));
+ }
+ smcp.setSpy(in.readBoolean());
+ smcp.setMessageToggle(in.readBoolean());
+ }
+ }
+ }
+ catch(Exception e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/src/main/java/mineverse/Aust1n46/chat/bungee/VentureChatProxyServer.java b/src/main/java/mineverse/Aust1n46/chat/bungee/VentureChatProxyServer.java
new file mode 100644
index 0000000..1623b96
--- /dev/null
+++ b/src/main/java/mineverse/Aust1n46/chat/bungee/VentureChatProxyServer.java
@@ -0,0 +1,19 @@
+package mineverse.Aust1n46.chat.bungee;
+
+public class VentureChatProxyServer {
+ private String name;
+ private boolean empty;
+
+ public VentureChatProxyServer(String name, boolean empty) {
+ this.name = name;
+ this.empty = empty;
+ }
+
+ public boolean isEmpty() {
+ return empty;
+ }
+
+ public String getName() {
+ return name;
+ }
+}
diff --git a/src/main/java/mineverse/Aust1n46/chat/bungee/VentureChatProxySource.java b/src/main/java/mineverse/Aust1n46/chat/bungee/VentureChatProxySource.java
new file mode 100644
index 0000000..884af39
--- /dev/null
+++ b/src/main/java/mineverse/Aust1n46/chat/bungee/VentureChatProxySource.java
@@ -0,0 +1,11 @@
+package mineverse.Aust1n46.chat.bungee;
+
+import java.util.List;
+
+public interface VentureChatProxySource {
+ public void sendPluginMessage(String serverName, byte[] data);
+
+ public List getServers();
+
+ public VentureChatProxyServer getServer(String serverName);
+}
diff --git a/src/main/java/mineverse/Aust1n46/chat/bungee/VentureChatVelocity.java b/src/main/java/mineverse/Aust1n46/chat/bungee/VentureChatVelocity.java
new file mode 100644
index 0000000..2f59c68
--- /dev/null
+++ b/src/main/java/mineverse/Aust1n46/chat/bungee/VentureChatVelocity.java
@@ -0,0 +1,109 @@
+package mineverse.Aust1n46.chat.bungee;
+
+import java.io.ByteArrayOutputStream;
+import java.io.DataOutputStream;
+import java.util.List;
+import java.util.Optional;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
+
+import org.slf4j.Logger;
+
+import com.google.inject.Inject;
+import com.velocitypowered.api.event.Subscribe;
+import com.velocitypowered.api.event.connection.DisconnectEvent;
+import com.velocitypowered.api.event.connection.PluginMessageEvent;
+import com.velocitypowered.api.event.connection.PluginMessageEvent.ForwardResult;
+import com.velocitypowered.api.event.player.ServerConnectedEvent;
+import com.velocitypowered.api.event.proxy.ProxyInitializeEvent;
+import com.velocitypowered.api.plugin.Plugin;
+import com.velocitypowered.api.proxy.Player;
+import com.velocitypowered.api.proxy.ProxyServer;
+import com.velocitypowered.api.proxy.ServerConnection;
+import com.velocitypowered.api.proxy.messages.ChannelIdentifier;
+import com.velocitypowered.api.proxy.messages.MinecraftChannelIdentifier;
+import com.velocitypowered.api.proxy.server.RegisteredServer;
+
+@Plugin(id = "venturechat", name = "VentureChat", version = "${project.version}",
+description = "#1 Channels Chat plugin! Spigot + Bungee. Supports PlaceholderAPI + JSON formatting. Moderation GUI!", authors = {"Aust1n46"})
+public class VentureChatVelocity implements VentureChatProxySource {
+ private final ProxyServer proxyServer;
+ private final ChannelIdentifier channelIdentifier = MinecraftChannelIdentifier.create(VentureChatProxy.PLUGIN_MESSAGING_CHANNEL_NAMESPACE, VentureChatProxy.PLUGIN_MESSAGING_CHANNEL_NAME);
+
+ @Inject
+ public VentureChatVelocity(ProxyServer server, Logger logger) {
+ this.proxyServer = server;
+ }
+
+ @Subscribe
+ public void onInitialize(ProxyInitializeEvent event) {
+ proxyServer.getChannelRegistrar().register(channelIdentifier);
+ }
+
+ @Subscribe
+ public void onPlayerJoin(ServerConnectedEvent event) {
+ proxyServer.getScheduler().buildTask(this, () -> {
+ updatePlayerNames();
+ })
+ .delay(500, TimeUnit.MILLISECONDS)
+ .schedule();
+ }
+
+ @Subscribe
+ public void onPlayerQuit(DisconnectEvent event) {
+ updatePlayerNames();
+ }
+
+ private void updatePlayerNames() {
+ try {
+ ByteArrayOutputStream outstream = new ByteArrayOutputStream();
+ DataOutputStream out = new DataOutputStream(outstream);
+ out.writeUTF("PlayerNames");
+ out.writeInt(proxyServer.getPlayerCount());
+ for(Player player : proxyServer.getAllPlayers()) {
+ out.writeUTF(player.getUsername());
+ }
+ getServers().forEach(send -> {
+ if(!send.isEmpty()) {
+ sendPluginMessage(send.getName(), outstream.toByteArray());
+ }
+ });
+ }
+ catch(Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Subscribe
+ public void onPluginMessage(PluginMessageEvent event) {
+ String channelIdentifierId = event.getIdentifier().getId();
+ if(!channelIdentifierId.equals(VentureChatProxy.PLUGIN_MESSAGING_CHANNEL_STRING) && !channelIdentifierId.contains("viaversion:")) {
+ return;
+ }
+ if(!(event.getSource() instanceof ServerConnection)) {
+ return;
+ }
+ String serverName = ((ServerConnection) event.getSource()).getServerInfo().getName();
+ VentureChatProxy.onPluginMessage(event.getData(), serverName, this);
+ event.setResult(ForwardResult.handled());
+ }
+
+ @Override
+ public void sendPluginMessage(String serverName, byte[] data) {
+ Optional server = proxyServer.getServer(serverName);
+ if(server.isPresent()) {
+ server.get().sendPluginMessage(channelIdentifier, data);
+ }
+ }
+
+ @Override
+ public List getServers() {
+ return proxyServer.getAllServers().stream().map(velocityServer -> new VentureChatProxyServer(velocityServer.getServerInfo().getName(), velocityServer.getPlayersConnected().isEmpty())).collect(Collectors.toList());
+ }
+
+ @Override
+ public VentureChatProxyServer getServer(String serverName) {
+ RegisteredServer server = proxyServer.getServer(serverName).get();
+ return new VentureChatProxyServer(serverName, server.getPlayersConnected().isEmpty());
+ }
+}
diff --git a/src/main/java/mineverse/Aust1n46/chat/command/chat/Chwho.java b/src/main/java/mineverse/Aust1n46/chat/command/chat/Chwho.java
index 69b2781..e8d1183 100644
--- a/src/main/java/mineverse/Aust1n46/chat/command/chat/Chwho.java
+++ b/src/main/java/mineverse/Aust1n46/chat/command/chat/Chwho.java
@@ -49,7 +49,6 @@ public class Chwho implements VentureCommand {
out.writeUTF("Chwho");
out.writeUTF("Get");
out.writeUTF(mcp.getUUID().toString());
- out.writeUTF(mcp.getName());
out.writeUTF(channel.getName());
mcp.getPlayer().sendPluginMessage(plugin, MineverseChat.PLUGIN_MESSAGING_CHANNEL, byteOutStream.toByteArray());
out.close();