Re-Add local templates to SubServers.Host

Local templates are now stored in `/Templates`

Template cache files are still stored in `/Cache/Templates`

Remote templates are now stored in `/Cache/Remote/Templates`
This commit is contained in:
ME1312 2020-06-19 21:00:50 -04:00
parent 3fc249cf07
commit 0e8bae4187
No known key found for this signature in database
GPG Key ID: FEFFE2F698E88FA8
19 changed files with 334 additions and 169 deletions

View File

@ -3,7 +3,6 @@ package net.ME1312.SubServers.Bungee.Host.External;
import com.google.common.collect.Range; import com.google.common.collect.Range;
import net.ME1312.Galaxi.Library.*; import net.ME1312.Galaxi.Library.*;
import net.ME1312.Galaxi.Library.Callback.Callback; import net.ME1312.Galaxi.Library.Callback.Callback;
import net.ME1312.Galaxi.Library.Callback.ReturnCallback;
import net.ME1312.Galaxi.Library.Container.Container; import net.ME1312.Galaxi.Library.Container.Container;
import net.ME1312.Galaxi.Library.Container.NamedContainer; import net.ME1312.Galaxi.Library.Container.NamedContainer;
import net.ME1312.SubData.Server.SubDataClient; import net.ME1312.SubData.Server.SubDataClient;
@ -14,11 +13,12 @@ import net.ME1312.Galaxi.Library.Config.YAMLConfig;
import net.ME1312.Galaxi.Library.Map.ObjectMap; import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.Galaxi.Library.Version.Version; import net.ME1312.Galaxi.Library.Version.Version;
import net.ME1312.SubServers.Bungee.Library.Compatibility.Logger; import net.ME1312.SubServers.Bungee.Library.Compatibility.Logger;
import net.ME1312.SubServers.Bungee.Library.ReplacementScanner;
import net.ME1312.SubServers.Bungee.Network.Packet.PacketExConfigureHost; import net.ME1312.SubServers.Bungee.Network.Packet.PacketExConfigureHost;
import net.ME1312.SubServers.Bungee.Network.Packet.PacketExCreateServer; import net.ME1312.SubServers.Bungee.Network.Packet.PacketExCreateServer;
import net.ME1312.SubServers.Bungee.Network.Packet.PacketExDownloadTemplates; import net.ME1312.SubServers.Bungee.Network.Packet.PacketExDownloadTemplates;
import net.ME1312.SubServers.Bungee.Network.Packet.PacketExUploadTemplates;
import net.ME1312.SubServers.Bungee.SubAPI; import net.ME1312.SubServers.Bungee.SubAPI;
import net.ME1312.SubServers.Bungee.SubProxy;
import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.ChatColor;
import java.io.File; import java.io.File;
@ -32,6 +32,8 @@ import java.util.*;
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public class ExternalSubCreator extends SubCreator { public class ExternalSubCreator extends SubCreator {
private HashMap<String, ServerTemplate> templates = new HashMap<String, ServerTemplate>(); private HashMap<String, ServerTemplate> templates = new HashMap<String, ServerTemplate>();
private HashMap<String, ServerTemplate> templatesR = new HashMap<String, ServerTemplate>();
private Boolean enableRT = false;
private ExternalHost host; private ExternalHost host;
private Range<Integer> ports; private Range<Integer> ports;
private Container<Boolean> log; private Container<Boolean> log;
@ -59,13 +61,13 @@ public class ExternalSubCreator extends SubCreator {
@Override @Override
public void reload() { public void reload() {
templates.clear(); templatesR.clear();
if (new UniversalFile(host.plugin.dir, "SubServers:Templates").exists()) for (File file : new UniversalFile(host.plugin.dir, "SubServers:Templates").listFiles()) { if (new UniversalFile(host.plugin.dir, "SubServers:Templates").exists()) for (File file : new UniversalFile(host.plugin.dir, "SubServers:Templates").listFiles()) {
try { try {
if (file.isDirectory() && !file.getName().endsWith(".x")) { if (file.isDirectory() && !file.getName().endsWith(".x")) {
ObjectMap<String> config = (new UniversalFile(file, "template.yml").exists())?new YAMLConfig(new UniversalFile(file, "template.yml")).get().getMap("Template", new ObjectMap<String>()):new ObjectMap<String>(); ObjectMap<String> config = (new UniversalFile(file, "template.yml").exists())?new YAMLConfig(new UniversalFile(file, "template.yml")).get().getMap("Template", new ObjectMap<String>()):new ObjectMap<String>();
ServerTemplate template = new ServerTemplate(file.getName(), config.getBoolean("Enabled", true), config.getRawString("Icon", "::NULL::"), file, config.getMap("Build", new ObjectMap<String>()), config.getMap("Settings", new ObjectMap<String>())); ServerTemplate template = new ServerTemplate(file.getName(), config.getBoolean("Enabled", true), config.getRawString("Icon", "::NULL::"), file, config.getMap("Build", new ObjectMap<String>()), config.getMap("Settings", new ObjectMap<String>()));
templates.put(file.getName().toLowerCase(), template); templatesR.put(file.getName().toLowerCase(), template);
if (config.getKeys().contains("Display")) template.setDisplayName(config.getString("Display")); if (config.getKeys().contains("Display")) template.setDisplayName(config.getString("Display"));
} }
} catch (Exception e) { } catch (Exception e) {
@ -74,9 +76,10 @@ public class ExternalSubCreator extends SubCreator {
} }
} }
if (host.available) { if (host.available && !Util.getDespiteException(() -> Util.reflect(SubProxy.class.getDeclaredField("reloading"), host.plugin), false)) {
host.queue(new PacketExConfigureHost(host.plugin, host)); host.queue(new PacketExConfigureHost(host.plugin, host));
host.queue(new PacketExDownloadTemplates(host.plugin, host)); host.queue(new PacketExUploadTemplates(host.plugin));
if (enableRT == null || enableRT) host.queue(new PacketExDownloadTemplates(host.plugin, host));
} }
} }
@ -136,7 +139,7 @@ public class ExternalSubCreator extends SubCreator {
SubServer subserver = host.addSubServer(player, name, server.getBoolean("Enabled"), fport, ChatColor.translateAlternateColorCodes('&', server.getString("Motd")), server.getBoolean("Log"), server.getRawString("Directory"), SubServer subserver = host.addSubServer(player, name, server.getBoolean("Enabled"), fport, ChatColor.translateAlternateColorCodes('&', server.getString("Motd")), server.getBoolean("Log"), server.getRawString("Directory"),
server.getRawString("Executable"), server.getRawString("Stop-Command"), server.getBoolean("Hidden"), server.getBoolean("Restricted")); server.getRawString("Executable"), server.getRawString("Stop-Command"), server.getBoolean("Hidden"), server.getBoolean("Restricted"));
if (server.getString("Display").length() > 0) subserver.setDisplayName(server.getString("Display")); if (server.getString("Display").length() > 0) subserver.setDisplayName(server.getString("Display"));
subserver.setTemplate(getTemplate(server.getRawString("Template"))); subserver.setTemplate(server.getRawString("Template"));
for (String group : server.getStringList("Group")) subserver.addGroup(group); for (String group : server.getStringList("Group")) subserver.addGroup(group);
SubServer.StopAction action = Util.getDespiteException(() -> SubServer.StopAction.valueOf(server.getRawString("Stop-Action").toUpperCase().replace('-', '_').replace(' ', '_')), null); SubServer.StopAction action = Util.getDespiteException(() -> SubServer.StopAction.valueOf(server.getRawString("Stop-Action").toUpperCase().replace('-', '_').replace(' ', '_')), null);
if (action != null) subserver.setStopAction(action); if (action != null) subserver.setStopAction(action);
@ -315,7 +318,10 @@ public class ExternalSubCreator extends SubCreator {
@Override @Override
public Map<String, ServerTemplate> getTemplates() { public Map<String, ServerTemplate> getTemplates() {
return new TreeMap<String, ServerTemplate>(templates); TreeMap<String, ServerTemplate> map = new TreeMap<String, ServerTemplate>();
if (enableRT != null && enableRT) map.putAll(templatesR);
map.putAll(templates);
return map;
} }
@Override @Override

View File

@ -4,7 +4,6 @@ import com.google.common.collect.Range;
import com.google.gson.Gson; import com.google.gson.Gson;
import net.ME1312.Galaxi.Library.*; import net.ME1312.Galaxi.Library.*;
import net.ME1312.Galaxi.Library.Callback.Callback; import net.ME1312.Galaxi.Library.Callback.Callback;
import net.ME1312.Galaxi.Library.Callback.ReturnCallback;
import net.ME1312.Galaxi.Library.Config.YAMLSection; import net.ME1312.Galaxi.Library.Config.YAMLSection;
import net.ME1312.Galaxi.Library.Container.Container; import net.ME1312.Galaxi.Library.Container.Container;
import net.ME1312.Galaxi.Library.Container.NamedContainer; import net.ME1312.Galaxi.Library.Container.NamedContainer;
@ -295,7 +294,7 @@ public class InternalSubCreator extends SubCreator {
subserver = host.addSubServer(player, name, server.getBoolean("Enabled"), port, ChatColor.translateAlternateColorCodes('&', server.getString("Motd")), server.getBoolean("Log"), server.getRawString("Directory"), subserver = host.addSubServer(player, name, server.getBoolean("Enabled"), port, ChatColor.translateAlternateColorCodes('&', server.getString("Motd")), server.getBoolean("Log"), server.getRawString("Directory"),
server.getRawString("Executable"), server.getRawString("Stop-Command"), server.getBoolean("Hidden"), server.getBoolean("Restricted")); server.getRawString("Executable"), server.getRawString("Stop-Command"), server.getBoolean("Hidden"), server.getBoolean("Restricted"));
if (server.getString("Display").length() > 0) subserver.setDisplayName(server.getString("Display")); if (server.getString("Display").length() > 0) subserver.setDisplayName(server.getString("Display"));
subserver.setTemplate(getTemplate(server.getRawString("Template"))); subserver.setTemplate(server.getRawString("Template"));
for (String group : server.getStringList("Group")) subserver.addGroup(group); for (String group : server.getStringList("Group")) subserver.addGroup(group);
SubServer.StopAction action = Util.getDespiteException(() -> SubServer.StopAction.valueOf(server.getRawString("Stop-Action").toUpperCase().replace('-', '_').replace(' ', '_')), null); SubServer.StopAction action = Util.getDespiteException(() -> SubServer.StopAction.valueOf(server.getRawString("Stop-Action").toUpperCase().replace('-', '_').replace(' ', '_')), null);
if (action != null) subserver.setStopAction(action); if (action != null) subserver.setStopAction(action);

View File

@ -240,6 +240,13 @@ public interface SubServer extends Server {
*/ */
void setTemplate(SubCreator.ServerTemplate value); void setTemplate(SubCreator.ServerTemplate value);
/**
* Sets the Template this Server was created from
*
* @param value Value
*/
void setTemplate(String value);
/** /**
* Is this Host Available? * Is this Host Available?
* *

View File

@ -16,7 +16,8 @@ import java.util.*;
*/ */
public abstract class SubServerImpl extends ServerImpl implements SubServer { public abstract class SubServerImpl extends ServerImpl implements SubServer {
private List<NamedContainer<String, String>> incompatibilities = new ArrayList<NamedContainer<String, String>>(); private List<NamedContainer<String, String>> incompatibilities = new ArrayList<NamedContainer<String, String>>();
private String template = null; private SubCreator.ServerTemplate templateV = null;
private String templateS = null;
protected boolean started; protected boolean started;
private boolean updating; private boolean updating;
@ -84,16 +85,26 @@ public abstract class SubServerImpl extends ServerImpl implements SubServer {
return !updating && getHost().isAvailable(); return !updating && getHost().isAvailable();
} }
@Override
public void setTemplate(String template) {
SubAPI.getInstance().getInternals().getPluginManager().callEvent(new SubEditServerEvent(null, this, new NamedContainer<String, Object>("template", template), false));
this.templateV = null;
this.templateS = template;
}
@Override @Override
public void setTemplate(SubCreator.ServerTemplate template) { public void setTemplate(SubCreator.ServerTemplate template) {
SubAPI.getInstance().getInternals().getPluginManager().callEvent(new SubEditServerEvent(null, this, new NamedContainer<String, Object>("template", (template != null)?template.getName():null), false)); SubAPI.getInstance().getInternals().getPluginManager().callEvent(new SubEditServerEvent(null, this, new NamedContainer<String, Object>("template", (template != null)?template.getName():null), false));
this.template = (template != null)?template.getName():null; this.templateV = template;
this.templateS = (template != null)?template.getName():null;
} }
@Override @Override
public SubCreator.ServerTemplate getTemplate() { public SubCreator.ServerTemplate getTemplate() {
if (template != null && getHost().getCreator().getTemplates().keySet().contains(template.toLowerCase())) { if (templateV != null) {
return getHost().getCreator().getTemplate(template.toLowerCase()); return templateV;
} else if (templateS != null && getHost().getCreator().getTemplates().keySet().contains(templateS.toLowerCase())) {
return getHost().getCreator().getTemplate(templateS.toLowerCase());
} else { } else {
return null; return null;
} }

View File

@ -1,17 +1,18 @@
package net.ME1312.SubServers.Bungee.Network.Packet; package net.ME1312.SubServers.Bungee.Network.Packet;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.SubData.Server.Protocol.PacketObjectIn;
import net.ME1312.SubServers.Bungee.Host.External.ExternalHost; import net.ME1312.SubServers.Bungee.Host.External.ExternalHost;
import net.ME1312.SubServers.Bungee.Host.SubCreator; import net.ME1312.SubServers.Bungee.Host.External.ExternalSubCreator;
import net.ME1312.Galaxi.Library.Map.ObjectMap; import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.SubData.Server.SubDataClient; import net.ME1312.SubData.Server.SubDataClient;
import net.ME1312.SubData.Server.Protocol.PacketIn;
import net.ME1312.SubData.Server.Protocol.PacketObjectOut; import net.ME1312.SubData.Server.Protocol.PacketObjectOut;
import net.ME1312.SubServers.Bungee.SubProxy; import net.ME1312.SubServers.Bungee.SubProxy;
/** /**
* External Host Configuration Packet * External Host Configuration Packet
*/ */
public class PacketExConfigureHost implements PacketIn, PacketObjectOut<Integer> { public class PacketExConfigureHost implements PacketObjectIn<Integer>, PacketObjectOut<Integer> {
private SubProxy plugin; private SubProxy plugin;
private ExternalHost host; private ExternalHost host;
@ -34,25 +35,15 @@ public class PacketExConfigureHost implements PacketIn, PacketObjectOut<Integer>
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, plugin.config.get().getMap("Hosts").getMap(host.getName()).clone()); data.set(0x0000, plugin.config.get().getMap("Hosts").getMap(host.getName()).clone());
ObjectMap<String> templates = new ObjectMap<String>();
for (SubCreator.ServerTemplate template : host.getCreator().getTemplates().values()) {
ObjectMap<String> tinfo = new ObjectMap<String>();
tinfo.set("enabled", template.isEnabled());
tinfo.set("display", template.getDisplayName());
tinfo.set("icon", template.getIcon());
tinfo.set("build", template.getBuildOptions().clone());
tinfo.set("settings", template.getConfigOptions().clone());
templates.set(template.getName(), tinfo);
}
data.set(0x0001, templates);
return data; return data;
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@Override @Override
public void receive(SubDataClient client) { public void receive(SubDataClient client, ObjectMap<Integer> data) {
if (client.getHandler() != null && client.getHandler() instanceof ExternalHost && plugin.config.get().getMap("Hosts").getKeys().contains(((ExternalHost) client.getHandler()).getName())) { if (client.getHandler() != null && client.getHandler() instanceof ExternalHost && plugin.config.get().getMap("Hosts").getKeys().contains(((ExternalHost) client.getHandler()).getName())) {
client.sendPacket(new PacketExConfigureHost(plugin, (ExternalHost) client.getHandler())); client.sendPacket(new PacketExConfigureHost(plugin, (ExternalHost) client.getHandler()));
Util.isException(() -> Util.reflect(ExternalSubCreator.class.getDeclaredField("enableRT"), ((ExternalHost) client.getHandler()).getCreator(), ((data == null || data.getBoolean(0x0000, false))?null:false)));
} }
} }

View File

@ -6,6 +6,7 @@ import net.ME1312.Galaxi.Library.Util;
import net.ME1312.SubData.Server.SubDataClient; import net.ME1312.SubData.Server.SubDataClient;
import net.ME1312.SubData.Server.Protocol.PacketIn; import net.ME1312.SubData.Server.Protocol.PacketIn;
import net.ME1312.SubData.Server.Protocol.PacketStreamOut; import net.ME1312.SubData.Server.Protocol.PacketStreamOut;
import net.ME1312.SubServers.Bungee.Host.External.ExternalSubCreator;
import net.ME1312.SubServers.Bungee.Library.Compatibility.Logger; import net.ME1312.SubServers.Bungee.Library.Compatibility.Logger;
import net.ME1312.SubServers.Bungee.SubProxy; import net.ME1312.SubServers.Bungee.SubProxy;
@ -38,6 +39,8 @@ public class PacketExDownloadTemplates implements PacketIn, PacketStreamOut {
try { try {
Util.zip(new UniversalFile(plugin.dir, "SubServers:Templates"), stream); Util.zip(new UniversalFile(plugin.dir, "SubServers:Templates"), stream);
stream.close(); stream.close();
Util.isException(() -> Util.reflect(ExternalSubCreator.class.getDeclaredField("enableRT"), host.getCreator(), true));
} catch (Exception e) { } catch (Exception e) {
Logger.get("SubData").info("Problem encoding template files for Host: " + host.getName()); Logger.get("SubData").info("Problem encoding template files for Host: " + host.getName());
e.printStackTrace(); e.printStackTrace();

View File

@ -0,0 +1,58 @@
package net.ME1312.SubServers.Bungee.Network.Packet;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.Galaxi.Library.UniversalFile;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.SubData.Server.Protocol.PacketObjectIn;
import net.ME1312.SubData.Server.Protocol.PacketOut;
import net.ME1312.SubData.Server.SubDataClient;
import net.ME1312.SubServers.Bungee.Host.External.ExternalHost;
import net.ME1312.SubServers.Bungee.Host.External.ExternalSubCreator;
import net.ME1312.SubServers.Bungee.Host.SubCreator;
import net.ME1312.SubServers.Bungee.SubProxy;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Logger;
/**
* External Host Template Upload Packet
*/
public class PacketExUploadTemplates implements PacketObjectIn<Integer>, PacketOut {
private SubProxy plugin;
/**
* New PacketExUploadTemplates
*/
public PacketExUploadTemplates(SubProxy plugin) {
this.plugin = plugin;
}
@SuppressWarnings("unchecked")
@Override
public void receive(SubDataClient client, ObjectMap<Integer> data) {
if (client.getHandler() != null && client.getHandler() instanceof ExternalHost) {
HashMap<String, SubCreator.ServerTemplate> map = Util.getDespiteException(() -> Util.reflect(ExternalSubCreator.class.getDeclaredField("templates"), ((ExternalHost) client.getHandler()).getCreator()), new HashMap<>());
UniversalFile templatedir = new UniversalFile(plugin.dir, "SubServers:Cache:Remote:Templates");
ObjectMap<String> templates = new ObjectMap<>((Map<String, ?>) data.getObject(0x0000));
templatedir.mkdirs();
for (String name : templates.getKeys()) {
try {
UniversalFile dir = new UniversalFile(templatedir, name);
SubCreator.ServerTemplate template = new SubCreator.ServerTemplate(name, templates.getMap(name).getBoolean("enabled"), templates.getMap(name).getRawString("icon"), dir,
templates.getMap(name).getMap("build").clone(), templates.getMap(name).getMap("settings").clone());
map.put(name.toLowerCase(), template);
if (!templates.getMap(name).getRawString("display").equals(name)) template.setDisplayName(templates.getMap(name).getRawString("display"));
} catch (Exception e) {
Logger.getLogger("SubServers").severe("Couldn't load template: " + name);
e.printStackTrace();
}
}
}
}
@Override
public int version() {
return 0x0001;
}
}

View File

@ -96,26 +96,28 @@ public class SubProtocol extends SubDataProtocol {
// 50-6F: External Host Packets // 50-6F: External Host Packets
instance.registerPacket(0x0050, PacketExConfigureHost.class); instance.registerPacket(0x0050, PacketExConfigureHost.class);
instance.registerPacket(0x0051, PacketExDownloadTemplates.class); instance.registerPacket(0x0051, PacketExUploadTemplates.class);
//instance.registerPacket(0x0052, PacketInExRequestQueue.class); instance.registerPacket(0x0052, PacketExDownloadTemplates.class);
instance.registerPacket(0x0053, PacketExCreateServer.class); //instance.registerPacket(0x0053, PacketInExRequestQueue.class);
instance.registerPacket(0x0054, PacketExAddServer.class); instance.registerPacket(0x0054, PacketExCreateServer.class);
instance.registerPacket(0x0055, PacketExEditServer.class); instance.registerPacket(0x0055, PacketExAddServer.class);
//instance.registerPacket(0x0056, PacketInExLogMessage.class); instance.registerPacket(0x0056, PacketExEditServer.class);
instance.registerPacket(0x0057, PacketExRemoveServer.class); //instance.registerPacket(0x0057, PacketInExLogMessage.class);
instance.registerPacket(0x0058, PacketExDeleteServer.class); instance.registerPacket(0x0058, PacketExRemoveServer.class);
//instance.registerPacket(0x0059, PacketExRestoreServer.class); instance.registerPacket(0x0059, PacketExDeleteServer.class);
//instance.registerPacket(0x005A, PacketExRestoreServer.class);
instance.registerPacket(0x0050, new PacketExConfigureHost(plugin)); instance.registerPacket(0x0050, new PacketExConfigureHost(plugin));
instance.registerPacket(0x0051, new PacketExDownloadTemplates(plugin)); instance.registerPacket(0x0051, new PacketExUploadTemplates(plugin));
instance.registerPacket(0x0052, new PacketInExRequestQueue(plugin)); instance.registerPacket(0x0052, new PacketExDownloadTemplates(plugin));
instance.registerPacket(0x0053, new PacketExCreateServer(null)); instance.registerPacket(0x0053, new PacketInExRequestQueue(plugin));
instance.registerPacket(0x0054, new PacketExAddServer()); instance.registerPacket(0x0054, new PacketExCreateServer(null));
instance.registerPacket(0x0055, new PacketExEditServer(plugin)); instance.registerPacket(0x0055, new PacketExAddServer());
instance.registerPacket(0x0056, new PacketInExLogMessage()); instance.registerPacket(0x0056, new PacketExEditServer(plugin));
instance.registerPacket(0x0057, new PacketExRemoveServer()); instance.registerPacket(0x0057, new PacketInExLogMessage());
instance.registerPacket(0x0058, new PacketExDeleteServer()); instance.registerPacket(0x0058, new PacketExRemoveServer());
//instance.registerPacket(0x0059, new PacketExRestoreServer()); instance.registerPacket(0x0059, new PacketExDeleteServer());
//instance.registerPacket(0x005A, new PacketExRestoreServer());
// 70-7F: External Misc Packets // 70-7F: External Misc Packets

View File

@ -83,6 +83,7 @@ public final class SubProxy extends BungeeCord implements Listener {
public final boolean isGalaxi; public final boolean isGalaxi;
public long resetDate = 0; public long resetDate = 0;
private boolean running = false; private boolean running = false;
private boolean reloading = false;
private boolean posted = false; private boolean posted = false;
private static BigInteger lastSignature = BigInteger.valueOf(-1); private static BigInteger lastSignature = BigInteger.valueOf(-1);
@ -284,6 +285,7 @@ public final class SubProxy extends BungeeCord implements Listener {
long begin = Calendar.getInstance().getTime().getTime(); long begin = Calendar.getInstance().getTime().getTime();
boolean status; boolean status;
if (!(status = running)) resetDate = begin; if (!(status = running)) resetDate = begin;
reloading = true;
ConfigUpdater.updateConfig(new UniversalFile(dir, "SubServers:config.yml")); ConfigUpdater.updateConfig(new UniversalFile(dir, "SubServers:config.yml"));
ConfigUpdater.updateServers(new UniversalFile(dir, "SubServers:servers.yml")); ConfigUpdater.updateServers(new UniversalFile(dir, "SubServers:servers.yml"));
@ -505,7 +507,7 @@ public final class SubProxy extends BungeeCord implements Listener {
if (this.servers.get().getMap("Servers").getMap(name).getKeys().contains("Display") && ((this.servers.get().getMap("Servers").getMap(name).getRawString("Display").length() == 0 && !server.getName().equals(server.getDisplayName())) || (this.servers.get().getMap("Servers").getMap(name).getRawString("Display").length() > 0 && !this.servers.get().getMap("Servers").getMap(name).getRawString("Display").equals(server.getDisplayName())))) if (this.servers.get().getMap("Servers").getMap(name).getKeys().contains("Display") && ((this.servers.get().getMap("Servers").getMap(name).getRawString("Display").length() == 0 && !server.getName().equals(server.getDisplayName())) || (this.servers.get().getMap("Servers").getMap(name).getRawString("Display").length() > 0 && !this.servers.get().getMap("Servers").getMap(name).getRawString("Display").equals(server.getDisplayName()))))
server.setDisplayName(this.servers.get().getMap("Servers").getMap(name).getRawString("Display")); server.setDisplayName(this.servers.get().getMap("Servers").getMap(name).getRawString("Display"));
if (this.servers.get().getMap("Servers").getMap(name).getKeys().contains("Template") && ((this.servers.get().getMap("Servers").getMap(name).getRawString("Template").length() == 0 && server.getTemplate() != null) || (this.servers.get().getMap("Servers").getMap(name).getRawString("Template").length() > 0 && server.getTemplate() == null) || (server.getTemplate() != null && !this.servers.get().getMap("Servers").getMap(name).getString("Template").equalsIgnoreCase(server.getTemplate().getName())))) if (this.servers.get().getMap("Servers").getMap(name).getKeys().contains("Template") && ((this.servers.get().getMap("Servers").getMap(name).getRawString("Template").length() == 0 && server.getTemplate() != null) || (this.servers.get().getMap("Servers").getMap(name).getRawString("Template").length() > 0 && server.getTemplate() == null) || (server.getTemplate() != null && !this.servers.get().getMap("Servers").getMap(name).getString("Template").equalsIgnoreCase(server.getTemplate().getName()))))
server.setTemplate(server.getHost().getCreator().getTemplate(this.servers.get().getMap("Servers").getMap(name).getString("Template"))); server.setTemplate(this.servers.get().getMap("Servers").getMap(name).getRawString("Template"));
if (this.servers.get().getMap("Servers").getMap(name).getKeys().contains("Group")) { if (this.servers.get().getMap("Servers").getMap(name).getKeys().contains("Group")) {
for (String group : server.getGroups()) server.removeGroup(group); for (String group : server.getGroups()) server.removeGroup(group);
for (String group : this.servers.get().getMap("Servers").getMap(name).getStringList("Group")) server.addGroup(group); for (String group : this.servers.get().getMap("Servers").getMap(name).getStringList("Group")) server.addGroup(group);
@ -609,6 +611,7 @@ public final class SubProxy extends BungeeCord implements Listener {
for (Server server : api.getServers().values()) if (server.getSubData()[0] != null) ((SubDataClient) server.getSubData()[0]).sendPacket(new PacketOutExReload(null)); for (Server server : api.getServers().values()) if (server.getSubData()[0] != null) ((SubDataClient) server.getSubData()[0]).sendPacket(new PacketOutExReload(null));
} }
reloading = false;
Logger.get("SubServers").info(((plugins > 0)?plugins+" Plugin"+((plugins == 1)?"":"s")+", ":"") + ((proxies > 1)?proxies+" Proxies, ":"") + hosts + " Host"+((hosts == 1)?"":"s")+", " + servers + " Server"+((servers == 1)?"":"s")+", and " + subservers + " SubServer"+((subservers == 1)?"":"s")+" "+((status)?"re":"")+"loaded in " + new DecimalFormat("0.000").format((Calendar.getInstance().getTime().getTime() - begin) / 1000D) + "s"); Logger.get("SubServers").info(((plugins > 0)?plugins+" Plugin"+((plugins == 1)?"":"s")+", ":"") + ((proxies > 1)?proxies+" Proxies, ":"") + hosts + " Host"+((hosts == 1)?"":"s")+", " + servers + " Server"+((servers == 1)?"":"s")+", and " + subservers + " SubServer"+((subservers == 1)?"":"s")+" "+((status)?"re":"")+"loaded in " + new DecimalFormat("0.000").format((Calendar.getInstance().getTime().getTime() - begin) / 1000D) + "s");
long scd = TimeUnit.SECONDS.toMillis(this.servers.get().getMap("Settings").getLong("Run-On-Launch-Timeout", 0L)); long scd = TimeUnit.SECONDS.toMillis(this.servers.get().getMap("Settings").getLong("Run-On-Launch-Timeout", 0L));

View File

@ -104,14 +104,14 @@ public class DefaultUIHandler implements UIHandler, Listener {
gui.back(); gui.back();
} else if (item.equals(plugin.api.getLang("SubServers", "Interface.Generic.Undo"))) { } else if (item.equals(plugin.api.getLang("SubServers", "Interface.Generic.Undo"))) {
player.closeInventory(); player.closeInventory();
((UIRenderer.CreatorOptions) gui.lastVisitedObjectz[0]).undo(); ((UIRenderer.CreatorOptions) gui.lastVisitedObjects[0]).undo();
gui.hostCreator((UIRenderer.CreatorOptions) gui.lastVisitedObjectz[0]); gui.hostCreator((UIRenderer.CreatorOptions) gui.lastVisitedObjects[0]);
} else if (item.equals(plugin.api.getLang("SubServers", "Interface.Host-Creator.Submit"))) { } else if (item.equals(plugin.api.getLang("SubServers", "Interface.Host-Creator.Submit"))) {
String host = ((UIRenderer.CreatorOptions) gui.lastVisitedObjectz[0]).getHost().toLowerCase(); String host = ((UIRenderer.CreatorOptions) gui.lastVisitedObjects[0]).getHost().toLowerCase();
if (player.hasPermission("subservers.host.*.*") || player.hasPermission("subservers.host.*.create") || player.hasPermission("subservers.host." + host + ".*") || player.hasPermission("subservers.host." + host + ".create")) { if (player.hasPermission("subservers.host.*.*") || player.hasPermission("subservers.host.*.create") || player.hasPermission("subservers.host." + host + ".*") || player.hasPermission("subservers.host." + host + ".create")) {
player.closeInventory(); player.closeInventory();
gui.setDownloading(plugin.api.getLang("SubServers", "Interface.Generic.Downloading.Response")); gui.setDownloading(plugin.api.getLang("SubServers", "Interface.Generic.Downloading.Response"));
((SubDataClient) plugin.api.getSubDataNetwork()[0]).sendPacket(new PacketCreateServer(player.getUniqueId(), ((UIRenderer.CreatorOptions) gui.lastVisitedObjectz[0]), data -> { ((SubDataClient) plugin.api.getSubDataNetwork()[0]).sendPacket(new PacketCreateServer(player.getUniqueId(), ((UIRenderer.CreatorOptions) gui.lastVisitedObjects[0]), data -> {
gui.back(); gui.back();
})); }));
} else { } else {
@ -125,7 +125,7 @@ public class DefaultUIHandler implements UIHandler, Listener {
if (m.getString("message").contains(" ")) { if (m.getString("message").contains(" ")) {
if (!gui.sendTitle(plugin.api.getLang("SubServers", "Interface.Host-Creator.Edit-Name.Invalid-Title"), 4 * 20)) if (!gui.sendTitle(plugin.api.getLang("SubServers", "Interface.Host-Creator.Edit-Name.Invalid-Title"), 4 * 20))
player.sendMessage(plugin.api.getLang("SubServers", "Interface.Host-Creator.Edit-Name.Invalid")); player.sendMessage(plugin.api.getLang("SubServers", "Interface.Host-Creator.Edit-Name.Invalid"));
Bukkit.getScheduler().runTaskLater(plugin, () -> gui.hostCreator((UIRenderer.CreatorOptions) gui.lastVisitedObjectz[0]), 4 * 20); Bukkit.getScheduler().runTaskLater(plugin, () -> gui.hostCreator((UIRenderer.CreatorOptions) gui.lastVisitedObjects[0]), 4 * 20);
} else { } else {
gui.setDownloading(plugin.api.getLang("SubServers", "Interface.Generic.Downloading.Response")); gui.setDownloading(plugin.api.getLang("SubServers", "Interface.Generic.Downloading.Response"));
plugin.api.getSubServer(m.getString("message"), server -> { plugin.api.getSubServer(m.getString("message"), server -> {
@ -133,26 +133,26 @@ public class DefaultUIHandler implements UIHandler, Listener {
gui.setDownloading(null); gui.setDownloading(null);
if (!gui.sendTitle(plugin.api.getLang("SubServers", "Interface.Host-Creator.Edit-Name.Exists-Title"), 4 * 20)) if (!gui.sendTitle(plugin.api.getLang("SubServers", "Interface.Host-Creator.Edit-Name.Exists-Title"), 4 * 20))
player.sendMessage(plugin.api.getLang("SubServers", "Interface.Host-Creator.Edit-Name.Exists")); player.sendMessage(plugin.api.getLang("SubServers", "Interface.Host-Creator.Edit-Name.Exists"));
Bukkit.getScheduler().runTaskLater(plugin, () -> gui.hostCreator((UIRenderer.CreatorOptions) gui.lastVisitedObjectz[0]), 4 * 20); Bukkit.getScheduler().runTaskLater(plugin, () -> gui.hostCreator((UIRenderer.CreatorOptions) gui.lastVisitedObjects[0]), 4 * 20);
} else { } else {
((UIRenderer.CreatorOptions) gui.lastVisitedObjectz[0]).setName(m.getString("message")); ((UIRenderer.CreatorOptions) gui.lastVisitedObjects[0]).setName(m.getString("message"));
gui.hostCreator((UIRenderer.CreatorOptions) gui.lastVisitedObjectz[0]); gui.hostCreator((UIRenderer.CreatorOptions) gui.lastVisitedObjects[0]);
} }
}); });
} }
}); });
} else if (ChatColor.stripColor(item).equals(ChatColor.stripColor(plugin.api.getLang("SubServers", "Interface.Host-Creator.Edit-Template")))) { } else if (ChatColor.stripColor(item).equals(ChatColor.stripColor(plugin.api.getLang("SubServers", "Interface.Host-Creator.Edit-Template")))) {
player.closeInventory(); player.closeInventory();
gui.hostCreatorTemplates(1, (UIRenderer.CreatorOptions) gui.lastVisitedObjectz[0]); gui.hostCreatorTemplates(1, (UIRenderer.CreatorOptions) gui.lastVisitedObjects[0]);
} else if (ChatColor.stripColor(item).equals(ChatColor.stripColor(plugin.api.getLang("SubServers", "Interface.Host-Creator.Edit-Version")))) { } else if (ChatColor.stripColor(item).equals(ChatColor.stripColor(plugin.api.getLang("SubServers", "Interface.Host-Creator.Edit-Version")))) {
player.closeInventory(); player.closeInventory();
if (!gui.sendTitle(plugin.api.getLang("SubServers", "Interface.Host-Creator.Edit-Version.Title"), 4 * 20)) if (!gui.sendTitle(plugin.api.getLang("SubServers", "Interface.Host-Creator.Edit-Version.Title"), 4 * 20))
player.sendMessage(plugin.api.getLang("SubServers", "Interface.Host-Creator.Edit-Version.Message")); player.sendMessage(plugin.api.getLang("SubServers", "Interface.Host-Creator.Edit-Version.Message"));
input.put(player.getUniqueId(), m -> { input.put(player.getUniqueId(), m -> {
if (m.getString("message").length() <= 0) { if (m.getString("message").length() <= 0) {
((UIRenderer.CreatorOptions) gui.lastVisitedObjectz[0]).setVersion(null); ((UIRenderer.CreatorOptions) gui.lastVisitedObjects[0]).setVersion(null);
} else ((UIRenderer.CreatorOptions) gui.lastVisitedObjectz[0]).setVersion(new Version(m.getString("message"))); } else ((UIRenderer.CreatorOptions) gui.lastVisitedObjects[0]).setVersion(new Version(m.getString("message")));
gui.hostCreator((UIRenderer.CreatorOptions) gui.lastVisitedObjectz[0]); gui.hostCreator((UIRenderer.CreatorOptions) gui.lastVisitedObjects[0]);
}); });
} else if (ChatColor.stripColor(item).equals(ChatColor.stripColor(plugin.api.getLang("SubServers", "Interface.Host-Creator.Edit-Port")))) { } else if (ChatColor.stripColor(item).equals(ChatColor.stripColor(plugin.api.getLang("SubServers", "Interface.Host-Creator.Edit-Port")))) {
player.closeInventory(); player.closeInventory();
@ -160,15 +160,15 @@ public class DefaultUIHandler implements UIHandler, Listener {
player.sendMessage(plugin.api.getLang("SubServers", "Interface.Host-Creator.Edit-Port.Message")); player.sendMessage(plugin.api.getLang("SubServers", "Interface.Host-Creator.Edit-Port.Message"));
input.put(player.getUniqueId(), m -> { input.put(player.getUniqueId(), m -> {
if (m.getString("message").length() <= 0) { if (m.getString("message").length() <= 0) {
((UIRenderer.CreatorOptions) gui.lastVisitedObjectz[0]).setPort(null); ((UIRenderer.CreatorOptions) gui.lastVisitedObjects[0]).setPort(null);
gui.hostCreator((UIRenderer.CreatorOptions) gui.lastVisitedObjectz[0]); gui.hostCreator((UIRenderer.CreatorOptions) gui.lastVisitedObjects[0]);
} else if (Util.isException(() -> Integer.parseInt(m.getString("message"))) || Integer.parseInt(m.getString("message")) <= 0 || Integer.parseInt(m.getString("message")) > 65535) { } else if (Util.isException(() -> Integer.parseInt(m.getString("message"))) || Integer.parseInt(m.getString("message")) <= 0 || Integer.parseInt(m.getString("message")) > 65535) {
if (!gui.sendTitle(plugin.api.getLang("SubServers", "Interface.Host-Creator.Edit-Port.Invalid-Title"), 4 * 20)) if (!gui.sendTitle(plugin.api.getLang("SubServers", "Interface.Host-Creator.Edit-Port.Invalid-Title"), 4 * 20))
player.sendMessage(plugin.api.getLang("SubServers", "Interface.Host-Creator.Edit-Port.Invalid")); player.sendMessage(plugin.api.getLang("SubServers", "Interface.Host-Creator.Edit-Port.Invalid"));
Bukkit.getScheduler().runTaskLater(plugin, () -> gui.hostCreator((UIRenderer.CreatorOptions) gui.lastVisitedObjectz[0]), 4 * 20); Bukkit.getScheduler().runTaskLater(plugin, () -> gui.hostCreator((UIRenderer.CreatorOptions) gui.lastVisitedObjects[0]), 4 * 20);
} else { } else {
((UIRenderer.CreatorOptions) gui.lastVisitedObjectz[0]).setPort(Integer.valueOf(m.getString("message"))); ((UIRenderer.CreatorOptions) gui.lastVisitedObjects[0]).setPort(Integer.valueOf(m.getString("message")));
gui.hostCreator((UIRenderer.CreatorOptions) gui.lastVisitedObjectz[0]); gui.hostCreator((UIRenderer.CreatorOptions) gui.lastVisitedObjects[0]);
} }
}); });
} }
@ -180,13 +180,13 @@ public class DefaultUIHandler implements UIHandler, Listener {
String item = event.getCurrentItem().getItemMeta().getDisplayName(); String item = event.getCurrentItem().getItemMeta().getDisplayName();
if (item.equals(plugin.api.getLang("SubServers", "Interface.Generic.Back-Arrow"))) { if (item.equals(plugin.api.getLang("SubServers", "Interface.Generic.Back-Arrow"))) {
player.closeInventory(); player.closeInventory();
gui.hostCreatorTemplates(gui.lastPage - 1, (UIRenderer.CreatorOptions) gui.lastVisitedObjectz[0]); gui.hostCreatorTemplates(gui.lastPage - 1, (UIRenderer.CreatorOptions) gui.lastVisitedObjects[0]);
} else if (item.equals(plugin.api.getLang("SubServers", "Interface.Generic.Next-Arrow"))) { } else if (item.equals(plugin.api.getLang("SubServers", "Interface.Generic.Next-Arrow"))) {
player.closeInventory(); player.closeInventory();
gui.hostCreatorTemplates(gui.lastPage + 1, (UIRenderer.CreatorOptions) gui.lastVisitedObjectz[0]); gui.hostCreatorTemplates(gui.lastPage + 1, (UIRenderer.CreatorOptions) gui.lastVisitedObjects[0]);
} else if (item.equals(plugin.api.getLang("SubServers", "Interface.Generic.Back"))) { } else if (item.equals(plugin.api.getLang("SubServers", "Interface.Generic.Back"))) {
player.closeInventory(); player.closeInventory();
gui.hostCreator((UIRenderer.CreatorOptions) gui.lastVisitedObjectz[0]); gui.hostCreator((UIRenderer.CreatorOptions) gui.lastVisitedObjects[0]);
} else { } else {
player.closeInventory(); player.closeInventory();
String obj; String obj;
@ -195,8 +195,8 @@ public class DefaultUIHandler implements UIHandler, Listener {
} else { } else {
obj = ChatColor.stripColor(item); obj = ChatColor.stripColor(item);
} }
((UIRenderer.CreatorOptions) gui.lastVisitedObjectz[0]).setTemplate(obj); ((UIRenderer.CreatorOptions) gui.lastVisitedObjects[0]).setTemplate(obj);
gui.hostCreator((UIRenderer.CreatorOptions) gui.lastVisitedObjectz[0]); gui.hostCreator((UIRenderer.CreatorOptions) gui.lastVisitedObjects[0]);
} }
} }
} else if (title.startsWith(plugin.api.getLang("SubServers", "Interface.Host-Plugin.Title").split("\\$str\\$")[0]) && // Host Plugin } else if (title.startsWith(plugin.api.getLang("SubServers", "Interface.Host-Plugin.Title").split("\\$str\\$")[0]) && // Host Plugin
@ -206,10 +206,10 @@ public class DefaultUIHandler implements UIHandler, Listener {
String item = event.getCurrentItem().getItemMeta().getDisplayName(); String item = event.getCurrentItem().getItemMeta().getDisplayName();
if (item.equals(plugin.api.getLang("SubServers", "Interface.Generic.Back-Arrow"))) { if (item.equals(plugin.api.getLang("SubServers", "Interface.Generic.Back-Arrow"))) {
player.closeInventory(); player.closeInventory();
gui.hostPlugin(gui.lastPage - 1, ((Host) gui.lastVisitedObjectz[0]).getName()); gui.hostPlugin(gui.lastPage - 1, ((Host) gui.lastVisitedObjects[0]).getName());
} else if (item.equals(plugin.api.getLang("SubServers", "Interface.Generic.Next-Arrow"))) { } else if (item.equals(plugin.api.getLang("SubServers", "Interface.Generic.Next-Arrow"))) {
player.closeInventory(); player.closeInventory();
gui.hostPlugin(gui.lastPage + 1, ((Host) gui.lastVisitedObjectz[0]).getName()); gui.hostPlugin(gui.lastPage + 1, ((Host) gui.lastVisitedObjects[0]).getName());
} else if (item.equals(plugin.api.getLang("SubServers", "Interface.Generic.Back"))) { } else if (item.equals(plugin.api.getLang("SubServers", "Interface.Generic.Back"))) {
player.closeInventory(); player.closeInventory();
gui.back(); gui.back();
@ -222,8 +222,8 @@ public class DefaultUIHandler implements UIHandler, Listener {
if (plugin.get() == null) { if (plugin.get() == null) {
gui.reopen(); gui.reopen();
} else { } else {
gui.setDownloading(ChatColor.stripColor(this.plugin.api.getLang("SubServers", "Interface.Host-Plugin.Title").replace("$str$", ((Host) gui.lastVisitedObjectz[0]).getName()))); gui.setDownloading(ChatColor.stripColor(this.plugin.api.getLang("SubServers", "Interface.Host-Plugin.Title").replace("$str$", ((Host) gui.lastVisitedObjects[0]).getName())));
this.plugin.api.getHost(((Host) gui.lastVisitedObjectz[0]).getName(), host -> { this.plugin.api.getHost(((Host) gui.lastVisitedObjects[0]).getName(), host -> {
if (host != null) { if (host != null) {
gui.setDownloading(null); gui.setDownloading(null);
plugin.get().open(player, host); plugin.get().open(player, host);
@ -265,10 +265,10 @@ public class DefaultUIHandler implements UIHandler, Listener {
if (item.equals(plugin.api.getLang("SubServers", "Interface.Generic.Back-Arrow"))) { if (item.equals(plugin.api.getLang("SubServers", "Interface.Generic.Back-Arrow"))) {
player.closeInventory(); player.closeInventory();
gui.serverMenu(gui.lastPage - 1, (String) gui.lastVisitedObjectz[0], (String) gui.lastVisitedObjectz[1]); gui.serverMenu(gui.lastPage - 1, (String) gui.lastVisitedObjects[0], (String) gui.lastVisitedObjects[1]);
} else if (item.equals(plugin.api.getLang("SubServers", "Interface.Generic.Next-Arrow"))) { } else if (item.equals(plugin.api.getLang("SubServers", "Interface.Generic.Next-Arrow"))) {
player.closeInventory(); player.closeInventory();
gui.serverMenu(gui.lastPage + 1, (String) gui.lastVisitedObjectz[0], (String) gui.lastVisitedObjectz[1]); gui.serverMenu(gui.lastPage + 1, (String) gui.lastVisitedObjects[0], (String) gui.lastVisitedObjects[1]);
} else if (item.equals(plugin.api.getLang("SubServers", "Interface.Server-Menu.Host-Menu"))) { } else if (item.equals(plugin.api.getLang("SubServers", "Interface.Server-Menu.Host-Menu"))) {
player.closeInventory(); player.closeInventory();
gui.hostMenu(1); gui.hostMenu(1);
@ -297,15 +297,15 @@ public class DefaultUIHandler implements UIHandler, Listener {
gui.back(); gui.back();
} else if (item.equals(plugin.api.getLang("SubServers", "Interface.Host-Admin.Creator"))) { } else if (item.equals(plugin.api.getLang("SubServers", "Interface.Host-Admin.Creator"))) {
player.closeInventory(); player.closeInventory();
if (player.hasPermission("subservers.host.create.*") || player.hasPermission("subservers.host.create." + ((Host) gui.lastVisitedObjectz[0]).getName().toLowerCase())) { if (player.hasPermission("subservers.host.create.*") || player.hasPermission("subservers.host.create." + ((Host) gui.lastVisitedObjects[0]).getName().toLowerCase())) {
gui.hostCreator(new UIRenderer.CreatorOptions(((Host) gui.lastVisitedObjectz[0]).getName())); gui.hostCreator(new UIRenderer.CreatorOptions(((Host) gui.lastVisitedObjects[0]).getName()));
} else gui.reopen(); } else gui.reopen();
} else if (item.equals(plugin.api.getLang("SubServers", "Interface.Host-Admin.SubServers"))) { } else if (item.equals(plugin.api.getLang("SubServers", "Interface.Host-Admin.SubServers"))) {
player.closeInventory(); player.closeInventory();
gui.serverMenu(1, ((Host) gui.lastVisitedObjectz[0]).getName(), null); gui.serverMenu(1, ((Host) gui.lastVisitedObjects[0]).getName(), null);
} else if (item.equals(plugin.api.getLang("SubServers", "Interface.Host-Admin.Plugins"))) { } else if (item.equals(plugin.api.getLang("SubServers", "Interface.Host-Admin.Plugins"))) {
player.closeInventory(); player.closeInventory();
gui.hostPlugin(1, ((Host) gui.lastVisitedObjectz[0]).getName()); gui.hostPlugin(1, ((Host) gui.lastVisitedObjects[0]).getName());
} }
} }
} else if (title.startsWith(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Title").split("\\$str\\$")[0]) && // SubServer Admin } else if (title.startsWith(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Title").split("\\$str\\$")[0]) && // SubServer Admin
@ -319,12 +319,12 @@ public class DefaultUIHandler implements UIHandler, Listener {
gui.back(); gui.back();
} else if (item.equals(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Update"))) { } else if (item.equals(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Update"))) {
player.closeInventory(); player.closeInventory();
if (((SubServer) gui.lastVisitedObjectz[0]).permits(player, "subservers.subserver.%.*", "subservers.subserver.%.update")) { if (((SubServer) gui.lastVisitedObjects[0]).permits(player, "subservers.subserver.%.*", "subservers.subserver.%.update")) {
if (!gui.sendTitle(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Update.Title"), 4 * 20)) if (!gui.sendTitle(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Update.Title"), 4 * 20))
player.sendMessage(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Update.Message")); player.sendMessage(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Update.Message"));
input.put(player.getUniqueId(), m -> { input.put(player.getUniqueId(), m -> {
gui.setDownloading(plugin.api.getLang("SubServers", "Interface.Generic.Downloading.Response")); gui.setDownloading(plugin.api.getLang("SubServers", "Interface.Generic.Downloading.Response"));
((SubDataClient) plugin.api.getSubDataNetwork()[0]).sendPacket(new PacketUpdateServer(player.getUniqueId(), ((SubServer) gui.lastVisitedObjectz[0]).getName(), ((SubDataClient) plugin.api.getSubDataNetwork()[0]).sendPacket(new PacketUpdateServer(player.getUniqueId(), ((SubServer) gui.lastVisitedObjects[0]).getName(),
(m.getString("message").length() == 0 || m.getString("message").equals("/"))?null:new Version((m.getString("message").startsWith("/"))?m.getString("message").substring(1):m.getString("message")), data -> { (m.getString("message").length() == 0 || m.getString("message").equals("/"))?null:new Version((m.getString("message").startsWith("/"))?m.getString("message").substring(1):m.getString("message")), data -> {
gui.reopen(); gui.reopen();
})); }));
@ -332,23 +332,23 @@ public class DefaultUIHandler implements UIHandler, Listener {
} else gui.reopen(); } else gui.reopen();
} else if (item.equals(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Start"))) { } else if (item.equals(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Start"))) {
player.closeInventory(); player.closeInventory();
if (((SubServer) gui.lastVisitedObjectz[0]).permits(player, "subservers.subserver.%.*", "subservers.subserver.%.start")) { if (((SubServer) gui.lastVisitedObjects[0]).permits(player, "subservers.subserver.%.*", "subservers.subserver.%.start")) {
gui.setDownloading(plugin.api.getLang("SubServers", "Interface.Generic.Downloading.Response")); gui.setDownloading(plugin.api.getLang("SubServers", "Interface.Generic.Downloading.Response"));
((SubServer) gui.lastVisitedObjectz[0]).start(player.getUniqueId(), response -> { ((SubServer) gui.lastVisitedObjects[0]).start(player.getUniqueId(), response -> {
gui.setDownloading(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Start.Title")); gui.setDownloading(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Start.Title"));
Bukkit.getScheduler().runTaskLater(plugin, gui::reopen, 30); Bukkit.getScheduler().runTaskLater(plugin, gui::reopen, 30);
}); });
} else gui.reopen(); } else gui.reopen();
} else if (item.equals(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Stop"))) { } else if (item.equals(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Stop"))) {
player.closeInventory(); player.closeInventory();
if (((SubServer) gui.lastVisitedObjectz[0]).permits(player, "subservers.subserver.%.*", "subservers.subserver.%.stop")) { if (((SubServer) gui.lastVisitedObjects[0]).permits(player, "subservers.subserver.%.*", "subservers.subserver.%.stop")) {
gui.setDownloading(plugin.api.getLang("SubServers", "Interface.Generic.Downloading.Response")); gui.setDownloading(plugin.api.getLang("SubServers", "Interface.Generic.Downloading.Response"));
final Container<Boolean> listening = new Container<Boolean>(true); final Container<Boolean> listening = new Container<Boolean>(true);
PacketInExRunEvent.callback("SubStoppedEvent", new Callback<ObjectMap<String>>() { PacketInExRunEvent.callback("SubStoppedEvent", new Callback<ObjectMap<String>>() {
@Override @Override
public void run(ObjectMap<String> json) { public void run(ObjectMap<String> json) {
try { try {
if (listening.get()) if (!json.getString("server").equalsIgnoreCase(((SubServer) gui.lastVisitedObjectz[0]).getName())) { if (listening.get()) if (!json.getString("server").equalsIgnoreCase(((SubServer) gui.lastVisitedObjects[0]).getName())) {
PacketInExRunEvent.callback("SubStoppedEvent", this); PacketInExRunEvent.callback("SubStoppedEvent", this);
} else { } else {
Bukkit.getScheduler().runTaskLater(plugin, gui::reopen, 5); Bukkit.getScheduler().runTaskLater(plugin, gui::reopen, 5);
@ -356,23 +356,23 @@ public class DefaultUIHandler implements UIHandler, Listener {
} catch (Exception e) {} } catch (Exception e) {}
} }
}); });
((SubServer) gui.lastVisitedObjectz[0]).stop(player.getUniqueId(), response -> { ((SubServer) gui.lastVisitedObjects[0]).stop(player.getUniqueId(), response -> {
if (response != 0) { if (response != 0) {
gui.reopen(); gui.reopen();
listening.set(false); listening.set(false);
} else gui.setDownloading(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Stop.Title").replace("$str$", ((SubServer) gui.lastVisitedObjectz[0]).getName())); } else gui.setDownloading(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Stop.Title").replace("$str$", ((SubServer) gui.lastVisitedObjects[0]).getName()));
}); });
} else gui.reopen(); } else gui.reopen();
} else if (item.equals(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Terminate"))) { } else if (item.equals(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Terminate"))) {
player.closeInventory(); player.closeInventory();
if (((SubServer) gui.lastVisitedObjectz[0]).permits(player, "subservers.subserver.%.*", "subservers.subserver.%.terminate")) { if (((SubServer) gui.lastVisitedObjects[0]).permits(player, "subservers.subserver.%.*", "subservers.subserver.%.terminate")) {
gui.setDownloading(plugin.api.getLang("SubServers", "Interface.Generic.Downloading.Response")); gui.setDownloading(plugin.api.getLang("SubServers", "Interface.Generic.Downloading.Response"));
final Container<Boolean> listening = new Container<Boolean>(true); final Container<Boolean> listening = new Container<Boolean>(true);
PacketInExRunEvent.callback("SubStoppedEvent", new Callback<ObjectMap<String>>() { PacketInExRunEvent.callback("SubStoppedEvent", new Callback<ObjectMap<String>>() {
@Override @Override
public void run(ObjectMap<String> json) { public void run(ObjectMap<String> json) {
try { try {
if (listening.get()) if (!json.getString("server").equalsIgnoreCase(((SubServer) gui.lastVisitedObjectz[0]).getName())) { if (listening.get()) if (!json.getString("server").equalsIgnoreCase(((SubServer) gui.lastVisitedObjects[0]).getName())) {
PacketInExRunEvent.callback("SubStoppedEvent", this); PacketInExRunEvent.callback("SubStoppedEvent", this);
} else { } else {
gui.reopen(); gui.reopen();
@ -380,28 +380,28 @@ public class DefaultUIHandler implements UIHandler, Listener {
} catch (Exception e) {} } catch (Exception e) {}
} }
}); });
((SubServer) gui.lastVisitedObjectz[0]).terminate(player.getUniqueId(), response -> { ((SubServer) gui.lastVisitedObjects[0]).terminate(player.getUniqueId(), response -> {
if (response != 0) { if (response != 0) {
gui.reopen(); gui.reopen();
listening.set(false); listening.set(false);
} else gui.setDownloading(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Terminate.Title").replace("$str$", ((SubServer) gui.lastVisitedObjectz[0]).getName())); } else gui.setDownloading(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Terminate.Title").replace("$str$", ((SubServer) gui.lastVisitedObjects[0]).getName()));
}); });
} else gui.reopen(); } else gui.reopen();
} else if (item.equals(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Command"))) { } else if (item.equals(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Command"))) {
player.closeInventory(); player.closeInventory();
if (((SubServer) gui.lastVisitedObjectz[0]).permits(player, "subservers.subserver.%.*", "subservers.subserver.%.command")) { if (((SubServer) gui.lastVisitedObjects[0]).permits(player, "subservers.subserver.%.*", "subservers.subserver.%.command")) {
if (!gui.sendTitle(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Command.Title"), 4 * 20)) if (!gui.sendTitle(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Command.Title"), 4 * 20))
player.sendMessage(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Command.Message")); player.sendMessage(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Command.Message"));
input.put(player.getUniqueId(), m -> { input.put(player.getUniqueId(), m -> {
gui.setDownloading(plugin.api.getLang("SubServers", "Interface.Generic.Downloading.Response")); gui.setDownloading(plugin.api.getLang("SubServers", "Interface.Generic.Downloading.Response"));
((SubServer) gui.lastVisitedObjectz[0]).command(player.getUniqueId(), (m.getString("message").startsWith("/"))?m.getString("message").substring(1):m.getString("message"), response -> { ((SubServer) gui.lastVisitedObjects[0]).command(player.getUniqueId(), (m.getString("message").startsWith("/"))?m.getString("message").substring(1):m.getString("message"), response -> {
gui.reopen(); gui.reopen();
}); });
}); });
} else gui.reopen(); } else gui.reopen();
} else if (item.equals(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Plugins"))) { } else if (item.equals(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Plugins"))) {
player.closeInventory(); player.closeInventory();
gui.subserverPlugin(1, ((SubServer) gui.lastVisitedObjectz[0]).getName()); gui.subserverPlugin(1, ((SubServer) gui.lastVisitedObjects[0]).getName());
} }
} }
} else if (title.startsWith(plugin.api.getLang("SubServers", "Interface.SubServer-Plugin.Title").split("\\$str\\$")[0]) && // SubServer Plugin } else if (title.startsWith(plugin.api.getLang("SubServers", "Interface.SubServer-Plugin.Title").split("\\$str\\$")[0]) && // SubServer Plugin
@ -411,10 +411,10 @@ public class DefaultUIHandler implements UIHandler, Listener {
String item = event.getCurrentItem().getItemMeta().getDisplayName(); String item = event.getCurrentItem().getItemMeta().getDisplayName();
if (item.equals(plugin.api.getLang("SubServers", "Interface.Generic.Back-Arrow"))) { if (item.equals(plugin.api.getLang("SubServers", "Interface.Generic.Back-Arrow"))) {
player.closeInventory(); player.closeInventory();
gui.subserverPlugin(gui.lastPage - 1, ((SubServer) gui.lastVisitedObjectz[0]).getName()); gui.subserverPlugin(gui.lastPage - 1, ((SubServer) gui.lastVisitedObjects[0]).getName());
} else if (item.equals(plugin.api.getLang("SubServers", "Interface.Generic.Next-Arrow"))) { } else if (item.equals(plugin.api.getLang("SubServers", "Interface.Generic.Next-Arrow"))) {
player.closeInventory(); player.closeInventory();
gui.subserverPlugin(gui.lastPage + 1, ((SubServer) gui.lastVisitedObjectz[0]).getName()); gui.subserverPlugin(gui.lastPage + 1, ((SubServer) gui.lastVisitedObjects[0]).getName());
} else if (item.equals(plugin.api.getLang("SubServers", "Interface.Generic.Back"))) { } else if (item.equals(plugin.api.getLang("SubServers", "Interface.Generic.Back"))) {
player.closeInventory(); player.closeInventory();
gui.back(); gui.back();
@ -427,8 +427,8 @@ public class DefaultUIHandler implements UIHandler, Listener {
if (plugin.get() == null) { if (plugin.get() == null) {
gui.reopen(); gui.reopen();
} else { } else {
gui.setDownloading(ChatColor.stripColor(this.plugin.api.getLang("SubServers", "Interface.SubServer-Plugin.Title").replace("$str$", ((SubServer) gui.lastVisitedObjectz[0]).getName()))); gui.setDownloading(ChatColor.stripColor(this.plugin.api.getLang("SubServers", "Interface.SubServer-Plugin.Title").replace("$str$", ((SubServer) gui.lastVisitedObjects[0]).getName())));
this.plugin.api.getSubServer(((SubServer) gui.lastVisitedObjectz[0]).getName(), subserver -> { this.plugin.api.getSubServer(((SubServer) gui.lastVisitedObjects[0]).getName(), subserver -> {
if (subserver != null) { if (subserver != null) {
gui.setDownloading(null); gui.setDownloading(null);
plugin.get().open(player, subserver); plugin.get().open(player, subserver);

View File

@ -3,7 +3,6 @@ package net.ME1312.SubServers.Client.Bukkit.Graphic;
import net.ME1312.Galaxi.Library.Container.Container; import net.ME1312.Galaxi.Library.Container.Container;
import net.ME1312.Galaxi.Library.Container.NamedContainer; import net.ME1312.Galaxi.Library.Container.NamedContainer;
import net.ME1312.Galaxi.Library.Version.Version; import net.ME1312.Galaxi.Library.Version.Version;
import net.ME1312.SubData.Client.Protocol.PacketObjectOut;
import net.ME1312.SubServers.Client.Bukkit.Network.API.Host; import net.ME1312.SubServers.Client.Bukkit.Network.API.Host;
import net.ME1312.SubServers.Client.Bukkit.Network.API.Server; import net.ME1312.SubServers.Client.Bukkit.Network.API.Server;
import net.ME1312.SubServers.Client.Bukkit.Network.API.SubCreator; import net.ME1312.SubServers.Client.Bukkit.Network.API.SubCreator;
@ -26,7 +25,7 @@ import java.util.*;
public class DefaultUIRenderer extends UIRenderer { public class DefaultUIRenderer extends UIRenderer {
private static int MAX_VISITED_OBJECTS = 2; private static int MAX_VISITED_OBJECTS = 2;
private List<Runnable> windowHistory = new LinkedList<Runnable>(); private List<Runnable> windowHistory = new LinkedList<Runnable>();
Object[] lastVisitedObjectz = new Object[MAX_VISITED_OBJECTS]; Object[] lastVisitedObjects = new Object[MAX_VISITED_OBJECTS];
int lastPage = 1; int lastPage = 1;
Runnable lastMenu = null; Runnable lastMenu = null;
boolean open = false; boolean open = false;
@ -84,7 +83,7 @@ public class DefaultUIRenderer extends UIRenderer {
setDownloading(ChatColor.stripColor(plugin.api.getLang("SubServers", "Interface.Host-Menu.Title"))); setDownloading(ChatColor.stripColor(plugin.api.getLang("SubServers", "Interface.Host-Menu.Title")));
plugin.api.getHosts(hosts -> plugin.api.getGroups(groups -> { plugin.api.getHosts(hosts -> plugin.api.getGroups(groups -> {
setDownloading(null); setDownloading(null);
lastVisitedObjectz[0] = null; lastVisitedObjects[0] = null;
lastPage = page; lastPage = page;
lastMenu = () -> hostMenu(1); lastMenu = () -> hostMenu(1);
windowHistory.add(() -> hostMenu(page)); windowHistory.add(() -> hostMenu(page));
@ -220,7 +219,7 @@ public class DefaultUIRenderer extends UIRenderer {
if (hasHistory()) back(); if (hasHistory()) back();
} else { } else {
setDownloading(null); setDownloading(null);
lastVisitedObjectz[0] = host; lastVisitedObjects[0] = host;
ItemStack block; ItemStack block;
ItemMeta blockMeta; ItemMeta blockMeta;
@ -328,11 +327,11 @@ public class DefaultUIRenderer extends UIRenderer {
public void hostCreator(final CreatorOptions options) { public void hostCreator(final CreatorOptions options) {
setDownloading(ChatColor.stripColor(plugin.api.getLang("SubServers", "Interface.Host-Creator.Title").replace("$str$", options.getHost()))); setDownloading(ChatColor.stripColor(plugin.api.getLang("SubServers", "Interface.Host-Creator.Title").replace("$str$", options.getHost())));
if (!options.init()) windowHistory.add(() -> hostCreator(options)); if (!options.init()) windowHistory.add(() -> hostCreator(options));
lastVisitedObjectz[0] = options; lastVisitedObjects[0] = options;
plugin.api.getHost(options.getHost(), host -> { plugin.api.getHost(options.getHost(), host -> {
if (host == null || !host.isAvailable() || !host.isEnabled()) { if (host == null || !host.isAvailable() || !host.isEnabled()) {
lastVisitedObjectz[0] = null; lastVisitedObjects[0] = null;
if (hasHistory()) back(); if (hasHistory()) back();
} else { } else {
setDownloading(null); setDownloading(null);
@ -455,10 +454,10 @@ public class DefaultUIRenderer extends UIRenderer {
public void hostCreatorTemplates(final int page, final CreatorOptions options) { public void hostCreatorTemplates(final int page, final CreatorOptions options) {
setDownloading(ChatColor.stripColor(plugin.api.getLang("SubServers", "Interface.Host-Creator.Edit-Template.Title").replace("$str$", options.getHost()))); setDownloading(ChatColor.stripColor(plugin.api.getLang("SubServers", "Interface.Host-Creator.Edit-Template.Title").replace("$str$", options.getHost())));
options.init(); options.init();
lastVisitedObjectz[0] = options; lastVisitedObjects[0] = options;
plugin.api.getHost(options.getHost(), host -> { plugin.api.getHost(options.getHost(), host -> {
if (host == null || !host.isAvailable() || !host.isEnabled()) { if (host == null || !host.isAvailable() || !host.isEnabled()) {
lastVisitedObjectz[0] = null; lastVisitedObjects[0] = null;
if (hasHistory()) back(); if (hasHistory()) back();
} else { } else {
lastPage = page; lastPage = page;
@ -573,7 +572,7 @@ public class DefaultUIRenderer extends UIRenderer {
if (hasHistory()) back(); if (hasHistory()) back();
} else { } else {
setDownloading(null); setDownloading(null);
lastVisitedObjectz[0] = host; lastVisitedObjects[0] = host;
lastPage = page; lastPage = page;
List<String> renderers = new LinkedList<String>(); List<String> renderers = new LinkedList<String>();
for (String renderer : renderers) { for (String renderer : renderers) {
@ -677,7 +676,7 @@ public class DefaultUIRenderer extends UIRenderer {
setDownloading(ChatColor.stripColor(plugin.api.getLang("SubServers", "Interface.Group-Menu.Title"))); setDownloading(ChatColor.stripColor(plugin.api.getLang("SubServers", "Interface.Group-Menu.Title")));
plugin.api.getGroups(groups -> { plugin.api.getGroups(groups -> {
setDownloading(null); setDownloading(null);
lastVisitedObjectz[0] = null; lastVisitedObjects[0] = null;
lastPage = page; lastPage = page;
lastMenu = () -> groupMenu(1); lastMenu = () -> groupMenu(1);
windowHistory.add(() -> groupMenu(page)); windowHistory.add(() -> groupMenu(page));
@ -791,8 +790,8 @@ public class DefaultUIRenderer extends UIRenderer {
lastPage = page; lastPage = page;
List<Server> servers = servercontainer.get(); List<Server> servers = servercontainer.get();
lastVisitedObjectz[0] = host; lastVisitedObjects[0] = host;
lastVisitedObjectz[1] = group; lastVisitedObjects[1] = group;
windowHistory.add(() -> serverMenu(page, host, group)); windowHistory.add(() -> serverMenu(page, host, group));
ItemStack block; ItemStack block;
@ -985,7 +984,7 @@ public class DefaultUIRenderer extends UIRenderer {
if (hasHistory()) back(); if (hasHistory()) back();
} else { } else {
setDownloading(null); setDownloading(null);
lastVisitedObjectz[0] = subserver; lastVisitedObjects[0] = subserver;
ItemStack block; ItemStack block;
ItemMeta blockMeta; ItemMeta blockMeta;
ItemStack div = createItem("STAINED_GLASS_PANE", "BLACK_STAINED_GLASS_PANE", (short) 15); ItemStack div = createItem("STAINED_GLASS_PANE", "BLACK_STAINED_GLASS_PANE", (short) 15);
@ -1191,7 +1190,7 @@ public class DefaultUIRenderer extends UIRenderer {
if (hasHistory()) back(); if (hasHistory()) back();
} else { } else {
setDownloading(null); setDownloading(null);
lastVisitedObjectz[0] = subserver; lastVisitedObjects[0] = subserver;
lastPage = page; lastPage = page;
List<String> renderers = new LinkedList<String>(); List<String> renderers = new LinkedList<String>();
for (String renderer : renderers) { for (String renderer : renderers) {

View File

@ -46,6 +46,7 @@ import java.util.jar.Manifest;
public final class ExHost { public final class ExHost {
HashMap<Integer, SubDataClient> subdata = new HashMap<Integer, SubDataClient>(); HashMap<Integer, SubDataClient> subdata = new HashMap<Integer, SubDataClient>();
NamedContainer<Long, Map<String, Map<String, String>>> lang = null; NamedContainer<Long, Map<String, Map<String, String>>> lang = null;
public HashMap<String, SubCreatorImpl.ServerTemplate> templatesR = new HashMap<String, SubCreatorImpl.ServerTemplate>();
public HashMap<String, SubCreatorImpl.ServerTemplate> templates = new HashMap<String, SubCreatorImpl.ServerTemplate>(); public HashMap<String, SubCreatorImpl.ServerTemplate> templates = new HashMap<String, SubCreatorImpl.ServerTemplate>();
public HashMap<String, SubServerImpl> servers = new HashMap<String, SubServerImpl>(); public HashMap<String, SubServerImpl> servers = new HashMap<String, SubServerImpl>();
public SubCreatorImpl creator; public SubCreatorImpl creator;
@ -122,7 +123,7 @@ public final class ExHost {
config = new YAMLConfig(new UniversalFile(engine.getRuntimeDirectory(), "config.yml")); config = new YAMLConfig(new UniversalFile(engine.getRuntimeDirectory(), "config.yml"));
if (!(new UniversalFile(engine.getRuntimeDirectory(), "Templates").exists())) { if (!(new UniversalFile(engine.getRuntimeDirectory(), "Templates").exists())) {
new UniversalFile(engine.getRuntimeDirectory(), "Templates").mkdir(); new UniversalFile(engine.getRuntimeDirectory(), "Templates").mkdirs();
log.info.println("Created ./Templates/"); log.info.println("Created ./Templates/");
} }
@ -234,6 +235,7 @@ public final class ExHost {
ConfigUpdater.updateConfig(new UniversalFile(engine.getRuntimeDirectory(), "config.yml")); ConfigUpdater.updateConfig(new UniversalFile(engine.getRuntimeDirectory(), "config.yml"));
config.reload(); config.reload();
creator.load(false);
subprotocol.unregisterCipher("AES"); subprotocol.unregisterCipher("AES");
subprotocol.unregisterCipher("AES-128"); subprotocol.unregisterCipher("AES-128");
@ -347,7 +349,7 @@ public final class ExHost {
log.error.println(e); log.error.println(e);
} }
if (new File(engine.getRuntimeDirectory(), "Templates").exists()) Util.deleteDirectory(new File(engine.getRuntimeDirectory(), "Templates")); if (new UniversalFile(engine.getRuntimeDirectory(), "Cache:Remote").exists()) Util.deleteDirectory(new UniversalFile(engine.getRuntimeDirectory(), "Cache:Remote"));
} }
} }
} }

View File

@ -1,6 +1,7 @@
package net.ME1312.SubServers.Host.Executable; package net.ME1312.SubServers.Host.Executable;
import net.ME1312.Galaxi.Engine.GalaxiEngine; import net.ME1312.Galaxi.Engine.GalaxiEngine;
import net.ME1312.Galaxi.Library.Config.YAMLConfig;
import net.ME1312.Galaxi.Library.Config.YAMLSection; import net.ME1312.Galaxi.Library.Config.YAMLSection;
import net.ME1312.Galaxi.Library.Container.NamedContainer; import net.ME1312.Galaxi.Library.Container.NamedContainer;
import net.ME1312.Galaxi.Library.Map.ObjectMap; import net.ME1312.Galaxi.Library.Map.ObjectMap;
@ -201,7 +202,32 @@ public class SubCreatorImpl {
} }
} }
/**
* Loads Template Metadata
*
* @param remote Loads from the Remote Templates directory when true
*/
public void load(boolean remote) {
HashMap<String, ServerTemplate> templates = (remote)?host.templatesR:host.templates;
UniversalFile dir = new UniversalFile(GalaxiEngine.getInstance().getRuntimeDirectory(), ((remote)?"Cache:Remote:":"") + "Templates");
templates.clear();
if (dir.exists()) for (File file : dir.listFiles()) {
try {
if (file.isDirectory() && !file.getName().endsWith(".x")) {
ObjectMap<String> config = (new UniversalFile(file, "template.yml").exists())?new YAMLConfig(new UniversalFile(file, "template.yml")).get().getMap("Template", new ObjectMap<String>()):new ObjectMap<String>();
ServerTemplate template = new ServerTemplate(file.getName(), config.getBoolean("Enabled", true), config.getRawString("Icon", "::NULL::"), file, config.getMap("Build", new ObjectMap<String>()), config.getMap("Settings", new ObjectMap<String>()));
templates.put(file.getName().toLowerCase(), template);
if (config.getKeys().contains("Display")) template.setDisplayName(config.getString("Display"));
}
} catch (Exception e) {
host.log.error.println("Couldn't load template: " + file.getName());
host.log.error.println(e);
}
}
}
private class CreatorTask extends Thread { private class CreatorTask extends Thread {
private final HashMap<String, ServerTemplate> templates;
private final SubServerImpl update; private final SubServerImpl update;
private final UUID player; private final UUID player;
private final String name; private final String name;
@ -216,6 +242,7 @@ public class SubCreatorImpl {
private CreatorTask(UUID player, String name, ServerTemplate template, Version version, int port, UUID address, UUID tracker) { private CreatorTask(UUID player, String name, ServerTemplate template, Version version, int port, UUID address, UUID tracker) {
super(SubAPI.getInstance().getAppInfo().getName() + "::SubCreator_Process_Handler(" + name + ')'); super(SubAPI.getInstance().getAppInfo().getName() + "::SubCreator_Process_Handler(" + name + ')');
this.templates = new HashMap<String, ServerTemplate>();
this.update = host.servers.getOrDefault(name.toLowerCase(), null); this.update = host.servers.getOrDefault(name.toLowerCase(), null);
this.player = player; this.player = player;
this.name = name; this.name = name;
@ -226,6 +253,9 @@ public class SubCreatorImpl {
this.replacements = new HashMap<String, String>(); this.replacements = new HashMap<String, String>();
this.address = address; this.address = address;
this.tracker = tracker; this.tracker = tracker;
templates.putAll(host.templatesR);
templates.putAll(host.templates);
} }
private ObjectMap<String> build(File dir, ServerTemplate template, List<ServerTemplate> history) throws SubCreatorException { private ObjectMap<String> build(File dir, ServerTemplate template, List<ServerTemplate> history) throws SubCreatorException {
@ -236,11 +266,11 @@ public class SubCreatorImpl {
if (history.contains(template)) throw new IllegalStateException("Template Import loop detected"); if (history.contains(template)) throw new IllegalStateException("Template Import loop detected");
history.add(template); history.add(template);
for (String other : template.getBuildOptions().getStringList("Import", new ArrayList<String>())) { for (String other : template.getBuildOptions().getStringList("Import", new ArrayList<String>())) {
if (host.templates.keySet().contains(other.toLowerCase())) { if (templates.keySet().contains(other.toLowerCase())) {
if (host.templates.get(other.toLowerCase()).isEnabled()) { if (templates.get(other.toLowerCase()).isEnabled()) {
if (version != null || !host.templates.get(other.toLowerCase()).requiresVersion()) { if (version != null || !templates.get(other.toLowerCase()).requiresVersion()) {
if (update == null || host.templates.get(other.toLowerCase()).canUpdate()) { if (update == null || templates.get(other.toLowerCase()).canUpdate()) {
ObjectMap<String> config = build(dir, host.templates.get(other.toLowerCase()), history); ObjectMap<String> config = build(dir, templates.get(other.toLowerCase()), history);
if (config == null) { if (config == null) {
throw new SubCreatorException(); throw new SubCreatorException();
} else { } else {

View File

@ -46,9 +46,13 @@ public class ConfigUpdater {
existing = updated.clone(); existing = updated.clone();
i++; i++;
} if (was.compareTo(new Version("20w24c")) <= 0) {
// additions only this time
i++;
}// if (was.compareTo(new Version("99w99a")) <= 0) { }// if (was.compareTo(new Version("99w99a")) <= 0) {
// // do something // // do something
// i++ // i++;
//} //}
if (i > 0) SubAPI.getInstance().getAppInfo().getLogger().info.println("Updated ./config.yml (" + i + " pass" + ((i != 1)?"es":"") + ")"); if (i > 0) SubAPI.getInstance().getAppInfo().getLogger().info.println("Updated ./config.yml (" + i + " pass" + ((i != 1)?"es":"") + ")");
@ -59,6 +63,7 @@ public class ConfigUpdater {
settings.set("Version", ((now.compareTo(was) <= 0)?was:now).toString()); settings.set("Version", ((now.compareTo(was) <= 0)?was:now).toString());
settings.set("Console-Log", updated.getMap("Settings", new YAMLSection()).getBoolean("Console-Log", true)); settings.set("Console-Log", updated.getMap("Settings", new YAMLSection()).getBoolean("Console-Log", true));
settings.set("Network-Log", updated.getMap("Settings", new YAMLSection()).getBoolean("Network-Log", true)); settings.set("Network-Log", updated.getMap("Settings", new YAMLSection()).getBoolean("Network-Log", true));
settings.set("Download-Templates", updated.getMap("Settings", new YAMLSection()).getBoolean("Download-Templates", true));
settings.set("Server-Bind", updated.getMap("Settings", new YAMLSection()).getRawString("Server-Bind", "127.0.0.1")); settings.set("Server-Bind", updated.getMap("Settings", new YAMLSection()).getRawString("Server-Bind", "127.0.0.1"));
YAMLSection upnp = new YAMLSection(); YAMLSection upnp = new YAMLSection();

View File

@ -1,13 +1,9 @@
package net.ME1312.SubServers.Host.Network.Packet; package net.ME1312.SubServers.Host.Network.Packet;
import net.ME1312.Galaxi.Engine.GalaxiEngine;
import net.ME1312.Galaxi.Library.Map.ObjectMap; import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.Galaxi.Library.UniversalFile;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.SubData.Client.Protocol.PacketObjectIn; import net.ME1312.SubData.Client.Protocol.PacketObjectIn;
import net.ME1312.SubData.Client.Protocol.PacketOut; import net.ME1312.SubData.Client.Protocol.PacketObjectOut;
import net.ME1312.SubData.Client.SubDataSender; import net.ME1312.SubData.Client.SubDataSender;
import net.ME1312.SubServers.Host.Executable.SubCreatorImpl;
import net.ME1312.SubServers.Host.ExHost; import net.ME1312.SubServers.Host.ExHost;
import java.util.Map; import java.util.Map;
@ -15,7 +11,7 @@ import java.util.Map;
/** /**
* External Host Configuration Packet * External Host Configuration Packet
*/ */
public class PacketExConfigureHost implements PacketObjectIn<Integer>, PacketOut { public class PacketExConfigureHost implements PacketObjectIn<Integer>, PacketObjectOut<Integer> {
private static boolean first = false; private static boolean first = false;
private ExHost host; private ExHost host;
@ -27,35 +23,20 @@ public class PacketExConfigureHost implements PacketObjectIn<Integer>, PacketOut
} }
@Override @Override
public void sending(SubDataSender client) { public ObjectMap<Integer> send(SubDataSender client) {
host.log.info.println("Downloading Host Settings..."); host.log.info.println("Downloading Host Settings...");
first = true; first = true;
ObjectMap<Integer> data = new ObjectMap<Integer>();
data.set(0x0000, host.config.get().getMap("Settings").getBoolean("Download-Templates", true));
return data;
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@Override @Override
public void receive(SubDataSender client, ObjectMap<Integer> data) { public void receive(SubDataSender client, ObjectMap<Integer> data) {
host.host = new ObjectMap<>((Map<String, ?>) data.getObject(0x0000)); host.host = new ObjectMap<>((Map<String, ?>) data.getObject(0x0000));
for (SubCreatorImpl.ServerTemplate template : host.templates.values()) {
Util.deleteDirectory(template.getDirectory());
}
host.templates.clear();
UniversalFile templatedir = new UniversalFile(GalaxiEngine.getInstance().getRuntimeDirectory(), "Templates");
ObjectMap<String> templates = new ObjectMap<>((Map<String, ?>) data.getObject(0x0001));
Util.deleteDirectory(templatedir);
templatedir.mkdirs();
for (String name : templates.getKeys()) {
try {
UniversalFile dir = new UniversalFile(templatedir, name);
SubCreatorImpl.ServerTemplate template = new SubCreatorImpl.ServerTemplate(name, templates.getMap(name).getBoolean("enabled"), templates.getMap(name).getRawString("icon"), dir,
templates.getMap(name).getMap("build").clone(), templates.getMap(name).getMap("settings").clone());
host.templates.put(name.toLowerCase(), template);
if (!templates.getMap(name).getRawString("display").equals(name)) template.setDisplayName(templates.getMap(name).getRawString("display"));
} catch (Exception e) {
host.log.error.println("Couldn't load template: " + name);
host.log.error.println(e);
}
}
host.log.info.println(((first)?"":"New ") + "Host Settings Downloaded"); host.log.info.println(((first)?"":"New ") + "Host Settings Downloaded");
first = false; first = false;
} }

View File

@ -7,6 +7,7 @@ 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.Host.ExHost; import net.ME1312.SubServers.Host.ExHost;
import net.ME1312.SubServers.Host.Executable.SubCreatorImpl;
import java.util.Map; import java.util.Map;
import java.util.UUID; import java.util.UUID;
@ -90,7 +91,10 @@ public class PacketExCreateServer implements PacketObjectIn<Integer>, PacketObje
UUID log = data.getUUID(0x0006); UUID log = data.getUUID(0x0006);
UUID player = (data.contains(0x0007)?data.getUUID(0x0007):null); UUID player = (data.contains(0x0007)?data.getUUID(0x0007):null);
host.creator.create(player, name, host.templates.get(template.toLowerCase()), version, port, log, tracker); SubCreatorImpl.ServerTemplate templateV = host.templates.get(template.toLowerCase());
if (templateV == null) templateV = host.templatesR.get(template.toLowerCase());
host.creator.create(player, name, templateV, version, port, log, tracker);
} }
} catch (Throwable e) { } catch (Throwable e) {
host.log.error.println(e); host.log.error.println(e);

View File

@ -27,13 +27,13 @@ public class PacketExDownloadTemplates implements PacketOut, PacketStreamIn {
@Override @Override
public void sending(SubDataSender client) throws Throwable { public void sending(SubDataSender client) throws Throwable {
host.log.info.println("Downloading Template Files..."); host.log.info.println("Downloading Remote Template Files...");
first = true; first = true;
} }
@Override @Override
public void receive(SubDataSender client, InputStream stream) { public void receive(SubDataSender client, InputStream stream) {
UniversalFile dir = new UniversalFile(GalaxiEngine.getInstance().getRuntimeDirectory(), "Templates"); UniversalFile dir = new UniversalFile(GalaxiEngine.getInstance().getRuntimeDirectory(), "Cache:Remote:Templates");
try { try {
if (dir.exists()) Util.deleteDirectory(dir); if (dir.exists()) Util.deleteDirectory(dir);
} catch (Exception e) { } catch (Exception e) {
@ -41,8 +41,10 @@ public class PacketExDownloadTemplates implements PacketOut, PacketStreamIn {
} }
try { try {
dir.mkdirs();
Util.unzip(stream, dir); Util.unzip(stream, dir);
host.log.info.println(((first)?"":"New ") + "Template Files Downloaded"); host.creator.load(true);
host.log.info.println(((first)?"":"New ") + "Remote Template Files Downloaded");
} catch (Exception e) { } catch (Exception e) {
SubAPI.getInstance().getAppInfo().getLogger().error.println("Problem decoding template files"); SubAPI.getInstance().getAppInfo().getLogger().error.println("Problem decoding template files");
SubAPI.getInstance().getAppInfo().getLogger().error.println(e); SubAPI.getInstance().getAppInfo().getLogger().error.println(e);

View File

@ -0,0 +1,58 @@
package net.ME1312.SubServers.Host.Network.Packet;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.SubData.Client.Protocol.PacketIn;
import net.ME1312.SubData.Client.Protocol.PacketObjectOut;
import net.ME1312.SubData.Client.SubDataSender;
import net.ME1312.SubServers.Host.ExHost;
import net.ME1312.SubServers.Host.Executable.SubCreatorImpl;
/**
* External Host Template Upload Packet
*/
public class PacketExUploadTemplates implements PacketIn, PacketObjectOut<Integer> {
private boolean first;
private ExHost host;
/**
* New PacketExUploadTemplates
*/
public PacketExUploadTemplates(ExHost host) {
this(host, true);
}
private PacketExUploadTemplates(ExHost host, boolean first) {
this.host = host;
this.first = first;
}
@Override
public ObjectMap<Integer> send(SubDataSender client) {
host.log.info.println(((first)?"S":"Res") + "ending Local Template Metadata...");
if (!first) host.creator.load(false);
ObjectMap<Integer> data = new ObjectMap<Integer>();
ObjectMap<String> templates = new ObjectMap<String>();
for (SubCreatorImpl.ServerTemplate template : host.templates.values()) {
ObjectMap<String> tinfo = new ObjectMap<String>();
tinfo.set("enabled", template.isEnabled());
tinfo.set("display", template.getDisplayName());
tinfo.set("icon", template.getIcon());
tinfo.set("build", template.getBuildOptions().clone());
tinfo.set("settings", template.getConfigOptions().clone());
templates.set(template.getName(), tinfo);
}
data.set(0x0000, templates);
return data;
}
@SuppressWarnings("unchecked")
@Override
public void receive(SubDataSender client) {
client.sendPacket(new PacketExUploadTemplates(host, false));
}
@Override
public int version() {
return 0x0001;
}
}

View File

@ -89,24 +89,26 @@ public class SubProtocol extends SubDataProtocol {
// 50-6F: External Host Packets // 50-6F: External Host Packets
instance.registerPacket(0x0050, PacketExConfigureHost.class); instance.registerPacket(0x0050, PacketExConfigureHost.class);
instance.registerPacket(0x0051, PacketExDownloadTemplates.class); instance.registerPacket(0x0051, PacketExUploadTemplates.class);
instance.registerPacket(0x0052, PacketOutExRequestQueue.class); instance.registerPacket(0x0052, PacketExDownloadTemplates.class);
instance.registerPacket(0x0053, PacketExCreateServer.class); instance.registerPacket(0x0053, PacketOutExRequestQueue.class);
instance.registerPacket(0x0054, PacketExAddServer.class); instance.registerPacket(0x0054, PacketExCreateServer.class);
instance.registerPacket(0x0055, PacketExEditServer.class); instance.registerPacket(0x0055, PacketExAddServer.class);
instance.registerPacket(0x0056, PacketOutExLogMessage.class); instance.registerPacket(0x0056, PacketExEditServer.class);
instance.registerPacket(0x0057, PacketExRemoveServer.class); instance.registerPacket(0x0057, PacketOutExLogMessage.class);
instance.registerPacket(0x0058, PacketExDeleteServer.class); instance.registerPacket(0x0058, PacketExRemoveServer.class);
instance.registerPacket(0x0059, PacketExDeleteServer.class);
instance.registerPacket(0x0050, new PacketExConfigureHost(host)); instance.registerPacket(0x0050, new PacketExConfigureHost(host));
instance.registerPacket(0x0051, new PacketExDownloadTemplates(host)); instance.registerPacket(0x0051, new PacketExUploadTemplates(host));
//instance.registerPacket(0x0052, new PacketOutExRequestQueue(host)); instance.registerPacket(0x0052, new PacketExDownloadTemplates(host));
instance.registerPacket(0x0053, new PacketExCreateServer(host)); //instance.registerPacket(0x0053, new PacketOutExRequestQueue(host));
instance.registerPacket(0x0054, new PacketExAddServer(host)); instance.registerPacket(0x0054, new PacketExCreateServer(host));
instance.registerPacket(0x0055, new PacketExEditServer(host)); instance.registerPacket(0x0055, new PacketExAddServer(host));
//instance.registerPacket(0x0056, new PacketOutExLogMessage()); instance.registerPacket(0x0056, new PacketExEditServer(host));
instance.registerPacket(0x0057, new PacketExRemoveServer(host)); //instance.registerPacket(0x0057, new PacketOutExLogMessage());
instance.registerPacket(0x0058, new PacketExDeleteServer(host)); instance.registerPacket(0x0058, new PacketExRemoveServer(host));
instance.registerPacket(0x0059, new PacketExDeleteServer(host));
// 70-7F: External Misc Packets // 70-7F: External Misc Packets
@ -152,7 +154,9 @@ public class SubProtocol extends SubDataProtocol {
SubDataClient subdata = super.open(scheduler, logger, address, port); SubDataClient subdata = super.open(scheduler, logger, address, port);
subdata.sendPacket(new PacketLinkExHost(host, 0)); subdata.sendPacket(new PacketLinkExHost(host, 0));
subdata.sendPacket(new PacketExConfigureHost(host)); subdata.sendPacket(new PacketExConfigureHost(host));
subdata.sendPacket(new PacketExDownloadTemplates(host)); subdata.sendPacket(new PacketExUploadTemplates(host));
if (host.config.get().getMap("Settings").getBoolean("Download-Templates", true))
subdata.sendPacket(new PacketExDownloadTemplates(host));
subdata.sendPacket(new PacketDownloadLang()); subdata.sendPacket(new PacketDownloadLang());
subdata.sendPacket(new PacketOutExRequestQueue()); subdata.sendPacket(new PacketOutExRequestQueue());
subdata.on.ready(client -> host.engine.getPluginManager().executeEvent(new SubNetworkConnectEvent((SubDataClient) client))); subdata.on.ready(client -> host.engine.getPluginManager().executeEvent(new SubNetworkConnectEvent((SubDataClient) client)));