From 1588c7fa0f6f7633feda3acff92e85332188380d Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Sun, 31 Jul 2016 01:59:41 +0200 Subject: [PATCH] Added files --- .gitignore | 2 + .project | 23 +++++++ pom.xml | 27 ++++++++ .../serverrunner/ServerMain.java | 7 +++ .../serverrunner/ServerRunner.java | 61 +++++++++++++++++++ 5 files changed, 120 insertions(+) create mode 100644 .gitignore create mode 100644 .project create mode 100644 pom.xml create mode 100644 src/buttondevteam/serverrunner/ServerMain.java create mode 100644 src/buttondevteam/serverrunner/ServerRunner.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..09e3bc9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/bin/ +/target/ diff --git a/.project b/.project new file mode 100644 index 0000000..3328f97 --- /dev/null +++ b/.project @@ -0,0 +1,23 @@ + + + MCServerRunner + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.m2e.core.maven2Nature + org.eclipse.jdt.core.javanature + + diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..82b538b --- /dev/null +++ b/pom.xml @@ -0,0 +1,27 @@ + + 4.0.0 + ButtonDevTeam + MCServerRunner + 0.0.1-SNAPSHOT + + src + + + maven-compiler-plugin + 3.5.1 + + 1.8 + 1.8 + + + + + + + org.xeustechnologies + jcl-core + 2.6 + + + \ No newline at end of file diff --git a/src/buttondevteam/serverrunner/ServerMain.java b/src/buttondevteam/serverrunner/ServerMain.java new file mode 100644 index 0000000..8ddbf3d --- /dev/null +++ b/src/buttondevteam/serverrunner/ServerMain.java @@ -0,0 +1,7 @@ +package buttondevteam.serverrunner; + +import org.bukkit.craftbukkit.Main; + +public class ServerMain extends Main { + +} diff --git a/src/buttondevteam/serverrunner/ServerRunner.java b/src/buttondevteam/serverrunner/ServerRunner.java new file mode 100644 index 0000000..68794a4 --- /dev/null +++ b/src/buttondevteam/serverrunner/ServerRunner.java @@ -0,0 +1,61 @@ +package buttondevteam.serverrunner; + +import java.util.logging.ConsoleHandler; +import java.util.logging.Level; +import java.util.logging.Logger; +import java.util.logging.SimpleFormatter; + +import org.bukkit.Bukkit; +import org.bukkit.craftbukkit.Main; +import org.bukkit.craftbukkit.v1_9_R1.CraftServer; +import org.xeustechnologies.jcl.ClasspathResources; +import org.xeustechnologies.jcl.Configuration; +import org.xeustechnologies.jcl.JarClassLoader; +import org.xeustechnologies.jcl.JclObjectFactory; +import org.xeustechnologies.jcl.proxy.CglibProxyProvider; +import org.xeustechnologies.jcl.proxy.ProxyProviderFactory; + +public class ServerRunner { + private static final String SERVER_VERSION = "1.9.2"; + + @SuppressWarnings("static-access") + public static void main(String[] args) { + try { + System.out.println("Loading server classes..."); + JarClassLoader jcl = new JarClassLoader(); + jcl.getSystemLoader().setEnabled(true); + jcl.getCurrentLoader().setEnabled(false); + jcl.getParentLoader().setEnabled(false); + jcl.getOsgiBootLoader().setEnabled(false); + jcl.getThreadLoader().setEnabled(false); + jcl.getLocalLoader().setEnabled(true); + jcl.add("spigot-" + SERVER_VERSION + ".jar"); + jcl.add("craftbukkit-" + SERVER_VERSION + ".jar"); + System.out.println("Starting server..."); + // Set default to cglib (from version 2.2.1) + ProxyProviderFactory.setDefaultProxyProvider(new CglibProxyProvider()); + + // Create a factory of castable objects/proxies + JclObjectFactory factory = JclObjectFactory.getInstance(true); + + // Create and cast object of loaded class + Main serverinstance = (Main) factory.create(jcl, "buttondevteam.serverrunner.ServerMain"); + serverinstance.main(new String[0]); + Thread.sleep(5000); // Wait for primaryThread to be set + while (Bukkit.getServer() == null || ((CraftServer) Bukkit.getServer()).getServer() == null + || ((CraftServer) Bukkit.getServer()).getServer().primaryThread == null) + ; + ((CraftServer) Bukkit.getServer()).getServer().primaryThread.join(); + /* + * for (Thread t : Thread.getAllStackTraces().keySet()) if + * (t.getName().equals("Server Infinisleeper")) t.join(); + */ // TODO: After stopping the server it stops + System.out.println("Unloading classes..."); + for (String entry : jcl.getLoadedClasses().keySet()) + jcl.unloadClass(entry); + System.out.println("Done!"); + } catch (Exception e) { + e.printStackTrace(); + } + } +}