mirror of
https://github.com/ME1312/SubServers-2.git
synced 2025-02-16 19:51:26 +01:00
Allow targeting multiple RemotePlayers
This commit is contained in:
parent
517074f2b3
commit
7d6396ec1c
@ -12,10 +12,12 @@ import java.util.Map;
|
|||||||
* BungeeCord Common Layout Class
|
* BungeeCord Common Layout Class
|
||||||
*/
|
*/
|
||||||
public abstract class BungeeCommon extends BungeeCord {
|
public abstract class BungeeCommon extends BungeeCord {
|
||||||
|
private static BungeeCommon instance;
|
||||||
final ReturnRunnable<BungeeAPI> api;
|
final ReturnRunnable<BungeeAPI> api;
|
||||||
|
|
||||||
protected BungeeCommon(ReturnRunnable<BungeeAPI> api) throws IOException {
|
protected BungeeCommon(ReturnRunnable<BungeeAPI> api) throws IOException {
|
||||||
this.api = api;
|
this.api = api;
|
||||||
|
instance = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -31,4 +33,13 @@ public abstract class BungeeCommon extends BungeeCord {
|
|||||||
* @return Server Map Copy
|
* @return Server Map Copy
|
||||||
*/
|
*/
|
||||||
public abstract Map<String, ServerInfo> getServersCopy();
|
public abstract Map<String, ServerInfo> getServersCopy();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the ProxyServer Common Object
|
||||||
|
*
|
||||||
|
* @return ProxyServer Common
|
||||||
|
*/
|
||||||
|
public static BungeeCommon getInstance() {
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,53 @@
|
|||||||
|
package net.ME1312.SubServers.Bungee.Library.Compatibility;
|
||||||
|
|
||||||
|
import net.ME1312.Galaxi.Library.Callback.Callback;
|
||||||
|
|
||||||
|
import net.md_5.bungee.api.chat.BaseComponent;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* RemotePlayer Static Implementation Layout Class
|
||||||
|
*/
|
||||||
|
public abstract class RPSI {
|
||||||
|
protected static RPSI instance;
|
||||||
|
protected RPSI() {
|
||||||
|
if (instance == null) instance = this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends messages to this player
|
||||||
|
*
|
||||||
|
* @param players Players to send to
|
||||||
|
* @param messages Messages to send
|
||||||
|
* @param response Success Status
|
||||||
|
*/
|
||||||
|
protected abstract void sendMessage(UUID[] players, String[] messages, Callback<Integer> response);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends messages to this player
|
||||||
|
*
|
||||||
|
* @param players Players to send to
|
||||||
|
* @param messages Messages to send
|
||||||
|
* @param response Success Status
|
||||||
|
*/
|
||||||
|
protected abstract void sendMessage(UUID[] players, BaseComponent[] messages, Callback<Integer> response);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Transfers this player to another server
|
||||||
|
*
|
||||||
|
* @param players Players to send to
|
||||||
|
* @param server Target server
|
||||||
|
* @param response Success Status
|
||||||
|
*/
|
||||||
|
protected abstract void transfer(UUID[] players, String server, Callback<Integer> response);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disconnects this player from the network
|
||||||
|
*
|
||||||
|
* @param players Players to send to
|
||||||
|
* @param reason Disconnect Reason
|
||||||
|
* @param response Success status
|
||||||
|
*/
|
||||||
|
protected abstract void disconnect(UUID[] players, String reason, Callback<Integer> response);
|
||||||
|
}
|
@ -3,15 +3,14 @@ package net.ME1312.SubServers.Bungee.Library.Compatibility;
|
|||||||
import net.ME1312.Galaxi.Library.Callback.Callback;
|
import net.ME1312.Galaxi.Library.Callback.Callback;
|
||||||
|
|
||||||
import net.md_5.bungee.api.chat.BaseComponent;
|
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.config.ServerInfo;
|
||||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||||
|
|
||||||
import java.net.InetSocketAddress;
|
import java.net.InetSocketAddress;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import static net.ME1312.SubServers.Bungee.Library.Compatibility.RPSI.instance;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* RemotePlayer Layout Class
|
* RemotePlayer Layout Class
|
||||||
*/
|
*/
|
||||||
@ -66,6 +65,35 @@ public interface RemotePlayer {
|
|||||||
*/
|
*/
|
||||||
ServerInfo getServer();
|
ServerInfo getServer();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends messages to all players
|
||||||
|
*
|
||||||
|
* @param messages Messages to send
|
||||||
|
*/
|
||||||
|
static void broadcastMessage(String... messages) {
|
||||||
|
broadcastMessage(messages, i -> {});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends messages to all players
|
||||||
|
*
|
||||||
|
* @param message Message to send
|
||||||
|
* @param response Success Status
|
||||||
|
*/
|
||||||
|
static void broadcastMessage(String message, Callback<Integer> response) {
|
||||||
|
broadcastMessage(new String[]{ message }, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends messages to all players
|
||||||
|
*
|
||||||
|
* @param messages Messages to send
|
||||||
|
* @param response Success Status
|
||||||
|
*/
|
||||||
|
static void broadcastMessage(String[] messages, Callback<Integer> response) {
|
||||||
|
sendMessage(null, messages, response);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sends messages to this player
|
* Sends messages to this player
|
||||||
*
|
*
|
||||||
@ -91,7 +119,67 @@ public interface RemotePlayer {
|
|||||||
* @param messages Messages to send
|
* @param messages Messages to send
|
||||||
* @param response Success Status
|
* @param response Success Status
|
||||||
*/
|
*/
|
||||||
void sendMessage(String[] messages, Callback<Integer> response);
|
default void sendMessage(String[] messages, Callback<Integer> response) {
|
||||||
|
sendMessage(new UUID[]{ getUniqueId() }, messages, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends messages to this player
|
||||||
|
*
|
||||||
|
* @param messages Messages to send
|
||||||
|
*/
|
||||||
|
static void sendMessage(UUID[] players, String... messages) {
|
||||||
|
sendMessage(players, messages, i -> {});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends messages to this player
|
||||||
|
*
|
||||||
|
* @param message Message to send
|
||||||
|
* @param response Success Status
|
||||||
|
*/
|
||||||
|
static void sendMessage(UUID[] players, String message, Callback<Integer> response) {
|
||||||
|
sendMessage(players, new String[]{ message }, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends messages to this player
|
||||||
|
*
|
||||||
|
* @param messages Messages to send
|
||||||
|
* @param response Success Status
|
||||||
|
*/
|
||||||
|
static void sendMessage(UUID[] players, String[] messages, Callback<Integer> response) {
|
||||||
|
instance.sendMessage(players, messages, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends messages to all players
|
||||||
|
*
|
||||||
|
* @param messages Messages to send
|
||||||
|
*/
|
||||||
|
static void broadcastMessage(BaseComponent... messages) {
|
||||||
|
broadcastMessage(messages, i -> {});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends messages to all players
|
||||||
|
*
|
||||||
|
* @param message Message to send
|
||||||
|
* @param response Success Status
|
||||||
|
*/
|
||||||
|
static void broadcastMessage(BaseComponent message, Callback<Integer> response) {
|
||||||
|
broadcastMessage(new BaseComponent[]{ message }, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends messages to all players
|
||||||
|
*
|
||||||
|
* @param messages Messages to send
|
||||||
|
* @param response Success Status
|
||||||
|
*/
|
||||||
|
static void broadcastMessage(BaseComponent[] messages, Callback<Integer> response) {
|
||||||
|
sendMessage(null, messages, response);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sends messages to this player
|
* Sends messages to this player
|
||||||
@ -118,7 +206,41 @@ public interface RemotePlayer {
|
|||||||
* @param messages Messages to send
|
* @param messages Messages to send
|
||||||
* @param response Success Status
|
* @param response Success Status
|
||||||
*/
|
*/
|
||||||
void sendMessage(BaseComponent[] messages, Callback<Integer> response);
|
default void sendMessage(BaseComponent[] messages, Callback<Integer> response) {
|
||||||
|
sendMessage(new UUID[]{ getUniqueId() }, messages, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends messages to this player
|
||||||
|
*
|
||||||
|
* @param players Players to select
|
||||||
|
* @param messages Messages to send
|
||||||
|
*/
|
||||||
|
static void sendMessage(UUID[] players, BaseComponent... messages) {
|
||||||
|
sendMessage(players, messages, i -> {});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends messages to this player
|
||||||
|
*
|
||||||
|
* @param players Players to select
|
||||||
|
* @param message Message to send
|
||||||
|
* @param response Success Status
|
||||||
|
*/
|
||||||
|
static void sendMessage(UUID[] players, BaseComponent message, Callback<Integer> response) {
|
||||||
|
sendMessage(players, new BaseComponent[]{ message }, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends messages to this player
|
||||||
|
*
|
||||||
|
* @param players Players to select
|
||||||
|
* @param message Message to send
|
||||||
|
* @param response Success Status
|
||||||
|
*/
|
||||||
|
static void sendMessage(UUID[] players, BaseComponent[] message, Callback<Integer> response) {
|
||||||
|
instance.sendMessage(players, message, response);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Transfers this player to another server
|
* Transfers this player to another server
|
||||||
@ -135,7 +257,30 @@ public interface RemotePlayer {
|
|||||||
* @param server Target server
|
* @param server Target server
|
||||||
* @param response Success status
|
* @param response Success status
|
||||||
*/
|
*/
|
||||||
void transfer(String server, Callback<Integer> response);
|
default void transfer(String server, Callback<Integer> response) {
|
||||||
|
transfer(new UUID[]{ getUniqueId() }, server, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Transfers this player to another server
|
||||||
|
*
|
||||||
|
* @param players Players to select
|
||||||
|
* @param server Target server
|
||||||
|
*/
|
||||||
|
static void transfer(UUID[] players, String server) {
|
||||||
|
transfer(players, server, i -> {});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Transfers this player to another server
|
||||||
|
*
|
||||||
|
* @param players Players to select
|
||||||
|
* @param server Target server
|
||||||
|
* @param response Success status
|
||||||
|
*/
|
||||||
|
static void transfer(UUID[] players, String server, Callback<Integer> response) {
|
||||||
|
instance.transfer(players, server, response);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Transfers this player to another server
|
* Transfers this player to another server
|
||||||
@ -152,13 +297,36 @@ public interface RemotePlayer {
|
|||||||
* @param server Target server
|
* @param server Target server
|
||||||
* @param response Success status
|
* @param response Success status
|
||||||
*/
|
*/
|
||||||
void transfer(ServerInfo server, Callback<Integer> response);
|
default void transfer(ServerInfo server, Callback<Integer> response) {
|
||||||
|
transfer(new UUID[]{ getUniqueId() }, server, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Transfers this player to another server
|
||||||
|
*
|
||||||
|
* @param players Players to select
|
||||||
|
* @param server Target server
|
||||||
|
*/
|
||||||
|
static void transfer(UUID[] players, ServerInfo server) {
|
||||||
|
transfer(players, server, i -> {});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Transfers this player to another server
|
||||||
|
*
|
||||||
|
* @param players Players to select
|
||||||
|
* @param server Target server
|
||||||
|
* @param response Success status
|
||||||
|
*/
|
||||||
|
static void transfer(UUID[] players, ServerInfo server, Callback<Integer> response) {
|
||||||
|
instance.transfer(players, server.getName(), response);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Disconnects this player from the network
|
* Disconnects this player from the network
|
||||||
*/
|
*/
|
||||||
default void disconnect() {
|
default void disconnect() {
|
||||||
disconnect(i -> {});
|
disconnect((String) null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -167,7 +335,7 @@ public interface RemotePlayer {
|
|||||||
* @param response Success status
|
* @param response Success status
|
||||||
*/
|
*/
|
||||||
default void disconnect(Callback<Integer> response) {
|
default void disconnect(Callback<Integer> response) {
|
||||||
disconnect(null, response);
|
disconnect((String) null, response);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -185,5 +353,47 @@ public interface RemotePlayer {
|
|||||||
* @param reason Disconnect Reason
|
* @param reason Disconnect Reason
|
||||||
* @param response Success status
|
* @param response Success status
|
||||||
*/
|
*/
|
||||||
void disconnect(String reason, Callback<Integer> response);
|
default void disconnect(String reason, Callback<Integer> response) {
|
||||||
|
disconnect(new UUID[]{ getUniqueId() }, reason, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disconnects this player from the network
|
||||||
|
*
|
||||||
|
* @param players Players to select
|
||||||
|
*/
|
||||||
|
static void disconnect(UUID... players) {
|
||||||
|
disconnect(players, (String) null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disconnects this player from the network
|
||||||
|
*
|
||||||
|
* @param players Players to select
|
||||||
|
* @param response Success status
|
||||||
|
*/
|
||||||
|
static void disconnect(UUID[] players, Callback<Integer> response) {
|
||||||
|
disconnect(players, null, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disconnects this player from the network
|
||||||
|
*
|
||||||
|
* @param players Players to select
|
||||||
|
* @param reason Disconnect Reason
|
||||||
|
*/
|
||||||
|
static void disconnect(UUID[] players, String reason) {
|
||||||
|
disconnect(players, reason, i -> {});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disconnects this player from the network
|
||||||
|
*
|
||||||
|
* @param players Players to select
|
||||||
|
* @param reason Disconnect Reason
|
||||||
|
* @param response Success status
|
||||||
|
*/
|
||||||
|
static void disconnect(UUID[] players, String reason, Callback<Integer> response) {
|
||||||
|
instance.disconnect(players, reason, response);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -160,8 +160,8 @@ public class ExternalHost extends Host implements ClientHandler {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SubServer getSubServer(String name) {
|
public SubServer getSubServer(String name) {
|
||||||
if (Util.isNull(name)) throw new NullPointerException();
|
if (Util.isNull(name)) return null;
|
||||||
return getSubServers().get(name.toLowerCase());
|
return servers.get(name.toLowerCase());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -94,8 +94,8 @@ public class InternalHost extends Host {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SubServer getSubServer(String name) {
|
public SubServer getSubServer(String name) {
|
||||||
if (Util.isNull(name)) throw new NullPointerException();
|
if (Util.isNull(name)) return null;
|
||||||
return getSubServers().get(name.toLowerCase());
|
return servers.get(name.toLowerCase());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1,15 +1,16 @@
|
|||||||
package net.ME1312.SubServers.Bungee.Host;
|
package net.ME1312.SubServers.Bungee.Host;
|
||||||
|
|
||||||
import net.ME1312.Galaxi.Library.Callback.Callback;
|
import net.ME1312.Galaxi.Library.Callback.Callback;
|
||||||
|
import net.ME1312.Galaxi.Library.Container.ContainedPair;
|
||||||
import net.ME1312.Galaxi.Library.Map.ObjectMap;
|
import net.ME1312.Galaxi.Library.Map.ObjectMap;
|
||||||
import net.ME1312.Galaxi.Library.Util;
|
import net.ME1312.Galaxi.Library.Util;
|
||||||
import net.ME1312.SubData.Server.SubDataClient;
|
import net.ME1312.SubData.Server.SubDataClient;
|
||||||
import net.ME1312.SubData.Server.SubDataSerializable;
|
import net.ME1312.SubData.Server.SubDataSerializable;
|
||||||
import net.ME1312.SubServers.Bungee.Network.Packet.PacketExDisconnectPlayer;
|
import net.ME1312.SubServers.Bungee.Library.Compatibility.RPSI;
|
||||||
import net.ME1312.SubServers.Bungee.Network.Packet.PacketExMessagePlayer;
|
import net.ME1312.SubServers.Bungee.Network.Packet.*;
|
||||||
import net.ME1312.SubServers.Bungee.Network.Packet.PacketExTransferPlayer;
|
|
||||||
import net.ME1312.SubServers.Bungee.SubAPI;
|
import net.ME1312.SubServers.Bungee.SubAPI;
|
||||||
|
|
||||||
|
import net.md_5.bungee.api.ProxyServer;
|
||||||
import net.md_5.bungee.api.chat.BaseComponent;
|
import net.md_5.bungee.api.chat.BaseComponent;
|
||||||
import net.md_5.bungee.api.config.ServerInfo;
|
import net.md_5.bungee.api.config.ServerInfo;
|
||||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||||
@ -17,6 +18,7 @@ import net.md_5.bungee.chat.ComponentSerializer;
|
|||||||
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.net.InetSocketAddress;
|
import java.net.InetSocketAddress;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
@ -78,6 +80,10 @@ public class RemotePlayer implements net.ME1312.SubServers.Bungee.Library.Compat
|
|||||||
return local;
|
return local;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static ProxiedPlayer get(UUID player) {
|
||||||
|
return ProxyServer.getInstance().getPlayer(player);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UUID getUniqueId() {
|
public UUID getUniqueId() {
|
||||||
if (local != null) {
|
if (local != null) {
|
||||||
@ -133,119 +139,29 @@ public class RemotePlayer implements net.ME1312.SubServers.Bungee.Library.Compat
|
|||||||
return (server == null)? null : server.getName();
|
return (server == null)? null : server.getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static {
|
||||||
|
// These overrides provide for the static methods in BungeeCommon
|
||||||
|
new RPSI() {
|
||||||
@Override
|
@Override
|
||||||
public void sendMessage(String[] messages, Callback<Integer> response) {
|
protected void sendMessage(UUID[] players, String[] messages, Callback<Integer> response) {
|
||||||
if (local != null) {
|
PacketMessagePlayer.run(Arrays.asList(players), new ContainedPair<>(messages, null), null, response);
|
||||||
local.sendMessages(messages);
|
|
||||||
response.run(0);
|
|
||||||
} else {
|
|
||||||
SubDataClient client = getProxyConnection();
|
|
||||||
if (client != null) {
|
|
||||||
StackTraceElement[] origin = new Exception().getStackTrace();
|
|
||||||
client.sendPacket(new PacketExMessagePlayer(getUniqueId(), Arrays.asList(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
|
@Override
|
||||||
public void sendMessage(BaseComponent[] messages, Callback<Integer> response) {
|
protected void sendMessage(UUID[] players, BaseComponent[] messages, Callback<Integer> response) {
|
||||||
if (local != null) {
|
PacketMessagePlayer.run(Arrays.asList(players), new ContainedPair<>(null, messages), null, response);
|
||||||
local.sendMessage(messages);
|
|
||||||
response.run(0);
|
|
||||||
} else {
|
|
||||||
SubDataClient client = getProxyConnection();
|
|
||||||
if (client != null) {
|
|
||||||
StackTraceElement[] origin = new Exception().getStackTrace();
|
|
||||||
client.sendPacket(new PacketExMessagePlayer(getUniqueId(), null, Collections.singletonList(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
|
@Override
|
||||||
public void transfer(String server, Callback<Integer> response) {
|
protected void transfer(UUID[] players, String server, Callback<Integer> response) {
|
||||||
if (local != null) {
|
PacketTransferPlayer.run(Arrays.asList(players), server, response);
|
||||||
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
|
@Override
|
||||||
public void transfer(ServerInfo server, Callback<Integer> response) {
|
protected void disconnect(UUID[] players, String reason, Callback<Integer> response) {
|
||||||
if (local != null) {
|
PacketDisconnectPlayer.run(Arrays.asList(players), reason, response);
|
||||||
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 reason, Callback<Integer> response) {
|
|
||||||
if (local != null) {
|
|
||||||
if (reason != null) {
|
|
||||||
local.disconnect(reason);
|
|
||||||
} else local.disconnect();
|
|
||||||
response.run(0);
|
|
||||||
} else {
|
|
||||||
SubDataClient client = getProxyConnection();
|
|
||||||
if (client != null) {
|
|
||||||
StackTraceElement[] origin = new Exception().getStackTrace();
|
|
||||||
client.sendPacket(new PacketExDisconnectPlayer(getUniqueId(), reason, 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
|
@Override
|
||||||
|
@ -1,33 +1,34 @@
|
|||||||
package net.ME1312.SubServers.Bungee.Network.Packet;
|
package net.ME1312.SubServers.Bungee.Network.Packet;
|
||||||
|
|
||||||
|
import net.ME1312.Galaxi.Library.AsyncConsolidator;
|
||||||
|
import net.ME1312.Galaxi.Library.Callback.Callback;
|
||||||
|
import net.ME1312.Galaxi.Library.Container.Container;
|
||||||
import net.ME1312.Galaxi.Library.Map.ObjectMap;
|
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.PacketObjectIn;
|
||||||
import net.ME1312.SubData.Server.Protocol.PacketObjectOut;
|
import net.ME1312.SubData.Server.Protocol.PacketObjectOut;
|
||||||
import net.ME1312.SubData.Server.SubDataClient;
|
import net.ME1312.SubData.Server.SubDataClient;
|
||||||
|
import net.ME1312.SubServers.Bungee.Host.Proxy;
|
||||||
import net.ME1312.SubServers.Bungee.Host.RemotePlayer;
|
import net.ME1312.SubServers.Bungee.Host.RemotePlayer;
|
||||||
import net.ME1312.SubServers.Bungee.SubProxy;
|
import net.ME1312.SubServers.Bungee.Host.Server;
|
||||||
|
import net.ME1312.SubServers.Bungee.SubAPI;
|
||||||
|
|
||||||
|
import net.md_5.bungee.api.ProxyServer;
|
||||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Disconnect Player Packet
|
* Disconnect Player Packet
|
||||||
*/
|
*/
|
||||||
public class PacketDisconnectPlayer implements PacketObjectIn<Integer>, PacketObjectOut<Integer> {
|
public class PacketDisconnectPlayer implements PacketObjectIn<Integer>, PacketObjectOut<Integer> {
|
||||||
private SubProxy plugin;
|
|
||||||
private int response;
|
private int response;
|
||||||
private UUID tracker;
|
private UUID tracker;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* New PacketDisconnectPlayer (In)
|
* New PacketDisconnectPlayer (In)
|
||||||
*
|
|
||||||
* @param plugin SubPlugin
|
|
||||||
*/
|
*/
|
||||||
public PacketDisconnectPlayer(SubProxy plugin) {
|
public PacketDisconnectPlayer() {
|
||||||
if (Util.isNull(plugin)) throw new NullPointerException();
|
|
||||||
this.plugin = plugin;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -52,32 +53,50 @@ public class PacketDisconnectPlayer implements PacketObjectIn<Integer>, PacketOb
|
|||||||
@Override
|
@Override
|
||||||
public void receive(SubDataClient client, ObjectMap<Integer> data) {
|
public void receive(SubDataClient client, ObjectMap<Integer> data) {
|
||||||
UUID tracker = (data.contains(0x0000)?data.getUUID(0x0000):null);
|
UUID tracker = (data.contains(0x0000)?data.getUUID(0x0000):null);
|
||||||
try {
|
run(data.getUUIDList(0x0001), data.contains(0x0002)?data.getRawString(0x0002):null, i -> {
|
||||||
UUID id = data.getUUID(0x0001);
|
client.sendPacket(new PacketDisconnectPlayer(i, tracker));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
public static void run(List<UUID> ids, String reason, Callback<Integer> callback) {
|
||||||
|
try {
|
||||||
|
Container<Integer> failures = new Container<>(0);
|
||||||
|
HashMap<Proxy, List<UUID>> requests = new HashMap<Proxy, List<UUID>>();
|
||||||
|
for (UUID id : ids) {
|
||||||
ProxiedPlayer local;
|
ProxiedPlayer local;
|
||||||
RemotePlayer remote;
|
RemotePlayer remote;
|
||||||
if ((local = plugin.getPlayer(id)) != null) {
|
if ((local = ProxyServer.getInstance().getPlayer(id)) != null) {
|
||||||
if (data.contains(0x0002)) {
|
if (reason != null) {
|
||||||
local.disconnect(data.getRawString(0x0002));
|
local.disconnect(reason);
|
||||||
|
} else local.disconnect();
|
||||||
|
} else if ((remote = SubAPI.getInstance().getRemotePlayer(id)) != null && remote.getProxy().getSubData()[0] != null) {
|
||||||
|
Proxy proxy = remote.getProxy();
|
||||||
|
List<UUID> list = requests.getOrDefault(proxy, new ArrayList<>());
|
||||||
|
list.add(id);
|
||||||
|
requests.put(proxy, list);
|
||||||
} else {
|
} else {
|
||||||
local.disconnect();
|
++failures.value;
|
||||||
}
|
}
|
||||||
client.sendPacket(new PacketDisconnectPlayer(0, tracker));
|
}
|
||||||
} else if ((remote = plugin.api.getRemotePlayer(id)) != null) {
|
|
||||||
if (remote.getProxy().getSubData()[0] != null) {
|
if (requests.size() == 0) {
|
||||||
((SubDataClient) remote.getProxy().getSubData()[0]).sendPacket(new PacketExDisconnectPlayer(remote.getUniqueId(), (data.contains(0x0002)?data.getRawString(0x0002):null), r -> {
|
callback.run(failures.value);
|
||||||
client.sendPacket(new PacketDisconnectPlayer(r.getInt(0x0001), tracker));
|
} else {
|
||||||
|
AsyncConsolidator merge = new AsyncConsolidator(() -> {
|
||||||
|
callback.run(failures.value);
|
||||||
|
});
|
||||||
|
for (Map.Entry<Proxy, List<UUID>> entry : requests.entrySet()) {
|
||||||
|
merge.reserve();
|
||||||
|
((SubDataClient) entry.getKey().getSubData()[0]).sendPacket(new PacketExDisconnectPlayer(entry.getValue(), reason, r -> {
|
||||||
|
failures.value += r.getInt(0x0001);
|
||||||
|
merge.release();
|
||||||
}));
|
}));
|
||||||
} else {
|
|
||||||
client.sendPacket(new PacketDisconnectPlayer(4, tracker));
|
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
client.sendPacket(new PacketDisconnectPlayer(3, tracker));
|
|
||||||
}
|
}
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
client.sendPacket(new PacketDisconnectPlayer(2, tracker));
|
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
callback.run(-1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,6 +8,7 @@ import net.ME1312.SubData.Server.Protocol.PacketObjectOut;
|
|||||||
import net.ME1312.SubData.Server.SubDataClient;
|
import net.ME1312.SubData.Server.SubDataClient;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -15,7 +16,7 @@ import java.util.UUID;
|
|||||||
*/
|
*/
|
||||||
public class PacketExDisconnectPlayer implements PacketObjectIn<Integer>, PacketObjectOut<Integer> {
|
public class PacketExDisconnectPlayer implements PacketObjectIn<Integer>, PacketObjectOut<Integer> {
|
||||||
private static HashMap<UUID, Callback<ObjectMap<Integer>>[]> callbacks = new HashMap<UUID, Callback<ObjectMap<Integer>>[]>();
|
private static HashMap<UUID, Callback<ObjectMap<Integer>>[]> callbacks = new HashMap<UUID, Callback<ObjectMap<Integer>>[]>();
|
||||||
private UUID player;
|
private List<UUID> players;
|
||||||
private String reason;
|
private String reason;
|
||||||
private UUID id;
|
private UUID id;
|
||||||
|
|
||||||
@ -27,14 +28,14 @@ public class PacketExDisconnectPlayer implements PacketObjectIn<Integer>, Packet
|
|||||||
/**
|
/**
|
||||||
* New PacketExDisconnectPlayer (Out)
|
* New PacketExDisconnectPlayer (Out)
|
||||||
*
|
*
|
||||||
* @param player Player
|
* @param players Players
|
||||||
* @param reason Reason
|
* @param reason Reason
|
||||||
* @param callback Callbacks
|
* @param callback Callbacks
|
||||||
*/
|
*/
|
||||||
@SafeVarargs
|
@SafeVarargs
|
||||||
public PacketExDisconnectPlayer(UUID player, String reason, Callback<ObjectMap<Integer>>... callback) {
|
public PacketExDisconnectPlayer(List<UUID> players, String reason, Callback<ObjectMap<Integer>>... callback) {
|
||||||
if (Util.isNull(player, callback)) throw new NullPointerException();
|
if (Util.isNull(players, callback)) throw new NullPointerException();
|
||||||
this.player = player;
|
this.players = players;
|
||||||
this.reason = reason;
|
this.reason = reason;
|
||||||
this.id = Util.getNew(callbacks.keySet(), UUID::randomUUID);
|
this.id = Util.getNew(callbacks.keySet(), UUID::randomUUID);
|
||||||
callbacks.put(id, callback);
|
callbacks.put(id, callback);
|
||||||
@ -44,7 +45,7 @@ public class PacketExDisconnectPlayer implements PacketObjectIn<Integer>, Packet
|
|||||||
public ObjectMap<Integer> send(SubDataClient client) {
|
public ObjectMap<Integer> send(SubDataClient client) {
|
||||||
ObjectMap<Integer> data = new ObjectMap<Integer>();
|
ObjectMap<Integer> data = new ObjectMap<Integer>();
|
||||||
data.set(0x0000, id);
|
data.set(0x0000, id);
|
||||||
data.set(0x0001, player);
|
data.set(0x0001, players);
|
||||||
if (reason != null) data.set(0x0002, reason);
|
if (reason != null) data.set(0x0002, reason);
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,7 @@ import java.util.UUID;
|
|||||||
*/
|
*/
|
||||||
public class PacketExMessagePlayer implements PacketObjectIn<Integer>, PacketObjectOut<Integer> {
|
public class PacketExMessagePlayer implements PacketObjectIn<Integer>, PacketObjectOut<Integer> {
|
||||||
private static HashMap<UUID, Callback<ObjectMap<Integer>>[]> callbacks = new HashMap<UUID, Callback<ObjectMap<Integer>>[]>();
|
private static HashMap<UUID, Callback<ObjectMap<Integer>>[]> callbacks = new HashMap<UUID, Callback<ObjectMap<Integer>>[]>();
|
||||||
private UUID player;
|
private List<UUID> players;
|
||||||
private List<String> legacy, raw;
|
private List<String> legacy, raw;
|
||||||
private UUID id;
|
private UUID id;
|
||||||
|
|
||||||
@ -28,15 +28,14 @@ public class PacketExMessagePlayer implements PacketObjectIn<Integer>, PacketObj
|
|||||||
/**
|
/**
|
||||||
* New PacketExMessagePlayer (Out)
|
* New PacketExMessagePlayer (Out)
|
||||||
*
|
*
|
||||||
* @param player Player
|
* @param players Players
|
||||||
* @param legacy Messages (Legacy)
|
* @param legacy Messages (Legacy)
|
||||||
* @param raw Messages (JSON)
|
* @param raw Messages (JSON)
|
||||||
* @param callback Callbacks
|
* @param callback Callbacks
|
||||||
*/
|
*/
|
||||||
@SafeVarargs
|
@SafeVarargs
|
||||||
public PacketExMessagePlayer(UUID player, List<String> legacy, List<String> raw, Callback<ObjectMap<Integer>>... callback) {
|
public PacketExMessagePlayer(List<UUID> players, List<String> legacy, List<String> raw, Callback<ObjectMap<Integer>>... callback) {
|
||||||
if (Util.isNull(player, callback)) throw new NullPointerException();
|
this.players = players;
|
||||||
this.player = player;
|
|
||||||
this.legacy = legacy;
|
this.legacy = legacy;
|
||||||
this.raw = raw;
|
this.raw = raw;
|
||||||
this.id = Util.getNew(callbacks.keySet(), UUID::randomUUID);
|
this.id = Util.getNew(callbacks.keySet(), UUID::randomUUID);
|
||||||
@ -47,7 +46,7 @@ public class PacketExMessagePlayer implements PacketObjectIn<Integer>, PacketObj
|
|||||||
public ObjectMap<Integer> send(SubDataClient client) {
|
public ObjectMap<Integer> send(SubDataClient client) {
|
||||||
ObjectMap<Integer> data = new ObjectMap<Integer>();
|
ObjectMap<Integer> data = new ObjectMap<Integer>();
|
||||||
data.set(0x0000, id);
|
data.set(0x0000, id);
|
||||||
data.set(0x0001, player);
|
if (players != null) data.set(0x0001, players);
|
||||||
if (legacy != null) data.set(0x0002, legacy);
|
if (legacy != null) data.set(0x0002, legacy);
|
||||||
if (raw != null) data.set(0x0003, raw);
|
if (raw != null) data.set(0x0003, raw);
|
||||||
return data;
|
return data;
|
||||||
|
@ -8,6 +8,7 @@ import net.ME1312.SubData.Server.Protocol.PacketObjectOut;
|
|||||||
import net.ME1312.SubData.Server.SubDataClient;
|
import net.ME1312.SubData.Server.SubDataClient;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -15,7 +16,7 @@ import java.util.UUID;
|
|||||||
*/
|
*/
|
||||||
public class PacketExTransferPlayer implements PacketObjectIn<Integer>, PacketObjectOut<Integer> {
|
public class PacketExTransferPlayer implements PacketObjectIn<Integer>, PacketObjectOut<Integer> {
|
||||||
private static HashMap<UUID, Callback<ObjectMap<Integer>>[]> callbacks = new HashMap<UUID, Callback<ObjectMap<Integer>>[]>();
|
private static HashMap<UUID, Callback<ObjectMap<Integer>>[]> callbacks = new HashMap<UUID, Callback<ObjectMap<Integer>>[]>();
|
||||||
private UUID player;
|
private List<UUID> players;
|
||||||
private String server;
|
private String server;
|
||||||
private UUID id;
|
private UUID id;
|
||||||
|
|
||||||
@ -27,14 +28,14 @@ public class PacketExTransferPlayer implements PacketObjectIn<Integer>, PacketOb
|
|||||||
/**
|
/**
|
||||||
* New PacketExTransferPlayer (Out)
|
* New PacketExTransferPlayer (Out)
|
||||||
*
|
*
|
||||||
* @param player Player
|
* @param players Players
|
||||||
* @param server Server
|
* @param server Server
|
||||||
* @param callback Callbacks
|
* @param callback Callbacks
|
||||||
*/
|
*/
|
||||||
@SafeVarargs
|
@SafeVarargs
|
||||||
public PacketExTransferPlayer(UUID player, String server, Callback<ObjectMap<Integer>>... callback) {
|
public PacketExTransferPlayer(List<UUID> players, String server, Callback<ObjectMap<Integer>>... callback) {
|
||||||
if (Util.isNull(player, callback)) throw new NullPointerException();
|
if (Util.isNull(players, server, callback)) throw new NullPointerException();
|
||||||
this.player = player;
|
this.players = players;
|
||||||
this.server = server;
|
this.server = server;
|
||||||
this.id = Util.getNew(callbacks.keySet(), UUID::randomUUID);
|
this.id = Util.getNew(callbacks.keySet(), UUID::randomUUID);
|
||||||
callbacks.put(id, callback);
|
callbacks.put(id, callback);
|
||||||
@ -44,8 +45,8 @@ public class PacketExTransferPlayer implements PacketObjectIn<Integer>, PacketOb
|
|||||||
public ObjectMap<Integer> send(SubDataClient client) {
|
public ObjectMap<Integer> send(SubDataClient client) {
|
||||||
ObjectMap<Integer> data = new ObjectMap<Integer>();
|
ObjectMap<Integer> data = new ObjectMap<Integer>();
|
||||||
data.set(0x0000, id);
|
data.set(0x0000, id);
|
||||||
data.set(0x0001, player);
|
data.set(0x0001, players);
|
||||||
if (server != null) data.set(0x0002, server);
|
data.set(0x0002, server);
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,38 +1,38 @@
|
|||||||
package net.ME1312.SubServers.Bungee.Network.Packet;
|
package net.ME1312.SubServers.Bungee.Network.Packet;
|
||||||
|
|
||||||
|
import net.ME1312.Galaxi.Library.AsyncConsolidator;
|
||||||
|
import net.ME1312.Galaxi.Library.Callback.Callback;
|
||||||
|
import net.ME1312.Galaxi.Library.Container.ContainedPair;
|
||||||
|
import net.ME1312.Galaxi.Library.Container.Container;
|
||||||
import net.ME1312.Galaxi.Library.Map.ObjectMap;
|
import net.ME1312.Galaxi.Library.Map.ObjectMap;
|
||||||
import net.ME1312.Galaxi.Library.Util;
|
import net.ME1312.Galaxi.Library.Util;
|
||||||
import net.ME1312.SubData.Server.Protocol.PacketObjectIn;
|
import net.ME1312.SubData.Server.Protocol.PacketObjectIn;
|
||||||
import net.ME1312.SubData.Server.Protocol.PacketObjectOut;
|
import net.ME1312.SubData.Server.Protocol.PacketObjectOut;
|
||||||
import net.ME1312.SubData.Server.SubDataClient;
|
import net.ME1312.SubData.Server.SubDataClient;
|
||||||
|
import net.ME1312.SubServers.Bungee.Host.Proxy;
|
||||||
import net.ME1312.SubServers.Bungee.Host.RemotePlayer;
|
import net.ME1312.SubServers.Bungee.Host.RemotePlayer;
|
||||||
|
import net.ME1312.SubServers.Bungee.SubAPI;
|
||||||
import net.ME1312.SubServers.Bungee.SubProxy;
|
import net.ME1312.SubServers.Bungee.SubProxy;
|
||||||
|
|
||||||
|
import net.md_5.bungee.api.ProxyServer;
|
||||||
import net.md_5.bungee.api.chat.BaseComponent;
|
import net.md_5.bungee.api.chat.BaseComponent;
|
||||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||||
import net.md_5.bungee.chat.ComponentSerializer;
|
import net.md_5.bungee.chat.ComponentSerializer;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.*;
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Message Player Packet
|
* Message Player Packet
|
||||||
*/
|
*/
|
||||||
public class PacketMessagePlayer implements PacketObjectIn<Integer>, PacketObjectOut<Integer> {
|
public class PacketMessagePlayer implements PacketObjectIn<Integer>, PacketObjectOut<Integer> {
|
||||||
private SubProxy plugin;
|
|
||||||
private int response;
|
private int response;
|
||||||
private UUID tracker;
|
private UUID tracker;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* New PacketMessagePlayer (In)
|
* New PacketMessagePlayer (In)
|
||||||
*
|
|
||||||
* @param plugin SubPlugin
|
|
||||||
*/
|
*/
|
||||||
public PacketMessagePlayer(SubProxy plugin) {
|
public PacketMessagePlayer() {
|
||||||
if (Util.isNull(plugin)) throw new NullPointerException();
|
|
||||||
this.plugin = plugin;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -54,40 +54,91 @@ public class PacketMessagePlayer implements PacketObjectIn<Integer>, PacketObjec
|
|||||||
return json;
|
return json;
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
@Override
|
@Override
|
||||||
public void receive(SubDataClient client, ObjectMap<Integer> data) {
|
public void receive(SubDataClient client, ObjectMap<Integer> data) {
|
||||||
UUID tracker = (data.contains(0x0000)?data.getUUID(0x0000):null);
|
UUID tracker = (data.contains(0x0000)?data.getUUID(0x0000):null);
|
||||||
try {
|
run(data.contains(0x0001)?data.getUUIDList(0x0001):null, null, data, i -> {
|
||||||
UUID id = data.getUUID(0x0001);
|
client.sendPacket(new PacketMessagePlayer(i, tracker));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
public static void run(List<UUID> ids, ContainedPair<String[], BaseComponent[]> message, ObjectMap<Integer> data, Callback<Integer> callback) {
|
||||||
|
try {
|
||||||
|
Container<Integer> failures = new Container<>(0);
|
||||||
|
HashMap<Proxy, List<UUID>> requests = new HashMap<Proxy, List<UUID>>();
|
||||||
|
if (ids == null || ids.size() == 0) {
|
||||||
|
if (ProxyServer.getInstance().getPlayers().size() > 0) {
|
||||||
|
if (message == null) message = parseMessage(data);
|
||||||
|
|
||||||
|
if (message.key != null) for (String s : message.key)
|
||||||
|
ProxyServer.getInstance().broadcast(s);
|
||||||
|
if (message.value != null)
|
||||||
|
ProxyServer.getInstance().broadcast(message.value);
|
||||||
|
}
|
||||||
|
for (Proxy proxy : SubAPI.getInstance().getProxies().values()) {
|
||||||
|
if (proxy.getPlayers().size() > 0) requests.put(proxy, null);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (UUID id : ids) {
|
||||||
ProxiedPlayer local;
|
ProxiedPlayer local;
|
||||||
RemotePlayer remote;
|
RemotePlayer remote;
|
||||||
if ((local = plugin.getPlayer(id)) != null) {
|
if ((local = ProxyServer.getInstance().getPlayer(id)) != null) {
|
||||||
|
if (message == null) message = parseMessage(data);
|
||||||
|
if (message.key != null)
|
||||||
|
local.sendMessages(message.key);
|
||||||
|
if (message.value != null)
|
||||||
|
local.sendMessage(message.value);
|
||||||
|
} else if ((remote = SubAPI.getInstance().getRemotePlayer(id)) != null && remote.getProxy().getSubData()[0] != null) {
|
||||||
|
Proxy proxy = remote.getProxy();
|
||||||
|
List<UUID> list = requests.getOrDefault(proxy, new ArrayList<>());
|
||||||
|
list.add(id);
|
||||||
|
requests.put(proxy, list);
|
||||||
|
} else {
|
||||||
|
++failures.value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (requests.size() == 0) {
|
||||||
|
callback.run(failures.value);
|
||||||
|
} else {
|
||||||
|
AsyncConsolidator merge = new AsyncConsolidator(() -> {
|
||||||
|
callback.run(failures.value);
|
||||||
|
});
|
||||||
|
List<String> legacy, raw;
|
||||||
|
if (data == null) {
|
||||||
|
legacy = (message.key != null?Arrays.asList(message.key):null);
|
||||||
|
raw = (message.value != null?Collections.singletonList(ComponentSerializer.toString(message.value)):null);
|
||||||
|
} else {
|
||||||
|
legacy = (data.contains(0x0002)?data.getRawStringList(0x0002):null);
|
||||||
|
raw = (data.contains(0x0003)?data.getRawStringList(0x0003):null);
|
||||||
|
}
|
||||||
|
for (Map.Entry<Proxy, List<UUID>> entry : requests.entrySet()) {
|
||||||
|
merge.reserve();
|
||||||
|
((SubDataClient) entry.getKey().getSubData()[0]).sendPacket(new PacketExMessagePlayer(entry.getValue(), legacy, raw, r -> {
|
||||||
|
failures.value += r.getInt(0x0001);
|
||||||
|
merge.release();
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Throwable e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
callback.run((ids == null || ids.size() == 0)? 1 : ids.size());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static ContainedPair<String[], BaseComponent[]> parseMessage(ObjectMap<Integer> data) {
|
||||||
|
ContainedPair<String[], BaseComponent[]> value = new ContainedPair<>();
|
||||||
if (data.contains(0x0002))
|
if (data.contains(0x0002))
|
||||||
local.sendMessages(data.getRawStringList(0x0002).toArray(new String[0]));
|
value.key = data.getRawStringList(0x0002).toArray(new String[0]);
|
||||||
if (data.contains(0x0003)) {
|
if (data.contains(0x0003)) {
|
||||||
List<String> messages = data.getRawStringList(0x0003);
|
List<String> messages = data.getRawStringList(0x0003);
|
||||||
LinkedList<BaseComponent> components = new LinkedList<BaseComponent>();
|
LinkedList<BaseComponent> components = new LinkedList<BaseComponent>();
|
||||||
for (String message : messages) components.addAll(Arrays.asList(ComponentSerializer.parse(message)));
|
for (String message : messages) components.addAll(Arrays.asList(ComponentSerializer.parse(message)));
|
||||||
local.sendMessage(components.toArray(new BaseComponent[0]));
|
value.value = 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 PacketExMessagePlayer(remote.getUniqueId(), (data.contains(0x0002)?data.getRawStringList(0x0002):null), (data.contains(0x0003)?data.getRawStringList(0x0003):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();
|
|
||||||
}
|
}
|
||||||
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1,34 +1,34 @@
|
|||||||
package net.ME1312.SubServers.Bungee.Network.Packet;
|
package net.ME1312.SubServers.Bungee.Network.Packet;
|
||||||
|
|
||||||
|
import net.ME1312.Galaxi.Library.AsyncConsolidator;
|
||||||
|
import net.ME1312.Galaxi.Library.Callback.Callback;
|
||||||
|
import net.ME1312.Galaxi.Library.Container.Container;
|
||||||
import net.ME1312.Galaxi.Library.Map.ObjectMap;
|
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.PacketObjectIn;
|
||||||
import net.ME1312.SubData.Server.Protocol.PacketObjectOut;
|
import net.ME1312.SubData.Server.Protocol.PacketObjectOut;
|
||||||
import net.ME1312.SubData.Server.SubDataClient;
|
import net.ME1312.SubData.Server.SubDataClient;
|
||||||
|
import net.ME1312.SubServers.Bungee.Host.Proxy;
|
||||||
import net.ME1312.SubServers.Bungee.Host.RemotePlayer;
|
import net.ME1312.SubServers.Bungee.Host.RemotePlayer;
|
||||||
import net.ME1312.SubServers.Bungee.Host.Server;
|
import net.ME1312.SubServers.Bungee.Host.Server;
|
||||||
import net.ME1312.SubServers.Bungee.SubProxy;
|
import net.ME1312.SubServers.Bungee.SubAPI;
|
||||||
|
|
||||||
|
import net.md_5.bungee.api.ProxyServer;
|
||||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Transfer Player Packet
|
* Transfer Player Packet
|
||||||
*/
|
*/
|
||||||
public class PacketTransferPlayer implements PacketObjectIn<Integer>, PacketObjectOut<Integer> {
|
public class PacketTransferPlayer implements PacketObjectIn<Integer>, PacketObjectOut<Integer> {
|
||||||
private SubProxy plugin;
|
|
||||||
private int response;
|
private int response;
|
||||||
private UUID tracker;
|
private UUID tracker;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* New PacketTransferPlayer (In)
|
* New PacketTransferPlayer (In)
|
||||||
*
|
|
||||||
* @param plugin SubPlugin
|
|
||||||
*/
|
*/
|
||||||
public PacketTransferPlayer(SubProxy plugin) {
|
public PacketTransferPlayer() {
|
||||||
if (Util.isNull(plugin)) throw new NullPointerException();
|
|
||||||
this.plugin = plugin;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -53,33 +53,50 @@ public class PacketTransferPlayer implements PacketObjectIn<Integer>, PacketObje
|
|||||||
@Override
|
@Override
|
||||||
public void receive(SubDataClient client, ObjectMap<Integer> data) {
|
public void receive(SubDataClient client, ObjectMap<Integer> data) {
|
||||||
UUID tracker = (data.contains(0x0000)?data.getUUID(0x0000):null);
|
UUID tracker = (data.contains(0x0000)?data.getUUID(0x0000):null);
|
||||||
try {
|
run(data.getUUIDList(0x0001), data.getRawString(0x0002), i -> {
|
||||||
UUID id = data.getUUID(0x0001);
|
client.sendPacket(new PacketTransferPlayer(i, tracker));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void run(List<UUID> ids, String name, Callback<Integer> callback) {
|
||||||
|
try {
|
||||||
|
Container<Integer> failures = new Container<>(0);
|
||||||
|
HashMap<Proxy, List<UUID>> requests = new HashMap<Proxy, List<UUID>>();
|
||||||
|
Server server = SubAPI.getInstance().getServer(name);
|
||||||
|
for (UUID id : ids) {
|
||||||
ProxiedPlayer local;
|
ProxiedPlayer local;
|
||||||
RemotePlayer remote;
|
RemotePlayer remote;
|
||||||
if ((local = plugin.getPlayer(id)) != null) {
|
if ((local = ProxyServer.getInstance().getPlayer(id)) != null) {
|
||||||
Server server;
|
if (name != null) {
|
||||||
if (data.contains(0x0002) && (server = plugin.api.getServer(data.getRawString(0x0002))) != null) {
|
|
||||||
local.connect(server);
|
local.connect(server);
|
||||||
client.sendPacket(new PacketTransferPlayer(0, tracker));
|
} else ++failures.value;
|
||||||
|
} else if ((remote = SubAPI.getInstance().getRemotePlayer(id)) != null && remote.getProxy().getSubData()[0] != null) {
|
||||||
|
Proxy proxy = remote.getProxy();
|
||||||
|
List<UUID> list = requests.getOrDefault(proxy, new ArrayList<>());
|
||||||
|
list.add(id);
|
||||||
|
requests.put(proxy, list);
|
||||||
} else {
|
} else {
|
||||||
client.sendPacket(new PacketTransferPlayer(1, tracker));
|
++failures.value;
|
||||||
}
|
}
|
||||||
} 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 -> {
|
if (requests.size() == 0) {
|
||||||
client.sendPacket(new PacketTransferPlayer(r.getInt(0x0001), tracker));
|
callback.run(failures.value);
|
||||||
|
} else {
|
||||||
|
AsyncConsolidator merge = new AsyncConsolidator(() -> {
|
||||||
|
callback.run(failures.value);
|
||||||
|
});
|
||||||
|
for (Map.Entry<Proxy, List<UUID>> entry : requests.entrySet()) {
|
||||||
|
merge.reserve();
|
||||||
|
((SubDataClient) entry.getKey().getSubData()[0]).sendPacket(new PacketExTransferPlayer(entry.getValue(), name, r -> {
|
||||||
|
failures.value += r.getInt(0x0001);
|
||||||
|
merge.release();
|
||||||
}));
|
}));
|
||||||
} else {
|
|
||||||
client.sendPacket(new PacketTransferPlayer(4, tracker));
|
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
client.sendPacket(new PacketTransferPlayer(3, tracker));
|
|
||||||
}
|
}
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
client.sendPacket(new PacketTransferPlayer(2, tracker));
|
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
callback.run(-1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -89,9 +89,9 @@ public class SubProtocol extends SubDataProtocol {
|
|||||||
registerPacket(0x0038, new PacketRemoveServer(plugin));
|
registerPacket(0x0038, new PacketRemoveServer(plugin));
|
||||||
registerPacket(0x0039, new PacketDeleteServer(plugin));
|
registerPacket(0x0039, new PacketDeleteServer(plugin));
|
||||||
//registerPacket(0x003A, new PacketRestoreServer(plugin)); // TODO
|
//registerPacket(0x003A, new PacketRestoreServer(plugin)); // TODO
|
||||||
registerPacket(0x003B, new PacketTransferPlayer(plugin));
|
registerPacket(0x003B, new PacketTransferPlayer());
|
||||||
registerPacket(0x003C, new PacketDisconnectPlayer(plugin));
|
registerPacket(0x003C, new PacketDisconnectPlayer());
|
||||||
registerPacket(0x003D, new PacketMessagePlayer(plugin));
|
registerPacket(0x003D, new PacketMessagePlayer());
|
||||||
|
|
||||||
|
|
||||||
// 50-6F: External Host Packets
|
// 50-6F: External Host Packets
|
||||||
|
@ -123,8 +123,8 @@ public final class SubAPI implements BungeeAPI {
|
|||||||
* @return a Host
|
* @return a Host
|
||||||
*/
|
*/
|
||||||
public Host getHost(String name) {
|
public Host getHost(String name) {
|
||||||
if (Util.isNull(name)) throw new NullPointerException();
|
if (Util.isNull(name)) return null;
|
||||||
return getHosts().get(name.toLowerCase());
|
return plugin.hosts.get(name.toLowerCase());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -350,7 +350,7 @@ public final class SubAPI implements BungeeAPI {
|
|||||||
* @return a Server Group
|
* @return a Server Group
|
||||||
*/
|
*/
|
||||||
public Pair<String, List<Server>> getGroup(String name) {
|
public Pair<String, List<Server>> getGroup(String name) {
|
||||||
if (Util.isNull(name)) throw new NullPointerException();
|
if (Util.isNull(name)) return null;
|
||||||
for (Map.Entry<String, List<Server>> group : getLowercaseGroups().entrySet()) {
|
for (Map.Entry<String, List<Server>> group : getLowercaseGroups().entrySet()) {
|
||||||
if (group.getKey().equalsIgnoreCase(name)) return new ContainedPair<>(group.getKey(), group.getValue());
|
if (group.getKey().equalsIgnoreCase(name)) return new ContainedPair<>(group.getKey(), group.getValue());
|
||||||
}
|
}
|
||||||
@ -378,8 +378,9 @@ public final class SubAPI implements BungeeAPI {
|
|||||||
* @return a Server
|
* @return a Server
|
||||||
*/
|
*/
|
||||||
public Server getServer(String name) {
|
public Server getServer(String name) {
|
||||||
if (Util.isNull(name)) throw new NullPointerException();
|
if (Util.isNull(name)) return null;
|
||||||
return getServers().get(name.toLowerCase());
|
Server server = plugin.exServers.getOrDefault(name.toLowerCase(), null);
|
||||||
|
return (server == null)? getSubServer(name) : server;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -516,8 +517,13 @@ public final class SubAPI implements BungeeAPI {
|
|||||||
* @return a SubServer
|
* @return a SubServer
|
||||||
*/
|
*/
|
||||||
public SubServer getSubServer(String name) {
|
public SubServer getSubServer(String name) {
|
||||||
if (Util.isNull(name)) throw new NullPointerException();
|
if (Util.isNull(name)) return null;
|
||||||
return getSubServers().get(name.toLowerCase());
|
SubServer server;
|
||||||
|
for (Host host : plugin.hosts.values()) {
|
||||||
|
server = host.getSubServer(name);
|
||||||
|
if (server != null) return server;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -536,8 +542,8 @@ public final class SubAPI implements BungeeAPI {
|
|||||||
* @return a Proxy
|
* @return a Proxy
|
||||||
*/
|
*/
|
||||||
public Proxy getProxy(String name) {
|
public Proxy getProxy(String name) {
|
||||||
if (Util.isNull(name)) throw new NullPointerException();
|
if (Util.isNull(name)) return null;
|
||||||
Proxy proxy = getProxies().getOrDefault(name.toLowerCase(), null);
|
Proxy proxy = plugin.proxies.getOrDefault(name.toLowerCase(), null);
|
||||||
if (proxy == null && plugin.mProxy != null && plugin.mProxy.getName().equalsIgnoreCase(name)) proxy = plugin.mProxy;
|
if (proxy == null && plugin.mProxy != null && plugin.mProxy.getName().equalsIgnoreCase(name)) proxy = plugin.mProxy;
|
||||||
return proxy;
|
return proxy;
|
||||||
}
|
}
|
||||||
@ -594,7 +600,7 @@ public final class SubAPI implements BungeeAPI {
|
|||||||
*/
|
*/
|
||||||
public RemotePlayer getRemotePlayer(String name) {
|
public RemotePlayer getRemotePlayer(String name) {
|
||||||
if (Util.isNull(name)) throw new NullPointerException();
|
if (Util.isNull(name)) throw new NullPointerException();
|
||||||
for (RemotePlayer player : getRemotePlayers().values()) {
|
for (RemotePlayer player : plugin.rPlayers.values()) {
|
||||||
if (player.getName().equalsIgnoreCase(name)) return player;
|
if (player.getName().equalsIgnoreCase(name)) return player;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
@ -608,7 +614,7 @@ public final class SubAPI implements BungeeAPI {
|
|||||||
*/
|
*/
|
||||||
public RemotePlayer getRemotePlayer(UUID id) {
|
public RemotePlayer getRemotePlayer(UUID id) {
|
||||||
if (Util.isNull(id)) throw new NullPointerException();
|
if (Util.isNull(id)) throw new NullPointerException();
|
||||||
return getRemotePlayers().getOrDefault(id, null);
|
return plugin.rPlayers.getOrDefault(id, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -620,7 +626,7 @@ public final class SubAPI implements BungeeAPI {
|
|||||||
*/
|
*/
|
||||||
public void setLang(String channel, String key, String value) {
|
public void setLang(String channel, String key, String value) {
|
||||||
if (Util.isNull(channel, key, value)) throw new NullPointerException();
|
if (Util.isNull(channel, key, value)) throw new NullPointerException();
|
||||||
LinkedHashMap<String, String> map = (plugin.exLang.keySet().contains(channel.toLowerCase()))?plugin.exLang.get(channel.toLowerCase()):new LinkedHashMap<String, String>();
|
LinkedHashMap<String, String> map = (plugin.exLang.containsKey(channel.toLowerCase()))?plugin.exLang.get(channel.toLowerCase()):new LinkedHashMap<String, String>();
|
||||||
map.put(key, value);
|
map.put(key, value);
|
||||||
plugin.exLang.put(channel.toLowerCase(), map);
|
plugin.exLang.put(channel.toLowerCase(), map);
|
||||||
}
|
}
|
||||||
@ -641,7 +647,7 @@ public final class SubAPI implements BungeeAPI {
|
|||||||
* @return Lang Value
|
* @return Lang Value
|
||||||
*/
|
*/
|
||||||
public Map<String, String> getLang(String channel) {
|
public Map<String, String> getLang(String channel) {
|
||||||
if (Util.isNull(channel)) throw new NullPointerException();
|
if (Util.isNull(channel)) return null;
|
||||||
return new LinkedHashMap<>(plugin.exLang.get(channel.toLowerCase()));
|
return new LinkedHashMap<>(plugin.exLang.get(channel.toLowerCase()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -680,7 +686,7 @@ public final class SubAPI implements BungeeAPI {
|
|||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public <R> R getObjectBySignature(String signature) {
|
public <R> R getObjectBySignature(String signature) {
|
||||||
if (Util.isNull(signature)) throw new NullPointerException();
|
if (Util.isNull(signature)) throw new NullPointerException();
|
||||||
return (R) knownSignatures.get(signature);
|
return (R) knownSignatures.getOrDefault(signature, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -110,6 +110,7 @@ public final class SubProxy extends BungeeCommon implements Listener {
|
|||||||
this.isPatched = isPatched;
|
this.isPatched = isPatched;
|
||||||
|
|
||||||
Logger.get("SubServers").info("Loading SubServers.Bungee v" + version.toString() + " Libraries (for Minecraft " + api.getGameVersion()[api.getGameVersion().length - 1] + ")");
|
Logger.get("SubServers").info("Loading SubServers.Bungee v" + version.toString() + " Libraries (for Minecraft " + api.getGameVersion()[api.getGameVersion().length - 1] + ")");
|
||||||
|
Util.isException(() -> new RemotePlayer(null)); // runs <clinit>
|
||||||
|
|
||||||
this.out = out;
|
this.out = out;
|
||||||
if (!(new UniversalFile(dir, "config.yml").exists())) {
|
if (!(new UniversalFile(dir, "config.yml").exists())) {
|
||||||
@ -914,7 +915,11 @@ public final class SubProxy extends BungeeCommon implements Listener {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public ServerInfo getServerInfo(String name) {
|
public ServerInfo getServerInfo(String name) {
|
||||||
|
if (!ready) {
|
||||||
return getServersCopy().get(name);
|
return getServersCopy().get(name);
|
||||||
|
} else {
|
||||||
|
return api.getServer(name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = Byte.MIN_VALUE)
|
@EventHandler(priority = Byte.MIN_VALUE)
|
||||||
@ -975,7 +980,7 @@ public final class SubProxy extends BungeeCommon implements Listener {
|
|||||||
ProxiedPlayer p = getPlayer(player.getUniqueId());
|
ProxiedPlayer p = getPlayer(player.getUniqueId());
|
||||||
if (p != null) p.disconnect(new TextComponent(getTranslation("already_connected_proxy")));
|
if (p != null) p.disconnect(new TextComponent(getTranslation("already_connected_proxy")));
|
||||||
} else if (player.getProxy().getSubData()[0] != null) {
|
} else if (player.getProxy().getSubData()[0] != null) {
|
||||||
((SubDataClient) player.getProxy().getSubData()[0]).sendPacket(new PacketExDisconnectPlayer(player.getUniqueId(), getTranslation("already_connected_proxy")));
|
((SubDataClient) player.getProxy().getSubData()[0]).sendPacket(new PacketExDisconnectPlayer(Collections.singletonList(player.getUniqueId()), getTranslation("already_connected_proxy")));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -189,11 +189,15 @@ public class Host {
|
|||||||
|
|
||||||
if (players == null) {
|
if (players == null) {
|
||||||
LinkedList<UUID> ids = new LinkedList<UUID>();
|
LinkedList<UUID> ids = new LinkedList<UUID>();
|
||||||
for (SubServer server : getSubServers().values()) for (Pair<String, UUID> player : server.getRemotePlayers()) ids.add(player.value());
|
HashMap<UUID, SubServer> servers = new HashMap<UUID, SubServer>();
|
||||||
|
for (SubServer server : getSubServers().values()) for (Pair<String, UUID> player : server.getRemotePlayers()) {
|
||||||
|
ids.add(player.value());
|
||||||
|
servers.put(player.value(), server);
|
||||||
|
}
|
||||||
client().sendPacket(new PacketDownloadPlayerInfo(ids, data -> {
|
client().sendPacket(new PacketDownloadPlayerInfo(ids, data -> {
|
||||||
LinkedList<RemotePlayer> players = new LinkedList<RemotePlayer>();
|
LinkedList<RemotePlayer> players = new LinkedList<RemotePlayer>();
|
||||||
for (String player : data.getKeys()) {
|
for (String player : data.getKeys()) {
|
||||||
players.add(new RemotePlayer(data.getMap(player)));
|
players.add(RemotePlayer.st4tic.construct(servers.get(UUID.fromString(player)), data.getMap(player)));
|
||||||
}
|
}
|
||||||
|
|
||||||
this.players = players;
|
this.players = players;
|
||||||
|
@ -149,7 +149,7 @@ public class Proxy {
|
|||||||
client().sendPacket(new PacketDownloadPlayerInfo(ids, data -> {
|
client().sendPacket(new PacketDownloadPlayerInfo(ids, data -> {
|
||||||
LinkedList<RemotePlayer> players = new LinkedList<RemotePlayer>();
|
LinkedList<RemotePlayer> players = new LinkedList<RemotePlayer>();
|
||||||
for (String player : data.getKeys()) {
|
for (String player : data.getKeys()) {
|
||||||
players.add(new RemotePlayer(data.getMap(player)));
|
players.add(RemotePlayer.st4tic.construct(this, data.getMap(player)));
|
||||||
}
|
}
|
||||||
|
|
||||||
this.players = players;
|
this.players = players;
|
||||||
|
@ -16,6 +16,7 @@ import java.util.*;
|
|||||||
* Simplified RemotePlayer Data Class
|
* Simplified RemotePlayer Data Class
|
||||||
*/
|
*/
|
||||||
public class RemotePlayer {
|
public class RemotePlayer {
|
||||||
|
protected static StaticImpl st4tic = new StaticImpl();
|
||||||
ObjectMap<String> raw;
|
ObjectMap<String> raw;
|
||||||
private Proxy proxy = null;
|
private Proxy proxy = null;
|
||||||
private Server server = null;
|
private Server server = null;
|
||||||
@ -37,7 +38,7 @@ public class RemotePlayer {
|
|||||||
* @param client SubData connection
|
* @param client SubData connection
|
||||||
* @param raw Raw representation of the Remote Player
|
* @param raw Raw representation of the Remote Player
|
||||||
*/
|
*/
|
||||||
RemotePlayer(DataClient client, ObjectMap<String> raw) {
|
protected RemotePlayer(DataClient client, ObjectMap<String> raw) {
|
||||||
this.client = client;
|
this.client = client;
|
||||||
load(raw);
|
load(raw);
|
||||||
}
|
}
|
||||||
@ -167,6 +168,35 @@ public class RemotePlayer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends messages to all players
|
||||||
|
*
|
||||||
|
* @param messages Messages to send
|
||||||
|
*/
|
||||||
|
public static void broadcastMessage(String... messages) {
|
||||||
|
broadcastMessage(messages, i -> {});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends messages to all players
|
||||||
|
*
|
||||||
|
* @param message Message to send
|
||||||
|
* @param response Success Status
|
||||||
|
*/
|
||||||
|
public static void broadcastMessage(String message, Callback<Integer> response) {
|
||||||
|
broadcastMessage(new String[]{ message }, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends messages to all players
|
||||||
|
*
|
||||||
|
* @param messages Messages to send
|
||||||
|
* @param response Success Status
|
||||||
|
*/
|
||||||
|
public static void broadcastMessage(String[] messages, Callback<Integer> response) {
|
||||||
|
sendMessage(null, messages, response);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sends messages to this player
|
* Sends messages to this player
|
||||||
*
|
*
|
||||||
@ -193,16 +223,65 @@ public class RemotePlayer {
|
|||||||
* @param response Success Status
|
* @param response Success Status
|
||||||
*/
|
*/
|
||||||
public void sendMessage(String[] messages, Callback<Integer> response) {
|
public void sendMessage(String[] messages, Callback<Integer> response) {
|
||||||
StackTraceElement[] origin = new Exception().getStackTrace();
|
st4tic.sendMessage(client(), new UUID[]{ getUniqueId() }, messages, response);
|
||||||
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 messages to this player
|
||||||
|
*
|
||||||
|
* @param messages Messages to send
|
||||||
|
*/
|
||||||
|
public static void sendMessage(UUID[] players, String... messages) {
|
||||||
|
sendMessage(players, messages, i -> {});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends messages to this player
|
||||||
|
*
|
||||||
|
* @param message Message to send
|
||||||
|
* @param response Success Status
|
||||||
|
*/
|
||||||
|
public static void sendMessage(UUID[] players, String message, Callback<Integer> response) {
|
||||||
|
sendMessage(players, new String[]{ message }, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends messages to this player
|
||||||
|
*
|
||||||
|
* @param messages Messages to send
|
||||||
|
* @param response Success Status
|
||||||
|
*/
|
||||||
|
public static void sendMessage(UUID[] players, String[] messages, Callback<Integer> response) {
|
||||||
|
st4tic.sendMessage(SimplifiedData.client(ClientAPI.getInstance().getSubDataNetwork()[0]), players, messages, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends JSON format messages to all players
|
||||||
|
*
|
||||||
|
* @param messages Messages to send
|
||||||
|
*/
|
||||||
|
public static void broadcastRawMessage(String... messages) {
|
||||||
|
broadcastRawMessage(messages, i -> {});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends JSON format messages to all players
|
||||||
|
*
|
||||||
|
* @param message Message to send
|
||||||
|
* @param response Success Status
|
||||||
|
*/
|
||||||
|
public static void broadcastRawMessage(String message, Callback<Integer> response) {
|
||||||
|
broadcastRawMessage(new String[]{ message }, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends JSON format messages to all players
|
||||||
|
*
|
||||||
|
* @param messages Messages to send
|
||||||
|
* @param response Success Status
|
||||||
|
*/
|
||||||
|
public static void broadcastRawMessage(String[] messages, Callback<Integer> response) {
|
||||||
|
sendRawMessage(null, messages, response);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -227,20 +306,43 @@ public class RemotePlayer {
|
|||||||
/**
|
/**
|
||||||
* Sends JSON format messages to this player
|
* Sends JSON format messages to this player
|
||||||
*
|
*
|
||||||
* @param messages Messages to send
|
* @param message Message to send
|
||||||
* @param response Success Status
|
* @param response Success Status
|
||||||
*/
|
*/
|
||||||
public void sendRawMessage(String[] messages, Callback<Integer> response) {
|
public void sendRawMessage(String[] message, Callback<Integer> response) {
|
||||||
StackTraceElement[] origin = new Exception().getStackTrace();
|
st4tic.sendRawMessage(client(), new UUID[]{ getUniqueId() }, message, response);
|
||||||
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();
|
|
||||||
}
|
}
|
||||||
}));
|
|
||||||
|
/**
|
||||||
|
* Sends JSON format messages to this player
|
||||||
|
*
|
||||||
|
* @param players Players to select
|
||||||
|
* @param messages Messages to send
|
||||||
|
*/
|
||||||
|
public static void sendRawMessage(UUID[] players, String... messages) {
|
||||||
|
sendRawMessage(players, messages, i -> {});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends JSON format messages to this player
|
||||||
|
*
|
||||||
|
* @param players Players to select
|
||||||
|
* @param message Message to send
|
||||||
|
* @param response Success Status
|
||||||
|
*/
|
||||||
|
public static void sendRawMessage(UUID[] players, String message, Callback<Integer> response) {
|
||||||
|
sendRawMessage(players, new String[]{ message }, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends JSON format messages to this player
|
||||||
|
*
|
||||||
|
* @param players Players to select
|
||||||
|
* @param message Message to send
|
||||||
|
* @param response Success Status
|
||||||
|
*/
|
||||||
|
public static void sendRawMessage(UUID[] players, String[] message, Callback<Integer> response) {
|
||||||
|
st4tic.sendRawMessage(SimplifiedData.client(ClientAPI.getInstance().getSubDataNetwork()[0]), players, message, response);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -259,42 +361,35 @@ public class RemotePlayer {
|
|||||||
* @param response Success status
|
* @param response Success status
|
||||||
*/
|
*/
|
||||||
public void transfer(String server, Callback<Integer> response) {
|
public void transfer(String server, Callback<Integer> response) {
|
||||||
StackTraceElement[] origin = new Exception().getStackTrace();
|
st4tic.transfer(client(), new UUID[]{ getUniqueId() }, server, response);
|
||||||
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
|
* Transfers this player to another server
|
||||||
*
|
*
|
||||||
|
* @param players Players to select
|
||||||
* @param server Target server
|
* @param server Target server
|
||||||
*/
|
*/
|
||||||
public void transfer(Server server) {
|
public static void transfer(UUID[] players, String server) {
|
||||||
transfer(server, i -> {});
|
transfer(players, server, i -> {});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Transfers this player to another server
|
* Transfers this player to another server
|
||||||
*
|
*
|
||||||
|
* @param players Players to select
|
||||||
* @param server Target server
|
* @param server Target server
|
||||||
* @param response Success status
|
* @param response Success status
|
||||||
*/
|
*/
|
||||||
public void transfer(Server server, Callback<Integer> response) {
|
public static void transfer(UUID[] players, String server, Callback<Integer> response) {
|
||||||
transfer(server.getName(), response);
|
st4tic.transfer(SimplifiedData.client(ClientAPI.getInstance().getSubDataNetwork()[0]), players, server, response);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Disconnects this player from the network
|
* Disconnects this player from the network
|
||||||
*/
|
*/
|
||||||
public void disconnect() {
|
public void disconnect() {
|
||||||
disconnect(i -> {});
|
disconnect((String) null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -303,7 +398,7 @@ public class RemotePlayer {
|
|||||||
* @param response Success status
|
* @param response Success status
|
||||||
*/
|
*/
|
||||||
public void disconnect(Callback<Integer> response) {
|
public void disconnect(Callback<Integer> response) {
|
||||||
disconnect(null, response);
|
disconnect((String) null, response);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -322,16 +417,47 @@ public class RemotePlayer {
|
|||||||
* @param response Success status
|
* @param response Success status
|
||||||
*/
|
*/
|
||||||
public void disconnect(String reason, Callback<Integer> response) {
|
public void disconnect(String reason, Callback<Integer> response) {
|
||||||
StackTraceElement[] origin = new Exception().getStackTrace();
|
st4tic.disconnect(client(), new UUID[]{ getUniqueId() }, reason, response);
|
||||||
client().sendPacket(new PacketDisconnectPlayer(getUniqueId(), reason, data -> {
|
|
||||||
try {
|
|
||||||
response.run(data.getInt(0x0001));
|
|
||||||
} catch (Throwable e) {
|
|
||||||
Throwable ew = new InvocationTargetException(e);
|
|
||||||
ew.setStackTrace(origin);
|
|
||||||
ew.printStackTrace();
|
|
||||||
}
|
}
|
||||||
}));
|
|
||||||
|
/**
|
||||||
|
* Disconnects this player from the network
|
||||||
|
*
|
||||||
|
* @param players Players to select
|
||||||
|
*/
|
||||||
|
public static void disconnect(UUID... players) {
|
||||||
|
disconnect(players, (String) null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disconnects this player from the network
|
||||||
|
*
|
||||||
|
* @param players Players to select
|
||||||
|
* @param response Success status
|
||||||
|
*/
|
||||||
|
public static void disconnect(UUID[] players, Callback<Integer> response) {
|
||||||
|
disconnect(players, null, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disconnects this player from the network
|
||||||
|
*
|
||||||
|
* @param players Players to select
|
||||||
|
* @param reason Disconnect Reason
|
||||||
|
*/
|
||||||
|
public static void disconnect(UUID[] players, String reason) {
|
||||||
|
disconnect(players, reason, i -> {});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disconnects this player from the network
|
||||||
|
*
|
||||||
|
* @param players Players to select
|
||||||
|
* @param reason Disconnect Reason
|
||||||
|
* @param response Success status
|
||||||
|
*/
|
||||||
|
public static void disconnect(UUID[] players, String reason, Callback<Integer> response) {
|
||||||
|
st4tic.disconnect(SimplifiedData.client(ClientAPI.getInstance().getSubDataNetwork()[0]), players, reason, response);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -353,11 +479,134 @@ public class RemotePlayer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the raw representation of the Server
|
* RemotePlayer Static Implementation Class
|
||||||
*
|
|
||||||
* @return Raw Server
|
|
||||||
*/
|
*/
|
||||||
protected static ObjectMap<String> raw(RemotePlayer player) {
|
protected static class StaticImpl {
|
||||||
return player.raw;
|
/**
|
||||||
|
* Create an API representation of a Remote Player
|
||||||
|
*
|
||||||
|
* @param raw Raw representation of the Remote Player
|
||||||
|
*/
|
||||||
|
protected final RemotePlayer construct(ObjectMap<String> raw) {
|
||||||
|
return construct((DataClient) null, raw);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create an API representation of a Remote Player
|
||||||
|
*
|
||||||
|
* @param client SubData connection
|
||||||
|
* @param raw Raw representation of the Remote Player
|
||||||
|
*/
|
||||||
|
protected RemotePlayer construct(DataClient client, ObjectMap<String> raw) {
|
||||||
|
return new RemotePlayer(client, raw);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create an API representation of a Remote Player
|
||||||
|
*
|
||||||
|
* @param server Server
|
||||||
|
* @param raw Raw representation of the Remote Player
|
||||||
|
*/
|
||||||
|
final RemotePlayer construct(Server server, ObjectMap<String> raw) {
|
||||||
|
RemotePlayer player = new RemotePlayer(server.client, raw);
|
||||||
|
player.server = server;
|
||||||
|
return player;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create an API representation of a Remote Player
|
||||||
|
*
|
||||||
|
* @param proxy Proxy
|
||||||
|
* @param raw Raw representation of the Remote Player
|
||||||
|
*/
|
||||||
|
final RemotePlayer construct(Proxy proxy, ObjectMap<String> raw) {
|
||||||
|
RemotePlayer player = new RemotePlayer(proxy.client, raw);
|
||||||
|
player.proxy = proxy;
|
||||||
|
return player;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends messages to this player
|
||||||
|
*
|
||||||
|
* @param client SubData Connection
|
||||||
|
* @param players Players to send to
|
||||||
|
* @param messages Messages to send
|
||||||
|
* @param response Success Status
|
||||||
|
*/
|
||||||
|
protected void sendMessage(SubDataClient client, UUID[] players, String[] messages, Callback<Integer> response) {
|
||||||
|
StackTraceElement[] origin = new Exception().getStackTrace();
|
||||||
|
client.sendPacket(new PacketMessagePlayer(players, 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 client SubData Connection
|
||||||
|
* @param players Players to send to
|
||||||
|
* @param messages Messages to send
|
||||||
|
* @param response Success Status
|
||||||
|
*/
|
||||||
|
protected void sendRawMessage(SubDataClient client, UUID[] players, String[] messages, Callback<Integer> response) {
|
||||||
|
StackTraceElement[] origin = new Exception().getStackTrace();
|
||||||
|
client.sendPacket(new PacketMessagePlayer(players, 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 client SubData Connection
|
||||||
|
* @param players Players to send to
|
||||||
|
* @param server Target server
|
||||||
|
* @param response Success Status
|
||||||
|
*/
|
||||||
|
protected void transfer(SubDataClient client, UUID[] players, String server, Callback<Integer> response) {
|
||||||
|
StackTraceElement[] origin = new Exception().getStackTrace();
|
||||||
|
client.sendPacket(new PacketTransferPlayer(players, server, data -> {
|
||||||
|
try {
|
||||||
|
response.run(data.getInt(0x0001));
|
||||||
|
} catch (Throwable e) {
|
||||||
|
Throwable ew = new InvocationTargetException(e);
|
||||||
|
ew.setStackTrace(origin);
|
||||||
|
ew.printStackTrace();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disconnects this player from the network
|
||||||
|
*
|
||||||
|
* @param client SubData Connection
|
||||||
|
* @param players Players to send to
|
||||||
|
* @param reason Disconnect Reason
|
||||||
|
* @param response Success status
|
||||||
|
*/
|
||||||
|
protected void disconnect(SubDataClient client, UUID[] players, String reason, Callback<Integer> response) {
|
||||||
|
StackTraceElement[] origin = new Exception().getStackTrace();
|
||||||
|
client.sendPacket(new PacketDisconnectPlayer(players, reason, data -> {
|
||||||
|
try {
|
||||||
|
response.run(data.getInt(0x0001));
|
||||||
|
} catch (Throwable e) {
|
||||||
|
Throwable ew = new InvocationTargetException(e);
|
||||||
|
ew.setStackTrace(origin);
|
||||||
|
ew.printStackTrace();
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -157,7 +157,7 @@ public class Server {
|
|||||||
client().sendPacket(new PacketDownloadPlayerInfo(ids, data -> {
|
client().sendPacket(new PacketDownloadPlayerInfo(ids, data -> {
|
||||||
LinkedList<RemotePlayer> players = new LinkedList<RemotePlayer>();
|
LinkedList<RemotePlayer> players = new LinkedList<RemotePlayer>();
|
||||||
for (String player : data.getKeys()) {
|
for (String player : data.getKeys()) {
|
||||||
players.add(new RemotePlayer(data.getMap(player)));
|
players.add(RemotePlayer.st4tic.construct(this, data.getMap(player)));
|
||||||
}
|
}
|
||||||
|
|
||||||
this.players = players;
|
this.players = players;
|
||||||
|
@ -334,7 +334,7 @@ public final class SimplifiedData {
|
|||||||
client(client).sendPacket(new PacketDownloadPlayerInfo((List<UUID>) null, data -> {
|
client(client).sendPacket(new PacketDownloadPlayerInfo((List<UUID>) null, data -> {
|
||||||
TreeMap<UUID, RemotePlayer> players = new TreeMap<UUID, RemotePlayer>();
|
TreeMap<UUID, RemotePlayer> players = new TreeMap<UUID, RemotePlayer>();
|
||||||
for (String player : data.getKeys()) {
|
for (String player : data.getKeys()) {
|
||||||
players.put(UUID.fromString(player), new RemotePlayer(client, data.getMap(player)));
|
players.put(UUID.fromString(player), RemotePlayer.st4tic.construct(client, data.getMap(player)));
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -360,7 +360,7 @@ public final class SimplifiedData {
|
|||||||
client(client).sendPacket(new PacketDownloadPlayerInfo(Collections.singletonList(name), data -> {
|
client(client).sendPacket(new PacketDownloadPlayerInfo(Collections.singletonList(name), data -> {
|
||||||
RemotePlayer player = null;
|
RemotePlayer player = null;
|
||||||
if (data.getKeys().size() > 0) {
|
if (data.getKeys().size() > 0) {
|
||||||
player = new RemotePlayer(client, data.getMap(new LinkedList<String>(data.getKeys()).getFirst()));
|
player = RemotePlayer.st4tic.construct(client, data.getMap(new LinkedList<String>(data.getKeys()).getFirst()));
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -386,7 +386,7 @@ public final class SimplifiedData {
|
|||||||
client(client).sendPacket(new PacketDownloadPlayerInfo(Collections.singletonList(id), data -> {
|
client(client).sendPacket(new PacketDownloadPlayerInfo(Collections.singletonList(id), data -> {
|
||||||
RemotePlayer player = null;
|
RemotePlayer player = null;
|
||||||
if (data.getKeys().size() > 0) {
|
if (data.getKeys().size() > 0) {
|
||||||
player = new RemotePlayer(client, data.getMap(new LinkedList<String>(data.getKeys()).getFirst()));
|
player = RemotePlayer.st4tic.construct(client, data.getMap(new LinkedList<String>(data.getKeys()).getFirst()));
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -64,7 +64,7 @@ public class SubServer extends Server {
|
|||||||
* @param raw JSON representation of the SubServer
|
* @param raw JSON representation of the SubServer
|
||||||
*/
|
*/
|
||||||
SubServer(Host host, ObjectMap<String> raw) {
|
SubServer(Host host, ObjectMap<String> raw) {
|
||||||
super(host.client, raw);
|
this(host.client, raw);
|
||||||
this.host = host;
|
this.host = host;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ import java.util.UUID;
|
|||||||
*/
|
*/
|
||||||
public class PacketDisconnectPlayer implements PacketObjectIn<Integer>, PacketObjectOut<Integer> {
|
public class PacketDisconnectPlayer implements PacketObjectIn<Integer>, PacketObjectOut<Integer> {
|
||||||
private static HashMap<UUID, Callback<ObjectMap<Integer>>[]> callbacks = new HashMap<UUID, Callback<ObjectMap<Integer>>[]>();
|
private static HashMap<UUID, Callback<ObjectMap<Integer>>[]> callbacks = new HashMap<UUID, Callback<ObjectMap<Integer>>[]>();
|
||||||
private UUID player;
|
private UUID[] players;
|
||||||
private String reason;
|
private String reason;
|
||||||
private UUID id;
|
private UUID id;
|
||||||
|
|
||||||
@ -27,14 +27,14 @@ public class PacketDisconnectPlayer implements PacketObjectIn<Integer>, PacketOb
|
|||||||
/**
|
/**
|
||||||
* New PacketDisconnectPlayer (Out)
|
* New PacketDisconnectPlayer (Out)
|
||||||
*
|
*
|
||||||
* @param player Player
|
* @param players Players
|
||||||
* @param reason Reason
|
* @param reason Reason
|
||||||
* @param callback Callbacks
|
* @param callback Callbacks
|
||||||
*/
|
*/
|
||||||
@SafeVarargs
|
@SafeVarargs
|
||||||
public PacketDisconnectPlayer(UUID player, String reason, Callback<ObjectMap<Integer>>... callback) {
|
public PacketDisconnectPlayer(UUID[] players, String reason, Callback<ObjectMap<Integer>>... callback) {
|
||||||
if (Util.isNull(player, callback)) throw new NullPointerException();
|
if (Util.isNull(players, callback)) throw new NullPointerException();
|
||||||
this.player = player;
|
this.players = players;
|
||||||
this.reason = reason;
|
this.reason = reason;
|
||||||
this.id = Util.getNew(callbacks.keySet(), UUID::randomUUID);
|
this.id = Util.getNew(callbacks.keySet(), UUID::randomUUID);
|
||||||
callbacks.put(id, callback);
|
callbacks.put(id, callback);
|
||||||
@ -44,7 +44,7 @@ public class PacketDisconnectPlayer implements PacketObjectIn<Integer>, PacketOb
|
|||||||
public ObjectMap<Integer> send(SubDataSender client) {
|
public ObjectMap<Integer> send(SubDataSender client) {
|
||||||
ObjectMap<Integer> data = new ObjectMap<Integer>();
|
ObjectMap<Integer> data = new ObjectMap<Integer>();
|
||||||
data.set(0x0000, id);
|
data.set(0x0000, id);
|
||||||
data.set(0x0001, player);
|
data.set(0x0001, players);
|
||||||
if (reason != null) data.set(0x0002, reason);
|
if (reason != null) data.set(0x0002, reason);
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,7 @@ import java.util.UUID;
|
|||||||
*/
|
*/
|
||||||
public class PacketMessagePlayer implements PacketObjectIn<Integer>, PacketObjectOut<Integer> {
|
public class PacketMessagePlayer implements PacketObjectIn<Integer>, PacketObjectOut<Integer> {
|
||||||
private static HashMap<UUID, Callback<ObjectMap<Integer>>[]> callbacks = new HashMap<UUID, Callback<ObjectMap<Integer>>[]>();
|
private static HashMap<UUID, Callback<ObjectMap<Integer>>[]> callbacks = new HashMap<UUID, Callback<ObjectMap<Integer>>[]>();
|
||||||
private UUID player;
|
private UUID[] players;
|
||||||
private String[] legacy, raw;
|
private String[] legacy, raw;
|
||||||
private UUID id;
|
private UUID id;
|
||||||
|
|
||||||
@ -27,15 +27,14 @@ public class PacketMessagePlayer implements PacketObjectIn<Integer>, PacketObjec
|
|||||||
/**
|
/**
|
||||||
* New PacketMessagePlayer (Out)
|
* New PacketMessagePlayer (Out)
|
||||||
*
|
*
|
||||||
* @param player Player
|
* @param players Players
|
||||||
* @param legacy Messages (Legacy)
|
* @param legacy Messages (Legacy)
|
||||||
* @param raw Messages (JSON)
|
* @param raw Messages (JSON)
|
||||||
* @param callback Callbacks
|
* @param callback Callbacks
|
||||||
*/
|
*/
|
||||||
@SafeVarargs
|
@SafeVarargs
|
||||||
public PacketMessagePlayer(UUID player, String[] legacy, String[] raw, Callback<ObjectMap<Integer>>... callback) {
|
public PacketMessagePlayer(UUID[] players, String[] legacy, String[] raw, Callback<ObjectMap<Integer>>... callback) {
|
||||||
if (Util.isNull(player, callback)) throw new NullPointerException();
|
this.players = players;
|
||||||
this.player = player;
|
|
||||||
this.legacy = legacy;
|
this.legacy = legacy;
|
||||||
this.raw = raw;
|
this.raw = raw;
|
||||||
this.id = Util.getNew(callbacks.keySet(), UUID::randomUUID);
|
this.id = Util.getNew(callbacks.keySet(), UUID::randomUUID);
|
||||||
@ -46,7 +45,7 @@ public class PacketMessagePlayer implements PacketObjectIn<Integer>, PacketObjec
|
|||||||
public ObjectMap<Integer> send(SubDataSender client) {
|
public ObjectMap<Integer> send(SubDataSender client) {
|
||||||
ObjectMap<Integer> data = new ObjectMap<Integer>();
|
ObjectMap<Integer> data = new ObjectMap<Integer>();
|
||||||
data.set(0x0000, id);
|
data.set(0x0000, id);
|
||||||
data.set(0x0001, player);
|
if (players != null) data.set(0x0001, players);
|
||||||
if (legacy != null) data.set(0x0002, legacy);
|
if (legacy != null) data.set(0x0002, legacy);
|
||||||
if (raw != null) data.set(0x0003, raw);
|
if (raw != null) data.set(0x0003, raw);
|
||||||
return data;
|
return data;
|
||||||
|
@ -15,7 +15,7 @@ import java.util.UUID;
|
|||||||
*/
|
*/
|
||||||
public class PacketTransferPlayer implements PacketObjectIn<Integer>, PacketObjectOut<Integer> {
|
public class PacketTransferPlayer implements PacketObjectIn<Integer>, PacketObjectOut<Integer> {
|
||||||
private static HashMap<UUID, Callback<ObjectMap<Integer>>[]> callbacks = new HashMap<UUID, Callback<ObjectMap<Integer>>[]>();
|
private static HashMap<UUID, Callback<ObjectMap<Integer>>[]> callbacks = new HashMap<UUID, Callback<ObjectMap<Integer>>[]>();
|
||||||
private UUID player;
|
private UUID[] players;
|
||||||
private String server;
|
private String server;
|
||||||
private UUID id;
|
private UUID id;
|
||||||
|
|
||||||
@ -27,14 +27,14 @@ public class PacketTransferPlayer implements PacketObjectIn<Integer>, PacketObje
|
|||||||
/**
|
/**
|
||||||
* New PacketTransferPlayer (Out)
|
* New PacketTransferPlayer (Out)
|
||||||
*
|
*
|
||||||
* @param player Player
|
* @param players Players
|
||||||
* @param server Server
|
* @param server Server
|
||||||
* @param callback Callbacks
|
* @param callback Callbacks
|
||||||
*/
|
*/
|
||||||
@SafeVarargs
|
@SafeVarargs
|
||||||
public PacketTransferPlayer(UUID player, String server, Callback<ObjectMap<Integer>>... callback) {
|
public PacketTransferPlayer(UUID[] players, String server, Callback<ObjectMap<Integer>>... callback) {
|
||||||
if (Util.isNull(player, callback)) throw new NullPointerException();
|
if (Util.isNull(players, server)) throw new NullPointerException();
|
||||||
this.player = player;
|
this.players = players;
|
||||||
this.server = server;
|
this.server = server;
|
||||||
this.id = Util.getNew(callbacks.keySet(), UUID::randomUUID);
|
this.id = Util.getNew(callbacks.keySet(), UUID::randomUUID);
|
||||||
callbacks.put(id, callback);
|
callbacks.put(id, callback);
|
||||||
@ -44,7 +44,7 @@ public class PacketTransferPlayer implements PacketObjectIn<Integer>, PacketObje
|
|||||||
public ObjectMap<Integer> send(SubDataSender client) {
|
public ObjectMap<Integer> send(SubDataSender client) {
|
||||||
ObjectMap<Integer> data = new ObjectMap<Integer>();
|
ObjectMap<Integer> data = new ObjectMap<Integer>();
|
||||||
data.set(0x0000, id);
|
data.set(0x0000, id);
|
||||||
data.set(0x0001, player);
|
data.set(0x0001, players);
|
||||||
if (server != null) data.set(0x0002, server);
|
if (server != null) data.set(0x0002, server);
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
@ -85,6 +85,7 @@ public final class ExProxy extends BungeeCommon implements Listener {
|
|||||||
this.isPatched = isPatched;
|
this.isPatched = isPatched;
|
||||||
|
|
||||||
Logger.get("SubServers").info("Loading SubServers.Sync v" + version.toString() + " Libraries (for Minecraft " + api.getGameVersion()[api.getGameVersion().length - 1] + ")");
|
Logger.get("SubServers").info("Loading SubServers.Sync v" + version.toString() + " Libraries (for Minecraft " + api.getGameVersion()[api.getGameVersion().length - 1] + ")");
|
||||||
|
Util.isException(() -> new CachedPlayer((ProxiedPlayer) null)); // runs <clinit>
|
||||||
|
|
||||||
this.out = out;
|
this.out = out;
|
||||||
if (!(new UniversalFile(dir, "config.yml").exists())) {
|
if (!(new UniversalFile(dir, "config.yml").exists())) {
|
||||||
@ -478,7 +479,7 @@ public final class ExProxy extends BungeeCommon implements Listener {
|
|||||||
ProxiedPlayer p = getPlayer(player.getUniqueId());
|
ProxiedPlayer p = getPlayer(player.getUniqueId());
|
||||||
if (p != null) p.disconnect(new TextComponent(getTranslation("already_connected_proxy")));
|
if (p != null) p.disconnect(new TextComponent(getTranslation("already_connected_proxy")));
|
||||||
} else {
|
} else {
|
||||||
((SubDataClient) api.getSubDataNetwork()[0]).sendPacket(new PacketDisconnectPlayer(player.getUniqueId(), getTranslation("already_connected_proxy")));
|
((SubDataClient) api.getSubDataNetwork()[0]).sendPacket(new PacketDisconnectPlayer(new UUID[]{ player.getUniqueId() }, getTranslation("already_connected_proxy")));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,9 +5,11 @@ import net.ME1312.SubData.Client.Protocol.PacketObjectIn;
|
|||||||
import net.ME1312.SubData.Client.Protocol.PacketObjectOut;
|
import net.ME1312.SubData.Client.Protocol.PacketObjectOut;
|
||||||
import net.ME1312.SubData.Client.SubDataSender;
|
import net.ME1312.SubData.Client.SubDataSender;
|
||||||
import net.ME1312.SubServers.Sync.ExProxy;
|
import net.ME1312.SubServers.Sync.ExProxy;
|
||||||
|
import net.ME1312.SubServers.Sync.Server.ServerImpl;
|
||||||
|
|
||||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -44,25 +46,26 @@ public class PacketExDisconnectPlayer implements PacketObjectIn<Integer>, Packet
|
|||||||
return json;
|
return json;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
@Override
|
@Override
|
||||||
public void receive(SubDataSender client, ObjectMap<Integer> data) {
|
public void receive(SubDataSender client, ObjectMap<Integer> data) {
|
||||||
UUID tracker = (data.contains(0x0000)?data.getUUID(0x0000):null);
|
UUID tracker = (data.contains(0x0000)?data.getUUID(0x0000):null);
|
||||||
|
List<UUID> ids = data.getUUIDList(0x0001);
|
||||||
try {
|
try {
|
||||||
UUID id = data.getUUID(0x0001);
|
int failures = 0;
|
||||||
|
for (UUID id : ids) {
|
||||||
ProxiedPlayer local;
|
ProxiedPlayer local;
|
||||||
if ((local = plugin.getPlayer(id)) != null) {
|
if ((local = plugin.getPlayer(id)) != null) {
|
||||||
if (data.contains(0x0002)) {
|
if (data.contains(0x0002)) {
|
||||||
local.disconnect(data.getRawString(0x0002));
|
local.disconnect(data.getRawString(0x0002));
|
||||||
|
} else local.disconnect();
|
||||||
} else {
|
} else {
|
||||||
local.disconnect();
|
++failures;
|
||||||
}
|
}
|
||||||
client.sendPacket(new PacketExDisconnectPlayer(0, tracker));
|
|
||||||
} else {
|
|
||||||
client.sendPacket(new PacketExDisconnectPlayer(3, tracker));
|
|
||||||
}
|
}
|
||||||
|
client.sendPacket(new PacketExDisconnectPlayer(failures, tracker));
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
client.sendPacket(new PacketExDisconnectPlayer(2, tracker));
|
client.sendPacket(new PacketExDisconnectPlayer(ids.size(), tracker));
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,7 @@ import net.ME1312.SubData.Client.Protocol.PacketObjectOut;
|
|||||||
import net.ME1312.SubData.Client.SubDataSender;
|
import net.ME1312.SubData.Client.SubDataSender;
|
||||||
import net.ME1312.SubServers.Sync.ExProxy;
|
import net.ME1312.SubServers.Sync.ExProxy;
|
||||||
|
|
||||||
|
import net.md_5.bungee.api.ProxyServer;
|
||||||
import net.md_5.bungee.api.chat.BaseComponent;
|
import net.md_5.bungee.api.chat.BaseComponent;
|
||||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||||
import net.md_5.bungee.chat.ComponentSerializer;
|
import net.md_5.bungee.chat.ComponentSerializer;
|
||||||
@ -53,25 +54,42 @@ public class PacketExMessagePlayer implements PacketObjectIn<Integer>, PacketObj
|
|||||||
@Override
|
@Override
|
||||||
public void receive(SubDataSender client, ObjectMap<Integer> data) {
|
public void receive(SubDataSender client, ObjectMap<Integer> data) {
|
||||||
UUID tracker = (data.contains(0x0000)?data.getUUID(0x0000):null);
|
UUID tracker = (data.contains(0x0000)?data.getUUID(0x0000):null);
|
||||||
|
List<UUID> ids = (data.contains(0x0001)?data.getUUIDList(0x0001):null);
|
||||||
try {
|
try {
|
||||||
UUID id = data.getUUID(0x0001);
|
String[] legacy = null;
|
||||||
|
BaseComponent[] components = null;
|
||||||
|
|
||||||
ProxiedPlayer local;
|
|
||||||
if ((local = plugin.getPlayer(id)) != null) {
|
|
||||||
if (data.contains(0x0002))
|
if (data.contains(0x0002))
|
||||||
local.sendMessages(data.getRawStringList(0x0002).toArray(new String[0]));
|
legacy = data.getRawStringList(0x0002).toArray(new String[0]);
|
||||||
if (data.contains(0x0003)) {
|
if (data.contains(0x0003)) {
|
||||||
List<String> messages = data.getRawStringList(0x0003);
|
List<String> messages = data.getRawStringList(0x0003);
|
||||||
LinkedList<BaseComponent> components = new LinkedList<BaseComponent>();
|
LinkedList<BaseComponent> list = new LinkedList<BaseComponent>();
|
||||||
for (String message : messages) components.addAll(Arrays.asList(ComponentSerializer.parse(message)));
|
for (String message : messages) list.addAll(Arrays.asList(ComponentSerializer.parse(message)));
|
||||||
local.sendMessage(components.toArray(new BaseComponent[0]));
|
components = list.toArray(new BaseComponent[0]);
|
||||||
}
|
}
|
||||||
client.sendPacket(new PacketExMessagePlayer(0, tracker));
|
|
||||||
|
int failures = 0;
|
||||||
|
if (ids == null || ids.size() == 0) {
|
||||||
|
if (legacy != null) for (String s : legacy)
|
||||||
|
ProxyServer.getInstance().broadcast(s);
|
||||||
|
if (components != null)
|
||||||
|
ProxyServer.getInstance().broadcast(components);
|
||||||
} else {
|
} else {
|
||||||
client.sendPacket(new PacketExMessagePlayer(3, tracker));
|
for (UUID id : ids) {
|
||||||
|
ProxiedPlayer local;
|
||||||
|
if ((local = ProxyServer.getInstance().getPlayer(id)) != null) {
|
||||||
|
if (legacy != null)
|
||||||
|
local.sendMessages(legacy);
|
||||||
|
if (components != null)
|
||||||
|
local.sendMessage(components);
|
||||||
|
} else {
|
||||||
|
++failures;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
client.sendPacket(new PacketExMessagePlayer(failures, tracker));
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
client.sendPacket(new PacketExMessagePlayer(2, tracker));
|
client.sendPacket(new PacketExMessagePlayer((ids == null || ids.size() == 0)? 1 : ids.size(), tracker));
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -50,27 +50,28 @@ public class PacketExTransferPlayer implements PacketObjectIn<Integer>, PacketOb
|
|||||||
return json;
|
return json;
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
@Override
|
@Override
|
||||||
public void receive(SubDataSender client, ObjectMap<Integer> data) {
|
public void receive(SubDataSender client, ObjectMap<Integer> data) {
|
||||||
UUID tracker = (data.contains(0x0000)?data.getUUID(0x0000):null);
|
UUID tracker = (data.contains(0x0000)?data.getUUID(0x0000):null);
|
||||||
|
List<UUID> ids = data.getUUIDList(0x0001);
|
||||||
try {
|
try {
|
||||||
UUID id = data.getUUID(0x0001);
|
ServerImpl server = plugin.servers.getOrDefault(data.getRawString(0x0002).toLowerCase(), null);
|
||||||
|
if (server != null) {
|
||||||
|
int failures = 0;
|
||||||
|
for (UUID id : ids) {
|
||||||
ProxiedPlayer local;
|
ProxiedPlayer local;
|
||||||
if ((local = plugin.getPlayer(id)) != null) {
|
if ((local = plugin.getPlayer(id)) != null) {
|
||||||
ServerImpl server;
|
|
||||||
if (data.contains(0x0002) && (server = plugin.servers.get(data.getRawString(0x0002).toLowerCase())) != null) {
|
|
||||||
local.connect(server);
|
local.connect(server);
|
||||||
client.sendPacket(new PacketExTransferPlayer(0, tracker));
|
|
||||||
} else {
|
} else {
|
||||||
client.sendPacket(new PacketExTransferPlayer(1, tracker));
|
++failures;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
client.sendPacket(new PacketExTransferPlayer(failures, tracker));
|
||||||
} else {
|
} else {
|
||||||
client.sendPacket(new PacketExTransferPlayer(3, tracker));
|
client.sendPacket(new PacketExTransferPlayer(ids.size(), tracker));
|
||||||
}
|
}
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
client.sendPacket(new PacketExTransferPlayer(2, tracker));
|
client.sendPacket(new PacketExTransferPlayer(ids.size(), tracker));
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,8 +2,10 @@ package net.ME1312.SubServers.Sync.Server;
|
|||||||
|
|
||||||
import net.ME1312.Galaxi.Library.Callback.Callback;
|
import net.ME1312.Galaxi.Library.Callback.Callback;
|
||||||
import net.ME1312.Galaxi.Library.Map.ObjectMap;
|
import net.ME1312.Galaxi.Library.Map.ObjectMap;
|
||||||
|
import net.ME1312.SubData.Client.DataClient;
|
||||||
|
import net.ME1312.SubData.Client.SubDataClient;
|
||||||
|
import net.ME1312.SubServers.Bungee.Library.Compatibility.RPSI;
|
||||||
import net.ME1312.SubServers.Client.Common.Network.API.RemotePlayer;
|
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.ME1312.SubServers.Sync.SubAPI;
|
||||||
|
|
||||||
import net.md_5.bungee.api.ProxyServer;
|
import net.md_5.bungee.api.ProxyServer;
|
||||||
@ -12,9 +14,7 @@ import net.md_5.bungee.api.config.ServerInfo;
|
|||||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||||
import net.md_5.bungee.chat.ComponentSerializer;
|
import net.md_5.bungee.chat.ComponentSerializer;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.*;
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Cached RemotePlayer Data Class
|
* Cached RemotePlayer Data Class
|
||||||
@ -47,27 +47,32 @@ public class CachedPlayer extends RemotePlayer implements net.ME1312.SubServers.
|
|||||||
this(translate(player));
|
this(translate(player));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Cache a Remote Player
|
|
||||||
*
|
|
||||||
* @param player Remote Player
|
|
||||||
*/
|
|
||||||
public CachedPlayer(RemotePlayer player) {
|
|
||||||
this(raw(player));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a Cached Remote Player
|
* Create a Cached Remote Player
|
||||||
*
|
*
|
||||||
* @param raw Raw representation of the Remote Player
|
* @param raw Raw representation of the Remote Player
|
||||||
*/
|
*/
|
||||||
public CachedPlayer(ObjectMap<String> raw) {
|
public CachedPlayer(ObjectMap<String> raw) {
|
||||||
super(raw);
|
this(null, raw);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a Cached Remote Player
|
||||||
|
*
|
||||||
|
* @param client SubData connection
|
||||||
|
* @param raw Raw representation of the Remote Player
|
||||||
|
*/
|
||||||
|
CachedPlayer(DataClient client, ObjectMap<String> raw) {
|
||||||
|
super(client, raw);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ProxiedPlayer get() {
|
public ProxiedPlayer get() {
|
||||||
return ProxyServer.getInstance().getPlayer(getUniqueId());
|
return get(getUniqueId());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static ProxiedPlayer get(UUID player) {
|
||||||
|
return ProxyServer.getInstance().getPlayer(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -76,78 +81,140 @@ public class CachedPlayer extends RemotePlayer implements net.ME1312.SubServers.
|
|||||||
return (name == null)? null : ProxyServer.getInstance().getServerInfo(name);
|
return (name == null)? null : ProxyServer.getInstance().getServerInfo(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
// These overrides prevent sending unnecessary packets
|
static {
|
||||||
|
// These overrides provide for the static methods in BungeeCommon
|
||||||
|
new RPSI() {
|
||||||
|
@Override
|
||||||
|
protected void sendMessage(UUID[] players, String[] messages, Callback<Integer> response) {
|
||||||
|
RemotePlayer.sendMessage(players, messages, response);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendMessage(String[] messages, Callback<Integer> response) {
|
protected void sendMessage(UUID[] players, BaseComponent[] messages, Callback<Integer> response) {
|
||||||
ProxiedPlayer local = get();
|
RemotePlayer.sendRawMessage(players, ComponentSerializer.toString(messages), response);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void transfer(UUID[] players, String server, Callback<Integer> response) {
|
||||||
|
RemotePlayer.transfer(players, server, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void disconnect(UUID[] players, String reason, Callback<Integer> response) {
|
||||||
|
RemotePlayer.disconnect(players, reason, response);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
// These overrides prevent sending unnecessary packets in ClientCommon
|
||||||
|
st4tic = new StaticImpl() {
|
||||||
|
@Override
|
||||||
|
protected RemotePlayer construct(DataClient client, ObjectMap<String> raw) {
|
||||||
|
return new CachedPlayer(client, raw);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void sendMessage(SubDataClient client, UUID[] players, String[] messages, Callback<Integer> response) {
|
||||||
|
if (players != null && players.length > 0) {
|
||||||
|
ArrayList<UUID> ids = new ArrayList<UUID>();
|
||||||
|
for (UUID id : players) {
|
||||||
|
ProxiedPlayer local = get(id);
|
||||||
if (local != null) {
|
if (local != null) {
|
||||||
local.sendMessages(messages);
|
local.sendMessages(messages);
|
||||||
|
} else {
|
||||||
|
ids.add(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ids.size() == 0) {
|
||||||
response.run(0);
|
response.run(0);
|
||||||
} else {
|
} else {
|
||||||
super.sendMessage(messages, response);
|
super.sendMessage(client, ids.toArray(new UUID[0]), messages, response);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
super.sendMessage(client, players, messages, response);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendMessage(BaseComponent[] messages, Callback<Integer> response) {
|
protected void sendRawMessage(SubDataClient client, UUID[] players, String[] messages, Callback<Integer> response) {
|
||||||
ProxiedPlayer local = get();
|
if (players != null && players.length > 0) {
|
||||||
|
ArrayList<UUID> ids = new ArrayList<UUID>();
|
||||||
|
BaseComponent[] components = null;
|
||||||
|
for (UUID id : players) {
|
||||||
|
ProxiedPlayer local = get(id);
|
||||||
if (local != null) {
|
if (local != null) {
|
||||||
local.sendMessage(messages);
|
if (components == null) {
|
||||||
|
LinkedList<BaseComponent> list = new LinkedList<BaseComponent>();
|
||||||
|
for (String message : messages) list.addAll(Arrays.asList(ComponentSerializer.parse(message)));
|
||||||
|
components = list.toArray(new BaseComponent[0]);
|
||||||
|
}
|
||||||
|
local.sendMessage(components);
|
||||||
|
} else {
|
||||||
|
ids.add(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ids.size() == 0) {
|
||||||
response.run(0);
|
response.run(0);
|
||||||
} else {
|
} else {
|
||||||
super.sendRawMessage(new String[]{ComponentSerializer.toString(messages)}, response);
|
super.sendRawMessage(client, ids.toArray(new UUID[0]), messages, response);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
super.sendRawMessage(client, players, messages, response);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendRawMessage(String[] messages, Callback<Integer> response) {
|
protected void transfer(SubDataClient client, UUID[] players, String server, Callback<Integer> response) {
|
||||||
ProxiedPlayer local = get();
|
if (players != null && players.length > 0) {
|
||||||
if (local != null) {
|
ArrayList<UUID> ids = new ArrayList<UUID>();
|
||||||
LinkedList<BaseComponent> components = new LinkedList<BaseComponent>();
|
|
||||||
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<Integer> response) {
|
|
||||||
ProxiedPlayer local = get();
|
|
||||||
if (local != null) {
|
|
||||||
ServerImpl info = SubAPI.getInstance().getInternals().servers.get(server.toLowerCase());
|
ServerImpl info = SubAPI.getInstance().getInternals().servers.get(server.toLowerCase());
|
||||||
|
int failures = 0;
|
||||||
|
for (UUID id : players) {
|
||||||
|
ProxiedPlayer local = get(id);
|
||||||
|
if (local != null) {
|
||||||
if (info != null) {
|
if (info != null) {
|
||||||
local.connect(info);
|
local.connect(info);
|
||||||
response.run(0);
|
} else ++failures;
|
||||||
} else response.run(1);
|
|
||||||
} else {
|
} else {
|
||||||
super.transfer(server, response);
|
ids.add(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ids.size() == 0) {
|
||||||
|
response.run(failures);
|
||||||
|
} else {
|
||||||
|
final int ff = failures;
|
||||||
|
super.transfer(client, ids.toArray(new UUID[0]), server, i -> response.run(i + ff));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
super.transfer(client, players, server, response);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void transfer(ServerInfo server, Callback<Integer> response) {
|
protected void disconnect(SubDataClient client, UUID[] players, String reason, Callback<Integer> response) {
|
||||||
ProxiedPlayer local = get();
|
if (players != null && players.length > 0) {
|
||||||
if (local != null) {
|
ArrayList<UUID> ids = new ArrayList<UUID>();
|
||||||
local.connect(server);
|
for (UUID id : players) {
|
||||||
response.run(0);
|
ProxiedPlayer local = get(id);
|
||||||
} else {
|
|
||||||
super.transfer(server.getName(), response);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void disconnect(String reason, Callback<Integer> response) {
|
|
||||||
ProxiedPlayer local = get();
|
|
||||||
if (local != null) {
|
if (local != null) {
|
||||||
if (reason != null) {
|
if (reason != null) {
|
||||||
local.disconnect(reason);
|
local.disconnect(reason);
|
||||||
} else local.disconnect();
|
} else local.disconnect();
|
||||||
|
} else {
|
||||||
|
ids.add(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ids.size() == 0) {
|
||||||
response.run(0);
|
response.run(0);
|
||||||
} else {
|
} else {
|
||||||
super.disconnect(reason, response);
|
super.disconnect(client, ids.toArray(new UUID[0]), reason, response);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
super.disconnect(client, players, reason, response);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -96,14 +96,6 @@ public final class SubAPI extends ClientAPI implements BungeeAPI {
|
|||||||
return new HashMap<UUID, CachedPlayer>(plugin.rPlayers);
|
return new HashMap<UUID, CachedPlayer>(plugin.rPlayers);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void getRemotePlayers(Callback<Map<UUID, RemotePlayer>> 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)
|
* Gets a player on this network by searching across all known proxies (Cached)
|
||||||
*
|
*
|
||||||
@ -118,11 +110,6 @@ public final class SubAPI extends ClientAPI implements BungeeAPI {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void getRemotePlayer(String name, Callback<RemotePlayer> callback) {
|
|
||||||
super.getRemotePlayer(name, p -> callback.run(new CachedPlayer(p)));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets a player on this network by searching across all known proxies (Cached)
|
* Gets a player on this network by searching across all known proxies (Cached)
|
||||||
*
|
*
|
||||||
@ -134,11 +121,6 @@ public final class SubAPI extends ClientAPI implements BungeeAPI {
|
|||||||
return getRemotePlayers().getOrDefault(id, null);
|
return getRemotePlayers().getOrDefault(id, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void getRemotePlayer(UUID id, Callback<RemotePlayer> callback) {
|
|
||||||
super.getRemotePlayer(id, p -> callback.run(new CachedPlayer(p)));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the SubData Network Connections
|
* Gets the SubData Network Connections
|
||||||
*
|
*
|
||||||
|
Loading…
Reference in New Issue
Block a user