2016-12-24 05:55:17 +01:00
|
|
|
package net.ME1312.SubServers.Bungee.Host;
|
2016-12-05 04:21:04 +01:00
|
|
|
|
2020-11-16 21:34:59 +01:00
|
|
|
import net.ME1312.Galaxi.Library.ExtraDataHandler;
|
2019-04-18 16:02:09 +02:00
|
|
|
import net.ME1312.Galaxi.Library.Map.ObjectMap;
|
|
|
|
import net.ME1312.Galaxi.Library.Map.ObjectMapValue;
|
2020-11-16 21:34:59 +01:00
|
|
|
import net.ME1312.Galaxi.Library.Util;
|
2021-02-07 09:09:39 +01:00
|
|
|
import net.ME1312.SubServers.Bungee.Library.Compatibility.Logger;
|
2016-12-24 05:55:17 +01:00
|
|
|
import net.ME1312.SubServers.Bungee.Library.Exception.InvalidHostException;
|
|
|
|
import net.ME1312.SubServers.Bungee.Library.Exception.InvalidServerException;
|
2019-04-18 16:02:09 +02:00
|
|
|
import net.ME1312.SubServers.Bungee.SubAPI;
|
2019-08-30 21:44:54 +02:00
|
|
|
import net.ME1312.SubServers.Bungee.SubProxy;
|
2020-11-16 21:34:59 +01:00
|
|
|
|
|
|
|
import com.google.common.collect.Range;
|
2020-06-12 07:45:49 +02:00
|
|
|
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
2016-12-05 04:21:04 +01:00
|
|
|
|
|
|
|
import java.net.InetAddress;
|
2019-08-30 02:01:52 +02:00
|
|
|
import java.util.*;
|
2016-12-05 04:21:04 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Host Layout Class
|
|
|
|
*/
|
2017-01-08 03:30:03 +01:00
|
|
|
public abstract class Host implements ExtraDataHandler {
|
2019-04-18 16:02:09 +02:00
|
|
|
private ObjectMap<String> extra = new ObjectMap<String>();
|
2017-12-10 01:30:06 +01:00
|
|
|
private final String signature;
|
2017-01-26 23:19:48 +01:00
|
|
|
private String nick = null;
|
2016-12-05 04:21:04 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* This constructor is required to launch your host from the drivers list. Do not add or remove any arguments.
|
|
|
|
*
|
|
|
|
* @param plugin SubServers Internals
|
2016-12-15 22:04:39 +01:00
|
|
|
* @param name The Name of your Host
|
2019-01-05 22:04:45 +01:00
|
|
|
* @param ports The range of ports to auto-select from
|
|
|
|
* @param log Whether apps like SubCreator should log to console (does not apply to servers)
|
2016-12-15 22:04:39 +01:00
|
|
|
* @param enabled If your host is Enabled
|
|
|
|
* @param address The address of your Host
|
|
|
|
* @param directory The runtime directory of your Host
|
|
|
|
* @param gitBash The Git Bash directory
|
|
|
|
*/
|
2019-08-30 21:44:54 +02:00
|
|
|
@SuppressWarnings("deprecation")
|
|
|
|
public Host(SubProxy plugin, String name, boolean enabled, Range<Integer> ports, boolean log, InetAddress address, String directory, String gitBash) {
|
2016-12-15 22:04:39 +01:00
|
|
|
if (name.contains(" ")) throw new InvalidHostException("Host names cannot have spaces: " + name);
|
2019-01-05 22:04:45 +01:00
|
|
|
if (!ports.hasLowerBound() || !ports.hasUpperBound()) throw new InvalidHostException("Port range is not bound");
|
|
|
|
if (Util.isNull(plugin, name, enabled, ports, log, address, directory, gitBash)) throw new NullPointerException();
|
2017-12-13 18:29:50 +01:00
|
|
|
signature = plugin.api.signAnonymousObject();
|
2019-08-30 21:44:54 +02:00
|
|
|
SubAPI.getInstance().getInternals().subprotocol.whitelist(address.getHostAddress());
|
2016-12-15 22:04:39 +01:00
|
|
|
}
|
2016-12-05 04:21:04 +01:00
|
|
|
|
2018-08-30 03:55:59 +02:00
|
|
|
/**
|
|
|
|
* Is this Host Available?
|
|
|
|
*
|
|
|
|
* @return Availability Status
|
|
|
|
*/
|
|
|
|
public boolean isAvailable() {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2016-12-05 04:21:04 +01:00
|
|
|
/**
|
|
|
|
* Is this Host Enabled?
|
|
|
|
*
|
|
|
|
* @return Enabled Status
|
|
|
|
*/
|
|
|
|
public abstract boolean isEnabled();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Set if this Host is Enabled
|
|
|
|
*
|
|
|
|
* @param value Value
|
|
|
|
*/
|
|
|
|
public abstract void setEnabled(boolean value);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the Address of this Host
|
|
|
|
*
|
|
|
|
* @return Host Address
|
|
|
|
*/
|
|
|
|
public abstract InetAddress getAddress();
|
|
|
|
|
2016-12-15 22:04:39 +01:00
|
|
|
/**
|
2017-04-24 18:28:16 +02:00
|
|
|
* Get the host Directory Path
|
2016-12-15 22:04:39 +01:00
|
|
|
*
|
2017-04-24 18:28:16 +02:00
|
|
|
* @return Host Directory Path
|
2016-12-15 22:04:39 +01:00
|
|
|
*/
|
2017-04-24 18:28:16 +02:00
|
|
|
public abstract String getPath();
|
2016-12-15 22:04:39 +01:00
|
|
|
|
2016-12-05 04:21:04 +01:00
|
|
|
/**
|
|
|
|
* Get the Name of this Host
|
|
|
|
*
|
|
|
|
* @return Host Name
|
|
|
|
*/
|
|
|
|
public abstract String getName();
|
|
|
|
|
2017-01-26 23:19:48 +01:00
|
|
|
/**
|
|
|
|
* Get the Display Name of this Host
|
|
|
|
*
|
|
|
|
* @return Display Name
|
|
|
|
*/
|
|
|
|
public String getDisplayName() {
|
|
|
|
return (nick == null)?getName():nick;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets the Display Name for this Host
|
|
|
|
*
|
|
|
|
* @param value Value (or null to reset)
|
|
|
|
*/
|
|
|
|
public void setDisplayName(String value) {
|
2017-04-24 18:28:16 +02:00
|
|
|
if (value == null || value.length() == 0 || getName().equals(value)) {
|
|
|
|
this.nick = null;
|
|
|
|
} else {
|
|
|
|
this.nick = value;
|
|
|
|
}
|
2017-01-26 23:19:48 +01:00
|
|
|
}
|
|
|
|
|
2020-06-12 07:45:49 +02:00
|
|
|
/**
|
|
|
|
* Get players on servers provided by this host
|
|
|
|
*
|
|
|
|
* @return Local Player Collection
|
|
|
|
*/
|
|
|
|
public Collection<ProxiedPlayer> getPlayers() {
|
|
|
|
LinkedList<ProxiedPlayer> players = new LinkedList<ProxiedPlayer>();
|
|
|
|
for (SubServer server : getSubServers().values()) {
|
|
|
|
players.addAll(server.getPlayers());
|
|
|
|
}
|
|
|
|
return players;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 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<RemotePlayer> getRemotePlayers() {
|
2020-06-12 07:45:49 +02:00
|
|
|
LinkedList<RemotePlayer> players = new LinkedList<RemotePlayer>();
|
|
|
|
for (SubServer server : getSubServers().values()) {
|
2020-11-14 19:12:08 +01:00
|
|
|
players.addAll(server.getRemotePlayers());
|
2020-06-12 07:45:49 +02:00
|
|
|
}
|
|
|
|
return players;
|
|
|
|
}
|
|
|
|
|
2016-12-05 04:21:04 +01:00
|
|
|
/**
|
|
|
|
* Starts the Servers Specified
|
|
|
|
*
|
|
|
|
* @param servers Servers
|
2016-12-20 00:31:01 +01:00
|
|
|
* @return Success Status
|
2016-12-05 04:21:04 +01:00
|
|
|
*/
|
2016-12-19 01:38:02 +01:00
|
|
|
public int start(String... servers) {
|
|
|
|
return start(null, servers);
|
2016-12-05 04:21:04 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Starts the Servers Specified
|
|
|
|
*
|
|
|
|
* @param player Player who started
|
|
|
|
* @param servers Servers
|
2016-12-20 00:31:01 +01:00
|
|
|
* @return Success Status
|
2016-12-05 04:21:04 +01:00
|
|
|
*/
|
2017-01-30 21:22:36 +01:00
|
|
|
public int start(UUID player, String... servers) {
|
|
|
|
int i = 0;
|
|
|
|
for (String server : servers) {
|
|
|
|
if (getSubServer(server.toLowerCase()).start(player)) i++;
|
|
|
|
}
|
|
|
|
return i;
|
|
|
|
}
|
2016-12-05 04:21:04 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Stops the Servers Specified
|
|
|
|
*
|
|
|
|
* @param servers Servers
|
2016-12-20 00:31:01 +01:00
|
|
|
* @return Success Status
|
2016-12-05 04:21:04 +01:00
|
|
|
*/
|
2016-12-19 01:38:02 +01:00
|
|
|
public int stop(String... servers) {
|
|
|
|
return stop(null, servers);
|
2016-12-05 04:21:04 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Stops the Servers Specified
|
|
|
|
*
|
|
|
|
* @param player Player who started
|
|
|
|
* @param servers Servers
|
2016-12-20 00:31:01 +01:00
|
|
|
* @return Success Status
|
2016-12-05 04:21:04 +01:00
|
|
|
*/
|
2017-01-30 21:22:36 +01:00
|
|
|
public int stop(UUID player, String... servers) {
|
|
|
|
int i = 0;
|
|
|
|
for (String server : servers) {
|
|
|
|
if (getSubServer(server.toLowerCase()).stop(player)) i++;
|
|
|
|
}
|
|
|
|
return i;
|
|
|
|
}
|
2016-12-05 04:21:04 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Terminates the Servers Specified
|
|
|
|
*
|
|
|
|
* @param servers Servers
|
2016-12-20 00:31:01 +01:00
|
|
|
* @return Success Status
|
2016-12-05 04:21:04 +01:00
|
|
|
*/
|
2016-12-19 01:38:02 +01:00
|
|
|
public int terminate(String... servers) {
|
|
|
|
return terminate(null, servers);
|
2016-12-05 04:21:04 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Terminates the Servers Specified
|
|
|
|
*
|
|
|
|
* @param player Player who started
|
|
|
|
* @param servers Servers
|
2016-12-20 00:31:01 +01:00
|
|
|
* @return Success Status
|
2016-12-05 04:21:04 +01:00
|
|
|
*/
|
2017-01-30 21:22:36 +01:00
|
|
|
public int terminate(UUID player, String... servers) {
|
|
|
|
int i = 0;
|
|
|
|
for (String server : servers) {
|
|
|
|
if (getSubServer(server.toLowerCase()).terminate(player)) i++;
|
|
|
|
}
|
|
|
|
return i;
|
|
|
|
}
|
2016-12-05 04:21:04 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Commands the Servers Specified
|
|
|
|
*
|
|
|
|
* @param command Command to send
|
|
|
|
* @param servers Servers
|
2016-12-20 00:31:01 +01:00
|
|
|
* @return Success Status
|
2016-12-05 04:21:04 +01:00
|
|
|
*/
|
2016-12-19 01:38:02 +01:00
|
|
|
public int command(String command, String... servers) {
|
|
|
|
return command(null, command, servers);
|
2016-12-05 04:21:04 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Commands the Servers Specified
|
|
|
|
*
|
|
|
|
* @param player Player who started
|
|
|
|
* @param command Command to send
|
|
|
|
* @param servers Servers
|
2016-12-20 00:31:01 +01:00
|
|
|
* @return Success Status
|
2016-12-05 04:21:04 +01:00
|
|
|
*/
|
2017-01-30 21:22:36 +01:00
|
|
|
public int command(UUID player, String command, String... servers) {
|
|
|
|
int i = 0;
|
|
|
|
for (String server : servers) {
|
|
|
|
if (getSubServer(server.toLowerCase()).command(player, command)) i++;
|
|
|
|
}
|
|
|
|
return i;
|
|
|
|
}
|
2016-12-05 04:21:04 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets the SubCreator Instance for this Host
|
|
|
|
*
|
|
|
|
* @return SubCreator
|
|
|
|
*/
|
|
|
|
public abstract SubCreator getCreator();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets the SubServers on this Host
|
|
|
|
*
|
|
|
|
* @return SubServer Map
|
|
|
|
*/
|
|
|
|
public abstract Map<String, ? extends SubServer> getSubServers();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets a SubServer
|
|
|
|
*
|
|
|
|
* @param name SubServer Name
|
|
|
|
* @return a SubServer
|
|
|
|
*/
|
|
|
|
public abstract SubServer getSubServer(String name);
|
|
|
|
|
|
|
|
/**
|
2021-06-06 07:28:22 +02:00
|
|
|
* Constructs a SubServer (but doesn't add it to the server manager)
|
2016-12-05 04:21:04 +01:00
|
|
|
*
|
|
|
|
* @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
|
2019-01-04 22:51:58 +01:00
|
|
|
* @param executable Executable String
|
2016-12-05 04:21:04 +01:00
|
|
|
* @param stopcmd Command to Stop the Server
|
2016-12-19 01:38:02 +01:00
|
|
|
* @param hidden if the server should be hidden from players
|
2016-12-15 22:04:39 +01:00
|
|
|
* @param restricted Players will need a permission to join if true
|
2016-12-05 04:21:04 +01:00
|
|
|
* @return The SubServer
|
|
|
|
* @throws InvalidServerException
|
|
|
|
*/
|
2021-06-06 07:28:22 +02:00
|
|
|
public abstract SubServer constructSubServer(String name, boolean enabled, int port, String motd, boolean log, String directory, String executable, String stopcmd, boolean hidden, boolean restricted) throws InvalidServerException;
|
2016-12-05 04:21:04 +01: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
|
2019-01-04 22:51:58 +01:00
|
|
|
* @param executable Executable String
|
2016-12-05 04:21:04 +01:00
|
|
|
* @param stopcmd Command to Stop the Server
|
2016-12-19 01:38:02 +01:00
|
|
|
* @param hidden if the server should be hidden from players
|
2016-12-15 22:04:39 +01:00
|
|
|
* @param restricted Players will need a permission to join if true
|
2016-12-05 04:21:04 +01:00
|
|
|
* @return The SubServer
|
|
|
|
* @throws InvalidServerException
|
|
|
|
*/
|
2019-01-04 22:51:58 +01:00
|
|
|
public SubServer addSubServer(String name, boolean enabled, int port, String motd, boolean log, String directory, String executable, String stopcmd, boolean hidden, boolean restricted) throws InvalidServerException {
|
2018-08-30 03:55:59 +02:00
|
|
|
return addSubServer(null, name, enabled, port, motd, log, directory, executable, stopcmd, hidden, restricted);
|
2016-12-05 04:21:04 +01:00
|
|
|
}
|
|
|
|
|
2021-06-06 07:28:22 +02:00
|
|
|
/**
|
|
|
|
* Adds a SubServer
|
|
|
|
*
|
|
|
|
* @param player Player who Added
|
|
|
|
* @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
|
|
|
|
* @throws InvalidServerException
|
|
|
|
*/
|
|
|
|
public SubServer addSubServer(UUID player, String name, boolean enabled, int port, String motd, boolean log, String directory, String executable, String stopcmd, boolean hidden, boolean restricted) throws InvalidServerException {
|
|
|
|
SubServer server = constructSubServer(name, enabled, port, motd, log, directory, executable, stopcmd, hidden, restricted);
|
|
|
|
return (addSubServer(player, server))?server:null;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Adds a SubServer
|
|
|
|
*
|
|
|
|
* @param server SubServer to add
|
|
|
|
* @return Success status
|
|
|
|
*/
|
|
|
|
public boolean addSubServer(SubServer server) throws InvalidServerException {
|
|
|
|
return addSubServer(null, server);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Adds a SubServer
|
|
|
|
*
|
|
|
|
* @param player Player who added
|
|
|
|
* @param server SubServer to add
|
|
|
|
* @return Success status
|
|
|
|
*/
|
|
|
|
public abstract boolean addSubServer(UUID player, SubServer server) throws InvalidServerException;
|
|
|
|
|
2016-12-05 04:21:04 +01:00
|
|
|
/**
|
|
|
|
* Removes a SubServer
|
|
|
|
*
|
|
|
|
* @param name SubServer Name
|
|
|
|
* @throws InterruptedException
|
2016-12-20 00:31:01 +01:00
|
|
|
* @return Success Status
|
|
|
|
*/
|
|
|
|
public boolean removeSubServer(String name) throws InterruptedException {
|
|
|
|
return removeSubServer(null, name);
|
2019-05-09 22:17:15 +02:00
|
|
|
}
|
2016-12-20 00:31:01 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Removes a SubServer
|
|
|
|
*
|
|
|
|
* @param player Player Removing
|
|
|
|
* @param name SubServer Name
|
|
|
|
* @throws InterruptedException
|
|
|
|
* @return Success Status
|
|
|
|
*/
|
2020-08-16 20:30:36 +02:00
|
|
|
public boolean removeSubServer(UUID player, String name) throws InterruptedException {
|
|
|
|
return removeSubServer(player, name, false);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Removes a SubServer
|
|
|
|
*
|
|
|
|
* @param player Player Removing
|
|
|
|
* @param name SubServer Name
|
|
|
|
* @param forced Forces the Removal
|
|
|
|
* @throws InterruptedException
|
|
|
|
* @return Success Status
|
|
|
|
*/
|
|
|
|
protected abstract boolean removeSubServer(UUID player, String name, boolean forced) throws InterruptedException;
|
2016-12-20 00:31:01 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Forces the Removal of a SubServer
|
|
|
|
*
|
|
|
|
* @param name SubServer Name
|
2019-05-09 22:17:15 +02:00
|
|
|
* @return Success Status
|
2016-12-05 04:21:04 +01:00
|
|
|
*/
|
2017-04-01 18:50:09 +02:00
|
|
|
public boolean forceRemoveSubServer(String name) throws InterruptedException {
|
2016-12-20 00:31:01 +01:00
|
|
|
return forceRemoveSubServer(null, name);
|
|
|
|
}
|
2016-12-05 04:21:04 +01:00
|
|
|
|
|
|
|
/**
|
2020-08-16 20:30:36 +02:00
|
|
|
* Forces the Removal of a SubServer
|
2016-12-05 04:21:04 +01:00
|
|
|
*
|
2016-12-20 00:31:01 +01:00
|
|
|
* @param player Player Removing
|
2016-12-05 04:21:04 +01:00
|
|
|
* @param name SubServer Name
|
2019-05-09 22:17:15 +02:00
|
|
|
* @return Success Status
|
2016-12-05 04:21:04 +01:00
|
|
|
*/
|
2020-08-16 20:30:36 +02:00
|
|
|
public boolean forceRemoveSubServer(UUID player, String name) throws InterruptedException {
|
|
|
|
return removeSubServer(player, name, true);
|
|
|
|
}
|
2017-04-01 18:50:09 +02:00
|
|
|
|
2019-04-18 16:02:09 +02:00
|
|
|
/**
|
2020-08-16 20:30:36 +02:00
|
|
|
* Deletes a SubServer (will move to 'Recently Deleted')
|
2019-04-18 16:02:09 +02:00
|
|
|
*
|
|
|
|
* @param name SubServer Name
|
|
|
|
* @return Success Status
|
|
|
|
*/
|
|
|
|
public boolean recycleSubServer(String name) throws InterruptedException {
|
|
|
|
return recycleSubServer(null, name);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2020-08-16 20:30:36 +02:00
|
|
|
* Deletes a SubServer (will move to 'Recently Deleted')
|
|
|
|
*
|
|
|
|
* @param player Player Deleting
|
|
|
|
* @param name SubServer Name
|
|
|
|
* @return Success Status
|
|
|
|
*/
|
|
|
|
public boolean recycleSubServer(UUID player, String name) throws InterruptedException {
|
|
|
|
return recycleSubServer(player, name, false);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Deletes a SubServer (will move to 'Recently Deleted')
|
2019-04-18 16:02:09 +02:00
|
|
|
*
|
|
|
|
* @param player Player Deleting
|
|
|
|
* @param name SubServer Name
|
2020-08-16 20:30:36 +02:00
|
|
|
* @param forced Forces the Deletion
|
2019-04-18 16:02:09 +02:00
|
|
|
* @return Success Status
|
|
|
|
*/
|
2020-08-16 20:30:36 +02:00
|
|
|
protected abstract boolean recycleSubServer(UUID player, String name, boolean forced) throws InterruptedException;
|
2019-04-18 16:02:09 +02:00
|
|
|
|
|
|
|
/**
|
2020-08-16 20:30:36 +02:00
|
|
|
* Forces the Deletion of a SubServer (will move to 'Recently Deleted')
|
2019-04-18 16:02:09 +02:00
|
|
|
*
|
|
|
|
* @param name SubServer Name
|
|
|
|
* @return Success Status
|
|
|
|
*/
|
|
|
|
public boolean forceRecycleSubServer(String name) throws InterruptedException {
|
|
|
|
return forceRecycleSubServer(null, name);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Forces the Deletion of a SubServer (will move to 'Recently Deleted')
|
|
|
|
*
|
|
|
|
* @param player Player Deleting
|
|
|
|
* @param name SubServer Name
|
|
|
|
* @return Success Status
|
|
|
|
*/
|
2020-08-16 20:30:36 +02:00
|
|
|
public boolean forceRecycleSubServer(UUID player, String name) throws InterruptedException {
|
|
|
|
return recycleSubServer(player, name, true);
|
|
|
|
}
|
2019-04-18 16:02:09 +02:00
|
|
|
|
2017-04-01 18:50:09 +02:00
|
|
|
/**
|
2020-08-16 20:30:36 +02:00
|
|
|
* Deletes a SubServer
|
2017-04-01 18:50:09 +02:00
|
|
|
*
|
|
|
|
* @param name SubServer Name
|
|
|
|
* @return Success Status
|
|
|
|
*/
|
|
|
|
public boolean deleteSubServer(String name) throws InterruptedException {
|
|
|
|
return deleteSubServer(null, name);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2020-08-16 20:30:36 +02:00
|
|
|
* Deletes a SubServer
|
|
|
|
*
|
|
|
|
* @param player Player Deleting
|
|
|
|
* @param name SubServer Name
|
|
|
|
* @return Success Status
|
|
|
|
*/
|
|
|
|
public boolean deleteSubServer(UUID player, String name) throws InterruptedException {
|
|
|
|
return deleteSubServer(player, name, false);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Deletes a SubServer
|
2017-04-01 18:50:09 +02:00
|
|
|
*
|
|
|
|
* @param player Player Deleting
|
|
|
|
* @param name SubServer Name
|
2020-08-16 20:30:36 +02:00
|
|
|
* @param forced Forces the Deletion
|
2017-04-01 18:50:09 +02:00
|
|
|
* @return Success Status
|
|
|
|
*/
|
2020-08-16 20:30:36 +02:00
|
|
|
protected abstract boolean deleteSubServer(UUID player, String name, boolean forced) throws InterruptedException;
|
2016-12-05 04:21:04 +01:00
|
|
|
|
2017-04-24 18:28:16 +02:00
|
|
|
/**
|
2020-08-16 20:30:36 +02:00
|
|
|
* Forces the Deletion of a SubServer
|
2017-04-24 18:28:16 +02:00
|
|
|
*
|
|
|
|
* @param name SubServer Name
|
|
|
|
* @return Success Status
|
|
|
|
*/
|
|
|
|
public boolean forceDeleteSubServer(String name) throws InterruptedException {
|
2019-04-18 16:02:09 +02:00
|
|
|
return forceDeleteSubServer(null, name);
|
2017-04-24 18:28:16 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Forces the Deletion of a SubServer
|
|
|
|
*
|
|
|
|
* @param player Player Deleting
|
|
|
|
* @param name SubServer Name
|
|
|
|
* @return Success Status
|
|
|
|
*/
|
2020-08-16 20:30:36 +02:00
|
|
|
public boolean forceDeleteSubServer(UUID player, String name) throws InterruptedException {
|
|
|
|
return deleteSubServer(player, name, true);
|
|
|
|
}
|
2017-04-24 18:28:16 +02:00
|
|
|
|
2019-08-30 02:01:52 +02:00
|
|
|
/**
|
|
|
|
* Resets this Host object
|
|
|
|
*
|
|
|
|
* @return Success Status
|
|
|
|
*/
|
2021-02-07 09:09:39 +01:00
|
|
|
@SuppressWarnings("unchecked")
|
2019-08-30 02:01:52 +02:00
|
|
|
public boolean destroy() {
|
|
|
|
try {
|
2021-02-07 09:09:39 +01:00
|
|
|
Map.Entry<String, SubServer>[] subservers = getSubServers().entrySet().toArray(new Map.Entry[0]);
|
2019-08-30 02:01:52 +02:00
|
|
|
|
2021-02-07 09:09:39 +01:00
|
|
|
for (Map.Entry<String, SubServer> entry : subservers) {
|
|
|
|
if (entry.getValue().isRunning()) Logger.get("SubServers").info("Stopping " + entry.getValue().getName());
|
|
|
|
forceRemoveSubServer(entry.getKey());
|
2019-08-30 02:01:52 +02:00
|
|
|
}
|
|
|
|
getCreator().terminate();
|
|
|
|
getCreator().waitFor();
|
|
|
|
return true;
|
|
|
|
} catch (Exception e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-12-10 01:30:06 +01:00
|
|
|
/**
|
|
|
|
* Get the Signature of this Object
|
|
|
|
*
|
|
|
|
* @return Object Signature
|
|
|
|
*/
|
|
|
|
public final String getSignature() {
|
|
|
|
return signature;
|
|
|
|
}
|
|
|
|
|
2017-01-08 03:30:03 +01:00
|
|
|
@Override
|
|
|
|
public void addExtra(String handle, Object value) {
|
2017-01-30 21:22:36 +01:00
|
|
|
if (Util.isNull(handle, value)) throw new NullPointerException();
|
2017-01-08 03:30:03 +01:00
|
|
|
extra.set(handle, value);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean hasExtra(String handle) {
|
2017-01-30 21:22:36 +01:00
|
|
|
if (Util.isNull(handle)) throw new NullPointerException();
|
2017-01-08 03:30:03 +01:00
|
|
|
return extra.getKeys().contains(handle);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2019-04-18 16:02:09 +02:00
|
|
|
public ObjectMapValue getExtra(String handle) {
|
2017-01-30 21:22:36 +01:00
|
|
|
if (Util.isNull(handle)) throw new NullPointerException();
|
2017-01-08 03:30:03 +01:00
|
|
|
return extra.get(handle);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2019-04-18 16:02:09 +02:00
|
|
|
public ObjectMap<String> getExtra() {
|
2017-01-08 03:30:03 +01:00
|
|
|
return extra.clone();
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void removeExtra(String handle) {
|
2017-01-30 21:22:36 +01:00
|
|
|
if (Util.isNull(handle)) throw new NullPointerException();
|
2017-01-08 03:30:03 +01:00
|
|
|
extra.remove(handle);
|
|
|
|
}
|
2017-07-19 01:28:59 +02:00
|
|
|
|
2019-04-18 16:02:09 +02:00
|
|
|
public ObjectMap<String> forSubData() {
|
|
|
|
ObjectMap<String> hinfo = new ObjectMap<String>();
|
2018-04-15 03:53:51 +02:00
|
|
|
hinfo.set("type", "Host");
|
|
|
|
hinfo.set("name", getName());
|
|
|
|
hinfo.set("display", getDisplayName());
|
2018-08-30 03:55:59 +02:00
|
|
|
hinfo.set("available", isAvailable());
|
2018-04-15 03:53:51 +02:00
|
|
|
hinfo.set("enabled", isEnabled());
|
|
|
|
hinfo.set("address", getAddress().getHostAddress());
|
|
|
|
hinfo.set("dir", getPath());
|
|
|
|
|
2019-04-18 16:02:09 +02:00
|
|
|
ObjectMap<String> cinfo = new ObjectMap<String>();
|
|
|
|
ObjectMap<String> templates = new ObjectMap<String>();
|
2018-01-21 21:45:27 +01:00
|
|
|
for (SubCreator.ServerTemplate template : getCreator().getTemplates().values())
|
2019-04-18 16:02:09 +02:00
|
|
|
templates.set(template.getName(), template.forSubData());
|
2018-04-15 03:53:51 +02:00
|
|
|
cinfo.set("templates", templates);
|
|
|
|
hinfo.set("creator", cinfo);
|
2017-11-22 22:58:33 +01:00
|
|
|
|
2019-04-18 16:02:09 +02:00
|
|
|
ObjectMap<String> servers = new ObjectMap<String>();
|
2017-07-19 01:28:59 +02:00
|
|
|
for (SubServer server : getSubServers().values()) {
|
2019-04-18 16:02:09 +02:00
|
|
|
servers.set(server.getName(), server.forSubData());
|
2017-07-19 01:28:59 +02:00
|
|
|
}
|
2018-04-15 03:53:51 +02:00
|
|
|
hinfo.set("servers", servers);
|
|
|
|
hinfo.set("signature", signature);
|
2018-07-01 05:46:58 +02:00
|
|
|
hinfo.set("extra", getExtra());
|
2019-04-18 16:02:09 +02:00
|
|
|
return hinfo;
|
2017-07-19 01:28:59 +02:00
|
|
|
}
|
2016-12-05 04:21:04 +01:00
|
|
|
}
|