From 2a9c74f601145046f21d7a4ee4be855c0b6ed90d Mon Sep 17 00:00:00 2001 From: ME1312 Date: Sun, 13 Jun 2021 21:31:59 -0400 Subject: [PATCH] Add action methods to RemotePlayer --- SubServers.Bungee/common/pom.xml | 55 ++++++- .../Library/Compatibility/RemotePlayer.java | 115 +++++++++++++ SubServers.Bungee/pom.xml | 23 ++- .../SubServers/Bungee/Host/RemotePlayer.java | 155 ++++++++++++++++-- .../Packet/PacketDisconnectPlayer.java | 4 +- .../Network/Packet/PacketExMessagePlayer.java | 65 ++++++++ .../Packet/PacketExTransferPlayer.java | 62 +++++++ .../Network/Packet/PacketMessagePlayer.java | 97 +++++++++++ .../Network/Packet/PacketTransferPlayer.java | 90 ++++++++++ .../Bungee/Network/SubProtocol.java | 14 +- .../ME1312/SubServers/Bungee/SubProxy.java | 4 +- SubServers.Client/Bukkit/pom.xml | 30 ++-- .../Client/Bukkit/Network/SubProtocol.java | 9 +- SubServers.Client/Bukkit/src/plugin.yml | 2 +- SubServers.Client/Common/pom.xml | 57 ++++++- .../Common/Network/API/RemotePlayer.java | 153 ++++++++++++++++- .../Packet/PacketDisconnectPlayer.java | 2 +- .../Network/Packet/PacketMessagePlayer.java | 65 ++++++++ .../Network/Packet/PacketTransferPlayer.java | 62 +++++++ SubServers.Client/Sponge/pom.xml | 28 ++-- .../Client/Sponge/Network/SubProtocol.java | 8 +- .../SubServers/Client/Sponge/SubPlugin.java | 2 +- SubServers.Client/Universal/pom.xml | 4 +- SubServers.Console/pom.xml | 3 +- SubServers.Console/src/bungee.yml | 2 +- SubServers.Host/pom.xml | 25 ++- .../net/ME1312/SubServers/Host/ExHost.java | 2 +- .../SubServers/Host/Network/SubProtocol.java | 8 +- SubServers.Sync/pom.xml | 38 ++--- .../net/ME1312/SubServers/Sync/ExProxy.java | 4 +- .../Packet/PacketExDisconnectPlayer.java | 4 +- .../Network/Packet/PacketExMessagePlayer.java | 83 ++++++++++ .../Packet/PacketExTransferPlayer.java | 82 +++++++++ .../SubServers/Sync/Network/SubProtocol.java | 12 +- .../SubServers/Sync/Server/CachedPlayer.java | 88 ++++++++++ .../net/ME1312/SubServers/Sync/SubAPI.java | 20 +++ 36 files changed, 1345 insertions(+), 132 deletions(-) create mode 100644 SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExMessagePlayer.java create mode 100644 SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExTransferPlayer.java create mode 100644 SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketMessagePlayer.java create mode 100644 SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketTransferPlayer.java rename {SubServers.Sync/src/net/ME1312/SubServers/Sync => SubServers.Client/Common/src/net/ME1312/SubServers/Client/Common}/Network/Packet/PacketDisconnectPlayer.java (96%) create mode 100644 SubServers.Client/Common/src/net/ME1312/SubServers/Client/Common/Network/Packet/PacketMessagePlayer.java create mode 100644 SubServers.Client/Common/src/net/ME1312/SubServers/Client/Common/Network/Packet/PacketTransferPlayer.java create mode 100644 SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/Packet/PacketExMessagePlayer.java create mode 100644 SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/Packet/PacketExTransferPlayer.java diff --git a/SubServers.Bungee/common/pom.xml b/SubServers.Bungee/common/pom.xml index 8e71629d..8d2be562 100644 --- a/SubServers.Bungee/common/pom.xml +++ b/SubServers.Bungee/common/pom.xml @@ -29,7 +29,7 @@ net.ME1312.Galaxi GalaxiUtil 21w24a - provided + compile @@ -54,6 +54,59 @@ 1.8 + + org.apache.maven.plugins + maven-antrun-plugin + + + process-resources + + run + + + + + + + + + + + + org.apache.maven.plugins + maven-jar-plugin + 3.2.0 + + SubServers.Bungee.Common + ../../Artifacts/Maven + + + + org.apache.maven.plugins + maven-javadoc-plugin + 3.0.0 + + + generate-sources + + javadoc + + + SubServers.Bungee.Common Javadoc + SubServers.Bungee.Common ${project.version} + protected + ./ + ${basedir}/../../Javadoc/SubServers.Bungee.Common + ${basedir}/../../Javadoc/SubServers.Bungee.Common + -Xdoclint:none + + https://dev.me1312.net/jenkins/job/GalaxiEngine/javadoc/GalaxiUtil/ + https://ci.md-5.net/job/BungeeCord/ws/api/target/apidocs/ + + + + + \ No newline at end of file diff --git a/SubServers.Bungee/common/src/net/ME1312/SubServers/Bungee/Library/Compatibility/RemotePlayer.java b/SubServers.Bungee/common/src/net/ME1312/SubServers/Bungee/Library/Compatibility/RemotePlayer.java index 3e1a2862..f32b6944 100644 --- a/SubServers.Bungee/common/src/net/ME1312/SubServers/Bungee/Library/Compatibility/RemotePlayer.java +++ b/SubServers.Bungee/common/src/net/ME1312/SubServers/Bungee/Library/Compatibility/RemotePlayer.java @@ -1,8 +1,15 @@ package net.ME1312.SubServers.Bungee.Library.Compatibility; +import net.ME1312.Galaxi.Library.Callback.Callback; + +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.config.ServerInfo; +import net.md_5.bungee.api.connection.ProxiedPlayer; import java.net.InetSocketAddress; +import java.util.Arrays; +import java.util.LinkedList; import java.util.UUID; /** @@ -10,6 +17,13 @@ import java.util.UUID; */ public interface RemotePlayer { + /** + * Get Local Player + * + * @return Local Player (or null when not local) + */ + ProxiedPlayer get(); + /** * Get the UUID of this player. * @@ -51,4 +65,105 @@ public interface RemotePlayer { * @return the server this player is connected to */ ServerInfo getServer(); + + /** + * Sends messages to this player + * + * @param messages Messages to send + */ + default void sendMessage(String... messages) { + sendMessage(messages, i -> {}); + } + + /** + * Sends messages to this player + * + * @param messages Messages to send + * @param response Success Status + */ + void sendMessage(String[] messages, Callback response); + + /** + * Sends messages to this player + * + * @param messages Messages to send + */ + default void sendMessage(BaseComponent... messages) { + sendMessage(messages, i -> {}); + } + + /** + * Sends messages to this player + * + * @param messages Messages to send + * @param response Success Status + */ + void sendMessage(BaseComponent[] messages, Callback response); + + /** + * Transfers this player to another server + * + * @param server Target server + */ + default void transfer(String server) { + transfer(server, i -> {}); + } + + /** + * Transfers this player to another server + * + * @param server Target server + * @param response Success status + */ + void transfer(String server, Callback response); + + /** + * Transfers this player to another server + * + * @param server Target server + */ + default void transfer(ServerInfo server) { + transfer(server, i -> {}); + } + + /** + * Transfers this player to another server + * + * @param server Target server + * @param response Success status + */ + void transfer(ServerInfo server, Callback response); + + /** + * Disconnects this player from the network + */ + default void disconnect() { + disconnect(i -> {}); + } + + /** + * Disconnects this player from the network + * + * @param response Success status + */ + default void disconnect(Callback response) { + disconnect(null, response); + } + + /** + * Disconnects this player from the network + * + * @param message Disconnect Message + */ + default void disconnect(String message) { + disconnect(message, i -> {}); + } + + /** + * Disconnects this player from the network + * + * @param message Disconnect Message + * @param response Success status + */ + void disconnect(String message, Callback response); } diff --git a/SubServers.Bungee/pom.xml b/SubServers.Bungee/pom.xml index 1a3c3b6a..d17be62f 100644 --- a/SubServers.Bungee/pom.xml +++ b/SubServers.Bungee/pom.xml @@ -25,33 +25,23 @@ 1.15-SNAPSHOT provided - - net.ME1312.Galaxi - GalaxiUtil - 21w24a - compile - true - net.ME1312.SubServers SubServers.Bungee.Common - -PLACEHOLDER + ${project.version} compile - true net.ME1312.SubData Server 21w08a compile - true com.dosse.upnp WaifUPnP 1.1 compile - true @@ -117,6 +107,15 @@ + + org.apache.maven.plugins + maven-jar-plugin + 3.2.0 + + SubServers.Bungee + ../Artifacts/Maven + + org.apache.maven.plugins maven-assembly-plugin @@ -154,7 +153,7 @@ SubServers.Bungee Javadoc - SubServers.Bungee Javadoc + SubServers.Bungee ${project.version} protected ./ ${basedir}/../Javadoc/SubServers.Bungee diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/RemotePlayer.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/RemotePlayer.java index e6bd83e2..caaa494f 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/RemotePlayer.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/RemotePlayer.java @@ -1,12 +1,21 @@ package net.ME1312.SubServers.Bungee.Host; +import net.ME1312.Galaxi.Library.Callback.Callback; import net.ME1312.Galaxi.Library.Map.ObjectMap; import net.ME1312.Galaxi.Library.Util; +import net.ME1312.SubData.Server.SubDataClient; import net.ME1312.SubData.Server.SubDataSerializable; +import net.ME1312.SubServers.Bungee.Network.Packet.PacketExDisconnectPlayer; +import net.ME1312.SubServers.Bungee.Network.Packet.PacketExMessagePlayer; +import net.ME1312.SubServers.Bungee.Network.Packet.PacketExTransferPlayer; import net.ME1312.SubServers.Bungee.SubAPI; +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.config.ServerInfo; import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.md_5.bungee.chat.ComponentSerializer; +import java.lang.reflect.InvocationTargetException; import java.net.InetSocketAddress; import java.util.UUID; @@ -27,9 +36,21 @@ public class RemotePlayer implements net.ME1312.SubServers.Bungee.Library.Compat * @param player Local Player */ public RemotePlayer(ProxiedPlayer player) { + this(player, player.getServer().getInfo()); + } + + + /** + * Translate a Local Player to a Remote Player + * + * @param player Local Player + * @param server Server the player is on + */ + public RemotePlayer(ProxiedPlayer player, ServerInfo server) { if (Util.isNull(player)) throw new NullPointerException(); this.local = player; this.id = player.getUniqueId(); + this.server = (server instanceof Server)? (Server) server : null; } /** @@ -41,20 +62,16 @@ public class RemotePlayer implements net.ME1312.SubServers.Bungee.Library.Compat * @param server Server the player is on * @param ip Player IP Address */ - public RemotePlayer(String name, UUID id, Proxy proxy, Server server, InetSocketAddress ip) { + public RemotePlayer(String name, UUID id, Proxy proxy, ServerInfo server, InetSocketAddress ip) { if (Util.isNull(name, id, proxy, ip)) throw new NullPointerException(); this.id = id; this.name = name; this.ip = ip; this.proxy = proxy; - this.server = server; + this.server = (server instanceof Server)? (Server) server : null; } - /** - * Get Local Player - * - * @return Local Player (or null when not local) - */ + @Override public ProxiedPlayer get() { return local; } @@ -98,11 +115,14 @@ public class RemotePlayer implements net.ME1312.SubServers.Bungee.Library.Compat return (proxy == null)? null : proxy.getName(); } + private SubDataClient getProxyConnection() { + Proxy proxy = getProxy(); + return (proxy == null)? null : (SubDataClient) proxy.getSubData()[0]; + } + @Override public Server getServer() { - if (local != null) { - return (Server) local.getServer().getInfo(); - } else return server; + return server; } @Override @@ -111,6 +131,121 @@ public class RemotePlayer implements net.ME1312.SubServers.Bungee.Library.Compat return (server == null)? null : server.getName(); } + @Override + public void sendMessage(String[] messages, Callback response) { + if (local != null) { + local.sendMessages(messages); + response.run(0); + } else { + SubDataClient client = getProxyConnection(); + if (client != null) { + StackTraceElement[] origin = new Exception().getStackTrace(); + client.sendPacket(new PacketExMessagePlayer(getUniqueId(), messages, null, data -> { + try { + response.run(data.getInt(0x0001)); + } catch (Throwable e) { + Throwable ew = new InvocationTargetException(e); + ew.setStackTrace(origin); + ew.printStackTrace(); + } + })); + } else response.run(4); + } + } + + @Override + public void sendMessage(BaseComponent[] messages, Callback response) { + if (local != null) { + local.sendMessage(messages); + response.run(0); + } else { + SubDataClient client = getProxyConnection(); + if (client != null) { + StackTraceElement[] origin = new Exception().getStackTrace(); + client.sendPacket(new PacketExMessagePlayer(getUniqueId(), null, new String[]{ ComponentSerializer.toString(messages) }, data -> { + try { + response.run(data.getInt(0x0001)); + } catch (Throwable e) { + Throwable ew = new InvocationTargetException(e); + ew.setStackTrace(origin); + ew.printStackTrace(); + } + })); + } else response.run(4); + } + } + + @Override + public void transfer(String server, Callback response) { + if (local != null) { + Server info = SubAPI.getInstance().getServer(server); + if (info != null) { + local.connect(info); + response.run(0); + } else response.run(1); + } else { + SubDataClient client = getProxyConnection(); + if (client != null) { + StackTraceElement[] origin = new Exception().getStackTrace(); + client.sendPacket(new PacketExTransferPlayer(getUniqueId(), server, data -> { + try { + response.run(data.getInt(0x0001)); + } catch (Throwable e) { + Throwable ew = new InvocationTargetException(e); + ew.setStackTrace(origin); + ew.printStackTrace(); + } + })); + } else response.run(4); + } + } + + @Override + public void transfer(ServerInfo server, Callback response) { + if (local != null) { + local.connect(server); + response.run(0); + } else { + SubDataClient client = getProxyConnection(); + if (client != null) { + StackTraceElement[] origin = new Exception().getStackTrace(); + client.sendPacket(new PacketExTransferPlayer(getUniqueId(), server.getName(), data -> { + try { + response.run(data.getInt(0x0001)); + } catch (Throwable e) { + Throwable ew = new InvocationTargetException(e); + ew.setStackTrace(origin); + ew.printStackTrace(); + } + })); + } else response.run(4); + } + } + + @Override + public void disconnect(String message, Callback response) { + if (local != null) { + if (message != null) { + local.disconnect(message); + } else local.disconnect(); + response.run(0); + } else { + SubDataClient client = getProxyConnection(); + if (client != null) { + StackTraceElement[] origin = new Exception().getStackTrace(); + client.sendPacket(new PacketExDisconnectPlayer(getUniqueId(), message, data -> { + try { + response.run(data.getInt(0x0001)); + } catch (Throwable e) { + Throwable ew = new InvocationTargetException(e); + ew.setStackTrace(origin); + ew.printStackTrace(); + } + })); + } else response.run(4); + } + } + @Override public boolean equals(Object obj) { return obj instanceof RemotePlayer && getUniqueId().equals(((RemotePlayer) obj).getUniqueId()); diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDisconnectPlayer.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDisconnectPlayer.java index aae165a5..da69df70 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDisconnectPlayer.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketDisconnectPlayer.java @@ -51,9 +51,9 @@ public class PacketDisconnectPlayer implements PacketObjectIn, PacketOb @Override public void receive(SubDataClient client, ObjectMap data) { - UUID tracker = (data.contains(0x0000)?data.getUUID(0x0000):null); + UUID tracker = (data.contains(0x0000)?data.getUUID(0x0000):null); try { - UUID id = data.getUUID(0x0001); + UUID id = data.getUUID(0x0001); ProxiedPlayer local; RemotePlayer remote; diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExMessagePlayer.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExMessagePlayer.java new file mode 100644 index 00000000..0fe5d848 --- /dev/null +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExMessagePlayer.java @@ -0,0 +1,65 @@ +package net.ME1312.SubServers.Bungee.Network.Packet; + +import net.ME1312.Galaxi.Library.Callback.Callback; +import net.ME1312.Galaxi.Library.Map.ObjectMap; +import net.ME1312.Galaxi.Library.Util; +import net.ME1312.SubData.Server.Protocol.PacketObjectIn; +import net.ME1312.SubData.Server.Protocol.PacketObjectOut; +import net.ME1312.SubData.Server.SubDataClient; + +import java.util.HashMap; +import java.util.UUID; + +/** + * Message External Player Packet + */ +public class PacketExMessagePlayer implements PacketObjectIn, PacketObjectOut { + private static HashMap>[]> callbacks = new HashMap>[]>(); + private UUID player; + private String[] legacy, raw; + private UUID id; + + /** + * New PacketExMessagePlayer (In) + */ + public PacketExMessagePlayer() {} + + /** + * New PacketExMessagePlayer (Out) + * + * @param player Player + * @param legacy Messages (Legacy) + * @param raw Messages (JSON) + * @param callback Callbacks + */ + @SafeVarargs + public PacketExMessagePlayer(UUID player, String[] legacy, String[] raw, Callback>... callback) { + if (Util.isNull(player, callback)) throw new NullPointerException(); + this.player = player; + this.legacy = legacy; + this.raw = raw; + this.id = Util.getNew(callbacks.keySet(), UUID::randomUUID); + callbacks.put(id, callback); + } + + @Override + public ObjectMap send(SubDataClient client) { + ObjectMap data = new ObjectMap(); + data.set(0x0000, id); + data.set(0x0001, player); + if (legacy != null) data.set(0x0002, legacy); + if (raw != null) data.set(0x0003, raw); + return data; + } + + @Override + public void receive(SubDataClient client, ObjectMap data) { + for (Callback> callback : callbacks.get(data.getUUID(0x0000))) callback.run(data); + callbacks.remove(data.getUUID(0x0000)); + } + + @Override + public int version() { + return 0x0001; + } +} diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExTransferPlayer.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExTransferPlayer.java new file mode 100644 index 00000000..df72d0f2 --- /dev/null +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketExTransferPlayer.java @@ -0,0 +1,62 @@ +package net.ME1312.SubServers.Bungee.Network.Packet; + +import net.ME1312.Galaxi.Library.Callback.Callback; +import net.ME1312.Galaxi.Library.Map.ObjectMap; +import net.ME1312.Galaxi.Library.Util; +import net.ME1312.SubData.Server.Protocol.PacketObjectIn; +import net.ME1312.SubData.Server.Protocol.PacketObjectOut; +import net.ME1312.SubData.Server.SubDataClient; + +import java.util.HashMap; +import java.util.UUID; + +/** + * Transfer External Player Packet + */ +public class PacketExTransferPlayer implements PacketObjectIn, PacketObjectOut { + private static HashMap>[]> callbacks = new HashMap>[]>(); + private UUID player; + private String server; + private UUID id; + + /** + * New PacketExTransferPlayer (In) + */ + public PacketExTransferPlayer() {} + + /** + * New PacketExTransferPlayer (Out) + * + * @param player Player + * @param server Server + * @param callback Callbacks + */ + @SafeVarargs + public PacketExTransferPlayer(UUID player, String server, Callback>... callback) { + if (Util.isNull(player, callback)) throw new NullPointerException(); + this.player = player; + this.server = server; + this.id = Util.getNew(callbacks.keySet(), UUID::randomUUID); + callbacks.put(id, callback); + } + + @Override + public ObjectMap send(SubDataClient client) { + ObjectMap data = new ObjectMap(); + data.set(0x0000, id); + data.set(0x0001, player); + if (server != null) data.set(0x0002, server); + return data; + } + + @Override + public void receive(SubDataClient client, ObjectMap data) { + for (Callback> callback : callbacks.get(data.getUUID(0x0000))) callback.run(data); + callbacks.remove(data.getUUID(0x0000)); + } + + @Override + public int version() { + return 0x0001; + } +} diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketMessagePlayer.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketMessagePlayer.java new file mode 100644 index 00000000..f2c33d3b --- /dev/null +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketMessagePlayer.java @@ -0,0 +1,97 @@ +package net.ME1312.SubServers.Bungee.Network.Packet; + +import net.ME1312.Galaxi.Library.Map.ObjectMap; +import net.ME1312.Galaxi.Library.Util; +import net.ME1312.SubData.Server.Protocol.PacketObjectIn; +import net.ME1312.SubData.Server.Protocol.PacketObjectOut; +import net.ME1312.SubData.Server.SubDataClient; +import net.ME1312.SubServers.Bungee.Host.RemotePlayer; +import net.ME1312.SubServers.Bungee.SubProxy; + +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.md_5.bungee.chat.ComponentSerializer; + +import java.util.Arrays; +import java.util.LinkedList; +import java.util.List; +import java.util.UUID; + +/** + * Message Player Packet + */ +public class PacketMessagePlayer implements PacketObjectIn, PacketObjectOut { + private SubProxy plugin; + private int response; + private UUID tracker; + + /** + * New PacketMessagePlayer (In) + * + * @param plugin SubPlugin + */ + public PacketMessagePlayer(SubProxy plugin) { + if (Util.isNull(plugin)) throw new NullPointerException(); + this.plugin = plugin; + } + + /** + * New PacketMessagePlayer (Out) + * + * @param response Response ID + * @param tracker Receiver ID + */ + public PacketMessagePlayer(int response, UUID tracker) { + this.response = response; + this.tracker = tracker; + } + + @Override + public ObjectMap send(SubDataClient client) { + ObjectMap json = new ObjectMap(); + if (tracker != null) json.set(0x0000, tracker); + json.set(0x0001, response); + return json; + } + + @SuppressWarnings("deprecation") + @Override + public void receive(SubDataClient client, ObjectMap data) { + UUID tracker = (data.contains(0x0000)?data.getUUID(0x0000):null); + try { + UUID id = data.getUUID(0x0001); + + ProxiedPlayer local; + RemotePlayer remote; + if ((local = plugin.getPlayer(id)) != null) { + if (data.contains(0x0002)) + local.sendMessages(data.getRawStringList(0x0002).toArray(new String[0])); + if (data.contains(0x0003)) { + List messages = data.getRawStringList(0x0003); + LinkedList components = new LinkedList(); + for (String message : messages) components.addAll(Arrays.asList(ComponentSerializer.parse(message))); + local.sendMessage(components.toArray(new BaseComponent[0])); + } + client.sendPacket(new PacketMessagePlayer(0, tracker)); + } else if ((remote = plugin.api.getRemotePlayer(id)) != null) { + if (remote.getProxy().getSubData()[0] != null) { + ((SubDataClient) remote.getProxy().getSubData()[0]).sendPacket(new PacketExDisconnectPlayer(remote.getUniqueId(), (data.contains(0x0002)?data.getRawString(0x0002):null), r -> { + client.sendPacket(new PacketMessagePlayer(r.getInt(0x0001), tracker)); + })); + } else { + client.sendPacket(new PacketMessagePlayer(4, tracker)); + } + } else { + client.sendPacket(new PacketMessagePlayer(3, tracker)); + } + } catch (Throwable e) { + client.sendPacket(new PacketMessagePlayer(2, tracker)); + e.printStackTrace(); + } + } + + @Override + public int version() { + return 0x0001; + } +} diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketTransferPlayer.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketTransferPlayer.java new file mode 100644 index 00000000..847caf81 --- /dev/null +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketTransferPlayer.java @@ -0,0 +1,90 @@ +package net.ME1312.SubServers.Bungee.Network.Packet; + +import net.ME1312.Galaxi.Library.Map.ObjectMap; +import net.ME1312.Galaxi.Library.Util; +import net.ME1312.SubData.Server.Protocol.PacketObjectIn; +import net.ME1312.SubData.Server.Protocol.PacketObjectOut; +import net.ME1312.SubData.Server.SubDataClient; +import net.ME1312.SubServers.Bungee.Host.RemotePlayer; +import net.ME1312.SubServers.Bungee.Host.Server; +import net.ME1312.SubServers.Bungee.SubProxy; + +import net.md_5.bungee.api.connection.ProxiedPlayer; + +import java.util.UUID; + +/** + * Transfer Player Packet + */ +public class PacketTransferPlayer implements PacketObjectIn, PacketObjectOut { + private SubProxy plugin; + private int response; + private UUID tracker; + + /** + * New PacketTransferPlayer (In) + * + * @param plugin SubPlugin + */ + public PacketTransferPlayer(SubProxy plugin) { + if (Util.isNull(plugin)) throw new NullPointerException(); + this.plugin = plugin; + } + + /** + * New PacketTransferPlayer (Out) + * + * @param response Response ID + * @param tracker Receiver ID + */ + public PacketTransferPlayer(int response, UUID tracker) { + this.response = response; + this.tracker = tracker; + } + + @Override + public ObjectMap send(SubDataClient client) { + ObjectMap json = new ObjectMap(); + if (tracker != null) json.set(0x0000, tracker); + json.set(0x0001, response); + return json; + } + + @Override + public void receive(SubDataClient client, ObjectMap data) { + UUID tracker = (data.contains(0x0000)?data.getUUID(0x0000):null); + try { + UUID id = data.getUUID(0x0001); + + ProxiedPlayer local; + RemotePlayer remote; + if ((local = plugin.getPlayer(id)) != null) { + Server server; + if (data.contains(0x0002) && (server = plugin.api.getServer(data.getRawString(0x0002))) != null) { + local.connect(server); + client.sendPacket(new PacketTransferPlayer(0, tracker)); + } else { + client.sendPacket(new PacketTransferPlayer(1, tracker)); + } + } else if ((remote = plugin.api.getRemotePlayer(id)) != null) { + if (remote.getProxy().getSubData()[0] != null) { + ((SubDataClient) remote.getProxy().getSubData()[0]).sendPacket(new PacketExTransferPlayer(remote.getUniqueId(), (data.contains(0x0002)?data.getRawString(0x0002):null), r -> { + client.sendPacket(new PacketTransferPlayer(r.getInt(0x0001), tracker)); + })); + } else { + client.sendPacket(new PacketTransferPlayer(4, tracker)); + } + } else { + client.sendPacket(new PacketTransferPlayer(3, tracker)); + } + } catch (Throwable e) { + client.sendPacket(new PacketTransferPlayer(2, tracker)); + e.printStackTrace(); + } + } + + @Override + public int version() { + return 0x0001; + } +} diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/SubProtocol.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/SubProtocol.java index 4f05cdb3..a83cb5da 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/SubProtocol.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/SubProtocol.java @@ -2,8 +2,6 @@ package net.ME1312.SubServers.Bungee.Network; import net.ME1312.Galaxi.Library.Callback.Callback; import net.ME1312.Galaxi.Library.Version.Version; -import net.ME1312.SubData.Server.Library.DataSize; -import net.ME1312.SubData.Server.SubDataClient; import net.ME1312.SubData.Server.SubDataProtocol; import net.ME1312.SubData.Server.SubDataServer; import net.ME1312.SubServers.Bungee.Event.SubNetworkConnectEvent; @@ -76,8 +74,9 @@ public class SubProtocol extends SubDataProtocol { registerPacket(0x0038, PacketRemoveServer.class); registerPacket(0x0039, PacketDeleteServer.class); //registerPacket(0x003A, PacketRestoreServer.class); // TODO - //registerPacket(0x003B, PacketTeleportPlayer.class); + registerPacket(0x003B, PacketTransferPlayer.class); registerPacket(0x003C, PacketDisconnectPlayer.class); + registerPacket(0x003D, PacketMessagePlayer.class); registerPacket(0x0030, new PacketCreateServer(plugin)); registerPacket(0x0031, new PacketAddServer(plugin)); @@ -90,8 +89,9 @@ public class SubProtocol extends SubDataProtocol { registerPacket(0x0038, new PacketRemoveServer(plugin)); registerPacket(0x0039, new PacketDeleteServer(plugin)); //registerPacket(0x003A, new PacketRestoreServer(plugin)); // TODO - //registerPacket(0x003B, new PacketTeleportPlayer(plugin)); + registerPacket(0x003B, new PacketTransferPlayer(plugin)); registerPacket(0x003C, new PacketDisconnectPlayer(plugin)); + registerPacket(0x003D, new PacketMessagePlayer(plugin)); // 50-6F: External Host Packets @@ -120,20 +120,24 @@ public class SubProtocol extends SubDataProtocol { //registerPacket(0x005A, new PacketExRestoreServer()); - // 70-7F: External Misc Packets + // 70-7F: External Sync Packets registerPacket(0x0070, PacketOutExRunEvent.class); registerPacket(0x0071, PacketOutExReset.class); registerPacket(0x0072, PacketOutExReload.class); registerPacket(0x0073, PacketOutExUpdateWhitelist.class); registerPacket(0x0074, PacketExSyncPlayer.class); + registerPacket(0x0075, PacketExTransferPlayer.class); registerPacket(0x0076, PacketExDisconnectPlayer.class); + registerPacket(0x0077, PacketExMessagePlayer.class); //registerPacket(0x0070, new PacketOutRunEvent()); //registerPacket(0x0071, new PacketOutReset()); //registerPacket(0x0072, new PacketOutReload()); //registerPacket(0x0073, new PacketOutExUpdateWhitelist()); registerPacket(0x0074, new PacketExSyncPlayer(plugin)); + registerPacket(0x0075, new PacketExTransferPlayer()); registerPacket(0x0076, new PacketExDisconnectPlayer()); + registerPacket(0x0077, new PacketExMessagePlayer()); } @SuppressWarnings("deprecation") diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubProxy.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubProxy.java index 6cfd6aed..42d507e8 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubProxy.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubProxy.java @@ -90,7 +90,7 @@ public final class SubProxy extends BungeeCommon implements Listener { public SubProtocol subprotocol; public SubDataServer subdata = null; public SubServer sudo = null; - public static final Version version = Version.fromString("2.17a"); + public static final Version version = Version.fromString("2.17b/p1"); public final Proxy mProxy; public boolean canSudo = false; @@ -1030,7 +1030,7 @@ public final class SubProxy extends BungeeCommon implements Listener { public void connected(ServerConnectedEvent e) { if (e.getPlayer().isConnected()) { synchronized (rPlayers) { - RemotePlayer player = new RemotePlayer(e.getPlayer().getName(), e.getPlayer().getUniqueId(), mProxy, (e.getServer().getInfo() instanceof Server)?(Server) e.getServer().getInfo():null, e.getPlayer().getAddress()); + RemotePlayer player = new RemotePlayer(e.getPlayer(), e.getServer().getInfo()); rPlayerLinkP.put(player.getUniqueId(), player.getProxy()); rPlayers.put(player.getUniqueId(), player); if (player.getServer() != null) rPlayerLinkS.put(player.getUniqueId(), player.getServer()); diff --git a/SubServers.Client/Bukkit/pom.xml b/SubServers.Client/Bukkit/pom.xml index a9f8eea9..34e4fd62 100644 --- a/SubServers.Client/Bukkit/pom.xml +++ b/SubServers.Client/Bukkit/pom.xml @@ -40,29 +40,14 @@ net.md-5 bungeecord-chat - 1.10-SNAPSHOT + 1.9-SNAPSHOT provided - - net.ME1312.Galaxi - GalaxiUtil - 21w24a - compile - true - net.ME1312.SubServers SubServers.Client.Common - -PLACEHOLDER + ${project.version} compile - true - - - net.ME1312.SubData - Client - 21w08a - compile - true com.github.ConnorLinfoot @@ -117,6 +102,15 @@ + + org.apache.maven.plugins + maven-jar-plugin + 3.2.0 + + SubServers.Client.Bukkit + ../../Artifacts/Maven + + org.apache.maven.plugins maven-assembly-plugin @@ -154,7 +148,7 @@ SubServers.Client.Bukkit Javadoc - SubServers.Client.Bukkit Javadoc + SubServers.Client.Bukkit ${project.version} protected ./ ${basedir}/../../Javadoc/SubServers.Client.Bukkit diff --git a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/SubProtocol.java b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/SubProtocol.java index f76a5ea6..b58978d7 100644 --- a/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/SubProtocol.java +++ b/SubServers.Client/Bukkit/src/net/ME1312/SubServers/Client/Bukkit/Network/SubProtocol.java @@ -5,7 +5,6 @@ import net.ME1312.Galaxi.Library.Container.Pair; import net.ME1312.Galaxi.Library.Map.ObjectMap; import net.ME1312.Galaxi.Library.Util; import net.ME1312.Galaxi.Library.Version.Version; -import net.ME1312.SubData.Client.Library.DataSize; import net.ME1312.SubData.Client.SubDataClient; import net.ME1312.SubData.Client.SubDataProtocol; import net.ME1312.SubServers.Client.Bukkit.Event.SubNetworkConnectEvent; @@ -76,6 +75,9 @@ public class SubProtocol extends SubDataProtocol { registerPacket(0x0037, PacketStopServer.class); registerPacket(0x0038, PacketRemoveServer.class); registerPacket(0x0039, PacketDeleteServer.class); + registerPacket(0x003B, PacketTransferPlayer.class); + registerPacket(0x003C, PacketDisconnectPlayer.class); + registerPacket(0x003D, PacketMessagePlayer.class); registerPacket(0x0030, new PacketCreateServer()); registerPacket(0x0031, new PacketAddServer()); @@ -87,9 +89,12 @@ public class SubProtocol extends SubDataProtocol { registerPacket(0x0037, new PacketStopServer()); registerPacket(0x0038, new PacketRemoveServer()); registerPacket(0x0039, new PacketDeleteServer()); + registerPacket(0x003B, new PacketTransferPlayer()); + registerPacket(0x003C, new PacketDisconnectPlayer()); + registerPacket(0x003D, new PacketMessagePlayer()); - // 70-7F: External Misc Packets + // 70-7F: External Sync Packets //registerPacket(0x0070, PacketInExRunEvent.class); //registerPacket(0x0071, PacketInExReset.class); //registerPacket(0x0072, PacketInExReload.class); diff --git a/SubServers.Client/Bukkit/src/plugin.yml b/SubServers.Client/Bukkit/src/plugin.yml index 353804df..8835e406 100644 --- a/SubServers.Client/Bukkit/src/plugin.yml +++ b/SubServers.Client/Bukkit/src/plugin.yml @@ -1,6 +1,6 @@ name: SubServers-Client-Bukkit main: net.ME1312.SubServers.Client.Bukkit.SubPlugin -version: "2.17a" +version: "2.17b/p1" authors: ["ME1312"] softdepend: [TitleAPI, PlaceholderAPI] website: "https://github.com/ME1312/SubServers-2" diff --git a/SubServers.Client/Common/pom.xml b/SubServers.Client/Common/pom.xml index 5f3b2396..b45c53f0 100644 --- a/SubServers.Client/Common/pom.xml +++ b/SubServers.Client/Common/pom.xml @@ -19,13 +19,13 @@ net.ME1312.Galaxi GalaxiUtil 21w24a - provided + compile net.ME1312.SubData Client 21w08a - provided + compile @@ -50,6 +50,33 @@ 1.8 + + org.apache.maven.plugins + maven-antrun-plugin + + + process-resources + + run + + + + + + + + + + + + org.apache.maven.plugins + maven-jar-plugin + 3.2.0 + + SubServers.Client.Common + ../../Artifacts/Maven + + org.apache.maven.plugins maven-assembly-plugin @@ -98,6 +125,32 @@ + + org.apache.maven.plugins + maven-javadoc-plugin + 3.0.0 + + + generate-sources + + javadoc + + + SubServers.Client.Common Javadoc + SubServers.Client.Common ${project.version} + protected + ./ + ${basedir}/../../Javadoc/SubServers.Client.Common + ${basedir}/../../Javadoc/SubServers.Client.Common + -Xdoclint:none + + https://dev.me1312.net/jenkins/job/GalaxiEngine/javadoc/GalaxiUtil/ + https://dev.me1312.net/jenkins/job/SubData/javadoc/Client/ + + + + + \ No newline at end of file diff --git a/SubServers.Client/Common/src/net/ME1312/SubServers/Client/Common/Network/API/RemotePlayer.java b/SubServers.Client/Common/src/net/ME1312/SubServers/Client/Common/Network/API/RemotePlayer.java index bc6b897d..58274dfd 100644 --- a/SubServers.Client/Common/src/net/ME1312/SubServers/Client/Common/Network/API/RemotePlayer.java +++ b/SubServers.Client/Common/src/net/ME1312/SubServers/Client/Common/Network/API/RemotePlayer.java @@ -6,13 +6,11 @@ import net.ME1312.Galaxi.Library.Util; import net.ME1312.SubData.Client.DataClient; import net.ME1312.SubData.Client.SubDataClient; import net.ME1312.SubServers.Client.Common.ClientAPI; -import net.ME1312.SubServers.Client.Common.Network.Packet.PacketDownloadPlayerInfo; +import net.ME1312.SubServers.Client.Common.Network.Packet.*; import java.lang.reflect.InvocationTargetException; import java.net.InetSocketAddress; -import java.util.Calendar; -import java.util.Collections; -import java.util.UUID; +import java.util.*; /** * Simplified RemotePlayer Data Class @@ -169,6 +167,153 @@ public class RemotePlayer { } } + /** + * Sends messages to this player + * + * @param messages Messages to send + */ + public void sendMessage(String... messages) { + sendMessage(messages, i -> {}); + } + + /** + * Sends messages to this player + * + * @param messages Messages to send + * @param response Success Status + */ + public void sendMessage(String[] messages, Callback response) { + StackTraceElement[] origin = new Exception().getStackTrace(); + client().sendPacket(new PacketMessagePlayer(getUniqueId(), messages, null, data -> { + try { + response.run(data.getInt(0x0001)); + } catch (Throwable e) { + Throwable ew = new InvocationTargetException(e); + ew.setStackTrace(origin); + ew.printStackTrace(); + } + })); + } + + /** + * Sends JSON format messages to this player + * + * @param messages Messages to send + */ + public void sendRawMessage(String... messages) { + sendRawMessage(messages, i -> {}); + } + + /** + * Sends JSON format messages to this player + * + * @param messages Messages to send + * @param response Success Status + */ + public void sendRawMessage(String[] messages, Callback response) { + StackTraceElement[] origin = new Exception().getStackTrace(); + client().sendPacket(new PacketMessagePlayer(getUniqueId(), null, messages, data -> { + try { + response.run(data.getInt(0x0001)); + } catch (Throwable e) { + Throwable ew = new InvocationTargetException(e); + ew.setStackTrace(origin); + ew.printStackTrace(); + } + })); + } + + /** + * Transfers this player to another server + * + * @param server Target server + */ + public void transfer(String server) { + transfer(server, i -> {}); + } + + /** + * Transfers this player to another server + * + * @param server Target server + * @param response Success status + */ + public void transfer(String server, Callback response) { + StackTraceElement[] origin = new Exception().getStackTrace(); + client().sendPacket(new PacketTransferPlayer(getUniqueId(), server, data -> { + try { + response.run(data.getInt(0x0001)); + } catch (Throwable e) { + Throwable ew = new InvocationTargetException(e); + ew.setStackTrace(origin); + ew.printStackTrace(); + } + })); + } + + /** + * Transfers this player to another server + * + * @param server Target server + */ + public void transfer(Server server) { + transfer(server, i -> {}); + } + + /** + * Transfers this player to another server + * + * @param server Target server + * @param response Success status + */ + public void transfer(Server server, Callback response) { + transfer(server.getName(), response); + } + + /** + * Disconnects this player from the network + */ + public void disconnect() { + disconnect(i -> {}); + } + + /** + * Disconnects this player from the network + * + * @param response Success status + */ + public void disconnect(Callback response) { + disconnect(null, response); + } + + /** + * Disconnects this player from the network + * + * @param message Disconnect Message + */ + public void disconnect(String message) { + disconnect(message, i -> {}); + } + + /** + * Disconnects this player from the network + * + * @param message Disconnect Message + * @param response Success status + */ + public void disconnect(String message, Callback response) { + StackTraceElement[] origin = new Exception().getStackTrace(); + client().sendPacket(new PacketDisconnectPlayer(getUniqueId(), message, data -> { + try { + response.run(data.getInt(0x0001)); + } catch (Throwable e) { + Throwable ew = new InvocationTargetException(e); + ew.setStackTrace(origin); + ew.printStackTrace(); + } + })); + } + /** * Get the Timestamp for when the data was last refreshed * diff --git a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/Packet/PacketDisconnectPlayer.java b/SubServers.Client/Common/src/net/ME1312/SubServers/Client/Common/Network/Packet/PacketDisconnectPlayer.java similarity index 96% rename from SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/Packet/PacketDisconnectPlayer.java rename to SubServers.Client/Common/src/net/ME1312/SubServers/Client/Common/Network/Packet/PacketDisconnectPlayer.java index 0a8eb798..7fe5185c 100644 --- a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/Packet/PacketDisconnectPlayer.java +++ b/SubServers.Client/Common/src/net/ME1312/SubServers/Client/Common/Network/Packet/PacketDisconnectPlayer.java @@ -1,4 +1,4 @@ -package net.ME1312.SubServers.Sync.Network.Packet; +package net.ME1312.SubServers.Client.Common.Network.Packet; import net.ME1312.Galaxi.Library.Callback.Callback; import net.ME1312.Galaxi.Library.Map.ObjectMap; diff --git a/SubServers.Client/Common/src/net/ME1312/SubServers/Client/Common/Network/Packet/PacketMessagePlayer.java b/SubServers.Client/Common/src/net/ME1312/SubServers/Client/Common/Network/Packet/PacketMessagePlayer.java new file mode 100644 index 00000000..342b2446 --- /dev/null +++ b/SubServers.Client/Common/src/net/ME1312/SubServers/Client/Common/Network/Packet/PacketMessagePlayer.java @@ -0,0 +1,65 @@ +package net.ME1312.SubServers.Client.Common.Network.Packet; + +import net.ME1312.Galaxi.Library.Callback.Callback; +import net.ME1312.Galaxi.Library.Map.ObjectMap; +import net.ME1312.Galaxi.Library.Util; +import net.ME1312.SubData.Client.Protocol.PacketObjectIn; +import net.ME1312.SubData.Client.Protocol.PacketObjectOut; +import net.ME1312.SubData.Client.SubDataSender; + +import java.util.HashMap; +import java.util.UUID; + +/** + * Message Player Packet + */ +public class PacketMessagePlayer implements PacketObjectIn, PacketObjectOut { + private static HashMap>[]> callbacks = new HashMap>[]>(); + private UUID player; + private String[] legacy, raw; + private UUID id; + + /** + * New PacketMessagePlayer (In) + */ + public PacketMessagePlayer() {} + + /** + * New PacketMessagePlayer (Out) + * + * @param player Player + * @param legacy Messages (Legacy) + * @param raw Messages (JSON) + * @param callback Callbacks + */ + @SafeVarargs + public PacketMessagePlayer(UUID player, String[] legacy, String[] raw, Callback>... callback) { + if (Util.isNull(player, callback)) throw new NullPointerException(); + this.player = player; + this.legacy = legacy; + this.raw = raw; + this.id = Util.getNew(callbacks.keySet(), UUID::randomUUID); + callbacks.put(id, callback); + } + + @Override + public ObjectMap send(SubDataSender client) { + ObjectMap data = new ObjectMap(); + data.set(0x0000, id); + data.set(0x0001, player); + if (legacy != null) data.set(0x0002, legacy); + if (raw != null) data.set(0x0003, raw); + return data; + } + + @Override + public void receive(SubDataSender client, ObjectMap data) { + for (Callback> callback : callbacks.get(data.getUUID(0x0000))) callback.run(data); + callbacks.remove(data.getUUID(0x0000)); + } + + @Override + public int version() { + return 0x0001; + } +} diff --git a/SubServers.Client/Common/src/net/ME1312/SubServers/Client/Common/Network/Packet/PacketTransferPlayer.java b/SubServers.Client/Common/src/net/ME1312/SubServers/Client/Common/Network/Packet/PacketTransferPlayer.java new file mode 100644 index 00000000..f5d1f855 --- /dev/null +++ b/SubServers.Client/Common/src/net/ME1312/SubServers/Client/Common/Network/Packet/PacketTransferPlayer.java @@ -0,0 +1,62 @@ +package net.ME1312.SubServers.Client.Common.Network.Packet; + +import net.ME1312.Galaxi.Library.Callback.Callback; +import net.ME1312.Galaxi.Library.Map.ObjectMap; +import net.ME1312.Galaxi.Library.Util; +import net.ME1312.SubData.Client.Protocol.PacketObjectIn; +import net.ME1312.SubData.Client.Protocol.PacketObjectOut; +import net.ME1312.SubData.Client.SubDataSender; + +import java.util.HashMap; +import java.util.UUID; + +/** + * Transfer Player Packet + */ +public class PacketTransferPlayer implements PacketObjectIn, PacketObjectOut { + private static HashMap>[]> callbacks = new HashMap>[]>(); + private UUID player; + private String server; + private UUID id; + + /** + * New PacketTransferPlayer (In) + */ + public PacketTransferPlayer() {} + + /** + * New PacketTransferPlayer (Out) + * + * @param player Player + * @param server Server + * @param callback Callbacks + */ + @SafeVarargs + public PacketTransferPlayer(UUID player, String server, Callback>... callback) { + if (Util.isNull(player, callback)) throw new NullPointerException(); + this.player = player; + this.server = server; + this.id = Util.getNew(callbacks.keySet(), UUID::randomUUID); + callbacks.put(id, callback); + } + + @Override + public ObjectMap send(SubDataSender client) { + ObjectMap data = new ObjectMap(); + data.set(0x0000, id); + data.set(0x0001, player); + if (server != null) data.set(0x0002, server); + return data; + } + + @Override + public void receive(SubDataSender client, ObjectMap data) { + for (Callback> callback : callbacks.get(data.getUUID(0x0000))) callback.run(data); + callbacks.remove(data.getUUID(0x0000)); + } + + @Override + public int version() { + return 0x0001; + } +} diff --git a/SubServers.Client/Sponge/pom.xml b/SubServers.Client/Sponge/pom.xml index 024243cf..685373bd 100644 --- a/SubServers.Client/Sponge/pom.xml +++ b/SubServers.Client/Sponge/pom.xml @@ -25,26 +25,11 @@ 7.0.0 provided - - net.ME1312.Galaxi - GalaxiUtil - 21w24a - compile - true - net.ME1312.SubServers SubServers.Client.Common - -PLACEHOLDER + ${project.version} compile - true - - - net.ME1312.SubData - Client - 21w08a - compile - true @@ -87,6 +72,15 @@ + + org.apache.maven.plugins + maven-jar-plugin + 3.2.0 + + SubServers.Client.Sponge + ../../Artifacts/Maven + + org.apache.maven.plugins maven-assembly-plugin @@ -124,7 +118,7 @@ SubServers.Client.Sponge Javadoc - SubServers.Client.Sponge Javadoc + SubServers.Client.Sponge ${project.version} protected ./ ${basedir}/../../Javadoc/SubServers.Client.Sponge diff --git a/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Network/SubProtocol.java b/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Network/SubProtocol.java index c511e8af..570c05dc 100644 --- a/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Network/SubProtocol.java +++ b/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/Network/SubProtocol.java @@ -79,6 +79,9 @@ public class SubProtocol extends SubDataProtocol { registerPacket(0x0037, PacketStopServer.class); registerPacket(0x0038, PacketRemoveServer.class); registerPacket(0x0039, PacketDeleteServer.class); + registerPacket(0x003B, PacketTransferPlayer.class); + registerPacket(0x003C, PacketDisconnectPlayer.class); + registerPacket(0x003D, PacketMessagePlayer.class); registerPacket(0x0030, new PacketCreateServer()); registerPacket(0x0031, new PacketAddServer()); @@ -90,9 +93,12 @@ public class SubProtocol extends SubDataProtocol { registerPacket(0x0037, new PacketStopServer()); registerPacket(0x0038, new PacketRemoveServer()); registerPacket(0x0039, new PacketDeleteServer()); + registerPacket(0x003B, new PacketTransferPlayer()); + registerPacket(0x003C, new PacketDisconnectPlayer()); + registerPacket(0x003D, new PacketMessagePlayer()); - // 70-7F: External Misc Packets + // 70-7F: External Sync Packets //registerPacket(0x0070, PacketInExRunEvent.class); //registerPacket(0x0071, PacketInExReset.class); //registerPacket(0x0072, PacketInExReload.class); diff --git a/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/SubPlugin.java b/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/SubPlugin.java index cf8cd4ae..12b97cf0 100644 --- a/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/SubPlugin.java +++ b/SubServers.Client/Sponge/src/net/ME1312/SubServers/Client/Sponge/SubPlugin.java @@ -49,7 +49,7 @@ import static net.ME1312.SubServers.Client.Sponge.Library.AccessMode.NO_COMMANDS /** * SubServers Client Plugin Class */ -@Plugin(id = "subservers-client-sponge", name = "SubServers-Client-Sponge", authors = "ME1312", version = "2.17a", url = "https://github.com/ME1312/SubServers-2", description = "Take control of the server manager — from your servers") +@Plugin(id = "subservers-client-sponge", name = "SubServers-Client-Sponge", authors = "ME1312", version = "2.17b/p1", url = "https://github.com/ME1312/SubServers-2", description = "Take control of the server manager — from your servers") public final class SubPlugin { HashMap subdata = new HashMap(); Pair>> lang = null; diff --git a/SubServers.Client/Universal/pom.xml b/SubServers.Client/Universal/pom.xml index 603e8297..0264d9f9 100644 --- a/SubServers.Client/Universal/pom.xml +++ b/SubServers.Client/Universal/pom.xml @@ -11,13 +11,13 @@ net.ME1312.SubServers SubServers.Client.Bukkit - -PLACEHOLDER + ${project.version} compile net.ME1312.SubServers SubServers.Client.Sponge - -PLACEHOLDER + ${project.version} compile diff --git a/SubServers.Console/pom.xml b/SubServers.Console/pom.xml index e597ae52..74fb8f74 100644 --- a/SubServers.Console/pom.xml +++ b/SubServers.Console/pom.xml @@ -26,7 +26,6 @@ forms_rt 7.0.3 compile - true net.md_5 @@ -37,7 +36,7 @@ net.ME1312.SubServers SubServers.Bungee - -PLACEHOLDER + ${project.version} provided diff --git a/SubServers.Console/src/bungee.yml b/SubServers.Console/src/bungee.yml index 0c19b5c7..52bb80a0 100644 --- a/SubServers.Console/src/bungee.yml +++ b/SubServers.Console/src/bungee.yml @@ -1,4 +1,4 @@ name: SubServers-Console main: net.ME1312.SubServers.Console.ConsolePlugin -version: 2.17a +version: 2.17b/p1 author: ME1312 \ No newline at end of file diff --git a/SubServers.Host/pom.xml b/SubServers.Host/pom.xml index fa08348a..62290686 100644 --- a/SubServers.Host/pom.xml +++ b/SubServers.Host/pom.xml @@ -26,42 +26,30 @@ jopt-simple 5.0.4 compile - true net.ME1312.Galaxi GalaxiEngine 21w24a compile - true net.ME1312.Galaxi GalaxiUI 21w24a runtime - true net.ME1312.SubServers SubServers.Client.Common - -PLACEHOLDER + ${project.version} compile - true - - - net.ME1312.SubData - Client - 21w08a - compile - true com.dosse.upnp WaifUPnP 1.1 compile - true @@ -120,6 +108,15 @@ + + org.apache.maven.plugins + maven-jar-plugin + 3.2.0 + + SubServers.Host + ../Artifacts/Maven + + org.apache.maven.plugins maven-assembly-plugin @@ -157,7 +154,7 @@ SubServers.Host Javadoc - SubServers.Host Javadoc + SubServers.Host ${project.version} protected ./ ${basedir}/../Javadoc/SubServers.Host diff --git a/SubServers.Host/src/net/ME1312/SubServers/Host/ExHost.java b/SubServers.Host/src/net/ME1312/SubServers/Host/ExHost.java index 7be74d9b..84772653 100644 --- a/SubServers.Host/src/net/ME1312/SubServers/Host/ExHost.java +++ b/SubServers.Host/src/net/ME1312/SubServers/Host/ExHost.java @@ -43,7 +43,7 @@ import java.util.jar.Manifest; /** * SubServers.Host Main Class */ -@App(name = "SubServers.Host", version = "2.17a", authors = "ME1312", website = "https://github.com/ME1312/SubServers-2", description = "Host subservers on separate machines") +@App(name = "SubServers.Host", version = "2.17b/p1", authors = "ME1312", website = "https://github.com/ME1312/SubServers-2", description = "Host subservers on separate machines") public final class ExHost { HashMap subdata = new HashMap(); Pair>> lang = null; diff --git a/SubServers.Host/src/net/ME1312/SubServers/Host/Network/SubProtocol.java b/SubServers.Host/src/net/ME1312/SubServers/Host/Network/SubProtocol.java index bcd968ff..1775ebe1 100644 --- a/SubServers.Host/src/net/ME1312/SubServers/Host/Network/SubProtocol.java +++ b/SubServers.Host/src/net/ME1312/SubServers/Host/Network/SubProtocol.java @@ -75,6 +75,9 @@ public class SubProtocol extends SubDataProtocol { registerPacket(0x0037, PacketStopServer.class); registerPacket(0x0038, PacketRemoveServer.class); registerPacket(0x0039, PacketDeleteServer.class); + registerPacket(0x003B, PacketTransferPlayer.class); + registerPacket(0x003C, PacketDisconnectPlayer.class); + registerPacket(0x003D, PacketMessagePlayer.class); registerPacket(0x0030, new PacketCreateServer()); registerPacket(0x0031, new PacketAddServer()); @@ -86,6 +89,9 @@ public class SubProtocol extends SubDataProtocol { registerPacket(0x0037, new PacketStopServer()); registerPacket(0x0038, new PacketRemoveServer()); registerPacket(0x0039, new PacketDeleteServer()); + registerPacket(0x003B, new PacketTransferPlayer()); + registerPacket(0x003C, new PacketDisconnectPlayer()); + registerPacket(0x003D, new PacketMessagePlayer()); // 50-6F: External Host Packets @@ -112,7 +118,7 @@ public class SubProtocol extends SubDataProtocol { registerPacket(0x0059, new PacketExDeleteServer(host)); - // 70-7F: External Misc Packets + // 70-7F: External Sync Packets //registerPacket(0x0070, PacketInExRunEvent.class); //registerPacket(0x0071, PacketInExReset.class); //registerPacket(0x0072, PacketInExReload.class); diff --git a/SubServers.Sync/pom.xml b/SubServers.Sync/pom.xml index 9784ce94..98f5207a 100644 --- a/SubServers.Sync/pom.xml +++ b/SubServers.Sync/pom.xml @@ -25,46 +25,23 @@ 1.15-SNAPSHOT provided - - net.ME1312.Galaxi - GalaxiUtil - 21w24a - compile - true - net.ME1312.SubServers SubServers.Bungee.Common - -PLACEHOLDER + ${project.version} compile - true net.ME1312.SubServers SubServers.Client.Common - -PLACEHOLDER + ${project.version} compile - true - - - net.ME1312.SubData - Client - 21w08a - compile - true com.dosse.upnp WaifUPnP 1.1 compile - true - - - com.imaginarycode.minecraft - RedisBungee - 0.3.8-SNAPSHOT - provided @@ -122,6 +99,15 @@ + + org.apache.maven.plugins + maven-jar-plugin + 3.2.0 + + SubServers.Sync + ../Artifacts/Maven + + org.apache.maven.plugins maven-assembly-plugin @@ -159,7 +145,7 @@ SubServers.Sync Javadoc - SubServers.Sync Javadoc + SubServers.Sync ${project.version} protected ./ ${basedir}/../Javadoc/SubServers.Sync diff --git a/SubServers.Sync/src/net/ME1312/SubServers/Sync/ExProxy.java b/SubServers.Sync/src/net/ME1312/SubServers/Sync/ExProxy.java index 33495bce..47a68138 100644 --- a/SubServers.Sync/src/net/ME1312/SubServers/Sync/ExProxy.java +++ b/SubServers.Sync/src/net/ME1312/SubServers/Sync/ExProxy.java @@ -17,10 +17,10 @@ import net.ME1312.SubServers.Bungee.BungeeCommon; import net.ME1312.SubServers.Bungee.Library.Compatibility.Logger; import net.ME1312.SubServers.Bungee.Library.Fallback.FallbackState; import net.ME1312.SubServers.Bungee.Library.Fallback.SmartFallback; +import net.ME1312.SubServers.Client.Common.Network.Packet.PacketDisconnectPlayer; import net.ME1312.SubServers.Sync.Event.*; import net.ME1312.SubServers.Sync.Library.ConfigUpdater; import net.ME1312.SubServers.Sync.Library.Metrics; -import net.ME1312.SubServers.Sync.Network.Packet.PacketDisconnectPlayer; import net.ME1312.SubServers.Sync.Network.Packet.PacketExSyncPlayer; import net.ME1312.SubServers.Sync.Network.SubProtocol; import net.ME1312.SubServers.Sync.Server.CachedPlayer; @@ -72,7 +72,7 @@ public final class ExProxy extends BungeeCommon implements Listener { public final Plugin plugin; public final SubAPI api = new SubAPI(this); public SubProtocol subprotocol; - public static final Version version = Version.fromString("2.17a"); + public static final Version version = Version.fromString("2.17b/p1"); public final boolean isPatched; public long lastReload = -1; diff --git a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/Packet/PacketExDisconnectPlayer.java b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/Packet/PacketExDisconnectPlayer.java index 927c8351..cc8716c1 100644 --- a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/Packet/PacketExDisconnectPlayer.java +++ b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/Packet/PacketExDisconnectPlayer.java @@ -46,9 +46,9 @@ public class PacketExDisconnectPlayer implements PacketObjectIn, Packet @Override public void receive(SubDataSender client, ObjectMap data) { - UUID tracker = (data.contains(0x0000)?data.getUUID(0x0000):null); + UUID tracker = (data.contains(0x0000)?data.getUUID(0x0000):null); try { - UUID id = data.getUUID(0x0001); + UUID id = data.getUUID(0x0001); ProxiedPlayer local; if ((local = plugin.getPlayer(id)) != null) { diff --git a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/Packet/PacketExMessagePlayer.java b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/Packet/PacketExMessagePlayer.java new file mode 100644 index 00000000..99addde6 --- /dev/null +++ b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/Packet/PacketExMessagePlayer.java @@ -0,0 +1,83 @@ +package net.ME1312.SubServers.Sync.Network.Packet; + +import net.ME1312.Galaxi.Library.Map.ObjectMap; +import net.ME1312.SubData.Client.Protocol.PacketObjectIn; +import net.ME1312.SubData.Client.Protocol.PacketObjectOut; +import net.ME1312.SubData.Client.SubDataSender; +import net.ME1312.SubServers.Sync.ExProxy; + +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.md_5.bungee.chat.ComponentSerializer; + +import java.util.Arrays; +import java.util.LinkedList; +import java.util.List; +import java.util.UUID; + +/** + * Message External Player Packet + */ +public class PacketExMessagePlayer implements PacketObjectIn, PacketObjectOut { + private ExProxy plugin; + private int response; + private UUID tracker; + + /** + * New PacketExMessagePlayer (In) + */ + public PacketExMessagePlayer(ExProxy plugin) { + this.plugin = plugin; + } + + /** + * New PacketExMessagePlayer (Out) + * + * @param response Response ID + * @param tracker Receiver ID + */ + public PacketExMessagePlayer(int response, UUID tracker) { + this.response = response; + this.tracker = tracker; + } + + @Override + public ObjectMap send(SubDataSender client) { + ObjectMap json = new ObjectMap(); + if (tracker != null) json.set(0x0000, tracker); + json.set(0x0001, response); + return json; + } + + @SuppressWarnings("deprecation") + @Override + public void receive(SubDataSender client, ObjectMap data) { + UUID tracker = (data.contains(0x0000)?data.getUUID(0x0000):null); + try { + UUID id = data.getUUID(0x0001); + + ProxiedPlayer local; + if ((local = plugin.getPlayer(id)) != null) { + if (data.contains(0x0002)) + local.sendMessages(data.getRawStringList(0x0002).toArray(new String[0])); + if (data.contains(0x0003)) { + List messages = data.getRawStringList(0x0003); + LinkedList components = new LinkedList(); + for (String message : messages) components.addAll(Arrays.asList(ComponentSerializer.parse(message))); + local.sendMessage(components.toArray(new BaseComponent[0])); + } + client.sendPacket(new PacketExMessagePlayer(0, tracker)); + } else { + client.sendPacket(new PacketExMessagePlayer(3, tracker)); + } + } catch (Throwable e) { + client.sendPacket(new PacketExMessagePlayer(2, tracker)); + e.printStackTrace(); + } + } + + @Override + public int version() { + return 0x0001; + } +} diff --git a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/Packet/PacketExTransferPlayer.java b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/Packet/PacketExTransferPlayer.java new file mode 100644 index 00000000..afdf5934 --- /dev/null +++ b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/Packet/PacketExTransferPlayer.java @@ -0,0 +1,82 @@ +package net.ME1312.SubServers.Sync.Network.Packet; + +import net.ME1312.Galaxi.Library.Map.ObjectMap; +import net.ME1312.SubData.Client.Protocol.PacketObjectIn; +import net.ME1312.SubData.Client.Protocol.PacketObjectOut; +import net.ME1312.SubData.Client.SubDataSender; +import net.ME1312.SubServers.Sync.ExProxy; +import net.ME1312.SubServers.Sync.Server.ServerImpl; + +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.md_5.bungee.chat.ComponentSerializer; + +import java.util.Arrays; +import java.util.LinkedList; +import java.util.List; +import java.util.UUID; + +/** + * Transfer External Player Packet + */ +public class PacketExTransferPlayer implements PacketObjectIn, PacketObjectOut { + private ExProxy plugin; + private int response; + private UUID tracker; + + /** + * New PacketExTransferPlayer (In) + */ + public PacketExTransferPlayer(ExProxy plugin) { + this.plugin = plugin; + } + + /** + * New PacketExTransferPlayer (Out) + * + * @param response Response ID + * @param tracker Receiver ID + */ + public PacketExTransferPlayer(int response, UUID tracker) { + this.response = response; + this.tracker = tracker; + } + + @Override + public ObjectMap send(SubDataSender client) { + ObjectMap json = new ObjectMap(); + if (tracker != null) json.set(0x0000, tracker); + json.set(0x0001, response); + return json; + } + + @SuppressWarnings("deprecation") + @Override + public void receive(SubDataSender client, ObjectMap data) { + UUID tracker = (data.contains(0x0000)?data.getUUID(0x0000):null); + try { + UUID id = data.getUUID(0x0001); + + ProxiedPlayer local; + if ((local = plugin.getPlayer(id)) != null) { + ServerImpl server; + if (data.contains(0x0002) && (server = plugin.servers.get(data.getRawString(0x0002).toLowerCase())) != null) { + local.connect(server); + client.sendPacket(new PacketExTransferPlayer(0, tracker)); + } else { + client.sendPacket(new PacketExTransferPlayer(1, tracker)); + } + } else { + client.sendPacket(new PacketExTransferPlayer(3, tracker)); + } + } catch (Throwable e) { + client.sendPacket(new PacketExTransferPlayer(2, tracker)); + e.printStackTrace(); + } + } + + @Override + public int version() { + return 0x0001; + } +} diff --git a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/SubProtocol.java b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/SubProtocol.java index 984d16eb..00c9f646 100644 --- a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/SubProtocol.java +++ b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/SubProtocol.java @@ -83,7 +83,9 @@ public class SubProtocol extends SubDataProtocol { registerPacket(0x0037, PacketStopServer.class); registerPacket(0x0038, PacketRemoveServer.class); registerPacket(0x0039, PacketDeleteServer.class); + registerPacket(0x003B, PacketTransferPlayer.class); registerPacket(0x003C, PacketDisconnectPlayer.class); + registerPacket(0x003D, PacketMessagePlayer.class); registerPacket(0x0030, new PacketCreateServer()); registerPacket(0x0031, new PacketAddServer()); @@ -95,21 +97,27 @@ public class SubProtocol extends SubDataProtocol { registerPacket(0x0037, new PacketStopServer()); registerPacket(0x0038, new PacketRemoveServer()); registerPacket(0x0039, new PacketDeleteServer()); + registerPacket(0x003B, new PacketTransferPlayer()); registerPacket(0x003C, new PacketDisconnectPlayer()); + registerPacket(0x003D, new PacketMessagePlayer()); - // 70-7F: External Misc Packets + // 70-7F: External Sync Packets //registerPacket(0x0070, PacketInExRunEvent.class); //registerPacket(0x0071, PacketInExReset.class); //registerPacket(0x0073, PacketInExReload.class); registerPacket(0x0074, PacketExSyncPlayer.class); + registerPacket(0x0075, PacketExTransferPlayer.class); registerPacket(0x0076, PacketExDisconnectPlayer.class); + registerPacket(0x0077, PacketExMessagePlayer.class); registerPacket(0x0070, new PacketInExRunEvent(plugin)); registerPacket(0x0071, new PacketInExReset()); registerPacket(0x0073, new PacketInExUpdateWhitelist(plugin)); registerPacket(0x0074, new PacketExSyncPlayer(plugin)); + registerPacket(0x0075, new PacketExTransferPlayer(plugin)); registerPacket(0x0076, new PacketExDisconnectPlayer(plugin)); + registerPacket(0x0077, new PacketExMessagePlayer(plugin)); } public static SubProtocol get() { @@ -190,7 +198,7 @@ public class SubProtocol extends SubDataProtocol { plugin.api.getRemotePlayers(players -> { for (RemotePlayer player : players.values()) { plugin.rPlayerLinkP.put(player.getUniqueId(), player.getProxyName().toLowerCase()); - plugin.rPlayers.put(player.getUniqueId(), new CachedPlayer(player)); + plugin.rPlayers.put(player.getUniqueId(), (CachedPlayer) player); ServerInfo server = plugin.getServerInfo(player.getServerName()); if (server instanceof ServerImpl) diff --git a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Server/CachedPlayer.java b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Server/CachedPlayer.java index c5146692..bcfcac7f 100644 --- a/SubServers.Sync/src/net/ME1312/SubServers/Sync/Server/CachedPlayer.java +++ b/SubServers.Sync/src/net/ME1312/SubServers/Sync/Server/CachedPlayer.java @@ -1,12 +1,20 @@ package net.ME1312.SubServers.Sync.Server; +import net.ME1312.Galaxi.Library.Callback.Callback; import net.ME1312.Galaxi.Library.Map.ObjectMap; import net.ME1312.SubServers.Client.Common.Network.API.RemotePlayer; +import net.ME1312.SubServers.Client.Common.Network.API.Server; import net.ME1312.SubServers.Sync.SubAPI; import net.md_5.bungee.api.ProxyServer; +import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.config.ServerInfo; import net.md_5.bungee.api.connection.ProxiedPlayer; +import net.md_5.bungee.chat.ComponentSerializer; + +import java.util.Arrays; +import java.util.LinkedList; +import java.util.List; /** * Cached RemotePlayer Data Class @@ -57,9 +65,89 @@ public class CachedPlayer extends RemotePlayer implements net.ME1312.SubServers. super(raw); } + @Override + public ProxiedPlayer get() { + return ProxyServer.getInstance().getPlayer(getUniqueId()); + } + @Override public ServerInfo getServer() { String name = getServerName(); return (name == null)? null : ProxyServer.getInstance().getServerInfo(name); } + + // These overrides prevent sending unnecessary packets + + @Override + public void sendMessage(String[] messages, Callback response) { + ProxiedPlayer local = get(); + if (local != null) { + local.sendMessages(messages); + response.run(0); + } else { + super.sendMessage(messages, response); + } + } + + @Override + public void sendMessage(BaseComponent[] messages, Callback response) { + ProxiedPlayer local = get(); + if (local != null) { + local.sendMessage(messages); + response.run(0); + } else { + super.sendRawMessage(new String[]{ComponentSerializer.toString(messages)}, response); + } + } + + @Override + public void sendRawMessage(String[] messages, Callback response) { + ProxiedPlayer local = get(); + if (local != null) { + LinkedList components = new LinkedList(); + for (String message : messages) components.addAll(Arrays.asList(ComponentSerializer.parse(message))); + local.sendMessage(components.toArray(new BaseComponent[0])); + response.run(0); + } else { + super.sendRawMessage(messages, response); + } + } + + @Override + public void transfer(String server, Callback response) { + ProxiedPlayer local = get(); + if (local != null) { + ServerImpl info = SubAPI.getInstance().getInternals().servers.get(server.toLowerCase()); + if (info != null) { + local.connect(info); + response.run(0); + } else response.run(1); + } else { + super.transfer(server, response); + } + } + + @Override + public void transfer(ServerInfo server, Callback response) { + ProxiedPlayer local = get(); + if (local != null) { + local.connect(server); + response.run(0); + } else { + super.transfer(server.getName(), response); + } + } + + @Override + public void disconnect(String message, Callback response) { + ProxiedPlayer local = get(); + if (local != null) { + if (message != null) { + local.disconnect(message); + } else local.disconnect(); + response.run(0); + } else { + super.disconnect(message, response); + } + } } diff --git a/SubServers.Sync/src/net/ME1312/SubServers/Sync/SubAPI.java b/SubServers.Sync/src/net/ME1312/SubServers/Sync/SubAPI.java index efb5bee3..a73c007a 100644 --- a/SubServers.Sync/src/net/ME1312/SubServers/Sync/SubAPI.java +++ b/SubServers.Sync/src/net/ME1312/SubServers/Sync/SubAPI.java @@ -1,5 +1,6 @@ package net.ME1312.SubServers.Sync; +import net.ME1312.Galaxi.Library.Callback.Callback; import net.ME1312.Galaxi.Library.UniversalFile; import net.ME1312.Galaxi.Library.Util; import net.ME1312.Galaxi.Library.Version.Version; @@ -8,6 +9,7 @@ import net.ME1312.SubData.Client.DataProtocol; import net.ME1312.SubData.Client.SubDataClient; import net.ME1312.SubServers.Bungee.BungeeAPI; import net.ME1312.SubServers.Client.Common.ClientAPI; +import net.ME1312.SubServers.Client.Common.Network.API.RemotePlayer; import net.ME1312.SubServers.Sync.Server.CachedPlayer; import net.ME1312.SubServers.Sync.Server.ServerImpl; @@ -94,6 +96,14 @@ public final class SubAPI extends ClientAPI implements BungeeAPI { return new HashMap(plugin.rPlayers); } + @Override + public void getRemotePlayers(Callback> callback) { + super.getRemotePlayers(map -> { + map.replaceAll((k, v) -> new CachedPlayer(v)); + callback.run(map); + }); + } + /** * Gets a player on this network by searching across all known proxies (Cached) * @@ -108,6 +118,11 @@ public final class SubAPI extends ClientAPI implements BungeeAPI { return null; } + @Override + public void getRemotePlayer(String name, Callback callback) { + super.getRemotePlayer(name, p -> callback.run(new CachedPlayer(p))); + } + /** * Gets a player on this network by searching across all known proxies (Cached) * @@ -119,6 +134,11 @@ public final class SubAPI extends ClientAPI implements BungeeAPI { return getRemotePlayers().getOrDefault(id, null); } + @Override + public void getRemotePlayer(UUID id, Callback callback) { + super.getRemotePlayer(id, p -> callback.run(new CachedPlayer(p))); + } + /** * Gets the SubData Network Connections *