Skip to content

Commit

Permalink
Implement several new packet types
Browse files Browse the repository at this point in the history
  • Loading branch information
ME1312 committed May 9, 2019
1 parent 4923b71 commit 1952e7b
Show file tree
Hide file tree
Showing 42 changed files with 2,112 additions and 521 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ public void reload() {
@Override
public boolean create(UUID player, String name, ServerTemplate template, Version version, Integer port, Callback<SubServer> callback) {
if (Util.isNull(name, template)) throw new NullPointerException();
if (host.isAvailable() && host.isEnabled() && template.isEnabled() && !SubAPI.getInstance().getSubServers().keySet().contains(name.toLowerCase()) && !SubCreator.isReserved(name)) {
if (host.isAvailable() && host.isEnabled() && template.isEnabled() && !SubAPI.getInstance().getSubServers().keySet().contains(name.toLowerCase()) && !SubCreator.isReserved(name) && (version != null || !template.requiresVersion())) {
StackTraceElement[] origin = new Exception().getStackTrace();

if (port == null) {
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -281,7 +281,7 @@ public SubServer addSubServer(String name, boolean enabled, int port, String mot
*/
public boolean removeSubServer(String name) throws InterruptedException {
return removeSubServer(null, name);
};
}

/**
* Removes a SubServer
Expand All @@ -297,6 +297,7 @@ public boolean removeSubServer(String name) throws InterruptedException {
* Forces the Removal of a SubServer
*
* @param name SubServer Name
* @return Success Status
*/
public boolean forceRemoveSubServer(String name) throws InterruptedException {
return forceRemoveSubServer(null, name);
Expand All @@ -307,6 +308,7 @@ public boolean forceRemoveSubServer(String name) throws InterruptedException {
*
* @param player Player Removing
* @param name SubServer Name
* @return Success Status
*/
public abstract boolean forceRemoveSubServer(UUID player, String name) throws InterruptedException;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,11 +69,15 @@ private ObjectMap<String> build(File dir, ServerTemplate template, List<ServerTe
for (String other : template.getBuildOptions().getStringList("Import", new ArrayList<String>())) {
if (templates.keySet().contains(other.toLowerCase())) {
if (templates.get(other.toLowerCase()).isEnabled()) {
ObjectMap<String> config = build(dir, templates.get(other.toLowerCase()), history);
if (config == null) {
throw new SubCreatorException();
if (version != null || !templates.get(other.toLowerCase()).requiresVersion()) {
ObjectMap<String> config = build(dir, templates.get(other.toLowerCase()), history);
if (config == null) {
throw new SubCreatorException();
} else {
server.setAll(config);
}
} else {
server.setAll(config);
System.out.println(name + File.separator + "Creator > Skipping template that requires extra versioning: " + other);
}
} else {
System.out.println(name + File.separator + "Creator > Skipping disabled template: " + other);
Expand Down Expand Up @@ -306,7 +310,7 @@ public void reload() {
@Override
public boolean create(UUID player, String name, ServerTemplate template, Version version, Integer port, Callback<SubServer> callback) {
if (Util.isNull(name, template)) throw new NullPointerException();
if (host.isAvailable() && host.isEnabled() && template.isEnabled() && !SubAPI.getInstance().getSubServers().keySet().contains(name.toLowerCase()) && !SubCreator.isReserved(name)) {
if (host.isAvailable() && host.isEnabled() && template.isEnabled() && !SubAPI.getInstance().getSubServers().keySet().contains(name.toLowerCase()) && !SubCreator.isReserved(name) && (version != null || !template.requiresVersion())) {
StackTraceElement[] origin = new Exception().getStackTrace();

if (port == null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -258,25 +258,33 @@ public boolean command(UUID player, String command) {
} else return false;
}

@SuppressWarnings({"deprecation", "unchecked"})
public int edit(UUID player, ObjectMap<String> edit) {
return edit(player, edit, false);
}

public int permaEdit(UUID player, ObjectMap<String> edit) {
return edit(player, edit, true);
}

@SuppressWarnings({"deprecation", "unchecked"})
private int edit(UUID player, ObjectMap<String> edit, boolean perma) {
int c = 0;
boolean state = isRunning();
SubServer forward = null;
ObjectMap<String> pending = edit.clone();
for (String key : edit.getKeys()) {
pending.remove(key);
ObjectMapValue value = edit.get(key);
SubEditServerEvent event = new SubEditServerEvent(player, this, new NamedContainer<String, ObjectMapValue>(key, value), true);
SubEditServerEvent event = new SubEditServerEvent(player, this, new NamedContainer<String, ObjectMapValue>(key, value), perma);
host.plugin.getPluginManager().callEvent(event);
if (!event.isCancelled()) {
try {
switch (key) {
switch (key.toLowerCase()) {
case "name":
if (value.isString() && host.removeSubServer(player, getName())) {
SubServer server = host.addSubServer(player, value.asRawString(), isEnabled(), getAddress().getPort(), getMotd(), isLogging(), getPath(), getExecutable(), getStopCommand(), isHidden(), isRestricted());
if (server != null) {
if (this.host.plugin.servers.get().getMap("Servers").getKeys().contains(getName())) {
if (perma && this.host.plugin.servers.get().getMap("Servers").getKeys().contains(getName())) {
ObjectMap<String> config = this.host.plugin.servers.get().getMap("Servers").getMap(getName());
this.host.plugin.servers.get().getMap("Servers").remove(getName());
this.host.plugin.servers.get().getMap("Servers").set(server.getName(), config);
Expand All @@ -298,7 +306,7 @@ public int edit(UUID player, ObjectMap<String> edit) {
}
f.setAccessible(false);
logger.name = getDisplayName();
if (this.host.plugin.servers.get().getMap("Servers").getKeys().contains(getName())) {
if (perma && this.host.plugin.servers.get().getMap("Servers").getKeys().contains(getName())) {
if (getName().equals(getDisplayName())) {
this.host.plugin.servers.get().getMap("Servers").getMap(getName()).remove("Display");
} else {
Expand All @@ -312,7 +320,7 @@ public int edit(UUID player, ObjectMap<String> edit) {
case "enabled":
if (value.isBoolean()) {
enabled = value.asBoolean();
if (this.host.plugin.servers.get().getMap("Servers").getKeys().contains(getName())) {
if (perma && this.host.plugin.servers.get().getMap("Servers").getKeys().contains(getName())) {
this.host.plugin.servers.get().getMap("Servers").getMap(getName()).set("Enabled", isEnabled());
this.host.plugin.servers.save();
}
Expand All @@ -322,7 +330,7 @@ public int edit(UUID player, ObjectMap<String> edit) {
case "group":
if (value.isList()) {
Util.reflect(ServerContainer.class.getDeclaredField("groups"), this, value.asStringList());
if (this.host.plugin.servers.get().getMap("Servers").getKeys().contains(getName())) {
if (perma && this.host.plugin.servers.get().getMap("Servers").getKeys().contains(getName())) {
this.host.plugin.servers.get().getMap("Servers").getMap(getName()).set("Group", value.asStringList());
this.host.plugin.servers.save();
}
Expand All @@ -333,7 +341,7 @@ public int edit(UUID player, ObjectMap<String> edit) {
if (value.isString() && host.removeSubServer(player, getName())) {
SubServer server = this.host.plugin.api.getHost(value.asRawString()).addSubServer(player, getName(), isEnabled(), getAddress().getPort(), getMotd(), isLogging(), getPath(), getExecutable(), getStopCommand(), isHidden(), isRestricted());
if (server != null) {
if (this.host.plugin.servers.get().getMap("Servers").getKeys().contains(getName())) {
if (perma && this.host.plugin.servers.get().getMap("Servers").getKeys().contains(getName())) {
this.host.plugin.servers.get().getMap("Servers").getMap(getName()).set("Host", server.getHost().getName());
this.host.plugin.servers.save();
}
Expand All @@ -346,7 +354,7 @@ public int edit(UUID player, ObjectMap<String> edit) {
if (value.isNumber() && host.removeSubServer(player, getName())) {
SubServer server = host.addSubServer(player, getName(), isEnabled(), value.asInt(), getMotd(), isLogging(), getPath(), getExecutable(), getStopCommand(), isHidden(), isRestricted());
if (server != null) {
if (this.host.plugin.servers.get().getMap("Servers").getKeys().contains(getName())) {
if (perma && this.host.plugin.servers.get().getMap("Servers").getKeys().contains(getName())) {
this.host.plugin.servers.get().getMap("Servers").getMap(getName()).set("Port", server.getAddress().getPort());
this.host.plugin.servers.save();
}
Expand All @@ -358,7 +366,7 @@ public int edit(UUID player, ObjectMap<String> edit) {
case "motd":
if (value.isString()) {
Util.reflect(BungeeServerInfo.class.getDeclaredField("motd"), this, ChatColor.translateAlternateColorCodes('&', value.asString()));
if (this.host.plugin.servers.get().getMap("Servers").getKeys().contains(getName())) {
if (perma && this.host.plugin.servers.get().getMap("Servers").getKeys().contains(getName())) {
this.host.plugin.servers.get().getMap("Servers").getMap(getName()).set("Motd", value.asString());
this.host.plugin.servers.save();
}
Expand All @@ -368,46 +376,49 @@ public int edit(UUID player, ObjectMap<String> edit) {
case "log":
if (value.isBoolean()) {
log.set(value.asBoolean());
if (this.host.plugin.servers.get().getMap("Servers").getKeys().contains(getName())) {
if (perma && this.host.plugin.servers.get().getMap("Servers").getKeys().contains(getName())) {
this.host.plugin.servers.get().getMap("Servers").getMap(getName()).set("Log", isLogging());
this.host.plugin.servers.save();
}
c++;
}
break;
case "dir":
case "directory":
if (value.isString()) {
if (isRunning()) {
stop(player);
waitFor();
}
dir = value.asRawString();
directory = new File(getHost().getPath(), value.asRawString());
if (this.host.plugin.servers.get().getMap("Servers").getKeys().contains(getName())) {
if (perma && this.host.plugin.servers.get().getMap("Servers").getKeys().contains(getName())) {
this.host.plugin.servers.get().getMap("Servers").getMap(getName()).set("Directory", getPath());
this.host.plugin.servers.save();
}
c++;
}
break;
case "exec":
case "executable":
if (value.isString()) {
if (isRunning()) {
stop(player);
waitFor();
}
executable = value.asRawString();
if (this.host.plugin.servers.get().getMap("Servers").getKeys().contains(getName())) {
if (perma && this.host.plugin.servers.get().getMap("Servers").getKeys().contains(getName())) {
this.host.plugin.servers.get().getMap("Servers").getMap(getName()).set("Executable", value.asRawString());
this.host.plugin.servers.save();
}
c++;
}
break;
case "stop-cmd":
case "stop-command":
if (value.isString()) {
stopcmd = value.asRawString();
if (this.host.plugin.servers.get().getMap("Servers").getKeys().contains(getName())) {
if (perma && this.host.plugin.servers.get().getMap("Servers").getKeys().contains(getName())) {
this.host.plugin.servers.get().getMap("Servers").getMap(getName()).set("Stop-Command", getStopCommand());
this.host.plugin.servers.save();
}
Expand All @@ -419,7 +430,7 @@ public int edit(UUID player, ObjectMap<String> edit) {
StopAction action = Util.getDespiteException(() -> StopAction.valueOf(value.asRawString().toUpperCase().replace('-', '_').replace(' ', '_')), null);
if (action != null) {
stopaction = action;
if (this.host.plugin.servers.get().getMap("Servers").getKeys().contains(getName())) {
if (perma && this.host.plugin.servers.get().getMap("Servers").getKeys().contains(getName())) {
this.host.plugin.servers.get().getMap("Servers").getMap(getName()).set("Stop-Action", getStopAction().toString());
this.host.plugin.servers.save();
}
Expand All @@ -433,8 +444,9 @@ public int edit(UUID player, ObjectMap<String> edit) {
}
break;
case "auto-run":
case "run-on-launch":
if (value.isBoolean()) {
if (this.host.plugin.servers.get().getMap("Servers").getKeys().contains(getName())) {
if (perma && this.host.plugin.servers.get().getMap("Servers").getKeys().contains(getName())) {
this.host.plugin.servers.get().getMap("Servers").getMap(getName()).set("Run-On-Launch", value.asBoolean());
this.host.plugin.servers.save();
}
Expand All @@ -447,7 +459,7 @@ public int edit(UUID player, ObjectMap<String> edit) {
SubServer oserver = host.plugin.api.getSubServer(oname);
if (oserver != null && isCompatible(oserver)) toggleCompatibility(oserver);
}
if (this.host.plugin.servers.get().getMap("Servers").getKeys().contains(getName())) {
if (perma && this.host.plugin.servers.get().getMap("Servers").getKeys().contains(getName())) {
this.host.plugin.servers.get().getMap("Servers").getMap(getName()).set("Incompatible", value.asStringList());
this.host.plugin.servers.save();
}
Expand All @@ -457,7 +469,7 @@ public int edit(UUID player, ObjectMap<String> edit) {
case "restricted":
if (value.isBoolean()) {
Util.reflect(BungeeServerInfo.class.getDeclaredField("restricted"), this, value.asBoolean());
if (this.host.plugin.servers.get().getMap("Servers").getKeys().contains(getName())) {
if (perma && this.host.plugin.servers.get().getMap("Servers").getKeys().contains(getName())) {
this.host.plugin.servers.get().getMap("Servers").getMap(getName()).set("Restricted", isRestricted());
this.host.plugin.servers.save();
}
Expand All @@ -467,7 +479,7 @@ public int edit(UUID player, ObjectMap<String> edit) {
case "hidden":
if (value.isBoolean()) {
Util.reflect(ServerContainer.class.getDeclaredField("hidden"), this, value.asBoolean());
if (this.host.plugin.servers.get().getMap("Servers").getKeys().contains(getName())) {
if (perma && this.host.plugin.servers.get().getMap("Servers").getKeys().contains(getName())) {
this.host.plugin.servers.get().getMap("Servers").getMap(getName()).set("Hidden", isHidden());
this.host.plugin.servers.save();
}
Expand All @@ -491,7 +503,7 @@ public int edit(UUID player, ObjectMap<String> edit) {
for (String extra : getExtra().getKeys()) forward.addExtra(extra, getExtra(extra));

if (state) pending.set("state", true);
c += forward.edit(player, pending);
c += (perma)?forward.permaEdit(player, pending):forward.edit(player, pending);
break;
}
} catch (Exception e) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,15 @@ public ServerType getType() {
return type;
}

/**
* Get whether this Template requires the Version argument
*
* @return Version Requirement
*/
public boolean requiresVersion() {
return getBuildOptions().getBoolean("Require-Version", false);
}

/**
* Get the Build Options for this Template
*
Expand All @@ -157,6 +166,7 @@ public ObjectMap<String> forSubData() {
tinfo.set("display", getDisplayName());
tinfo.set("icon", getIcon());
tinfo.set("type", getType().toString());
tinfo.set("version-req", requiresVersion());
return tinfo;
}
}
Expand Down
Loading

0 comments on commit 1952e7b

Please sign in to comment.