Begin rewrite for SubData 2

This commit is contained in:
ME1312 2019-04-18 10:02:09 -04:00
parent 463861744c
commit 3dab84c0eb
No known key found for this signature in database
GPG Key ID: FEFFE2F698E88FA8
167 changed files with 2803 additions and 10028 deletions

View File

@ -28,9 +28,15 @@
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.msgpack</groupId>
<artifactId>msgpack-core</artifactId>
<version>0.8.16</version>
<groupId>net.ME1312.Galaxi</groupId>
<artifactId>GalaxiUtil</artifactId>
<version>19w16a</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>net.ME1312.SubData</groupId>
<artifactId>Server</artifactId>
<version>19w16b</version>
<scope>compile</scope>
</dependency>
<dependency>
@ -136,6 +142,8 @@
<reportOutputDirectory>${basedir}/../Javadoc/SubServers.Bungee</reportOutputDirectory>
<additionalOptions>-Xdoclint:none</additionalOptions>
<links>
<link>https://src.me1312.net/jenkins/job/GalaxiEngine/javadoc/GalaxiUtil/</link>
<link>https://src.me1312.net/jenkins/job/SubData/javadoc/Server/</link>
<link>https://ci.md-5.net/job/BungeeCord/ws/api/target/apidocs/</link>
</links>
</configuration>

View File

@ -1,9 +1,8 @@
package net.ME1312.SubServers.Bungee.Event;
import net.ME1312.SubServers.Bungee.Host.Host;
import net.ME1312.SubServers.Bungee.Host.Server;
import net.ME1312.SubServers.Bungee.Library.SubEvent;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.Galaxi.Library.Util;
import net.md_5.bungee.api.plugin.Cancellable;
import net.md_5.bungee.api.plugin.Event;

View File

@ -2,7 +2,7 @@ package net.ME1312.SubServers.Bungee.Event;
import net.ME1312.SubServers.Bungee.Host.Proxy;
import net.ME1312.SubServers.Bungee.Library.SubEvent;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.Galaxi.Library.Util;
import net.md_5.bungee.api.plugin.Event;
/**

View File

@ -3,7 +3,7 @@ package net.ME1312.SubServers.Bungee.Event;
import net.ME1312.SubServers.Bungee.Host.Host;
import net.ME1312.SubServers.Bungee.Host.Server;
import net.ME1312.SubServers.Bungee.Library.SubEvent;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.Galaxi.Library.Util;
import net.md_5.bungee.api.plugin.Cancellable;
import net.md_5.bungee.api.plugin.Event;

View File

@ -3,8 +3,8 @@ package net.ME1312.SubServers.Bungee.Event;
import net.ME1312.SubServers.Bungee.Host.Host;
import net.ME1312.SubServers.Bungee.Host.SubCreator;
import net.ME1312.SubServers.Bungee.Library.SubEvent;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.SubServers.Bungee.Library.Version.Version;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.Galaxi.Library.Version.Version;
import net.md_5.bungee.api.plugin.Cancellable;
import net.md_5.bungee.api.plugin.Event;
@ -33,7 +33,7 @@ public class SubCreateEvent extends Event implements SubEvent, Cancellable {
* @param port Server Port Number
*/
public SubCreateEvent(UUID player, Host host, String name, SubCreator.ServerTemplate template, Version version, int port) {
if (Util.isNull(host, name, template, version, port)) throw new NullPointerException();
if (Util.isNull(host, name, template, port)) throw new NullPointerException();
this.player = player;
this.host = host;
this.name = name;

View File

@ -1,11 +1,11 @@
package net.ME1312.SubServers.Bungee.Event;
import net.ME1312.SubServers.Bungee.Host.Server;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLValue;
import net.ME1312.SubServers.Bungee.Library.NamedContainer;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.Galaxi.Library.Map.ObjectMapValue;
import net.ME1312.Galaxi.Library.NamedContainer;
import net.ME1312.SubServers.Bungee.Library.SubEvent;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.Galaxi.Library.Util;
import net.md_5.bungee.api.plugin.Cancellable;
import net.md_5.bungee.api.plugin.Event;
@ -18,7 +18,7 @@ public class SubEditServerEvent extends Event implements SubEvent, Cancellable {
private boolean cancelled = false;
private UUID player;
private Server server;
private NamedContainer<String, YAMLValue> edit;
private NamedContainer<String, ObjectMapValue> edit;
private boolean perm;
/**
@ -31,11 +31,11 @@ public class SubEditServerEvent extends Event implements SubEvent, Cancellable {
*/
public SubEditServerEvent(UUID player, Server server, NamedContainer<String, ?> edit, boolean permanent) {
if (Util.isNull(server, edit)) throw new NullPointerException();
YAMLSection section = new YAMLSection();
ObjectMap<String> section = new ObjectMap<String>();
section.set(".", edit.get());
this.player = player;
this.server = server;
this.edit = new NamedContainer<String, YAMLValue>(edit.name(), section.get("."));
this.edit = new NamedContainer<String, ObjectMapValue>(edit.name(), section.get("."));
this.perm = permanent;
}
@ -58,7 +58,7 @@ public class SubEditServerEvent extends Event implements SubEvent, Cancellable {
*
* @return Edit to be made
*/
public NamedContainer<String, YAMLValue> getEdit() {
public NamedContainer<String, ObjectMapValue> getEdit() {
return edit;
}

View File

@ -1,8 +1,11 @@
package net.ME1312.SubServers.Bungee.Event;
import net.ME1312.SubData.Server.DataClient;
import net.ME1312.SubData.Server.DataServer;
import net.ME1312.SubData.Server.SubDataClient;
import net.ME1312.SubServers.Bungee.Library.SubEvent;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.SubServers.Bungee.Network.SubDataServer;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.SubData.Server.SubDataServer;
import net.md_5.bungee.api.plugin.Cancellable;
import net.md_5.bungee.api.plugin.Event;
@ -13,16 +16,16 @@ import java.net.InetAddress;
*/
public class SubNetworkConnectEvent extends Event implements SubEvent, Cancellable {
private boolean cancelled = false;
private SubDataServer network;
private InetAddress address;
private DataServer network;
private DataClient client;
/**
* SubData Network Connect Event
*/
public SubNetworkConnectEvent(SubDataServer network, InetAddress address) {
if (Util.isNull(network, address)) throw new NullPointerException();
public SubNetworkConnectEvent(DataServer network, DataClient client) {
if (Util.isNull(network, client)) throw new NullPointerException();
this.network = network;
this.address = address;
this.client = client;
}
/**
@ -30,17 +33,17 @@ public class SubNetworkConnectEvent extends Event implements SubEvent, Cancellab
*
* @return SubData Network
*/
public SubDataServer getNetwork() {
public DataServer getNetwork() {
return network;
}
/**
* Get the address of the connecting client
* Get the connecting client
*
* @return Client address
* @return Client
*/
public InetAddress getAddress() {
return address;
public DataClient getClient() {
return client;
}
/**

View File

@ -1,25 +1,30 @@
package net.ME1312.SubServers.Bungee.Event;
import net.ME1312.SubData.Server.DataClient;
import net.ME1312.SubData.Server.DataServer;
import net.ME1312.SubData.Server.Library.DisconnectReason;
import net.ME1312.SubData.Server.SubDataClient;
import net.ME1312.SubServers.Bungee.Library.SubEvent;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.SubServers.Bungee.Network.Client;
import net.ME1312.SubServers.Bungee.Network.SubDataServer;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.SubData.Server.SubDataServer;
import net.md_5.bungee.api.plugin.Event;
/**
* SubData Network Disconnect Event
*/
public class SubNetworkDisconnectEvent extends Event implements SubEvent {
private SubDataServer network;
private Client client;
private DataServer network;
private DataClient client;
private DisconnectReason reason;
/**
* SubData Network Disconnect Event
*/
public SubNetworkDisconnectEvent(SubDataServer network, Client client) {
if (Util.isNull(network, client)) throw new NullPointerException();
public SubNetworkDisconnectEvent(DataServer network, DataClient client, DisconnectReason reason) {
if (Util.isNull(network, client, reason)) throw new NullPointerException();
this.network = network;
this.client = client;
this.reason = reason;
}
/**
@ -27,7 +32,7 @@ public class SubNetworkDisconnectEvent extends Event implements SubEvent {
*
* @return SubData Network
*/
public SubDataServer getNetwork() {
public DataServer getNetwork() {
return network;
}
@ -36,8 +41,16 @@ public class SubNetworkDisconnectEvent extends Event implements SubEvent {
*
* @return Client
*/
public Client getClient() {
public DataClient getClient() {
return client;
}
/**
* Get the reason the client disconnected
*
* @return Disconnect Reason
*/
public DisconnectReason getReason() {
return reason;
}
}

View File

@ -1,9 +1,8 @@
package net.ME1312.SubServers.Bungee.Event;
import net.ME1312.SubServers.Bungee.Host.Host;
import net.ME1312.SubServers.Bungee.Host.Server;
import net.ME1312.SubServers.Bungee.Library.SubEvent;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.Galaxi.Library.Util;
import net.md_5.bungee.api.plugin.Cancellable;
import net.md_5.bungee.api.plugin.Event;

View File

@ -2,7 +2,7 @@ package net.ME1312.SubServers.Bungee.Event;
import net.ME1312.SubServers.Bungee.Host.Proxy;
import net.ME1312.SubServers.Bungee.Library.SubEvent;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.Galaxi.Library.Util;
import net.md_5.bungee.api.plugin.Event;
/**

View File

@ -3,7 +3,7 @@ package net.ME1312.SubServers.Bungee.Event;
import net.ME1312.SubServers.Bungee.Host.Host;
import net.ME1312.SubServers.Bungee.Host.Server;
import net.ME1312.SubServers.Bungee.Library.SubEvent;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.Galaxi.Library.Util;
import net.md_5.bungee.api.plugin.Cancellable;
import net.md_5.bungee.api.plugin.Event;

View File

@ -2,7 +2,7 @@ package net.ME1312.SubServers.Bungee.Event;
import net.ME1312.SubServers.Bungee.Host.SubServer;
import net.ME1312.SubServers.Bungee.Library.SubEvent;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.Galaxi.Library.Util;
import net.md_5.bungee.api.plugin.Cancellable;
import net.md_5.bungee.api.plugin.Event;

View File

@ -2,7 +2,7 @@ package net.ME1312.SubServers.Bungee.Event;
import net.ME1312.SubServers.Bungee.Host.SubServer;
import net.ME1312.SubServers.Bungee.Library.SubEvent;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.Galaxi.Library.Util;
import net.md_5.bungee.api.plugin.Cancellable;
import net.md_5.bungee.api.plugin.Event;

View File

@ -2,7 +2,7 @@ package net.ME1312.SubServers.Bungee.Event;
import net.ME1312.SubServers.Bungee.Host.SubServer;
import net.ME1312.SubServers.Bungee.Library.SubEvent;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.Galaxi.Library.Util;
import net.md_5.bungee.api.plugin.Cancellable;
import net.md_5.bungee.api.plugin.Event;

View File

@ -2,7 +2,7 @@ package net.ME1312.SubServers.Bungee.Event;
import net.ME1312.SubServers.Bungee.Host.SubServer;
import net.ME1312.SubServers.Bungee.Library.SubEvent;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.Galaxi.Library.Util;
import net.md_5.bungee.api.plugin.Event;
/**

View File

@ -1,10 +1,9 @@
package net.ME1312.SubServers.Bungee.Host;
import net.ME1312.SubServers.Bungee.Library.Compatibility.JNA;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.Galaxi.Library.Util;
import java.io.File;
import java.lang.reflect.Field;
/**
* Executable Handler Class

View File

@ -1,23 +1,23 @@
package net.ME1312.SubServers.Bungee.Host.External;
import com.google.common.collect.Range;
import net.ME1312.SubData.Server.DataClient;
import net.ME1312.SubData.Server.SerializableClientHandler;
import net.ME1312.SubData.Server.SubDataClient;
import net.ME1312.SubServers.Bungee.Event.SubAddServerEvent;
import net.ME1312.SubServers.Bungee.Event.SubRemoveServerEvent;
import net.ME1312.SubServers.Bungee.Host.Host;
import net.ME1312.SubServers.Bungee.Host.SubCreator;
import net.ME1312.SubServers.Bungee.Host.SubServer;
import net.ME1312.SubServers.Bungee.Library.Callback;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.SubServers.Bungee.Library.Exception.InvalidServerException;
import net.ME1312.SubServers.Bungee.Library.NamedContainer;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.SubServers.Bungee.Network.Client;
import net.ME1312.SubServers.Bungee.Network.ClientHandler;
import net.ME1312.Galaxi.Library.NamedContainer;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.SubData.Server.Protocol.PacketObjectOut;
import net.ME1312.SubServers.Bungee.Network.Packet.PacketExAddServer;
import net.ME1312.SubServers.Bungee.Network.Packet.PacketExDeleteServer;
import net.ME1312.SubServers.Bungee.Network.Packet.PacketExRemoveServer;
import net.ME1312.SubServers.Bungee.Network.Packet.PacketOutReset;
import net.ME1312.SubServers.Bungee.Network.PacketOut;
import net.ME1312.SubServers.Bungee.Network.Packet.PacketOutExReset;
import net.ME1312.SubServers.Bungee.SubPlugin;
import java.net.InetAddress;
@ -26,15 +26,15 @@ import java.util.*;
/**
* External Host Class
*/
public class ExternalHost extends Host implements ClientHandler {
public class ExternalHost extends Host implements SerializableClientHandler {
private HashMap<String, SubServer> servers = new HashMap<String, SubServer>();
private String name;
private boolean enabled;
private InetAddress address;
private SubCreator creator;
private String directory;
protected NamedContainer<Boolean, Client> client;
private LinkedList<PacketOut> queue;
protected NamedContainer<Boolean, SubDataClient> client;
private LinkedList<PacketObjectOut> queue;
private boolean clean;
protected SubPlugin plugin;
@ -56,26 +56,26 @@ public class ExternalHost extends Host implements ClientHandler {
this.name = name;
this.enabled = enabled;
this.address = address;
this.client = new NamedContainer<Boolean, Client>(false, null);
this.client = new NamedContainer<Boolean, SubDataClient>(false, null);
this.creator = new ExternalSubCreator(this, ports, log, gitBash);
this.directory = directory;
this.queue = new LinkedList<PacketOut>();
this.queue = new LinkedList<PacketObjectOut>();
this.clean = false;
}
@Override
public Client getSubData() {
public DataClient getSubData() {
return client.get();
}
@Override
public void setSubData(Client client) {
this.client = new NamedContainer<Boolean, Client>(false, client);
if (client != null && (client.getHandler() == null || !equals(client.getHandler()))) client.setHandler(this);
public void setSubData(DataClient client) {
this.client = new NamedContainer<Boolean, SubDataClient>(false, (SubDataClient) client);
if (client != null && (client.getHandler() == null || !equals(client.getHandler()))) ((SubDataClient) client).setHandler(this);
}
protected void queue(PacketOut... packet) {
for (PacketOut p : packet) if (client.get() == null || client.name() == false) {
protected void queue(PacketObjectOut... packet) {
for (PacketObjectOut p : packet) if (client.get() == null || client.name() == false) {
queue.add(p);
} else {
client.get().sendPacket(p);
@ -83,7 +83,7 @@ public class ExternalHost extends Host implements ClientHandler {
}
private void requeue() {
if (!clean) {
client.get().sendPacket(new PacketOutReset("Prevent Desync"));
client.get().sendPacket(new PacketOutExReset("Prevent Desync"));
clean = true;
}
for (SubServer server : servers.values()) {
@ -170,7 +170,7 @@ public class ExternalHost extends Host implements ClientHandler {
getSubServer(server).waitFor();
}
queue(new PacketExRemoveServer(server, data -> {
if (data.getInt("r") == 0) {
if (data.getInt(0x0001) == 0) {
servers.remove(server.toLowerCase());
}
}));
@ -189,13 +189,89 @@ public class ExternalHost extends Host implements ClientHandler {
getSubServer(server).terminate();
}
queue(new PacketExRemoveServer(server, data -> {
if (data.getInt("r") == 0) {
if (data.getInt(0x0001) == 0) {
servers.remove(server.toLowerCase());
}
}));
return true;
}
@Override
public boolean recycleSubServer(UUID player, String name) throws InterruptedException {
if (Util.isNull(name)) throw new NullPointerException();
String server = servers.get(name.toLowerCase()).getName();
SubRemoveServerEvent event = new SubRemoveServerEvent(player, this, getSubServer(server));
plugin.getPluginManager().callEvent(event);
if (!event.isCancelled()) {
if (getSubServer(server).isRunning()) {
getSubServer(server).stop();
getSubServer(server).waitFor();
}
System.out.println("SubServers > Saving...");
ObjectMap<String> info = (plugin.config.get().getMap("Servers").getKeys().contains(server))?plugin.config.get().getMap("Servers").getMap(server).clone():new ObjectMap<String>();
info.set("Name", server);
info.set("Timestamp", Calendar.getInstance().getTime().getTime());
try {
if (plugin.config.get().getMap("Servers").getKeys().contains(server)) {
plugin.config.get().getMap("Servers").remove(server);
plugin.config.save();
}
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("SubServers > Moving Files...");
queue(new PacketExDeleteServer(server, info, true, data -> {
if (data.getInt(0x0001) == 0) {
servers.remove(server.toLowerCase());
System.out.println("SubServers > Deleted SubServer: " + server);
} else {
System.out.println("SubServers > Couldn't remove " + server + " from memory. See " + getName() + " console for more details");
}
}));
return true;
} else return false;
}
@Override
public boolean forceRecycleSubServer(UUID player, String name) throws InterruptedException {
if (Util.isNull(name)) throw new NullPointerException();
String server = servers.get(name.toLowerCase()).getName();
SubRemoveServerEvent event = new SubRemoveServerEvent(player, this, getSubServer(server));
plugin.getPluginManager().callEvent(event);
if (getSubServer(server).isRunning()) {
getSubServer(server).terminate();
}
System.out.println("SubServers > Saving...");
ObjectMap<String> info = (plugin.config.get().getMap("Servers").getKeys().contains(server))?plugin.config.get().getMap("Servers").getMap(server).clone():new ObjectMap<String>();
info.set("Name", server);
info.set("Timestamp", Calendar.getInstance().getTime().getTime());
try {
if (plugin.config.get().getMap("Servers").getKeys().contains(server)) {
plugin.config.get().getMap("Servers").remove(server);
plugin.config.save();
}
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("SubServers > Moving Files...");
queue(new PacketExDeleteServer(server, info, true, data -> {
if (data.getInt(0x0001) == 0) {
for (String group : getSubServer(server).getGroups()) getSubServer(server).removeGroup(group);
servers.remove(server.toLowerCase());
System.out.println("SubServers > Deleted SubServer: " + server);
} else {
System.out.println("SubServers > Couldn't remove " + server + " from memory. See " + getName() + " console for more details");
}
}));
return true;
}
@Override
public boolean deleteSubServer(UUID player, String name) throws InterruptedException {
if (Util.isNull(name)) throw new NullPointerException();
@ -210,12 +286,12 @@ public class ExternalHost extends Host implements ClientHandler {
}
System.out.println("SubServers > Saving...");
YAMLSection info = (plugin.config.get().getSection("Servers").getKeys().contains(server))?plugin.config.get().getSection("Servers").getSection(server).clone():new YAMLSection();
ObjectMap<String> info = (plugin.config.get().getMap("Servers").getKeys().contains(server))?plugin.config.get().getMap("Servers").getMap(server).clone():new ObjectMap<String>();
info.set("Name", server);
info.set("Timestamp", Calendar.getInstance().getTime().getTime());
try {
if (plugin.config.get().getSection("Servers").getKeys().contains(server)) {
plugin.config.get().getSection("Servers").remove(server);
if (plugin.config.get().getMap("Servers").getKeys().contains(server)) {
plugin.config.get().getMap("Servers").remove(server);
plugin.config.save();
}
} catch (Exception e) {
@ -223,8 +299,8 @@ public class ExternalHost extends Host implements ClientHandler {
}
System.out.println("SubServers > Removing Files...");
queue(new PacketExDeleteServer(server, info, data -> {
if (data.getInt("r") == 0) {
queue(new PacketExDeleteServer(server, info, false, data -> {
if (data.getInt(0x0001) == 0) {
servers.remove(server.toLowerCase());
System.out.println("SubServers > Deleted SubServer: " + server);
} else {
@ -247,12 +323,12 @@ public class ExternalHost extends Host implements ClientHandler {
}
System.out.println("SubServers > Saving...");
YAMLSection info = (plugin.config.get().getSection("Servers").getKeys().contains(server))?plugin.config.get().getSection("Servers").getSection(server).clone():new YAMLSection();
ObjectMap<String> info = (plugin.config.get().getMap("Servers").getKeys().contains(server))?plugin.config.get().getMap("Servers").getMap(server).clone():new ObjectMap<String>();
info.set("Name", server);
info.set("Timestamp", Calendar.getInstance().getTime().getTime());
try {
if (plugin.config.get().getSection("Servers").getKeys().contains(server)) {
plugin.config.get().getSection("Servers").remove(server);
if (plugin.config.get().getMap("Servers").getKeys().contains(server)) {
plugin.config.get().getMap("Servers").remove(server);
plugin.config.save();
}
} catch (Exception e) {
@ -260,8 +336,8 @@ public class ExternalHost extends Host implements ClientHandler {
}
System.out.println("SubServers > Removing Files...");
queue(new PacketExDeleteServer(server, info, data -> {
if (data.getInt("r") == 0) {
queue(new PacketExDeleteServer(server, info, false, data -> {
if (data.getInt(0x0001) == 0) {
for (String group : getSubServer(server).getGroups()) getSubServer(server).removeGroup(group);
servers.remove(server.toLowerCase());
System.out.println("SubServers > Deleted SubServer: " + server);

View File

@ -1,17 +1,18 @@
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.SubData.Server.SubDataClient;
import net.ME1312.SubServers.Bungee.Event.SubCreateEvent;
import net.ME1312.SubServers.Bungee.Host.*;
import net.ME1312.SubServers.Bungee.Host.Internal.InternalSubCreator;
import net.ME1312.SubServers.Bungee.Library.*;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLConfig;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Library.Exception.InvalidHostException;
import net.ME1312.SubServers.Bungee.Library.Version.Version;
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.Network.Packet.PacketExConfigureHost;
import net.ME1312.SubServers.Bungee.Network.Packet.PacketExCreateServer;
import net.ME1312.SubServers.Bungee.SubAPI;
import net.md_5.bungee.api.ChatColor;
import java.io.File;
import java.lang.reflect.InvocationTargetException;
@ -55,8 +56,8 @@ public class ExternalSubCreator extends SubCreator {
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")) {
YAMLSection config = (new UniversalFile(file, "template.yml").exists())?new YAMLConfig(new UniversalFile(file, "template.yml")).get().getSection("Template", new YAMLSection()):new YAMLSection();
ServerTemplate template = new ServerTemplate(file.getName(), config.getBoolean("Enabled", true), config.getRawString("Icon", "::NULL::"), file, config.getSection("Build", new YAMLSection()), config.getSection("Settings", new YAMLSection()));
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"));
}
@ -70,7 +71,7 @@ public class ExternalSubCreator extends SubCreator {
@Override
public boolean create(UUID player, String name, ServerTemplate template, Version version, Integer port, Callback<SubServer> callback) {
if (Util.isNull(name, template, version)) throw new NullPointerException();
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)) {
StackTraceElement[] origin = new Exception().getStackTrace();
@ -94,15 +95,15 @@ public class ExternalSubCreator extends SubCreator {
logger.start();
host.queue(new PacketExCreateServer(name, template, version, port, logger.getExternalAddress(), data -> {
try {
if (data.getInt("r") == 0) {
if (data.getInt(0x0001) == 0) {
System.out.println(name + "/Creator > Saving...");
if (host.plugin.exServers.keySet().contains(name.toLowerCase()))
host.plugin.exServers.remove(name.toLowerCase());
YAMLSection server = new YAMLSection();
YAMLSection config = new YAMLSection((Map<String, ?>) convert(data.getSection("c").get(), new NamedContainer<>("$player$", (player == null)?"":player.toString()), new NamedContainer<>("$name$", name),
new NamedContainer<>("$template$", template.getName()), new NamedContainer<>("$type$", template.getType().toString()), new NamedContainer<>("$version$", version.toString().replace(" ", "@")),
new NamedContainer<>("$address$", data.getSection("c").getRawString("\033address", "null")), new NamedContainer<>("$port$", Integer.toString(fport))));
ObjectMap<String> server = new ObjectMap<String>();
ObjectMap<String> config = new ObjectMap<String>((Map<String, ?>) convert(data.getMap(0x0002).get(), new NamedContainer<>("$player$", (player == null)?"":player.toString()), new NamedContainer<>("$name$", name),
new NamedContainer<>("$template$", template.getName()), new NamedContainer<>("$type$", template.getType().toString()), new NamedContainer<>("$version$", (version != null)?version.toString().replace(" ", "@"):""),
new NamedContainer<>("$address$", new ObjectMap<String>((Map<String, ?>) data.getObject(0x0002)).getRawString("\033address", "null")), new NamedContainer<>("$port$", Integer.toString(fport))));
config.remove("\033address");
@ -123,15 +124,15 @@ public class ExternalSubCreator extends SubCreator {
server.set("Hidden", false);
server.setAll(config);
SubServer subserver = host.addSubServer(player, name, server.getBoolean("Enabled"), fport, server.getColoredString("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"));
if (server.getString("Display").length() > 0) subserver.setDisplayName(server.getString("Display"));
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);
if (server.contains("Extra")) for (String extra : server.getSection("Extra").getKeys())
subserver.addExtra(extra, server.getSection("Extra").getObject(extra));
host.plugin.config.get().getSection("Servers").set(name, server);
if (server.contains("Extra")) for (String extra : server.getMap("Extra").getKeys())
subserver.addExtra(extra, server.getMap("Extra").getObject(extra));
host.plugin.config.get().getMap("Servers").set(name, server);
host.plugin.config.save();
if (template.getBuildOptions().getBoolean("Run-On-Finish", true))
subserver.start();
@ -144,7 +145,7 @@ public class ExternalSubCreator extends SubCreator {
ew.printStackTrace();
}
} else {
System.out.println(name + "/Creator > " + data.getString("m"));
System.out.println(name + "/Creator > " + data.getString(0x0003));
}
} catch (Exception e) {
e.printStackTrace();
@ -194,7 +195,7 @@ public class ExternalSubCreator extends SubCreator {
@Override
public void terminate(String name) {
if (this.thread.keySet().contains(name.toLowerCase())) {
host.getSubData().sendPacket(new PacketExCreateServer(name.toLowerCase()));
((SubDataClient) host.getSubData()).sendPacket(new PacketExCreateServer(name.toLowerCase()));
thread.remove(name.toLowerCase());
}
}

View File

@ -2,8 +2,8 @@ package net.ME1312.SubServers.Bungee.Host.External;
import net.ME1312.SubServers.Bungee.Host.SubLogFilter;
import net.ME1312.SubServers.Bungee.Host.SubLogger;
import net.ME1312.SubServers.Bungee.Library.Container;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.Galaxi.Library.Container;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.SubServers.Bungee.Network.Packet.PacketInExLogMessage;
import net.ME1312.SubServers.Bungee.SubAPI;
import net.md_5.bungee.api.ProxyServer;
@ -14,7 +14,6 @@ import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.UUID;
import java.util.logging.Level;

View File

@ -1,18 +1,18 @@
package net.ME1312.SubServers.Bungee.Host.External;
import net.ME1312.Galaxi.Library.Callback.ReturnRunnable;
import net.ME1312.SubServers.Bungee.Event.*;
import net.ME1312.SubServers.Bungee.Host.*;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLValue;
import net.ME1312.SubServers.Bungee.Library.Container;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.Galaxi.Library.Map.ObjectMapValue;
import net.ME1312.Galaxi.Library.Container;
import net.ME1312.SubServers.Bungee.Library.Exception.InvalidServerException;
import net.ME1312.SubServers.Bungee.Library.NamedContainer;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.Galaxi.Library.NamedContainer;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.SubServers.Bungee.Network.Packet.PacketExUpdateServer;
import net.ME1312.SubServers.Bungee.SubAPI;
import net.md_5.bungee.BungeeServerInfo;
import net.md_5.bungee.api.ChatColor;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.ArrayList;
@ -111,14 +111,16 @@ public class ExternalSubServer extends SubServerContainer {
history.clear();
running = false;
if (stopaction == StopAction.REMOVE_SERVER || stopaction == StopAction.DELETE_SERVER) {
if (stopaction == StopAction.REMOVE_SERVER || stopaction == StopAction.RECYCLE_SERVER || stopaction == StopAction.DELETE_SERVER) {
try {
if (stopaction == StopAction.DELETE_SERVER) {
if (stopaction == StopAction.RECYCLE_SERVER) {
host.recycleSubServer(getName());
} else if (stopaction == StopAction.DELETE_SERVER) {
host.deleteSubServer(getName());
} else {
try {
if (host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) {
host.plugin.config.get().getSection("Servers").remove(getName());
if (host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) {
host.plugin.config.get().getMap("Servers").remove(getName());
host.plugin.config.save();
}
} catch (IOException e) {
@ -175,16 +177,16 @@ public class ExternalSubServer extends SubServerContainer {
@SuppressWarnings("deprecation")
public int edit(UUID player, YAMLSection edit) {
@SuppressWarnings({"deprecation", "unchecked"})
public int edit(UUID player, ObjectMap<String> edit) {
int c = 0;
boolean state = isRunning();
SubServer forward = null;
YAMLSection pending = edit.clone();
ObjectMap<String> pending = edit.clone();
for (String key : edit.getKeys()) {
pending.remove(key);
YAMLValue value = edit.get(key);
SubEditServerEvent event = new SubEditServerEvent(player, this, new NamedContainer<String, YAMLValue>(key, value), true);
ObjectMapValue value = edit.get(key);
SubEditServerEvent event = new SubEditServerEvent(player, this, new NamedContainer<String, ObjectMapValue>(key, value), true);
host.plugin.getPluginManager().callEvent(event);
if (!event.isCancelled()) {
try {
@ -193,10 +195,10 @@ public class ExternalSubServer extends SubServerContainer {
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.config.get().getSection("Servers").getKeys().contains(getName())) {
YAMLSection config = this.host.plugin.config.get().getSection("Servers").getSection(getName());
this.host.plugin.config.get().getSection("Servers").remove(getName());
this.host.plugin.config.get().getSection("Servers").set(server.getName(), config);
if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) {
ObjectMap<String> config = this.host.plugin.config.get().getMap("Servers").getMap(getName());
this.host.plugin.config.get().getMap("Servers").remove(getName());
this.host.plugin.config.get().getMap("Servers").set(server.getName(), config);
this.host.plugin.config.save();
}
forward = server;
@ -215,11 +217,11 @@ public class ExternalSubServer extends SubServerContainer {
}
f.setAccessible(false);
logger.name = getDisplayName();
if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) {
if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) {
if (getName().equals(getDisplayName())) {
this.host.plugin.config.get().getSection("Servers").getSection(getName()).remove("Display");
this.host.plugin.config.get().getMap("Servers").getMap(getName()).remove("Display");
} else {
this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Display", getDisplayName());
this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Display", getDisplayName());
}
this.host.plugin.config.save();
}
@ -230,8 +232,8 @@ public class ExternalSubServer extends SubServerContainer {
if (value.isBoolean()) {
if (enabled != value.asBoolean()) host.queue(new PacketExUpdateServer(this, PacketExUpdateServer.UpdateType.SET_ENABLED, (Boolean) value.asBoolean()));
enabled = value.asBoolean();
if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Enabled", isEnabled());
if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Enabled", isEnabled());
this.host.plugin.config.save();
}
c++;
@ -240,8 +242,8 @@ public class ExternalSubServer extends SubServerContainer {
case "group":
if (value.isList()) {
Util.reflect(ServerContainer.class.getDeclaredField("groups"), this, value.asStringList());
if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Group", value.asStringList());
if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Group", value.asStringList());
this.host.plugin.config.save();
}
c++;
@ -252,8 +254,8 @@ public class ExternalSubServer extends SubServerContainer {
waitFor(() -> host.getSubServer(getName()), null);
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.config.get().getSection("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Host", server.getHost().getName());
if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Host", server.getHost().getName());
this.host.plugin.config.save();
}
forward = server;
@ -266,8 +268,8 @@ public class ExternalSubServer extends SubServerContainer {
waitFor(() -> host.getSubServer(getName()), null);
SubServer server = host.addSubServer(player, getName(), isEnabled(), value.asInt(), getMotd(), isLogging(), getPath(), getExecutable(), getStopCommand(), isHidden(), isRestricted());
if (server != null) {
if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Port", server.getAddress().getPort());
if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Port", server.getAddress().getPort());
this.host.plugin.config.save();
}
forward = server;
@ -277,9 +279,9 @@ public class ExternalSubServer extends SubServerContainer {
break;
case "motd":
if (value.isString()) {
Util.reflect(BungeeServerInfo.class.getDeclaredField("motd"), this, value.asColoredString('&'));
if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Motd", value.asString());
Util.reflect(BungeeServerInfo.class.getDeclaredField("motd"), this, ChatColor.translateAlternateColorCodes('&', value.asString()));
if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Motd", value.asString());
this.host.plugin.config.save();
}
c++;
@ -289,8 +291,8 @@ public class ExternalSubServer extends SubServerContainer {
if (value.isBoolean()) {
if (log.get() != value.asBoolean()) host.queue(new PacketExUpdateServer(this, PacketExUpdateServer.UpdateType.SET_LOGGING, (Boolean) value.asBoolean()));
log.set(value.asBoolean());
if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Log", isLogging());
if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Log", isLogging());
this.host.plugin.config.save();
}
c++;
@ -301,8 +303,8 @@ public class ExternalSubServer extends SubServerContainer {
waitFor(() -> host.getSubServer(getName()), null);
SubServer server = host.addSubServer(player, getName(), isEnabled(), getAddress().getPort(), getMotd(), isLogging(), value.asRawString(), getExecutable(), getStopCommand(), isHidden(), isRestricted());
if (server != null) {
if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Directory", server.getPath());
if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Directory", server.getPath());
this.host.plugin.config.save();
}
forward = server;
@ -315,8 +317,8 @@ public class ExternalSubServer extends SubServerContainer {
waitFor(() -> host.getSubServer(getName()), null);
SubServer server = host.addSubServer(player, getName(), isEnabled(), getAddress().getPort(), getMotd(), isLogging(), getPath(), value.asRawString(), getStopCommand(), isHidden(), isRestricted());
if (server != null) {
if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Executable", value.asRawString());
if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Executable", value.asRawString());
this.host.plugin.config.save();
}
forward = server;
@ -333,8 +335,8 @@ public class ExternalSubServer extends SubServerContainer {
if (value.isString()) {
if (!stopcmd.equals(value)) host.queue(new PacketExUpdateServer(this, PacketExUpdateServer.UpdateType.SET_STOP_COMMAND, value.asRawString()));
stopcmd = value.asRawString();
if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Stop-Command", getStopCommand());
if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Stop-Command", getStopCommand());
this.host.plugin.config.save();
}
c++;
@ -345,8 +347,8 @@ public class ExternalSubServer extends SubServerContainer {
StopAction action = Util.getDespiteException(() -> StopAction.valueOf(value.asRawString().toUpperCase().replace('-', '_').replace(' ', '_')), null);
if (action != null) {
stopaction = action;
if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Stop-Action", getStopAction().toString());
if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Stop-Action", getStopAction().toString());
this.host.plugin.config.save();
}
c++;
@ -355,8 +357,8 @@ public class ExternalSubServer extends SubServerContainer {
break;
case "auto-run":
if (value.isBoolean()) {
if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Run-On-Launch", value.asBoolean());
if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Run-On-Launch", value.asBoolean());
this.host.plugin.config.save();
}
c++;
@ -364,12 +366,12 @@ public class ExternalSubServer extends SubServerContainer {
break;
case "incompatible":
if (value.isList()) {
for (String oname : value.asStringList()) {
for (String oname : (List<String>) value.asStringList()) {
SubServer oserver = host.plugin.api.getSubServer(oname);
if (oserver != null && isCompatible(oserver)) toggleCompatibility(oserver);
}
if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Incompatible", value.asStringList());
if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Incompatible", value.asStringList());
this.host.plugin.config.save();
}
c++;
@ -378,8 +380,8 @@ public class ExternalSubServer extends SubServerContainer {
case "restricted":
if (value.isBoolean()) {
Util.reflect(BungeeServerInfo.class.getDeclaredField("restricted"), this, value.asBoolean());
if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Restricted", isRestricted());
if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Restricted", isRestricted());
this.host.plugin.config.save();
}
c++;
@ -388,8 +390,8 @@ public class ExternalSubServer extends SubServerContainer {
case "hidden":
if (value.isBoolean()) {
Util.reflect(ServerContainer.class.getDeclaredField("hidden"), this, value.asBoolean());
if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Hidden", isHidden());
if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Hidden", isHidden());
this.host.plugin.config.save();
}
c++;
@ -422,7 +424,7 @@ public class ExternalSubServer extends SubServerContainer {
}
if (!isRunning() && forward == null && state) start(player);
return c;
} private <V> void waitFor(Util.ReturnRunnable<V> method, V value) throws InterruptedException {
} private <V> void waitFor(ReturnRunnable<V> method, V value) throws InterruptedException {
while (method.run() != value) {
Thread.sleep(250);
}

View File

@ -1,16 +1,14 @@
package net.ME1312.SubServers.Bungee.Host;
import com.google.common.collect.Range;
import com.google.gson.Gson;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLValue;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.Galaxi.Library.Map.ObjectMapValue;
import net.ME1312.SubServers.Bungee.Library.Exception.InvalidHostException;
import net.ME1312.SubServers.Bungee.Library.Exception.InvalidServerException;
import net.ME1312.SubServers.Bungee.Library.ExtraDataHandler;
import net.ME1312.SubServers.Bungee.Library.NamedContainer;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.SubServers.Bungee.Network.ClientHandler;
import net.ME1312.SubServers.Bungee.Network.SubDataServer;
import net.ME1312.Galaxi.Library.ExtraDataHandler;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.SubData.Server.ClientHandler;
import net.ME1312.SubServers.Bungee.SubAPI;
import net.ME1312.SubServers.Bungee.SubPlugin;
import java.net.InetAddress;
@ -21,7 +19,7 @@ import java.util.UUID;
* Host Layout Class
*/
public abstract class Host implements ExtraDataHandler {
private YAMLSection extra = new YAMLSection();
private ObjectMap<String> extra = new ObjectMap<String>();
private final String signature;
private String nick = null;
@ -42,7 +40,7 @@ public abstract class Host implements ExtraDataHandler {
if (!ports.hasLowerBound() || !ports.hasUpperBound()) throw new InvalidHostException("Port range is not bound");
if (Util.isNull(plugin, name, enabled, ports, log, address, directory, gitBash)) throw new NullPointerException();
signature = plugin.api.signAnonymousObject();
SubDataServer.allowConnection(address.getHostAddress());
SubAPI.getInstance().getSubDataNetwork().getProtocol().whitelist(address.getHostAddress());
}
/**
@ -305,13 +303,51 @@ public abstract class Host implements ExtraDataHandler {
}
/**
* Forces the Removal of a SubServer
* Forces the Removal of a SubServer (will move to 'Recently Deleted')
*
* @param player Player Removing
* @param name SubServer Name
*/
public abstract boolean forceRemoveSubServer(UUID player, String name) throws InterruptedException;
/**
* Delete a SubServer (will move to 'Recently Deleted')
*
* @param name SubServer Name
* @return Success Status
*/
public boolean recycleSubServer(String name) throws InterruptedException {
return recycleSubServer(null, name);
}
/**
* Delete a SubServer
*
* @param player Player Deleting
* @param name SubServer Name
* @return Success Status
*/
public abstract boolean recycleSubServer(UUID player, String name) throws InterruptedException;
/**
* Forced the Deletion of a SubServer (will move to 'Recently Deleted')
*
* @param name SubServer Name
* @return Success Status
*/
public boolean forceRecycleSubServer(String name) throws InterruptedException {
return forceRecycleSubServer(null, name);
}
/**
* Forces the Deletion of a SubServer (will move to 'Recently Deleted')
*
* @param player Player Deleting
* @param name SubServer Name
* @return Success Status
*/
public abstract boolean forceRecycleSubServer(UUID player, String name) throws InterruptedException;
/**
* Delete a SubServer
*
@ -338,7 +374,7 @@ public abstract class Host implements ExtraDataHandler {
* @return Success Status
*/
public boolean forceDeleteSubServer(String name) throws InterruptedException {
return deleteSubServer(null, name);
return forceDeleteSubServer(null, name);
}
/**
@ -372,13 +408,13 @@ public abstract class Host implements ExtraDataHandler {
}
@Override
public YAMLValue getExtra(String handle) {
public ObjectMapValue getExtra(String handle) {
if (Util.isNull(handle)) throw new NullPointerException();
return extra.get(handle);
}
@Override
public YAMLSection getExtra() {
public ObjectMap<String> getExtra() {
return extra.clone();
}
@ -388,10 +424,8 @@ public abstract class Host implements ExtraDataHandler {
extra.remove(handle);
}
@Override
@SuppressWarnings("unchecked")
public String toString() {
YAMLSection hinfo = new YAMLSection();
public ObjectMap<String> forSubData() {
ObjectMap<String> hinfo = new ObjectMap<String>();
hinfo.set("type", "Host");
hinfo.set("name", getName());
hinfo.set("display", getDisplayName());
@ -400,21 +434,21 @@ public abstract class Host implements ExtraDataHandler {
hinfo.set("address", getAddress().getHostAddress());
hinfo.set("dir", getPath());
YAMLSection cinfo = new YAMLSection();
YAMLSection templates = new YAMLSection();
ObjectMap<String> cinfo = new ObjectMap<String>();
ObjectMap<String> templates = new ObjectMap<String>();
for (SubCreator.ServerTemplate template : getCreator().getTemplates().values())
templates.set(template.getName(), new YAMLSection(new Gson().fromJson(template.toString(), Map.class)));
templates.set(template.getName(), template.forSubData());
cinfo.set("templates", templates);
hinfo.set("creator", cinfo);
YAMLSection servers = new YAMLSection();
ObjectMap<String> servers = new ObjectMap<String>();
for (SubServer server : getSubServers().values()) {
servers.set(server.getName(), new YAMLSection(new Gson().fromJson(server.toString(), Map.class)));
servers.set(server.getName(), server.forSubData());
}
hinfo.set("servers", servers);
if (this instanceof ClientHandler && ((ClientHandler) this).getSubData() != null) hinfo.set("subdata", ((ClientHandler) this).getSubData().getAddress().toString());
if (this instanceof ClientHandler && ((ClientHandler) this).getSubData() != null) hinfo.set("subdata", ((ClientHandler) this).getSubData().getID());
hinfo.set("signature", signature);
hinfo.set("extra", getExtra());
return hinfo.toJSON();
return hinfo;
}
}

View File

@ -2,15 +2,16 @@ package net.ME1312.SubServers.Bungee.Host.Internal;
import com.dosse.upnp.UPnP;
import com.google.common.collect.Range;
import net.ME1312.Galaxi.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Event.SubAddServerEvent;
import net.ME1312.SubServers.Bungee.Event.SubRemoveServerEvent;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.SubServers.Bungee.Library.Exception.InvalidServerException;
import net.ME1312.SubServers.Bungee.Host.Host;
import net.ME1312.SubServers.Bungee.Host.SubCreator;
import net.ME1312.SubServers.Bungee.Host.SubServer;
import net.ME1312.SubServers.Bungee.Library.UniversalFile;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.Galaxi.Library.UniversalFile;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.SubServers.Bungee.SubPlugin;
import java.io.File;
@ -103,7 +104,7 @@ public class InternalHost extends Host {
plugin.getPluginManager().callEvent(event);
if (!event.isCancelled()) {
servers.put(name.toLowerCase(), server);
if (UPnP.isUPnPAvailable() && plugin.config.get().getSection("Settings").getSection("UPnP", new YAMLSection()).getBoolean("Forward-Servers", false)) UPnP.openPortTCP(port);
if (UPnP.isUPnPAvailable() && plugin.config.get().getMap("Settings").getMap("UPnP", new ObjectMap<String>()).getBoolean("Forward-Servers", false)) UPnP.openPortTCP(port);
return server;
} else {
return null;
@ -143,6 +144,96 @@ public class InternalHost extends Host {
return true;
}
@Override
public boolean recycleSubServer(UUID player, String name) throws InterruptedException {
if (Util.isNull(name)) throw new NullPointerException();
String server = servers.get(name.toLowerCase()).getName();
File from = new File(getPath(), servers.get(server.toLowerCase()).getPath());
if (removeSubServer(player, server)) {
new Thread(() -> {
UniversalFile to = new UniversalFile(plugin.dir, "SubServers:Recently Deleted:" + server.toLowerCase());
try {
if (from.exists()) {
System.out.println("SubServers > Moving Files...");
if (to.exists()) {
if (to.isDirectory()) Util.deleteDirectory(to);
else to.delete();
}
to.mkdirs();
Util.copyDirectory(from, to);
Util.deleteDirectory(from);
}
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("SubServers > Saving...");
YAMLSection info = (plugin.config.get().getMap("Servers").getKeys().contains(server))?new YAMLSection(plugin.config.get().getMap("Servers").getMap(server).get()):new YAMLSection();
info.set("Name", server);
info.set("Timestamp", Calendar.getInstance().getTime().getTime());
try {
if (plugin.config.get().getMap("Servers").getKeys().contains(server)) {
plugin.config.get().getMap("Servers").remove(server);
plugin.config.save();
}
if (!to.exists()) to.mkdirs();
FileWriter writer = new FileWriter(new File(to, "info.json"));
writer.write(info.toJSON().toString());
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("SubServers > Deleted SubServer: " + server);
}, "SubServers.Bungee::Internal_Server_Recycler(" + name + ')').start();
return true;
} else return false;
}
@Override
public boolean forceRecycleSubServer(UUID player, String name) throws InterruptedException {
if (Util.isNull(name)) throw new NullPointerException();
String server = servers.get(name.toLowerCase()).getName();
File from = new File(getPath(), servers.get(server.toLowerCase()).getPath());
if (forceRemoveSubServer(player, server)) {
new Thread(() -> {
UniversalFile to = new UniversalFile(plugin.dir, "SubServers:Recently Deleted:" + server.toLowerCase());
try {
if (from.exists()) {
System.out.println("SubServers > Moving Files...");
if (to.exists()) {
if (to.isDirectory()) Util.deleteDirectory(to);
else to.delete();
}
to.mkdirs();
Util.copyDirectory(from, to);
Util.deleteDirectory(from);
}
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("SubServers > Saving...");
YAMLSection info = (plugin.config.get().getMap("Servers").getKeys().contains(server))?new YAMLSection(plugin.config.get().getMap("Servers").getMap(server).get()):new YAMLSection();
info.set("Name", server);
info.set("Timestamp", Calendar.getInstance().getTime().getTime());
try {
if (plugin.config.get().getMap("Servers").getKeys().contains(server)) {
plugin.config.get().getMap("Servers").remove(server);
plugin.config.save();
}
if (!to.exists()) to.mkdirs();
FileWriter writer = new FileWriter(new File(to, "info.json"), false);
writer.write(info.toJSON().toString());
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("SubServers > Deleted SubServer: " + server);
}, "SubServers.Bungee::Internal_Server_Recycler(" + name + ')').start();
return true;
} else return false;
}
@Override
public boolean deleteSubServer(UUID player, String name) throws InterruptedException {
if (Util.isNull(name)) throw new NullPointerException();
@ -159,7 +250,6 @@ public class InternalHost extends Host {
else to.delete();
}
to.mkdirs();
Util.copyDirectory(from, to);
Util.deleteDirectory(from);
}
} catch (Exception e) {
@ -167,17 +257,17 @@ public class InternalHost extends Host {
}
System.out.println("SubServers > Saving...");
YAMLSection info = (plugin.config.get().getSection("Servers").getKeys().contains(server))?plugin.config.get().getSection("Servers").getSection(server).clone():new YAMLSection();
YAMLSection info = (plugin.config.get().getMap("Servers").getKeys().contains(server))?new YAMLSection(plugin.config.get().getMap("Servers").getMap(server).get()):new YAMLSection();
info.set("Name", server);
info.set("Timestamp", Calendar.getInstance().getTime().getTime());
try {
if (plugin.config.get().getSection("Servers").getKeys().contains(server)) {
plugin.config.get().getSection("Servers").remove(server);
if (plugin.config.get().getMap("Servers").getKeys().contains(server)) {
plugin.config.get().getMap("Servers").remove(server);
plugin.config.save();
}
if (!to.exists()) to.mkdirs();
FileWriter writer = new FileWriter(new File(to, "info.json"));
writer.write(info.toJSON());
writer.write(info.toJSON().toString());
writer.close();
} catch (Exception e) {
e.printStackTrace();
@ -212,17 +302,17 @@ public class InternalHost extends Host {
}
System.out.println("SubServers > Saving...");
YAMLSection info = (plugin.config.get().getSection("Servers").getKeys().contains(server))?plugin.config.get().getSection("Servers").getSection(server).clone():new YAMLSection();
YAMLSection info = (plugin.config.get().getMap("Servers").getKeys().contains(server))?new YAMLSection(plugin.config.get().getMap("Servers").getMap(server).get()):new YAMLSection();
info.set("Name", server);
info.set("Timestamp", Calendar.getInstance().getTime().getTime());
try {
if (plugin.config.get().getSection("Servers").getKeys().contains(server)) {
plugin.config.get().getSection("Servers").remove(server);
if (plugin.config.get().getMap("Servers").getKeys().contains(server)) {
plugin.config.get().getMap("Servers").remove(server);
plugin.config.save();
}
if (!to.exists()) to.mkdirs();
FileWriter writer = new FileWriter(new File(to, "info.json"), false);
writer.write(info.toJSON());
writer.write(info.toJSON().toString());
writer.close();
} catch (Exception e) {
e.printStackTrace();

View File

@ -2,27 +2,27 @@ package net.ME1312.SubServers.Bungee.Host.Internal;
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.Config.YAMLSection;
import net.ME1312.Galaxi.Library.Map.ObjectMapValue;
import net.ME1312.SubServers.Bungee.Event.SubCreateEvent;
import net.ME1312.SubServers.Bungee.Host.*;
import net.ME1312.SubServers.Bungee.Library.*;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLConfig;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.Galaxi.Library.Config.YAMLConfig;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.SubServers.Bungee.Library.Exception.InvalidServerException;
import net.ME1312.SubServers.Bungee.Library.Exception.SubCreatorException;
import net.ME1312.SubServers.Bungee.Library.Version.Version;
import net.ME1312.Galaxi.Library.Version.Version;
import net.ME1312.SubServers.Bungee.SubAPI;
import net.ME1312.SubServers.Bungee.SubPlugin;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import net.md_5.bungee.api.ChatColor;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.*;
import java.lang.reflect.InvocationTargetException;
import java.net.InetSocketAddress;
import java.net.URL;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.util.*;
import java.util.regex.Pattern;
@ -59,8 +59,8 @@ public class InternalSubCreator extends SubCreator {
this.callback = callback;
}
private YAMLSection build(File dir, ServerTemplate template, List<ServerTemplate> history) throws SubCreatorException {
YAMLSection server = new YAMLSection();
private ObjectMap<String> build(File dir, ServerTemplate template, List<ServerTemplate> history) throws SubCreatorException {
ObjectMap<String> server = new ObjectMap<String>();
Version version = this.version;
HashMap<String, String> var = new HashMap<String, String>();
boolean error = false;
@ -69,7 +69,7 @@ public class InternalSubCreator extends SubCreator {
for (String other : template.getBuildOptions().getStringList("Import", new ArrayList<String>())) {
if (templates.keySet().contains(other.toLowerCase())) {
if (templates.get(other.toLowerCase()).isEnabled()) {
YAMLSection config = build(dir, templates.get(other.toLowerCase()), history);
ObjectMap<String> config = build(dir, templates.get(other.toLowerCase()), history);
if (config == null) {
throw new SubCreatorException();
} else {
@ -89,34 +89,36 @@ public class InternalSubCreator extends SubCreator {
var.put("name", name);
var.put("template", template.getName());
var.put("type", template.getType().toString().toUpperCase());
var.put("version", version.toString());
if (version != null) var.put("version", version.toString());
var.put("address", host.getAddress().getHostAddress());
var.put("port", Integer.toString(port));
switch (template.getType()) {
case SPONGE:
case FORGE:
System.out.println(name + File.separator + "Creator > Searching Versions...");
YAMLSection spversionmanifest = new YAMLSection(new Gson().fromJson("{\"versions\":" + Util.readAll(new BufferedReader(new InputStreamReader(new URL("https://dl-api.spongepowered.org/v1/org.spongepowered/sponge" + ((template.getType() == ServerType.FORGE)?"forge":"vanilla") + "/downloads?type=stable&minecraft=" + version).openStream(), Charset.forName("UTF-8")))) + '}', Map.class));
if (version != null) {
System.out.println(name + File.separator + "Creator > Searching Versions...");
ObjectMap<String> spversionmanifest = new ObjectMap<String>(new Gson().fromJson("{\"versions\":" + Util.readAll(new BufferedReader(new InputStreamReader(new URL("https://dl-api.spongepowered.org/v1/org.spongepowered/sponge" + ((template.getType() == ServerType.FORGE)?"forge":"vanilla") + "/downloads?type=stable&minecraft=" + version).openStream(), Charset.forName("UTF-8")))) + '}', Map.class));
YAMLSection spprofile = null;
Version spversion = null;
for (YAMLSection profile : spversionmanifest.getSectionList("versions")) {
if (profile.getSection("dependencies").getRawString("minecraft").equalsIgnoreCase(version.toString()) && (spversion == null || new Version(profile.getRawString("version")).compareTo(spversion) >= 0)) {
spprofile = profile;
spversion = new Version(profile.getRawString("version"));
ObjectMap<String> spprofile = null;
Version spversion = null;
for (ObjectMap<String> profile : spversionmanifest.getMapList("versions")) {
if (profile.getMap("dependencies").getRawString("minecraft").equalsIgnoreCase(version.toString()) && (spversion == null || new Version(profile.getRawString("version")).compareTo(spversion) >= 0)) {
spprofile = profile;
spversion = new Version(profile.getRawString("version"));
}
}
}
if (spversion == null)
throw new InvalidServerException("Cannot find Sponge version for Minecraft " + version.toString());
System.out.println(name + File.separator + "Creator > Found \"sponge" + ((template.getType() == ServerType.FORGE)?"forge":"vanilla") + "-" + spversion.toString() + '"');
if (spversion == null)
throw new InvalidServerException("Cannot find Sponge version for Minecraft " + version.toString());
System.out.println(name + File.separator + "Creator > Found \"sponge" + ((template.getType() == ServerType.FORGE)?"forge":"vanilla") + "-" + spversion.toString() + '"');
if (template.getType() == ServerType.FORGE) {
Version mcfversion = new Version(spprofile.getSection("dependencies").getRawString("minecraft") + '-' + spprofile.getSection("dependencies").getRawString("forge"));
System.out.println(name + File.separator + "Creator > Found \"forge-" + mcfversion.toString() + '"');
if (template.getType() == ServerType.FORGE) {
Version mcfversion = new Version(((spprofile.getMap("dependencies").getRawString("forge").contains("-"))?"":spprofile.getMap("dependencies").getRawString("minecraft") + '-') + spprofile.getMap("dependencies").getRawString("forge"));
System.out.println(name + File.separator + "Creator > Found \"forge-" + mcfversion.toString() + '"');
var.put("mcf_version", mcfversion.toString());
var.put("mcf_version", mcfversion.toString());
}
var.put("sp_version", spversion.toString());
}
var.put("sp_version", spversion.toString());
break;
}
} catch (Exception e) {
@ -141,7 +143,7 @@ public class InternalSubCreator extends SubCreator {
ProcessBuilder pb = new ProcessBuilder().command(Executable.parse(gitBash, template.getBuildOptions().getRawString("Executable"))).directory(dir);
pb.environment().putAll(var);
process = pb.start();
log.file = new File(dir, "SubCreator-" + template.getName() + "-" + version.toString() + ".log");
log.file = new File(dir, "SubCreator-" + template.getName() + ((version != null)?"-"+version.toString():"") + ".log");
log.process = process;
log.start();
@ -173,8 +175,8 @@ public class InternalSubCreator extends SubCreator {
public void run() {
UniversalFile dir = new UniversalFile(new File(host.getPath()), name);
dir.mkdirs();
YAMLSection server = new YAMLSection();
YAMLSection config;
ObjectMap<String> server = new ObjectMap<String>();
ObjectMap<String> config;
try {
config = build(dir, template, new LinkedList<>());
generateProperties(dir, port);
@ -192,7 +194,7 @@ public class InternalSubCreator extends SubCreator {
if (host.plugin.exServers.keySet().contains(name.toLowerCase()))
host.plugin.exServers.remove(name.toLowerCase());
config = new YAMLSection((Map<String, ?>) convert(config.get(), new NamedContainer<>("$player$", (player == null)?"":player.toString()), new NamedContainer<>("$name$", name),
config = new ObjectMap<String>((Map<String, ?>) convert(config.get(), new NamedContainer<>("$player$", (player == null)?"":player.toString()), new NamedContainer<>("$name$", name),
new NamedContainer<>("$template$", template.getName()), new NamedContainer<>("$type$", template.getType().toString()), new NamedContainer<>("$version$", version.toString().replace(" ", "@")),
new NamedContainer<>("$address$", host.getAddress().getHostAddress()), new NamedContainer<>("$port$", Integer.toString(port))));
@ -213,15 +215,15 @@ public class InternalSubCreator extends SubCreator {
server.set("Hidden", false);
server.setAll(config);
SubServer subserver = host.addSubServer(player, name, server.getBoolean("Enabled"), port, server.getColoredString("Motd", '&'), server.getBoolean("Log"), server.getRawString("Directory"),
SubServer 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"));
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);
if (server.contains("Extra")) for (String extra : server.getSection("Extra").getKeys())
subserver.addExtra(extra, server.getSection("Extra").getObject(extra));
host.plugin.config.get().getSection("Servers").set(name, server);
if (server.contains("Extra")) for (String extra : server.getMap("Extra").getKeys())
subserver.addExtra(extra, server.getMap("Extra").getObject(extra));
host.plugin.config.get().getMap("Servers").set(name, server);
host.plugin.config.save();
if (template.getBuildOptions().getBoolean("Run-On-Finish", true))
subserver.start();
@ -287,8 +289,8 @@ public class InternalSubCreator extends SubCreator {
for (File file : new UniversalFile(host.plugin.dir, "SubServers:Templates").listFiles()) {
try {
if (file.isDirectory() && !file.getName().endsWith(".x")) {
YAMLSection config = (new UniversalFile(file, "template.yml").exists()) ? new YAMLConfig(new UniversalFile(file, "template.yml")).get().getSection("Template", new YAMLSection()) : new YAMLSection();
ServerTemplate template = new ServerTemplate(file.getName(), config.getBoolean("Enabled", true), config.getRawString("Icon", "::NULL::"), file, config.getSection("Build", new YAMLSection()), config.getSection("Settings", new YAMLSection()));
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"));
}
@ -302,7 +304,7 @@ public class InternalSubCreator extends SubCreator {
@SuppressWarnings("deprecation")
@Override
public boolean create(UUID player, String name, ServerTemplate template, Version version, Integer port, Callback<SubServer> callback) {
if (Util.isNull(name, template, version)) throw new NullPointerException();
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)) {
StackTraceElement[] origin = new Exception().getStackTrace();
@ -450,6 +452,7 @@ public class InternalSubCreator extends SubCreator {
private void generateClient(File dir, ServerType type, String name) throws IOException {
if (new UniversalFile(dir, "subservers.client").exists()) {
Files.delete(new UniversalFile(dir, "subservers.client").toPath());
if (type == ServerType.SPIGOT) {
if (!new UniversalFile(dir, "plugins").exists()) new UniversalFile(dir, "plugins").mkdirs();
Util.copyFromJar(SubPlugin.class.getClassLoader(), "net/ME1312/SubServers/Bungee/Library/Files/client.jar", new UniversalFile(dir, "plugins:SubServers.Client.jar").getPath());
@ -458,13 +461,16 @@ public class InternalSubCreator extends SubCreator {
Util.copyFromJar(SubPlugin.class.getClassLoader(), "net/ME1312/SubServers/Bungee/Library/Files/client.jar", new UniversalFile(dir, "mods:SubServers.Client.jar").getPath());
}
YAMLSection config = new YAMLSection();
FileWriter writer = new FileWriter(new UniversalFile(dir, "subservers.client"), false);
FileWriter writer = new FileWriter(new UniversalFile(dir, "subdata.json"), false);
config.set("Name", name);
config.set("Address", host.plugin.config.get().getSection("Settings").getSection("SubData").getRawString("Address", "127.0.0.1").replace("0.0.0.0", "127.0.0.1"));
config.set("Password", host.plugin.config.get().getSection("Settings").getSection("SubData").getRawString("Password", ""));
config.set("Encryption", host.plugin.config.get().getSection("Settings").getSection("SubData").getRawString("Encryption", "NONE"));
writer.write(config.toJSON());
config.set("Address", host.plugin.config.get().getMap("Settings").getMap("SubData").getRawString("Address", "127.0.0.1").replace("0.0.0.0", "127.0.0.1"));
config.set("Password", host.plugin.config.get().getMap("Settings").getMap("SubData").getRawString("Password", ""));
writer.write(config.toJSON().toString());
writer.close();
if (new UniversalFile("SubServers:subdata.rsa.key").exists()) {
Files.copy(new UniversalFile("SubServers:subdata.rsa.key").toPath(), new UniversalFile(dir, "subdata.rsa.key").toPath());
}
}
}
private void generateProperties(File dir, int port) throws IOException {

View File

@ -2,16 +2,14 @@ package net.ME1312.SubServers.Bungee.Host.Internal;
import net.ME1312.SubServers.Bungee.Host.SubLogFilter;
import net.ME1312.SubServers.Bungee.Host.SubLogger;
import net.ME1312.SubServers.Bungee.Library.Container;
import net.ME1312.SubServers.Bungee.Library.NamedContainer;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.Galaxi.Library.Container;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.SubServers.Bungee.SubAPI;
import net.md_5.bungee.api.ProxyServer;
import java.io.*;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.logging.Level;
import java.util.regex.Matcher;

View File

@ -2,20 +2,20 @@ package net.ME1312.SubServers.Bungee.Host.Internal;
import net.ME1312.SubServers.Bungee.Event.*;
import net.ME1312.SubServers.Bungee.Host.*;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLValue;
import net.ME1312.SubServers.Bungee.Library.Container;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.Galaxi.Library.Map.ObjectMapValue;
import net.ME1312.Galaxi.Library.Container;
import net.ME1312.SubServers.Bungee.Library.Exception.InvalidServerException;
import net.ME1312.SubServers.Bungee.Library.NamedContainer;
import net.ME1312.SubServers.Bungee.Library.UniversalFile;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.SubServers.Bungee.Library.Version.Version;
import net.ME1312.Galaxi.Library.NamedContainer;
import net.ME1312.Galaxi.Library.UniversalFile;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.Galaxi.Library.Version.Version;
import net.ME1312.SubServers.Bungee.SubPlugin;
import net.md_5.bungee.BungeeServerInfo;
import net.md_5.bungee.api.ChatColor;
import java.io.*;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
@ -147,14 +147,16 @@ public class InternalSubServer extends SubServerContainer {
command = null;
history.clear();
if (stopaction == StopAction.REMOVE_SERVER || stopaction == StopAction.DELETE_SERVER) {
if (stopaction == StopAction.REMOVE_SERVER || stopaction == StopAction.RECYCLE_SERVER || stopaction == StopAction.DELETE_SERVER) {
try {
if (stopaction == StopAction.DELETE_SERVER) {
if (stopaction == StopAction.RECYCLE_SERVER) {
host.recycleSubServer(getName());
} else if (stopaction == StopAction.DELETE_SERVER) {
host.deleteSubServer(getName());
} else {
try {
if (host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) {
host.plugin.config.get().getSection("Servers").remove(getName());
if (host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) {
host.plugin.config.get().getMap("Servers").remove(getName());
host.plugin.config.save();
}
} catch (IOException e) {
@ -255,16 +257,16 @@ public class InternalSubServer extends SubServerContainer {
} else return false;
}
@SuppressWarnings("deprecation")
public int edit(UUID player, YAMLSection edit) {
@SuppressWarnings({"deprecation", "unchecked"})
public int edit(UUID player, ObjectMap<String> edit) {
int c = 0;
boolean state = isRunning();
SubServer forward = null;
YAMLSection pending = edit.clone();
ObjectMap<String> pending = edit.clone();
for (String key : edit.getKeys()) {
pending.remove(key);
YAMLValue value = edit.get(key);
SubEditServerEvent event = new SubEditServerEvent(player, this, new NamedContainer<String, YAMLValue>(key, value), true);
ObjectMapValue value = edit.get(key);
SubEditServerEvent event = new SubEditServerEvent(player, this, new NamedContainer<String, ObjectMapValue>(key, value), true);
host.plugin.getPluginManager().callEvent(event);
if (!event.isCancelled()) {
try {
@ -273,10 +275,10 @@ public class InternalSubServer extends SubServerContainer {
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.config.get().getSection("Servers").getKeys().contains(getName())) {
YAMLSection config = this.host.plugin.config.get().getSection("Servers").getSection(getName());
this.host.plugin.config.get().getSection("Servers").remove(getName());
this.host.plugin.config.get().getSection("Servers").set(server.getName(), config);
if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) {
ObjectMap<String> config = this.host.plugin.config.get().getMap("Servers").getMap(getName());
this.host.plugin.config.get().getMap("Servers").remove(getName());
this.host.plugin.config.get().getMap("Servers").set(server.getName(), config);
this.host.plugin.config.save();
}
forward = server;
@ -295,11 +297,11 @@ public class InternalSubServer extends SubServerContainer {
}
f.setAccessible(false);
logger.name = getDisplayName();
if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) {
if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) {
if (getName().equals(getDisplayName())) {
this.host.plugin.config.get().getSection("Servers").getSection(getName()).remove("Display");
this.host.plugin.config.get().getMap("Servers").getMap(getName()).remove("Display");
} else {
this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Display", getDisplayName());
this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Display", getDisplayName());
}
this.host.plugin.config.save();
}
@ -309,8 +311,8 @@ public class InternalSubServer extends SubServerContainer {
case "enabled":
if (value.isBoolean()) {
enabled = value.asBoolean();
if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Enabled", isEnabled());
if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Enabled", isEnabled());
this.host.plugin.config.save();
}
c++;
@ -319,8 +321,8 @@ public class InternalSubServer extends SubServerContainer {
case "group":
if (value.isList()) {
Util.reflect(ServerContainer.class.getDeclaredField("groups"), this, value.asStringList());
if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Group", value.asStringList());
if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Group", value.asStringList());
this.host.plugin.config.save();
}
c++;
@ -330,8 +332,8 @@ public class InternalSubServer extends SubServerContainer {
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.config.get().getSection("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Host", server.getHost().getName());
if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Host", server.getHost().getName());
this.host.plugin.config.save();
}
forward = server;
@ -343,8 +345,8 @@ public class InternalSubServer extends SubServerContainer {
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.config.get().getSection("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Port", server.getAddress().getPort());
if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Port", server.getAddress().getPort());
this.host.plugin.config.save();
}
forward = server;
@ -354,9 +356,9 @@ public class InternalSubServer extends SubServerContainer {
break;
case "motd":
if (value.isString()) {
Util.reflect(BungeeServerInfo.class.getDeclaredField("motd"), this, value.asColoredString('&'));
if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Motd", value.asString());
Util.reflect(BungeeServerInfo.class.getDeclaredField("motd"), this, ChatColor.translateAlternateColorCodes('&', value.asString()));
if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Motd", value.asString());
this.host.plugin.config.save();
}
c++;
@ -365,8 +367,8 @@ public class InternalSubServer extends SubServerContainer {
case "log":
if (value.isBoolean()) {
log.set(value.asBoolean());
if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Log", isLogging());
if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Log", isLogging());
this.host.plugin.config.save();
}
c++;
@ -380,8 +382,8 @@ public class InternalSubServer extends SubServerContainer {
}
dir = value.asRawString();
directory = new File(getHost().getPath(), value.asRawString());
if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Directory", getPath());
if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Directory", getPath());
this.host.plugin.config.save();
}
c++;
@ -394,8 +396,8 @@ public class InternalSubServer extends SubServerContainer {
waitFor();
}
executable = value.asRawString();
if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Executable", value.asRawString());
if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Executable", value.asRawString());
this.host.plugin.config.save();
}
c++;
@ -404,8 +406,8 @@ public class InternalSubServer extends SubServerContainer {
case "stop-cmd":
if (value.isString()) {
stopcmd = value.asRawString();
if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Stop-Command", getStopCommand());
if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Stop-Command", getStopCommand());
this.host.plugin.config.save();
}
c++;
@ -416,8 +418,8 @@ public class InternalSubServer extends SubServerContainer {
StopAction action = Util.getDespiteException(() -> StopAction.valueOf(value.asRawString().toUpperCase().replace('-', '_').replace(' ', '_')), null);
if (action != null) {
stopaction = action;
if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Stop-Action", getStopAction().toString());
if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Stop-Action", getStopAction().toString());
this.host.plugin.config.save();
}
c++;
@ -431,8 +433,8 @@ public class InternalSubServer extends SubServerContainer {
break;
case "auto-run":
if (value.isBoolean()) {
if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Run-On-Launch", value.asBoolean());
if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Run-On-Launch", value.asBoolean());
this.host.plugin.config.save();
}
c++;
@ -440,12 +442,12 @@ public class InternalSubServer extends SubServerContainer {
break;
case "incompatible":
if (value.isList()) {
for (String oname : value.asStringList()) {
for (String oname : (List<String>) value.asStringList()) {
SubServer oserver = host.plugin.api.getSubServer(oname);
if (oserver != null && isCompatible(oserver)) toggleCompatibility(oserver);
}
if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Incompatible", value.asStringList());
if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Incompatible", value.asStringList());
this.host.plugin.config.save();
}
c++;
@ -454,8 +456,8 @@ public class InternalSubServer extends SubServerContainer {
case "restricted":
if (value.isBoolean()) {
Util.reflect(BungeeServerInfo.class.getDeclaredField("restricted"), this, value.asBoolean());
if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Restricted", isRestricted());
if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Restricted", isRestricted());
this.host.plugin.config.save();
}
c++;
@ -464,8 +466,8 @@ public class InternalSubServer extends SubServerContainer {
case "hidden":
if (value.isBoolean()) {
Util.reflect(ServerContainer.class.getDeclaredField("hidden"), this, value.asBoolean());
if (this.host.plugin.config.get().getSection("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getSection("Servers").getSection(getName()).set("Hidden", isHidden());
if (this.host.plugin.config.get().getMap("Servers").getKeys().contains(getName())) {
this.host.plugin.config.get().getMap("Servers").getMap(getName()).set("Hidden", isHidden());
this.host.plugin.config.save();
}
c++;

View File

@ -1,13 +1,15 @@
package net.ME1312.SubServers.Bungee.Host;
import net.ME1312.SubData.Server.DataClient;
import net.ME1312.SubData.Server.SerializableClientHandler;
import net.ME1312.SubData.Server.SubDataClient;
import net.ME1312.SubServers.Bungee.Event.SubRemoveProxyEvent;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLValue;
import net.ME1312.SubServers.Bungee.Library.ExtraDataHandler;
import net.ME1312.SubServers.Bungee.Library.NamedContainer;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.SubServers.Bungee.Network.Client;
import net.ME1312.SubServers.Bungee.Network.ClientHandler;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.Galaxi.Library.Map.ObjectMapValue;
import net.ME1312.Galaxi.Library.ExtraDataHandler;
import net.ME1312.Galaxi.Library.NamedContainer;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.SubData.Server.ClientHandler;
import net.ME1312.SubServers.Bungee.SubAPI;
import net.ME1312.SubServers.Bungee.SubPlugin;
import net.md_5.bungee.api.ProxyServer;
@ -17,11 +19,11 @@ import java.util.*;
/**
* Proxy Class
*/
public class Proxy implements ClientHandler, ExtraDataHandler {
private YAMLSection extra = new YAMLSection();
public class Proxy implements SerializableClientHandler, ExtraDataHandler {
private ObjectMap<String> extra = new ObjectMap<String>();
private final String signature;
private boolean persistent = true;
private Client client = null;
private SubDataClient client = null;
private String nick = null;
private final String name;
@ -37,19 +39,19 @@ public class Proxy implements ClientHandler, ExtraDataHandler {
}
@Override
public Client getSubData() {
public DataClient getSubData() {
return client;
}
@Override
@SuppressWarnings("deprecation")
public void setSubData(Client client) {
this.client = client;
public void setSubData(DataClient client) {
this.client = (SubDataClient) client;
if (client == null && !persistent) {
ProxyServer.getInstance().getPluginManager().callEvent(new SubRemoveProxyEvent(this));
SubAPI.getInstance().getInternals().proxies.remove(getName().toLowerCase());
}
if (client != null && (client.getHandler() == null || !equals(client.getHandler()))) client.setHandler(this);
if (client != null && (client.getHandler() == null || !equals(client.getHandler()))) ((SubDataClient) client).setHandler(this);
}
/**
@ -134,13 +136,13 @@ public class Proxy implements ClientHandler, ExtraDataHandler {
}
@Override
public YAMLValue getExtra(String handle) {
public ObjectMapValue getExtra(String handle) {
if (Util.isNull(handle)) throw new NullPointerException();
return extra.get(handle);
}
@Override
public YAMLSection getExtra() {
public ObjectMap<String> getExtra() {
return extra.clone();
}
@ -151,22 +153,22 @@ public class Proxy implements ClientHandler, ExtraDataHandler {
}
@Override
public String toString() {
YAMLSection info = new YAMLSection();
public ObjectMap<String> forSubData() {
ObjectMap<String> info = new ObjectMap<String>();
info.set("type", "Proxy");
info.set("name", getName());
info.set("display", getDisplayName());
YAMLSection players = new YAMLSection();
ObjectMap<String> players = new ObjectMap<String>();
for (NamedContainer<String, UUID> player : getPlayers()) {
YAMLSection pinfo = new YAMLSection();
ObjectMap<String> pinfo = new ObjectMap<String>();
pinfo.set("name", player.name());
players.set(player.get().toString(), pinfo);
}
info.set("players", players);
info.set("redis", isRedis());
if (getSubData() != null) info.set("subdata", getSubData().getAddress().toString());
if (getSubData() != null) info.set("subdata", getSubData().getID());
info.set("signature", signature);
info.set("extra", getExtra());
return info.toJSON();
return info;
}
}

View File

@ -1,8 +1,9 @@
package net.ME1312.SubServers.Bungee.Host;
import net.ME1312.SubServers.Bungee.Library.ExtraDataHandler;
import net.ME1312.SubServers.Bungee.Library.NamedContainer;
import net.ME1312.SubServers.Bungee.Network.ClientHandler;
import net.ME1312.Galaxi.Library.ExtraDataHandler;
import net.ME1312.Galaxi.Library.NamedContainer;
import net.ME1312.SubData.Server.ClientHandler;
import net.ME1312.SubData.Server.SerializableClientHandler;
import net.md_5.bungee.api.config.ServerInfo;
import java.util.Collection;
@ -12,7 +13,7 @@ import java.util.UUID;
/**
* Server Interface
*/
public interface Server extends ServerInfo, ClientHandler, ExtraDataHandler {
public interface Server extends ServerInfo, SerializableClientHandler, ExtraDataHandler {
/**
* Get the Display Name of this Server

View File

@ -1,24 +1,23 @@
package net.ME1312.SubServers.Bungee.Host;
import net.ME1312.SubData.Server.DataClient;
import net.ME1312.SubData.Server.SubDataClient;
import net.ME1312.SubServers.Bungee.Event.SubEditServerEvent;
import net.ME1312.SubServers.Bungee.Event.SubNetworkConnectEvent;
import net.ME1312.SubServers.Bungee.Event.SubNetworkDisconnectEvent;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLValue;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.Galaxi.Library.Map.ObjectMapValue;
import net.ME1312.SubServers.Bungee.Library.Exception.InvalidServerException;
import net.ME1312.SubServers.Bungee.Library.NamedContainer;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.SubServers.Bungee.Network.Client;
import net.ME1312.Galaxi.Library.NamedContainer;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.SubServers.Bungee.Network.Packet.PacketOutExRunEvent;
import net.ME1312.SubServers.Bungee.Network.Packet.PacketOutExUpdateWhitelist;
import net.ME1312.SubServers.Bungee.Network.Packet.PacketOutRunEvent;
import net.ME1312.SubServers.Bungee.Network.SubDataServer;
import net.ME1312.SubServers.Bungee.SubAPI;
import net.ME1312.SubServers.Bungee.SubPlugin;
import net.md_5.bungee.BungeeServerInfo;
import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import java.lang.reflect.Field;
import java.net.InetSocketAddress;
import java.util.*;
@ -26,8 +25,8 @@ import java.util.*;
* Server Class
*/
public class ServerContainer extends BungeeServerInfo implements Server {
private YAMLSection extra = new YAMLSection();
private Client client = null;
private ObjectMap<String> extra = new ObjectMap<String>();
private SubDataClient client = null;
private String nick = null;
private List<String> groups = new ArrayList<String>();
private List<UUID> whitelist = new ArrayList<UUID>();
@ -39,25 +38,25 @@ public class ServerContainer extends BungeeServerInfo implements Server {
if (Util.isNull(name, address, motd, hidden, restricted)) throw new NullPointerException();
if (name.contains(" ")) throw new InvalidServerException("Server names cannot have spaces: " + name);
signature = SubAPI.getInstance().signAnonymousObject();
SubDataServer.allowConnection(getAddress().getAddress().getHostAddress());
SubAPI.getInstance().getSubDataNetwork().getProtocol().whitelist(getAddress().getAddress().getHostAddress());
this.hidden = hidden;
}
@Override
public Client getSubData() {
public DataClient getSubData() {
return client;
}
@Override
public void setSubData(Client client) {
this.client = client;
public void setSubData(DataClient client) {
this.client = (SubDataClient) client;
for (Proxy proxy : SubAPI.getInstance().getProxies().values()) if (proxy.getSubData() != null) {
YAMLSection args = new YAMLSection();
ObjectMap<String> args = new ObjectMap<String>();
args.set("server", getName());
if (client != null) args.set("address", client.getAddress().toString());
proxy.getSubData().sendPacket(new PacketOutRunEvent((client != null)?SubNetworkConnectEvent.class:SubNetworkDisconnectEvent.class, args));
((SubDataClient) proxy.getSubData()).sendPacket(new PacketOutExRunEvent((client != null)?SubNetworkConnectEvent.class:SubNetworkDisconnectEvent.class, args));
}
if (client != null && (client.getHandler() == null || !equals(client.getHandler()))) client.setHandler(this);
if (client != null && (client.getHandler() == null || !equals(client.getHandler()))) ((SubDataClient) client).setHandler(this);
}
@Override
@ -175,14 +174,14 @@ public class ServerContainer extends BungeeServerInfo implements Server {
public void whitelist(UUID player) {
if (Util.isNull(player)) throw new NullPointerException();
whitelist.add(player);
for (Proxy proxy : SubAPI.getInstance().getProxies().values()) if (proxy.getSubData() != null) proxy.getSubData().sendPacket(new PacketOutExUpdateWhitelist(getName(), true, player));
for (Proxy proxy : SubAPI.getInstance().getProxies().values()) if (proxy.getSubData() != null) ((SubDataClient) proxy.getSubData()).sendPacket(new PacketOutExUpdateWhitelist(getName(), true, player));
}
@Override
public void unwhitelist(UUID player) {
if (Util.isNull(player)) throw new NullPointerException();
whitelist.remove(player);
for (Proxy proxy : SubAPI.getInstance().getProxies().values()) if (proxy.getSubData() != null) proxy.getSubData().sendPacket(new PacketOutExUpdateWhitelist(getName(), false, player));
for (Proxy proxy : SubAPI.getInstance().getProxies().values()) if (proxy.getSubData() != null) ((SubDataClient) proxy.getSubData()).sendPacket(new PacketOutExUpdateWhitelist(getName(), false, player));
}
@Override
@ -203,13 +202,13 @@ public class ServerContainer extends BungeeServerInfo implements Server {
}
@Override
public YAMLValue getExtra(String handle) {
public ObjectMapValue getExtra(String handle) {
if (Util.isNull(handle)) throw new NullPointerException();
return extra.get(handle);
}
@Override
public YAMLSection getExtra() {
public ObjectMap<String> getExtra() {
return extra.clone();
}
@ -220,8 +219,8 @@ public class ServerContainer extends BungeeServerInfo implements Server {
}
@Override
public String toString() {
YAMLSection info = new YAMLSection();
public ObjectMap<String> forSubData() {
ObjectMap<String> info = new ObjectMap<String>();
info.set("type", "Server");
info.set("name", getName());
info.set("display", getDisplayName());
@ -231,17 +230,16 @@ public class ServerContainer extends BungeeServerInfo implements Server {
info.set("whitelist", whitelist);
info.set("restricted", isRestricted());
info.set("hidden", isHidden());
if (getSubData() != null) info.set("subdata", getSubData().getAddress().toString());
YAMLSection players = new YAMLSection();
ObjectMap<String> players = new ObjectMap<String>();
for (NamedContainer<String, UUID> player : getGlobalPlayers()) {
YAMLSection pinfo = new YAMLSection();
ObjectMap<String> pinfo = new ObjectMap<String>();
pinfo.set("name", player.name());
players.set(player.get().toString(), pinfo);
}
info.set("players", players);
if (getSubData() != null) info.set("subdata", getSubData().getAddress().toString());
if (getSubData() != null) info.set("subdata", getSubData().getID());
info.set("signature", signature);
info.set("extra", getExtra());
return info.toJSON();
return info;
}
}

View File

@ -1,15 +1,14 @@
package net.ME1312.SubServers.Bungee.Host;
import com.google.common.collect.Range;
import net.ME1312.SubServers.Bungee.Library.Callback;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.Galaxi.Library.Callback.Callback;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.SubServers.Bungee.Library.Exception.InvalidTemplateException;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.SubServers.Bungee.Library.Version.Version;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.Galaxi.Library.Version.Version;
import net.ME1312.SubServers.Bungee.SubAPI;
import java.io.File;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.util.*;
@ -24,8 +23,8 @@ public abstract class SubCreator {
private String icon;
private File directory;
private ServerType type;
private YAMLSection build;
private YAMLSection options;
private ObjectMap<String> build;
private ObjectMap<String> options;
/**
* Create a SubCreator Template
@ -35,7 +34,7 @@ public abstract class SubCreator {
* @param build Build Options
* @param options Configuration Options
*/
public ServerTemplate(String name, boolean enabled, String icon, File directory, YAMLSection build, YAMLSection options) {
public ServerTemplate(String name, boolean enabled, String icon, File directory, ObjectMap<String> build, ObjectMap<String> options) {
if (Util.isNull(name, enabled, directory, build, options)) throw new NullPointerException();
if (name.contains(" ")) throw new InvalidTemplateException("Template names cannot have spaces: " + name);
this.name = name;
@ -137,7 +136,7 @@ public abstract class SubCreator {
*
* @return Build Options
*/
public YAMLSection getBuildOptions() {
public ObjectMap<String> getBuildOptions() {
return build;
}
@ -146,19 +145,19 @@ public abstract class SubCreator {
*
* @return Configuration Options
*/
public YAMLSection getConfigOptions() {
public ObjectMap<String> getConfigOptions() {
return options;
}
@Override
public String toString() {
YAMLSection tinfo = new YAMLSection();
public ObjectMap<String> forSubData() {
ObjectMap<String> tinfo = new ObjectMap<String>();
tinfo.set("enabled", isEnabled());
tinfo.set("name", getName());
tinfo.set("display", getDisplayName());
tinfo.set("icon", getIcon());
tinfo.set("type", getType().toString());
return tinfo.toJSON();
return tinfo;
}
}
public enum ServerType {
@ -180,7 +179,7 @@ public abstract class SubCreator {
* @param player Player Creating
* @param name Server Name
* @param template Server Template
* @param version Server Version
* @param version Server Version (may be null)
* @param port Server Port Number (null to auto-select)
* @return Success Status
*/
@ -192,7 +191,7 @@ public abstract class SubCreator {
* @param player Player Creating
* @param name Server Name
* @param template Server Template
* @param version Server Version
* @param version Server Version (may be null)
* @param port Server Port Number (null to auto-select)
* @return Success Status
*/
@ -205,7 +204,7 @@ public abstract class SubCreator {
*
* @param name Server Name
* @param template Server Template
* @param version Server Version
* @param version Server Version (may be null)
* @param port Server Port Number (null to auto-select)
* @return Success Status
*/
@ -218,7 +217,7 @@ public abstract class SubCreator {
*
* @param name Server Name
* @param template Server Template
* @param version Server Version
* @param version Server Version (may be null)
* @param port Server Port Number (null to auto-select)
* @return Success Status
*/

View File

@ -1,7 +1,7 @@
package net.ME1312.SubServers.Bungee.Host;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.Galaxi.Library.Util;
import java.util.*;
@ -17,6 +17,7 @@ public interface SubServer extends Server {
NONE,
RESTART,
REMOVE_SERVER,
RECYCLE_SERVER,
DELETE_SERVER;
@Override
@ -169,7 +170,7 @@ public interface SubServer extends Server {
* @param edit Edits
* @return Success Status
*/
default int edit(UUID player, YAMLSection edit) {
default int edit(UUID player, ObjectMap<String> edit) {
return -1;
}
@ -179,7 +180,7 @@ public interface SubServer extends Server {
* @param edit Edits
* @return Success Status
*/
default int edit(YAMLSection edit) {
default int edit(ObjectMap<String> edit) {
return -1;
}
@ -221,12 +222,12 @@ public interface SubServer extends Server {
/**
* If the Server is accepting requests to edit()
*
* @see #edit(YAMLSection)
* @see #edit(UUID, YAMLSection)
* @see #edit(ObjectMap<String>)
* @see #edit(UUID, ObjectMap<String>)
* @return Edit Status
*/
default boolean isEditable() {
return edit(new YAMLSection()) >= 0;
return edit(new ObjectMap<String>()) >= 0;
}
/**

View File

@ -1,9 +1,8 @@
package net.ME1312.SubServers.Bungee.Host;
import com.google.gson.Gson;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.SubServers.Bungee.Library.Exception.InvalidServerException;
import net.ME1312.SubServers.Bungee.Library.NamedContainer;
import net.ME1312.Galaxi.Library.NamedContainer;
import net.ME1312.SubServers.Bungee.SubAPI;
import java.io.File;
@ -51,7 +50,7 @@ public abstract class SubServerContainer extends ServerContainer implements SubS
}
@Override
public int edit(YAMLSection edit) {
public int edit(ObjectMap<String> edit) {
return edit(null, edit);
}
@ -109,8 +108,8 @@ public abstract class SubServerContainer extends ServerContainer implements SubS
@SuppressWarnings({"deprecation", "unchecked"})
@Override
public String toString() {
YAMLSection sinfo = new YAMLSection(new Gson().fromJson(super.toString(), Map.class));
public ObjectMap<String> forSubData() {
ObjectMap<String> sinfo = super.forSubData();
sinfo.set("type", "SubServer");
sinfo.set("host", getHost().getName());
sinfo.set("enabled", isEnabled());
@ -121,13 +120,13 @@ public abstract class SubServerContainer extends ServerContainer implements SubS
sinfo.set("running", isRunning());
sinfo.set("stop-cmd", getStopCommand());
sinfo.set("stop-action", getStopAction().toString());
sinfo.set("auto-run", SubAPI.getInstance().getInternals().config.get().getSection("Servers").getSection(getName(), new YAMLSection()).getBoolean("Run-On-Launch", false));
sinfo.set("auto-run", SubAPI.getInstance().getInternals().config.get().getMap("Servers").getMap(getName(), new ObjectMap<String>()).getBoolean("Run-On-Launch", false));
List<String> incompatibleCurrent = new ArrayList<String>();
List<String> incompatible = new ArrayList<String>();
for (SubServer server : getCurrentIncompatibilities()) incompatibleCurrent.add(server.getName());
for (SubServer server : getIncompatibilities()) incompatible.add(server.getName());
sinfo.set("incompatible", incompatibleCurrent);
sinfo.set("incompatible-list", incompatible);
return sinfo.toJSON();
return sinfo;
}
}

View File

@ -1,6 +1,6 @@
package net.ME1312.SubServers.Bungee.Host;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.SubServers.Bungee.Library.Exception.InvalidServerException;
import java.util.*;
@ -64,12 +64,12 @@ public abstract class SubServerController {
}
@Override
public int edit(YAMLSection edit) {
public int edit(ObjectMap<String> edit) {
return SubServerController.this.edit(edit);
}
@Override
public int edit(UUID player, YAMLSection edit) {
public int edit(UUID player, ObjectMap<String> edit) {
return SubServerController.this.edit(player, edit);
}
@ -236,7 +236,7 @@ public abstract class SubServerController {
* @param edit Edits
* @return Success Status
*/
public int edit(UUID player, YAMLSection edit) {
public int edit(UUID player, ObjectMap<String> edit) {
return -1;
}
@ -246,7 +246,7 @@ public abstract class SubServerController {
* @param edit Edits
* @return Success Status
*/
public int edit(YAMLSection edit) {
public int edit(ObjectMap<String> edit) {
return -1;
}
@ -352,9 +352,4 @@ public abstract class SubServerController {
* @param action Stop Action
*/
public abstract void setStopAction(SubServer.StopAction action);
@Override
public String toString() {
return control.toString();
}
}

View File

@ -1,11 +1,7 @@
package net.ME1312.SubServers.Bungee;
import net.ME1312.SubServers.Bungee.Library.Container;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.SubServers.Bungee.Library.Version.Version;
import net.ME1312.SubServers.Bungee.Library.Version.VersionType;
import net.ME1312.Galaxi.Library.Util;
import java.lang.reflect.Field;
import java.security.Security;
import java.text.SimpleDateFormat;
import java.util.Calendar;

View File

@ -1,13 +0,0 @@
package net.ME1312.SubServers.Bungee.Library;
/**
* Callback Class
*/
public interface Callback<T> {
/**
* Run the Callback
*
* @param obj Object
*/
void run(T obj);
}

View File

@ -1,6 +1,6 @@
package net.ME1312.SubServers.Bungee.Library.Compatibility;
import net.ME1312.SubServers.Bungee.Library.NamedContainer;
import net.ME1312.Galaxi.Library.NamedContainer;
import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.plugin.Command;
import net.md_5.bungee.api.plugin.TabExecutor;

View File

@ -1,7 +1,7 @@
package net.ME1312.SubServers.Bungee.Library.Compatibility;
import com.google.common.io.Resources;
import net.ME1312.SubServers.Bungee.Library.UniversalFile;
import net.ME1312.Galaxi.Library.UniversalFile;
import net.ME1312.SubServers.Bungee.SubAPI;
import java.io.FileNotFoundException;

View File

@ -1,6 +1,6 @@
package net.ME1312.SubServers.Bungee.Library.Compatibility.mc1_13;
import net.ME1312.SubServers.Bungee.Library.NamedContainer;
import net.ME1312.Galaxi.Library.NamedContainer;
import net.md_5.bungee.api.CommandSender;
import java.util.LinkedList;

View File

@ -1,110 +0,0 @@
package net.ME1312.SubServers.Bungee.Library.Config;
import net.ME1312.SubServers.Bungee.Library.Util;
import org.yaml.snakeyaml.DumperOptions;
import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.error.YAMLException;
import java.io.*;
import java.util.LinkedHashMap;
/**
* YAML Config Class
*/
@SuppressWarnings("unused")
public class YAMLConfig {
private File file;
private Yaml yaml;
private YAMLSection config;
/**
* Creates/Loads a YAML Formatted Config
*
* @param file
* @throws IOException
* @throws YAMLException
*/
@SuppressWarnings("unchecked")
public YAMLConfig(File file) throws IOException, YAMLException {
if (Util.isNull(file)) throw new NullPointerException();
this.file = file;
this.yaml = new Yaml(getDumperOptions());
if (file.exists()) {
InputStream stream = new FileInputStream(file);
this.config = new YAMLSection((LinkedHashMap<String, ?>) yaml.loadAs(stream, LinkedHashMap.class), null, null, yaml);
stream.close();
} else {
this.config = new YAMLSection(null, null, null, yaml);
}
}
/**
* Get Config Contents
*
* @return Config Contents
*/
public YAMLSection get() {
return config;
}
/**
* Set Config Contents
*
* @param value Value
*/
public void set(YAMLSection value) {
if (Util.isNull(value)) throw new NullPointerException();
config = value;
}
/**
* Reload Config Contents
*
* @throws IOException
*/
@SuppressWarnings("unchecked")
public void reload() throws IOException {
if (file.exists()) {
InputStream stream = new FileInputStream(file);
this.config = new YAMLSection((LinkedHashMap<String, ?>) yaml.loadAs(stream, LinkedHashMap.class), null, null, yaml);
stream.close();
} else {
this.config = new YAMLSection(null, null, null, yaml);
}
}
/**
* Save Config Contents
*
* @throws IOException
*/
public void save() throws IOException {
if (!file.exists()) file.createNewFile();
FileWriter writer = new FileWriter(file);
yaml.dump(config.map, writer);
writer.close();
}
@Override
public boolean equals(Object object) {
if (object instanceof YAMLConfig) {
return get().equals(((YAMLConfig) object).get());
} else {
return super.equals(object);
}
}
@Override
public String toString() {
return yaml.dump(config.map);
}
protected static DumperOptions getDumperOptions() {
DumperOptions options = new DumperOptions();
options.setAllowUnicode(false);
options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
options.setIndent(2);
return options;
}
}

View File

@ -1,397 +0,0 @@
package net.ME1312.SubServers.Bungee.Library.Config;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.SubServers.Bungee.Library.Version.Version;
import net.md_5.bungee.api.ChatColor;
import org.yaml.snakeyaml.Yaml;
import java.util.*;
/**
* YAML Value Class
*/
@SuppressWarnings({"unchecked", "unused"})
public class YAMLValue {
protected Object obj;
protected String label;
protected YAMLSection up;
private Yaml yaml;
protected YAMLValue(Object obj, YAMLSection up, String label, Yaml yaml) {
this.obj = obj;
this.label = label;
this.yaml = yaml;
this.up = up;
}
/**
* Get the YAML Section this Object was defined in
*
* @return YAML Section
*/
public YAMLSection getDefiningSection() {
return up;
}
/**
* Get Object
*
* @return Object
*/
public Object asObject() {
return obj;
}
/**
* Get Object as List
*
* @return List
*/
public List<?> asObjectList() {
return (List<?>) obj;
}
/**
* Get Object as Boolean
*
* @return Boolean
*/
public Boolean asBoolean() {
return (Boolean) obj;
}
/**
* Get Object as List
*
* @return List
*/
public List<Boolean> asBooleanList() {
return (List<Boolean>) obj;
}
/**
* Get Object as YAML Section
*
* @return YAML Section
*/
public YAMLSection asSection() {
if (obj != null) return new YAMLSection((Map<String, ?>) obj, up, label, yaml);
else return null;
}
/**
* Get Object as YAML Section List
*
* @return YAML Section List
*/
public List<YAMLSection> asSectionList() {
if (obj != null) {
List<YAMLSection> values = new ArrayList<YAMLSection>();
for (Map<String, ?> value : (List<? extends Map<String, ?>>) obj) {
values.add(new YAMLSection(value, null, null, yaml));
}
return values;
} else return null;
}
/**
* Get Object as Double
*
* @return Double
*/
public Double asDouble() {
return ((Number) obj).doubleValue();
}
/**
* Get Object as Double List
*
* @return Double List
*/
public List<Double> asDoubleList() {
return (List<Double>) obj;
}
/**
* Get Object as Float
*
* @return Float
*/
public Float asFloat() {
return ((Number) obj).floatValue();
}
/**
* Get Object as Float List
*
* @return Float List
*/
public List<Float> asFloatList() {
return (List<Float>) obj;
}
/**
* Get Object as Integer
*
* @return Integer
*/
public Integer asInt() {
return ((Number) obj).intValue();
}
/**
* Get Object as Integer List
*
* @return Integer List
*/
public List<Integer> asIntList() {
return (List<Integer>) obj;
}
/**
* Get Object as Long
*
* @return Long
*/
public Long asLong() {
return ((Number) obj).longValue();
}
/**
* Get Object as Long List
*
* @return Long List
*/
public List<Long> asLongList() {
return (List<Long>) obj;
}
/**
* Get a Short by Handle
*
* @return Short
*/
public Short asShort() {
return ((Number) obj).shortValue();
}
/**
* Get a Short List by Handle
*
* @return Short List
*/
public List<Short> asShortList() {
return (List<Short>) obj;
}
/**
* Get Object as Unparsed String
*
* @return Unparsed String
*/
public String asRawString() {
if (obj != null) return obj.toString();
else return null;
}
/**
* Get Object as Unparsed String List
*
* @return Unparsed String List
*/
public List<String> asRawStringList() {
if (obj != null) {
List<String> values = new ArrayList<String>();
for (Object value : (List<?>) obj) {
values.add(value.toString());
}
return values;
} else return null;
}
/**
* Get Object as String
*
* @return String
*/
public String asString() {
if (obj != null) return Util.unescapeJavaString(asRawString());
else return null;
}
/**
* Get Object as String List
*
* @return String List
*/
public List<String> asStringList() {
if (obj != null) {
List<String> values = new ArrayList<String>();
for (String value : asRawStringList()) {
values.add(Util.unescapeJavaString(value));
}
return values;
} else return null;
}
/**
* Get Object as Colored String
*
* @param color Color Char to parse
* @return Colored String
*/
public String asColoredString(char color) {
if (Util.isNull(color)) throw new NullPointerException();
if (obj != null) return ChatColor.translateAlternateColorCodes(color, asString());
else return null;
}
/**
* Get Object as Colored String List
*
* @param color Color Char to parse
* @return Colored String List
*/
public List<String> asColoredStringList(char color) {
if (obj != null) {
if (Util.isNull(color)) throw new NullPointerException();
List<String> values = new ArrayList<String>();
for (String value : asStringList()) {
values.add(ChatColor.translateAlternateColorCodes(color, value));
}
return values;
} else return null;
}
/**
* Get Object as UUID
*
* @return UUID
*/
public UUID asUUID() {
if (obj != null) return UUID.fromString(asRawString());
else return null;
}
/**
* Get Object as UUID List
*
* @return UUID List
*/
public List<UUID> asUUIDList() {
if (obj != null) {
List<UUID> values = new ArrayList<UUID>();
for (String value : (List<String>) obj) {
values.add(UUID.fromString(value));
}
return values;
} else return null;
}
/**
* Get Object as Version
*
* @return Version
*/
public Version asVersion() {
if (obj != null) return Version.fromString(asRawString());
else return null;
}
/**
* Get Object as Version List
*
* @return Version List
*/
public List<Version> asVersionList() {
if (obj != null) {
List<Version> values = new ArrayList<Version>();
for (String value : (List<String>) obj) {
values.add(Version.fromString(value));
}
return values;
} else return null;
}
/**
* Check if object is Null
*
* @return Null Status
*/
public boolean isNull() {
return obj == null;
}
/**
* Check if object is a Boolean
*
* @return Boolean Status
*/
public boolean isBoolean() {
return (obj instanceof Boolean);
}
/**
* Check if object is a YAML Section
*
* @return YAML Section Status
*/
public boolean isSection() {
return (obj instanceof Map);
}
/**
* Check if object is a List
*
* @return List Status
*/
public boolean isList() {
return (obj instanceof List);
}
/**
* Check if object is a Number
*
* @return Number Status
*/
public boolean isNumber() {
return (obj instanceof Number);
}
/**
* Check if object is a String
*
* @return String Status
*/
public boolean isString() {
return (obj instanceof String);
}
/**
* Check if object is a UUID
*
* @return UUID Status
*/
public boolean isUUID() {
return (obj instanceof String && !Util.isException(() -> UUID.fromString(asRawString())));
}
@Override
public boolean equals(Object object) {
if (obj == null) {
return object == null;
} else {
if (object instanceof YAMLValue) {
return obj.equals(((YAMLValue) object).obj);
} else {
return obj.equals(object);
}
}
}
@Override
public String toString() {
if (obj != null) return obj.toString();
else return "null";
}
}

View File

@ -1,50 +0,0 @@
package net.ME1312.SubServers.Bungee.Library;
/**
* Container Class
*
* @param <V> Item
*/
public class Container<V> {
private V obj;
/**
* Creates a Container
*
* @param item Object to Store
*/
public Container(V item) {
obj = item;
}
/**
* Grabs the Object
*
* @return The Object
*/
public V get() {
return obj;
}
/**
* Overwrite the Object
*
* @param value Object to Store
*/
public void set(V value) {
obj = value;
}
@Override
public boolean equals(Object object) {
if (object instanceof Container) {
if (obj == null || ((Container) object).get() == null) {
return obj == ((Container) object).get();
} else {
return obj.equals(((Container) object).get());
}
} else {
return super.equals(object);
}
}
}

View File

@ -1,47 +0,0 @@
package net.ME1312.SubServers.Bungee.Library;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLValue;
/**
* Extra Data Handler Layout Class
*/
public interface ExtraDataHandler {
/**
* Add an extra value to this Object
*
* @param handle Handle
* @param value Value
*/
void addExtra(String handle, Object value);
/**
* Determine if an extra value exists
*
* @param handle Handle
* @return Value Status
*/
boolean hasExtra(String handle);
/**
* Get an extra value
*
* @param handle Handle
* @return Value
*/
YAMLValue getExtra(String handle);
/**
* Get the extra value section
*
* @return Extra Value Section
*/
YAMLSection getExtra();
/**
* Remove an extra value from this Object
*
* @param handle Handle
*/
void removeExtra(String handle);
}

View File

@ -7,9 +7,9 @@ Settings:
Forward-SubData: false
Forward-Servers: false
SubData:
Address: '127.0.0.1:4391'
Password: 'default'
Encryption: 'AES'
Address: '0.0.0.0:4391'
Password: ''
Encryption: 'RSA/AES'
Allowed-Connections: []
Hosts:

View File

@ -1,52 +0,0 @@
package net.ME1312.SubServers.Bungee.Library;
/**
* Named Container Class
* @param <T> Name
* @param <V> Item
*/
public class NamedContainer<T, V> extends Container<V> {
private T name;
/**
* Creates a TaggedContainer
*
* @param name Tag to Bind
* @param item Object to Store
*/
public NamedContainer(T name, V item) {
super(item);
this.name = name;
}
/**
* Gets the name of the Container
*
* @return Container name
*/
public T name() {
return name;
}
/**
* Renames the Container
*
* @param name New Container Name
*/
public void rename(T name) {
this.name = name;
}
@Override
public boolean equals(Object object) {
if (object instanceof NamedContainer) {
if (name == null || ((NamedContainer) object).name() == null) {
return name == ((NamedContainer) object).name() && super.equals(object);
} else {
return name.equals(((NamedContainer) object).name()) && super.equals(object);
}
} else {
return super.equals(object);
}
}
}

View File

@ -1,70 +0,0 @@
package net.ME1312.SubServers.Bungee.Library;
import java.io.File;
/**
* Universal File Class
*/
public class UniversalFile extends File {
/**
* Creates a File Link. Path names are separated by ':'
*
* @param pathname Path name
*/
public UniversalFile(String pathname) {
super(pathname.replace(".:", System.getProperty("user.dir") + ":").replace(':', File.separatorChar));
}
/**
* Creates a File Link. Path names are separated by the divider
*
* @param pathname Path name
* @param divider Divider to use
*/
public UniversalFile(String pathname, char divider) {
super(pathname.replace("." + divider, System.getProperty("user.dir") + divider).replace(divider, File.separatorChar));
}
/**
* Creates a File Link.
*
* @see File
* @param file File
*/
public UniversalFile(File file) {
super(file.getPath());
}
/**
* Creates a File. Path names are separated by the ':'
*
* @see File
* @param parent Parent File
* @param child Path name
*/
public UniversalFile(File parent, String child) {
super(parent, child.replace(':', File.separatorChar));
}
/**
* Creates a File. Path names are separated by the divider
*
* @see File
* @param parent Parent File
* @param child Path name
* @param divider Divider to use
*/
public UniversalFile(File parent, String child, char divider) {
super(parent, child.replace(divider, File.separatorChar));
}
/**
* Gets the Universal File Path (separated by ':')
*
* @return
*/
public String getUniversalPath() {
return getPath().replace(File.separatorChar, ':');
}
}

View File

@ -1,476 +0,0 @@
package net.ME1312.SubServers.Bungee.Library;
import java.io.*;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.nio.file.Files;
import java.nio.file.LinkOption;
import java.util.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
/**
* SubServers Utility Class
*/
public final class Util {
private Util(){}
public interface ExceptionReturnRunnable<R> {
R run() throws Throwable;
}
public interface ExceptionRunnable {
void run() throws Throwable;
}
public interface ReturnRunnable<R> {
R run();
}
/**
* Checks values to make sure they're not null
*
* @param values Values to check
* @return If any are null
*/
public static boolean isNull(Object... values) {
boolean ret = false;
for (Object value : values) {
if (value == null) ret = true;
}
return ret;
}
/**
* Get keys by value from map
*
* @param map Map to search
* @param value Value to search for
* @param <K> Key
* @param <V> Value
* @return Search results
*/
public static <K, V> List<K> getBackwards(Map<K, V> map, V value) {
List<K> values = new ArrayList<K>();
for (K key : map.keySet()) {
if (map.get(key).equals(value)) {
values.add(key);
}
}
return values;
}
/**
* Get an item from a map ignoring case
*
* @param map Map to search
* @param key Key to search with
* @param <V> Value
* @return Search Result
*/
public static <V> V getCaseInsensitively(Map<String, V> map, String key) {
HashMap<String, String> insensitivity = new HashMap<String, String>();
for (String item : map.keySet()) if (!insensitivity.keySet().contains(item.toLowerCase())) insensitivity.put(item.toLowerCase(), item);
if (insensitivity.keySet().contains(key.toLowerCase())) {
return map.get(insensitivity.get(key.toLowerCase()));
} else {
return null;
}
}
/**
* Gets a new Variable that doesn't match the existing Variables
*
* @param existing Existing Variables
* @param generator Variable Generator
* @param <V> Variable Type
* @return Variable
*/
public static <V> V getNew(Collection<? extends V> existing, ReturnRunnable<V> generator) {
V result = null;
while (result == null) {
V tmp = generator.run();
if (!existing.contains(tmp)) result = tmp;
}
return result;
}
/**
* Read Everything from Reader
*
* @param rd Reader
* @return Reader Contents
* @throws IOException
*/
public static String readAll(Reader rd) throws IOException {
StringBuilder sb = new StringBuilder();
int cp;
while ((cp = rd.read()) != -1) {
sb.append((char) cp);
}
return sb.toString();
}
/**
* Copy from the Class Loader
*
* @param loader ClassLoader
* @param resource Location From
* @param destination Location To
*/
public static void copyFromJar(ClassLoader loader, String resource, String destination) {
InputStream resStreamIn = loader.getResourceAsStream(resource);
File resDestFile = new File(destination);
try {
OutputStream resStreamOut = new FileOutputStream(resDestFile);
int readBytes;
byte[] buffer = new byte[4096];
while ((readBytes = resStreamIn.read(buffer)) > 0) {
resStreamOut.write(buffer, 0, readBytes);
}
resStreamOut.close();
resStreamIn.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
/**
* Get a Field's value using Reflection
*
* @param field Field to grab
* @param instance Object Instance (Null for static fields)
* @param <R> Return Type
* @return Field Value
* @throws IllegalAccessException
*/
@SuppressWarnings("unchecked")
public static <R> R reflect(Field field, Object instance) throws IllegalAccessException {
R value;
field.setAccessible(true);
value = (R) field.get(instance);
field.setAccessible(false);
return value;
}
/**
* Set a Field's value using Reflection
*
* @param field Field to write to
* @param instance Object Instance (Null for static fields)
* @param value Value to write
* @throws IllegalAccessException
*/
public static void reflect(Field field, Object instance, Object value) throws IllegalAccessException {
field.setAccessible(true);
field.set(instance, value);
field.setAccessible(false);
}
/**
* Call a method using Reflection
*
* @param method Method to call
* @param instance Object Instance (Null for static methods)
* @param arguments Method Arguments
* @param <R> Return Type
* @return Returned Value
* @throws InvocationTargetException
* @throws IllegalAccessException
*/
@SuppressWarnings("unchecked")
public static <R> R reflect(Method method, Object instance, Object... arguments) throws InvocationTargetException, IllegalAccessException {
R value;
method.setAccessible(true);
value = (R) method.invoke(instance, arguments);
method.setAccessible(false);
return value;
}
/**
* Construct an object using Reflection
*
* @param constructor Constructor to use
* @param arguments Constructor Arguments
* @param <R> Return Type
* @return New Instance
* @throws InvocationTargetException
* @throws IllegalAccessException
* @throws InstantiationException
*/
@SuppressWarnings("unchecked")
public static <R> R reflect(Constructor<?> constructor, Object... arguments) throws InvocationTargetException, IllegalAccessException, InstantiationException {
R value;
constructor.setAccessible(true);
value = (R) constructor.newInstance(arguments);
constructor.setAccessible(false);
return value;
}
/**
* Get a variable from a method which may throw an exception
*
* @param runnable Runnable
* @param def Default value when an exception is thrown
* @param <R> Variable Type
* @return Returns value or default depending on if an exception is thrown
*/
public static <R> R getDespiteException(ExceptionReturnRunnable<R> runnable, R def) {
try {
return runnable.run();
} catch (Throwable e) {
return def;
}
}
/**
* Determines if an Exception will occur
*
* @param runnable Runnable
* @return If an Exception occured
*/
public static boolean isException(ExceptionRunnable runnable) {
try {
runnable.run();
return false;
} catch (Throwable e) {
return true;
}
}
/**
* Delete Directory
*
* @param folder Location
*/
public static void deleteDirectory(File folder) {
File[] files = folder.listFiles();
if(files!=null) {
for(File f : files) {
if(f.isDirectory() && !Files.isSymbolicLink(f.toPath())) {
deleteDirectory(f);
} else try {
Files.delete(f.toPath());
} catch (IOException e) {
e.printStackTrace();
}
}
}
folder.delete();
}
/**
* Copy a Directory
*
* @param from Source
* @param to Destination
*/
public static void copyDirectory(File from, File to) {
if (from.isDirectory() && !Files.isSymbolicLink(from.toPath())) {
if (!to.exists()) {
to.mkdirs();
}
String files[] = from.list();
for (String file : files) {
File srcFile = new File(from, file);
File destFile = new File(to, file);
copyDirectory(srcFile, destFile);
}
} else {
try {
Files.copy(from.toPath(), to.toPath(), LinkOption.NOFOLLOW_LINKS);
} catch (Exception e) {
e.printStackTrace();
}
}
}
private static List<String> zipsearch(File origin, File file) {
List<String> list = new LinkedList<String>();
if (file.isFile()) {
list.add(file.getAbsoluteFile().toString().substring(origin.getAbsoluteFile().toString().length()+1, file.getAbsoluteFile().toString().length()));
}
if (file.isDirectory()) for (File next : file.listFiles()) {
list.addAll(zipsearch(origin, next));
}
return list;
}
public static void zip(File file, OutputStream zip) {
byte[] buffer = new byte[1024];
try{
ZipOutputStream zos = new ZipOutputStream(zip);
for(String next : zipsearch(file, file)){
ZipEntry ze= new ZipEntry(next);
zos.putNextEntry(ze);
FileInputStream in = new FileInputStream(file.getAbsolutePath() + File.separator + next);
int len;
while ((len = in.read(buffer)) > 0) {
zos.write(buffer, 0, len);
}
in.close();
}
zos.closeEntry();
zos.close();
} catch(IOException ex){
ex.printStackTrace();
}
}
public static void unzip(InputStream zip, File dir) {
byte[] buffer = new byte[1024];
try{
ZipInputStream zis = new ZipInputStream(zip);
ZipEntry ze;
while ((ze = zis.getNextEntry()) != null) {
File newFile = new File(dir + File.separator + ze.getName());
if (newFile.exists()) {
if (newFile.isDirectory()) {
Util.deleteDirectory(newFile);
} else {
newFile.delete();
}
}
if (ze.isDirectory()) {
newFile.mkdirs();
continue;
} else if (!newFile.getParentFile().exists()) {
newFile.getParentFile().mkdirs();
}
FileOutputStream fos = new FileOutputStream(newFile);
int len;
while ((len = zis.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}
fos.close();
}
zis.closeEntry();
zis.close();
} catch(IOException ex) {
ex.printStackTrace();
}
}
/**
* Get a Random Integer
*
* @param min Minimum Value
* @param max Maximum Value
* @return Random Integer
*/
public static int random(int min, int max) {
return new Random().nextInt((max - min) + 1) + min;
}
/**
* Parse escapes in a Java String
*
* @param str String
* @return Unescaped String
*/
public static String unescapeJavaString(String str) {
StringBuilder sb = new StringBuilder(str.length());
for (int i = 0; i < str.length(); i++) {
int ch = str.codePointAt(i);
if (ch == '\\') {
int nextChar = (i == str.length() - 1) ? '\\' : str
.codePointAt(i + 1);
// Octal escape?
if (nextChar >= '0' && nextChar <= '7') {
StringBuilder code = new StringBuilder();
code.appendCodePoint(nextChar);
i++;
if ((i < str.length() - 1) && str.codePointAt(i + 1) >= '0'
&& str.codePointAt(i + 1) <= '7') {
code.appendCodePoint(str.codePointAt(i + 1));
i++;
if ((i < str.length() - 1) && str.codePointAt(i + 1) >= '0'
&& str.codePointAt(i + 1) <= '7') {
code.appendCodePoint(str.codePointAt(i + 1));
i++;
}
}
sb.append((char) Integer.parseInt(code.toString(), 8));
continue;
}
switch (nextChar) {
case '\\':
ch = '\\';
break;
case 'b':
ch = '\b';
break;
case 'f':
ch = '\f';
break;
case 'n':
ch = '\n';
break;
case 'r':
ch = '\r';
break;
case 't':
ch = '\t';
break;
case '\"':
ch = '\"';
break;
case '\'':
ch = '\'';
break;
// Hex Unicode Char: u????
// Hex Unicode Codepoint: u{??????}
case 'u':
try {
if (i >= str.length() - 4) throw new IllegalStateException();
StringBuilder escape = new StringBuilder();
int offset = 2;
if (str.codePointAt(i + 2) != '{') {
if (i >= str.length() - 5) throw new IllegalStateException();
while (offset <= 5) {
Integer.toString(str.codePointAt(i + offset), 16);
escape.appendCodePoint(str.codePointAt(i + offset));
offset++;
}
offset--;
} else {
offset++;
while (str.codePointAt(i + offset) != '}') {
Integer.toString(str.codePointAt(i + offset), 16);
escape.appendCodePoint(str.codePointAt(i + offset));
offset++;
}
}
sb.append(new String(new int[]{
Integer.parseInt(escape.toString(), 16)
}, 0, 1));
i += offset;
continue;
} catch (Throwable e){
sb.append('\\');
ch = 'u';
break;
}
}
i++;
}
sb.appendCodePoint(ch);
}
return sb.toString();
}
}

View File

@ -1,411 +0,0 @@
package net.ME1312.SubServers.Bungee.Library.Version;
import net.ME1312.SubServers.Bungee.Library.Util;
import java.io.Serializable;
import java.util.Collections;
import java.util.LinkedList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* Version Class
*/
@SuppressWarnings("serial")
public class Version implements Serializable, Comparable<Version> {
private final Version parent;
private final VersionType type;
private final String string;
/**
* Creates a Version
*
* @param string Version String
*/
public Version(String string) {
this(VersionType.VERSION, string);
}
/**
* Creates a Version
*
* @param type Version Type
* @param string Version String
*/
public Version(VersionType type, String string) {
this(null, type, string);
}
/**
* Creates a Version (Appending the parent)
*
* @param parent Parent Version
* @param string Version String
*/
public Version(Version parent, String string) {
this(parent, VersionType.VERSION, string);
}
/**
* Creates a Version (Appending the parent)
*
* @param parent Parent Version
* @param type Version Type
* @param string Version String
*/
public Version(Version parent, VersionType type, String string) {
if (Util.isNull(string, type)) throw new NullPointerException();
this.parent = parent;
this.type = type;
this.string = string;
}
/**
* Creates a Version
*
* @param ints Version Numbers (Will be separated with dots)
*/
public Version(int... ints) {
this(VersionType.VERSION, ints);
}
/**
* Creates a Version
*
* @param type Version Type
* @param ints Version Numbers (Will be separated with dots)
*/
public Version(VersionType type, int... ints) {
this(null, type, ints);
}
/**
* Creates a Version (Appending the parent)
*
* @param parent Parent Version
* @param ints Version Numbers (Will be separated with dots)
*/
public Version(Version parent, int... ints) {
this(parent, VersionType.VERSION, ints);
}
/**
* Creates a Version (Appending the parent)
*
* @param parent Parent Version
* @param type Version Type
* @param ints Version Numbers (Will be separated with dots)
*/
public Version(Version parent, VersionType type, int... ints) {
if (Util.isNull(type)) throw new NullPointerException();
this.parent = parent;
this.type = type;
String string = Integer.toString(ints[0]);
int i = 0;
if (ints.length != 1) {
do {
i++;
string = string + "." + ints[i];
} while ((i + 1) != ints.length);
}
this.string = string;
}
/**
* Parse a Version from a string
*
* @param string String to parse
* @see #toFullString() <b>#toFullString()</b> returns a valid string
* @see #toFullString() <b>#toString()</b> returns a valid string
*/
public static Version fromString(String string) {
Matcher regex = Pattern.compile("(rv|p?[abrv]|[su])?([^/]+)", Pattern.CASE_INSENSITIVE).matcher(string);
Version current = null;
while (regex.find()) {
try {
VersionType type = VersionType.VERSION;
if (regex.group(1) != null) switch (regex.group(1).toLowerCase()) {
case "pa":
type = VersionType.PRE_ALPHA;
break;
case "a":
type = VersionType.ALPHA;
break;
case "pv":
type = VersionType.PREVIEW;
break;
case "pb":
type = VersionType.PRE_BETA;
break;
case "b":
type = VersionType.BETA;
break;
case "s":
type = VersionType.SNAPSHOT;
break;
case "pr":
type = VersionType.PRE_RELEASE;
break;
case "r":
type = VersionType.RELEASE;
break;
case "rv":
type = VersionType.REVISION;
break;
case "u":
type = VersionType.UPDATE;
break;
}
current = new Version(current, type, regex.group(2));
} catch (Throwable e) {}
}
if (current == null) throw new IllegalArgumentException("Could not find version in string: " + string);
return current;
}
/**
* The default toString() method<br>
* <br>
* <b style="font-family: consolas">new Version(new Version("1.0.0"), VersionType.PRE_ALPHA, "7")</b> would return:<br>
* <b style="font-family: consolas">1.0.0/pa7</b>
*
* @return Version as a String
*/
@Override
public String toString() {
return ((parent == null)?"":parent.toString()+'/'+type.shortname) + string;
}
/**
* The full toString() method<br>
* <br>
* <b style="font-family: consolas">new Version(new Version("1.0.0"), VersionType.PRE_ALPHA, "7")</b> would return:<br>
* <b style="font-family: consolas">r1.0.0/pa7</b>
*
* @return Version as a String
*/
public String toFullString() {
return ((parent == null)?"":parent.toFullString()+'/') + type.shortname + string;
}
/**
* The extended toString() method<br>
* <br>
* <b style="font-family: consolas">new Version(new Version("1.0.0"), VersionType.PRE_ALPHA, "7")</b> would return:<br>
* <b style="font-family: consolas">1.0.0 pre-alpha 7</b>
*
* @return Version as a String
*/
public String toExtendedString() {
return ((parent == null)?"":parent.toExtendedString()+' '+type.longname+' ') + string;
}
/**
* The full extended toString() method<br>
* <br>
* <b style="font-family: consolas">new Version(new Version("1.0.0"), VersionType.PRE_ALPHA, "7")</b> would return:<br>
* <b style="font-family: consolas">release 1.0.0 pre-alpha 7</b>
*
* @return Version as a String
*/
public String toFullExtendedString() {
return ((parent == null)?"":parent.toFullExtendedString()+' ') + type.longname + ' ' + string;
}
@Override
public boolean equals(Object object) {
if (object instanceof Version) {
return equals((Version) object);
} else {
return super.equals(object);
}
}
/**
* See if Versions are Equal
*
* @param version Version to Compare to
* @return
*/
public boolean equals(Version version) {
return compareTo(version) == 0;
}
/*
* Returns 1 if Greater than
* Returns 0 if Equal
* Returns -1 if Less than
*//**
*
* Compare Versions
*
* @param version Version to Compare to
*/
public int compareTo(Version version) {
return compare(this, version);
}
/**
* See if Versions are Equal
*
* @param ver1 Version to Compare
* @param ver2 Version to Compare
* @return
*/
public static boolean equals(Version ver1, Version ver2) {
return compare(ver1, ver2) == 0;
}
/*
* Returns 1 if Greater than
* Returns 0 if Equal
* Returns -1 if Less than
*//**
* Compare Versions
*
* @param ver1 Version to Compare
* @param ver2 Version to Compare
*/
public static int compare(Version ver1, Version ver2) {
if (ver1 == null && ver2 == null) {
// Both versions are null
return 0;
}
if (ver1 == null) {
// Version one is null
return -1;
}
if (ver2 == null) {
// Version two is null
return 1;
}
LinkedList<Version> stack1 = new LinkedList<Version>();
stack1.add(ver1);
while (ver1.parent != null) {
ver1 = ver1.parent;
stack1.add(ver1);
}
Collections.reverse(stack1);
LinkedList<Version> stack2 = new LinkedList<Version>();
stack2.add(ver2);
while (ver2.parent != null) {
ver2 = ver2.parent;
stack2.add(ver2);
}
Collections.reverse(stack2);
int id;
for (id = 0; id < stack1.size(); id++) {
if (id >= stack2.size()) {
// Version one still has children when version two does not...
if (stack1.get(id).type.stageid < 0) {
// ...making version two the official version
return -1;
} else {
// ...however the direct child of version one has a stageid higher than or equal to a release
return 1;
}
}
int result = stack1.get(id).compare(stack2.get(id));
if (result != 0) {
// Versions are not the same, return the result
return result;
}
}
if (id < stack2.size()) {
// Version one does not children when version two still does...
if (stack2.get(id).type.stageid < 0) {
// ...making version one the official version
return 1;
} else {
// ...however the direct child of version two has a stageid higher than or equal to a release
return -1;
}
}
return 0;
}
/*
* Compares versions ignoring parent/child relationships
*/
private int compare(Version version) {
if (this.type.stageid > version.type.stageid) {
// Version one has a type of a later stage than version two
return 1;
}
if (this.type.stageid < version.type.stageid) {
// Version one has a type of an earlier stage than version two
return -1;
}
VersionTokenizer tokenizer1 = new VersionTokenizer(string);
VersionTokenizer tokenizer2 = new VersionTokenizer(version.string);
int number1, number2;
String suffix1, suffix2;
while (tokenizer1.MoveNext()) {
if (!tokenizer2.MoveNext()) {
do {
number1 = tokenizer1.getNumber();
suffix1 = tokenizer1.getSuffix();
if (number1 != 0 || suffix1.length() != 0) {
// Version one is longer than number two, and non-zero
return 1;
}
}
while (tokenizer1.MoveNext());
// Version one is longer than version two, but zero
return 0;
}
number1 = tokenizer1.getNumber();
suffix1 = tokenizer1.getSuffix();
number2 = tokenizer2.getNumber();
suffix2 = tokenizer2.getSuffix();
if (number1 < number2) {
// Number one is less than number two
return -1;
}
if (number1 > number2) {
// Number one is greater than number two
return 1;
}
boolean empty1 = suffix1.length() == 0;
boolean empty2 = suffix2.length() == 0;
if (empty1 && empty2) continue; // No suffixes
if (empty1) return 1; // First suffix is empty (1.2 > 1.2b)
if (empty2) return -1; // Second suffix is empty (1.2a < 1.2)
// Lexical comparison of suffixes
int result = suffix1.compareTo(suffix2);
if (result != 0) return result;
}
if (tokenizer2.MoveNext()) {
do {
number2 = tokenizer2.getNumber();
suffix2 = tokenizer2.getSuffix();
if (number2 != 0 || suffix2.length() != 0) {
// Version one is longer than version two, and non-zero
return -1;
}
}
while (tokenizer2.MoveNext());
// Version two is longer than version one, but zero
return 0;
}
return 0;
}
}

View File

@ -1,64 +0,0 @@
package net.ME1312.SubServers.Bungee.Library.Version;
final class VersionTokenizer {
private final String _versionString;
private final int _length;
private int _position;
private int _number;
private String _suffix;
private boolean _hasValue;
protected int getNumber() {
return _number;
}
protected String getSuffix() {
return _suffix;
}
protected boolean hasValue() {
return _hasValue;
}
protected VersionTokenizer(String versionString) {
if (versionString == null)
throw new IllegalArgumentException("versionString is null");
_versionString = versionString;
_length = versionString.length();
}
protected boolean MoveNext() {
_number = 0;
_suffix = "";
_hasValue = false;
// No more characters
if (_position >= _length)
return false;
_hasValue = true;
while (_position < _length) {
char c = _versionString.charAt(_position);
if (c < '0' || c > '9') break;
_number = _number * 10 + (c - '0');
_position++;
}
int suffixStart = _position;
while (_position < _length) {
char c = _versionString.charAt(_position);
if (c == '.') break;
_position++;
}
_suffix = _versionString.substring(suffixStart, _position);
if (_position < _length) _position++;
return true;
}
}

View File

@ -1,23 +0,0 @@
package net.ME1312.SubServers.Bungee.Library.Version;
public enum VersionType {
PRE_ALPHA(-6, "pa", "pre-alpha"),
ALPHA(-5, "a", "alpha"),
PREVIEW(-4, "pv", "preview"),
PRE_BETA(-4, "pb", "pre-beta"),
BETA(-3, "b", "beta"),
SNAPSHOT(-2, "s", "snapshot"),
PRE_RELEASE(-1, "pr", "pre-release"),
RELEASE(0, "r", "release"),
REVISION(0, "rv", "revision"),
VERSION(0, "v", "version"),
UPDATE(0, "u", "update"),
;
final short stageid;
final String shortname, longname;
VersionType(int stageid, String shortname, String longname) {
this.stageid = (short) stageid;
this.shortname = shortname;
this.longname = longname;
}
}

View File

@ -1,34 +0,0 @@
package net.ME1312.SubServers.Bungee.Network;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import org.msgpack.value.Value;
/**
* SubData Cipher Layout Class
*/
public interface Cipher {
/**
* Get the name of this Cipher
*
* @return Cipher Name
*/
String getName();
/**
* Encrypt JSON Data
*
* @param key Key to Encrypt Data with
* @param data Data to Encrypt
* @return Encrypted Data Array
*/
Value encrypt(String key, YAMLSection data) throws Exception;
/**
* Decrypt Encrypted JSON Data
*
* @param key Key to Decrypt Data with
* @param data Encrypted Data Array
* @return JSON Data
*/
YAMLSection decrypt(String key, Value data) throws Exception;
}

View File

@ -1,225 +0,0 @@
package net.ME1312.SubServers.Bungee.Network;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Library.Exception.IllegalPacketException;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.SubServers.Bungee.Network.Packet.PacketAuthorization;
import org.msgpack.core.MessageInsufficientBufferException;
import org.msgpack.core.MessagePack;
import org.msgpack.core.MessagePacker;
import org.msgpack.core.MessageUnpacker;
import org.msgpack.value.Value;
import org.yaml.snakeyaml.error.YAMLException;
import java.io.*;
import java.lang.reflect.InvocationTargetException;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketException;
import java.util.*;
/**
* Network Client Class
*/
public class Client {
private Socket socket;
private InetSocketAddress address;
private ClientHandler handler;
private MessagePacker out;
private Timer authorized;
private SubDataServer subdata;
boolean closed;
/**
* Network Client
*
* @param subdata SubData Direct Server
* @param client Socket to Bind
*/
public Client(SubDataServer subdata, Socket client) throws IOException {
if (Util.isNull(subdata, client)) throw new NullPointerException();
this.subdata = subdata;
closed = false;
socket = client;
out = MessagePack.newDefaultPacker(client.getOutputStream());
address = new InetSocketAddress(client.getInetAddress(), client.getPort());
authorized = new Timer("SubServers.Bungee::SubData_Authorization_Timeout(" + address.toString() + ')');
authorized.schedule(new TimerTask() {
@Override
public void run() {
if (!socket.isClosed()) try {
subdata.removeClient(Client.this);
} catch (IOException e) {
e.printStackTrace();
}
}
}, 15000);
loop();
}
/**
* Network Loop
*/
private void loop() {
new Thread(() -> {
try {
MessageUnpacker in = MessagePack.newDefaultUnpacker(socket.getInputStream());
Value input;
while ((input = in.unpackValue()) != null) {
recievePacket(input);
}
try {
subdata.removeClient(Client.this);
} catch (IOException e1) {
e1.printStackTrace();
}
} catch (Exception e) {
if (!(e instanceof SocketException || e instanceof MessageInsufficientBufferException)) e.printStackTrace();
try {
subdata.removeClient(Client.this);
} catch (IOException e1) {
e1.printStackTrace();
}
}
}, "SubServers.Bungee::SubData_Packet_Listener(" + address.toString() + ')').start();
}
private void recievePacket(Value input) {
try {
YAMLSection data = subdata.getCipher().decrypt(subdata.plugin.config.get().getSection("Settings").getSection("SubData").getRawString("Password"), input);
for (PacketIn packet : SubDataServer.decodePacket(this, data)) {
boolean auth = authorized == null;
if (auth || packet instanceof PacketAuthorization) {
try {
if (data.contains("f")) {
if (data.getString("f").length() <= 0) {
List<Client> clients = new ArrayList<Client>();
clients.addAll(subdata.getClients());
for (Client client : clients) {
client.out.packValue(input);
}
} else {
Client client = subdata.getClient(data.getString("f"));
if (client != null) {
client.out.packValue(input);
} else {
throw new IllegalPacketException(getAddress().toString() + ": Unknown Forward Address: " + data.getString("f"));
}
}
} else {
packet.execute(Client.this, (data.contains("c")) ? data.getSection("c") : null);
}
} catch (Throwable e) {
new InvocationTargetException(e, getAddress().toString() + ": Exception while executing PacketIn").printStackTrace();
}
} else {
sendPacket(new PacketAuthorization(-1, "Unauthorized"));
throw new IllegalPacketException(getAddress().toString() + ": Unauthorized call to packet type: " + data.getSection("h"));
}
}
} catch (YAMLException e) { // TODO
new IllegalPacketException(getAddress().toString() + ": Unknown Packet Format: " + input).printStackTrace();
} catch (IllegalPacketException e) {
e.printStackTrace();
} catch (Exception e) {
new InvocationTargetException(e, getAddress().toString() + ": Exception while decoding packet").printStackTrace();
}
}
/**
* Send Packet to Client
*
* @param packet Packet to send
*/
public void sendPacket(PacketOut packet) {
if (Util.isNull(packet)) throw new NullPointerException();
if (!isClosed()) try {
out.packValue(subdata.getCipher().encrypt(subdata.plugin.config.get().getSection("Settings").getSection("SubData").getRawString("Password"), SubDataServer.encodePacket(this, packet)));
out.flush();
} catch (Throwable e) {
e.printStackTrace();
}
}
/**
* Authorize Connection
*/
public void authorize() {
if (authorized != null) {
authorized.cancel();
System.out.println("SubData > " + socket.getRemoteSocketAddress().toString() + " logged in");
}
authorized = null;
}
/**
* Get Raw Connection
*
* @return Socket
*/
public Socket getConnection() {
return socket;
}
/**
* Get if the connection has been closed
*
* @return Closed Stauts
*/
public boolean isClosed() {
return closed && socket.isClosed();
}
/**
* Get Remote Address
*
* @return Address
*/
public InetSocketAddress getAddress() {
return address;
}
/**
* If the connection is authorized
*
* @return Authorization Status
*/
public boolean isAuthorized() {
return authorized == null;
}
/**
* Gets the Linked Handler
*
* @return Handler
*/
public ClientHandler getHandler() {
return handler;
}
/**
* Sets the Handler
*
* @param obj Handler
*/
public void setHandler(ClientHandler obj) {
if (handler != null && handler.getSubData() != null && equals(handler.getSubData())) handler.setSubData(null);
handler = obj;
if (handler != null && (handler.getSubData() == null || !equals(handler.getSubData()))) handler.setSubData(this);
}
/**
* Disconnects the Client
*
* @throws IOException
*/
public void disconnect() throws IOException {
if (!socket.isClosed()) getConnection().close();
if (handler != null) {
setHandler(null);
handler = null;
}
closed = true;
if (subdata.getClients().contains(this)) subdata.removeClient(this);
}
}

View File

@ -1,21 +0,0 @@
package net.ME1312.SubServers.Bungee.Network;
/**
* Client Handler Layout Class
*/
public interface ClientHandler {
/**
* Gets the SubData Client
*
* @return SubData Client (or null if not linked)
*/
Client getSubData();
/**
* Link a SubData Client to this Object
*
* @see Client#setHandler(ClientHandler)
* @param client Client to Link
*/
void setSubData(Client client);
}

View File

@ -1,333 +0,0 @@
package net.ME1312.SubServers.Bungee.Network.Encryption;
import com.google.gson.Gson;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import org.msgpack.core.MessageBufferPacker;
import org.msgpack.core.MessagePack;
import org.msgpack.core.MessagePacker;
import org.msgpack.value.Value;
import org.msgpack.value.ValueFactory;
import javax.crypto.*;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.SecretKeySpec;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.InvalidParameterSpecException;
import java.security.spec.KeySpec;
import java.util.Arrays;
import java.util.Map;
import java.util.Random;
/**
* A class to perform password-based AES encryption and decryption in CBC mode.
* 128, 192, and 256-bit encryption are supported, provided that the latter two
* are permitted by the Java runtime's jurisdiction policy files.
* <br/>
* The public interface for this class consists of the static methods
* {@link #encrypt} and {@link #decrypt}, which encrypt and decrypt arbitrary
* streams of data, respectively.
*
* @author dweymouth@gmail.com
*/
public final class AES implements net.ME1312.SubServers.Bungee.Network.Cipher {
// AES specification
private static final String CIPHER_SPEC = "AES/CBC/PKCS5Padding";
// Key derivation specification
private static final String KEYGEN_SPEC = "PBKDF2WithHmacSHA1";
private static final int SALT_LENGTH = 16; // in bytes
private static final int AUTH_KEY_LENGTH = 8; // in bytes
private static final int ITERATIONS = 32768;
// Process input/output streams in chunks
private static final int BUFFER_SIZE = 1024;
// Hold Data for use by SubData Cipher methods
private final int keyLength;
/**
* Constructor for use as a SubData Cipher
*/
public AES(int keyLength) {
this.keyLength = keyLength;
}
/**
* @return a new pseudorandom salt of the specified length
*/
private static byte[] generateSalt(int length) {
Random r = new SecureRandom();
byte[] salt = new byte[length];
r.nextBytes(salt);
return salt;
}
/**
* Derive an AES encryption key and authentication key from given password and salt,
* using PBKDF2 key stretching. The authentication key is 64 bits long.
* @param keyLength
* length of the AES key in bits (128, 192, or 256)
* @param password
* the password from which to derive the keys
* @param salt
* the salt from which to derive the keys
* @return a Keys object containing the two generated keys
*/
private static Keys keygen(int keyLength, char[] password, byte[] salt) {
SecretKeyFactory factory;
try {
factory = SecretKeyFactory.getInstance(KEYGEN_SPEC);
} catch (NoSuchAlgorithmException impossible) { return null; }
// derive a longer key, then split into AES key and authentication key
KeySpec spec = new PBEKeySpec(password, salt, ITERATIONS, keyLength + AUTH_KEY_LENGTH * 8);
SecretKey tmp = null;
try {
tmp = factory.generateSecret(spec);
} catch (InvalidKeySpecException impossible) { }
byte[] fullKey = tmp.getEncoded();
SecretKey authKey = new SecretKeySpec( // key for password authentication
Arrays.copyOfRange(fullKey, 0, AUTH_KEY_LENGTH), "AES");
SecretKey encKey = new SecretKeySpec( // key for AES encryption
Arrays.copyOfRange(fullKey, AUTH_KEY_LENGTH, fullKey.length), "AES");
return new Keys(encKey, authKey);
}
/**
* Encrypts a stream of data. The encrypted stream consists of a header
* followed by the raw AES data. The header is broken down as follows:<br/>
* <ul>
* <li><b>keyLength</b>: AES key length in bytes (valid for 16, 24, 32) (1 byte)</li>
* <li><b>salt</b>: pseudorandom salt used to derive keys from password (16 bytes)</li>
* <li><b>authentication key</b> (derived from password and salt, used to
* check validity of password upon decryption) (8 bytes)</li>
* <li><b>IV</b>: pseudorandom AES initialization vector (16 bytes)</li>
* </ul>
*
* @param keyLength
* key length to use for AES encryption (must be 128, 192, or 256)
* @param password
* password to use for encryption
* @param input
* an arbitrary byte stream to encrypt
* @param output
* stream to which encrypted data will be written
* @throws AES.InvalidKeyLengthException
* if keyLength is not 128, 192, or 256
* @throws AES.StrongEncryptionNotAvailableException
* if keyLength is 192 or 256, but the Java runtime's jurisdiction
* policy files do not allow 192- or 256-bit encryption
* @throws IOException
*/
public static void encrypt(int keyLength, String password, InputStream input, OutputStream output)
throws InvalidKeyLengthException, StrongEncryptionNotAvailableException, IOException {
// Check validity of key length
if (keyLength != 128 && keyLength != 192 && keyLength != 256) {
throw new InvalidKeyLengthException(keyLength);
}
// generate salt and derive keys for authentication and encryption
byte[] salt = generateSalt(SALT_LENGTH);
Keys keys = keygen(keyLength, password.toCharArray(), salt);
// initialize AES encryption
Cipher encrypt = null;
try {
encrypt = Cipher.getInstance(CIPHER_SPEC);
encrypt.init(Cipher.ENCRYPT_MODE, keys.encryption);
} catch (NoSuchAlgorithmException | NoSuchPaddingException impossible) { }
catch (InvalidKeyException e) { // 192 or 256-bit AES not available
throw new StrongEncryptionNotAvailableException(keyLength);
}
// get initialization vector
byte[] iv = null;
try {
iv = encrypt.getParameters().getParameterSpec(IvParameterSpec.class).getIV();
} catch (InvalidParameterSpecException impossible) { }
// write authentication and AES initialization data
output.write(keyLength / 8);
output.write(salt);
output.write(keys.authentication.getEncoded());
output.write(iv);
// read data from input into buffer, encrypt and write to output
byte[] buffer = new byte[BUFFER_SIZE];
int numRead;
byte[] encrypted = null;
while ((numRead = input.read(buffer)) > 0) {
encrypted = encrypt.update(buffer, 0, numRead);
if (encrypted != null) {
output.write(encrypted);
}
}
try { // finish encryption - do final block
encrypted = encrypt.doFinal();
} catch (IllegalBlockSizeException | BadPaddingException impossible) { }
if (encrypted != null) {
output.write(encrypted);
}
output.flush();
}
/**
* This method calls to {@link #encrypt(int, String, InputStream, OutputStream)}, simplified for the {@link net.ME1312.SubServers.Bungee.Network.Cipher} interface.
*
* @param key Key to Encrypt Data with
* @param data Data to Encrypt
* @return Encrypted Data Array
*/
public Value encrypt(String key, YAMLSection data) throws Exception {
ByteArrayOutputStream unencrypted = new ByteArrayOutputStream();
MessagePacker packer = MessagePack.newDefaultPacker(unencrypted);
packer.packValue(data.msgPack());
packer.close();
ByteArrayOutputStream encrypted = new ByteArrayOutputStream();
encrypt(keyLength, key, new ByteArrayInputStream(unencrypted.toByteArray()), encrypted);
return ValueFactory.newBinary(encrypted.toByteArray(), true);
}
public String getName() {
return "AES_" + keyLength;
}
/**
* Decrypts a stream of data that was encrypted by {@link #encrypt}.
* @param password
* the password used to encrypt/decrypt the stream
* @param input
* stream of encrypted data to be decrypted
* @param output
* stream to which decrypted data will be written
* @return the key length for the decrypted stream (128, 192, or 256)
* @throws AES.InvalidPasswordException
* if the given password was not used to encrypt the data
* @throws AES.InvalidAESStreamException
* if the given input stream is not a valid AES-encrypted stream
* @throws AES.StrongEncryptionNotAvailableException
* if the stream is 192 or 256-bit encrypted, and the Java runtime's
* jurisdiction policy files do not allow for AES-192 or 256
* @throws IOException
*/
public static int decrypt(String password, InputStream input, OutputStream output)
throws InvalidPasswordException, InvalidAESStreamException, IOException,
StrongEncryptionNotAvailableException {
int keyLength = input.read() * 8;
// Check validity of key length
if (keyLength != 128 && keyLength != 192 && keyLength != 256) {
throw new InvalidAESStreamException();
}
// read salt, generate keys, and authenticate password
byte[] salt = new byte[SALT_LENGTH];
input.read(salt);
Keys keys = keygen(keyLength, password.toCharArray(), salt);
byte[] authRead = new byte[AUTH_KEY_LENGTH];
input.read(authRead);
if (!Arrays.equals(keys.authentication.getEncoded(), authRead)) {
throw new InvalidPasswordException();
}
// initialize AES decryption
byte[] iv = new byte[16]; // 16-byte I.V. regardless of key size
input.read(iv);
Cipher decrypt = null;
try {
decrypt = Cipher.getInstance(CIPHER_SPEC);
decrypt.init(Cipher.DECRYPT_MODE, keys.encryption, new IvParameterSpec(iv));
} catch (NoSuchAlgorithmException | NoSuchPaddingException
| InvalidAlgorithmParameterException impossible) { }
catch (InvalidKeyException e) { // 192 or 256-bit AES not available
throw new StrongEncryptionNotAvailableException(keyLength);
}
// read data from input into buffer, decrypt and write to output
byte[] buffer = new byte[BUFFER_SIZE];
int numRead;
byte[] decrypted;
while ((numRead = input.read(buffer)) > 0) {
decrypted = decrypt.update(buffer, 0, numRead);
if (decrypted != null) {
output.write(decrypted);
}
}
try { // finish decryption - do final block
decrypted = decrypt.doFinal();
} catch (IllegalBlockSizeException | BadPaddingException e) {
throw new InvalidAESStreamException(e);
}
if (decrypted != null) {
output.write(decrypted);
}
output.flush();
return keyLength;
}
/**
* This method calls to {@link #decrypt(String, InputStream, OutputStream)}), simplified for the {@link net.ME1312.SubServers.Bungee.Network.Cipher} interface.
*
* @param key Key to Decrypt Data with
* @param data Encrypted Data Array
* @return JSON Data
*/
@SuppressWarnings("unchecked")
public YAMLSection decrypt(String key, Value data) throws Exception {
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
decrypt(key, new ByteArrayInputStream(data.asBinaryValue().asByteArray()), bytes);
return new YAMLSection(MessagePack.newDefaultUnpacker(bytes.toByteArray()).unpackValue().asMapValue());
}
/**
* A tuple of encryption and authentication keys returned by {@link #keygen}
*/
private static class Keys {
public final SecretKey encryption, authentication;
public Keys(SecretKey encryption, SecretKey authentication) {
this.encryption = encryption;
this.authentication = authentication;
}
}
/**
* Thrown if an attempt is made to decrypt a stream with an incorrect password.
*/
public static class InvalidPasswordException extends Exception { }
/**
* Thrown if an attempt is made to encrypt a stream with an invalid AES key length.
*/
public static class InvalidKeyLengthException extends Exception {
InvalidKeyLengthException(int length) {
super("Invalid AES key length: " + length);
}
}
/**
* Thrown if 192- or 256-bit AES encryption or decryption is attempted,
* but not available on the particular Java platform.
*/
public static class StrongEncryptionNotAvailableException extends Exception {
public StrongEncryptionNotAvailableException(int keySize) {
super(keySize + "-bit AES encryption is not available on this Java platform.");
}
}
/**
* Thrown if an attempt is made to decrypt an invalid AES stream.
*/
public static class InvalidAESStreamException extends Exception {
public InvalidAESStreamException() { super(); };
public InvalidAESStreamException(Exception e) { super(e); }
}
}

View File

@ -1,68 +0,0 @@
package net.ME1312.SubServers.Bungee.Network.Packet;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.SubServers.Bungee.Library.Version.Version;
import net.ME1312.SubServers.Bungee.Network.Client;
import net.ME1312.SubServers.Bungee.Network.PacketIn;
import net.ME1312.SubServers.Bungee.Network.PacketOut;
import net.ME1312.SubServers.Bungee.SubPlugin;
/**
* Authorization Packet
*/
public final class PacketAuthorization implements PacketIn, PacketOut {
private SubPlugin plugin;
private int response;
private String message;
/**
* New PacketAuthorization (In)
*
* @param plugin SubPlugin
*/
public PacketAuthorization(SubPlugin plugin) {
if (Util.isNull(plugin)) throw new NullPointerException();
this.plugin = plugin;
}
/**
* New PacketAuthorization (Out)
*
* @param response Response ID
* @param message Message
*/
public PacketAuthorization(int response, String message) {
if (Util.isNull(response, message)) throw new NullPointerException();
this.response = response;
this.message = message;
}
@Override
public YAMLSection generate() {
YAMLSection data = new YAMLSection();
data.set("r", response);
data.set("m", message);
return data;
}
@Override
public void execute(Client client, YAMLSection data) {
try {
if (data.getRawString("password").equals(plugin.config.get().getSection("Settings").getSection("SubData").getRawString("Password"))) {
client.authorize();
client.sendPacket(new PacketAuthorization(0, "Successfully Logged in"));
} else {
client.sendPacket(new PacketAuthorization(2, "Invalid Password"));
}
} catch (Exception e) {
client.sendPacket(new PacketAuthorization(1, e.getClass().getCanonicalName() + ": " + e.getMessage()));
e.printStackTrace();
}
}
@Override
public Version getVersion() {
return new Version("2.11.0a");
}
}

View File

@ -1,13 +1,12 @@
package net.ME1312.SubServers.Bungee.Network.Packet;
import net.ME1312.SubData.Server.SubDataClient;
import net.ME1312.SubServers.Bungee.Host.Server;
import net.ME1312.SubServers.Bungee.Host.SubServer;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.SubServers.Bungee.Library.Version.Version;
import net.ME1312.SubServers.Bungee.Network.Client;
import net.ME1312.SubServers.Bungee.Network.PacketIn;
import net.ME1312.SubServers.Bungee.Network.PacketOut;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.SubData.Server.Protocol.PacketObjectIn;
import net.ME1312.SubData.Server.Protocol.PacketObjectOut;
import net.ME1312.SubServers.Bungee.SubPlugin;
import java.util.Map;
@ -16,11 +15,10 @@ import java.util.UUID;
/**
* Server Command Packet
*/
public class PacketCommandServer implements PacketIn, PacketOut {
public class PacketCommandServer implements PacketObjectIn<Integer>, PacketObjectOut<Integer> {
private SubPlugin plugin;
private int response;
private String message;
private String id;
private UUID tracker;
/**
* New PacketCommandServer (In)
@ -36,66 +34,67 @@ public class PacketCommandServer implements PacketIn, PacketOut {
* New PacketCommandServer (Out)
*
* @param response Response ID
* @param message Message
* @param id Receiver ID
* @param tracker Tracker ID
*/
public PacketCommandServer(int response, String message, String id) {
if (Util.isNull(response, message)) throw new NullPointerException();
public PacketCommandServer(int response, UUID tracker) {
this.response = response;
this.message = message;
this.id = id;
this.tracker = tracker;
}
@Override
public YAMLSection generate() {
YAMLSection data = new YAMLSection();
if (id != null) data.set("id", id);
data.set("r", response);
data.set("m", message);
public ObjectMap<Integer> send(SubDataClient client) {
ObjectMap<Integer> data = new ObjectMap<Integer>();
if (tracker != null) data.set(0x0000, tracker);
data.set(0x0001, response);
return data;
}
@Override
public void execute(Client client, YAMLSection data) {
public void receive(SubDataClient client, ObjectMap<Integer> data) {
try {
UUID tracker = (data.contains(0x0000)?data.getUUID(0x0000):null);
String server = data.getRawString(0x0001);
String command = data.getRawString(0x0002);
UUID player = (data.contains(0x0003)?data.getUUID(0x0003):null);
Map<String, Server> servers = plugin.api.getServers();
if (!data.getRawString("server").equals("*") && !servers.keySet().contains(data.getRawString("server").toLowerCase())) {
client.sendPacket(new PacketCommandServer(3, "There is no server with that name", (data.contains("id")) ? data.getRawString("id") : null));
} else if (!data.getRawString("server").equals("*") && !(servers.get(data.getRawString("server").toLowerCase()) instanceof SubServer)) {
client.sendPacket(new PacketCommandServer(4, "That Server is not a SubServer", (data.contains("id")) ? data.getRawString("id") : null));
} else if (!data.getRawString("server").equals("*") && !((SubServer) servers.get(data.getRawString("server").toLowerCase())).isRunning()) {
client.sendPacket(new PacketCommandServer(5, "That SubServer is not running", (data.contains("id")) ? data.getRawString("id") : null));
if (!server.equals("*") && !servers.keySet().contains(server.toLowerCase())) {
client.sendPacket(new PacketCommandServer(3, tracker));
} else if (!server.equals("*") && !(servers.get(server.toLowerCase()) instanceof SubServer)) {
client.sendPacket(new PacketCommandServer(4, tracker));
} else if (!server.equals("*") && !((SubServer) servers.get(server.toLowerCase())).isRunning()) {
client.sendPacket(new PacketCommandServer(5, tracker));
} else {
if (data.getRawString("server").equals("*")) {
if (server.equals("*")) {
boolean sent = false;
for (Server server : servers.values()) {
if (server instanceof SubServer && ((SubServer) server).isRunning()) {
if (((SubServer) server).command((data.contains("player"))?data.getUUID("player"):null, data.getRawString("command"))) {
for (Server next : servers.values()) {
if (next instanceof SubServer && ((SubServer) next).isRunning()) {
if (((SubServer) next).command(player, command)) {
sent = true;
}
}
}
if (sent) {
client.sendPacket(new PacketCommandServer(0, "Sending Command", (data.contains("id")) ? data.getRawString("id") : null));
client.sendPacket(new PacketCommandServer(0, tracker));
} else {
client.sendPacket(new PacketCommandServer(1, "Couldn't send command", (data.contains("id")) ? data.getRawString("id") : null));
client.sendPacket(new PacketCommandServer(1, tracker));
}
} else {
if (((SubServer) servers.get(data.getRawString("server").toLowerCase())).command((data.contains("player"))?data.getUUID("player"):null, data.getRawString("command"))) {
client.sendPacket(new PacketCommandServer(0, "Sending Command", (data.contains("id")) ? data.getRawString("id") : null));
if (((SubServer) servers.get(server.toLowerCase())).command(player, command)) {
client.sendPacket(new PacketCommandServer(0, tracker));
} else {
client.sendPacket(new PacketCommandServer(1, "Couldn't send command", (data.contains("id")) ? data.getRawString("id") : null));
client.sendPacket(new PacketCommandServer(1, tracker));
}
}
}
} catch (Throwable e) {
client.sendPacket(new PacketCommandServer(2, e.getClass().getCanonicalName() + ": " + e.getMessage(), (data.contains("id")) ? data.getRawString("id") : null));
client.sendPacket(new PacketCommandServer(2, tracker));
e.printStackTrace();
}
}
@Override
public Version getVersion() {
return new Version("2.11.0a");
public int version() {
return 0x0001;
}
}

View File

@ -1,12 +1,11 @@
package net.ME1312.SubServers.Bungee.Network.Packet;
import net.ME1312.SubData.Server.SubDataClient;
import net.ME1312.SubServers.Bungee.Host.SubCreator;
import net.ME1312.SubServers.Bungee.Host.SubServer;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Library.Version.Version;
import net.ME1312.SubServers.Bungee.Network.Client;
import net.ME1312.SubServers.Bungee.Network.PacketIn;
import net.ME1312.SubServers.Bungee.Network.PacketOut;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.Galaxi.Library.Version.Version;
import net.ME1312.SubData.Server.Protocol.PacketObjectIn;
import net.ME1312.SubData.Server.Protocol.PacketObjectOut;
import net.ME1312.SubServers.Bungee.SubPlugin;
import java.util.UUID;
@ -14,11 +13,10 @@ import java.util.UUID;
/**
* Create Server Packet
*/
public class PacketCreateServer implements PacketIn, PacketOut {
public class PacketCreateServer implements PacketObjectIn<Integer>, PacketObjectOut<Integer> {
private SubPlugin plugin;
private int response;
private String message;
private String id;
private UUID tracker;
/**
* New PacketCreateServer (In)
@ -33,72 +31,76 @@ public class PacketCreateServer implements PacketIn, PacketOut {
* New PacketCreateServer (Out)
*
* @param response Response ID
* @param message Message
* @param id Receiver ID
*/
public PacketCreateServer(int response, String message, String id) {
public PacketCreateServer(int response, UUID id) {
this.response = response;
this.message = message;
this.id = id;
this.tracker = id;
}
@Override
public YAMLSection generate() {
YAMLSection data = new YAMLSection();
if (id != null) data.set("id", id);
data.set("r", response);
data.set("m", message);
public ObjectMap<Integer> send(SubDataClient client) {
ObjectMap<Integer> data = new ObjectMap<Integer>();
if (tracker != null) data.set(0x0000, tracker);
data.set(0x0001, response);
return data;
}
@Override
public void execute(Client client, YAMLSection data) {
public void receive(SubDataClient client, ObjectMap<Integer> data) {
try {
if (data.getSection("creator").getString("name").contains(" ")) {
client.sendPacket(new PacketCreateServer(3, "Server names cannot have spaces", (data.contains("id")) ? data.getRawString("id") : null));
} else if (plugin.api.getSubServers().keySet().contains(data.getSection("creator").getString("name").toLowerCase()) || SubCreator.isReserved(data.getSection("creator").getString("name"))) {
client.sendPacket(new PacketCreateServer(4, "There is already a subserver with that name", (data.contains("id")) ? data.getRawString("id") : null));
} else if (!plugin.hosts.keySet().contains(data.getSection("creator").getString("host").toLowerCase())) {
client.sendPacket(new PacketCreateServer(5, "There is no Host with that name", (data.contains("id")) ? data.getRawString("id") : null));
} else if (!plugin.hosts.get(data.getSection("creator").getString("host").toLowerCase()).isAvailable()) {
client.sendPacket(new PacketStartServer(6, "That SubServer's Host is not available", (data.contains("id"))?data.getRawString("id"):null));
} else if (!plugin.hosts.get(data.getSection("creator").getString("host").toLowerCase()).isEnabled()) {
client.sendPacket(new PacketStartServer(7, "That SubServer's Host is not enabled", (data.contains("id"))?data.getRawString("id"):null));
} else if (!plugin.hosts.get(data.getSection("creator").getString("host").toLowerCase()).getCreator().getTemplates().keySet().contains(data.getSection("creator").getString("template").toLowerCase())) {
client.sendPacket(new PacketCreateServer(8, "There is no template with that name", (data.contains("id")) ? data.getRawString("id") : null));
} else if (!plugin.hosts.get(data.getSection("creator").getString("host").toLowerCase()).getCreator().getTemplate(data.getSection("creator").getString("template")).isEnabled()) {
client.sendPacket(new PacketCreateServer(8, "That Template is not enabled", (data.contains("id")) ? data.getRawString("id") : null));
} else if (new Version("1.8").compareTo(data.getSection("creator").getVersion("version")) > 0) {
client.sendPacket(new PacketCreateServer(10, "SubCreator cannot create servers before Minecraft 1.8", (data.contains("id")) ? data.getRawString("id") : null));
} else if (data.getSection("creator").contains("port") && (data.getSection("creator").getInt("port") <= 0 || data.getSection("creator").getInt("port") > 65535)) {
client.sendPacket(new PacketCreateServer(11, "Invalid Port Number", (data.contains("id")) ? data.getRawString("id") : null));
UUID tracker = (data.contains(0x0000)?data.getUUID(0x0000):null);
String name = data.getRawString(0x0001);
String host = data.getRawString(0x0002);
String template = data.getRawString(0x0003);
Version version = (data.contains(0x0004)?data.getVersion(0x0004):null);
Integer port = (data.contains(0x0005)?data.getInt(0x0005):null);
UUID player = (data.contains(0x0006)?data.getUUID(0x0006):null);
boolean waitfor = (data.contains(0x0007)?data.getBoolean(0x0007):false);
if (name.contains(" ")) {
client.sendPacket(new PacketCreateServer(3, tracker));
} else if (plugin.api.getSubServers().keySet().contains(name.toLowerCase()) || SubCreator.isReserved(name)) {
client.sendPacket(new PacketCreateServer(4, tracker));
} else if (!plugin.hosts.keySet().contains(host.toLowerCase())) {
client.sendPacket(new PacketCreateServer(5, tracker));
} else if (!plugin.hosts.get(host.toLowerCase()).isAvailable()) {
client.sendPacket(new PacketCreateServer(6, tracker));
} else if (!plugin.hosts.get(host.toLowerCase()).isEnabled()) {
client.sendPacket(new PacketCreateServer(7, tracker));
} else if (!plugin.hosts.get(host.toLowerCase()).getCreator().getTemplates().keySet().contains(template.toLowerCase())) {
client.sendPacket(new PacketCreateServer(8, tracker));
} else if (!plugin.hosts.get(host.toLowerCase()).getCreator().getTemplate(template).isEnabled()) {
client.sendPacket(new PacketCreateServer(9, tracker));
} else if (port != null && (port <= 0 || port > 65535)) {
client.sendPacket(new PacketCreateServer(10, tracker));
} else {
if (plugin.hosts.get(data.getSection("creator").getString("host").toLowerCase()).getCreator().create((data.contains("player"))?data.getUUID("player"):null, data.getSection("creator").getString("name"), plugin.hosts.get(data.getSection("creator").getString("host").toLowerCase()).getCreator().getTemplate(data.getSection("creator").getString("template")), data.getSection("creator").getVersion("version"), (data.getSection("creator").contains("port"))?data.getSection("creator").getInt("port"):null)) {
if (data.contains("wait") && data.getBoolean("wait")) {
if (plugin.hosts.get(host.toLowerCase()).getCreator().create(player, name, plugin.hosts.get(host.toLowerCase()).getCreator().getTemplate(template), version, port)) {
if (waitfor) {
new Thread(() -> {
try {
plugin.hosts.get(data.getSection("creator").getString("host").toLowerCase()).getCreator().waitFor();
client.sendPacket(new PacketCreateServer(0, "Created SubServer", (data.contains("id")) ? data.getRawString("id") : null));
plugin.hosts.get(host.toLowerCase()).getCreator().waitFor();
client.sendPacket(new PacketCreateServer(0, tracker));
} catch (InterruptedException e) {
e.printStackTrace();
}
}, "SubServers.Bungee::SubData_SubCreator_Handler(" + client.getAddress().toString() + ')').start();
} else {
client.sendPacket(new PacketCreateServer(0, "Creating SubServer", (data.contains("id")) ? data.getRawString("id") : null));
client.sendPacket(new PacketCreateServer(0, tracker));
}
} else {
client.sendPacket(new PacketCreateServer(1, "Couldn't create SubServer", (data.contains("id")) ? data.getRawString("id") : null));
client.sendPacket(new PacketCreateServer(1, tracker));
}
}
} catch (Throwable e) {
client.sendPacket(new PacketCreateServer(2, e.getClass().getCanonicalName() + ": " + e.getMessage(), (data.contains("id")) ? data.getRawString("id") : null));
client.sendPacket(new PacketCreateServer(2, tracker));
e.printStackTrace();
}
}
@Override
public Version getVersion() {
return new Version("2.13b");
public int version() {
return 0x0001;
}
}

View File

@ -1,27 +1,22 @@
package net.ME1312.SubServers.Bungee.Network.Packet;
import com.google.gson.Gson;
import net.ME1312.SubServers.Bungee.Host.Host;
import net.ME1312.SubServers.Bungee.Host.Proxy;
import net.ME1312.SubServers.Bungee.Host.Server;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.SubServers.Bungee.Library.Version.Version;
import net.ME1312.SubServers.Bungee.Network.Client;
import net.ME1312.SubServers.Bungee.Network.PacketIn;
import net.ME1312.SubServers.Bungee.Network.PacketOut;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.SubData.Server.SubDataClient;
import net.ME1312.SubData.Server.Protocol.PacketObjectIn;
import net.ME1312.SubData.Server.Protocol.PacketObjectOut;
import net.ME1312.SubServers.Bungee.SubPlugin;
import java.util.Map;
import java.util.UUID;
/**
* Download Group Info Packet
*/
public class PacketDownloadGroupInfo implements PacketIn, PacketOut {
public class PacketDownloadGroupInfo implements PacketObjectIn<Integer>, PacketObjectOut<Integer> {
private SubPlugin plugin;
private String host;
private String group;
private String id;
private UUID tracker;
/**
* New PacketDownloadGroupInfo (In)
@ -38,43 +33,42 @@ public class PacketDownloadGroupInfo implements PacketIn, PacketOut {
*
* @param plugin SubPlugin
* @param group Group (or null for all)
* @param id Receiver ID
* @param tracker Receiver ID
*/
public PacketDownloadGroupInfo(SubPlugin plugin, String group, String id) {
public PacketDownloadGroupInfo(SubPlugin plugin, String group, UUID tracker) {
if (Util.isNull(plugin)) throw new NullPointerException();
this.plugin = plugin;
this.host = host;
this.group = group;
this.id = id;
this.tracker = tracker;
}
@SuppressWarnings("unchecked")
@Override
public YAMLSection generate() {
YAMLSection data = new YAMLSection();
if (id != null) data.set("id", id);
public ObjectMap<Integer> send(SubDataClient client) {
ObjectMap<Integer> data = new ObjectMap<Integer>();
if (tracker != null) data.set(0x0000, tracker);
YAMLSection groups = new YAMLSection();
ObjectMap<String> groups = new ObjectMap<String>();
for (String group : plugin.api.getGroups().keySet()) {
if (this.group == null || this.group.length() <= 0 || this.group.equalsIgnoreCase(group)) {
YAMLSection servers = new YAMLSection();
ObjectMap<String> servers = new ObjectMap<String>();
for (Server server : plugin.api.getGroup(group)) {
servers.set(server.getName(), new YAMLSection(new Gson().fromJson(server.toString(), Map.class)));
servers.set(server.getName(), server.forSubData());
}
groups.set(group, servers);
}
}
data.set("groups", groups);
data.set(0x0001, groups);
return data;
}
@Override
public void execute(Client client, YAMLSection data) {
client.sendPacket(new PacketDownloadGroupInfo(plugin, (data.contains("group"))?data.getRawString("group"):null, (data.contains("id"))?data.getRawString("id"):null));
public void receive(SubDataClient client, ObjectMap<Integer> data) {
client.sendPacket(new PacketDownloadGroupInfo(plugin, (data.contains(0x0001))?data.getRawString(0x0001):null, (data.contains(0x0000))?data.getUUID(0x0000):null));
}
@Override
public Version getVersion() {
return new Version("2.13b");
public int version() {
return 0x0001;
}
}

View File

@ -1,24 +1,22 @@
package net.ME1312.SubServers.Bungee.Network.Packet;
import com.google.gson.Gson;
import net.ME1312.SubData.Server.SubDataClient;
import net.ME1312.SubServers.Bungee.Host.Host;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.SubServers.Bungee.Library.Version.Version;
import net.ME1312.SubServers.Bungee.Network.Client;
import net.ME1312.SubServers.Bungee.Network.PacketIn;
import net.ME1312.SubServers.Bungee.Network.PacketOut;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.SubData.Server.Protocol.PacketObjectIn;
import net.ME1312.SubData.Server.Protocol.PacketObjectOut;
import net.ME1312.SubServers.Bungee.SubPlugin;
import java.util.Map;
import java.util.UUID;
/**
* Download Host Info Packet
*/
public class PacketDownloadHostInfo implements PacketIn, PacketOut {
public class PacketDownloadHostInfo implements PacketObjectIn<Integer>, PacketObjectOut<Integer> {
private SubPlugin plugin;
private String host;
private String id;
private UUID tracker;
/**
* New PacketDownloadHostInfo (In)
@ -35,38 +33,38 @@ public class PacketDownloadHostInfo implements PacketIn, PacketOut {
*
* @param plugin SubPlugin
* @param host Host (or null for all)
* @param id Receiver ID
* @param tracker Receiver ID
*/
public PacketDownloadHostInfo(SubPlugin plugin, String host, String id) {
public PacketDownloadHostInfo(SubPlugin plugin, String host, UUID tracker) {
if (Util.isNull(plugin)) throw new NullPointerException();
this.plugin = plugin;
this.host = host;
this.id = id;
this.tracker = tracker;
}
@SuppressWarnings("unchecked")
@Override
public YAMLSection generate() {
YAMLSection data = new YAMLSection();
if (id != null) data.set("id", id);
public ObjectMap<Integer> send(SubDataClient client) {
ObjectMap<Integer> data = new ObjectMap<Integer>();
if (tracker != null) data.set(0x0000, tracker);
YAMLSection hosts = new YAMLSection();
ObjectMap<String> hosts = new ObjectMap<String>();
for (Host host : plugin.api.getHosts().values()) {
if (this.host == null || this.host.length() <= 0 || this.host.equalsIgnoreCase(host.getName())) {
hosts.set(host.getName(), new YAMLSection(new Gson().fromJson(host.toString(), Map.class)));
hosts.set(host.getName(), host.forSubData());
}
}
data.set("hosts", hosts);
data.set(0x0001, hosts);
return data;
}
@Override
public void execute(Client client, YAMLSection data) {
client.sendPacket(new PacketDownloadHostInfo(plugin, (data.contains("host"))?data.getRawString("host"):null, (data.contains("id"))?data.getRawString("id"):null));
public void receive(SubDataClient client, ObjectMap<Integer> data) {
client.sendPacket(new PacketDownloadHostInfo(plugin, (data.contains(0x0001))?data.getRawString(0x0001):null, (data.contains(0x0000))?data.getUUID(0x0000):null));
}
@Override
public Version getVersion() {
return new Version("2.13b");
public int version() {
return 0x0001;
}
}

View File

@ -1,21 +1,21 @@
package net.ME1312.SubServers.Bungee.Network.Packet;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Library.Version.Version;
import net.ME1312.SubServers.Bungee.Network.Client;
import net.ME1312.SubServers.Bungee.Network.PacketIn;
import net.ME1312.SubServers.Bungee.Network.PacketOut;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.SubData.Server.SubDataClient;
import net.ME1312.SubData.Server.Protocol.PacketObjectOut;
import net.ME1312.SubData.Server.Protocol.PacketObjectIn;
import net.ME1312.SubServers.Bungee.SubPlugin;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.UUID;
/**
* Download Lang Packet
*/
public class PacketDownloadLang implements PacketIn, PacketOut {
public class PacketDownloadLang implements PacketObjectIn<Integer>, PacketObjectOut<Integer> {
private SubPlugin plugin;
private String id;
private UUID tracker;
/**
* New PacketDownloadLang (In)
@ -30,31 +30,31 @@ public class PacketDownloadLang implements PacketIn, PacketOut {
* New PacketDownloadLang (Out)
*
* @param plugin SubPlugin
* @param id Receiver ID
* @param tracker Receiver ID
*/
public PacketDownloadLang(SubPlugin plugin, String id) {
public PacketDownloadLang(SubPlugin plugin, UUID tracker) {
this.plugin = plugin;
this.id = id;
this.tracker = tracker;
}
@Override
public YAMLSection generate() {
YAMLSection data = new YAMLSection();
if (id != null) data.set("id", id);
public ObjectMap<Integer> send(SubDataClient client) {
ObjectMap<Integer> data = new ObjectMap<Integer>();
if (tracker != null) data.set(0x0000, tracker);
LinkedHashMap<String, Map<String, String>> full = new LinkedHashMap<>();
for (String channel : plugin.api.getLangChannels())
full.put(channel, plugin.api.getLang(channel));
data.set("Lang", full);
data.set(0x0001, full);
return data;
}
@Override
public void execute(Client client, YAMLSection data) {
client.sendPacket(new PacketDownloadLang(plugin, (data != null && data.contains("id"))?data.getRawString("id"):null));
public void receive(SubDataClient client, ObjectMap<Integer> data) {
client.sendPacket(new PacketDownloadLang(plugin, (data != null && data.contains(0x0000))?data.getUUID(0x0000):null));
}
@Override
public Version getVersion() {
return new Version("2.11.0a");
public int version() {
return 0x0001;
}
}

View File

@ -1,70 +0,0 @@
package net.ME1312.SubServers.Bungee.Network.Packet;
import com.google.gson.Gson;
import com.google.gson.JsonParseException;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.SubServers.Bungee.Library.Version.Version;
import net.ME1312.SubServers.Bungee.Network.Client;
import net.ME1312.SubServers.Bungee.Network.PacketIn;
import net.ME1312.SubServers.Bungee.Network.PacketOut;
import net.ME1312.SubServers.Bungee.SubPlugin;
import java.util.Map;
/**
* Download Network List Packet
*/
public class PacketDownloadNetworkList implements PacketIn, PacketOut {
private SubPlugin plugin;
private String id;
/**
* New PacketDownloadNetworkList (In)
*
* @param plugin SubPlugin
*/
public PacketDownloadNetworkList(SubPlugin plugin) {
if (Util.isNull(plugin)) throw new NullPointerException();
this.plugin = plugin;
}
/**
* New PacketDownloadNetworkList (Out)
*
* @param plugin SubPlugin
* @param id Receiver ID
*/
public PacketDownloadNetworkList(SubPlugin plugin, String id) {
if (Util.isNull(plugin)) throw new NullPointerException();
this.plugin = plugin;
this.id = id;
}
@SuppressWarnings("unchecked")
@Override
public YAMLSection generate() {
YAMLSection json = new YAMLSection();
if (id != null) json.set("id", id);
YAMLSection clients = new YAMLSection();
for (Client client : plugin.subdata.getClients()) {
try {
clients.set(client.getAddress().toString(), new YAMLSection(new Gson().fromJson(client.getHandler().toString(), Map.class)));
} catch (JsonParseException | NullPointerException e) {
clients.set(client.getAddress().toString(), new YAMLSection());
}
}
json.set("clients", clients);
return json;
}
@Override
public void execute(Client client, YAMLSection data) {
client.sendPacket(new PacketDownloadNetworkList(plugin, (data.contains("id"))?data.getRawString("id"):null));
}
@Override
public Version getVersion() {
return new Version("2.11.0a");
}
}

View File

@ -1,21 +1,22 @@
package net.ME1312.SubServers.Bungee.Network.Packet;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Library.Version.Version;
import net.ME1312.SubServers.Bungee.Network.Client;
import net.ME1312.SubServers.Bungee.Network.PacketIn;
import net.ME1312.SubServers.Bungee.Network.PacketOut;
import net.ME1312.SubData.Server.SubDataClient;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.Galaxi.Library.Version.Version;
import net.ME1312.SubData.Server.Protocol.PacketObjectOut;
import net.ME1312.SubData.Server.Protocol.PacketObjectIn;
import net.ME1312.SubServers.Bungee.SubPlugin;
import net.md_5.bungee.api.config.ListenerInfo;
import java.util.LinkedList;
import java.util.UUID;
/**
* Download Proxy Info Packet
*/
public class PacketDownloadPlatformInfo implements PacketIn, PacketOut {
public class PacketDownloadPlatformInfo implements PacketObjectIn<Integer>, PacketObjectOut<Integer> {
private SubPlugin plugin;
private String id;
private UUID tracker;
/**
* New PacketDownloadPlatformInfo (In)
@ -30,65 +31,67 @@ public class PacketDownloadPlatformInfo implements PacketIn, PacketOut {
* New PacketDownloadPlatformInfo (Out)
*
* @param plugin SubPlugin
* @param id Receiver ID
* @param tracker Receiver ID
*/
public PacketDownloadPlatformInfo(SubPlugin plugin, String id) {
public PacketDownloadPlatformInfo(SubPlugin plugin, UUID tracker) {
this.plugin = plugin;
this.id = id;
this.tracker = tracker;
}
@Override
public YAMLSection generate() {
YAMLSection data = new YAMLSection();
if (id != null) data.set("id", id);
YAMLSection subservers = new YAMLSection();
public ObjectMap<Integer> send(SubDataClient client) {
ObjectMap<Integer> data = new ObjectMap<Integer>();
if (tracker != null) data.set(0x0000, tracker);
ObjectMap<String> info = new ObjectMap<String>();
ObjectMap<String> subservers = new ObjectMap<String>();
subservers.set("version", plugin.api.getWrapperVersion().toString());
if (plugin.api.getWrapperBuild() != null) subservers.set("build", plugin.api.getWrapperBuild().toString());
subservers.set("last-reload", plugin.resetDate);
subservers.set("hosts", plugin.api.getHosts().size());
subservers.set("subservers", plugin.api.getSubServers().size());
data.set("subservers", subservers);
YAMLSection bungee = new YAMLSection();
info.set("subservers", subservers);
ObjectMap<String> bungee = new ObjectMap<String>();
bungee.set("version", plugin.api.getProxyVersion().toString());
bungee.set("disabled-cmds", plugin.getConfig().getDisabledCommands());
bungee.set("player-limit", plugin.getConfig().getPlayerLimit());
bungee.set("servers", plugin.api.getServers().size());
LinkedList<YAMLSection> listeners = new LinkedList<YAMLSection>();
for (ListenerInfo info : plugin.getConfig().getListeners()) {
YAMLSection listener = new YAMLSection();
listener.set("forced-hosts", info.getForcedHosts());
listener.set("motd", info.getMotd());
listener.set("priorities", info.getServerPriority());
listener.set("player-limit", info.getMaxPlayers());
LinkedList<ObjectMap<String>> listeners = new LinkedList<ObjectMap<String>>();
for (ListenerInfo next : plugin.getConfig().getListeners()) {
ObjectMap<String> listener = new ObjectMap<String>();
listener.set("forced-hosts", next.getForcedHosts());
listener.set("motd", next.getMotd());
listener.set("priorities", next.getServerPriority());
listener.set("player-limit", next.getMaxPlayers());
listeners.add(listener);
}
bungee.set("listeners", listeners);
data.set("bungee", bungee);
YAMLSection minecraft = new YAMLSection();
info.set("bungee", bungee);
ObjectMap<String> minecraft = new ObjectMap<String>();
LinkedList<String> mcversions = new LinkedList<String>();
for (Version version : plugin.api.getGameVersion()) mcversions.add(version.toString());
minecraft.set("version", mcversions);
minecraft.set("players", plugin.api.getGlobalPlayers().size());
data.set("minecraft", minecraft);
YAMLSection system = new YAMLSection();
YAMLSection os = new YAMLSection();
info.set("minecraft", minecraft);
ObjectMap<String> system = new ObjectMap<String>();
ObjectMap<String> os = new ObjectMap<String>();
os.set("name", System.getProperty("os.name"));
os.set("version", System.getProperty("os.version"));
system.set("os", os);
YAMLSection java = new YAMLSection();
ObjectMap<String> java = new ObjectMap<String>();
java.set("version", System.getProperty("java.version"));
system.set("java", java);
data.set("system", system);
info.set("system", system);
data.set(0x0001, info);
return data;
}
@Override
public void execute(Client client, YAMLSection data) {
client.sendPacket(new PacketDownloadPlatformInfo(plugin, (data != null && data.contains("id"))?data.getRawString("id"):null));
public void receive(SubDataClient client, ObjectMap<Integer> data) {
client.sendPacket(new PacketDownloadPlatformInfo(plugin, (data != null && data.contains(0x0000))?data.getUUID(0x0000):null));
}
@Override
public Version getVersion() {
return new Version("2.11.0a");
public int version() {
return 0x0001;
}
}

View File

@ -1,12 +1,11 @@
package net.ME1312.SubServers.Bungee.Network.Packet;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Library.NamedContainer;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.SubServers.Bungee.Library.Version.Version;
import net.ME1312.SubServers.Bungee.Network.Client;
import net.ME1312.SubServers.Bungee.Network.PacketIn;
import net.ME1312.SubServers.Bungee.Network.PacketOut;
import net.ME1312.SubData.Server.SubDataClient;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.Galaxi.Library.NamedContainer;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.SubData.Server.Protocol.PacketObjectIn;
import net.ME1312.SubData.Server.Protocol.PacketObjectOut;
import net.ME1312.SubServers.Bungee.SubPlugin;
import net.md_5.bungee.api.config.ServerInfo;
@ -15,9 +14,9 @@ import java.util.UUID;
/**
* Download Player List Packet
*/
public class PacketDownloadPlayerList implements PacketIn, PacketOut {
public class PacketDownloadPlayerList implements PacketObjectIn<Integer>, PacketObjectOut<Integer> {
private SubPlugin plugin;
private String id;
private UUID tracker;
/**
* New PacketDownloadPlayerList (In)
@ -33,22 +32,22 @@ public class PacketDownloadPlayerList implements PacketIn, PacketOut {
* New PacketDownloadPlayerList (Out)
*
* @param plugin SubPlugin
* @param id Receiver ID
* @param tracker Receiver ID
*/
public PacketDownloadPlayerList(SubPlugin plugin, String id) {
public PacketDownloadPlayerList(SubPlugin plugin, UUID tracker) {
if (Util.isNull(plugin)) throw new NullPointerException();
this.plugin = plugin;
this.id = id;
this.tracker = tracker;
}
@Override
@SuppressWarnings("unchecked")
public YAMLSection generate() {
YAMLSection data = new YAMLSection();
if (id != null) data.set("id", id);
YAMLSection players = new YAMLSection();
@Override
public ObjectMap<Integer> send(SubDataClient client) {
ObjectMap<Integer> data = new ObjectMap<Integer>();
if (tracker != null) data.set(0x0000, tracker);
ObjectMap<String> players = new ObjectMap<String>();
for (NamedContainer<String, UUID> player : plugin.api.getGlobalPlayers()) {
YAMLSection pinfo = new YAMLSection();
ObjectMap<String> pinfo = new ObjectMap<String>();
pinfo.set("name", player.get());
if (plugin.redis != null) {
try {
@ -61,17 +60,17 @@ public class PacketDownloadPlayerList implements PacketIn, PacketOut {
}
players.set(player.get().toString(), pinfo);
}
data.set("players", players);
data.set(0x0001, players);
return data;
}
@Override
public void execute(Client client, YAMLSection data) {
client.sendPacket(new PacketDownloadPlayerList(plugin, (data != null && data.contains("id"))?data.getRawString("id"):null));
public void receive(SubDataClient client, ObjectMap<Integer> data) {
client.sendPacket(new PacketDownloadPlayerList(plugin, (data.contains(0x0000))?data.getUUID(0x0000):null));
}
@Override
public Version getVersion() {
return new Version("2.11.0a");
public int version() {
return 0x0001;
}
}

View File

@ -1,26 +1,22 @@
package net.ME1312.SubServers.Bungee.Network.Packet;
import com.google.gson.Gson;
import net.ME1312.SubServers.Bungee.Host.Host;
import net.ME1312.SubData.Server.SubDataClient;
import net.ME1312.SubServers.Bungee.Host.Proxy;
import net.ME1312.SubServers.Bungee.Host.Server;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.SubServers.Bungee.Library.Version.Version;
import net.ME1312.SubServers.Bungee.Network.Client;
import net.ME1312.SubServers.Bungee.Network.PacketIn;
import net.ME1312.SubServers.Bungee.Network.PacketOut;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.SubData.Server.Protocol.PacketObjectOut;
import net.ME1312.SubData.Server.Protocol.PacketObjectIn;
import net.ME1312.SubServers.Bungee.SubPlugin;
import java.util.Map;
import java.util.UUID;
/**
* Download Proxy Info Packet
*/
public class PacketDownloadProxyInfo implements PacketIn, PacketOut {
public class PacketDownloadProxyInfo implements PacketObjectIn<Integer>, PacketObjectOut<Integer> {
private SubPlugin plugin;
private String proxy;
private String id;
private UUID tracker;
/**
* New PacketDownloadProxyInfo (In)
@ -37,39 +33,39 @@ public class PacketDownloadProxyInfo implements PacketIn, PacketOut {
*
* @param plugin SubPlugin
* @param proxy Proxy (or null for all)
* @param id Receiver ID
* @param tracker Receiver ID
*/
public PacketDownloadProxyInfo(SubPlugin plugin, String proxy, String id) {
public PacketDownloadProxyInfo(SubPlugin plugin, String proxy, UUID tracker) {
if (Util.isNull(plugin)) throw new NullPointerException();
this.plugin = plugin;
this.proxy = proxy;
this.id = id;
this.tracker = tracker;
}
@SuppressWarnings("unchecked")
@Override
public YAMLSection generate() {
YAMLSection data = new YAMLSection();
if (id != null) data.set("id", id);
public ObjectMap<Integer> send(SubDataClient client) {
ObjectMap<Integer> data = new ObjectMap<Integer>();
if (tracker != null) data.set(0x0000, tracker);
YAMLSection proxies = new YAMLSection();
ObjectMap<String> proxies = new ObjectMap<String>();
for (Proxy proxy : plugin.api.getProxies().values()) {
if (this.proxy == null || this.proxy.equalsIgnoreCase(proxy.getName())) {
proxies.set(proxy.getName(), new YAMLSection(new Gson().fromJson(proxy.toString(), Map.class)));
proxies.set(proxy.getName(), proxy.forSubData());
}
}
data.set("proxies", proxies);
if ((this.proxy == null || this.proxy.length() <= 0) && plugin.api.getMasterProxy() != null) data.set("master", new YAMLSection(new Gson().fromJson(plugin.api.getMasterProxy().toString(), Map.class)));
data.set(0x0001, proxies);
if ((this.proxy == null || this.proxy.length() <= 0) && plugin.api.getMasterProxy() != null) data.set(0x0002, plugin.api.getMasterProxy().forSubData());
return data;
}
@Override
public void execute(Client client, YAMLSection data) {
client.sendPacket(new PacketDownloadProxyInfo(plugin, (data.contains("proxy"))?data.getRawString("proxy"):null, (data.contains("id"))?data.getRawString("id"):null));
public void receive(SubDataClient client, ObjectMap<Integer> data) {
client.sendPacket(new PacketDownloadProxyInfo(plugin, (data.contains(0x0001))?data.getRawString(0x0001):null, (data.contains(0x0000))?data.getUUID(0x0000):null));
}
@Override
public Version getVersion() {
return new Version("2.13b");
public int version() {
return 0x0001;
}
}

View File

@ -1,26 +1,22 @@
package net.ME1312.SubServers.Bungee.Network.Packet;
import com.google.gson.Gson;
import net.ME1312.SubServers.Bungee.Host.Host;
import net.ME1312.SubServers.Bungee.Host.Proxy;
import net.ME1312.SubData.Server.SubDataClient;
import net.ME1312.SubServers.Bungee.Host.Server;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.SubServers.Bungee.Library.Version.Version;
import net.ME1312.SubServers.Bungee.Network.Client;
import net.ME1312.SubServers.Bungee.Network.PacketIn;
import net.ME1312.SubServers.Bungee.Network.PacketOut;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.SubData.Server.Protocol.PacketObjectIn;
import net.ME1312.SubData.Server.Protocol.PacketObjectOut;
import net.ME1312.SubServers.Bungee.SubPlugin;
import java.util.Map;
import java.util.UUID;
/**
* Download Server Info Packet
*/
public class PacketDownloadServerInfo implements PacketIn, PacketOut {
public class PacketDownloadServerInfo implements PacketObjectIn<Integer>, PacketObjectOut<Integer> {
private SubPlugin plugin;
private String server;
private String id;
private UUID tracker;
/**
* New PacketDownloadServerInfo (In)
@ -37,38 +33,38 @@ public class PacketDownloadServerInfo implements PacketIn, PacketOut {
*
* @param plugin SubPlugin
* @param server Server (or null for all)
* @param id Receiver ID
* @param tracker Receiver ID
*/
public PacketDownloadServerInfo(SubPlugin plugin, String server, String id) {
public PacketDownloadServerInfo(SubPlugin plugin, String server, UUID tracker) {
if (Util.isNull(plugin)) throw new NullPointerException();
this.plugin = plugin;
this.server = server;
this.id = id;
this.tracker = tracker;
}
@SuppressWarnings("unchecked")
@Override
public YAMLSection generate() {
YAMLSection data = new YAMLSection();
if (id != null) data.set("id", id);
public ObjectMap<Integer> send(SubDataClient client) {
ObjectMap<Integer> data = new ObjectMap<Integer>();
if (tracker != null) data.set(0x0000, tracker);
YAMLSection servers = new YAMLSection();
ObjectMap<String> servers = new ObjectMap<String>();
for (Server server : plugin.api.getServers().values()) {
if (this.server == null || this.server.length() <= 0 || this.server.equalsIgnoreCase(server.getName())) {
servers.set(server.getName(), new YAMLSection(new Gson().fromJson(server.toString(), Map.class)));
servers.set(server.getName(), server.forSubData());
}
}
data.set("servers", servers);
data.set(0x0001, servers);
return data;
}
@Override
public void execute(Client client, YAMLSection data) {
client.sendPacket(new PacketDownloadServerInfo(plugin, (data.contains("server"))?data.getRawString("server"):null, (data.contains("id"))?data.getRawString("id"):null));
public void receive(SubDataClient client, ObjectMap<Integer> data) {
client.sendPacket(new PacketDownloadServerInfo(plugin, (data.contains(0x0001))?data.getRawString(0x0001):null, (data.contains(0x0000))?data.getUUID(0x0000):null));
}
@Override
public Version getVersion() {
return new Version("2.13b");
public int version() {
return 0x0001;
}
}

View File

@ -1,12 +1,11 @@
package net.ME1312.SubServers.Bungee.Network.Packet;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Library.Callback;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.SubServers.Bungee.Library.Version.Version;
import net.ME1312.SubServers.Bungee.Network.Client;
import net.ME1312.SubServers.Bungee.Network.PacketIn;
import net.ME1312.SubServers.Bungee.Network.PacketOut;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.Galaxi.Library.Callback.Callback;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.SubData.Server.SubDataClient;
import net.ME1312.SubData.Server.Protocol.PacketObjectIn;
import net.ME1312.SubData.Server.Protocol.PacketObjectOut;
import java.util.HashMap;
import java.util.UUID;
@ -14,8 +13,8 @@ import java.util.UUID;
/**
* Add Server External Host Packet
*/
public class PacketExAddServer implements PacketIn, PacketOut {
private static HashMap<String, Callback<YAMLSection>[]> callbacks = new HashMap<String, Callback<YAMLSection>[]>();
public class PacketExAddServer implements PacketObjectIn<Integer>, PacketObjectOut<Integer> {
private static HashMap<UUID, Callback<ObjectMap<Integer>>[]> callbacks = new HashMap<UUID, Callback<ObjectMap<Integer>>[]>();
private String name;
private boolean enabled;
private int port;
@ -24,7 +23,7 @@ public class PacketExAddServer implements PacketIn, PacketOut {
private String executable;
private String stopcmd;
private UUID running;
private String id;
private UUID tracker;
/**
* New PacketExAddServer (In)
@ -41,7 +40,7 @@ public class PacketExAddServer implements PacketIn, PacketOut {
* @param executable Executable
*/
@SafeVarargs
public PacketExAddServer(String name, boolean enabled, int port, boolean log, String directory, String executable, String stopcmd, UUID running, Callback<YAMLSection>... callback) {
public PacketExAddServer(String name, boolean enabled, int port, boolean log, String directory, String executable, String stopcmd, UUID running, Callback<ObjectMap<Integer>>... callback) {
if (Util.isNull(name, enabled, log, directory, executable, callback)) throw new NullPointerException();
this.name = name;
this.enabled = enabled;
@ -51,35 +50,33 @@ public class PacketExAddServer implements PacketIn, PacketOut {
this.executable = executable;
this.stopcmd = stopcmd;
this.running = running;
this.id = Util.getNew(callbacks.keySet(), UUID::randomUUID).toString();
callbacks.put(id, callback);
this.tracker = Util.getNew(callbacks.keySet(), UUID::randomUUID);
callbacks.put(tracker, callback);
}
@Override
public YAMLSection generate() {
YAMLSection data = new YAMLSection();
if (id != null) data.set("id", id);
YAMLSection server = new YAMLSection();
server.set("name", name);
server.set("enabled", enabled);
server.set("port", port);
server.set("log", log);
server.set("dir", directory);
server.set("exec", executable);
server.set("stopcmd", stopcmd);
if (running != null) server.set("running", running.toString());
data.set("server", server);
public ObjectMap<Integer> send(SubDataClient client) {
ObjectMap<Integer> data = new ObjectMap<Integer>();
if (tracker != null) data.set(0x0000, tracker);
data.set(0x0001, name);
data.set(0x0002, enabled);
data.set(0x0003, port);
data.set(0x0004, log);
data.set(0x0005, directory);
data.set(0x0006, executable);
data.set(0x0007, stopcmd);
if (running != null) data.set(0x0008, running.toString());
return data;
}
@Override
public void execute(Client client, YAMLSection data) {
for (Callback<YAMLSection> callback : callbacks.get(data.getRawString("id"))) callback.run(data);
callbacks.remove(data.getRawString("id"));
public void receive(SubDataClient client, ObjectMap<Integer> data) {
for (Callback<ObjectMap<Integer>> callback : callbacks.get(data.getUUID(0x0000))) callback.run(data);
callbacks.remove(data.getUUID(0x0000));
}
@Override
public Version getVersion() {
return new Version("2.13.1b");
public int version() {
return 0x0001;
}
}

View File

@ -2,12 +2,11 @@ package net.ME1312.SubServers.Bungee.Network.Packet;
import net.ME1312.SubServers.Bungee.Host.External.ExternalHost;
import net.ME1312.SubServers.Bungee.Host.SubCreator;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.SubServers.Bungee.Library.Version.Version;
import net.ME1312.SubServers.Bungee.Network.Client;
import net.ME1312.SubServers.Bungee.Network.PacketIn;
import net.ME1312.SubServers.Bungee.Network.PacketOut;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
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.PacketObjectOut;
import net.ME1312.SubServers.Bungee.SubPlugin;
import org.msgpack.value.ValueFactory;
@ -16,7 +15,7 @@ import java.io.*;
/**
* External Host Configuration Packet
*/
public class PacketExConfigureHost implements PacketIn, PacketOut {
public class PacketExConfigureHost implements PacketIn, PacketObjectOut<Integer> {
private SubPlugin plugin;
private ExternalHost host;
@ -36,41 +35,33 @@ public class PacketExConfigureHost implements PacketIn, PacketOut {
}
@Override
public YAMLSection generate() {
YAMLSection data = new YAMLSection();
data.set("host", plugin.config.get().getSection("Hosts").getSection(host.getName()).clone());
YAMLSection templates = new YAMLSection();
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()) {
try {
YAMLSection tinfo = new YAMLSection();
tinfo.set("enabled", template.isEnabled());
tinfo.set("display", template.getDisplayName());
tinfo.set("icon", template.getIcon());
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
Util.zip(template.getDirectory(), bytes);
tinfo.set("files", ValueFactory.newBinary(bytes.toByteArray(), true));
tinfo.set("build", template.getBuildOptions().clone());
tinfo.set("settings", template.getConfigOptions().clone());
templates.set(template.getName(), tinfo);
} catch (Exception e) {
System.out.println("SubServers > Problem encoding template files: " + template.getName());
e.printStackTrace();
}
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("templates", templates);
data.set(0x0001, templates);
return data;
}
@Override
@SuppressWarnings("unchecked")
public void execute(Client client, YAMLSection data) {
if (client.getHandler() != null && client.getHandler() instanceof ExternalHost && plugin.config.get().getSection("Hosts").getKeys().contains(((ExternalHost) client.getHandler()).getName())) {
@Override
public void receive(SubDataClient client) {
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()));
}
}
@Override
public Version getVersion() {
return new Version("2.11.0a");
public int version() {
return 0x0001;
}
}

View File

@ -1,13 +1,13 @@
package net.ME1312.SubServers.Bungee.Network.Packet;
import net.ME1312.SubServers.Bungee.Host.SubCreator;
import net.ME1312.SubServers.Bungee.Library.Callback;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.SubServers.Bungee.Library.Version.Version;
import net.ME1312.SubServers.Bungee.Network.Client;
import net.ME1312.SubServers.Bungee.Network.PacketIn;
import net.ME1312.SubServers.Bungee.Network.PacketOut;
import net.ME1312.Galaxi.Library.Callback.Callback;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.Galaxi.Library.Version.Version;
import net.ME1312.SubData.Server.SubDataClient;
import net.ME1312.SubData.Server.Protocol.PacketObjectOut;
import net.ME1312.SubData.Server.Protocol.PacketObjectIn;
import java.util.HashMap;
import java.util.UUID;
@ -15,14 +15,14 @@ import java.util.UUID;
/**
* Create Server External Host Packet
*/
public class PacketExCreateServer implements PacketIn, PacketOut {
private static HashMap<String, Callback<YAMLSection>[]> callbacks = new HashMap<String, Callback<YAMLSection>[]>();
public class PacketExCreateServer implements PacketObjectIn<Integer>, PacketObjectOut<Integer> {
private static HashMap<UUID, Callback<ObjectMap<Integer>>[]> callbacks = new HashMap<UUID, Callback<ObjectMap<Integer>>[]>();
private String name;
private SubCreator.ServerTemplate template;
private Version version;
private int port;
private UUID log;
private String id = null;
private UUID tracker = null;
/**
* New PacketExCreateServer
@ -42,45 +42,41 @@ public class PacketExCreateServer implements PacketIn, PacketOut {
* @param callback Callbacks
*/
@SafeVarargs
public PacketExCreateServer(String name, SubCreator.ServerTemplate template, Version version, int port, UUID log, Callback<YAMLSection>... callback) {
public PacketExCreateServer(String name, SubCreator.ServerTemplate template, Version version, int port, UUID log, Callback<ObjectMap<Integer>>... callback) {
if (Util.isNull(name, template, version, port, log, callback)) throw new NullPointerException();
this.name = name;
this.template = template;
this.version = version;
this.port = port;
this.log = log;
this.id = Util.getNew(callbacks.keySet(), UUID::randomUUID).toString();
callbacks.put(id, callback);
this.tracker = Util.getNew(callbacks.keySet(), UUID::randomUUID);
callbacks.put(tracker, callback);
}
@Override
public YAMLSection generate() {
if (id == null) {
YAMLSection data = new YAMLSection();
data.set("thread", name);
return data;
public ObjectMap<Integer> send(SubDataClient client) {
ObjectMap<Integer> data = new ObjectMap<Integer>();
if (tracker == null) {
data.set(0x0001, name);
} else {
YAMLSection data = new YAMLSection();
data.set("id", id);
YAMLSection creator = new YAMLSection();
creator.set("name", name);
creator.set("template", template.getName());
creator.set("version", version);
creator.set("port", port);
creator.set("log", log.toString());
data.set("creator", creator);
return data;
data.set(0x0000, tracker);
data.set(0x0002, name);
data.set(0x0003, template.getName());
data.set(0x0004, version);
data.set(0x0005, port);
data.set(0x0006, log.toString());
}
return data;
}
@Override
public void execute(Client client, YAMLSection data) {
for (Callback<YAMLSection> callback : callbacks.get(data.getRawString("id"))) callback.run(data);
callbacks.remove(data.getRawString("id"));
public void receive(SubDataClient client, ObjectMap<Integer> data) {
for (Callback<ObjectMap<Integer>> callback : callbacks.get(data.getUUID(0x0000))) callback.run(data);
callbacks.remove(data.getUUID(0x0000));
}
@Override
public Version getVersion() {
return new Version("2.11.0a");
public int version() {
return 0x0001;
}
}

View File

@ -1,12 +1,11 @@
package net.ME1312.SubServers.Bungee.Network.Packet;
import net.ME1312.SubServers.Bungee.Library.Callback;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.SubServers.Bungee.Library.Version.Version;
import net.ME1312.SubServers.Bungee.Network.Client;
import net.ME1312.SubServers.Bungee.Network.PacketIn;
import net.ME1312.SubServers.Bungee.Network.PacketOut;
import net.ME1312.Galaxi.Library.Callback.Callback;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.SubData.Server.SubDataClient;
import net.ME1312.SubData.Server.Protocol.PacketObjectIn;
import net.ME1312.SubData.Server.Protocol.PacketObjectOut;
import java.util.HashMap;
import java.util.UUID;
@ -14,11 +13,12 @@ import java.util.UUID;
/**
* Delete Server External Host Packet
*/
public class PacketExDeleteServer implements PacketIn, PacketOut {
private static HashMap<String, Callback<YAMLSection>[]> callbacks = new HashMap<String, Callback<YAMLSection>[]>();
public class PacketExDeleteServer implements PacketObjectIn<Integer>, PacketObjectOut<Integer> {
private static HashMap<UUID, Callback<ObjectMap<Integer>>[]> callbacks = new HashMap<UUID, Callback<ObjectMap<Integer>>[]>();
private String name;
private YAMLSection info;
private String id = null;
private ObjectMap<String> info;
private boolean recycle;
private UUID tracker = null;
/**
* New PacketExDeleteServer
@ -33,35 +33,37 @@ public class PacketExDeleteServer implements PacketIn, PacketOut {
* @param callback Callbacks
*/
@SafeVarargs
public PacketExDeleteServer(String name, YAMLSection info, Callback<YAMLSection>... callback) {
public PacketExDeleteServer(String name, ObjectMap<String> info, boolean recycle, Callback<ObjectMap<Integer>>... callback) {
if (Util.isNull(name, info, callback)) throw new NullPointerException();
this.name = name;
this.info = info;
this.id = Util.getNew(callbacks.keySet(), UUID::randomUUID).toString();
callbacks.put(id, callback);
this.recycle = recycle;
this.tracker = Util.getNew(callbacks.keySet(), UUID::randomUUID);
callbacks.put(tracker, callback);
}
@Override
public YAMLSection generate() {
if (id == null) {
public ObjectMap<Integer> send(SubDataClient client) {
if (tracker == null) {
return null;
} else {
YAMLSection data = new YAMLSection();
data.set("id", id);
data.set("server", name);
data.set("info", info);
ObjectMap<Integer> data = new ObjectMap<Integer>();
data.set(0x0000, tracker);
data.set(0x0001, name);
data.set(0x0002, info);
if (recycle) data.set(0x0003, true);
return data;
}
}
@Override
public void execute(Client client, YAMLSection data) {
for (Callback<YAMLSection> callback : callbacks.get(data.getRawString("id"))) callback.run(data);
callbacks.remove(data.getRawString("id"));
public void receive(SubDataClient client, ObjectMap<Integer> data) {
for (Callback<ObjectMap<Integer>> callback : callbacks.get(data.getUUID(0x0000))) callback.run(data);
callbacks.remove(data.getUUID(0x0000));
}
@Override
public Version getVersion() {
return new Version("2.11.0a");
public int version() {
return 0x0001;
}
}

View File

@ -0,0 +1,56 @@
package net.ME1312.SubServers.Bungee.Network.Packet;
import net.ME1312.Galaxi.Library.UniversalFile;
import net.ME1312.SubServers.Bungee.Host.External.ExternalHost;
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.SubPlugin;
import java.io.*;
/**
* External Host Template Download Packet
*/
public class PacketExDownloadTemplates implements PacketIn, PacketStreamOut {
private SubPlugin plugin;
private ExternalHost host;
/**
* New PacketExDownloadTemplates (In)
*/
public PacketExDownloadTemplates(SubPlugin plugin) {
this.plugin = plugin;
}
/**
* New PacketExDownloadTemplates (Out)
*/
public PacketExDownloadTemplates(SubPlugin plugin, ExternalHost host) {
this.plugin = plugin;
this.host = host;
}
@Override
public void send(SubDataClient client, OutputStream stream) throws Throwable {
try {
Util.zip(new UniversalFile(plugin.dir, "SubServers:Templates"), stream);
} catch (Exception e) {
System.out.println("SubData > Problem encoding template files for Host: " + host.getName());
e.printStackTrace();
}
}
@Override
public void receive(SubDataClient client) {
if (client.getHandler() != null && client.getHandler() instanceof ExternalHost && plugin.config.get().getMap("Hosts").getKeys().contains(((ExternalHost) client.getHandler()).getName())) {
client.sendPacket(new PacketExDownloadTemplates(plugin, (ExternalHost) client.getHandler()));
}
}
@Override
public int version() {
return 0x0001;
}
}

View File

@ -1,12 +1,11 @@
package net.ME1312.SubServers.Bungee.Network.Packet;
import net.ME1312.SubServers.Bungee.Library.Callback;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.SubServers.Bungee.Library.Version.Version;
import net.ME1312.SubServers.Bungee.Network.Client;
import net.ME1312.SubServers.Bungee.Network.PacketIn;
import net.ME1312.SubServers.Bungee.Network.PacketOut;
import net.ME1312.SubData.Server.SubDataClient;
import net.ME1312.Galaxi.Library.Callback.Callback;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.SubData.Server.Protocol.PacketObjectIn;
import net.ME1312.SubData.Server.Protocol.PacketObjectOut;
import java.util.HashMap;
import java.util.UUID;
@ -14,10 +13,10 @@ import java.util.UUID;
/**
* Create Server External Host Packet
*/
public class PacketExRemoveServer implements PacketIn, PacketOut {
private static HashMap<String, Callback<YAMLSection>[]> callbacks = new HashMap<String, Callback<YAMLSection>[]>();
public class PacketExRemoveServer implements PacketObjectIn<Integer>, PacketObjectOut<Integer> {
private static HashMap<UUID, Callback<ObjectMap<Integer>>[]> callbacks = new HashMap<UUID, Callback<ObjectMap<Integer>>[]>();
private String name;
private String id;
private UUID tracker;
/**
* New PacketExRemoveServer (In)
@ -31,29 +30,29 @@ public class PacketExRemoveServer implements PacketIn, PacketOut {
* @param callback Callbacks
*/
@SafeVarargs
public PacketExRemoveServer(String name, Callback<YAMLSection>... callback) {
public PacketExRemoveServer(String name, Callback<ObjectMap<Integer>>... callback) {
if (Util.isNull(name, callback)) throw new NullPointerException();
this.name = name;
this.id = Util.getNew(callbacks.keySet(), UUID::randomUUID).toString();
callbacks.put(id, callback);
this.tracker = Util.getNew(callbacks.keySet(), UUID::randomUUID);
callbacks.put(tracker, callback);
}
@Override
public YAMLSection generate() {
YAMLSection data = new YAMLSection();
if (id != null) data.set("id", id);
data.set("server", name);
public ObjectMap<Integer> send(SubDataClient client) {
ObjectMap<Integer> data = new ObjectMap<Integer>();
if (tracker != null) data.set(0x0000, tracker);
data.set(0x0001, name);
return data;
}
@Override
public void execute(Client client, YAMLSection data) {
for (Callback<YAMLSection> callback : callbacks.get(data.getString("id"))) callback.run(data);
callbacks.remove(data.getString("id"));
public void receive(SubDataClient client, ObjectMap<Integer> data) {
for (Callback<ObjectMap<Integer>> callback : callbacks.get(data.getUUID(0x0000))) callback.run(data);
callbacks.remove(data.getUUID(0x0000));
}
@Override
public Version getVersion() {
return new Version("2.11.0a");
public int version() {
return 0x0001;
}
}

View File

@ -1,22 +1,21 @@
package net.ME1312.SubServers.Bungee.Network.Packet;
import net.ME1312.SubData.Server.SubDataClient;
import net.ME1312.SubServers.Bungee.Host.External.ExternalSubServer;
import net.ME1312.SubServers.Bungee.Host.SubServer;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.SubServers.Bungee.Library.Version.Version;
import net.ME1312.SubServers.Bungee.Network.Client;
import net.ME1312.SubServers.Bungee.Network.PacketIn;
import net.ME1312.SubServers.Bungee.Network.PacketOut;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.Galaxi.Library.Version.Version;
import net.ME1312.SubData.Server.Protocol.PacketObjectOut;
import net.ME1312.SubData.Server.Protocol.PacketObjectIn;
import net.ME1312.SubServers.Bungee.SubPlugin;
import java.lang.reflect.Method;
import java.util.Arrays;
/**
* Update External Server Packet
*/
public class PacketExUpdateServer implements PacketIn, PacketOut {
public class PacketExUpdateServer implements PacketObjectIn<Integer>, PacketObjectOut<Integer> {
private SubPlugin plugin;
private SubServer server;
private UpdateType type;
@ -78,24 +77,24 @@ public class PacketExUpdateServer implements PacketIn, PacketOut {
}
@Override
public YAMLSection generate() {
YAMLSection data = new YAMLSection();
data.set("server", server.getName());
data.set("type", type.getValue());
data.set("args", Arrays.asList(args));
public ObjectMap<Integer> send(SubDataClient client) {
ObjectMap<Integer> data = new ObjectMap<Integer>();
data.set(0x0000, server.getName());
data.set(0x0001, type.getValue());
data.set(0x0002, Arrays.asList(args));
return data;
}
@Override
public void execute(Client client, YAMLSection data) {
public void receive(SubDataClient client, ObjectMap<Integer> data) {
try {
ExternalSubServer server = (ExternalSubServer) plugin.api.getSubServer(data.getRawString("server"));
switch (data.getInt("type")) {
ExternalSubServer server = (ExternalSubServer) plugin.api.getSubServer(data.getRawString(0x0000));
switch (data.getInt(0x0001)) {
case 1:
Util.reflect(ExternalSubServer.class.getDeclaredMethod("falsestart"), server);
break;
case 2:
Util.reflect(ExternalSubServer.class.getDeclaredMethod("stopped", Boolean.class), server, data.getList("args").get(1).asBoolean());
Util.reflect(ExternalSubServer.class.getDeclaredMethod("stopped", Boolean.class), server, data.getList(0x0002).get(1).asBoolean());
break;
}
} catch (Exception e) {
@ -104,7 +103,7 @@ public class PacketExUpdateServer implements PacketIn, PacketOut {
}
@Override
public Version getVersion() {
return new Version("2.11.0a");
public int version() {
return 0x0001;
}
}

View File

@ -1,20 +1,19 @@
package net.ME1312.SubServers.Bungee.Network.Packet;
import net.ME1312.SubData.Server.SubDataClient;
import net.ME1312.SubServers.Bungee.Host.External.ExternalSubLogger;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.SubServers.Bungee.Library.Version.Version;
import net.ME1312.SubServers.Bungee.Network.Client;
import net.ME1312.SubServers.Bungee.Network.PacketIn;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.Galaxi.Library.Version.Version;
import net.ME1312.SubData.Server.Protocol.PacketObjectIn;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.UUID;
/**
* Message Log External Host Packet
*/
public class PacketInExLogMessage implements PacketIn {
public class PacketInExLogMessage implements PacketObjectIn<Integer> {
private static HashMap<UUID, ExternalSubLogger> loggers = new HashMap<UUID, ExternalSubLogger>();
/**
@ -23,10 +22,10 @@ public class PacketInExLogMessage implements PacketIn {
public PacketInExLogMessage() {}
@Override
public void execute(Client client, YAMLSection data) {
public void receive(SubDataClient client, ObjectMap<Integer> data) {
try {
if (data.contains("h") && data.contains("m") && data.getRawString("m").length() != 0 && loggers.keySet().contains(data.getUUID("h"))) {
Util.reflect(ExternalSubLogger.class.getDeclaredMethod("log", String.class), loggers.get(data.getUUID("h")), data.getRawString("m"));
if (data.contains(0x0000) && data.contains(0x0001) && loggers.keySet().contains(data.getUUID(0x0000))) {
Util.reflect(ExternalSubLogger.class.getDeclaredMethod("log", String.class), loggers.get(data.getUUID(0x0000)), data.getRawString(0x0001));
}
} catch (Exception e) {
e.printStackTrace();
@ -34,8 +33,8 @@ public class PacketInExLogMessage implements PacketIn {
}
@Override
public Version getVersion() {
return new Version("2.11.0a");
public int version() {
return 0x0001;
}
/**

View File

@ -1,15 +1,12 @@
package net.ME1312.SubServers.Bungee.Network.Packet;
import net.ME1312.SubData.Server.SubDataClient;
import net.ME1312.SubServers.Bungee.Host.External.ExternalHost;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.SubServers.Bungee.Library.Version.Version;
import net.ME1312.SubServers.Bungee.Network.Client;
import net.ME1312.SubServers.Bungee.Network.PacketIn;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.SubData.Server.Protocol.PacketIn;
import net.ME1312.SubServers.Bungee.SubPlugin;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* External Host Queue Request Packet
@ -25,8 +22,8 @@ public class PacketInExRequestQueue implements PacketIn {
}
@Override
public void execute(Client client, YAMLSection data) {
if (client.getHandler() != null && client.getHandler() instanceof ExternalHost && plugin.config.get().getSection("Hosts").getKeys().contains(((ExternalHost) client.getHandler()).getName())) {
public void receive(SubDataClient client) {
if (client.getHandler() != null && client.getHandler() instanceof ExternalHost && plugin.config.get().getMap("Hosts").getKeys().contains(((ExternalHost) client.getHandler()).getName())) {
try {
Util.reflect(ExternalHost.class.getDeclaredMethod("requeue"), client.getHandler());
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
@ -36,7 +33,7 @@ public class PacketInExRequestQueue implements PacketIn {
}
@Override
public Version getVersion() {
return new Version("2.11.0a");
public int version() {
return 0x0001;
}
}

View File

@ -0,0 +1,39 @@
package net.ME1312.SubServers.Bungee.Network.Packet;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.SubData.Server.Protocol.PacketObjectIn;
import net.ME1312.SubData.Server.SubDataClient;
import net.ME1312.SubServers.Bungee.SubPlugin;
/**
* Reload Packet
*/
public class PacketInReload implements PacketObjectIn<Integer> {
private SubPlugin plugin;
/**
* New PacketInReload
*
* @param plugin Plugin
*/
public PacketInReload(SubPlugin plugin) {
this.plugin = plugin;
}
@SuppressWarnings("deprecation")
@Override
public void receive(SubDataClient client, ObjectMap<Integer> data) throws Throwable {
if (data != null && data.contains(0x0000)) plugin.getLogger().warning("SubData > Received request for a proxy reload: " + data.getString(0x0000));
else plugin.getLogger().warning("SubData > Received request for a proxy reload");
try {
plugin.reload();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public int version() {
return 0x0001;
}
}

View File

@ -1,13 +1,12 @@
package net.ME1312.SubServers.Bungee.Network.Packet;
import net.ME1312.SubData.Server.SubDataClient;
import net.ME1312.SubServers.Bungee.Host.Host;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.SubServers.Bungee.Library.Version.Version;
import net.ME1312.SubServers.Bungee.Network.Client;
import net.ME1312.SubServers.Bungee.Network.ClientHandler;
import net.ME1312.SubServers.Bungee.Network.PacketIn;
import net.ME1312.SubServers.Bungee.Network.PacketOut;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.SubData.Server.ClientHandler;
import net.ME1312.SubData.Server.Protocol.PacketObjectIn;
import net.ME1312.SubData.Server.Protocol.PacketObjectOut;
import net.ME1312.SubServers.Bungee.SubPlugin;
import java.util.Map;
@ -15,10 +14,9 @@ import java.util.Map;
/**
* Link External Host Packet
*/
public class PacketLinkExHost implements PacketIn, PacketOut {
public class PacketLinkExHost implements PacketObjectIn<Integer>, PacketObjectOut<Integer> {
private SubPlugin plugin;
private int response;
private String message;
/**
* New PacketLinkExHost (In)
@ -34,50 +32,46 @@ public class PacketLinkExHost implements PacketIn, PacketOut {
* New PacketLinkExHost (Out)
*
* @param response Response ID
* @param message Message
*/
public PacketLinkExHost(int response, String message) {
if (Util.isNull(response, message)) throw new NullPointerException();
public PacketLinkExHost(int response) {
this.response = response;
this.message = message;
}
@Override
public YAMLSection generate() {
YAMLSection data = new YAMLSection();
data.set("r", response);
data.set("m", message);
public ObjectMap<Integer> send(SubDataClient client) {
ObjectMap<Integer> data = new ObjectMap<Integer>();
data.set(0x0001, response);
return data;
}
@Override
public void execute(Client client, YAMLSection data) {
public void receive(SubDataClient client, ObjectMap<Integer> data) {
try {
Map<String, Host> hosts = plugin.api.getHosts();
if (hosts.keySet().contains(data.getRawString("name").toLowerCase())) {
Host host = hosts.get(data.getRawString("name").toLowerCase());
if (hosts.keySet().contains(data.getRawString(0x0000).toLowerCase())) {
Host host = hosts.get(data.getRawString(0x0000).toLowerCase());
if (host instanceof ClientHandler) {
if (((ClientHandler) host).getSubData() == null) {
client.setHandler((ClientHandler) host);
System.out.println("SubData > " + client.getAddress().toString() + " has been defined as Host: " + host.getName());
client.sendPacket(new PacketLinkExHost(0, "Definition Successful"));
client.sendPacket(new PacketLinkExHost(0));
} else {
client.sendPacket(new PacketLinkExHost(3, "Host already linked"));
client.sendPacket(new PacketLinkExHost(3));
}
} else {
client.sendPacket(new PacketLinkExHost(4, "That host does not support a network interface"));
client.sendPacket(new PacketLinkExHost(4));
}
} else {
client.sendPacket(new PacketLinkExHost(2, "There is no host with name: " + data.getRawString("name")));
client.sendPacket(new PacketLinkExHost(2));
}
} catch (Exception e) {
client.sendPacket(new PacketLinkExHost(1, e.getClass().getCanonicalName() + ": " + e.getMessage()));
client.sendPacket(new PacketLinkExHost(1));
e.printStackTrace();
}
}
@Override
public Version getVersion() {
return new Version("2.11.0a");
public int version() {
return 0x0001;
}
}

View File

@ -2,24 +2,22 @@ package net.ME1312.SubServers.Bungee.Network.Packet;
import net.ME1312.SubServers.Bungee.Event.SubAddProxyEvent;
import net.ME1312.SubServers.Bungee.Host.Proxy;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.SubServers.Bungee.Library.Version.Version;
import net.ME1312.SubServers.Bungee.Network.Client;
import net.ME1312.SubServers.Bungee.Network.PacketIn;
import net.ME1312.SubServers.Bungee.Network.PacketOut;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.Galaxi.Library.Version.Version;
import net.ME1312.SubData.Server.SubDataClient;
import net.ME1312.SubData.Server.Protocol.PacketObjectOut;
import net.ME1312.SubData.Server.Protocol.PacketObjectIn;
import net.ME1312.SubServers.Bungee.SubPlugin;
import java.util.Map;
import java.util.UUID;
/**
* Link Proxy Packet
*/
public class PacketLinkProxy implements PacketIn, PacketOut {
public class PacketLinkProxy implements PacketObjectIn<Integer>, PacketObjectOut<Integer> {
private SubPlugin plugin;
private int response;
private String message;
private String name;
/**
@ -37,48 +35,45 @@ public class PacketLinkProxy implements PacketIn, PacketOut {
*
* @param name The name that was generated
* @param response Response ID
* @param message Message
*/
public PacketLinkProxy(String name, int response, String message) {
if (Util.isNull(response, message)) throw new NullPointerException();
public PacketLinkProxy(String name, int response) {
this.name = name;
this.response = response;
this.message = message;
}
@Override
public YAMLSection generate() {
YAMLSection json = new YAMLSection();
json.set("n", name);
json.set("r", response);
json.set("m", message);
public ObjectMap<Integer> send(SubDataClient client) {
ObjectMap<Integer> json = new ObjectMap<Integer>();
json.set(0x0000, name);
json.set(0x0001, response);
return json;
}
@Override
public void execute(Client client, YAMLSection data) {
public void receive(SubDataClient client, ObjectMap<Integer> data) {
try {
Map<String, Proxy> proxies = plugin.api.getProxies();
String name = ((data.contains(0x0000))?data.getRawString(0x0000):null);
Proxy proxy;
if (data.contains("name") && proxies.keySet().contains(data.getRawString("name").toLowerCase()) && proxies.get(data.getRawString("name").toLowerCase()).getSubData() == null) {
proxy = proxies.get(data.getRawString("name").toLowerCase());
if (name != null && proxies.keySet().contains(name.toLowerCase()) && proxies.get(name.toLowerCase()).getSubData() == null) {
proxy = proxies.get(name.toLowerCase());
} else {
proxy = new Proxy((data.contains("name") && !proxies.keySet().contains(data.getRawString("name").toLowerCase()))?data.getRawString("name"):null);
proxy = new Proxy((name != null && !proxies.keySet().contains(name.toLowerCase()))?name:null);
plugin.getPluginManager().callEvent(new SubAddProxyEvent(proxy));
plugin.proxies.put(proxy.getName().toLowerCase(), proxy);
}
client.setHandler(proxy);
System.out.println("SubData > " + client.getAddress().toString() + " has been defined as Proxy: " + proxy.getName());
client.sendPacket(new PacketLinkProxy(proxy.getName(), 0, "Definition Successful"));
client.sendPacket(new PacketLinkProxy(proxy.getName(), 0));
} catch (Exception e) {
client.sendPacket(new PacketLinkProxy(null, 1, e.getClass().getCanonicalName() + ": " + e.getMessage()));
client.sendPacket(new PacketLinkProxy(null, 1));
e.printStackTrace();
}
}
@Override
public Version getVersion() {
return new Version("2.11.0a");
public int version() {
return 0x0001;
}
}

View File

@ -1,13 +1,12 @@
package net.ME1312.SubServers.Bungee.Network.Packet;
import net.ME1312.SubData.Server.SubDataClient;
import net.ME1312.SubServers.Bungee.Host.Server;
import net.ME1312.SubServers.Bungee.Host.SubServer;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.SubServers.Bungee.Library.Version.Version;
import net.ME1312.SubServers.Bungee.Network.Client;
import net.ME1312.SubServers.Bungee.Network.PacketIn;
import net.ME1312.SubServers.Bungee.Network.PacketOut;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.SubData.Server.Protocol.PacketObjectIn;
import net.ME1312.SubData.Server.Protocol.PacketObjectOut;
import net.ME1312.SubServers.Bungee.SubPlugin;
import java.net.InetSocketAddress;
@ -16,7 +15,7 @@ import java.util.Map;
/**
* Link Server Packet
*/
public class PacketLinkServer implements PacketIn, PacketOut {
public class PacketLinkServer implements PacketObjectIn<Integer>, PacketObjectOut<Integer> {
private SubPlugin plugin;
private int response;
private String message;
@ -46,61 +45,64 @@ public class PacketLinkServer implements PacketIn, PacketOut {
* @param message Message
*/
public PacketLinkServer(String name, int response, String message) {
if (Util.isNull(response, message)) throw new NullPointerException();
if (Util.isNull(response)) throw new NullPointerException();
this.name = name;
this.response = response;
this.message = message;
}
@Override
public YAMLSection generate() {
YAMLSection data = new YAMLSection();
data.set("n", name);
data.set("r", response);
data.set("m", message);
public ObjectMap<Integer> send(SubDataClient client) {
ObjectMap<Integer> data = new ObjectMap<Integer>();
data.set(0x0000, name);
data.set(0x0001, response);
if (message != null) data.set(0x0002, message);
return data;
}
@Override
public void execute(Client client, YAMLSection data) {
public void receive(SubDataClient client, ObjectMap<Integer> data) {
String name = (data.contains(0x0000))?data.getRawString(0x0000):null;
Integer port = (data.contains(0x0001))?data.getInt(0x0001):null;
try {
Map<String, Server> servers = plugin.api.getServers();
Server server;
if (data.contains("name") && servers.keySet().contains(data.getRawString("name").toLowerCase())) {
link(client, servers.get(data.getRawString("name").toLowerCase()));
} else if (data.contains("port")) {
if ((server = search(new InetSocketAddress(client.getAddress().getAddress(), data.getInt("port")))) != null) {
if (name != null && servers.keySet().contains(name.toLowerCase())) {
link(client, servers.get(name.toLowerCase()));
} else if (port != null) {
if ((server = search(new InetSocketAddress(client.getAddress().getAddress(), port))) != null) {
link(client, server);
} else {
throw new ServerLinkException("There is no server with address: " + client.getAddress().getAddress().getHostAddress() + ':' + data.getInt("port"));
throw new ServerLinkException("There is no server with address: " + client.getAddress().getAddress().getHostAddress() + ':' + port);
}
} else {
throw new ServerLinkException("Not enough arguments");
}
} catch (ServerLinkException e) {
if (data.contains("name")) {
client.sendPacket(new PacketLinkServer(null, 2, "There is no server with name: " + data.getRawString("name")));
if (name != null) {
client.sendPacket(new PacketLinkServer(null, 3, "There is no server with name: " + name));
} else {
client.sendPacket(new PacketLinkServer(null, 2, e.getMessage()));
}
} catch (Exception e) {
client.sendPacket(new PacketLinkServer(null, 1, e.getClass().getCanonicalName() + ": " + e.getMessage()));
client.sendPacket(new PacketLinkServer(null, 1, null));
e.printStackTrace();
}
}
private void link(Client client, Server server) {
private void link(SubDataClient client, Server server) {
if (server.getSubData() == null) {
client.setHandler(server);
System.out.println("SubData > " + client.getAddress().toString() + " has been defined as " + ((server instanceof SubServer) ? "SubServer" : "Server") + ": " + server.getName());
if (server instanceof SubServer && !((SubServer) server).isRunning()) {
System.out.println("SubServers > Sending shutdown signal to rogue SubServer: " + server.getName());
client.sendPacket(new PacketOutReset("Rogue SubServer Detected"));
client.sendPacket(new PacketOutExReset("Rogue SubServer Detected"));
} else {
client.sendPacket(new PacketLinkServer(server.getName(), 0, "Definition Successful"));
client.sendPacket(new PacketLinkServer(server.getName(), 0, null));
}
} else {
client.sendPacket(new PacketLinkServer(null, 3, "Server already linked"));
client.sendPacket(new PacketLinkServer(null, 4, "Server already linked"));
}
}
@ -116,7 +118,7 @@ public class PacketLinkServer implements PacketIn, PacketOut {
}
@Override
public Version getVersion() {
return new Version("2.11.0a");
public int version() {
return 0x0001;
}
}

View File

@ -0,0 +1,38 @@
package net.ME1312.SubServers.Bungee.Network.Packet;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.Galaxi.Library.Version.Version;
import net.ME1312.SubData.Server.Protocol.PacketObjectOut;
import net.ME1312.SubData.Server.SubDataClient;
/**
* Reload Packet
*/
public class PacketOutExReload implements PacketObjectOut<Integer> {
private String message;
/**
* New PacketOutExReload
*
* @param message Message
*/
public PacketOutExReload(String message) {
this.message = message;
}
@Override
public ObjectMap<Integer> send(SubDataClient client) {
if (message == null) {
return null;
} else {
ObjectMap<Integer> data = new ObjectMap<Integer>();
data.set(0x0000, message);
return data;
}
}
@Override
public int version() {
return 0x0001;
}
}

View File

@ -0,0 +1,38 @@
package net.ME1312.SubServers.Bungee.Network.Packet;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.Galaxi.Library.Version.Version;
import net.ME1312.SubData.Server.Protocol.PacketObjectOut;
import net.ME1312.SubData.Server.SubDataClient;
/**
* Reset Packet
*/
public class PacketOutExReset implements PacketObjectOut<Integer> {
private String message;
/**
* New PacketOutExReset
*
* @param message Message
*/
public PacketOutExReset(String message) {
this.message = message;
}
@Override
public ObjectMap<Integer> send(SubDataClient client) {
if (message == null) {
return null;
} else {
ObjectMap<Integer> json = new ObjectMap<Integer>();
json.set(0x0000, message);
return json;
}
}
@Override
public int version() {
return 0x0001;
}
}

View File

@ -1,175 +1,186 @@
package net.ME1312.SubServers.Bungee.Network.Packet;
import net.ME1312.SubData.Server.SubDataClient;
import net.ME1312.SubServers.Bungee.Event.*;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.SubServers.Bungee.Library.SubEvent;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.SubServers.Bungee.Library.Version.Version;
import net.ME1312.SubServers.Bungee.Network.PacketOut;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.SubData.Server.Protocol.PacketObjectOut;
import net.ME1312.SubServers.Bungee.SubPlugin;
import net.md_5.bungee.api.plugin.Listener;
import net.md_5.bungee.event.EventHandler;
import java.util.LinkedList;
import java.util.List;
/**
* Event Send Packet
*/
public class PacketOutRunEvent implements Listener, PacketOut {
public class PacketOutExRunEvent implements Listener, PacketObjectOut<Integer> {
private SubPlugin plugin;
private YAMLSection args;
private ObjectMap<String> args;
private String type;
/**
* New PacketOutRunEvent (Registerer)
* New PacketOutExRunEvent (Registerer)
*
* @param plugin
*/
public PacketOutRunEvent(SubPlugin plugin) {
public PacketOutExRunEvent(SubPlugin plugin) {
if (Util.isNull(plugin)) throw new NullPointerException();
this.plugin = plugin;
}
/**
* New PacketOutRunEvent (Out)
* New PacketOutExRunEvent (Out)
*
* @param event Event to be run
* @param args Arguments
*/
public PacketOutRunEvent(Class<? extends SubEvent> event, YAMLSection args) {
public PacketOutExRunEvent(Class<? extends SubEvent> event, ObjectMap<String> args) {
if (Util.isNull(event, args)) throw new NullPointerException();
this.type = event.getSimpleName();
this.args = args;
}
@Override
public YAMLSection generate() {
YAMLSection json = new YAMLSection();
json.set("type", type);
json.set("args", args);
public ObjectMap<Integer> send(SubDataClient client) {
ObjectMap<Integer> json = new ObjectMap<Integer>();
json.set(0x0000, type);
json.set(0x0001, args);
return json;
}
@Override
public Version getVersion() {
return new Version("2.11.0a");
public int version() {
return 0x0001;
}
private void broadcast(PacketOutExRunEvent packet) {
List<SubDataClient> clients = new LinkedList<SubDataClient>();
clients.addAll(plugin.subdata.getClients().values());
for (SubDataClient client : clients) {
client.sendPacket(packet);
}
}
@EventHandler(priority = Byte.MAX_VALUE)
public void event(SubAddProxyEvent event) {
YAMLSection args = new YAMLSection();
ObjectMap<String> args = new ObjectMap<String>();
args.set("proxy", event.getProxy().getName());
plugin.subdata.broadcastPacket(new PacketOutRunEvent(event.getClass(), args));
broadcast(new PacketOutExRunEvent(event.getClass(), args));
}
@EventHandler(priority = Byte.MAX_VALUE)
public void event(SubAddHostEvent event) {
if (!event.isCancelled()) {
YAMLSection args = new YAMLSection();
if (event.getPlayer() != null) args.set("player",event.getPlayer().toString());
ObjectMap<String> args = new ObjectMap<String>();
if (event.getPlayer() != null) args.set("player", event.getPlayer().toString());
args.set("host", event.getHost().getName());
plugin.subdata.broadcastPacket(new PacketOutRunEvent(event.getClass(), args));
broadcast(new PacketOutExRunEvent(event.getClass(), args));
}
}
@EventHandler(priority = Byte.MAX_VALUE)
public void event(SubAddServerEvent event) {
if (!event.isCancelled()) {
YAMLSection args = new YAMLSection();
ObjectMap<String> args = new ObjectMap<String>();
if (event.getPlayer() != null) args.set("player", event.getPlayer().toString());
if (event.getHost() != null) args.set("host", event.getHost().getName());
args.set("server", event.getServer().getName());
plugin.subdata.broadcastPacket(new PacketOutRunEvent(event.getClass(), args));
broadcast(new PacketOutExRunEvent(event.getClass(), args));
}
}
@EventHandler(priority = Byte.MAX_VALUE)
public void event(SubCreateEvent event) {
if (!event.isCancelled()) {
YAMLSection args = new YAMLSection();
ObjectMap<String> args = new ObjectMap<String>();
if (event.getPlayer() != null) args.set("player", event.getPlayer().toString());
args.set("host", event.getHost().getName());
args.set("name", event.getName());
args.set("template", event.getTemplate().getName());
args.set("version", event.getVersion());
if (event.getVersion() != null) args.set("version", event.getVersion());
args.set("port", event.getPort());
plugin.subdata.broadcastPacket(new PacketOutRunEvent(event.getClass(), args));
broadcast(new PacketOutExRunEvent(event.getClass(), args));
}
}
@EventHandler(priority = Byte.MAX_VALUE)
public void event(SubSendCommandEvent event) {
if (!event.isCancelled()) {
YAMLSection args = new YAMLSection();
ObjectMap<String> args = new ObjectMap<String>();
if (event.getPlayer() != null) args.set("player", event.getPlayer().toString());
args.set("server", event.getServer().getName());
args.set("command", event.getCommand());
plugin.subdata.broadcastPacket(new PacketOutRunEvent(event.getClass(), args));
broadcast(new PacketOutExRunEvent(event.getClass(), args));
}
}
@EventHandler(priority = Byte.MAX_VALUE)
public void event(SubEditServerEvent event) {
if (!event.isCancelled()) {
YAMLSection args = new YAMLSection();
ObjectMap<String> args = new ObjectMap<String>();
if (event.getPlayer() != null) args.set("player", event.getPlayer().toString());
args.set("server", event.getServer().getName());
args.set("edit", event.getEdit().name());
args.set("value", event.getEdit().get().asObject());
args.set("perm", event.isPermanent());
plugin.subdata.broadcastPacket(new PacketOutRunEvent(event.getClass(), args));
broadcast(new PacketOutExRunEvent(event.getClass(), args));
}
}
@EventHandler(priority = Byte.MAX_VALUE)
public void event(SubStartEvent event) {
if (!event.isCancelled()) {
YAMLSection args = new YAMLSection();
ObjectMap<String> args = new ObjectMap<String>();
if (event.getPlayer() != null) args.set("player", event.getPlayer().toString());
args.set("server", event.getServer().getName());
plugin.subdata.broadcastPacket(new PacketOutRunEvent(event.getClass(), args));
broadcast(new PacketOutExRunEvent(event.getClass(), args));
}
}
@EventHandler(priority = Byte.MAX_VALUE)
public void event(SubStopEvent event) {
if (!event.isCancelled()) {
YAMLSection args = new YAMLSection();
ObjectMap<String> args = new ObjectMap<String>();
if (event.getPlayer() != null) args.set("player", event.getPlayer().toString());
args.set("server", event.getServer().getName());
args.set("force", event.isForced());
plugin.subdata.broadcastPacket(new PacketOutRunEvent(event.getClass(), args));
broadcast(new PacketOutExRunEvent(event.getClass(), args));
}
}
@EventHandler(priority = Byte.MAX_VALUE)
public void event(SubStoppedEvent event) {
YAMLSection args = new YAMLSection();
ObjectMap<String> args = new ObjectMap<String>();
args.set("server", event.getServer().getName());
plugin.subdata.broadcastPacket(new PacketOutRunEvent(event.getClass(), args));
broadcast(new PacketOutExRunEvent(event.getClass(), args));
}
@EventHandler(priority = Byte.MAX_VALUE)
public void event(SubRemoveServerEvent event) {
if (!event.isCancelled()) {
YAMLSection args = new YAMLSection();
ObjectMap<String> args = new ObjectMap<String>();
if (event.getPlayer() != null) args.set("player", event.getPlayer().toString());
if (event.getHost() != null) args.set("host", event.getHost().getName());
args.set("server", event.getServer().getName());
plugin.subdata.broadcastPacket(new PacketOutRunEvent(event.getClass(), args));
broadcast(new PacketOutExRunEvent(event.getClass(), args));
}
}
@EventHandler(priority = Byte.MAX_VALUE)
public void event(SubRemoveHostEvent event) {
if (!event.isCancelled()) {
YAMLSection args = new YAMLSection();
ObjectMap<String> args = new ObjectMap<String>();
if (event.getPlayer() != null) args.set("player", event.getPlayer().toString());
args.set("host", event.getHost().getName());
plugin.subdata.broadcastPacket(new PacketOutRunEvent(event.getClass(), args));
broadcast(new PacketOutExRunEvent(event.getClass(), args));
}
}
@EventHandler(priority = Byte.MAX_VALUE)
public void event(SubRemoveProxyEvent event) {
YAMLSection args = new YAMLSection();
ObjectMap<String> args = new ObjectMap<String>();
args.set("proxy", event.getProxy().getName());
plugin.subdata.broadcastPacket(new PacketOutRunEvent(event.getClass(), args));
broadcast(new PacketOutExRunEvent(event.getClass(), args));
}
}

View File

@ -1,16 +1,17 @@
package net.ME1312.SubServers.Bungee.Network.Packet;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.SubServers.Bungee.Library.Version.Version;
import net.ME1312.SubServers.Bungee.Network.PacketOut;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.Galaxi.Library.Version.Version;
import net.ME1312.SubData.Server.Protocol.PacketObjectOut;
import net.ME1312.SubData.Server.SubDataClient;
import java.util.UUID;
/**
* Update External Whitelist Packet
*/
public class PacketOutExUpdateWhitelist implements PacketOut {
public class PacketOutExUpdateWhitelist implements PacketObjectOut<Integer> {
private String name;
private boolean mode;
private UUID value;
@ -30,15 +31,16 @@ public class PacketOutExUpdateWhitelist implements PacketOut {
}
@Override
public YAMLSection generate() {
YAMLSection data = new YAMLSection();
data.set("server", name);
data.set("mode", mode);
data.set("value", value);
public ObjectMap<Integer> send(SubDataClient client) {
ObjectMap<Integer> data = new ObjectMap<Integer>();
data.set(0x0000, name);
data.set(0x0001, mode);
data.set(0x0002, value);
return data;
}
@Override
public Version getVersion() {
return new Version("2.13.2c");
public int version() {
return 0x0001;
}
}

View File

@ -1,37 +0,0 @@
package net.ME1312.SubServers.Bungee.Network.Packet;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Library.Version.Version;
import net.ME1312.SubServers.Bungee.Network.PacketOut;
/**
* Reload Packet
*/
public class PacketOutReload implements PacketOut {
private String message;
/**
* New PacketOutReload
*
* @param message Message
*/
public PacketOutReload(String message) {
this.message = message;
}
@Override
public YAMLSection generate() {
if (message == null) {
return null;
} else {
YAMLSection data = new YAMLSection();
data.set("m", message);
return data;
}
}
@Override
public Version getVersion() {
return new Version("2.11.0a");
}
}

View File

@ -1,37 +0,0 @@
package net.ME1312.SubServers.Bungee.Network.Packet;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Library.Version.Version;
import net.ME1312.SubServers.Bungee.Network.PacketOut;
/**
* Reset Packet
*/
public class PacketOutReset implements PacketOut {
private String message;
/**
* New PacketOutReset
*
* @param message Message
*/
public PacketOutReset(String message) {
this.message = message;
}
@Override
public YAMLSection generate() {
if (message == null) {
return null;
} else {
YAMLSection json = new YAMLSection();
json.set("m", message);
return json;
}
}
@Override
public Version getVersion() {
return new Version("2.11.0a");
}
}

View File

@ -1,26 +1,24 @@
package net.ME1312.SubServers.Bungee.Network.Packet;
import net.ME1312.SubData.Server.SubDataClient;
import net.ME1312.SubServers.Bungee.Host.Server;
import net.ME1312.SubServers.Bungee.Host.SubServer;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.SubServers.Bungee.Library.Version.Version;
import net.ME1312.SubServers.Bungee.Network.Client;
import net.ME1312.SubServers.Bungee.Network.PacketIn;
import net.ME1312.SubServers.Bungee.Network.PacketOut;
import net.ME1312.SubServers.Bungee.SubAPI;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.SubData.Server.Protocol.PacketObjectIn;
import net.ME1312.SubData.Server.Protocol.PacketObjectOut;
import net.ME1312.SubServers.Bungee.SubPlugin;
import java.util.Map;
import java.util.UUID;
/**
* Restart Server Packet
*/
public class PacketRestartServer implements PacketIn, PacketOut {
public class PacketRestartServer implements PacketObjectIn<Integer>, PacketObjectOut<Integer> {
private SubPlugin plugin;
private int response;
private String message;
private String id;
private UUID tracker;
/**
* New PacketRestartServer (In)
@ -36,72 +34,72 @@ public class PacketRestartServer implements PacketIn, PacketOut {
* New PacketRestartServer (Out)
*
* @param response Response ID
* @param message Message
* @param id Receiver ID
* @param tracker Receiver ID
*/
public PacketRestartServer(int response, String message, String id) {
if (Util.isNull(response, message)) throw new NullPointerException();
public PacketRestartServer(int response, UUID tracker) {
this.response = response;
this.message = message;
this.id = id;
this.tracker = tracker;
}
@Override
public YAMLSection generate() {
YAMLSection json = new YAMLSection();
if (id != null) json.set("id", id);
json.set("r", response);
json.set("m", message);
public ObjectMap<Integer> send(SubDataClient client) {
ObjectMap<Integer> json = new ObjectMap<Integer>();
if (tracker != null) json.set(0x0000, tracker);
json.set(0x0001, response);
return json;
}
@Override
public void execute(Client client, YAMLSection data) {
public void receive(SubDataClient client, ObjectMap<Integer> data) {
UUID tracker = (data.contains(0x0000)?data.getUUID(0x0000):null);
try {
String name = data.getRawString(0x0001);
UUID player = (data.contains(0x0002)?data.getUUID(0x0002):null);
Runnable starter = () -> {
Map<String, Server> servers = plugin.api.getServers();
if (!servers.keySet().contains(data.getRawString("server").toLowerCase())) {
} else if (!(servers.get(data.getRawString("server").toLowerCase()) instanceof SubServer)) {
} else if (!((SubServer) servers.get(data.getRawString("server").toLowerCase())).getHost().isAvailable()) {
} else if (!((SubServer) servers.get(data.getRawString("server").toLowerCase())).getHost().isEnabled()) {
} else if (!((SubServer) servers.get(data.getRawString("server").toLowerCase())).isEnabled()) {
} else if (((SubServer) servers.get(data.getRawString("server").toLowerCase())).isRunning()) {
} else if (((SubServer) servers.get(data.getRawString("server").toLowerCase())).getCurrentIncompatibilities().size() != 0) {
if (!servers.keySet().contains(name.toLowerCase())) {
} else if (!(servers.get(name.toLowerCase()) instanceof SubServer)) {
} else if (!((SubServer) servers.get(name.toLowerCase())).getHost().isAvailable()) {
} else if (!((SubServer) servers.get(name.toLowerCase())).getHost().isEnabled()) {
} else if (!((SubServer) servers.get(name.toLowerCase())).isEnabled()) {
} else if (((SubServer) servers.get(name.toLowerCase())).isRunning()) {
} else if (((SubServer) servers.get(name.toLowerCase())).getCurrentIncompatibilities().size() != 0) {
} else {
((SubServer) servers.get(data.getRawString("server").toLowerCase())).start((data.contains("player"))?data.getUUID("player"):null);
((SubServer) servers.get(name.toLowerCase())).start(player);
}
};
Map<String, Server> servers = plugin.api.getServers();
if (!servers.keySet().contains(data.getRawString("server").toLowerCase())) {
client.sendPacket(new PacketRestartServer(3, "There is no server with that name", (data.contains("id"))?data.getRawString("id"):null));
} else if (!(servers.get(data.getRawString("server").toLowerCase()) instanceof SubServer)) {
client.sendPacket(new PacketRestartServer(4, "That Server is not a SubServer", (data.contains("id"))?data.getRawString("id"):null));
if (!servers.keySet().contains(name.toLowerCase())) {
client.sendPacket(new PacketRestartServer(3, tracker));
} else if (!(servers.get(name.toLowerCase()) instanceof SubServer)) {
client.sendPacket(new PacketRestartServer(4, tracker));
} else {
client.sendPacket(new PacketRestartServer(0, "Restarting SubServer", (data.contains("id"))?data.getRawString("id"):null));
if (((SubServer) servers.get(data.getRawString("server").toLowerCase())).isRunning()) {
client.sendPacket(new PacketRestartServer(0, tracker));
if (((SubServer) servers.get(name.toLowerCase())).isRunning()) {
new Thread(() -> {
try {
((SubServer) servers.get(data.getRawString("server").toLowerCase())).stop();
((SubServer) servers.get(data.getRawString("server").toLowerCase())).waitFor();
((SubServer) servers.get(name.toLowerCase())).stop();
((SubServer) servers.get(name.toLowerCase())).waitFor();
Thread.sleep(100);
starter.run();
} catch (Exception e) {
e.printStackTrace();
}
}, "SubServers.Bungee::Server_Restart_Packet_Handler(" + servers.get(data.getRawString("server").toLowerCase()).getName() + ')').start();
}, "SubServers.Bungee::Server_Restart_Packet_Handler(" + servers.get(name.toLowerCase()).getName() + ')').start();
} else {
starter.run();
}
}
} catch (Throwable e) {
client.sendPacket(new PacketRestartServer(2, e.getClass().getCanonicalName() + ": " + e.getMessage(), (data.contains("id"))?data.getRawString("id"):null));
client.sendPacket(new PacketRestartServer(2, tracker));
e.printStackTrace();
}
}
@Override
public Version getVersion() {
return new Version("2.11.0a");
public int version() {
return 0x0001;
}
}

View File

@ -1,13 +1,12 @@
package net.ME1312.SubServers.Bungee.Network.Packet;
import net.ME1312.SubData.Server.SubDataClient;
import net.ME1312.SubServers.Bungee.Host.Server;
import net.ME1312.SubServers.Bungee.Host.SubServer;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.SubServers.Bungee.Library.Version.Version;
import net.ME1312.SubServers.Bungee.Network.Client;
import net.ME1312.SubServers.Bungee.Network.PacketIn;
import net.ME1312.SubServers.Bungee.Network.PacketOut;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.SubData.Server.Protocol.PacketObjectIn;
import net.ME1312.SubData.Server.Protocol.PacketObjectOut;
import net.ME1312.SubServers.Bungee.SubPlugin;
import java.util.Map;
@ -16,11 +15,11 @@ import java.util.UUID;
/**
* Start Server Packet
*/
public class PacketStartServer implements PacketIn, PacketOut {
public class PacketStartServer implements PacketObjectIn<Integer>, PacketObjectOut<Integer> {
private SubPlugin plugin;
private int response;
private String message;
private String id;
private String extra;
private UUID tracker;
/**
* New PacketStartServer (In)
@ -36,63 +35,75 @@ public class PacketStartServer implements PacketIn, PacketOut {
* New PacketStartServer (Out)
*
* @param response Response ID
* @param message Message
* @param id Receiver ID
* @param tracker Receiver ID
*/
public PacketStartServer(int response, String message, String id) {
if (Util.isNull(response, message)) throw new NullPointerException();
public PacketStartServer(int response, UUID tracker) {
this(response, null, tracker);
}
/**
* New PacketStartServer (Out)
*
* @param response Response ID
* @param tracker Receiver ID
*/
public PacketStartServer(int response, String extra, UUID tracker) {
this.response = response;
this.message = message;
this.id = id;
this.extra = extra;
this.tracker = tracker;
}
@Override
public YAMLSection generate() {
YAMLSection json = new YAMLSection();
if (id != null) json.set("id", id);
json.set("r", response);
json.set("m", message);
public ObjectMap<Integer> send(SubDataClient client) {
ObjectMap<Integer> json = new ObjectMap<Integer>();
if (tracker != null) json.set(0x0000, tracker);
json.set(0x0001, response);
if (extra != null) json.set(0x0002, extra);
return json;
}
@Override
public void execute(Client client, YAMLSection data) {
public void receive(SubDataClient client, ObjectMap<Integer> data) {
UUID tracker = (data.contains(0x0000)?data.getUUID(0x0000):null);
try {
String name = data.getRawString(0x0001);
UUID player = (data.contains(0x0002)?data.getUUID(0x0002):null);
Map<String, Server> servers = plugin.api.getServers();
if (!servers.keySet().contains(data.getRawString("server").toLowerCase())) {
client.sendPacket(new PacketStartServer(3, "There is no server with that name", (data.contains("id"))?data.getRawString("id"):null));
} else if (!(servers.get(data.getRawString("server").toLowerCase()) instanceof SubServer)) {
client.sendPacket(new PacketStartServer(4, "That Server is not a SubServer", (data.contains("id"))?data.getRawString("id"):null));
} else if (!((SubServer) servers.get(data.getRawString("server").toLowerCase())).getHost().isAvailable()) {
client.sendPacket(new PacketStartServer(5, "That SubServer's Host is not available", (data.contains("id"))?data.getRawString("id"):null));
} else if (!((SubServer) servers.get(data.getRawString("server").toLowerCase())).getHost().isEnabled()) {
client.sendPacket(new PacketStartServer(6, "That SubServer's Host is not enabled", (data.contains("id"))?data.getRawString("id"):null));
} else if (!((SubServer) servers.get(data.getRawString("server").toLowerCase())).isEnabled()) {
client.sendPacket(new PacketStartServer(7, "That SubServer is not enabled", (data.contains("id"))?data.getRawString("id"):null));
} else if (((SubServer) servers.get(data.getRawString("server").toLowerCase())).isRunning()) {
client.sendPacket(new PacketStartServer(8, "That SubServer is already running", (data.contains("id")) ? data.getRawString("id") : null));
} else if (((SubServer) servers.get(data.getRawString("server").toLowerCase())).getCurrentIncompatibilities().size() != 0) {
if (!servers.keySet().contains(name.toLowerCase())) {
client.sendPacket(new PacketStartServer(3, tracker));
} else if (!(servers.get(name.toLowerCase()) instanceof SubServer)) {
client.sendPacket(new PacketStartServer(4, tracker));
} else if (!((SubServer) servers.get(name.toLowerCase())).getHost().isAvailable()) {
client.sendPacket(new PacketStartServer(5, tracker));
} else if (!((SubServer) servers.get(name.toLowerCase())).getHost().isEnabled()) {
client.sendPacket(new PacketStartServer(6, tracker));
} else if (!((SubServer) servers.get(name.toLowerCase())).isEnabled()) {
client.sendPacket(new PacketStartServer(7, tracker));
} else if (((SubServer) servers.get(name.toLowerCase())).isRunning()) {
client.sendPacket(new PacketStartServer(8, tracker));
} else if (((SubServer) servers.get(name.toLowerCase())).getCurrentIncompatibilities().size() != 0) {
String list = "";
for (SubServer server : ((SubServer) servers.get(data.getRawString("server").toLowerCase())).getCurrentIncompatibilities()) {
for (SubServer server : ((SubServer) servers.get(name.toLowerCase())).getCurrentIncompatibilities()) {
if (list.length() != 0) list += ", ";
list += server.getName();
}
client.sendPacket(new PacketStartServer(9, "Cannot start SubServer while these servers are running: " + list, (data.contains("id")) ? data.getRawString("id") : null));
client.sendPacket(new PacketStartServer(9, list, tracker));
} else {
if (((SubServer) servers.get(data.getRawString("server").toLowerCase())).start((data.contains("player"))?data.getUUID("player"):null)) {
client.sendPacket(new PacketStartServer(0, "Starting SubServer", (data.contains("id"))?data.getRawString("id"):null));
if (((SubServer) servers.get(name.toLowerCase())).start(player)) {
client.sendPacket(new PacketStartServer(0, tracker));
} else {
client.sendPacket(new PacketStartServer(1, "Couldn't start SubServer", (data.contains("id"))?data.getRawString("id"):null));
client.sendPacket(new PacketStartServer(1, tracker));
}
}
} catch (Throwable e) {
client.sendPacket(new PacketStartServer(2, e.getClass().getCanonicalName() + ": " + e.getMessage(), (data.contains("id"))?data.getRawString("id"):null));
client.sendPacket(new PacketStartServer(2, tracker));
e.printStackTrace();
}
}
@Override
public Version getVersion() {
return new Version("2.13b");
public int version() {
return 0x0001;
}
}

View File

@ -2,12 +2,11 @@ package net.ME1312.SubServers.Bungee.Network.Packet;
import net.ME1312.SubServers.Bungee.Host.Server;
import net.ME1312.SubServers.Bungee.Host.SubServer;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.SubServers.Bungee.Library.Version.Version;
import net.ME1312.SubServers.Bungee.Network.Client;
import net.ME1312.SubServers.Bungee.Network.PacketIn;
import net.ME1312.SubServers.Bungee.Network.PacketOut;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.SubData.Server.SubDataClient;
import net.ME1312.SubData.Server.Protocol.PacketObjectIn;
import net.ME1312.SubData.Server.Protocol.PacketObjectOut;
import net.ME1312.SubServers.Bungee.SubPlugin;
import java.util.Map;
@ -16,11 +15,10 @@ import java.util.UUID;
/**
* Stop Server Packet
*/
public class PacketStopServer implements PacketIn, PacketOut {
public class PacketStopServer implements PacketObjectIn<Integer>, PacketObjectOut<Integer> {
private SubPlugin plugin;
private int response;
private String message;
private String id;
private UUID tracker;
/**
* New PacketStopServer (In)
@ -36,87 +34,88 @@ public class PacketStopServer implements PacketIn, PacketOut {
* New PacketStopServer (Out)
*
* @param response Response ID
* @param message Message
* @param id Receiver ID
* @param tracker Receiver ID
*/
public PacketStopServer(int response, String message, String id) {
if (Util.isNull(response, message)) throw new NullPointerException();
public PacketStopServer(int response, UUID tracker) {
this.response = response;
this.message = message;
this.id = id;
this.tracker = tracker;
}
@Override
public YAMLSection generate() {
YAMLSection json = new YAMLSection();
if (id != null) json.set("id", id);
json.set("r", response);
json.set("m", message);
public ObjectMap<Integer> send(SubDataClient client) {
ObjectMap<Integer> json = new ObjectMap<Integer>();
if (tracker != null) json.set(0x0000, tracker);
json.set(0x0001, response);
return json;
}
@Override
public void execute(Client client, YAMLSection data) {
public void receive(SubDataClient client, ObjectMap<Integer> data) {
UUID tracker = (data.contains(0x0000)?data.getUUID(0x0000):null);
try {
String name = data.getRawString(0x0001);
boolean force = (data.contains(0x0002)?data.getBoolean(0x0002):false);
UUID player = (data.contains(0x0003)?data.getUUID(0x0003):null);
Map<String, Server> servers = plugin.api.getServers();
if (!data.getRawString("server").equals("*") && !servers.keySet().contains(data.getRawString("server").toLowerCase())) {
client.sendPacket(new PacketStopServer(3, "There is no server with that name", (data.contains("id"))?data.getRawString("id"):null));
} else if (!data.getRawString("server").equals("*") && !(servers.get(data.getRawString("server").toLowerCase()) instanceof SubServer)) {
client.sendPacket(new PacketStopServer(4, "That Server is not a SubServer", (data.contains("id"))?data.getRawString("id"):null));
} else if (!data.getRawString("server").equals("*") && !((SubServer) servers.get(data.getRawString("server").toLowerCase())).isRunning()) {
client.sendPacket(new PacketStopServer(5, "That SubServer is not running", (data.contains("id"))?data.getRawString("id"):null));
} else if (data.getRawString("server").equals("*")) {
if (!name.equals("*") && !servers.keySet().contains(name.toLowerCase())) {
client.sendPacket(new PacketStopServer(3, tracker));
} else if (!name.equals("*") && !(servers.get(name.toLowerCase()) instanceof SubServer)) {
client.sendPacket(new PacketStopServer(4, tracker));
} else if (!name.equals("*") && !((SubServer) servers.get(name.toLowerCase())).isRunning()) {
client.sendPacket(new PacketStopServer(5, tracker));
} else if (name.equals("*")) {
boolean sent = false;
if (data.contains("force") && data.getBoolean("force")) {
if (force) {
for (Server server : servers.values()) {
if (server instanceof SubServer && ((SubServer) server).isRunning()) {
if (((SubServer) server).terminate((data.contains("player"))?data.getUUID("player"):null)) {
if (((SubServer) server).terminate(player)) {
sent = true;
}
}
}
if (sent) {
client.sendPacket(new PacketStopServer(0, "Terminating SubServers", (data.contains("id"))?data.getRawString("id"):null));
client.sendPacket(new PacketStopServer(0, tracker));
} else {
client.sendPacket(new PacketStopServer(1, "Couldn't terminate SubServers", (data.contains("id"))?data.getRawString("id"):null));
client.sendPacket(new PacketStopServer(1, tracker));
}
} else {
for (Server server : servers.values()) {
if (server instanceof SubServer && ((SubServer) server).isRunning()) {
if (((SubServer) server).stop((data.contains("player"))?data.getUUID("player"):null)) {
if (((SubServer) server).stop(player)) {
sent = true;
}
}
}
if (sent) {
client.sendPacket(new PacketStopServer(0, "Stopping SubServers", (data.contains("id"))?data.getRawString("id"):null));
client.sendPacket(new PacketStopServer(0, tracker));
} else {
client.sendPacket(new PacketStopServer(1, "Couldn't stop SubServers", (data.contains("id"))?data.getRawString("id"):null));
client.sendPacket(new PacketStopServer(1, tracker));
}
}
} else {
if (data.contains("force") && data.getBoolean("force")) {
if (((SubServer) servers.get(data.getRawString("server").toLowerCase())).terminate((data.contains("player"))?data.getUUID("player"):null)) {
client.sendPacket(new PacketStopServer(0, "Terminating SubServer", (data.contains("id"))?data.getRawString("id"):null));
if (force) {
if (((SubServer) servers.get(name.toLowerCase())).terminate(player)) {
client.sendPacket(new PacketStopServer(0, tracker));
} else {
client.sendPacket(new PacketStopServer(1, "Couldn't terminate SubServer", (data.contains("id"))?data.getRawString("id"):null));
client.sendPacket(new PacketStopServer(1, tracker));
}
} else {
if (((SubServer) servers.get(data.getRawString("server").toLowerCase())).stop((data.contains("player"))?data.getUUID("player"):null)) {
client.sendPacket(new PacketStopServer(0, "Stopping SubServer", (data.contains("id"))?data.getRawString("id"):null));
if (((SubServer) servers.get(name.toLowerCase())).stop(player)) {
client.sendPacket(new PacketStopServer(0, tracker));
} else {
client.sendPacket(new PacketStopServer(1, "Couldn't stop SubServer", (data.contains("id"))?data.getRawString("id"):null));
client.sendPacket(new PacketStopServer(1, tracker));
}
}
}
} catch (Throwable e) {
client.sendPacket(new PacketStopServer(2, e.getClass().getCanonicalName() + ": " + e.getMessage(), (data.contains("id"))?data.getRawString("id"):null));
client.sendPacket(new PacketStopServer(2, tracker));
e.printStackTrace();
}
}
@Override
public Version getVersion() {
return new Version("2.11.0a");
public int version() {
return 0x0001;
}
}

View File

@ -1,34 +0,0 @@
package net.ME1312.SubServers.Bungee.Network;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Library.Version.Version;
/**
* PacketIn Layout Class
*/
public interface PacketIn {
/**
* Execute Incoming Packet
*
* @param client Client Accepting
* @param data Incoming Data
*/
void execute(Client client, YAMLSection data) throws Throwable;
/**
* Get Packet Version
*
* @return Packet Version
*/
Version getVersion();
/**
* Check Compatibility with oncoming packet
*
* @param version Version of oncoming packet
* @return Compatibility Status
*/
default boolean isCompatible(Version version) {
return getVersion().equals(version);
}
}

View File

@ -1,23 +0,0 @@
package net.ME1312.SubServers.Bungee.Network;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Library.Version.Version;
/**
* PacketOut Layout Class
*/
public interface PacketOut {
/**
* Generate Packet Contents
*
* @return Packet Contents
*/
YAMLSection generate() throws Throwable;
/**
* Get Packet Version
*
* @return Packet Version
*/
Version getVersion();
}

View File

@ -1,486 +0,0 @@
package net.ME1312.SubServers.Bungee.Network;
import com.dosse.upnp.UPnP;
import net.ME1312.SubServers.Bungee.Event.SubNetworkConnectEvent;
import net.ME1312.SubServers.Bungee.Event.SubNetworkDisconnectEvent;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Library.Exception.IllegalPacketException;
import net.ME1312.SubServers.Bungee.Library.NamedContainer;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.SubServers.Bungee.Library.Version.Version;
import net.ME1312.SubServers.Bungee.Network.Encryption.AES;
import net.ME1312.SubServers.Bungee.Network.Packet.*;
import net.ME1312.SubServers.Bungee.SubPlugin;
import org.msgpack.value.Value;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.net.*;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* SubDataServer Class
*/
public final class SubDataServer {
private static int MAX_QUEUE = 64;
private static HashMap<Class<? extends PacketOut>, NamedContainer<String, String>> pOut = new HashMap<Class<? extends PacketOut>, NamedContainer<String, String>>();
private static HashMap<String, HashMap<String, List<PacketIn>>> pIn = new HashMap<String, HashMap<String, List<PacketIn>>>();
private static HashMap<String, Cipher> ciphers = new HashMap<String, Cipher>();
private static List<String> allowedAddresses = new ArrayList<String>();
private static boolean defaults = false;
private HashMap<String, Client> clients = new HashMap<String, Client>();
private ServerSocket server;
private Cipher cipher;
protected SubPlugin plugin;
/**
* SubData Server Instance
*
* @param plugin SubPlugin
* @param port Port
* @param address Bind
* @param cipher Cipher (or null for none)
* @throws IOException
*/
public SubDataServer(SubPlugin plugin, int port, InetAddress address, Cipher cipher) throws IOException {
if (Util.isNull(plugin, port, MAX_QUEUE)) throw new NullPointerException();
if (address == null) {
server = new ServerSocket(port, MAX_QUEUE);
allowConnection("127.0.0.1");
} else {
server = new ServerSocket(port, MAX_QUEUE, address);
allowConnection(address.getHostAddress());
}
if (UPnP.isUPnPAvailable() && plugin.config.get().getSection("Settings").getSection("UPnP", new YAMLSection()).getBoolean("Forward-SubData", false)) UPnP.openPortTCP(port);
this.plugin = plugin;
this.cipher = (cipher != null)?cipher:new Cipher() {
@Override
public String getName() {
return "NONE";
}
@Override
public Value encrypt(String key, YAMLSection data) {
return data.msgPack();
}
@Override
@SuppressWarnings("unchecked")
public YAMLSection decrypt(String key, Value data) {
return new YAMLSection(data.asMapValue());
}
};
if (!defaults) loadDefaults();
}
static {
addCipher("AES", new AES(128));
addCipher("AES_128", new AES(128));
addCipher("AES_192", new AES(192));
addCipher("AES_256", new AES(256));
} private void loadDefaults() {
defaults = true;
plugin.getPluginManager().registerListener(null, new PacketOutRunEvent(plugin));
registerPacket(new PacketAuthorization(plugin), "SubData", "Authorization");
registerPacket(new PacketCommandServer(plugin), "SubServers", "CommandServer");
registerPacket(new PacketCreateServer(plugin), "SubServers", "CreateServer");
registerPacket(new PacketDownloadGroupInfo(plugin), "SubServers", "DownloadGroupInfo");
registerPacket(new PacketDownloadHostInfo(plugin), "SubServers", "DownloadHostInfo");
registerPacket(new PacketDownloadLang(plugin), "SubServers", "DownloadLang");
registerPacket(new PacketDownloadNetworkList(plugin), "SubServers", "DownloadNetworkList");
registerPacket(new PacketDownloadPlatformInfo(plugin), "SubServers", "DownloadPlatformInfo");
registerPacket(new PacketDownloadPlayerList(plugin), "SubServers", "DownloadPlayerList");
registerPacket(new PacketDownloadProxyInfo(plugin), "SubServers", "DownloadProxyInfo");
registerPacket(new PacketDownloadServerInfo(plugin), "SubServers", "DownloadServerInfo");
registerPacket(new PacketExAddServer(), "SubServers", "ExAddServer");
registerPacket(new PacketExConfigureHost(plugin), "SubServers", "ExConfigureHost");
registerPacket(new PacketExCreateServer(null), "SubServers", "ExCreateServer");
registerPacket(new PacketExDeleteServer(), "SubServers", "ExDeleteServer");
registerPacket(new PacketExRemoveServer(), "SubServers", "ExRemoveServer");
registerPacket(new PacketExUpdateServer(plugin), "SubServers", "ExUpdateServer");
registerPacket(new PacketInExLogMessage(), "SubServers", "ExLogMessage");
registerPacket(new PacketInExRequestQueue(plugin), "SubServers", "ExRequestQueue");
registerPacket(new PacketLinkExHost(plugin), "SubServers", "LinkExHost");
registerPacket(new PacketLinkProxy(plugin), "SubServers", "LinkProxy");
registerPacket(new PacketLinkServer(plugin), "SubServers", "LinkServer");
registerPacket(new PacketRestartServer(plugin), "SubServers", "RestartServer");
registerPacket(new PacketStartServer(plugin), "SubServers", "StartServer");
registerPacket(new PacketStopServer(plugin), "SubServers", "StopServer");
registerPacket(PacketAuthorization.class, "SubData", "Authorization");
registerPacket(PacketCommandServer.class, "SubServers", "CommandServer");
registerPacket(PacketCreateServer.class, "SubServers", "CreateServer");
registerPacket(PacketDownloadGroupInfo.class, "SubServers", "DownloadGroupInfo");
registerPacket(PacketDownloadHostInfo.class, "SubServers", "DownloadHostInfo");
registerPacket(PacketDownloadLang.class, "SubServers", "DownloadLang");
registerPacket(PacketDownloadNetworkList.class, "SubServers", "DownloadNetworkList");
registerPacket(PacketDownloadPlatformInfo.class, "SubServers", "DownloadPlatformInfo");
registerPacket(PacketDownloadPlayerList.class, "SubServers", "DownloadPlayerList");
registerPacket(PacketDownloadProxyInfo.class, "SubServers", "DownloadProxyInfo");
registerPacket(PacketDownloadServerInfo.class, "SubServers", "DownloadServerInfo");
registerPacket(PacketExAddServer.class, "SubServers", "ExAddServer");
registerPacket(PacketExConfigureHost.class, "SubServers", "ExConfigureHost");
registerPacket(PacketExCreateServer.class, "SubServers", "ExCreateServer");
registerPacket(PacketExDeleteServer.class, "SubServers", "ExDeleteServer");
registerPacket(PacketExRemoveServer.class, "SubServers", "ExRemoveServer");
registerPacket(PacketExUpdateServer.class, "SubServers", "ExUpdateServer");
registerPacket(PacketOutExUpdateWhitelist.class, "SubServers", "ExUpdateWhitelist");
registerPacket(PacketLinkExHost.class, "SubServers", "LinkExHost");
registerPacket(PacketLinkProxy.class, "SubServers", "LinkProxy");
registerPacket(PacketLinkServer.class, "SubServers", "LinkServer");
registerPacket(PacketOutRunEvent.class, "SubServers", "RunEvent");
registerPacket(PacketOutReload.class, "SubServers", "Reload");
registerPacket(PacketOutReset.class, "SubServers", "Reset");
registerPacket(PacketRestartServer.class, "SubServers", "RestartServer");
registerPacket(PacketStartServer.class, "SubServers", "StartServer");
registerPacket(PacketStopServer.class, "SubServers", "StopServer");
}
/**
* Gets the Server Socket
*
* @return Server Socket
*/
public ServerSocket getServer() {
return server;
}
/**
* Add a Cipher for use by SubData
*
* @param cipher Cipher to Add
* @param handle Handle to Bind
*/
public static void addCipher(String handle, Cipher cipher) {
if (Util.isNull(cipher)) throw new NullPointerException();
if (ciphers.keySet().contains(handle.toUpperCase().replace('-', '_').replace(' ', '_'))) throw new IllegalStateException("Cipher already exists: " + handle);
ciphers.put(handle.toUpperCase().replace('-', '_').replace(' ', '_'), cipher);
}
/**
* Gets the Ciphers
*
* @return Cipher Map
*/
public static Map<String, Cipher> getCiphers() {
return new TreeMap<>(ciphers);
}
/**
* Gets the Server's Cipher
*
* @return Cipher
*/
public Cipher getCipher() {
return cipher;
}
/**
* Gets a Cipher by Handle
*
* @param handle Handle
* @return Cipher
*/
public static Cipher getCipher(String handle) {
return getCiphers().get(handle.toUpperCase().replace('-', '_').replace(' ', '_'));
}
/**
* Add a Client to the Network
*
* @param socket Client to add
* @throws IOException
*/
public Client addClient(Socket socket) throws IOException {
if (Util.isNull(socket)) throw new NullPointerException();
if (checkConnection(socket.getInetAddress())) {
Client client = new Client(this, socket);
System.out.println("SubData > " + client.getAddress().toString() + " has connected");
clients.put(client.getAddress().toString(), client);
return client;
} else {
System.out.println("SubData > " + socket.getInetAddress().toString() + " attempted to connect, but isn't white-listed");
socket.close();
return null;
}
}
/**
* Grabs a Client from the Network
*
* @param socket Socket to search
* @return Client
*/
public Client getClient(Socket socket) {
if (Util.isNull(socket)) throw new NullPointerException();
return getClient(new InetSocketAddress(socket.getInetAddress(), socket.getPort()));
}
/**
* Grabs a Client from the Network
*
* @param address Address to search
* @return Client
*/
public Client getClient(InetSocketAddress address) {
if (Util.isNull(address)) throw new NullPointerException();
return getClient(address.toString());
}
/**
* Grabs a Client from the Network
*
* @param address Address to search
* @return Client
*/
public Client getClient(String address) {
if (Util.isNull(address)) throw new NullPointerException();
return clients.get(address);
}
/**
* Grabs all the Clients on the Network
*
* @return Client List
*/
public Collection<Client> getClients() {
return clients.values();
}
/**
* Remove a Client from the Network
*
* @param client Client to Kick
* @throws IOException
*/
public void removeClient(Client client) throws IOException {
if (Util.isNull(client)) throw new NullPointerException();
removeClient(client.getAddress());
}
/**
* Remove a Client from the Network
*
* @param address Address to Kick
* @throws IOException
*/
public void removeClient(InetSocketAddress address) throws IOException {
if (Util.isNull(address)) throw new NullPointerException();
removeClient(address.toString());
}
/**
* Remove a Client from the Network
*
* @param address Address to Kick
* @throws IOException
*/
public void removeClient(String address) throws IOException {
if (Util.isNull(address)) throw new NullPointerException();
if (clients.keySet().contains(address)) {
Client client = clients.get(address);
plugin.getPluginManager().callEvent(new SubNetworkDisconnectEvent(this, client));
clients.remove(address);
client.disconnect();
System.out.println("SubData > " + client.getAddress().toString() + " has disconnected");
}
}
/**
* Register PacketIn to the Network
*
* @param packet PacketIn to register
* @param channel Packet Channel
* @param handle Handle to Bind
*/
public static void registerPacket(PacketIn packet, String channel, String handle) {
if (Util.isNull(packet, channel, handle)) throw new NullPointerException();
HashMap<String, List<PacketIn>> map = (pIn.keySet().contains(channel.toLowerCase()))?pIn.get(channel.toLowerCase()):new HashMap<String, List<PacketIn>>();
List<PacketIn> list = (map.keySet().contains(handle))?map.get(handle):new ArrayList<PacketIn>();
if (!list.contains(packet)) {
list.add(packet);
map.put(handle, list);
pIn.put(channel.toLowerCase(), map);
}
}
/**
* Unregister PacketIn from the Network
*
* @param channel Packet Channel
* @param packet PacketIn to unregister
*/
public static void unregisterPacket(String channel, PacketIn packet) {
if (Util.isNull(channel, packet)) throw new NullPointerException();
if (pIn.keySet().contains(channel.toLowerCase())) {
List<String> search = new ArrayList<String>();
search.addAll(pIn.get(channel.toLowerCase()).keySet());
for (String handle : search) if (pIn.get(channel.toLowerCase()).get(handle).contains(packet)) {
List<PacketIn> list = pIn.get(channel.toLowerCase()).get(handle);
list.remove(packet);
if (list.isEmpty()) {
pIn.get(channel.toLowerCase()).remove(handle);
if (pIn.get(channel.toLowerCase()).isEmpty()) pIn.remove(channel.toLowerCase());
} else {
pIn.get(channel.toLowerCase()).put(handle, list);
}
}
}
}
/**
* Register PacketOut to the Network
*
* @param packet PacketOut to register
* @param channel Packet Channel
* @param handle Handle to bind
*/
public static void registerPacket(Class<? extends PacketOut> packet, String channel, String handle) {
if (Util.isNull(packet, channel, handle)) throw new NullPointerException();
pOut.put(packet, new NamedContainer<String, String>(channel.toLowerCase(), handle));
}
/**
* Unregister PacketOut to the Network
*
* @param channel Packet Channel
* @param packet PacketOut to unregister
*/
public static void unregisterPacket(String channel, Class<? extends PacketOut> packet) {
if (Util.isNull(channel, packet)) throw new NullPointerException();
if (pOut.keySet().contains(packet) && pOut.get(packet).name().equalsIgnoreCase(channel)) pOut.remove(packet);
}
/**
* Grab PacketIn Instances via handle
*
* @param channel Packet Channel
* @param handle Handle
* @return PacketIn
*/
public static List<? extends PacketIn> getPacket(String channel, String handle) {
if (Util.isNull(channel, handle)) throw new NullPointerException();
return new ArrayList<PacketIn>(pIn.get(channel.toLowerCase()).get(handle));
}
/**
* Broadcast a Packet to everything on the Network<br>
* <b>Warning:</b> There are usually different types of applications on the network at once, they may not recognise the same packet handles
*
* @param packet Packet to send
*/
public void broadcastPacket(PacketOut packet) {
if (Util.isNull(packet)) throw new NullPointerException();
List<Client> clients = new ArrayList<Client>();
clients.addAll(getClients());
for (Client client : clients) {
client.sendPacket(packet);
}
}
/**
* Allow Connections from an Address
*
* @param address Address to allow
*/
public static void allowConnection(String address) {
if (Util.isNull(address)) throw new NullPointerException();
if (!allowedAddresses.contains(address)) allowedAddresses.add(address);
}
private boolean checkConnection(InetAddress address) {
boolean whitelisted = false;
Matcher regaddress = Pattern.compile("^(\\d{1,3}).(\\d{1,3}).(\\d{1,3}).(\\d{1,3})$").matcher(address.getHostAddress());
if (regaddress.find()) {
for (String allowed : allowedAddresses) if (!whitelisted) {
Matcher regallowed = Pattern.compile("^(\\d{1,3}|%).(\\d{1,3}|%).(\\d{1,3}|%).(\\d{1,3}|%)$").matcher(allowed);
if (regallowed.find() && (
(regaddress.group(1).equals(regallowed.group(1)) || regallowed.group(1).equals("%")) &&
(regaddress.group(2).equals(regallowed.group(2)) || regallowed.group(2).equals("%")) &&
(regaddress.group(3).equals(regallowed.group(3)) || regallowed.group(3).equals("%")) &&
(regaddress.group(4).equals(regallowed.group(4)) || regallowed.group(4).equals("%"))
)) whitelisted = true;
}
}
SubNetworkConnectEvent event = new SubNetworkConnectEvent(this, address);
event.setCancelled(!whitelisted);
plugin.getPluginManager().callEvent(event);
return !event.isCancelled();
}
/**
* Deny Connections from an Address
*
* @param address Address to deny
*/
public static void denyConnection(String address) {
if (Util.isNull(address)) throw new NullPointerException();
allowedAddresses.remove(address);
}
/**
* Encode PacketOut
*
* @param packet PacketOut
* @return JSON Formatted Packet
* @throws IllegalPacketException
*/
protected static YAMLSection encodePacket(Client client, PacketOut packet) throws IllegalPacketException, InvocationTargetException {
YAMLSection section = new YAMLSection();
if (!pOut.keySet().contains(packet.getClass())) throw new IllegalPacketException(packet.getClass().getCanonicalName() + ": Unknown PacketOut Channel: " + packet.getClass().getCanonicalName());
if (packet.getVersion() == null) throw new NullPointerException(packet.getClass().getCanonicalName() + ": PacketOut getVersion() cannot be null: " + packet.getClass().getCanonicalName());
try {
YAMLSection contents = packet.generate();
section.set("n", pOut.get(packet.getClass()).name());
section.set("h", pOut.get(packet.getClass()).get());
section.set("v", packet.getVersion());
if (contents != null) section.set("c", contents);
return section;
} catch (Throwable e) {
throw new InvocationTargetException(e, packet.getClass().getCanonicalName() + ": Exception while encoding packet");
}
}
/**
* Decode PacketIn
*
* @param data Data to Decode
* @return PacketIn
* @throws IllegalPacketException
*/
protected static List<PacketIn> decodePacket(Client client, YAMLSection data) throws IllegalPacketException {
if (!data.contains("n") || !data.contains("h") || !data.contains("v")) throw new IllegalPacketException(client.getAddress().toString() + ": Unknown Packet Format: " + data.toString());
if (!pIn.keySet().contains(data.getRawString("n")) || !pIn.get(data.getRawString("n")).keySet().contains(data.getRawString("h"))) throw new IllegalPacketException("Unknown PacketIn Channel: " + data.getRawString("n") + ':' + data.getRawString("h"));
List<PacketIn> list = new ArrayList<PacketIn>();
for (PacketIn packet : pIn.get(data.getRawString("n")).get(data.getRawString("h"))) {
if (packet.isCompatible(data.getVersion("v"))) {
list.add(packet);
} else {
new IllegalPacketException(client.getAddress().toString() + ": Packet Version Mismatch in " + data.getRawString("h") + ": " + data.getRawString("v") + " =/= " + packet.getVersion().toFullString()).printStackTrace();
}
}
return list;
}
/**
* Drops All Connections and Stops the SubData Listener
*
* @throws IOException
*/
public void destroy() throws IOException {
while(clients.size() > 0) {
removeClient((Client) clients.values().toArray()[0]);
}
server.close();
if (UPnP.isUPnPAvailable() && UPnP.isMappedTCP(server.getLocalPort())) UPnP.closePortTCP(server.getLocalPort());
System.out.println("SubServers > The SubData Listener has been closed");
plugin.subdata = null;
}
}

View File

@ -0,0 +1,162 @@
package net.ME1312.SubServers.Bungee.Network;
import net.ME1312.Galaxi.Library.Version.Version;
import net.ME1312.SubData.Server.SubDataProtocol;
import net.ME1312.SubData.Server.SubDataServer;
import net.ME1312.SubServers.Bungee.Event.SubNetworkConnectEvent;
import net.ME1312.SubServers.Bungee.Event.SubNetworkDisconnectEvent;
import net.ME1312.SubServers.Bungee.Network.Packet.*;
import net.ME1312.SubServers.Bungee.SubAPI;
import net.ME1312.SubServers.Bungee.SubPlugin;
import net.md_5.bungee.api.ProxyServer;
import java.io.IOException;
import java.net.InetAddress;
import java.util.logging.Handler;
import java.util.logging.LogRecord;
import java.util.logging.Logger;
public class SubProtocol extends SubDataProtocol {
private static SubProtocol instance;
private SubProtocol(Logger logger) {
super(logger);
}
@SuppressWarnings("deprecation")
public static SubProtocol get() {
if (instance == null) {
Logger log = Logger.getAnonymousLogger();
log.setUseParentHandlers(false);
log.addHandler(new Handler() {
private boolean open = true;
@Override
public void publish(LogRecord record) {
if (open)
ProxyServer.getInstance().getLogger().log(record.getLevel(), "SubData > " + record.getMessage(), record.getParameters());
}
@Override
public void flush() {
}
@Override
public void close() throws SecurityException {
open = false;
}
});
instance = new SubProtocol(log);
SubPlugin plugin = SubAPI.getInstance().getInternals();
plugin.getPluginManager().registerListener(null, new PacketOutExRunEvent(plugin));
instance.setName("SubServers 2");
instance.setVersion(new Version("2.13.2a+"));
// 00-09: Object Link Packets
instance.registerPacket(0x0000, PacketLinkProxy.class);
instance.registerPacket(0x0001, PacketLinkExHost.class);
instance.registerPacket(0x0002, PacketLinkServer.class);
instance.registerPacket(0x0000, new PacketLinkProxy(plugin));
instance.registerPacket(0x0001, new PacketLinkExHost(plugin));
instance.registerPacket(0x0002, new PacketLinkServer(plugin));
// 10-29: Download Packets
instance.registerPacket(0x0010, PacketDownloadLang.class);
instance.registerPacket(0x0011, PacketDownloadPlatformInfo.class);
instance.registerPacket(0x0012, PacketDownloadProxyInfo.class);
instance.registerPacket(0x0013, PacketDownloadHostInfo.class);
instance.registerPacket(0x0014, PacketDownloadGroupInfo.class);
instance.registerPacket(0x0015, PacketDownloadServerInfo.class);
instance.registerPacket(0x0016, PacketDownloadPlayerList.class);
instance.registerPacket(0x0010, new PacketDownloadLang(plugin));
instance.registerPacket(0x0011, new PacketDownloadPlatformInfo(plugin));
instance.registerPacket(0x0012, new PacketDownloadProxyInfo(plugin));
instance.registerPacket(0x0013, new PacketDownloadHostInfo(plugin));
instance.registerPacket(0x0014, new PacketDownloadGroupInfo(plugin));
instance.registerPacket(0x0015, new PacketDownloadServerInfo(plugin));
instance.registerPacket(0x0016, new PacketDownloadPlayerList(plugin));
// 30-49: Control Packets
//instance.registerPacket(0x0030, PacketInReload.class); TODO
instance.registerPacket(0x0031, PacketCreateServer.class);
//instance.registerPacket(0x0032, PacketAddServer.class); TODO
instance.registerPacket(0x0033, PacketStartServer.class);
//instance.registerPacket(0x0034, PacketEditServer.class); TODO
instance.registerPacket(0x0035, PacketRestartServer.class);
instance.registerPacket(0x0036, PacketCommandServer.class);
instance.registerPacket(0x0037, PacketStopServer.class);
//instance.registerPacket(0x0038, PacketRemoveServer.class); TODO
//instance.registerPacket(0x0039, PacketDeleteServer.class); TODO
//instance.registerPacket(0x0030, new PacketInReload(plugin)); TODO
instance.registerPacket(0x0031, new PacketCreateServer(plugin));
//instance.registerPacket(0x0032, new PacketAddServer(plugin)); TODO
instance.registerPacket(0x0033, new PacketStartServer(plugin));
//instance.registerPacket(0x0034, new PacketEditServer(plugin)); TODO
instance.registerPacket(0x0035, new PacketRestartServer(plugin));
instance.registerPacket(0x0036, new PacketCommandServer(plugin));
instance.registerPacket(0x0037, new PacketStopServer(plugin));
//instance.registerPacket(0x0038, new PacketRemoveServer(plugin)); TODO
//instance.registerPacket(0x0039, new PacketDeleteServer(plugin)); TODO
// 50-69: 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, PacketExUpdateServer.class);
//instance.registerPacket(0x0056, PacketInExLogMessage.class);
instance.registerPacket(0x0057, PacketExDeleteServer.class);
instance.registerPacket(0x0058, PacketExRemoveServer.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 PacketExUpdateServer(plugin));
instance.registerPacket(0x0056, new PacketInExLogMessage());
instance.registerPacket(0x0057, new PacketExDeleteServer());
instance.registerPacket(0x0058, new PacketExRemoveServer());
// 70-79: External Misc Packets
instance.registerPacket(0x0070, PacketOutExRunEvent.class);
instance.registerPacket(0x0071, PacketOutExReset.class);
instance.registerPacket(0x0072, PacketOutExReload.class);
instance.registerPacket(0x0073, PacketOutExUpdateWhitelist.class);
//instance.registerPacket(0x0070, new PacketOutRunEvent());
//instance.registerPacket(0x0071, new PacketOutReset());
//instance.registerPacket(0x0072, new PacketOutReload());
//instance.registerPacket(0x0073, new PacketOutExUpdateWhitelist());
}
return instance;
}
@SuppressWarnings("deprecation")
@Override
public SubDataServer open(InetAddress address, int port, String cipher) throws IOException {
SubDataServer subdata = super.open(address, port, cipher);
SubPlugin plugin = SubAPI.getInstance().getInternals();
subdata.on.closed(server -> plugin.subdata = null);
subdata.on.connect(client -> {
if (!plugin.getPluginManager().callEvent(new SubNetworkConnectEvent(client.getServer(), client)).isCancelled()) {
client.on.closed(c -> plugin.getPluginManager().callEvent(new SubNetworkDisconnectEvent(c.get().getServer(), c.get(), c.name())));
return true;
} else return false;
});
return subdata;
}
}

View File

@ -1,18 +1,18 @@
package net.ME1312.SubServers.Bungee;
import com.google.common.collect.Range;
import net.ME1312.SubData.Server.DataServer;
import net.ME1312.SubServers.Bungee.Event.SubAddHostEvent;
import net.ME1312.SubServers.Bungee.Event.SubAddServerEvent;
import net.ME1312.SubServers.Bungee.Event.SubRemoveHostEvent;
import net.ME1312.SubServers.Bungee.Event.SubRemoveServerEvent;
import net.ME1312.SubServers.Bungee.Host.*;
import net.ME1312.SubServers.Bungee.Library.Container;
import net.ME1312.SubServers.Bungee.Library.Exception.InvalidHostException;
import net.ME1312.SubServers.Bungee.Library.NamedContainer;
import net.ME1312.SubServers.Bungee.Library.UniversalFile;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.SubServers.Bungee.Library.Version.Version;
import net.ME1312.SubServers.Bungee.Network.SubDataServer;
import net.ME1312.Galaxi.Library.NamedContainer;
import net.ME1312.Galaxi.Library.UniversalFile;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.Galaxi.Library.Version.Version;
import net.ME1312.SubData.Server.SubDataServer;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.protocol.ProtocolConstants;
@ -87,7 +87,7 @@ public final class SubAPI {
*
* @return SubData Network Manager
*/
public SubDataServer getSubDataNetwork() {
public DataServer getSubDataNetwork() {
return plugin.subdata;
}

View File

@ -3,11 +3,11 @@ package net.ME1312.SubServers.Bungee;
import com.google.gson.Gson;
import net.ME1312.SubServers.Bungee.Host.*;
import net.ME1312.SubServers.Bungee.Library.Compatibility.CommandX;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Library.NamedContainer;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.SubServers.Bungee.Library.Version.Version;
import net.ME1312.SubServers.Bungee.Network.ClientHandler;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.Galaxi.Library.NamedContainer;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.Galaxi.Library.Version.Version;
import net.ME1312.SubData.Server.ClientHandler;
import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.chat.ClickEvent;
@ -96,12 +96,12 @@ public final class SubCommand extends CommandX {
sender.sendMessage("");
new Thread(() -> {
try {
YAMLSection tags = new YAMLSection(new Gson().fromJson("{\"tags\":" + Util.readAll(new BufferedReader(new InputStreamReader(new URL("https://api.github.com/repos/ME1312/SubServers-2/git/refs/tags").openStream(), Charset.forName("UTF-8")))) + '}', Map.class));
ObjectMap<String> tags = new ObjectMap<String>(new Gson().fromJson("{\"tags\":" + Util.readAll(new BufferedReader(new InputStreamReader(new URL("https://api.github.com/repos/ME1312/SubServers-2/git/refs/tags").openStream(), Charset.forName("UTF-8")))) + '}', Map.class));
List<Version> versions = new LinkedList<Version>();
Version updversion = plugin.version;
int updcount = 0;
for (YAMLSection tag : tags.getSectionList("tags")) versions.add(Version.fromString(tag.getString("ref").substring(10)));
for (ObjectMap<String> tag : tags.getMapList("tags")) versions.add(Version.fromString(tag.getString("ref").substring(10)));
Collections.sort(versions);
for (Version version : versions) {
if (version.compareTo(updversion) > 0) {
@ -179,7 +179,7 @@ public final class SubCommand extends CommandX {
if (!(servers.get(name.toLowerCase()) instanceof SubServer)) {
message += ChatColor.WHITE;
} else if (((SubServer) server).isRunning()) {
if (((SubServer) server).getStopAction() == SubServer.StopAction.REMOVE_SERVER || ((SubServer) server).getStopAction() == SubServer.StopAction.DELETE_SERVER) {
if (((SubServer) server).getStopAction() == SubServer.StopAction.REMOVE_SERVER || ((SubServer) server).getStopAction() == SubServer.StopAction.RECYCLE_SERVER || ((SubServer) server).getStopAction() == SubServer.StopAction.DELETE_SERVER) {
message += ChatColor.AQUA;
} else {
message += ChatColor.GREEN;
@ -212,7 +212,7 @@ public final class SubCommand extends CommandX {
for (SubServer subserver : host.getSubServers().values()) {
if (i != 0) message += div;
if (subserver.isRunning()) {
if (subserver.getStopAction() == SubServer.StopAction.REMOVE_SERVER || subserver.getStopAction() == SubServer.StopAction.DELETE_SERVER) {
if (subserver.getStopAction() == SubServer.StopAction.REMOVE_SERVER || subserver.getStopAction() == SubServer.StopAction.RECYCLE_SERVER || subserver.getStopAction() == SubServer.StopAction.DELETE_SERVER) {
message += ChatColor.AQUA;
} else {
message += ChatColor.GREEN;
@ -551,7 +551,7 @@ public final class SubCommand extends CommandX {
sender.sendMessage("SubServers > The BungeeCord library provided does not support console sudo.");
}
} else if (args[0].equalsIgnoreCase("create")) {
if (args.length > 4) {
if (args.length > 3) {
if (plugin.api.getSubServers().keySet().contains(args[1].toLowerCase()) || SubCreator.isReserved(args[1])) {
sender.sendMessage("SubServers > There is already a SubServer with that name");
} else if (!plugin.hosts.keySet().contains(args[2].toLowerCase())) {
@ -564,15 +564,13 @@ public final class SubCommand extends CommandX {
sender.sendMessage("SubServers > There is no template with that name");
} else if (!plugin.hosts.get(args[2].toLowerCase()).getCreator().getTemplate(args[3]).isEnabled()) {
sender.sendMessage("SubServers > That Template is not enabled");
} else if (new Version("1.8").compareTo(new Version(args[4])) > 0) {
sender.sendMessage("SubServers > SubCreator cannot create servers before Minecraft 1.8");
} else if (args.length > 5 && (Util.isException(() -> Integer.parseInt(args[5])) || Integer.parseInt(args[5]) <= 0 || Integer.parseInt(args[5]) > 65535)) {
sender.sendMessage("SubServers > Invalid Port Number");
} else {
plugin.hosts.get(args[2].toLowerCase()).getCreator().create(args[1], plugin.hosts.get(args[2].toLowerCase()).getCreator().getTemplate(args[3]), new Version(args[4]), (args.length > 5)?Integer.parseInt(args[5]):null);
plugin.hosts.get(args[2].toLowerCase()).getCreator().create(args[1], plugin.hosts.get(args[2].toLowerCase()).getCreator().getTemplate(args[3]), (args.length > 4)?new Version(args[4]):null, (args.length > 5)?Integer.parseInt(args[5]):null);
}
} else {
sender.sendMessage("SubServers > Usage: " + label + " " + args[0].toLowerCase() + " <Name> <Host> <Template> <Version> [Port]");
sender.sendMessage("SubServers > Usage: " + label + " " + args[0].toLowerCase() + " <Name> <Host> <Template> [Version] [Port]");
}
} else if (args[0].equalsIgnoreCase("del") || args[0].equalsIgnoreCase("delete")) {
if (args.length > 1) {
@ -584,7 +582,7 @@ public final class SubCommand extends CommandX {
sender.sendMessage("SubServers > That Server is not a SubServer");
} else if (((SubServer) servers.get(args[1].toLowerCase())).isRunning()) {
sender.sendMessage("SubServers > That SubServer is still running");
} else if (!((SubServer) servers.get(args[1].toLowerCase())).getHost().deleteSubServer(args[1].toLowerCase())){
} else if (!((SubServer) servers.get(args[1].toLowerCase())).getHost().recycleSubServer(args[1].toLowerCase())){
System.out.println("SubServers > Couldn't remove server from memory.");
}
} catch (Exception e) {
@ -620,7 +618,7 @@ public final class SubCommand extends CommandX {
" Terminate Server: /sub kill <SubServer>",
" Command Server: /sub cmd <SubServer> <Command> [Args...]",
" Sudo Server: /sub sudo <SubServer>",
" Create Server: /sub create <Name> <Host> <Template> <Version> [Port]",
" Create Server: /sub create <Name> <Host> <Template> [Version] [Port]",
" Remove Server: /sub delete <SubServer>",
"",
" To see BungeeCord supplied commands, please visit:",

View File

@ -3,22 +3,26 @@ package net.ME1312.SubServers.Bungee;
import com.dosse.upnp.UPnP;
import com.google.common.collect.Range;
import com.google.gson.Gson;
import net.ME1312.SubServers.Bungee.Event.SubAddProxyEvent;
import net.ME1312.SubServers.Bungee.Event.SubRemoveProxyEvent;
import net.ME1312.SubServers.Bungee.Event.SubStoppedEvent;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.Galaxi.Library.NamedContainer;
import net.ME1312.Galaxi.Library.UniversalFile;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.SubData.Server.*;
import net.ME1312.SubData.Server.Encryption.AES;
import net.ME1312.SubData.Server.Encryption.RSA;
import net.ME1312.SubServers.Bungee.Event.*;
import net.ME1312.SubServers.Bungee.Host.*;
import net.ME1312.SubServers.Bungee.Library.*;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLConfig;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.Galaxi.Library.Config.YAMLConfig;
import net.ME1312.Galaxi.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Library.Exception.InvalidHostException;
import net.ME1312.SubServers.Bungee.Library.Exception.InvalidServerException;
import net.ME1312.SubServers.Bungee.Library.Version.Version;
import net.ME1312.SubServers.Bungee.Network.Cipher;
import net.ME1312.SubServers.Bungee.Network.ClientHandler;
import net.ME1312.SubServers.Bungee.Network.Packet.PacketOutReload;
import net.ME1312.SubServers.Bungee.Network.SubDataServer;
import net.ME1312.Galaxi.Library.Version.Version;
import net.ME1312.SubServers.Bungee.Network.Packet.PacketOutExReload;
import net.ME1312.SubServers.Bungee.Network.SubProtocol;
import net.md_5.bungee.BungeeCord;
import net.md_5.bungee.BungeeServerInfo;
import net.md_5.bungee.api.ChatColor;
import net.md_5.bungee.api.ServerPing;
import net.md_5.bungee.api.chat.TextComponent;
import net.md_5.bungee.api.config.ListenerInfo;
@ -32,10 +36,10 @@ import java.lang.reflect.InvocationTargetException;
import java.math.BigInteger;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.SocketException;
import java.net.URL;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.security.SecureRandom;
import java.text.DecimalFormat;
import java.util.*;
import java.util.concurrent.TimeUnit;
@ -57,6 +61,7 @@ public final class SubPlugin extends BungeeCord implements Listener {
private YAMLConfig bungeeconfig;
public YAMLConfig langconfig;
public final SubAPI api = new SubAPI(this);
public SubDataProtocol subprotocol;
public SubDataServer subdata = null;
public SubServer sudo = null;
public static final Version version = Version.fromString("2.13.2d");
@ -89,7 +94,7 @@ public final class SubPlugin extends BungeeCord implements Listener {
if (!(new UniversalFile(dir, "config.yml").exists())) {
Util.copyFromJar(SubPlugin.class.getClassLoader(), "net/ME1312/SubServers/Bungee/Library/Files/config.yml", new UniversalFile(dir, "config.yml").getPath());
System.out.println("SubServers > Created ~/SubServers/config.yml");
} else if (((new YAMLConfig(new UniversalFile(dir, "config.yml"))).get().getSection("Settings").getVersion("Version", new Version(0))).compareTo(new Version("2.11.2a+")) != 0) {
} else if (((new YAMLConfig(new UniversalFile(dir, "config.yml"))).get().getMap("Settings").getVersion("Version", new Version(0))).compareTo(new Version("2.11.2a+")) != 0) {
Files.move(new UniversalFile(dir, "config.yml").toPath(), new UniversalFile(dir, "config.old" + Math.round(Math.random() * 100000) + ".yml").toPath());
Util.copyFromJar(SubPlugin.class.getClassLoader(), "net/ME1312/SubServers/Bungee/Library/Files/config.yml", new UniversalFile(dir, "config.yml").getPath());
@ -191,15 +196,17 @@ public final class SubPlugin extends BungeeCord implements Listener {
getPluginManager().registerListener(null, this);
System.out.println("SubServers > Pre-Parsing Config...");
for (String name : config.get().getSection("Servers").getKeys()) {
for (String name : config.get().getMap("Servers").getKeys()) {
try {
if (Util.getCaseInsensitively(config.get().getSection("Hosts").get(), config.get().getSection("Servers").getSection(name).getString("Host")) == null) throw new InvalidServerException("There is no host with this name: " + config.get().getSection("Servers").getSection(name).getString("Host"));
legServers.put(name, new BungeeServerInfo(name, new InetSocketAddress(InetAddress.getByName((String) ((Map<String, ?>) Util.getCaseInsensitively(config.get().getSection("Hosts").get(), config.get().getSection("Servers").getSection(name).getString("Host"))).get("Address")), config.get().getSection("Servers").getSection(name).getInt("Port")), config.get().getSection("Servers").getSection(name).getColoredString("Motd", '&'), config.get().getSection("Servers").getSection(name).getBoolean("Restricted")));
if (Util.getCaseInsensitively(config.get().getMap("Hosts").get(), config.get().getMap("Servers").getMap(name).getString("Host")) == null) throw new InvalidServerException("There is no host with this name: " + config.get().getMap("Servers").getMap(name).getString("Host"));
legServers.put(name, new BungeeServerInfo(name, new InetSocketAddress(InetAddress.getByName((String) ((Map<String, ?>) Util.getCaseInsensitively(config.get().getMap("Hosts").get(), config.get().getMap("Servers").getMap(name).getString("Host"))).get("Address")), config.get().getMap("Servers").getMap(name).getInt("Port")),
ChatColor.translateAlternateColorCodes('&', config.get().getMap("Servers").getMap(name).getString("Motd")), config.get().getMap("Servers").getMap(name).getBoolean("Restricted")));
} catch (Exception e) {
e.printStackTrace();
}
}
subprotocol = SubProtocol.get();
System.out.println("SubServers > Loading BungeeCord Libraries...");
}
@ -214,7 +221,7 @@ public final class SubPlugin extends BungeeCord implements Listener {
reload();
if (UPnP.isUPnPAvailable()) {
if (config.get().getSection("Settings").getSection("UPnP", new YAMLSection()).getBoolean("Forward-Proxy", true)) for (ListenerInfo listener : getConfig().getListeners()) {
if (config.get().getMap("Settings").getMap("UPnP", new ObjectMap<String>()).getBoolean("Forward-Proxy", true)) for (ListenerInfo listener : getConfig().getListeners()) {
UPnP.openPortTCP(listener.getHost().getPort());
}
} else {
@ -247,34 +254,62 @@ public final class SubPlugin extends BungeeCord implements Listener {
YAMLSection prevconfig = config.get();
config.reload();
langconfig.reload();
for (String key : langconfig.get().getSection("Lang").getKeys())
api.setLang("SubServers", key, langconfig.get().getSection("Lang").getColoredString(key, '&'));
for (String key : langconfig.get().getMap("Lang").getKeys())
api.setLang("SubServers", key, ChatColor.translateAlternateColorCodes('&', langconfig.get().getMap("Lang").getString(key)));
if (subdata == null || // SubData Server must be reset
!config.get().getSection("Settings").getSection("SubData").getRawString("Address", "127.0.0.1:4391").equals(prevconfig.getSection("Settings").getSection("SubData").getRawString("Address", "127.0.0.1:4391")) ||
!config.get().getSection("Settings").getSection("SubData").getRawString("Encryption", "NONE").equals(prevconfig.getSection("Settings").getSection("SubData").getRawString("Encryption", "NONE"))
!config.get().getMap("Settings").getMap("SubData").getRawString("Address", "127.0.0.1:4391").equals(prevconfig.getMap("Settings").getMap("SubData").getRawString("Address", "127.0.0.1:4391")) ||
!config.get().getMap("Settings").getMap("SubData").getRawString("Encryption", "NONE").equals(prevconfig.getMap("Settings").getMap("SubData").getRawString("Encryption", "NONE"))
) {
if (subdata != null) subdata.destroy();
if (subdata != null) {
subdata.close();
Util.isException(subdata::waitFor);
}
Cipher cipher = null;
if (!config.get().getSection("Settings").getSection("SubData").getRawString("Encryption", "NONE").equalsIgnoreCase("NONE")) {
if (config.get().getSection("Settings").getSection("SubData").getString("Password", "").length() == 0) {
System.out.println("SubData > Cannot encrypt connection without a password");
} else if (!SubDataServer.getCiphers().keySet().contains(config.get().getSection("Settings").getSection("SubData").getRawString("Encryption").toUpperCase().replace('-', '_').replace(' ', '_'))) {
System.out.println("SubData > Unknown encryption type: " + config.get().getSection("Settings").getSection("SubData").getRawString("Encryption"));
} else {
cipher = SubDataServer.getCipher(config.get().getSection("Settings").getSection("SubData").getRawString("Encryption"));
subprotocol.unregisterCipher("AES");
subprotocol.unregisterCipher("AES-128");
subprotocol.unregisterCipher("AES-192");
subprotocol.unregisterCipher("AES-256");
subprotocol.unregisterCipher("RSA");
String cipher = config.get().getMap("Settings").getMap("SubData").getRawString("Encryption", "NULL");
String[] ciphers = (cipher.contains("/"))?cipher.split("/"):new String[]{cipher};
if (ciphers[0].equals("AES") || ciphers[0].equals("AES-128") || ciphers[0].equals("AES-192") || ciphers[0].equals("AES-256")) {
if (config.get().getMap("Settings").getMap("SubData").getRawString("Password", "").length() == 0) {
byte[] bytes = new byte[32];
new SecureRandom().nextBytes(bytes);
String random = Base64.getUrlEncoder().withoutPadding().encodeToString(bytes);
if (random.length() > bytes.length) random = random.substring(0, bytes.length);
config.get().getMap("Settings").getMap("SubData").set("Password", random);
config.save();
}
subprotocol.registerCipher("AES", new AES(128, config.get().getMap("Settings").getMap("SubData").getRawString("Password")));
subprotocol.registerCipher("AES-128", new AES(128, config.get().getMap("Settings").getMap("SubData").getRawString("Password")));
subprotocol.registerCipher("AES-192", new AES(192, config.get().getMap("Settings").getMap("SubData").getRawString("Password")));
subprotocol.registerCipher("AES-256", new AES(256, config.get().getMap("Settings").getMap("SubData").getRawString("Password")));
System.out.println("SubData > Encrypting SubData with AES:");
System.out.println("SubData > Use the password in config.yml to allow clients to connect");
} else if (ciphers[0].equals("RSA") || ciphers[0].equals("RSA-2048") || ciphers[0].equals("RSA-3072") || ciphers[0].equals("RSA-4096")) {
try {
int length = (ciphers[0].contains("-"))?Integer.parseInt(ciphers[0].split("-")[1]):2048;
subprotocol.registerCipher("RSA", new RSA(length, new UniversalFile("SubServers:Cache:private.rsa.key"), new UniversalFile("SubServers:subdata.rsa.key")));
cipher = "RSA" + cipher.substring(ciphers[0].length());
System.out.println("SubData > Encrypting SubData with RSA:");
System.out.println("SubData > Copy your subdata.rsa.key to clients to allow them to connect");
} catch (Exception e) {
e.printStackTrace();
}
}
subdata = new SubDataServer(this, Integer.parseInt(config.get().getSection("Settings").getSection("SubData").getRawString("Address", "127.0.0.1:4391").split(":")[1]),
(config.get().getSection("Settings").getSection("SubData").getRawString("Address", "127.0.0.1:4391").split(":")[0].equals("0.0.0.0"))?null:InetAddress.getByName(config.get().getSection("Settings").getSection("SubData").getRawString("Address", "127.0.0.1:4391").split(":")[0]),
cipher);
System.out.println("SubServers > SubData Direct Listening on " + subdata.getServer().getLocalSocketAddress().toString());
loop();
System.out.println("SubData > ");
subdata = subprotocol.open((config.get().getMap("Settings").getMap("SubData").getRawString("Address", "127.0.0.1:4391").split(":")[0].equals("0.0.0.0"))?null:InetAddress.getByName(config.get().getMap("Settings").getMap("SubData").getRawString("Address", "127.0.0.1:4391").split(":")[0]),
Integer.parseInt(config.get().getMap("Settings").getMap("SubData").getRawString("Address", "127.0.0.1:4391").split(":")[1]), cipher);
} // Add new entries to Allowed-Connections
for (String s : config.get().getSection("Settings").getSection("SubData").getStringList("Allowed-Connections", new ArrayList<String>())) {
for (String s : config.get().getMap("Settings").getMap("SubData").getStringList("Allowed-Connections", new ArrayList<String>())) {
try {
SubDataServer.allowConnection(s);
subdata.whitelist(s);
} catch (Exception e) {
e.printStackTrace();
}
@ -310,33 +345,33 @@ public final class SubPlugin extends BungeeCord implements Listener {
int hosts = 0;
System.out.println("SubServers > "+((status)?"Rel":"L")+"oading Hosts...");
for (String name : config.get().getSection("Hosts").getKeys()) {
for (String name : config.get().getMap("Hosts").getKeys()) {
if (!ukeys.contains(name.toLowerCase())) try {
if (!hostDrivers.keySet().contains(config.get().getSection("Hosts").getSection(name).getRawString("Driver").toUpperCase().replace('-', '_').replace(' ', '_'))) throw new InvalidHostException("Invalid Driver for host: " + name);
if (!hostDrivers.keySet().contains(config.get().getMap("Hosts").getMap(name).getRawString("Driver").toUpperCase().replace('-', '_').replace(' ', '_'))) throw new InvalidHostException("Invalid Driver for host: " + name);
Host host = this.hosts.get(name.toLowerCase());
if (host == null || // Host must be reset
!hostDrivers.get(config.get().getSection("Hosts").getSection(name).getRawString("Driver").toUpperCase().replace('-', '_').replace(' ', '_')).equals(host.getClass()) ||
!config.get().getSection("Hosts").getSection(name).getRawString("Address").equals(host.getAddress().getHostAddress()) ||
!config.get().getSection("Hosts").getSection(name).getRawString("Directory").equals(host.getPath()) ||
!config.get().getSection("Hosts").getSection(name).getRawString("Git-Bash").equals(host.getCreator().getBashDirectory())
!hostDrivers.get(config.get().getMap("Hosts").getMap(name).getRawString("Driver").toUpperCase().replace('-', '_').replace(' ', '_')).equals(host.getClass()) ||
!config.get().getMap("Hosts").getMap(name).getRawString("Address").equals(host.getAddress().getHostAddress()) ||
!config.get().getMap("Hosts").getMap(name).getRawString("Directory").equals(host.getPath()) ||
!config.get().getMap("Hosts").getMap(name).getRawString("Git-Bash").equals(host.getCreator().getBashDirectory())
) {
if (host != null) api.forceRemoveHost(name);
host = api.addHost(config.get().getSection("Hosts").getSection(name).getRawString("Driver").toLowerCase(), name, config.get().getSection("Hosts").getSection(name).getBoolean("Enabled"),
Range.closed(Integer.parseInt(config.get().getSection("Hosts").getSection(name).getRawString("Port-Range", "25500-25559").split("-")[0]), Integer.parseInt(config.get().getSection("Hosts").getSection(name).getRawString("Port-Range", "25500-25559").split("-")[1])),
config.get().getSection("Hosts").getSection(name).getBoolean("Log-Creator", true), InetAddress.getByName(config.get().getSection("Hosts").getSection(name).getRawString("Address")),
config.get().getSection("Hosts").getSection(name).getRawString("Directory"), config.get().getSection("Hosts").getSection(name).getRawString("Git-Bash"));
host = api.addHost(config.get().getMap("Hosts").getMap(name).getRawString("Driver").toLowerCase(), name, config.get().getMap("Hosts").getMap(name).getBoolean("Enabled"),
Range.closed(Integer.parseInt(config.get().getMap("Hosts").getMap(name).getRawString("Port-Range", "25500-25559").split("-")[0]), Integer.parseInt(config.get().getMap("Hosts").getMap(name).getRawString("Port-Range", "25500-25559").split("-")[1])),
config.get().getMap("Hosts").getMap(name).getBoolean("Log-Creator", true), InetAddress.getByName(config.get().getMap("Hosts").getMap(name).getRawString("Address")),
config.get().getMap("Hosts").getMap(name).getRawString("Directory"), config.get().getMap("Hosts").getMap(name).getRawString("Git-Bash"));
} else { // Host wasn't reset, so check for these changes
if (config.get().getSection("Hosts").getSection(name).getBoolean("Enabled") != host.isEnabled())
host.setEnabled(config.get().getSection("Hosts").getSection(name).getBoolean("Enabled"));
if (!config.get().getSection("Hosts").getSection(name).getRawString("Port-Range", "25500-25559").equals(prevconfig.getSection("Hosts", new YAMLSection()).getSection(name, new YAMLSection()).getRawString("Port-Range", "25500-25559")))
host.getCreator().setPortRange(Range.closed(Integer.parseInt(config.get().getSection("Hosts").getSection(name).getRawString("Port-Range", "25500-25559").split("-")[0]), Integer.parseInt(config.get().getSection("Hosts").getSection(name).getRawString("Port-Range", "25500-25559").split("-")[1])));
if (config.get().getSection("Hosts").getSection(name).getBoolean("Log-Creator", true) != host.getCreator().isLogging())
host.getCreator().setLogging(config.get().getSection("Hosts").getSection(name).getBoolean("Log-Creator", true));
if (config.get().getMap("Hosts").getMap(name).getBoolean("Enabled") != host.isEnabled())
host.setEnabled(config.get().getMap("Hosts").getMap(name).getBoolean("Enabled"));
if (!config.get().getMap("Hosts").getMap(name).getRawString("Port-Range", "25500-25559").equals(prevconfig.getMap("Hosts", new ObjectMap<String>()).getMap(name, new ObjectMap<String>()).getRawString("Port-Range", "25500-25559")))
host.getCreator().setPortRange(Range.closed(Integer.parseInt(config.get().getMap("Hosts").getMap(name).getRawString("Port-Range", "25500-25559").split("-")[0]), Integer.parseInt(config.get().getMap("Hosts").getMap(name).getRawString("Port-Range", "25500-25559").split("-")[1])));
if (config.get().getMap("Hosts").getMap(name).getBoolean("Log-Creator", true) != host.getCreator().isLogging())
host.getCreator().setLogging(config.get().getMap("Hosts").getMap(name).getBoolean("Log-Creator", true));
} // Check for other changes
if (config.get().getSection("Hosts").getSection(name).getKeys().contains("Display") && ((config.get().getSection("Hosts").getSection(name).getString("Display").length() == 0 && !host.getDisplayName().equals(host.getName())) || !config.get().getSection("Hosts").getSection(name).getString("Display").equals(host.getDisplayName())))
host.setDisplayName(config.get().getSection("Hosts").getSection(name).getString("Display"));
if (config.get().getSection("Hosts").getSection(name).getKeys().contains("Extra"))
for (String extra : config.get().getSection("Hosts").getSection(name).getSection("Extra").getKeys()) host.addExtra(extra, config.get().getSection("Hosts").getSection(name).getSection("Extra").getObject(extra));
if (config.get().getMap("Hosts").getMap(name).getKeys().contains("Display") && ((config.get().getMap("Hosts").getMap(name).getString("Display").length() == 0 && !host.getDisplayName().equals(host.getName())) || !config.get().getMap("Hosts").getMap(name).getString("Display").equals(host.getDisplayName())))
host.setDisplayName(config.get().getMap("Hosts").getMap(name).getString("Display"));
if (config.get().getMap("Hosts").getMap(name).getKeys().contains("Extra"))
for (String extra : config.get().getMap("Hosts").getMap(name).getMap("Extra").getKeys()) host.addExtra(extra, config.get().getMap("Hosts").getMap(name).getMap("Extra").getObject(extra));
ukeys.add(name.toLowerCase());
hosts++;
} catch (Exception e) {
@ -348,35 +383,35 @@ public final class SubPlugin extends BungeeCord implements Listener {
int servers = 0;
System.out.println("SubServers > "+((status)?"Rel":"L")+"oading Servers...");
bungeeconfig.reload();
for (String name : bungeeconfig.get().getSection("servers").getKeys()) {
for (String name : bungeeconfig.get().getMap("servers").getKeys()) {
if (!ukeys.contains(name.toLowerCase())) try {
Server server = api.getServer(name);
if (server == null || !(server instanceof SubServer)) {
if (server == null || // Server must be reset
bungeeconfig.get().getSection("servers").getSection(name).getRawString("address").equals(server.getAddress().getAddress().getHostAddress() + ':' + server.getAddress().getPort())
bungeeconfig.get().getMap("servers").getMap(name).getRawString("address").equals(server.getAddress().getAddress().getHostAddress() + ':' + server.getAddress().getPort())
) {
if (server != null) api.forceRemoveServer(name);
server = api.addServer(name, InetAddress.getByName(bungeeconfig.get().getSection("servers").getSection(name).getRawString("address").split(":")[0]),
Integer.parseInt(bungeeconfig.get().getSection("servers").getSection(name).getRawString("address").split(":")[1]), bungeeconfig.get().getSection("servers").getSection(name).getColoredString("motd", '&'),
bungeeconfig.get().getSection("servers").getSection(name).getBoolean("hidden", false), bungeeconfig.get().getSection("servers").getSection(name).getBoolean("restricted"));
server = api.addServer(name, InetAddress.getByName(bungeeconfig.get().getMap("servers").getMap(name).getRawString("address").split(":")[0]),
Integer.parseInt(bungeeconfig.get().getMap("servers").getMap(name).getRawString("address").split(":")[1]), ChatColor.translateAlternateColorCodes('&', bungeeconfig.get().getMap("servers").getMap(name).getString("motd")),
bungeeconfig.get().getMap("servers").getMap(name).getBoolean("hidden", false), bungeeconfig.get().getMap("servers").getMap(name).getBoolean("restricted"));
} else { // Server wasn't reset, so check for these changes
if (!bungeeconfig.get().getSection("servers").getSection(name).getColoredString("motd", '&').equals(server.getMotd()))
server.setMotd(bungeeconfig.get().getSection("servers").getSection(name).getColoredString("motd", '&'));
if (bungeeconfig.get().getSection("servers").getSection(name).getBoolean("hidden", false) != server.isHidden())
server.setHidden(bungeeconfig.get().getSection("servers").getSection(name).getBoolean("hidden", false));
if (bungeeconfig.get().getSection("servers").getSection(name).getBoolean("restricted") != server.isRestricted())
server.setRestricted(bungeeconfig.get().getSection("servers").getSection(name).getBoolean("restricted"));
if (!ChatColor.translateAlternateColorCodes('&', bungeeconfig.get().getMap("servers").getMap(name).getString("motd")).equals(server.getMotd()))
server.setMotd(ChatColor.translateAlternateColorCodes('&', bungeeconfig.get().getMap("servers").getMap(name).getString("motd")));
if (bungeeconfig.get().getMap("servers").getMap(name).getBoolean("hidden", false) != server.isHidden())
server.setHidden(bungeeconfig.get().getMap("servers").getMap(name).getBoolean("hidden", false));
if (bungeeconfig.get().getMap("servers").getMap(name).getBoolean("restricted") != server.isRestricted())
server.setRestricted(bungeeconfig.get().getMap("servers").getMap(name).getBoolean("restricted"));
} // Check for other changes
if (bungeeconfig.get().getSection("servers").getSection(name).getKeys().contains("display") && ((bungeeconfig.get().getSection("servers").getSection(name).getRawString("display").length() == 0 && !server.getDisplayName().equals(server.getName())) || !bungeeconfig.get().getSection("servers").getSection(name).getRawString("display").equals(server.getDisplayName())))
server.setDisplayName(bungeeconfig.get().getSection("servers").getSection(name).getString("display"));
if (bungeeconfig.get().getSection("servers").getSection(name).getKeys().contains("group")) {
if (bungeeconfig.get().getMap("servers").getMap(name).getKeys().contains("display") && ((bungeeconfig.get().getMap("servers").getMap(name).getRawString("display").length() == 0 && !server.getDisplayName().equals(server.getName())) || !bungeeconfig.get().getMap("servers").getMap(name).getRawString("display").equals(server.getDisplayName())))
server.setDisplayName(bungeeconfig.get().getMap("servers").getMap(name).getString("display"));
if (bungeeconfig.get().getMap("servers").getMap(name).getKeys().contains("group")) {
for (String group : server.getGroups()) server.removeGroup(group);
for (String group : bungeeconfig.get().getSection("servers").getSection(name).getStringList("group")) server.addGroup(group);
for (String group : bungeeconfig.get().getMap("servers").getMap(name).getStringList("group")) server.addGroup(group);
}
if (bungeeconfig.get().getSection("servers").getSection(name).getKeys().contains("extra"))
for (String extra : config.get().getSection("servers").getSection(name).getSection("extra").getKeys()) server.addExtra(extra, config.get().getSection("servers").getSection(name).getSection("extra").getObject(extra));
if (bungeeconfig.get().getMap("servers").getMap(name).getKeys().contains("extra"))
for (String extra : config.get().getMap("servers").getMap(name).getMap("extra").getKeys()) server.addExtra(extra, config.get().getMap("servers").getMap(name).getMap("extra").getObject(extra));
if (server.getSubData() != null)
server.getSubData().sendPacket(new PacketOutReload(null));
((SubDataClient) server.getSubData()).sendPacket(new PacketOutExReload(null));
ukeys.add(name.toLowerCase());
servers++;
}
@ -400,43 +435,43 @@ public final class SubPlugin extends BungeeCord implements Listener {
}, "SubServers.Bungee::System_Shutdown"));
running = true;
List<String> autorun = new LinkedList<String>();
for (String name : config.get().getSection("Servers").getKeys()) {
for (String name : config.get().getMap("Servers").getKeys()) {
if (!ukeys.contains(name.toLowerCase())) try {
if (!this.hosts.keySet().contains(config.get().getSection("Servers").getSection(name).getString("Host").toLowerCase())) throw new InvalidServerException("There is no host with this name: " + config.get().getSection("Servers").getSection(name).getString("Host"));
if (!this.hosts.keySet().contains(config.get().getMap("Servers").getMap(name).getString("Host").toLowerCase())) throw new InvalidServerException("There is no host with this name: " + config.get().getMap("Servers").getMap(name).getString("Host"));
if (exServers.keySet().contains(name.toLowerCase())) {
exServers.remove(name.toLowerCase());
servers--;
}
SubServer server = api.getSubServer(name);
if (server != null && server.isEditable()) { // Server can edit() (May be reset depending on change severity)
YAMLSection edits = new YAMLSection();
if (config.get().getSection("Servers").getSection(name).getBoolean("Enabled") != server.isEnabled())
edits.set("enabled", config.get().getSection("Servers").getSection(name).getBoolean("Enabled"));
if (config.get().getSection("Servers").getSection(name).getKeys().contains("Display") && ((config.get().getSection("Servers").getSection(name).getRawString("Display").length() == 0 && !server.getDisplayName().equals(server.getName())) || !config.get().getSection("Servers").getSection(name).getRawString("Display").equals(server.getDisplayName())))
edits.set("display", config.get().getSection("Servers").getSection(name).getRawString("Display"));
if (!config.get().getSection("Servers").getSection(name).getString("Host").equalsIgnoreCase(server.getHost().getName()))
edits.set("host", config.get().getSection("Servers").getSection(name).getRawString("Host"));
if (!config.get().getSection("Servers").getSection(name).getStringList("Group").equals(server.getGroups()))
edits.set("group", config.get().getSection("Servers").getSection(name).getRawStringList("Group"));
if (config.get().getSection("Servers").getSection(name).getInt("Port") != server.getAddress().getPort())
edits.set("port", config.get().getSection("Servers").getSection(name).getInt("Port"));
if (!config.get().getSection("Servers").getSection(name).getColoredString("Motd", '&').equals(server.getMotd()))
edits.set("motd", config.get().getSection("Servers").getSection(name).getRawString("Motd"));
if (config.get().getSection("Servers").getSection(name).getBoolean("Log") != server.isLogging())
edits.set("log", config.get().getSection("Servers").getSection(name).getBoolean("Log"));
if (!config.get().getSection("Servers").getSection(name).getRawString("Directory").equals(server.getPath()))
edits.set("dir", config.get().getSection("Servers").getSection(name).getRawString("Directory"));
if (!config.get().getSection("Servers").getSection(name).getRawString("Executable").equals(server.getExecutable()))
edits.set("exec", config.get().getSection("Servers").getSection(name).getRawString("Executable"));
if (!config.get().getSection("Servers").getSection(name).getRawString("Stop-Command").equals(server.getStopCommand()))
edits.set("stop-cmd", config.get().getSection("Servers").getSection(name).getRawString("Stop-Command"));
SubServer.StopAction action = Util.getDespiteException(() -> SubServer.StopAction.valueOf(config.get().getSection("Servers").getSection(name).getRawString("Stop-Action", "NONE").toUpperCase().replace('-', '_').replace(' ', '_')), null);
ObjectMap<String> edits = new ObjectMap<String>();
if (config.get().getMap("Servers").getMap(name).getBoolean("Enabled") != server.isEnabled())
edits.set("enabled", config.get().getMap("Servers").getMap(name).getBoolean("Enabled"));
if (config.get().getMap("Servers").getMap(name).getKeys().contains("Display") && ((config.get().getMap("Servers").getMap(name).getRawString("Display").length() == 0 && !server.getDisplayName().equals(server.getName())) || !config.get().getMap("Servers").getMap(name).getRawString("Display").equals(server.getDisplayName())))
edits.set("display", config.get().getMap("Servers").getMap(name).getRawString("Display"));
if (!config.get().getMap("Servers").getMap(name).getString("Host").equalsIgnoreCase(server.getHost().getName()))
edits.set("host", config.get().getMap("Servers").getMap(name).getRawString("Host"));
if (!config.get().getMap("Servers").getMap(name).getStringList("Group").equals(server.getGroups()))
edits.set("group", config.get().getMap("Servers").getMap(name).getRawStringList("Group"));
if (config.get().getMap("Servers").getMap(name).getInt("Port") != server.getAddress().getPort())
edits.set("port", config.get().getMap("Servers").getMap(name).getInt("Port"));
if (!(ChatColor.translateAlternateColorCodes('&', config.get().getMap("Servers").getMap(name).getString("Motd")).equals(server.getMotd())))
edits.set("motd", config.get().getMap("Servers").getMap(name).getRawString("Motd"));
if (config.get().getMap("Servers").getMap(name).getBoolean("Log") != server.isLogging())
edits.set("log", config.get().getMap("Servers").getMap(name).getBoolean("Log"));
if (!config.get().getMap("Servers").getMap(name).getRawString("Directory").equals(server.getPath()))
edits.set("dir", config.get().getMap("Servers").getMap(name).getRawString("Directory"));
if (!config.get().getMap("Servers").getMap(name).getRawString("Executable").equals(server.getExecutable()))
edits.set("exec", config.get().getMap("Servers").getMap(name).getRawString("Executable"));
if (!config.get().getMap("Servers").getMap(name).getRawString("Stop-Command").equals(server.getStopCommand()))
edits.set("stop-cmd", config.get().getMap("Servers").getMap(name).getRawString("Stop-Command"));
SubServer.StopAction action = Util.getDespiteException(() -> SubServer.StopAction.valueOf(config.get().getMap("Servers").getMap(name).getRawString("Stop-Action", "NONE").toUpperCase().replace('-', '_').replace(' ', '_')), null);
if (action != null && action != server.getStopAction())
edits.set("stop-action", action.toString());
if (config.get().getSection("Servers").getSection(name).getBoolean("Restricted") != server.isRestricted())
edits.set("restricted", config.get().getSection("Servers").getSection(name).getBoolean("Restricted"));
if (config.get().getSection("Servers").getSection(name).getBoolean("Hidden") != server.isHidden())
edits.set("hidden", config.get().getSection("Servers").getSection(name).getBoolean("Hidden"));
if (config.get().getMap("Servers").getMap(name).getBoolean("Restricted") != server.isRestricted())
edits.set("restricted", config.get().getMap("Servers").getMap(name).getBoolean("Restricted"));
if (config.get().getMap("Servers").getMap(name).getBoolean("Hidden") != server.isHidden())
edits.set("hidden", config.get().getMap("Servers").getMap(name).getBoolean("Hidden"));
if (edits.getKeys().size() > 0) {
@ -445,43 +480,43 @@ public final class SubPlugin extends BungeeCord implements Listener {
}
} else { // Server cannot edit()
if (server == null || // Server must be reset
!config.get().getSection("Servers").getSection(name).getString("Host").equalsIgnoreCase(server.getHost().getName()) ||
config.get().getSection("Servers").getSection(name).getInt("Port") != server.getAddress().getPort() ||
!config.get().getSection("Servers").getSection(name).getRawString("Directory").equals(server.getPath()) ||
!config.get().getSection("Servers").getSection(name).getRawString("Executable").equals(server.getExecutable())
!config.get().getMap("Servers").getMap(name).getString("Host").equalsIgnoreCase(server.getHost().getName()) ||
config.get().getMap("Servers").getMap(name).getInt("Port") != server.getAddress().getPort() ||
!config.get().getMap("Servers").getMap(name).getRawString("Directory").equals(server.getPath()) ||
!config.get().getMap("Servers").getMap(name).getRawString("Executable").equals(server.getExecutable())
) {
if (server != null) server.getHost().forceRemoveSubServer(name);
server = this.hosts.get(config.get().getSection("Servers").getSection(name).getString("Host").toLowerCase()).addSubServer(name, config.get().getSection("Servers").getSection(name).getBoolean("Enabled"),
config.get().getSection("Servers").getSection(name).getInt("Port"), config.get().getSection("Servers").getSection(name).getColoredString("Motd", '&'), config.get().getSection("Servers").getSection(name).getBoolean("Log"),
config.get().getSection("Servers").getSection(name).getRawString("Directory"), config.get().getSection("Servers").getSection(name).getRawString("Executable"), config.get().getSection("Servers").getSection(name).getRawString("Stop-Command"),
config.get().getSection("Servers").getSection(name).getBoolean("Hidden"), config.get().getSection("Servers").getSection(name).getBoolean("Restricted"));
server = this.hosts.get(config.get().getMap("Servers").getMap(name).getString("Host").toLowerCase()).addSubServer(name, config.get().getMap("Servers").getMap(name).getBoolean("Enabled"),
config.get().getMap("Servers").getMap(name).getInt("Port"), ChatColor.translateAlternateColorCodes('&', config.get().getMap("Servers").getMap(name).getString("Motd")), config.get().getMap("Servers").getMap(name).getBoolean("Log"),
config.get().getMap("Servers").getMap(name).getRawString("Directory"), config.get().getMap("Servers").getMap(name).getRawString("Executable"), config.get().getMap("Servers").getMap(name).getRawString("Stop-Command"),
config.get().getMap("Servers").getMap(name).getBoolean("Hidden"), config.get().getMap("Servers").getMap(name).getBoolean("Restricted"));
} else { // Server doesn't need to reset
if (config.get().getSection("Servers").getSection(name).getBoolean("Enabled") != server.isEnabled())
server.setEnabled(config.get().getSection("Servers").getSection(name).getBoolean("Enabled"));
if (!config.get().getSection("Servers").getSection(name).getColoredString("Motd", '&').equals(server.getMotd()))
server.setMotd(config.get().getSection("Servers").getSection(name).getColoredString("Motd", '&'));
if (config.get().getSection("Servers").getSection(name).getBoolean("Log") != server.isLogging())
server.setLogging(config.get().getSection("Servers").getSection(name).getBoolean("Log"));
if (!config.get().getSection("Servers").getSection(name).getRawString("Stop-Command").equals(server.getStopCommand()))
server.setStopCommand(config.get().getSection("Servers").getSection(name).getRawString("Stop-Command"));
if (config.get().getSection("Servers").getSection(name).getBoolean("Restricted") != server.isRestricted())
server.setRestricted(config.get().getSection("Servers").getSection(name).getBoolean("Restricted"));
if (config.get().getSection("Servers").getSection(name).getBoolean("Hidden") != server.isHidden())
server.setHidden(config.get().getSection("Servers").getSection(name).getBoolean("Hidden"));
if (config.get().getMap("Servers").getMap(name).getBoolean("Enabled") != server.isEnabled())
server.setEnabled(config.get().getMap("Servers").getMap(name).getBoolean("Enabled"));
if (!ChatColor.translateAlternateColorCodes('&', config.get().getMap("Servers").getMap(name).getString("Motd")).equals(server.getMotd()))
server.setMotd(ChatColor.translateAlternateColorCodes('&', config.get().getMap("Servers").getMap(name).getString("Motd")));
if (config.get().getMap("Servers").getMap(name).getBoolean("Log") != server.isLogging())
server.setLogging(config.get().getMap("Servers").getMap(name).getBoolean("Log"));
if (!config.get().getMap("Servers").getMap(name).getRawString("Stop-Command").equals(server.getStopCommand()))
server.setStopCommand(config.get().getMap("Servers").getMap(name).getRawString("Stop-Command"));
if (config.get().getMap("Servers").getMap(name).getBoolean("Restricted") != server.isRestricted())
server.setRestricted(config.get().getMap("Servers").getMap(name).getBoolean("Restricted"));
if (config.get().getMap("Servers").getMap(name).getBoolean("Hidden") != server.isHidden())
server.setHidden(config.get().getMap("Servers").getMap(name).getBoolean("Hidden"));
} // Apply these changes regardless of reset
SubServer.StopAction action = Util.getDespiteException(() -> SubServer.StopAction.valueOf(config.get().getSection("Servers").getSection(name).getRawString("Stop-Action", "NONE").toUpperCase().replace('-', '_').replace(' ', '_')), null);
SubServer.StopAction action = Util.getDespiteException(() -> SubServer.StopAction.valueOf(config.get().getMap("Servers").getMap(name).getRawString("Stop-Action", "NONE").toUpperCase().replace('-', '_').replace(' ', '_')), null);
if (action != null && action != server.getStopAction())
server.setStopAction(action);
if (!status && config.get().getSection("Servers").getSection(name).getBoolean("Run-On-Launch"))
if (!status && config.get().getMap("Servers").getMap(name).getBoolean("Run-On-Launch"))
autorun.add(name.toLowerCase());
if (config.get().getSection("Servers").getSection(name).getKeys().contains("Display") && ((config.get().getSection("Servers").getSection(name).getRawString("Display").length() == 0 && !server.getDisplayName().equals(server.getName())) || !config.get().getSection("Servers").getSection(name).getRawString("Display").equals(server.getDisplayName())))
server.setDisplayName(config.get().getSection("Servers").getSection(name).getRawString("Display"));
if (config.get().getSection("Servers").getSection(name).getKeys().contains("Group")) {
if (config.get().getMap("Servers").getMap(name).getKeys().contains("Display") && ((config.get().getMap("Servers").getMap(name).getRawString("Display").length() == 0 && !server.getDisplayName().equals(server.getName())) || !config.get().getMap("Servers").getMap(name).getRawString("Display").equals(server.getDisplayName())))
server.setDisplayName(config.get().getMap("Servers").getMap(name).getRawString("Display"));
if (config.get().getMap("Servers").getMap(name).getKeys().contains("Group")) {
for (String group : server.getGroups()) server.removeGroup(group);
for (String group : config.get().getSection("Servers").getSection(name).getStringList("Group")) server.addGroup(group);
for (String group : config.get().getMap("Servers").getMap(name).getStringList("Group")) server.addGroup(group);
}
} // Apply these changes regardless of edit/reset
if (config.get().getSection("Servers").getSection(name).getKeys().contains("Extra")) for (String extra : config.get().getSection("Servers").getSection(name).getSection("Extra").getKeys()) server.addExtra(extra, config.get().getSection("Servers").getSection(name).getSection("Extra").getObject(extra));
if (config.get().getMap("Servers").getMap(name).getKeys().contains("Extra")) for (String extra : config.get().getMap("Servers").getMap(name).getMap("Extra").getKeys()) server.addExtra(extra, config.get().getMap("Servers").getMap(name).getMap("Extra").getObject(extra));
ukeys.add(name.toLowerCase());
subservers++;
} catch (Exception e) {
@ -490,7 +525,7 @@ public final class SubPlugin extends BungeeCord implements Listener {
}
for (String name : ukeys) {
SubServer server = api.getSubServer(name);
for (String oname : config.get().getSection("Servers").getSection(server.getName()).getRawStringList("Incompatible", new ArrayList<>())) {
for (String oname : config.get().getMap("Servers").getMap(server.getName()).getRawStringList("Incompatible", new ArrayList<>())) {
SubServer oserver = api.getSubServer(oname);
if (oserver != null && server.isCompatible(oserver)) server.toggleCompatibility(oserver);
}
@ -514,13 +549,13 @@ public final class SubPlugin extends BungeeCord implements Listener {
}
if (status) {
for (Host host : api.getHosts().values()) if (host instanceof ClientHandler && ((ClientHandler) host).getSubData() != null) ((ClientHandler) host).getSubData().sendPacket(new PacketOutReload(null));
for (Server server : api.getServers().values()) if (server.getSubData() != null) server.getSubData().sendPacket(new PacketOutReload(null));
for (Host host : api.getHosts().values()) if (host instanceof ClientHandler && ((ClientHandler) host).getSubData() != null) ((SubDataClient) ((ClientHandler) host).getSubData()).sendPacket(new PacketOutExReload(null));
for (Server server : api.getServers().values()) if (server.getSubData() != null) ((SubDataClient) server.getSubData()).sendPacket(new PacketOutExReload(null));
}
System.out.println("SubServers > " + ((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(config.get().getSection("Settings").getLong("Run-On-Launch-Timeout", 0L));
long scd = TimeUnit.SECONDS.toMillis(config.get().getMap("Settings").getLong("Run-On-Launch-Timeout", 0L));
if (autorun.size() > 0) for (Host host : api.getHosts().values()) {
List<String> ar = new LinkedList<String>();
for (String name : autorun) if (host.getSubServer(name) != null) ar.add(name);
@ -553,7 +588,7 @@ public final class SubPlugin extends BungeeCord implements Listener {
}
private void post() {
if (config.get().getSection("Settings").getBoolean("Override-Bungee-Commands", true)) {
if (config.get().getMap("Settings").getBoolean("Override-Bungee-Commands", true)) {
getPluginManager().registerCommand(null, SubCommand.BungeeServer.newInstance(this, "server").get());
getPluginManager().registerCommand(null, new SubCommand.BungeeList(this, "glist"));
}
@ -567,12 +602,12 @@ public final class SubPlugin extends BungeeCord implements Listener {
@Override
public void run() {
try {
YAMLSection tags = new YAMLSection(new Gson().fromJson("{\"tags\":" + Util.readAll(new BufferedReader(new InputStreamReader(new URL("https://api.github.com/repos/ME1312/SubServers-2/git/refs/tags").openStream(), Charset.forName("UTF-8")))) + '}', Map.class));
ObjectMap<String> tags = new ObjectMap<String>(new Gson().fromJson("{\"tags\":" + Util.readAll(new BufferedReader(new InputStreamReader(new URL("https://api.github.com/repos/ME1312/SubServers-2/git/refs/tags").openStream(), Charset.forName("UTF-8")))) + '}', Map.class));
List<Version> versions = new LinkedList<Version>();
Version updversion = version;
int updcount = 0;
for (YAMLSection tag : tags.getSectionList("tags")) versions.add(Version.fromString(tag.getString("ref").substring(10)));
for (ObjectMap<String> tag : tags.getMapList("tags")) versions.add(Version.fromString(tag.getString("ref").substring(10)));
Collections.sort(versions);
for (Version version : versions) {
if (version.compareTo(updversion) > 0) {
@ -586,18 +621,6 @@ public final class SubPlugin extends BungeeCord implements Listener {
}, 0, TimeUnit.DAYS.toMillis(2));
}
private void loop() {
new Thread(() -> {
while (subdata != null) {
try {
subdata.addClient(subdata.getServer().accept());
} catch (IOException e) {
if (!(e instanceof SocketException)) e.printStackTrace();
}
}
}, "SubServers.Bungee::SubData_Connection_Listener").start();
}
/**
* Reset all changes made by startListeners
*
@ -621,7 +644,7 @@ public final class SubPlugin extends BungeeCord implements Listener {
shutdown();
subdata.destroy();
subdata.close();
for (ListenerInfo listener : getConfig().getListeners()) {
if (UPnP.isUPnPAvailable() && UPnP.isMappedTCP(listener.getHost().getPort())) UPnP.closePortTCP(listener.getHost().getPort());

View File

@ -14,6 +14,14 @@
<id>spigot-repo</id>
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
</repository>
<repository>
<id>bungeecord-repo</id>
<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
</repository>
<repository>
<id>me1312-repo</id>
<url>https://src.me1312.net/maven</url>
</repository>
<repository>
<id>puharesource-repo</id>
<url>https://repo.puha.io/repo/</url>
@ -32,9 +40,21 @@
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.msgpack</groupId>
<artifactId>msgpack-core</artifactId>
<version>0.8.16</version>
<groupId>net.md-5</groupId>
<artifactId>bungeecord-chat</artifactId>
<version>1.10-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>net.ME1312.Galaxi</groupId>
<artifactId>GalaxiUtil</artifactId>
<version>19w16a</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>net.ME1312.SubData</groupId>
<artifactId>Client</artifactId>
<version>19w16b</version>
<scope>compile</scope>
</dependency>
<dependency>
@ -135,6 +155,8 @@
<reportOutputDirectory>${basedir}/../../Javadoc/SubServers.Client.Bukkit</reportOutputDirectory>
<additionalOptions>-Xdoclint:none</additionalOptions>
<links>
<link>https://src.me1312.net/jenkins/job/GalaxiEngine/javadoc/GalaxiUtil/</link>
<link>https://src.me1312.net/jenkins/job/SubData/javadoc/Client/</link>
<link>https://hub.spigotmc.org/javadocs/spigot/</link>
</links>
</configuration>

View File

@ -1,7 +1,7 @@
package net.ME1312.SubServers.Client.Bukkit.Event;
import net.ME1312.SubServers.Client.Bukkit.Library.SubEvent;
import net.ME1312.SubServers.Client.Bukkit.Library.Util;
import net.ME1312.Galaxi.Library.Util;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;

View File

@ -1,7 +1,7 @@
package net.ME1312.SubServers.Client.Bukkit.Event;
import net.ME1312.SubServers.Client.Bukkit.Library.SubEvent;
import net.ME1312.SubServers.Client.Bukkit.Library.Util;
import net.ME1312.Galaxi.Library.Util;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;

View File

@ -1,7 +1,7 @@
package net.ME1312.SubServers.Client.Bukkit.Event;
import net.ME1312.SubServers.Client.Bukkit.Library.SubEvent;
import net.ME1312.SubServers.Client.Bukkit.Library.Util;
import net.ME1312.Galaxi.Library.Util;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;

View File

@ -1,9 +1,8 @@
package net.ME1312.SubServers.Client.Bukkit.Event;
import net.ME1312.SubServers.Client.Bukkit.Library.SubEvent;
import net.ME1312.SubServers.Client.Bukkit.Library.Util;
import net.ME1312.SubServers.Client.Bukkit.Library.Version.Version;
import net.ME1312.SubServers.Client.Bukkit.Network.Packet.PacketCreateServer;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.Galaxi.Library.Version.Version;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
@ -31,7 +30,7 @@ public class SubCreateEvent extends Event implements SubEvent {
* @param port Server Port Number
*/
public SubCreateEvent(UUID player, String host, String name, String template, Version version, int port) {
if (Util.isNull(host, name, template, version, port)) throw new NullPointerException();
if (Util.isNull(host, name, template, port)) throw new NullPointerException();
this.player = player;
this.host = host;
this.name = name;

View File

@ -1,10 +1,10 @@
package net.ME1312.SubServers.Client.Bukkit.Event;
import net.ME1312.SubServers.Client.Bukkit.Library.Config.YAMLSection;
import net.ME1312.SubServers.Client.Bukkit.Library.Config.YAMLValue;
import net.ME1312.SubServers.Client.Bukkit.Library.NamedContainer;
import net.ME1312.Galaxi.Library.Map.ObjectMap;
import net.ME1312.Galaxi.Library.Map.ObjectMapValue;
import net.ME1312.Galaxi.Library.NamedContainer;
import net.ME1312.SubServers.Client.Bukkit.Library.SubEvent;
import net.ME1312.SubServers.Client.Bukkit.Library.Util;
import net.ME1312.Galaxi.Library.Util;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
@ -16,7 +16,7 @@ import java.util.UUID;
public class SubEditServerEvent extends Event implements SubEvent {
private UUID player;
private String server;
private NamedContainer<String, YAMLValue> edit;
private NamedContainer<String, ObjectMapValue<String>> edit;
private boolean perm;
/**
@ -29,11 +29,11 @@ public class SubEditServerEvent extends Event implements SubEvent {
*/
public SubEditServerEvent(UUID player, String server, NamedContainer<String, ?> edit, boolean permanent) {
if (Util.isNull(server, edit)) throw new NullPointerException();
YAMLSection section = new YAMLSection();
ObjectMap<String> section = new ObjectMap<String>();
section.set(".", edit.get());
this.player = player;
this.server = server;
this.edit = new NamedContainer<String, YAMLValue>(edit.name(), section.contains(".")?section.get("."):null);
this.edit = new NamedContainer<String, ObjectMapValue<String>>(edit.name(), section.contains(".")?section.get("."):null);
this.perm = permanent;
}
@ -56,7 +56,7 @@ public class SubEditServerEvent extends Event implements SubEvent {
*
* @return Edit to be made
*/
public NamedContainer<String, YAMLValue> getEdit() {
public NamedContainer<String, ObjectMapValue<String>> getEdit() {
return edit;
}

View File

@ -1,8 +1,8 @@
package net.ME1312.SubServers.Client.Bukkit.Event;
import net.ME1312.SubServers.Client.Bukkit.Library.SubEvent;
import net.ME1312.SubServers.Client.Bukkit.Library.Util;
import net.ME1312.SubServers.Client.Bukkit.Network.SubDataClient;
import net.ME1312.Galaxi.Library.Util;
import net.ME1312.SubData.Client.SubDataClient;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;

Some files were not shown because too many files have changed in this diff Show More