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 net.ME1312.Galaxi.Library.*;
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.NamedContainer;
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.Version.Version;
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.PacketExCreateServer;
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.SubProxy;
import net.md_5.bungee.api.ChatColor;
import java.io.File;
@ -32,6 +32,8 @@ import java.util.*;
@SuppressWarnings("unchecked")
public class ExternalSubCreator extends SubCreator {
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 Range<Integer> ports;
private Container<Boolean> log;
@ -59,13 +61,13 @@ public class ExternalSubCreator extends SubCreator {
@Override
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()) {
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);
templatesR.put(file.getName().toLowerCase(), template);
if (config.getKeys().contains("Display")) template.setDisplayName(config.getString("Display"));
}
} 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 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"),
server.getRawString("Executable"), server.getRawString("Stop-Command"), server.getBoolean("Hidden"), server.getBoolean("Restricted"));
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);
SubServer.StopAction action = Util.getDespiteException(() -> SubServer.StopAction.valueOf(server.getRawString("Stop-Action").toUpperCase().replace('-', '_').replace(' ', '_')), null);
if (action != null) subserver.setStopAction(action);
@ -315,7 +318,10 @@ public class ExternalSubCreator extends SubCreator {
@Override
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

View File

@ -4,7 +4,6 @@ import com.google.common.collect.Range;
import com.google.gson.Gson;
import net.ME1312.Galaxi.Library.*;
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.Container.Container;
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"),
server.getRawString("Executable"), server.getRawString("Stop-Command"), server.getBoolean("Hidden"), server.getBoolean("Restricted"));
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);
SubServer.StopAction action = Util.getDespiteException(() -> SubServer.StopAction.valueOf(server.getRawString("Stop-Action").toUpperCase().replace('-', '_').replace(' ', '_')), null);
if (action != null) subserver.setStopAction(action);

View File

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

View File

