SubServers-2/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalHost.java

182 lines
6.9 KiB
Java
Raw Normal View History

2016-12-24 05:55:17 +01:00
package net.ME1312.SubServers.Bungee.Host.Internal;
2016-12-05 04:21:04 +01:00
2017-04-01 18:50:09 +02:00
import com.google.common.io.Files;
2016-12-24 05:55:17 +01:00
import net.ME1312.SubServers.Bungee.Event.SubAddServerEvent;
import net.ME1312.SubServers.Bungee.Event.SubRemoveServerEvent;
import net.ME1312.SubServers.Bungee.Host.Executable;
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;
2017-04-01 18:50:09 +02:00
import net.ME1312.SubServers.Bungee.Library.UniversalFile;
import net.ME1312.SubServers.Bungee.Library.Util;
2016-12-24 05:55:17 +01:00
import net.ME1312.SubServers.Bungee.SubPlugin;
2017-04-01 18:50:09 +02:00
import org.json.JSONObject;
2016-12-05 04:21:04 +01:00
2017-04-01 18:50:09 +02:00
import java.io.File;
import java.io.FileWriter;
2016-12-05 04:21:04 +01:00
import java.net.InetAddress;
2017-04-01 18:50:09 +02:00
import java.util.*;
2016-12-05 04:21:04 +01:00
2017-01-07 20:06:54 +01:00
/**
* Internal Host Class
*/
2016-12-05 04:21:04 +01:00
public class InternalHost extends Host {
private HashMap<String, SubServer> servers = new HashMap<String, SubServer>();
2016-12-05 04:21:04 +01:00
private String name;
private boolean enabled;
private InetAddress address;
private SubCreator creator;
private String directory;
protected SubPlugin plugin;
2016-12-05 04:21:04 +01:00
2017-01-07 20:06:54 +01:00
/**
* Creates an Internal Host
*
* @param plugin Plugin
* @param name Name
* @param enabled Enabled Status
* @param address Address
* @param directory Directory
* @param gitBash Git Bash Location
*/
public InternalHost(SubPlugin plugin, String name, Boolean enabled, InetAddress address, String directory, String gitBash) {
super(plugin, name, enabled, address, directory, gitBash);
if (Util.isNull(plugin, name, enabled, address, directory, gitBash)) throw new NullPointerException();
2016-12-05 04:21:04 +01:00
this.plugin = plugin;
this.name = name;
this.enabled = enabled;
this.address = address;
this.creator = new InternalSubCreator(this, gitBash);
2016-12-05 04:21:04 +01:00
this.directory = directory;
}
@Override
public boolean isEnabled() {
return enabled;
}
@Override
public void setEnabled(boolean value) {
this.enabled = value;
}
@Override
public InetAddress getAddress() {
return address;
}
@Override
public String getDirectory() {
return directory;
}
2016-12-05 04:21:04 +01:00
@Override
public String getName() {
return name;
}
@Override
public SubCreator getCreator() {
return creator;
}
@Override
public Map<String, ? extends SubServer> getSubServers() {
return new TreeMap<String, SubServer>(servers);
}
@Override
public SubServer getSubServer(String name) {
if (Util.isNull(name)) throw new NullPointerException();
return getSubServers().get(name.toLowerCase());
2016-12-05 04:21:04 +01:00
}
@Override
2016-12-19 01:38:02 +01:00
public SubServer addSubServer(UUID player, String name, boolean enabled, int port, String motd, boolean log, String directory, Executable executable, String stopcmd, boolean start, boolean restart, boolean hidden, boolean restricted, boolean temporary) throws InvalidServerException {
if (plugin.api.getServers().keySet().contains(name.toLowerCase())) throw new InvalidServerException("A Server already exists with this name!");
2016-12-19 01:38:02 +01:00
SubServer server = new InternalSubServer(this, name, enabled, port, motd, log, directory, executable, stopcmd, start, restart, hidden, restricted, temporary);
SubAddServerEvent event = new SubAddServerEvent(player, this, server);
plugin.getPluginManager().callEvent(event);
if (!event.isCancelled()) {
servers.put(name.toLowerCase(), server);
return server;
} else {
return null;
}
2016-12-05 04:21:04 +01:00
}
@Override
2016-12-20 00:31:01 +01:00
public boolean removeSubServer(UUID player, String name) throws InterruptedException {
if (Util.isNull(name)) throw new NullPointerException();
2016-12-20 00:31:01 +01:00
SubRemoveServerEvent event = new SubRemoveServerEvent(player, this, getSubServer(name));
plugin.getPluginManager().callEvent(event);
if (!event.isCancelled()) {
if (getSubServer(name).isRunning()) {
getSubServer(name).stop();
getSubServer(name).waitFor();
}
servers.remove(name.toLowerCase());
return true;
} else return false;
2016-12-05 04:21:04 +01:00
}
@Override
2016-12-20 00:31:01 +01:00
public boolean forceRemoveSubServer(UUID player, String name) {
if (Util.isNull(name)) throw new NullPointerException();
2016-12-20 00:31:01 +01:00
SubRemoveServerEvent event = new SubRemoveServerEvent(player, this, getSubServer(name));
plugin.getPluginManager().callEvent(event);
if (!event.isCancelled()) {
if (getSubServer(name).isRunning()) {
getSubServer(name).terminate();
}
servers.remove(name.toLowerCase());
return true;
} else return false;
2016-12-05 04:21:04 +01:00
}
2017-04-01 18:50:09 +02:00
@Override
public boolean deleteSubServer(UUID player, String name) throws InterruptedException {
if (Util.isNull(name)) throw new NullPointerException();
File from = new File(getDirectory(), servers.get(name.toLowerCase()).getDirectory());
2017-04-01 18:50:09 +02:00
if (removeSubServer(player, name)) {
new Thread(() -> {
UniversalFile to = new UniversalFile(plugin.dir, "SubServers:Recently Deleted:" + name.toLowerCase());
try {
if (from.exists()) {
System.out.println("SubServers > Removing Files...");
if (to.exists()) {
if (to.isDirectory()) Util.deleteDirectory(to);
else to.delete();
}
to.mkdirs();
Files.move(from, to);
}
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("SubServers > Saving...");
JSONObject json = (plugin.config.get().getSection("Servers").getKeys().contains(servers.get(name.toLowerCase()).getName()))?plugin.config.get().getSection("Servers").getSection(servers.get(name.toLowerCase()).getName()).toJSON():new JSONObject();
json.put("Name", servers.get(name.toLowerCase()).getName());
json.put("Timestamp", Calendar.getInstance().getTime().getTime());
try {
if (plugin.config.get().getSection("Servers").getKeys().contains(servers.get(name.toLowerCase()).getName())) {
plugin.config.get().getSection("Servers").remove(servers.get(name.toLowerCase()).getName());
plugin.config.save();
}
if (!to.exists()) to.mkdirs();
FileWriter writer = new FileWriter(new File(to, "info.json"));
json.write(writer);
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("SubServers > Done!");
}).start();
return true;
} else return false;
}
2016-12-05 04:21:04 +01:00
}