use of de.dytanic.cloudnet.lib.service.plugin.ServerInstallablePlugin in project CloudNet by Dytanic.
the class GameServer method bootstrap.
@Override
public boolean bootstrap() throws Exception {
serverProcess.setServerStage(ServerStage.DOWNLOAD);
long startupTime = System.currentTimeMillis();
for (ServerInstallablePlugin url : serverProcess.getMeta().getDownloadablePlugins()) {
switch(url.getPluginResourceType()) {
case URL:
{
if (!Files.exists(Paths.get("local/cache/web_plugins/" + url.getName() + ".jar"))) {
try {
URLConnection urlConnection = new java.net.URL(url.getUrl()).openConnection();
urlConnection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11");
Files.copy(urlConnection.getInputStream(), Paths.get("local/cache/web_plugins/" + url.getName() + ".jar"));
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
break;
case MASTER:
{
if (!Files.exists(Paths.get("local/cache/web_plugins/" + url.getName() + ".jar")) && CloudNetWrapper.getInstance().getSimpledUser() != null) {
try {
URLConnection urlConnection = new java.net.URL(new StringBuilder(CloudNetWrapper.getInstance().getOptionSet().has("ssl") ? "https://" : "http://").append(CloudNetWrapper.getInstance().getWrapperConfig().getCloudnetHost()).append(":").append(CloudNetWrapper.getInstance().getWrapperConfig().getWebPort()).append("/cloudnet/api/v1/download").substring(0)).openConnection();
urlConnection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11");
SimpledUser simpledUser = CloudNetWrapper.getInstance().getSimpledUser();
urlConnection.setRequestProperty("-Xcloudnet-user", simpledUser.getUserName());
urlConnection.setRequestProperty("-Xcloudnet-token", simpledUser.getApiToken());
urlConnection.setRequestProperty("-Xmessage", "plugin");
urlConnection.setRequestProperty("-Xvalue", url.getName());
urlConnection.connect();
System.out.println("Downloading " + url.getName() + ".jar");
Files.copy(urlConnection.getInputStream(), Paths.get("local/cache/web_plugins/" + url.getName() + ".jar"));
System.out.println("Download was completed successfully!");
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
break;
default:
break;
}
}
for (ServerInstallablePlugin url : serverProcess.getMeta().getTemplate().getInstallablePlugins()) {
switch(url.getPluginResourceType()) {
case URL:
{
if (!Files.exists(Paths.get("local/cache/web_plugins/" + url.getName() + ".jar"))) {
try {
URLConnection urlConnection = new java.net.URL(url.getUrl()).openConnection();
urlConnection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11");
Files.copy(urlConnection.getInputStream(), Paths.get("local/cache/web_plugins/" + url.getName() + ".jar"));
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
break;
case MASTER:
{
if (!Files.exists(Paths.get("local/cache/web_plugins/" + url.getName() + ".jar")) && CloudNetWrapper.getInstance().getSimpledUser() != null) {
try {
URLConnection urlConnection = new java.net.URL(new StringBuilder(CloudNetWrapper.getInstance().getOptionSet().has("ssl") ? "https://" : "http://").append(CloudNetWrapper.getInstance().getWrapperConfig().getCloudnetHost()).append(":").append(CloudNetWrapper.getInstance().getWrapperConfig().getWebPort()).append("/cloudnet/api/v1/download").substring(0)).openConnection();
urlConnection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11");
SimpledUser simpledUser = CloudNetWrapper.getInstance().getSimpledUser();
urlConnection.setRequestProperty("-Xcloudnet-user", simpledUser.getUserName());
urlConnection.setRequestProperty("-Xcloudnet-token", simpledUser.getApiToken());
urlConnection.setRequestProperty("-Xmessage", "plugin");
urlConnection.setRequestProperty("-Xvalue", url.getName());
urlConnection.connect();
System.out.println("Downloading " + url.getName() + ".jar");
Files.copy(urlConnection.getInputStream(), Paths.get("local/cache/web_plugins/" + url.getName() + ".jar"));
System.out.println("Download was completed successfully!");
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
break;
default:
break;
}
}
if (serverGroup.getTemplates().size() == 0 && serverProcess.getMeta().getUrl() == null)
return false;
if (serverGroup.getGroupMode().equals(ServerGroupMode.STATIC)) {
if (!Files.exists(dir))
if (!a())
return false;
} else if (!a())
return false;
for (ServerInstallablePlugin plugin : serverProcess.getMeta().getDownloadablePlugins()) FileCopy.copyFileToDirectory(new File("local/cache/web_plugins/" + plugin.getName() + ".jar"), new File(path + "/plugins"));
for (ServerInstallablePlugin plugin : serverProcess.getMeta().getTemplate().getInstallablePlugins()) FileCopy.copyFileToDirectory(new File("local/cache/web_plugins/" + plugin.getName() + ".jar"), new File(path + "/plugins"));
serverProcess.setServerStage(ServerStage.COPY);
if (serverGroup.getServerType().equals(ServerGroupType.BUKKIT))
if (!Files.exists(Paths.get(path + "/spigot.jar")))
FileCopy.copyFileToDirectory(new File("local/spigot.jar"), new File(path));
if (serverGroup.getServerType().equals(ServerGroupType.GLOWSTONE)) {
if (!Files.exists(Paths.get(path + "/config")))
Files.createDirectories(Paths.get(path + "/config"));
if (!Files.exists(Paths.get(path + "/config/glowstone.yml")))
FileCopy.insertData("files/glowstone.yml", path + "/config/glowstone.yml");
}
if (!Files.exists(Paths.get(path + "/server.properties")))
FileCopy.insertData("files/server.properties", path + "/server.properties");
if (!Files.exists(Paths.get(path + "/bukkit.yml")))
FileCopy.insertData("files/bukkit.yml", path + "/bukkit.yml");
if (!serverProcess.getMeta().isOnlineMode())
if (!Files.exists(Paths.get(path + "/spigot.yml")))
FileCopy.insertData("files/spigot.yml", path + "/spigot.yml");
Files.deleteIfExists(Paths.get(path + "/plugins/CloudNetAPI.jar"));
FileCopy.insertData("files/CloudNetAPI.jar", path + "/plugins/CloudNetAPI.jar");
FileCopy.copyFilesInDirectory(new File("local/global"), new File(path));
String motd = "Default Motd";
int maxPlayers = 0;
if (!serverGroup.getServerType().equals(ServerGroupType.GLOWSTONE)) {
Properties properties = new Properties();
try (InputStreamReader inputStreamReader = new InputStreamReader(Files.newInputStream(Paths.get(path + "/server.properties")))) {
properties.load(inputStreamReader);
}
Enumeration enumeration = this.serverProcess.getMeta().getServerProperties().keys();
while (enumeration.hasMoreElements()) {
String x = enumeration.nextElement().toString();
properties.setProperty(x, this.serverProcess.getMeta().getServerProperties().getProperty(x));
}
properties.setProperty("server-ip", CloudNetWrapper.getInstance().getWrapperConfig().getInternalIP());
properties.setProperty("server-port", serverProcess.getMeta().getPort() + NetworkUtils.EMPTY_STRING);
properties.setProperty("online-mode", serverProcess.getMeta().isOnlineMode() + NetworkUtils.EMPTY_STRING);
// properties.setProperty("server-name", serverProcess.getMeta().getServiceId().getServerId());
motd = properties.getProperty("motd");
maxPlayers = Integer.parseInt(properties.getProperty("max-players"));
try (OutputStream outputStream = Files.newOutputStream(Paths.get(path + "/server.properties"))) {
properties.store(outputStream, "CloudNet-Wrapper EDIT");
}
} else {
try (InputStreamReader inputStreamReader = new InputStreamReader(Files.newInputStream(Paths.get(path + "/config/glowstone.yml")), StandardCharsets.UTF_8)) {
Configuration configuration = ConfigurationProvider.getProvider(YamlConfiguration.class).load(inputStreamReader);
Configuration section = configuration.getSection("server");
section.set("ip", CloudNetWrapper.getInstance().getWrapperConfig().getInternalIP());
section.set("port", serverProcess.getMeta().getPort());
maxPlayers = section.getInt("max-players");
motd = section.getString("motd");
configuration.set("server", section);
configuration.set("console.use-jline", false);
try (OutputStreamWriter outputStreamWriter = new OutputStreamWriter(Files.newOutputStream(Paths.get(path + "/config/glowstone.yml")), StandardCharsets.UTF_8)) {
ConfigurationProvider.getProvider(YamlConfiguration.class).save(configuration, outputStreamWriter);
}
}
}
this.serverInfo = new ServerInfo(serverProcess.getMeta().getServiceId(), CloudNetWrapper.getInstance().getWrapperConfig().getInternalIP(), this.getServerProcess().getMeta().getPort(), false, new ArrayList<>(), serverProcess.getMeta().getMemory(), motd, 0, maxPlayers, ServerState.OFFLINE, this.serverProcess.getMeta().getServerConfig(), serverProcess.getMeta().getTemplate());
if (!Files.exists(Paths.get(path + "/CLOUD"))) {
Files.createDirectory(Paths.get(path + "/CLOUD"));
}
new Document().append("serviceId", serverProcess.getMeta().getServiceId()).append("serverProcess", serverProcess.getMeta()).append("serverInfo", serverInfo).append("ssl", CloudNetWrapper.getInstance().getOptionSet().has("ssl")).append("memory", serverProcess.getMeta().getMemory()).saveAsConfig(Paths.get(path + "/CLOUD/config.json"));
new Document().append("connection", new ConnectableAddress(CloudNetWrapper.getInstance().getWrapperConfig().getCloudnetHost(), CloudNetWrapper.getInstance().getWrapperConfig().getCloudnetPort())).saveAsConfig(Paths.get(path + "/CLOUD/connection.json"));
CloudNetWrapper.getInstance().getNetworkConnection().sendPacket(new PacketOutAddServer(this.serverInfo, this.serverProcess.getMeta()));
System.out.println("Server " + toString() + " started in [" + (System.currentTimeMillis() - startupTime) + " milliseconds]");
this.startupTimeStamp = System.currentTimeMillis();
startProcess();
serverProcess.setServerStage(ServerStage.PROCESS);
CloudNetWrapper.getInstance().getServers().put(this.serverProcess.getMeta().getServiceId().getServerId(), this);
serverProcess.setServerStage(ServerStage.NET_INIT);
return true;
}
use of de.dytanic.cloudnet.lib.service.plugin.ServerInstallablePlugin in project CloudNet by Dytanic.
the class BungeeCord method bootstrap.
@Override
public boolean bootstrap() throws Exception {
long startupTime = System.currentTimeMillis();
if (proxyGroup.getTemplate().getBackend().equals(TemplateResource.URL)) {
}
for (ServerInstallablePlugin url : proxyProcessMeta.getDownloadablePlugins()) {
if (!Files.exists(Paths.get("local/cache/web_plugins/" + url.getName() + ".jar"))) {
try {
URLConnection urlConnection = new java.net.URL(url.getUrl()).openConnection();
urlConnection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11");
Files.copy(urlConnection.getInputStream(), Paths.get("local/cache/web_plugins/" + url.getName() + ".jar"));
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
for (ServerInstallablePlugin url : proxyGroup.getTemplate().getInstallablePlugins()) {
switch(url.getPluginResourceType()) {
case URL:
{
if (!Files.exists(Paths.get("local/cache/web_plugins/" + url.getName() + ".jar"))) {
try {
URLConnection urlConnection = new java.net.URL(url.getUrl()).openConnection();
urlConnection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11");
Files.copy(urlConnection.getInputStream(), Paths.get("local/cache/web_plugins/" + url.getName() + ".jar"));
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
break;
case MASTER:
{
if (!Files.exists(Paths.get("local/cache/web_plugins/" + url.getName() + ".jar")) && CloudNetWrapper.getInstance().getSimpledUser() != null) {
try {
URLConnection urlConnection = new java.net.URL(new StringBuilder(CloudNetWrapper.getInstance().getOptionSet().has("ssl") ? "https://" : "http://").append(CloudNetWrapper.getInstance().getWrapperConfig().getCloudnetHost()).append(":").append(CloudNetWrapper.getInstance().getWrapperConfig().getWebPort()).append("/cloudnet/api/v1/download").substring(0)).openConnection();
urlConnection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11");
SimpledUser simpledUser = CloudNetWrapper.getInstance().getSimpledUser();
urlConnection.setRequestProperty("-Xcloudnet-user", simpledUser.getUserName());
urlConnection.setRequestProperty("-Xcloudnet-token", simpledUser.getApiToken());
urlConnection.setRequestProperty("-Xmessage", "plugin");
urlConnection.setRequestProperty("-Xvalue", url.getName());
urlConnection.connect();
Files.copy(urlConnection.getInputStream(), Paths.get("local/cache/web_plugins/" + url.getName() + ".jar"));
((HttpURLConnection) urlConnection).disconnect();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
break;
default:
break;
}
}
if (proxyGroup.getProxyGroupMode().equals(ProxyGroupMode.STATIC)) {
if (!Files.exists(dir)) {
Files.createDirectories(dir);
if (proxyProcessMeta.getUrl() != null) {
Files.createDirectory(Paths.get(path + "/plugins"));
for (ServerInstallablePlugin plugin : proxyProcessMeta.getDownloadablePlugins()) {
FileCopy.copyFileToDirectory(new File("local/cache/web_plugins/" + plugin.getName() + ".jar"), new File(path + "/plugins"));
}
TemplateLoader templateLoader = new TemplateLoader(proxyProcessMeta.getUrl(), path + "/template.zip");
System.out.println("Downloading template for " + this.proxyProcessMeta.getServiceId().getServerId());
templateLoader.load();
templateLoader.unZip(path);
} else {
Files.createDirectory(Paths.get(path + "/plugins"));
for (ServerInstallablePlugin plugin : proxyProcessMeta.getDownloadablePlugins()) {
FileCopy.copyFileToDirectory(new File("local/cache/web_plugins/" + plugin.getName() + ".jar"), new File(path + "/plugins"));
}
for (ServerInstallablePlugin plugin : proxyGroup.getTemplate().getInstallablePlugins()) {
FileCopy.copyFileToDirectory(new File("local/cache/web_plugins/" + plugin.getName() + ".jar"), new File(path + "/plugins"));
}
Template template = proxyGroup.getTemplate();
if (template.getBackend().equals(TemplateResource.URL) && template.getUrl() != null) {
String groupTemplates = "local/cache/web_templates/" + proxyGroup.getName();
TemplateLoader templateLoader = new TemplateLoader(template.getUrl(), groupTemplates + "/template.zip");
System.out.println("Downloading template for " + this.proxyProcessMeta.getServiceId().getGroup());
templateLoader.load();
templateLoader.unZip(groupTemplates);
FileCopy.copyFilesInDirectory(new File("local/cache/web_templates/" + proxyGroup.getName()), new File(path));
} else if (template.getBackend().equals(TemplateResource.MASTER) && CloudNetWrapper.getInstance().getSimpledUser() != null) {
String groupTemplates = "local/cache/web_templates/" + proxyGroup.getName() + NetworkUtils.SLASH_STRING + template.getName();
if (!Files.exists(Paths.get(groupTemplates))) {
Files.createDirectories(Paths.get(groupTemplates));
MasterTemplateLoader templateLoader = new MasterTemplateLoader(new StringBuilder(CloudNetWrapper.getInstance().getOptionSet().has("ssl") ? "https://" : "http://").append(CloudNetWrapper.getInstance().getWrapperConfig().getCloudnetHost()).append(":").append(CloudNetWrapper.getInstance().getWrapperConfig().getWebPort()).append("/cloudnet/api/v1/download").substring(0), groupTemplates + "/template.zip", CloudNetWrapper.getInstance().getSimpledUser(), template, proxyGroup.getName(), null);
System.out.println("Downloading template for " + this.proxyProcessMeta.getServiceId().getGroup());
templateLoader.load();
templateLoader.unZip(groupTemplates);
}
FileCopy.copyFilesInDirectory(new File(groupTemplates), new File(path));
} else if (Files.exists(Paths.get("local/templates/" + proxyGroup.getName()))) {
FileCopy.copyFilesInDirectory(new File("local/templates/" + proxyGroup.getName()), new File(path));
} else {
return false;
}
}
}
} else {
try {
FileUtils.deleteDirectory(new File(path));
} catch (Exception ex) {
}
Files.createDirectories(dir);
if (proxyProcessMeta.getUrl() != null) {
Files.createDirectory(Paths.get(path + "/plugins"));
for (ServerInstallablePlugin plugin : proxyProcessMeta.getDownloadablePlugins()) FileCopy.copyFileToDirectory(new File("local/cache/web_plugins/" + plugin.getName() + ".jar"), new File(path + "/plugins"));
for (ServerInstallablePlugin plugin : proxyGroup.getTemplate().getInstallablePlugins()) FileCopy.copyFileToDirectory(new File("local/cache/web_plugins/" + plugin.getName() + ".jar"), new File(path + "/plugins"));
TemplateLoader templateLoader = new TemplateLoader(proxyProcessMeta.getUrl(), "local/templates/" + proxyGroup.getName() + "/template.zip");
System.out.println("Downloading template for " + this.proxyProcessMeta.getServiceId().getServerId());
templateLoader.load();
templateLoader.unZip(path);
} else {
Files.createDirectory(Paths.get(path + "/plugins"));
for (ServerInstallablePlugin plugin : proxyProcessMeta.getDownloadablePlugins()) {
FileCopy.copyFileToDirectory(new File("local/cache/web_plugins/" + plugin.getName() + ".jar"), new File(path + "/plugins"));
}
Template template = proxyGroup.getTemplate();
if (template.getBackend().equals(TemplateResource.URL) && template.getUrl() != null) {
String groupTemplates = "local/cache/web_templates/" + proxyGroup.getName();
TemplateLoader templateLoader = new TemplateLoader(template.getUrl(), groupTemplates + "/template.zip");
System.out.println("Downloading template for " + this.proxyProcessMeta.getServiceId().getGroup());
templateLoader.load();
templateLoader.unZip(groupTemplates);
FileCopy.copyFilesInDirectory(new File("local/cache/web_templates/" + proxyGroup.getName()), new File(path));
} else if (template.getBackend().equals(TemplateResource.MASTER) && CloudNetWrapper.getInstance().getSimpledUser() != null) {
String groupTemplates = "local/cache/web_templates/" + proxyGroup.getName() + NetworkUtils.SLASH_STRING + template.getName();
if (!Files.exists(Paths.get(groupTemplates))) {
Files.createDirectories(Paths.get(groupTemplates));
MasterTemplateLoader templateLoader = new MasterTemplateLoader(new StringBuilder(CloudNetWrapper.getInstance().getOptionSet().has("ssl") ? "https://" : "http://").append(CloudNetWrapper.getInstance().getWrapperConfig().getCloudnetHost()).append(":").append(CloudNetWrapper.getInstance().getWrapperConfig().getWebPort()).append("/cloudnet/api/v1/download").substring(0), groupTemplates + "/template.zip", CloudNetWrapper.getInstance().getSimpledUser(), template, proxyGroup.getName(), null);
System.out.println("Downloading template for " + this.proxyProcessMeta.getServiceId().getGroup());
templateLoader.load();
templateLoader.unZip(groupTemplates);
}
FileCopy.copyFilesInDirectory(new File(groupTemplates), new File(path));
} else if (Files.exists(Paths.get("local/templates/" + proxyGroup.getName()))) {
FileCopy.copyFilesInDirectory(new File("local/templates/" + proxyGroup.getName()), new File(path));
} else {
return false;
}
}
}
if (!Files.exists(Paths.get(path + "/config.yml"))) {
FileCopy.insertData("files/config.yml", path + "/config.yml");
}
if (!Files.exists(Paths.get(path + "/BungeeCord.jar"))) {
MultiValue<String, String> version = ProxyVersion.url(proxyGroup.getProxyVersion());
Path path = Paths.get("local/proxy_versions/" + version.getSecond());
if (!Files.exists(path)) {
try {
URLConnection urlConnection = new URL(version.getFirst()).openConnection();
urlConnection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11");
urlConnection.connect();
System.out.println("Downloading " + version.getSecond() + "...");
Files.copy(urlConnection.getInputStream(), path);
} catch (Exception ex) {
ex.printStackTrace();
}
}
FileCopy.copyFileToDirectory(new File("local/proxy_versions/" + version.getSecond()), new File(this.path));
new File(this.path + NetworkUtils.SLASH_STRING + version.getSecond()).renameTo(new File(this.path + "/BungeeCord.jar"));
}
if (!Files.exists(Paths.get(path + "/server-icon.png")) && Files.exists(Paths.get("local/server-icon.png")))
FileCopy.copyFileToDirectory(new File("local/server-icon.png"), new File(path));
Files.deleteIfExists(Paths.get(path + "/plugins/CloudNetAPI.jar"));
FileCopy.insertData("files/CloudNetAPI.jar", path + "/plugins/CloudNetAPI.jar");
FileCopy.rewriteFileUtils(new File(path + "/config.yml"), "\"" + CloudNetWrapper.getInstance().getWrapperConfig().getProxy_config_host() + ":" + this.proxyProcessMeta.getPort() + "\"");
if (CloudNetWrapper.getInstance().getWrapperConfig().isViaVersion()) {
if (!Files.exists(Paths.get("local/ViaVersion-Proxied.jar"))) {
try {
System.out.println("Downloading ViaVersion...");
URLConnection url = new URL("https://ci.viaversion.com/job/ViaVersion/lastSuccessfulBuild/artifact/jar/target/ViaVersion-1.3.0.jar").openConnection();
url.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11");
url.connect();
Files.copy(url.getInputStream(), Paths.get("local/ViaVersion-Proxied.jar"));
((HttpURLConnection) url).disconnect();
System.out.println("Download complete successfully!");
} catch (Exception ex) {
}
}
FileCopy.copyFileToDirectory(new File("local/ViaVersion-Proxied.jar"), new File(path + "/plugins"));
}
this.proxyInfo = new ProxyInfo(proxyProcessMeta.getServiceId(), CloudNetWrapper.getInstance().getWrapperConfig().getInternalIP(), proxyProcessMeta.getPort(), false, new LinkedList<>(), proxyProcessMeta.getMemory(), 0);
if (!Files.exists(Paths.get(path + "/CLOUD")))
Files.createDirectory(Paths.get(path + "/CLOUD"));
new Document().append("serviceId", proxyProcessMeta.getServiceId()).append("proxyProcess", proxyProcessMeta).append("host", CloudNetWrapper.getInstance().getWrapperConfig().getProxy_config_host() + ":" + this.proxyProcessMeta.getPort()).append("proxyInfo", proxyInfo).append("ssl", CloudNetWrapper.getInstance().getOptionSet().has("ssl")).append("memory", proxyProcessMeta.getMemory()).saveAsConfig(Paths.get(path + "/CLOUD/config.json"));
new Document().append("connection", new ConnectableAddress(CloudNetWrapper.getInstance().getWrapperConfig().getCloudnetHost(), CloudNetWrapper.getInstance().getWrapperConfig().getCloudnetPort())).saveAsConfig(Paths.get(path + "/CLOUD/connection.json"));
StringBuilder commandBuilder = new StringBuilder();
commandBuilder.append("java ");
for (String command : proxyProcessMeta.getProcessParameters()) commandBuilder.append(command).append(NetworkUtils.SPACE_STRING);
for (String command : proxyGroup.getTemplate().getProcessPreParameters()) commandBuilder.append(command).append(NetworkUtils.SPACE_STRING);
// commandBuilder.append("-XX:+UseG1GC -XX:MaxGCPauseMillis=50 -Djline.terminal=jline.UnsupportedTerminal -XX:MaxPermSize=256M -DIReallyKnowWhatIAmDoingISwear=true -Xmx" + proxyProcessMeta.getMemory() + "M -jar BungeeCord.jar -o true -p");
commandBuilder.append("-XX:+UseG1GC -XX:MaxGCPauseMillis=50 -XX:MaxPermSize=256M -XX:-UseAdaptiveSizePolicy -Dio.netty.leakDetectionLevel=DISABLED -Dfile.encoding=UTF-8 -Dio.netty.maxDirectMemory=0 -Dio.netty.recycler.maxCapacity=0 -Dio.netty.recycler.maxCapacity.default=0 -Djline.terminal=jline.UnsupportedTerminal -DIReallyKnowWhatIAmDoingISwear=true -Xmx" + proxyProcessMeta.getMemory() + "M -jar BungeeCord.jar -o true -p");
CloudNetWrapper.getInstance().getNetworkConnection().sendPacket(new PacketOutAddProxy(proxyInfo, proxyProcessMeta));
System.out.println("Proxy " + toString() + " started in [" + (System.currentTimeMillis() - startupTime) + " milliseconds]");
this.instance = Runtime.getRuntime().exec(commandBuilder.substring(0).split(NetworkUtils.SPACE_STRING), null, new File(path));
CloudNetWrapper.getInstance().getProxys().put(this.proxyProcessMeta.getServiceId().getServerId(), this);
return true;
}
use of de.dytanic.cloudnet.lib.service.plugin.ServerInstallablePlugin in project CloudNet by Dytanic.
the class CloudGameServer method bootstrap.
@Override
public boolean bootstrap() throws Exception {
long startupTime = System.currentTimeMillis();
for (ServerInstallablePlugin url : cloudServerMeta.getPlugins()) {
switch(url.getPluginResourceType()) {
case URL:
{
if (!Files.exists(Paths.get("local/cache/web_plugins/" + url.getName() + ".jar"))) {
try {
URLConnection urlConnection = new java.net.URL(url.getUrl()).openConnection();
urlConnection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11");
Files.copy(urlConnection.getInputStream(), Paths.get("local/cache/web_plugins/" + url.getName() + ".jar"));
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
break;
case MASTER:
{
if (!Files.exists(Paths.get("local/cache/web_plugins/" + url.getName() + ".jar")) && CloudNetWrapper.getInstance().getSimpledUser() != null) {
try {
URLConnection urlConnection = new java.net.URL(new StringBuilder(CloudNetWrapper.getInstance().getOptionSet().has("ssl") ? "https://" : "http://").append(CloudNetWrapper.getInstance().getWrapperConfig().getCloudnetHost()).append(":").append(CloudNetWrapper.getInstance().getWrapperConfig().getWebPort()).append("/cloudnet/api/v1/download").substring(0)).openConnection();
urlConnection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11");
SimpledUser simpledUser = CloudNetWrapper.getInstance().getSimpledUser();
urlConnection.setRequestProperty("-Xcloudnet-user", simpledUser.getUserName());
urlConnection.setRequestProperty("-Xcloudnet-token", simpledUser.getApiToken());
urlConnection.setRequestProperty("-Xmessage", "plugin");
urlConnection.setRequestProperty("-Xvalue", url.getName());
urlConnection.connect();
System.out.println("Downloading " + url.getName() + ".jar");
Files.copy(urlConnection.getInputStream(), Paths.get("local/cache/web_plugins/" + url.getName() + ".jar"));
System.out.println("Download was completed successfully!");
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
break;
default:
break;
}
}
Files.createDirectories(this.dir);
// Template
MasterTemplateLoader templateLoader = new MasterTemplateLoader(new StringBuilder(CloudNetWrapper.getInstance().getOptionSet().has("ssl") ? "https://" : "http://").append(CloudNetWrapper.getInstance().getWrapperConfig().getCloudnetHost()).append(":").append(CloudNetWrapper.getInstance().getWrapperConfig().getWebPort()).append("/cloudnet/api/v1/download").toString(), dir.toString() + "/template.zip", CloudNetWrapper.getInstance().getSimpledUser(), null, null, cloudServerMeta.getTemplateName());
System.out.println("Downloading cloud server for " + this.cloudServerMeta.getServiceId());
templateLoader.load();
templateLoader.unZip(dir.toString());
FileCopy.copyFilesInDirectory(new File(dir.toString()), new File(path));
if (cloudServerMeta.getServerGroupType().equals(ServerGroupType.CAULDRON)) {
try {
System.out.println("Downloading cauldron.zip...");
File file = new File(path + "/cauldron.zip");
URLConnection connection = new URL("https://yivesmirror.com/files/cauldron/cauldron-1.7.10-2.1403.1.54.zip").openConnection();
connection.setUseCaches(false);
connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11");
connection.connect();
Files.copy(connection.getInputStream(), Paths.get(path + "/cauldron.zip"));
((HttpURLConnection) connection).disconnect();
System.out.println("Download was completed successfully!");
ZipFile zip = new ZipFile(file);
Enumeration<? extends ZipEntry> entryEnumeration = zip.entries();
while (entryEnumeration.hasMoreElements()) {
ZipEntry entry = entryEnumeration.nextElement();
if (!entry.isDirectory()) {
extractEntry(zip, entry, path);
}
}
zip.close();
file.delete();
new File(path + "/cauldron-1.7.10-2.1403.1.54-server.jar").renameTo(new File(path + "/cauldron.jar"));
try (FileWriter fileWriter = new FileWriter(path + "/eula.txt")) {
fileWriter.write("eula=true");
fileWriter.flush();
}
} catch (Exception e) {
e.printStackTrace();
}
}
if (cloudServerMeta.getServerGroupType().equals(ServerGroupType.GLOWSTONE)) {
Path path = Paths.get(this.path + "/glowstone.jar");
if (!Files.exists(path)) {
try {
URLConnection connection = new URL("https://yivesmirror.com/grab/glowstone/Glowstone-latest.jar").openConnection();
connection.setUseCaches(false);
connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11");
connection.connect();
System.out.println("Downloading glowstone.jar...");
Files.copy(connection.getInputStream(), path);
System.out.println("Download was completed successfully");
((HttpURLConnection) connection).disconnect();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
// Init
for (ServerInstallablePlugin plugin : cloudServerMeta.getPlugins()) FileCopy.copyFileToDirectory(new File("local/cache/web_plugins/" + plugin.getName() + ".jar"), new File(path + "/plugins"));
for (ServerInstallablePlugin plugin : cloudServerMeta.getPlugins()) FileCopy.copyFileToDirectory(new File("local/cache/web_plugins/" + plugin.getName() + ".jar"), new File(path + "/plugins"));
if (cloudServerMeta.getServerGroupType().equals(ServerGroupType.BUKKIT))
if (!Files.exists(Paths.get(path + "/spigot.jar")))
FileCopy.copyFileToDirectory(new File("local/spigot.jar"), new File(path));
if (cloudServerMeta.getServerGroupType().equals(ServerGroupType.GLOWSTONE)) {
if (!Files.exists(Paths.get(path + "/config")))
Files.createDirectories(Paths.get(path + "/config"));
if (!Files.exists(Paths.get(path + "/config/glowstone.yml")))
FileCopy.insertData("files/glowstone.yml", path + "/config/glowstone.yml");
}
if (!Files.exists(Paths.get(path + "/server.properties")))
FileCopy.insertData("files/server.properties", path + "/server.properties");
if (!Files.exists(Paths.get(path + "/bukkit.yml")))
FileCopy.insertData("files/bukkit.yml", path + "/bukkit.yml");
if (!Files.exists(Paths.get(path + "/spigot.yml")))
FileCopy.insertData("files/spigot.yml", path + "/spigot.yml");
if (!Files.exists(Paths.get(path + "/plugins")))
Files.createDirectory(Paths.get(path + "/plugins"));
if (!Files.exists(Paths.get(path + "/CLOUD")))
Files.createDirectory(Paths.get(path + "/CLOUD"));
Files.deleteIfExists(Paths.get(path + "/plugins/CloudNetAPI.jar"));
FileCopy.insertData("files/CloudNetAPI.jar", path + "/plugins/CloudNetAPI.jar");
try {
FileCopy.copyFilesInDirectory(new File("local/global_cloudserver"), new File(path));
} catch (Exception ex) {
}
if (CloudNetWrapper.getInstance().getWrapperConfig().isViaVersion()) {
if (!Files.exists(Paths.get("local/viaversion.jar"))) {
try {
System.out.println("Downloading ViaVersion...");
URLConnection url = new URL("https://ci.viaversion.com/job/ViaVersion/177/artifact/jar/target/ViaVersion-1.2.0.jar").openConnection();
url.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11");
url.connect();
Files.copy(url.getInputStream(), Paths.get("local/viaversion.jar"));
((HttpURLConnection) url).disconnect();
System.out.println("Download was completed successfully!");
} catch (Exception ex) {
}
}
FileCopy.copyFileToDirectory(new File("local/viaversion.jar"), new File(path + "/plugins"));
}
/*===============================================================================*/
String motd = "Default Motd";
int maxPlayers = 0;
if (!cloudServerMeta.getServerGroupType().equals(ServerGroupType.GLOWSTONE)) {
Properties properties = new Properties();
try (InputStreamReader inputStreamReader = new InputStreamReader(Files.newInputStream(Paths.get(path + "/server.properties")))) {
properties.load(inputStreamReader);
}
Enumeration enumeration = this.cloudServerMeta.getServerProperties().keys();
while (enumeration.hasMoreElements()) {
String x = enumeration.nextElement().toString();
properties.setProperty(x, this.cloudServerMeta.getServerProperties().getProperty(x));
}
properties.setProperty("server-ip", CloudNetWrapper.getInstance().getWrapperConfig().getInternalIP());
properties.setProperty("server-port", cloudServerMeta.getPort() + NetworkUtils.EMPTY_STRING);
properties.setProperty("online-mode", "false");
// properties.setProperty("server-name", serverProcess.getMeta().getServiceId().getServerId());
motd = properties.getProperty("motd");
maxPlayers = Integer.parseInt(properties.getProperty("max-players"));
try (OutputStream outputStream = Files.newOutputStream(Paths.get(path + "/server.properties"))) {
properties.store(outputStream, "CloudNet-Wrapper EDIT");
}
} else {
try (InputStreamReader inputStreamReader = new InputStreamReader(Files.newInputStream(Paths.get(path + "/config/glowstone.yml")), StandardCharsets.UTF_8)) {
Configuration configuration = ConfigurationProvider.getProvider(YamlConfiguration.class).load(inputStreamReader);
Configuration section = configuration.getSection("server");
section.set("ip", CloudNetWrapper.getInstance().getWrapperConfig().getInternalIP());
section.set("port", cloudServerMeta.getPort());
maxPlayers = section.getInt("max-players");
motd = section.getString("motd");
configuration.set("server", section);
configuration.set("console.use-jline", false);
try (OutputStreamWriter outputStreamWriter = new OutputStreamWriter(Files.newOutputStream(Paths.get(path + "/config/glowstone.yml")), StandardCharsets.UTF_8)) {
ConfigurationProvider.getProvider(YamlConfiguration.class).save(configuration, outputStreamWriter);
}
}
}
/*===============================================================================*/
this.serverInfo = new ServerInfo(cloudServerMeta.getServiceId(), CloudNetWrapper.getInstance().getWrapperConfig().getInternalIP(), this.cloudServerMeta.getPort(), false, new ArrayList<>(), cloudServerMeta.getMemory(), motd, 0, maxPlayers, ServerState.OFFLINE, this.cloudServerMeta.getServerConfig(), cloudServerMeta.getTemplate());
new Document().append("serviceId", cloudServerMeta.getServiceId()).append("cloudProcess", cloudServerMeta).append("serverInfo", serverInfo).append("ssl", CloudNetWrapper.getInstance().getOptionSet().has("ssl")).append("memory", cloudServerMeta.getMemory()).saveAsConfig(Paths.get(path + "/CLOUD/config.json"));
new Document().append("connection", new ConnectableAddress(CloudNetWrapper.getInstance().getWrapperConfig().getCloudnetHost(), CloudNetWrapper.getInstance().getWrapperConfig().getCloudnetPort())).saveAsConfig(Paths.get(path + "/CLOUD/connection.json"));
Files.deleteIfExists(Paths.get(path + "/plugins/CloudNetAPI.jar"));
FileCopy.insertData("files/CloudNetAPI.jar", path + "/plugins/CloudNetAPI.jar");
StringBuilder commandBuilder = new StringBuilder();
commandBuilder.append("java ");
for (String command : cloudServerMeta.getProcessParameters()) {
commandBuilder.append(command).append(NetworkUtils.SPACE_STRING);
}
commandBuilder.append("-XX:+UseG1GC -XX:MaxGCPauseMillis=50 -XX:MaxPermSize=256M -XX:-UseAdaptiveSizePolicy -Dio.netty.leakDetectionLevel=DISABLED -Dfile.encoding=UTF-8 -Dio.netty.maxDirectMemory=0 -Dcom.mojang.eula.agree=true -Dio.netty.recycler.maxCapacity=0 -Dio.netty.recycler.maxCapacity.default=0 -Djline.terminal=jline.UnsupportedTerminal -Xmx" + cloudServerMeta.getMemory() + "M -jar ");
switch(cloudServerMeta.getServerGroupType()) {
case CAULDRON:
commandBuilder.append("cauldron.jar nogui");
break;
case GLOWSTONE:
commandBuilder.append("glowstone.jar nogui");
break;
case CUSTOM:
commandBuilder.append("minecraft_server.jar nogui");
break;
default:
commandBuilder.append("spigot.jar nogui");
break;
}
CloudNetWrapper.getInstance().getCloudservers().put(this.cloudServerMeta.getServiceId().getServerId(), this);
CloudNetWrapper.getInstance().getNetworkConnection().sendPacket(new PacketOutAddCloudServer(this.serverInfo, cloudServerMeta));
System.out.println("CloudServer " + toString() + " [" + (cloudServerMeta.isPriorityStop() ? "priority stop: true" : "priority stop: false") + "] start [" + (System.currentTimeMillis() - startupTime) + " milliseconds]");
this.instance = Runtime.getRuntime().exec(commandBuilder.toString().split(NetworkUtils.SPACE_STRING), null, new File(path));
return true;
}
Aggregations