2017-08-27 20:37:25 +02:00
|
|
|
package net.ME1312.SubServers.Bungee.Host;
|
|
|
|
|
2020-11-14 08:07:25 +01:00
|
|
|
import net.ME1312.Galaxi.Library.Container.ContainedPair;
|
2020-11-16 21:34:59 +01:00
|
|
|
import net.ME1312.Galaxi.Library.Container.Pair;
|
2019-04-18 16:02:09 +02:00
|
|
|
import net.ME1312.Galaxi.Library.Map.ObjectMap;
|
2019-06-18 02:20:46 +02:00
|
|
|
import net.ME1312.SubServers.Bungee.Event.SubEditServerEvent;
|
2017-08-27 20:37:25 +02:00
|
|
|
import net.ME1312.SubServers.Bungee.Library.Exception.InvalidServerException;
|
|
|
|
import net.ME1312.SubServers.Bungee.SubAPI;
|
|
|
|
|
|
|
|
import java.io.File;
|
|
|
|
import java.net.InetSocketAddress;
|
2020-06-12 07:45:49 +02:00
|
|
|
import java.net.SocketAddress;
|
2020-11-16 21:34:59 +01:00
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.UUID;
|
2017-08-27 20:37:25 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* SubServer Layout Class
|
|
|
|
*/
|
2020-06-12 07:45:49 +02:00
|
|
|
public abstract class SubServerImpl extends ServerImpl implements SubServer {
|
2020-11-14 08:07:25 +01:00
|
|
|
private List<Pair<String, String>> incompatibilities = new ArrayList<Pair<String, String>>();
|
2020-06-20 03:00:50 +02:00
|
|
|
private SubCreator.ServerTemplate templateV = null;
|
|
|
|
private String templateS = null;
|
2019-06-25 23:13:27 +02:00
|
|
|
protected boolean started;
|
|
|
|
private boolean updating;
|
2017-08-27 20:37:25 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Creates a SubServer
|
|
|
|
*
|
|
|
|
* @param host Host
|
|
|
|
* @param name Server Name
|
|
|
|
* @param port Port Number
|
|
|
|
* @param motd Server MOTD
|
2020-06-12 07:45:49 +02:00
|
|
|
* @param hidden Hidden Status
|
|
|
|
* @param restricted Restricted Status
|
|
|
|
*
|
|
|
|
* @see ServerImpl#ServerImpl(String, SocketAddress, String, boolean, boolean) Super Method 2
|
|
|
|
* @throws InvalidServerException
|
|
|
|
*/
|
|
|
|
protected SubServerImpl(Host host, String name, int port, String motd, boolean hidden, boolean restricted) throws InvalidServerException {
|
|
|
|
super(name, (SocketAddress) new InetSocketAddress(host.getAddress().getHostAddress(), port), motd, hidden, restricted);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Creates a SubServer
|
|
|
|
*
|
|
|
|
* @param host Host
|
|
|
|
* @param name Server Name
|
|
|
|
* @param port Port Number
|
|
|
|
* @param motd Server MOTD
|
|
|
|
* @param hidden Hidden Status
|
|
|
|
* @param restricted Restricted Status
|
|
|
|
*
|
|
|
|
* @see ServerImpl#ServerImpl(String, InetSocketAddress, String, boolean, boolean) Super Method 1
|
2017-08-27 20:37:25 +02:00
|
|
|
* @throws InvalidServerException
|
|
|
|
*/
|
2020-06-12 07:45:49 +02:00
|
|
|
protected SubServerImpl(Host host, String name, Integer port, String motd, boolean hidden, boolean restricted) throws InvalidServerException {
|
2017-08-27 20:37:25 +02:00
|
|
|
super(name, new InetSocketAddress(host.getAddress().getHostAddress(), port), motd, hidden, restricted);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean start() {
|
|
|
|
return start(null);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean stop() {
|
|
|
|
return stop(null);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean terminate() {
|
|
|
|
return terminate(null);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean command(String command) {
|
|
|
|
return command(null, command);
|
|
|
|
}
|
|
|
|
|
2020-08-16 20:30:36 +02:00
|
|
|
public int edit(UUID player, ObjectMap<String> edit) {
|
|
|
|
return edit(player, edit, false);
|
|
|
|
}
|
|
|
|
|
|
|
|
public int permaEdit(UUID player, ObjectMap<String> edit) {
|
|
|
|
return edit(player, edit, true);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Edits the Server
|
|
|
|
*
|
|
|
|
* @param player Player Editing
|
|
|
|
* @param edit Edits
|
|
|
|
* @param perma Saves Changes
|
|
|
|
* @return Success Status
|
|
|
|
*/
|
|
|
|
protected int edit(UUID player, ObjectMap<String> edit, boolean perma) {
|
|
|
|
return -1;
|
2017-08-27 20:37:25 +02:00
|
|
|
}
|
|
|
|
|
2019-06-17 05:13:48 +02:00
|
|
|
@Override
|
|
|
|
public boolean isAvailable() {
|
2019-06-25 23:13:27 +02:00
|
|
|
return !updating && getHost().isAvailable();
|
2019-06-17 05:13:48 +02:00
|
|
|
}
|
|
|
|
|
2020-07-05 04:39:59 +02:00
|
|
|
@Override
|
|
|
|
public boolean isOnline() {
|
|
|
|
return isRunning() && started;
|
|
|
|
}
|
|
|
|
|
2020-06-20 03:00:50 +02:00
|
|
|
@Override
|
|
|
|
public void setTemplate(String template) {
|
2020-11-14 08:07:25 +01:00
|
|
|
SubAPI.getInstance().getInternals().getPluginManager().callEvent(new SubEditServerEvent(null, this, new ContainedPair<String, Object>("template", template), false));
|
2020-06-20 03:00:50 +02:00
|
|
|
this.templateV = null;
|
|
|
|
this.templateS = template;
|
|
|
|
}
|
|
|
|
|
2019-06-17 05:13:48 +02:00
|
|
|
@Override
|
|
|
|
public void setTemplate(SubCreator.ServerTemplate template) {
|
2020-11-14 08:07:25 +01:00
|
|
|
SubAPI.getInstance().getInternals().getPluginManager().callEvent(new SubEditServerEvent(null, this, new ContainedPair<String, Object>("template", (template != null)?template.getName():null), false));
|
2020-06-20 03:00:50 +02:00
|
|
|
this.templateV = template;
|
|
|
|
this.templateS = (template != null)?template.getName():null;
|
2019-06-17 05:13:48 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public SubCreator.ServerTemplate getTemplate() {
|
2020-06-20 03:00:50 +02:00
|
|
|
if (templateV != null) {
|
|
|
|
return templateV;
|
|
|
|
} else if (templateS != null && getHost().getCreator().getTemplates().keySet().contains(templateS.toLowerCase())) {
|
|
|
|
return getHost().getCreator().getTemplate(templateS.toLowerCase());
|
2019-06-17 05:13:48 +02:00
|
|
|
} else {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-08-27 20:37:25 +02:00
|
|
|
@Override
|
|
|
|
public String getFullPath() {
|
|
|
|
return new File(getHost().getPath(), getPath()).getPath();
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void toggleCompatibility(SubServer... server) {
|
|
|
|
for (SubServer s : server) {
|
|
|
|
if (!equals(s)) {
|
2020-11-14 08:07:25 +01:00
|
|
|
Pair<String, String> info = new ContainedPair<String, String>(s.getHost().getName(), s.getName());
|
2017-08-27 20:37:25 +02:00
|
|
|
if (isCompatible(s)) {
|
|
|
|
incompatibilities.add(info);
|
|
|
|
if (s.isCompatible(this)) toggleCompatibility(this);
|
|
|
|
} else {
|
|
|
|
incompatibilities.remove(info);
|
|
|
|
if (!s.isCompatible(this)) toggleCompatibility(this);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean isCompatible(SubServer server) {
|
2020-11-14 08:07:25 +01:00
|
|
|
return !incompatibilities.contains(new ContainedPair<String, String>(server.getHost().getName(), server.getName()));
|
2017-08-27 20:37:25 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public List<SubServer> getIncompatibilities() {
|
|
|
|
List<SubServer> servers = new ArrayList<SubServer>();
|
2020-11-14 08:07:25 +01:00
|
|
|
List<Pair<String, String>> temp = new ArrayList<Pair<String, String>>();
|
2017-08-27 20:37:25 +02:00
|
|
|
temp.addAll(incompatibilities);
|
2020-11-14 08:07:25 +01:00
|
|
|
for (Pair<String, String> info : temp) {
|
2017-08-27 20:37:25 +02:00
|
|
|
try {
|
2020-11-14 08:07:25 +01:00
|
|
|
SubServer server = SubAPI.getInstance().getHost(info.key()).getSubServer(info.value());
|
2017-08-27 20:37:25 +02:00
|
|
|
if (server == null) throw new NullPointerException();
|
|
|
|
servers.add(server);
|
|
|
|
} catch (Throwable e) {
|
|
|
|
incompatibilities.remove(info);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return servers;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public List<SubServer> getCurrentIncompatibilities() {
|
|
|
|
List<SubServer> servers = new ArrayList<SubServer>();
|
|
|
|
for (SubServer server : getIncompatibilities()) {
|
|
|
|
if (server.isRunning()) servers.add(server);
|
|
|
|
}
|
|
|
|
return servers;
|
|
|
|
}
|
|
|
|
|
2018-04-15 03:53:51 +02:00
|
|
|
@SuppressWarnings({"deprecation", "unchecked"})
|
2017-08-27 20:37:25 +02:00
|
|
|
@Override
|
2019-04-18 16:02:09 +02:00
|
|
|
public ObjectMap<String> forSubData() {
|
|
|
|
ObjectMap<String> sinfo = super.forSubData();
|
2018-04-15 03:53:51 +02:00
|
|
|
sinfo.set("type", "SubServer");
|
|
|
|
sinfo.set("host", getHost().getName());
|
2019-06-17 05:13:48 +02:00
|
|
|
sinfo.set("template", (getTemplate() != null)?getTemplate().getName():null);
|
|
|
|
sinfo.set("available", isAvailable());
|
2018-08-30 03:55:59 +02:00
|
|
|
sinfo.set("enabled", isEnabled());
|
2018-04-15 03:53:51 +02:00
|
|
|
sinfo.set("editable", isEditable());
|
|
|
|
sinfo.set("log", isLogging());
|
|
|
|
sinfo.set("dir", getPath());
|
|
|
|
sinfo.set("exec", getExecutable());
|
|
|
|
sinfo.set("running", isRunning());
|
2020-07-05 04:39:59 +02:00
|
|
|
sinfo.set("online", isOnline());
|
2018-04-15 03:53:51 +02:00
|
|
|
sinfo.set("stop-cmd", getStopCommand());
|
2018-08-30 03:55:59 +02:00
|
|
|
sinfo.set("stop-action", getStopAction().toString());
|
2019-04-29 17:05:06 +02:00
|
|
|
sinfo.set("auto-run", SubAPI.getInstance().getInternals().servers.get().getMap("Servers").getMap(getName(), new ObjectMap<String>()).getBoolean("Run-On-Launch", false));
|
2018-03-21 21:45:59 +01:00
|
|
|
List<String> incompatibleCurrent = new ArrayList<String>();
|
2017-08-27 20:37:25 +02:00
|
|
|
List<String> incompatible = new ArrayList<String>();
|
2018-03-21 21:45:59 +01:00
|
|
|
for (SubServer server : getCurrentIncompatibilities()) incompatibleCurrent.add(server.getName());
|
|
|
|
for (SubServer server : getIncompatibilities()) incompatible.add(server.getName());
|
2018-04-15 03:53:51 +02:00
|
|
|
sinfo.set("incompatible", incompatibleCurrent);
|
|
|
|
sinfo.set("incompatible-list", incompatible);
|
2019-04-18 16:02:09 +02:00
|
|
|
return sinfo;
|
2017-08-27 20:37:25 +02:00
|
|
|
}
|
|
|
|
}
|