Skip to content

Commit

Permalink
Fix for recent versions of spongeforge
Browse files Browse the repository at this point in the history
  • Loading branch information
simon816 committed Nov 15, 2016
1 parent fea4771 commit fce6845
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 8 deletions.
4 changes: 3 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ apply plugin: 'eclipse'
sourceCompatibility = '1.6'
targetCompatibility = '1.6'

version = '0.1.0'
version = '0.2.0'

repositories {
mavenCentral()
Expand Down Expand Up @@ -35,6 +35,8 @@ jar {
"Class-Path": "libraries/net/minecraft/launchwrapper/1.12/launchwrapper-1.12.jar"
+ " libraries/net/sf/jopt-simple/jopt-simple/4.6/jopt-simple-4.6.jar"
+ " minecraft_server.1.8.9.jar"
+ " minecraft_server.1.10.2.jar"
+ " minecraft_server.1.11.jar"
)
}
}
38 changes: 31 additions & 7 deletions src/main/java/com/simon816/sponge/bootstrap/Bootstrap.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.jar.Attributes;

public class Bootstrap {

Expand All @@ -28,7 +29,9 @@ public class Bootstrap {
private static final String POST_TWEAKER = "com.simon816.sponge.bootstrap.Bootstrap$PostFMLTweaker";
public static final String FML_TWEAKER = "net.minecraftforge.fml.common.launcher.FMLServerTweaker";

private static final Logger logger = LogManager.getLogger("SpongeBootstrap");
static final Logger logger = LogManager.getLogger("SpongeBootstrap");

static File spongeJar;

public static void main(String[] args) {
logger.info("Detecting environment...");
Expand Down Expand Up @@ -79,25 +82,29 @@ private static void findAndLoadJars() {
@Override
public boolean accept(File pathname) {
String fn = pathname.getName().toLowerCase();
return fn.endsWith(".jar") && fn.contains("forge") && fn.contains("-universal") && fn.contains("1.8.9");
return fn.endsWith(".jar") && fn.contains("forge") && fn.contains("-universal") && supportedVersion(fn);
}
});
findJar(new File(rootDir, "mods"), "sponge", new FileFilter() {
spongeJar = findJar(new File(rootDir, "mods"), "sponge", new FileFilter() {

@Override
public boolean accept(File pathname) {
String fn = pathname.getName().toLowerCase();
return fn.endsWith(".jar") && fn.contains("sponge") && fn.contains("1.8.9");
return fn.endsWith(".jar") && fn.contains("sponge") && supportedVersion(fn);
}
});
}

private static void findJar(File directory, String jarName, FileFilter filter) {
static boolean supportedVersion(String fn) {
return fn.contains("1.8.9") || fn.contains("1.10.2") || fn.contains("1.11");
}

private static File findJar(File directory, String jarName, FileFilter filter) {
File[] files = directory.listFiles(filter);
if (files == null) {
System.err.println("An error occured when listing directory contents");
System.exit(1);
return;
return null;
}
if (files.length == 0) {
System.err.println("Could not find " + jarName + " jar. Please make sure a" + jarName + " jar exists.");
Expand Down Expand Up @@ -127,6 +134,7 @@ private static void findJar(File directory, String jarName, FileFilter filter) {
e.printStackTrace();
System.exit(1);
}
return jarFile;
}

private static void load(String[] args) {
Expand Down Expand Up @@ -168,11 +176,27 @@ public void injectIntoClassLoader(LaunchClassLoader classLoader) {
System.arraycopy(rootPlugins, 0, rootPlugins2, 0, rootPlugins.length);
rootPlugins2[rootPlugins.length] = COREMOD;
rootPluginsField.set(null, rootPlugins2);
mixinHackLookAwayNow();
logger.info("SpongeCoremod successfully injected into FML");
} catch (Exception e) {
e.printStackTrace();
}
}

private void mixinHackLookAwayNow() throws ReflectiveOperationException {
if (spongeJar == null) { // In dev environment
return;
}
// Stop mixin from trying to load spongeforge for a second time
Class<?> attrClass = Class.forName("org.spongepowered.asm.launch.platform.MainAttributes");
Method mOf = attrClass.getMethod("of", File.class);
mOf.setAccessible(true);
Object inst = mOf.invoke(null, spongeJar);
Field fAttr = attrClass.getDeclaredField("attributes");
fAttr.setAccessible(true);
Attributes attr = (Attributes) fAttr.get(inst);
attr.remove(new Attributes.Name("FMLCorePlugin"));
}
}

public static class PostFMLTweaker extends SimpleTweaker {
Expand Down Expand Up @@ -204,7 +228,7 @@ public void injectIntoClassLoader(LaunchClassLoader classLoader) {
}
}

private static class SimpleTweaker implements ITweaker {
static class SimpleTweaker implements ITweaker {

@Override
public void acceptOptions(List<String> args, File gameDir, File assetsDir, String profile) {
Expand Down

0 comments on commit fce6845

Please sign in to comment.