@ -16,7 +16,8 @@ import java.util.*;
*/
public abstract class SubServerImpl extends ServerImpl implements SubServer {
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;
private boolean updating;
@ -84,16 +85,26 @@ public abstract class SubServerImpl extends ServerImpl implements SubServer {
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
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));
this.template = (template != null)?template.getName():null;
this.templateV = template;
this.templateS = (template != null)?template.getName():null;
}
@Override
public SubCreator.ServerTemplate getTemplate() {
if (template != null && getHost().getCreator().getTemplates().keySet().contains(template.toLowerCase())) {
return getHost().getCreator().getTemplate(template.toLowerCase());
if (templateV != null) {
return templateV;
} else if (templateS != null && getHost().getCreator().getTemplates().keySet().contains(templateS.toLowerCase())) {
return getHost().getCreator().getTemplate(templateS.toLowerCase());
} else {
return null;
}

View File

@ -1,17 +1,18 @@
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.SubCreator;
import net.ME1312.SubServers.Bungee.Host.External.ExternalSubCreator;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.SubData.Server.SubDataClient;
import net.ME1312.SubData.Server.Protocol.PacketIn;
import net.ME1312.SubData.Server.Protocol.PacketObjectOut;
import net.ME1312.SubServers.Bungee.SubProxy;
/**
* External Host Configuration Packet
*/
public class PacketExConfigureHost implements PacketIn, PacketObjectOut<Integer> {
public class PacketExConfigureHost implements PacketObjectIn<Integer>, PacketObjectOut<Integer> {
private SubProxy plugin;
private ExternalHost host;
@ -34,25 +35,15 @@ public class PacketExConfigureHost implements PacketIn, PacketObjectOut<Integer>
public ObjectMap<Integer> send(SubDataClient client) {
ObjectMap<Integer> data = new ObjectMap<Integer>();
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;
}
@SuppressWarnings("unchecked")
@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())) {
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.Protocol.PacketIn;
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.SubProxy;
@ -38,6 +39,8 @@ public class PacketExDownloadTemplates implements PacketIn, PacketStreamOut {
try {
Util.zip(new UniversalFile(plugin.dir, "SubServers:Templates"), stream);
stream.close();
Util.isException(() -> Util.reflect(ExternalSubCreator.class.getDeclaredField("enableRT"), host.getCreator(), true));
} catch (Exception e) {
Logger.get("SubData").info("Problem encoding template files for Host: " + host.getName());
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
instance.registerPacket(0x0050, PacketExConfigureHost.class);
instance.registerPacket(0x0051, PacketExDownloadTemplates.class);
//instance.registerPacket(0x0052, PacketInExRequestQueue.class);
instance.registerPacket(0x0053, PacketExCreateServer.class);
instance.registerPacket(0x0054, PacketExAddServer.class);
instance.registerPacket(0x0055, PacketExEditServer.class);
//instance.registerPacket(0x0056, PacketInExLogMessage.class);
instance.registerPacket(0x0057, PacketExRemoveServer.class);
instance.registerPacket(0x0058, PacketExDeleteServer.class);
//instance.registerPacket(0x0059, PacketExRestoreServer.class);
instance.registerPacket(0x0051, PacketExUploadTemplates.class);
instance.registerPacket(0x0052, PacketExDownloadTemplates.class);
//instance.registerPacket(0x0053, PacketInExRequestQueue.class);
instance.registerPacket(0x0054, PacketExCreateServer.class);
instance.registerPacket(0x0055, PacketExAddServer.class);
instance.registerPacket(0x0056, PacketExEditServer.class);
//instance.registerPacket(0x0057, PacketInExLogMessage.class);
instance.registerPacket(0x0058, PacketExRemoveServer.class);
instance.registerPacket(0x0059, PacketExDeleteServer.class);
//instance.registerPacket(0x005A, PacketExRestoreServer.class);
instance.registerPacket(0x0050, new PacketExConfigureHost(plugin));
instance.registerPacket(0x0051, new PacketExDownloadTemplates(plugin));
instance.registerPacket(0x0052, new PacketInExRequestQueue(plugin));
instance.registerPacket(0x0053, new PacketExCreateServer(null));
instance.registerPacket(0x0054, new PacketExAddServer());
instance.registerPacket(0x0055, new PacketExEditServer(plugin));
instance.registerPacket(0x0056, new PacketInExLogMessage());
instance.registerPacket(0x0057, new PacketExRemoveServer());
instance.registerPacket(0x0058, new PacketExDeleteServer());
//instance.registerPacket(0x0059, new PacketExRestoreServer());
instance.registerPacket(0x0051, new PacketExUploadTemplates(plugin));
instance.registerPacket(0x0052, new PacketExDownloadTemplates(plugin));
instance.registerPacket(0x0053, new PacketInExRequestQueue(plugin));
instance.registerPacket(0x0054, new PacketExCreateServer(null));
instance.registerPacket(0x0055, new PacketExAddServer());
instance.registerPacket(0x0056, new PacketExEditServer(plugin));
instance.registerPacket(0x0057, new PacketInExLogMessage());
instance.registerPacket(0x0058, new PacketExRemoveServer());
instance.registerPacket(0x0059, new PacketExDeleteServer());
//instance.registerPacket(0x005A, new PacketExRestoreServer());
// 70-7F: External Misc Packets

View File

@ -83,6 +83,7 @@ public final class SubProxy extends BungeeCord implements Listener {
public final boolean isGalaxi;
public long resetDate = 0;
private boolean running = false;
private boolean reloading = false;
private boolean posted = false;
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();
boolean status;
if (!(status = running)) resetDate = begin;
reloading = true;
ConfigUpdater.updateConfig(new UniversalFile(dir, "SubServers:config.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()))))
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()))))
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")) {
for (String group : server.getGroups()) server.removeGroup(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));
}
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");
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();
} else if (item.equals(plugin.api.getLang("SubServers", "Interface.Generic.Undo"))) {
player.closeInventory();
((UIRenderer.CreatorOptions) gui.lastVisitedObjectz[0]).undo();
gui.hostCreator((UIRenderer.CreatorOptions) gui.lastVisitedObjectz[0]);
((UIRenderer.CreatorOptions) gui.lastVisitedObjects[0]).undo();
gui.hostCreator((UIRenderer.CreatorOptions) gui.lastVisitedObjects[0]);
} 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")) {
player.closeInventory();
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();
}));
} else {
@ -125,7 +125,7 @@ public class DefaultUIHandler implements UIHandler, Listener {
if (m.getString("message").contains(" ")) {
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"));
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 {
gui.setDownloading(plugin.api.getLang("SubServers", "Interface.Generic.Downloading.Response"));
plugin.api.getSubServer(m.getString("message"), server -> {
@ -133,26 +133,26 @@ public class DefaultUIHandler implements UIHandler, Listener {
gui.setDownloading(null);
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"));
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 {
((UIRenderer.CreatorOptions) gui.lastVisitedObjectz[0]).setName(m.getString("message"));
gui.hostCreator((UIRenderer.CreatorOptions) gui.lastVisitedObjectz[0]);
((UIRenderer.CreatorOptions) gui.lastVisitedObjects[0]).setName(m.getString("message"));
gui.hostCreator((UIRenderer.CreatorOptions) gui.lastVisitedObjects[0]);
}
});
}
});
} else if (ChatColor.stripColor(item).equals(ChatColor.stripColor(plugin.api.getLang("SubServers", "Interface.Host-Creator.Edit-Template")))) {
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")))) {
player.closeInventory();
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"));
input.put(player.getUniqueId(), m -> {
if (m.getString("message").length() <= 0) {
((UIRenderer.CreatorOptions) gui.lastVisitedObjectz[0]).setVersion(null);
} else ((UIRenderer.CreatorOptions) gui.lastVisitedObjectz[0]).setVersion(new Version(m.getString("message")));
gui.hostCreator((UIRenderer.CreatorOptions) gui.lastVisitedObjectz[0]);
((UIRenderer.CreatorOptions) gui.lastVisitedObjects[0]).setVersion(null);
} else ((UIRenderer.CreatorOptions) gui.lastVisitedObjects[0]).setVersion(new Version(m.getString("message")));
gui.hostCreator((UIRenderer.CreatorOptions) gui.lastVisitedObjects[0]);
});
} else if (ChatColor.stripColor(item).equals(ChatColor.stripColor(plugin.api.getLang("SubServers", "Interface.Host-Creator.Edit-Port")))) {
player.closeInventory();
@ -160,15 +160,15 @@ public class DefaultUIHandler implements UIHandler, Listener {
player.sendMessage(plugin.api.getLang("SubServers", "Interface.Host-Creator.Edit-Port.Message"));
input.put(player.getUniqueId(), m -> {
if (m.getString("message").length() <= 0) {
((UIRenderer.CreatorOptions) gui.lastVisitedObjectz[0]).setPort(null);
gui.hostCreator((UIRenderer.CreatorOptions) gui.lastVisitedObjectz[0]);
((UIRenderer.CreatorOptions) gui.lastVisitedObjects[0]).setPort(null);
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) {
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"));
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 {
((UIRenderer.CreatorOptions) gui.lastVisitedObjectz[0]).setPort(Integer.valueOf(m.getString("message")));
gui.hostCreator((UIRenderer.CreatorOptions) gui.lastVisitedObjectz[0]);
((UIRenderer.CreatorOptions) gui.lastVisitedObjects[0]).setPort(Integer.valueOf(m.getString("message")));
gui.hostCreator((UIRenderer.CreatorOptions) gui.lastVisitedObjects[0]);
}
});
}
@ -180,13 +180,13 @@ public class DefaultUIHandler implements UIHandler, Listener {
String item = event.getCurrentItem().getItemMeta().getDisplayName();
if (item.equals(plugin.api.getLang("SubServers", "Interface.Generic.Back-Arrow"))) {
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"))) {
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"))) {
player.closeInventory();
gui.hostCreator((UIRenderer.CreatorOptions) gui.lastVisitedObjectz[0]);
gui.hostCreator((UIRenderer.CreatorOptions) gui.lastVisitedObjects[0]);
} else {
player.closeInventory();
String obj;
@ -195,8 +195,8 @@ public class DefaultUIHandler implements UIHandler, Listener {
} else {
obj = ChatColor.stripColor(item);
}
((UIRenderer.CreatorOptions) gui.lastVisitedObjectz[0]).setTemplate(obj);
gui.hostCreator((UIRenderer.CreatorOptions) gui.lastVisitedObjectz[0]);
((UIRenderer.CreatorOptions) gui.lastVisitedObjects[0]).setTemplate(obj);
gui.hostCreator((UIRenderer.CreatorOptions) gui.lastVisitedObjects[0]);
}
}
} 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();
if (item.equals(plugin.api.getLang("SubServers", "Interface.Generic.Back-Arrow"))) {
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"))) {
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"))) {
player.closeInventory();
gui.back();
@ -222,8 +222,8 @@ public class DefaultUIHandler implements UIHandler, Listener {
if (plugin.get() == null) {
gui.reopen();
} else {
gui.setDownloading(ChatColor.stripColor(this.plugin.api.getLang("SubServers", "Interface.Host-Plugin.Title").replace("$str$", ((Host) gui.lastVisitedObjectz[0]).getName())));
this.plugin.api.getHost(((Host) gui.lastVisitedObjectz[0]).getName(), host -> {
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.lastVisitedObjects[0]).getName(), host -> {
if (host != null) {
gui.setDownloading(null);
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"))) {
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"))) {
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"))) {
player.closeInventory();
gui.hostMenu(1);
@ -297,15 +297,15 @@ public class DefaultUIHandler implements UIHandler, Listener {
gui.back();
} else if (item.equals(plugin.api.getLang("SubServers", "Interface.Host-Admin.Creator"))) {
player.closeInventory();
if (player.hasPermission("subservers.host.create.*") || player.hasPermission("subservers.host.create." + ((Host) gui.lastVisitedObjectz[0]).getName().toLowerCase())) {
gui.hostCreator(new UIRenderer.CreatorOptions(((Host) gui.lastVisitedObjectz[0]).getName()));
if (player.hasPermission("subservers.host.create.*") || player.hasPermission("subservers.host.create." + ((Host) gui.lastVisitedObjects[0]).getName().toLowerCase())) {
gui.hostCreator(new UIRenderer.CreatorOptions(((Host) gui.lastVisitedObjects[0]).getName()));
} else gui.reopen();
} else if (item.equals(plugin.api.getLang("SubServers", "Interface.Host-Admin.SubServers"))) {
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"))) {
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
@ -319,12 +319,12 @@ public class DefaultUIHandler implements UIHandler, Listener {
gui.back();
} else if (item.equals(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Update"))) {
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))
player.sendMessage(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Update.Message"));
input.put(player.getUniqueId(), m -> {
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 -> {
gui.reopen();
}));
@ -332,23 +332,23 @@ public class DefaultUIHandler implements UIHandler, Listener {
} else gui.reopen();
} else if (item.equals(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Start"))) {
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"));
((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"));
Bukkit.getScheduler().runTaskLater(plugin, gui::reopen, 30);
});
} else gui.reopen();
} else if (item.equals(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Stop"))) {
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"));
final Container<Boolean> listening = new Container<Boolean>(true);
PacketInExRunEvent.callback("SubStoppedEvent", new Callback<ObjectMap<String>>() {
@Override
public void run(ObjectMap<String> json) {
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);
} else {
Bukkit.getScheduler().runTaskLater(plugin, gui::reopen, 5);
@ -356,23 +356,23 @@ public class DefaultUIHandler implements UIHandler, Listener {
} catch (Exception e) {}
}
});
((SubServer) gui.lastVisitedObjectz[0]).stop(player.getUniqueId(), response -> {
((SubServer) gui.lastVisitedObjects[0]).stop(player.getUniqueId(), response -> {
if (response != 0) {
gui.reopen();
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 if (item.equals(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Terminate"))) {
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"));
final Container<Boolean> listening = new Container<Boolean>(true);
PacketInExRunEvent.callback("SubStoppedEvent", new Callback<ObjectMap<String>>() {
@Override
public void run(ObjectMap<String> json) {
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);
} else {
gui.reopen();
@ -380,28 +380,28 @@ public class DefaultUIHandler implements UIHandler, Listener {
} catch (Exception e) {}
}
});
((SubServer) gui.lastVisitedObjectz[0]).terminate(player.getUniqueId(), response -> {
((SubServer) gui.lastVisitedObjects[0]).terminate(player.getUniqueId(), response -> {
if (response != 0) {
gui.reopen();
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 if (item.equals(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Command"))) {
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))
player.sendMessage(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Command.Message"));
input.put(player.getUniqueId(), m -> {
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();
});
});
} else gui.reopen();
} else if (item.equals(plugin.api.getLang("SubServers", "Interface.SubServer-Admin.Plugins"))) {
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
@ -411,10 +411,10 @@ public class DefaultUIHandler implements UIHandler, Listener {
String item = event.getCurrentItem().getItemMeta().getDisplayName();
if (item.equals(plugin.api.getLang("SubServers", "Interface.Generic.Back-Arrow"))) {
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"))) {
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"))) {
player.closeInventory();
gui.back();
@ -427,8 +427,8 @@ public class DefaultUIHandler implements UIHandler, Listener {
if (plugin.get() == null) {
gui.reopen();
} else {
gui.setDownloading(ChatColor.stripColor(this.plugin.api.getLang("SubServers", "Interface.SubServer-Plugin.Title").replace("$str$", ((SubServer) gui.lastVisitedObjectz[0]).getName())));
this.plugin.api.getSubServer(((SubServer) gui.lastVisitedObjectz[0]).getName(), subserver -> {
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.lastVisitedObjects[0]).getName(), subserver -> {
if (subserver != null) {
gui.setDownloading(null);
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.NamedContainer;
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.Server;
import net.ME1312.SubServers.Client.Bukkit.Network.API.SubCreator;
@ -26,7 +25,7 @@ import java.util.*;
public class DefaultUIRenderer extends UIRenderer {
private static int MAX_VISITED_OBJECTS = 2;
private List<Runnable> windowHistory = new LinkedList<Runnable>();
Object[] lastVisitedObjectz = new Object[MAX_VISITED_OBJECTS];
Object[] lastVisitedObjects = new Object[MAX_VISITED_OBJECTS];
int lastPage = 1;
Runnable lastMenu = null;
boolean open = false;
@ -84,7 +83,7 @@ public class DefaultUIRenderer extends UIRenderer {
setDownloading(ChatColor.stripColor(plugin.api.getLang("SubServers", "Interface.Host-Menu.Title")));
plugin.api.getHosts(hosts -> plugin.api.getGroups(groups -> {
setDownloading(null);
lastVisitedObjectz[0] = null;
lastVisitedObjects[0] = null;
lastPage = page;
lastMenu = () -> hostMenu(1);
windowHistory.add(() -> hostMenu(page));
@ -220,7 +219,7 @@ public class DefaultUIRenderer extends UIRenderer {
if (hasHistory()) back();
} else {
setDownloading(null);
lastVisitedObjectz[0] = host;
lastVisitedObjects[0] = host;
ItemStack block;
ItemMeta blockMeta;
@ -328,11 +327,11 @@ public class DefaultUIRenderer extends UIRenderer {
public void hostCreator(final CreatorOptions options) {
setDownloading(ChatColor.stripColor(plugin.api.getLang("SubServers", "Interface.Host-Creator.Title").replace("$str$", options.getHost())));
if (!options.init()) windowHistory.add(() -> hostCreator(options));
lastVisitedObjectz[0] = options;
lastVisitedObjects[0] = options;
plugin.api.getHost(options.getHost(), host -> {
if (host == null || !host.isAvailable() || !host.isEnabled()) {
lastVisitedObjectz[0] = null;
lastVisitedObjects[0] = null;
if (hasHistory()) back();
} else {
setDownloading(null);
@ -455,10 +454,10 @@ public class DefaultUIRenderer extends UIRenderer {
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())));
options.init();
lastVisitedObjectz[0] = options;
lastVisitedObjects[0] = options;
plugin.api.getHost(options.getHost(), host -> {
if (host == null || !host.isAvailable() || !host.isEnabled()) {
lastVisitedObjectz[0] = null;
lastVisitedObjects[0] = null;
if (hasHistory()) back();
} else {
lastPage = page;
@ -573,7 +572,7 @@ public class DefaultUIRenderer extends UIRenderer {
if (hasHistory()) back();
} else {
setDownloading(null);
lastVisitedObjectz[0] = host;
lastVisitedObjects[0] = host;
lastPage = page;
List<String> renderers = new LinkedList<String>();
for (String renderer : renderers) {
@ -677,7 +676,7 @@ public class DefaultUIRenderer extends UIRenderer {
setDownloading(ChatColor.stripColor(plugin.api.getLang("SubServers", "Interface.Group-Menu.Title")));
plugin.api.getGroups(groups -> {
setDownloading(null);
lastVisitedObjectz[0] = null;
lastVisitedObjects[0] = null;
lastPage = page;
lastMenu = () -> groupMenu(1);
windowHistory.add(() -> groupMenu(page));
@ -791,8 +790,8 @@ public class DefaultUIRenderer extends UIRenderer {
lastPage = page;
List<Server> servers = servercontainer.get();
lastVisitedObjectz[0] = host;
lastVisitedObjectz[1] = group;
lastVisitedObjects[0] = host;
lastVisitedObjects[1] = group;
windowHistory.add(() -> serverMenu(page, host, group));
ItemStack block;
@ -985,7 +984,7 @@ public class DefaultUIRenderer extends UIRenderer {
if (hasHistory()) back();
} else {
setDownloading(null);
lastVisitedObjectz[0] = subserver;
lastVisitedObjects[0] = subserver;
ItemStack block;
ItemMeta blockMeta;
ItemStack div = createItem("STAINED_GLASS_PANE", "BLACK_STAINED_GLASS_PANE", (short) 15);
@ -1191,7 +1190,7 @@ public class DefaultUIRenderer extends UIRenderer {
if (hasHistory()) back();
} else {
setDownloading(null);
lastVisitedObjectz[0] = subserver;
lastVisitedObjects[0] = subserver;
lastPage = page;
List<String> renderers = new LinkedList<String>();
for (String renderer : renderers) {

View File

@ -46,6 +46,7 @@ import java.util.jar.Manifest;
public final class ExHost {
HashMap<Integer, SubDataClient> subdata = new HashMap<Integer, SubDataClient>();
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, SubServerImpl> servers = new HashMap<String, SubServerImpl>();
public SubCreatorImpl creator;
@ -122,7 +123,7 @@ public final class ExHost {
config = new YAMLConfig(new UniversalFile(engine.getRuntimeDirectory(), "config.yml"));
if (!(new UniversalFile(engine.getRuntimeDirectory(), "Templates").exists())) {
new UniversalFile(engine.getRuntimeDirectory(), "Templates").mkdir();
new UniversalFile(engine.getRuntimeDirectory(), "Templates").mkdirs();
log.info.println("Created ./Templates/");
}
@ -234,6 +235,7 @@ public final class ExHost {
ConfigUpdater.updateConfig(new UniversalFile(engine.getRuntimeDirectory(), "config.yml"));
config.reload();
creator.load(false);
subprotocol.unregisterCipher("AES");
subprotocol.unregisterCipher("AES-128");
@ -347,7 +349,7 @@ public final class ExHost {
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;
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.Container.NamedContainer;
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 final HashMap<String, ServerTemplate> templates;
private final SubServerImpl update;
private final UUID player;
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) {
super(SubAPI.getInstance().getAppInfo().getName() + "::SubCreator_Process_Handler(" + name + ')');
this.templates = new HashMap<String, ServerTemplate>();
this.update = host.servers.getOrDefault(name.toLowerCase(), null);
this.player = player;
this.name = name;
@ -226,6 +253,9 @@ public class SubCreatorImpl {
this.replacements = new HashMap<String, String>();
this.address = address;
this.tracker = tracker;
templates.putAll(host.templatesR);
templates.putAll(host.templates);
}
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");
history.add(template);
for (String other : template.getBuildOptions().getStringList("Import", new ArrayList<String>())) {
if (host.templates.keySet().contains(other.toLowerCase())) {
if (host.templates.get(other.toLowerCase()).isEnabled()) {
if (version != null || !host.templates.get(other.toLowerCase()).requiresVersion()) {
if (update == null || host.templates.get(other.toLowerCase()).canUpdate()) {
ObjectMap<String> config = build(dir, host.templates.get(other.toLowerCase()), history);
if (templates.keySet().contains(other.toLowerCase())) {
if (templates.get(other.toLowerCase()).isEnabled()) {
if (version != null || !templates.get(other.toLowerCase()).requiresVersion()) {
if (update == null || templates.get(other.toLowerCase()).canUpdate()) {
ObjectMap<String> config = build(dir, templates.get(other.toLowerCase()), history);
if (config == null) {
throw new SubCreatorException();
} else {

View File

@ -46,9 +46,13 @@ public class ConfigUpdater {
existing = updated.clone();
i++;
} if (was.compareTo(new Version("20w24c")) <= 0) {
// additions only this time
i++;
}// if (was.compareTo(new Version("99w99a")) <= 0) {
// // do something
// i++
// i++;
//}
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("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("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"));
YAMLSection upnp = new YAMLSection();

View File

@ -1,13 +1,9 @@
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.UniversalFile;
import net.ME1312.Galaxi.Library.Util;
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.SubServers.Host.Executable.SubCreatorImpl;
import net.ME1312.SubServers.Host.ExHost;
import java.util.Map;
@ -15,7 +11,7 @@ import java.util.Map;
/**
* 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 ExHost host;
@ -27,35 +23,20 @@ public class PacketExConfigureHost implements PacketObjectIn<Integer>, PacketOut
}
@Override
public void sending(SubDataSender client) {
public ObjectMap<Integer> send(SubDataSender client) {
host.log.info.println("Downloading Host Settings...");
first = true;
ObjectMap<Integer> data = new ObjectMap<Integer>();
data.set(0x0000, host.config.get().getMap("Settings").getBoolean("Download-Templates", true));
return data;
}
@SuppressWarnings("unchecked")
@Override
public void receive(SubDataSender client, ObjectMap<Integer> data) {
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");
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.SubDataSender;
import net.ME1312.SubServers.Host.ExHost;
import net.ME1312.SubServers.Host.Executable.SubCreatorImpl;
import java.util.Map;
import java.util.UUID;
@ -90,7 +91,10 @@ public class PacketExCreateServer implements PacketObjectIn<Integer>, PacketObje
UUID log = data.getUUID(0x0006);
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) {
host.log.error.println(e);

View File

@ -27,13 +27,13 @@ public class PacketExDownloadTemplates implements PacketOut, PacketStreamIn {
@Override
public void sending(SubDataSender client) throws Throwable {
host.log.info.println("Downloading Template Files...");
host.log.info.println("Downloading Remote Template Files...");
first = true;
}
@Override
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 {
if (dir.exists()) Util.deleteDirectory(dir);
} catch (Exception e) {
@ -41,8 +41,10 @@ public class PacketExDownloadTemplates implements PacketOut, PacketStreamIn {
}
try {
dir.mkdirs();
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) {
SubAPI.getInstance().getAppInfo().getLogger().error.println("Problem decoding template files");
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
instance.registerPacket(0x0050, PacketExConfigureHost.class);
instance.registerPacket(0x0051, PacketExDownloadTemplates.class);
instance.registerPacket(0x0052, PacketOutExRequestQueue.class);
instance.registerPacket(0x0053, PacketExCreateServer.class);
instance.registerPacket(0x0054, PacketExAddServer.class);
instance.registerPacket(0x0055, PacketExEditServer.class);
instance.registerPacket(0x0056, PacketOutExLogMessage.class);
instance.registerPacket(0x0057, PacketExRemoveServer.class);
instance.registerPacket(0x0058, PacketExDeleteServer.class);
instance.registerPacket(0x0051, PacketExUploadTemplates.class);
instance.registerPacket(0x0052, PacketExDownloadTemplates.class);
instance.registerPacket(0x0053, PacketOutExRequestQueue.class);
instance.registerPacket(0x0054, PacketExCreateServer.class);
instance.registerPacket(0x0055, PacketExAddServer.class);
instance.registerPacket(0x0056, PacketExEditServer.class);
instance.registerPacket(0x0057, PacketOutExLogMessage.class);
instance.registerPacket(0x0058, PacketExRemoveServer.class);
instance.registerPacket(0x0059, PacketExDeleteServer.class);
instance.registerPacket(0x0050, new PacketExConfigureHost(host));
instance.registerPacket(0x0051, new PacketExDownloadTemplates(host));
//instance.registerPacket(0x0052, new PacketOutExRequestQueue(host));
instance.registerPacket(0x0053, new PacketExCreateServer(host));
instance.registerPacket(0x0054, new PacketExAddServer(host));
instance.registerPacket(0x0055, new PacketExEditServer(host));
//instance.registerPacket(0x0056, new PacketOutExLogMessage());
instance.registerPacket(0x0057, new PacketExRemoveServer(host));
instance.registerPacket(0x0058, new PacketExDeleteServer(host));
instance.registerPacket(0x0051, new PacketExUploadTemplates(host));
instance.registerPacket(0x0052, new PacketExDownloadTemplates(host));
//instance.registerPacket(0x0053, new PacketOutExRequestQueue(host));
instance.registerPacket(0x0054, new PacketExCreateServer(host));
instance.registerPacket(0x0055, new PacketExAddServer(host));
instance.registerPacket(0x0056, new PacketExEditServer(host));
//instance.registerPacket(0x0057, new PacketOutExLogMessage());
instance.registerPacket(0x0058, new PacketExRemoveServer(host));
instance.registerPacket(0x0059, new PacketExDeleteServer(host));
// 70-7F: External Misc Packets
@ -152,7 +154,9 @@ public class SubProtocol extends SubDataProtocol {
SubDataClient subdata = super.open(scheduler, logger, address, port);
subdata.sendPacket(new PacketLinkExHost(host, 0));
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 PacketOutExRequestQueue());
subdata.on.ready(client -> host.engine.getPluginManager().executeEvent(new SubNetworkConnectEvent((SubDataClient) client)));