2020-11-14 06:29:29 +01:00
|
|
|
package net.ME1312.SubServers.Client.Common.Network.API;
|
2018-07-01 05:46:58 +02:00
|
|
|
|
2019-05-13 05:28:27 +02:00
|
|
|
import net.ME1312.Galaxi.Library.Callback.Callback;
|
2020-11-14 08:07:25 +01:00
|
|
|
import net.ME1312.Galaxi.Library.Container.ContainedPair;
|
|
|
|
import net.ME1312.Galaxi.Library.Container.Pair;
|
2019-05-13 05:28:27 +02:00
|
|
|
import net.ME1312.Galaxi.Library.Map.ObjectMap;
|
|
|
|
import net.ME1312.Galaxi.Library.Map.ObjectMapValue;
|
2018-09-09 00:06:21 +02:00
|
|
|
import net.ME1312.Galaxi.Library.Util;
|
2020-08-12 02:28:34 +02:00
|
|
|
import net.ME1312.SubData.Client.DataClient;
|
2019-10-19 00:24:58 +02:00
|
|
|
import net.ME1312.SubData.Client.DataSender;
|
|
|
|
import net.ME1312.SubData.Client.Library.ForwardedDataSender;
|
2019-05-13 05:28:27 +02:00
|
|
|
import net.ME1312.SubData.Client.SubDataClient;
|
2019-10-19 00:24:58 +02:00
|
|
|
import net.ME1312.SubData.Client.SubDataSender;
|
2020-11-14 06:29:29 +01:00
|
|
|
import net.ME1312.SubServers.Client.Common.ClientAPI;
|
2020-11-16 21:34:59 +01:00
|
|
|
import net.ME1312.SubServers.Client.Common.Network.Packet.*;
|
2018-07-01 05:46:58 +02:00
|
|
|
|
2019-05-13 05:28:27 +02:00
|
|
|
import java.lang.reflect.InvocationTargetException;
|
2018-07-01 05:46:58 +02:00
|
|
|
import java.net.InetAddress;
|
|
|
|
import java.net.UnknownHostException;
|
|
|
|
import java.util.*;
|
|
|
|
|
2020-08-12 02:28:34 +02:00
|
|
|
/**
|
|
|
|
* Simplified Host Data Class
|
|
|
|
*/
|
2018-07-01 05:46:58 +02:00
|
|
|
public class Host {
|
|
|
|
HashMap<String, SubServer> servers = new HashMap<String, SubServer>();
|
|
|
|
private SubCreator creator;
|
2020-06-12 07:45:49 +02:00
|
|
|
private List<RemotePlayer> players = null;
|
2019-05-13 05:28:27 +02:00
|
|
|
ObjectMap<String> raw;
|
2020-08-12 02:28:34 +02:00
|
|
|
DataClient client;
|
2018-07-01 05:46:58 +02:00
|
|
|
long timestamp;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Create an API representation of a Host
|
|
|
|
*
|
|
|
|
* @param raw Raw representation of the Host
|
|
|
|
*/
|
2019-05-13 05:28:27 +02:00
|
|
|
public Host(ObjectMap<String> raw) {
|
2020-08-12 02:28:34 +02:00
|
|
|
this(null, raw);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Create an API representation of a Host
|
|
|
|
*
|
|
|
|
* @param client SubData connection
|
|
|
|
* @param raw Raw representation of the Host
|
|
|
|
*/
|
|
|
|
Host(DataClient client, ObjectMap<String> raw) {
|
|
|
|
this.client = client;
|
2018-07-01 05:46:58 +02:00
|
|
|
load(raw);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean equals(Object obj) {
|
|
|
|
return obj instanceof Host && getSignature().equals(((Host) obj).getSignature());
|
|
|
|
}
|
|
|
|
|
2019-05-13 05:28:27 +02:00
|
|
|
private void load(ObjectMap<String> raw) {
|
2018-07-01 05:46:58 +02:00
|
|
|
this.raw = raw;
|
2020-06-12 07:45:49 +02:00
|
|
|
this.players = null;
|
2018-07-01 05:46:58 +02:00
|
|
|
this.timestamp = Calendar.getInstance().getTime().getTime();
|
|
|
|
|
|
|
|
servers.clear();
|
2019-05-13 05:28:27 +02:00
|
|
|
this.creator = new SubCreator(this, raw.getMap("creator"));
|
|
|
|
for (String server : raw.getMap("servers").getKeys()) {
|
|
|
|
servers.put(server.toLowerCase(), new SubServer(this, raw.getMap("servers").getMap(server)));
|
2018-07-01 05:46:58 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-08-12 02:28:34 +02:00
|
|
|
private SubDataClient client() {
|
|
|
|
return SimplifiedData.client(client);
|
|
|
|
}
|
|
|
|
|
2018-07-01 05:46:58 +02:00
|
|
|
/**
|
|
|
|
* Download a new copy of the data from SubData
|
|
|
|
*/
|
|
|
|
public void refresh() {
|
|
|
|
String name = getName();
|
2020-08-12 02:28:34 +02:00
|
|
|
client().sendPacket(new PacketDownloadHostInfo(Collections.singletonList(name), data -> load(data.getMap(name))));
|
2018-07-01 05:46:58 +02:00
|
|
|
}
|
|
|
|
|
2018-07-06 05:01:38 +02:00
|
|
|
/**
|
2019-05-13 05:28:27 +02:00
|
|
|
* Gets the SubData Client Channel IDs
|
2018-07-06 05:01:38 +02:00
|
|
|
*
|
2019-05-13 05:28:27 +02:00
|
|
|
* @return SubData Client Channel ID Array (may be empty if unsupported)
|
2018-07-06 05:01:38 +02:00
|
|
|
*/
|
2019-05-14 04:02:38 +02:00
|
|
|
@SuppressWarnings("unchecked")
|
2019-10-19 00:24:58 +02:00
|
|
|
public DataSender[] getSubData() {
|
2019-05-14 04:02:38 +02:00
|
|
|
if (raw.contains("subdata")) {
|
|
|
|
ObjectMap<Integer> subdata = new ObjectMap<Integer>((Map<Integer, ?>) raw.getObject("subdata"));
|
|
|
|
LinkedList<Integer> keys = new LinkedList<Integer>(subdata.getKeys());
|
2019-10-19 00:24:58 +02:00
|
|
|
LinkedList<SubDataSender> channels = new LinkedList<SubDataSender>();
|
2019-05-14 04:02:38 +02:00
|
|
|
Collections.sort(keys);
|
2020-11-14 06:29:29 +01:00
|
|
|
for (Integer channel : keys) channels.add((subdata.isNull(channel))?null:new ForwardedDataSender((SubDataClient) ClientAPI.getInstance().getSubDataNetwork()[0], subdata.getUUID(channel)));
|
2019-10-19 00:24:58 +02:00
|
|
|
return channels.toArray(new SubDataSender[0]);
|
2019-05-14 04:02:38 +02:00
|
|
|
} else {
|
2019-10-19 00:24:58 +02:00
|
|
|
return new SubDataSender[0];
|
2019-05-14 04:02:38 +02:00
|
|
|
}
|
2018-07-06 05:01:38 +02:00
|
|
|
}
|
2018-07-01 05:46:58 +02:00
|
|
|
|
2018-08-30 03:55:59 +02:00
|
|
|
/**
|
|
|
|
* Is this Host Available?
|
|
|
|
*
|
|
|
|
* @return Availability Status
|
|
|
|
*/
|
|
|
|
public boolean isAvailable() {
|
|
|
|
return raw.getBoolean("available");
|
|
|
|
}
|
|
|
|
|
2018-07-01 05:46:58 +02:00
|
|
|
/**
|
|
|
|
* Is this Host Enabled?
|
|
|
|
*
|
|
|
|
* @return Enabled Status
|
|
|
|
*/
|
|
|
|
public boolean isEnabled() {
|
|
|
|
return raw.getBoolean("enabled");
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the Address of this Host
|
|
|
|
*
|
|
|
|
* @return Host Address
|
|
|
|
*/
|
|
|
|
public InetAddress getAddress() {
|
|
|
|
try {
|
|
|
|
return InetAddress.getByName(raw.getRawString("address"));
|
|
|
|
} catch (UnknownHostException e) {
|
|
|
|
throw new IllegalStateException("Invalid address response from raw data key: address");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the host Directory Path
|
|
|
|
*
|
|
|
|
* @return Host Directory Path
|
|
|
|
*/
|
|
|
|
public String getPath() {
|
|
|
|
return raw.getRawString("dir");
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the Name of this Host
|
|
|
|
*
|
|
|
|
* @return Host Name
|
|
|
|
*/
|
|
|
|
public String getName() {
|
|
|
|
return raw.getRawString("name");
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the Display Name of this Host
|
|
|
|
*
|
|
|
|
* @return Display Name
|
|
|
|
*/
|
|
|
|
public String getDisplayName() {
|
|
|
|
return raw.getRawString("display");
|
|
|
|
}
|
|
|
|
|
2020-06-12 07:45:49 +02:00
|
|
|
/**
|
|
|
|
* Get players on servers provided by this host across all known proxies
|
|
|
|
*
|
|
|
|
* @return Remote Player Collection
|
|
|
|
*/
|
2020-11-14 19:12:08 +01:00
|
|
|
public Collection<Pair<String, UUID>> getRemotePlayers() {
|
2020-11-14 08:07:25 +01:00
|
|
|
List<Pair<String, UUID>> players = new ArrayList<Pair<String, UUID>>();
|
2020-06-12 07:45:49 +02:00
|
|
|
for (String id : raw.getMap("players").getKeys()) {
|
2020-11-14 08:07:25 +01:00
|
|
|
players.add(new ContainedPair<String, UUID>(raw.getMap("players").getRawString(id), UUID.fromString(id)));
|
2020-06-12 07:45:49 +02:00
|
|
|
}
|
|
|
|
return players;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the players on servers provided by this host across all known proxies
|
|
|
|
*
|
|
|
|
* @param callback Remote Player Collection
|
|
|
|
*/
|
2020-11-14 19:12:08 +01:00
|
|
|
public void getRemotePlayers(Callback<Collection<RemotePlayer>> callback) {
|
2020-06-12 07:45:49 +02:00
|
|
|
if (Util.isNull(callback)) throw new NullPointerException();
|
|
|
|
StackTraceElement[] origin = new Exception().getStackTrace();
|
|
|
|
Runnable run = () -> {
|
|
|
|
try {
|
|
|
|
callback.run(players);
|
|
|
|
} catch (Throwable e) {
|
|
|
|
Throwable ew = new InvocationTargetException(e);
|
|
|
|
ew.setStackTrace(origin);
|
|
|
|
ew.printStackTrace();
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
if (players == null) {
|
|
|
|
LinkedList<UUID> ids = new LinkedList<UUID>();
|
2020-11-14 19:12:08 +01:00
|
|
|
for (SubServer server : getSubServers().values()) for (Pair<String, UUID> player : server.getRemotePlayers()) ids.add(player.value());
|
2020-08-12 02:28:34 +02:00
|
|
|
client().sendPacket(new PacketDownloadPlayerInfo(ids, data -> {
|
2020-06-12 07:45:49 +02:00
|
|
|
LinkedList<RemotePlayer> players = new LinkedList<RemotePlayer>();
|
|
|
|
for (String player : data.getKeys()) {
|
|
|
|
players.add(new RemotePlayer(data.getMap(player)));
|
|
|
|
}
|
|
|
|
|
|
|
|
this.players = players;
|
|
|
|
run.run();
|
|
|
|
}));
|
|
|
|
} else {
|
|
|
|
run.run();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-07-01 05:46:58 +02:00
|
|
|
/**
|
|
|
|
* Starts the Servers Specified
|
|
|
|
*
|
|
|
|
* @param servers Servers
|
|
|
|
*/
|
|
|
|
public void start(String... servers) {
|
|
|
|
start(null, servers);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Starts the Servers Specified
|
|
|
|
*
|
|
|
|
* @param player Player who started
|
|
|
|
* @param servers Servers
|
|
|
|
*/
|
|
|
|
public void start(UUID player, String... servers) {
|
|
|
|
for (String server : servers) {
|
|
|
|
getSubServer(server.toLowerCase()).start(player);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Stops the Servers Specified
|
|
|
|
*
|
|
|
|
* @param servers Servers
|
|
|
|
*/
|
|
|
|
public void stop(String... servers) {
|
|
|
|
stop(null, servers);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Stops the Servers Specified
|
|
|
|
*
|
|
|
|
* @param player Player who started
|
|
|
|
* @param servers Servers
|
|
|
|
*/
|
|
|
|
public void stop(UUID player, String... servers) {
|
|
|
|
for (String server : servers) {
|
|
|
|
getSubServer(server.toLowerCase()).stop(player);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Terminates the Servers Specified
|
|
|
|
*
|
|
|
|
* @param servers Servers
|
|
|
|
*/
|
|
|
|
public void terminate(String... servers) {
|
|
|
|
terminate(null, servers);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Terminates the Servers Specified
|
|
|
|
*
|
|
|
|
* @param player Player who started
|
|
|
|
* @param servers Servers
|
|
|
|
*/
|
|
|
|
public void terminate(UUID player, String... servers) {
|
|
|
|
for (String server : servers) {
|
|
|
|
getSubServer(server.toLowerCase()).terminate(player);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Commands the Servers Specified
|
|
|
|
*
|
|
|
|
* @param command Command to send
|
|
|
|
* @param servers Servers
|
|
|
|
*/
|
|
|
|
public void command(String command, String... servers) {
|
|
|
|
command(null, command, servers);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Commands the Servers Specified
|
|
|
|
*
|
|
|
|
* @param player Player who started
|
|
|
|
* @param command Command to send
|
|
|
|
* @param servers Servers
|
|
|
|
* @return Success Status
|
|
|
|
*/
|
|
|
|
public void command(UUID player, String command, String... servers) {
|
|
|
|
for (String server : servers) {
|
|
|
|
getSubServer(server.toLowerCase()).command(player, command);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets the SubCreator Instance for this Host
|
|
|
|
*
|
|
|
|
* @return SubCreator
|
|
|
|
*/
|
|
|
|
public SubCreator getCreator() {
|
|
|
|
return creator;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets the SubServers on this Host
|
|
|
|
*
|
|
|
|
* @return SubServer Map
|
|
|
|
*/
|
|
|
|
public Map<String, ? extends SubServer> getSubServers() {
|
|
|
|
return new TreeMap<String, SubServer>(servers);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets a SubServer
|
|
|
|
*
|
|
|
|
* @param name SubServer Name
|
|
|
|
* @return a SubServer
|
|
|
|
*/
|
|
|
|
public SubServer getSubServer(String name) {
|
|
|
|
if (Util.isNull(name)) throw new NullPointerException();
|
|
|
|
return getSubServers().get(name.toLowerCase());
|
|
|
|
}
|
|
|
|
|
2019-05-13 05:28:27 +02:00
|
|
|
/**
|
|
|
|
* Adds a SubServer
|
|
|
|
*
|
|
|
|
* @param name Name of Server
|
|
|
|
* @param enabled Enabled Status
|
|
|
|
* @param port Port Number
|
|
|
|
* @param motd Motd of the Server
|
|
|
|
* @param log Logging Status
|
|
|
|
* @param directory Directory
|
|
|
|
* @param executable Executable String
|
|
|
|
* @param stopcmd Command to Stop the Server
|
|
|
|
* @param hidden if the server should be hidden from players
|
|
|
|
* @param restricted Players will need a permission to join if true
|
|
|
|
* @param response Response Code
|
|
|
|
* @return The SubServer
|
|
|
|
*/
|
|
|
|
public void addSubServer(String name, boolean enabled, int port, String motd, boolean log, String directory, String executable, String stopcmd, boolean hidden, boolean restricted, Callback<Integer> response) {
|
|
|
|
addSubServer(null, name, enabled, port, motd, log, directory, executable, stopcmd, hidden, restricted, response);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Adds a SubServer
|
|
|
|
*
|
|
|
|
* @param player Player adding
|
|
|
|
* @param name Name of Server
|
|
|
|
* @param enabled Enabled Status
|
|
|
|
* @param port Port Number
|
|
|
|
* @param motd Motd of the Server
|
|
|
|
* @param log Logging Status
|
|
|
|
* @param directory Directory
|
|
|
|
* @param executable Executable String
|
|
|
|
* @param stopcmd Command to Stop the Server
|
|
|
|
* @param hidden if the server should be hidden from players
|
|
|
|
* @param restricted Players will need a permission to join if true
|
|
|
|
* @param response Response Code
|
|
|
|
* @return The SubServer
|
|
|
|
*/
|
|
|
|
public void addSubServer(UUID player, String name, boolean enabled, int port, String motd, boolean log, String directory, String executable, String stopcmd, boolean hidden, boolean restricted, Callback<Integer> response) {
|
|
|
|
if (Util.isNull(response)) throw new NullPointerException();
|
|
|
|
StackTraceElement[] origin = new Exception().getStackTrace();
|
2020-08-12 02:28:34 +02:00
|
|
|
client().sendPacket(new PacketAddServer(player, name, enabled, getName(), port, motd, log, directory, executable, stopcmd, hidden, restricted, data -> {
|
2019-05-13 05:28:27 +02:00
|
|
|
try {
|
|
|
|
response.run(data.getInt(0x0001));
|
|
|
|
} catch (Throwable e) {
|
|
|
|
Throwable ew = new InvocationTargetException(e);
|
|
|
|
ew.setStackTrace(origin);
|
|
|
|
ew.printStackTrace();
|
|
|
|
}
|
|
|
|
}));
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Adds a SubServer
|
|
|
|
*
|
|
|
|
* @param name Name of Server
|
|
|
|
* @param enabled Enabled Status
|
|
|
|
* @param port Port Number
|
|
|
|
* @param motd Motd of the Server
|
|
|
|
* @param log Logging Status
|
|
|
|
* @param directory Directory
|
|
|
|
* @param executable Executable String
|
|
|
|
* @param stopcmd Command to Stop the Server
|
|
|
|
* @param hidden if the server should be hidden from players
|
|
|
|
* @param restricted Players will need a permission to join if true
|
|
|
|
* @return The SubServer
|
|
|
|
*/
|
|
|
|
public void addSubServer(String name, boolean enabled, int port, String motd, boolean log, String directory, String executable, String stopcmd, boolean hidden, boolean restricted) {
|
|
|
|
addSubServer(null, name, enabled, port, motd, log, directory, executable, stopcmd, hidden, restricted);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Adds a SubServer
|
|
|
|
*
|
|
|
|
* @param player Player adding
|
|
|
|
* @param name Name of Server
|
|
|
|
* @param enabled Enabled Status
|
|
|
|
* @param port Port Number
|
|
|
|
* @param motd Motd of the Server
|
|
|
|
* @param log Logging Status
|
|
|
|
* @param directory Directory
|
|
|
|
* @param executable Executable String
|
|
|
|
* @param stopcmd Command to Stop the Server
|
|
|
|
* @param hidden if the server should be hidden from players
|
|
|
|
* @param restricted Players will need a permission to join if true
|
|
|
|
* @return The SubServer
|
|
|
|
*/
|
|
|
|
public void addSubServer(UUID player, String name, boolean enabled, int port, String motd, boolean log, String directory, String executable, String stopcmd, boolean hidden, boolean restricted) {
|
|
|
|
addSubServer(player, name, enabled, port, motd, log, directory, executable, stopcmd, hidden, restricted, i -> {});
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Removes a SubServer
|
|
|
|
*
|
|
|
|
* @param name SubServer Name
|
|
|
|
*/
|
2020-06-12 07:45:49 +02:00
|
|
|
public void removeSubServer(String name) {
|
2019-05-13 05:28:27 +02:00
|
|
|
removeSubServer(null, name);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Removes a SubServer
|
|
|
|
*
|
|
|
|
* @param player Player Removing
|
|
|
|
* @param name SubServer Name
|
|
|
|
*/
|
2020-06-12 07:45:49 +02:00
|
|
|
public void removeSubServer(UUID player, String name) {
|
2019-05-13 05:28:27 +02:00
|
|
|
if (Util.isNull(name)) throw new NullPointerException();
|
|
|
|
removeSubServer(player, name, false, i -> {});
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Forces the Removal of a SubServer
|
|
|
|
*
|
|
|
|
* @param name SubServer Name
|
|
|
|
*/
|
2020-06-12 07:45:49 +02:00
|
|
|
public void forceRemoveSubServer(String name) {
|
2019-05-13 05:28:27 +02:00
|
|
|
forceRemoveSubServer(null, name);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2020-08-16 20:30:36 +02:00
|
|
|
* Forces the Removal of a SubServer
|
2019-05-13 05:28:27 +02:00
|
|
|
*
|
|
|
|
* @param player Player Removing
|
|
|
|
* @param name SubServer Name
|
|
|
|
*/
|
|
|
|
public void forceRemoveSubServer(UUID player, String name) {
|
|
|
|
if (Util.isNull(name)) throw new NullPointerException();
|
|
|
|
removeSubServer(player, name, true, i -> {});
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Removes a SubServer
|
|
|
|
*
|
|
|
|
* @param name SubServer Name
|
|
|
|
* @param response Response Code
|
|
|
|
*/
|
2020-06-12 07:45:49 +02:00
|
|
|
public void removeSubServer(String name, Callback<Integer> response) {
|
2019-05-13 05:28:27 +02:00
|
|
|
removeSubServer(null, name, response);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Removes a SubServer
|
|
|
|
*
|
|
|
|
* @param player Player Removing
|
|
|
|
* @param name SubServer Name
|
|
|
|
* @param response Response Code
|
|
|
|
*/
|
2020-06-12 07:45:49 +02:00
|
|
|
public void removeSubServer(UUID player, String name, Callback<Integer> response) {
|
2019-05-13 05:28:27 +02:00
|
|
|
if (Util.isNull(name)) throw new NullPointerException();
|
|
|
|
removeSubServer(player, name, false, response);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Forces the Removal of a SubServer
|
|
|
|
*
|
|
|
|
* @param name SubServer Name
|
|
|
|
* @param response Response Code
|
|
|
|
*/
|
2020-06-12 07:45:49 +02:00
|
|
|
public void forceRemoveSubServer(String name, Callback<Integer> response) {
|
2019-05-13 05:28:27 +02:00
|
|
|
forceRemoveSubServer(null, name, response);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2020-08-16 20:30:36 +02:00
|
|
|
* Forces the Removal of a SubServer
|
2019-05-13 05:28:27 +02:00
|
|
|
*
|
|
|
|
* @param player Player Removing
|
|
|
|
* @param name SubServer Name
|
|
|
|
* @param response Response Code
|
|
|
|
*/
|
|
|
|
public void forceRemoveSubServer(UUID player, String name, Callback<Integer> response) {
|
|
|
|
if (Util.isNull(name)) throw new NullPointerException();
|
|
|
|
removeSubServer(player, name, true, response);
|
|
|
|
}
|
|
|
|
|
|
|
|
private void removeSubServer(UUID player, String name, boolean force, Callback<Integer> response) {
|
|
|
|
if (Util.isNull(response)) throw new NullPointerException();
|
|
|
|
StackTraceElement[] origin = new Exception().getStackTrace();
|
2020-08-12 02:28:34 +02:00
|
|
|
client().sendPacket(new PacketRemoveServer(player, name, force, data -> {
|
2019-05-13 05:28:27 +02:00
|
|
|
try {
|
|
|
|
response.run(data.getInt(0x0001));
|
|
|
|
} catch (Throwable e) {
|
|
|
|
Throwable ew = new InvocationTargetException(e);
|
|
|
|
ew.setStackTrace(origin);
|
|
|
|
ew.printStackTrace();
|
|
|
|
}
|
|
|
|
}));
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2020-08-16 20:30:36 +02:00
|
|
|
* Deletes a SubServer (will move to 'Recently Deleted')
|
2019-05-13 05:28:27 +02:00
|
|
|
*
|
|
|
|
* @param name SubServer Name
|
|
|
|
*/
|
2020-06-12 07:45:49 +02:00
|
|
|
public void recycleSubServer(String name) {
|
2019-05-13 05:28:27 +02:00
|
|
|
recycleSubServer(null, name);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2020-08-16 20:30:36 +02:00
|
|
|
* Deletes a SubServer (will move to 'Recently Deleted')
|
2019-05-13 05:28:27 +02:00
|
|
|
*
|
|
|
|
* @param player Player Deleting
|
|
|
|
* @param name SubServer Name
|
|
|
|
*/
|
2020-06-12 07:45:49 +02:00
|
|
|
public void recycleSubServer(UUID player, String name) {
|
2019-05-13 05:28:27 +02:00
|
|
|
if (Util.isNull(name)) throw new NullPointerException();
|
|
|
|
deleteSubServer(player, name, true, false, i -> {});
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2020-08-16 20:30:36 +02:00
|
|
|
* Forces the Deletion of a SubServer (will move to 'Recently Deleted')
|
2019-05-13 05:28:27 +02:00
|
|
|
*
|
|
|
|
* @param name SubServer Name
|
|
|
|
*/
|
2020-06-12 07:45:49 +02:00
|
|
|
public void forceRecycleSubServer(String name) {
|
2019-05-13 05:28:27 +02:00
|
|
|
forceRecycleSubServer(null, name);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Forces the Deletion of a SubServer (will move to 'Recently Deleted')
|
|
|
|
*
|
|
|
|
* @param player Player Deleting
|
|
|
|
* @param name SubServer Name
|
|
|
|
*/
|
2020-06-12 07:45:49 +02:00
|
|
|
public void forceRecycleSubServer(UUID player, String name) {
|
2019-05-13 05:28:27 +02:00
|
|
|
if (Util.isNull(name)) throw new NullPointerException();
|
|
|
|
deleteSubServer(player, name, true, true, i -> {});
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2020-08-16 20:30:36 +02:00
|
|
|
* Deletes a SubServer (will move to 'Recently Deleted')
|
2019-05-13 05:28:27 +02:00
|
|
|
*
|
|
|
|
* @param name SubServer Name
|
|
|
|
* @param response Response Code
|
|
|
|
*/
|
2020-06-12 07:45:49 +02:00
|
|
|
public void recycleSubServer(String name, Callback<Integer> response) {
|
2019-05-13 05:28:27 +02:00
|
|
|
recycleSubServer(null, name, response);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2020-08-16 20:30:36 +02:00
|
|
|
* Deletes a SubServer (will move to 'Recently Deleted')
|
2019-05-13 05:28:27 +02:00
|
|
|
*
|
|
|
|
* @param player Player Deleting
|
|
|
|
* @param name SubServer Name
|
|
|
|
* @param response Response Code
|
|
|
|
*/
|
2020-06-12 07:45:49 +02:00
|
|
|
public void recycleSubServer(UUID player, String name, Callback<Integer> response) {
|
2019-05-13 05:28:27 +02:00
|
|
|
if (Util.isNull(name)) throw new NullPointerException();
|
|
|
|
deleteSubServer(player, name, true, false, response);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2020-08-16 20:30:36 +02:00
|
|
|
* Forces the Deletion of a SubServer (will move to 'Recently Deleted')
|
2019-05-13 05:28:27 +02:00
|
|
|
*
|
|
|
|
* @param name SubServer Name
|
|
|
|
* @param response Response Code
|
|
|
|
*/
|
2020-06-12 07:45:49 +02:00
|
|
|
public void forceRecycleSubServer(String name, Callback<Integer> response) {
|
2019-05-13 05:28:27 +02:00
|
|
|
forceRecycleSubServer(null, name, response);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Forces the Deletion of a SubServer (will move to 'Recently Deleted')
|
|
|
|
*
|
|
|
|
* @param player Player Deleting
|
|
|
|
* @param name SubServer Name
|
|
|
|
* @param response Response Code
|
|
|
|
*/
|
2020-06-12 07:45:49 +02:00
|
|
|
public void forceRecycleSubServer(UUID player, String name, Callback<Integer> response) {
|
2019-05-13 05:28:27 +02:00
|
|
|
if (Util.isNull(name)) throw new NullPointerException();
|
|
|
|
deleteSubServer(player, name, true, true, response);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2020-08-16 20:30:36 +02:00
|
|
|
* Deletes a SubServer
|
2019-05-13 05:28:27 +02:00
|
|
|
*
|
|
|
|
* @param name SubServer Name
|
|
|
|
* @return Success Status
|
|
|
|
*/
|
2020-06-12 07:45:49 +02:00
|
|
|
public void deleteSubServer(String name) {
|
2019-05-13 05:28:27 +02:00
|
|
|
deleteSubServer(null, name);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2020-08-16 20:30:36 +02:00
|
|
|
* Deletes a SubServer
|
2019-05-13 05:28:27 +02:00
|
|
|
*
|
|
|
|
* @param player Player Deleting
|
|
|
|
* @param name SubServer Name
|
|
|
|
* @return Success Status
|
|
|
|
*/
|
2020-06-12 07:45:49 +02:00
|
|
|
public void deleteSubServer(UUID player, String name) {
|
2019-05-13 05:28:27 +02:00
|
|
|
if (Util.isNull(name)) throw new NullPointerException();
|
|
|
|
deleteSubServer(player, name, false, false, i -> {});
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2020-08-16 20:30:36 +02:00
|
|
|
* Forces the Deletion of a SubServer
|
2019-05-13 05:28:27 +02:00
|
|
|
*
|
|
|
|
* @param name SubServer Name
|
|
|
|
* @return Success Status
|
|
|
|
*/
|
2020-06-12 07:45:49 +02:00
|
|
|
public void forceDeleteSubServer(String name) {
|
2019-05-13 05:28:27 +02:00
|
|
|
forceDeleteSubServer(null, name);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Forces the Deletion of a SubServer
|
|
|
|
*
|
|
|
|
* @param player Player Deleting
|
|
|
|
* @param name SubServer Name
|
|
|
|
* @return Success Status
|
|
|
|
*/
|
2020-06-12 07:45:49 +02:00
|
|
|
public void forceDeleteSubServer(UUID player, String name) {
|
2019-05-13 05:28:27 +02:00
|
|
|
if (Util.isNull(name)) throw new NullPointerException();
|
|
|
|
deleteSubServer(player, name, false, true, i -> {});
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2020-08-16 20:30:36 +02:00
|
|
|
* Deletes a SubServer
|
2019-05-13 05:28:27 +02:00
|
|
|
*
|
|
|
|
* @param name SubServer Name
|
|
|
|
* @return Success Status
|
|
|
|
*/
|
2020-06-12 07:45:49 +02:00
|
|
|
public void deleteSubServer(String name, Callback<Integer> response) {
|
2019-05-13 05:28:27 +02:00
|
|
|
deleteSubServer(null, name, response);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2020-08-16 20:30:36 +02:00
|
|
|
* Deletes a SubServer
|
2019-05-13 05:28:27 +02:00
|
|
|
*
|
|
|
|
* @param player Player Deleting
|
|
|
|
* @param name SubServer Name
|
|
|
|
* @return Success Status
|
|
|
|
*/
|
2020-06-12 07:45:49 +02:00
|
|
|
public void deleteSubServer(UUID player, String name, Callback<Integer> response) {
|
2019-05-13 05:28:27 +02:00
|
|
|
if (Util.isNull(name)) throw new NullPointerException();
|
|
|
|
deleteSubServer(player, name, false, false, response);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2020-08-16 20:30:36 +02:00
|
|
|
* Forces the Deletion of a SubServer
|
2019-05-13 05:28:27 +02:00
|
|
|
*
|
|
|
|
* @param name SubServer Name
|
|
|
|
* @return Success Status
|
|
|
|
*/
|
2020-06-12 07:45:49 +02:00
|
|
|
public void forceDeleteSubServer(String name, Callback<Integer> response) {
|
2019-05-13 05:28:27 +02:00
|
|
|
forceDeleteSubServer(null, name, response);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Forces the Deletion of a SubServer
|
|
|
|
*
|
|
|
|
* @param player Player Deleting
|
|
|
|
* @param name SubServer Name
|
|
|
|
* @return Success Status
|
|
|
|
*/
|
2020-06-12 07:45:49 +02:00
|
|
|
public void forceDeleteSubServer(UUID player, String name, Callback<Integer> response) {
|
2019-05-13 05:28:27 +02:00
|
|
|
if (Util.isNull(name)) throw new NullPointerException();
|
|
|
|
deleteSubServer(player, name, false, true, response);
|
|
|
|
}
|
|
|
|
|
|
|
|
private void deleteSubServer(UUID player, String name, boolean recycle, boolean force, Callback<Integer> response) {
|
|
|
|
if (Util.isNull(response)) throw new NullPointerException();
|
|
|
|
StackTraceElement[] origin = new Exception().getStackTrace();
|
2020-08-12 02:28:34 +02:00
|
|
|
client().sendPacket(new PacketDeleteServer(player, name, recycle, force, data -> {
|
2019-05-13 05:28:27 +02:00
|
|
|
try {
|
|
|
|
response.run(data.getInt(0x0001));
|
|
|
|
} catch (Throwable e) {
|
|
|
|
Throwable ew = new InvocationTargetException(e);
|
|
|
|
ew.setStackTrace(origin);
|
|
|
|
ew.printStackTrace();
|
|
|
|
}
|
|
|
|
}));
|
|
|
|
}
|
|
|
|
|
2018-07-01 05:46:58 +02:00
|
|
|
/**
|
|
|
|
* Get the Signature of this Object
|
|
|
|
*
|
|
|
|
* @return Object Signature
|
|
|
|
*/
|
|
|
|
public final String getSignature() {
|
|
|
|
return raw.getRawString("signature");
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the Timestamp for when the data was last refreshed
|
|
|
|
*
|
|
|
|
* @return Data Timestamp
|
|
|
|
*/
|
|
|
|
public long getTimestamp() {
|
|
|
|
return timestamp;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Determine if an extra value exists
|
|
|
|
*
|
|
|
|
* @param handle Handle
|
|
|
|
* @return Value Status
|
|
|
|
*/
|
|
|
|
public boolean hasExtra(String handle) {
|
|
|
|
if (Util.isNull(handle)) throw new NullPointerException();
|
2019-05-13 05:28:27 +02:00
|
|
|
return raw.getMap("extra").getKeys().contains(handle);
|
2018-07-01 05:46:58 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get an extra value
|
|
|
|
*
|
|
|
|
* @param handle Handle
|
|
|
|
* @return Value
|
|
|
|
*/
|
2019-05-13 05:28:27 +02:00
|
|
|
public ObjectMapValue<String> getExtra(String handle) {
|
2018-07-01 05:46:58 +02:00
|
|
|
if (Util.isNull(handle)) throw new NullPointerException();
|
2019-05-13 05:28:27 +02:00
|
|
|
return raw.getMap("extra").get(handle);
|
2018-07-01 05:46:58 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the extra value section
|
|
|
|
*
|
|
|
|
* @return Extra Value Section
|
|
|
|
*/
|
2019-05-13 05:28:27 +02:00
|
|
|
public ObjectMap<String> getExtra() {
|
|
|
|
return raw.getMap("extra").clone();
|
2018-07-01 05:46:58 +02:00
|
|
|
}
|
|
|
|
|
2018-08-10 06:50:10 +02:00
|
|
|
/**
|
|
|
|
* Get the raw representation of the Host
|
|
|
|
*
|
|
|
|
* @return Raw Host
|
|
|
|
*/
|
2019-05-13 05:28:27 +02:00
|
|
|
public ObjectMap<String> getRaw() {
|
2018-08-10 06:50:10 +02:00
|
|
|
return raw.clone();
|
|
|
|
}
|
2018-07-01 05:46:58 +02:00
|
|
|
}
|