diff --git a/build.gradle b/build.gradle index e84bf79455..47659a55f7 100644 --- a/build.gradle +++ b/build.gradle @@ -326,11 +326,11 @@ project(':forge') { installer 'org.ow2.asm:asm:6.2' installer 'org.ow2.asm:asm-commons:6.2' installer 'org.ow2.asm:asm-tree:6.2' - installer 'cpw.mods:modlauncher:1.1.+' + installer 'cpw.mods:modlauncher:2.1.+' installer 'net.minecraftforge:accesstransformers:0.16.+:shadowed' installer 'net.minecraftforge:eventbus:0.9.+:service' - installer 'net.minecraftforge:forgespi:0.12.+' - installer 'net.minecraftforge:coremods:0.4.+' + installer 'net.minecraftforge:forgespi:0.13.+' + installer 'net.minecraftforge:coremods:0.5.+' installer 'net.minecraftforge:unsafe:0.2.+' installer 'com.electronwill.night-config:core:3.6.0' installer 'com.electronwill.night-config:toml:3.6.0' @@ -338,8 +338,8 @@ project(':forge') { installer 'org.apache.maven:maven-artifact:3.6.0' installer 'net.jodah:typetools:0.6.0' installer 'java3d:vecmath:1.5.2' - installer 'org.apache.logging.log4j:log4j-api:2.11.1' - installer 'org.apache.logging.log4j:log4j-core:2.11.1' + installer 'org.apache.logging.log4j:log4j-api:2.11.2' + installer 'org.apache.logging.log4j:log4j-core:2.11.2' installer 'net.minecrell:terminalconsoleappender:1.1.+' installer 'net.sf.jopt-simple:jopt-simple:5.0.4' fmllauncherImplementation 'com.google.guava:guava:21.0' diff --git a/patches/minecraft/net/minecraft/crash/CrashReport.java.patch b/patches/minecraft/net/minecraft/crash/CrashReport.java.patch index 47cda05e2f..b90b7c18e6 100644 --- a/patches/minecraft/net/minecraft/crash/CrashReport.java.patch +++ b/patches/minecraft/net/minecraft/crash/CrashReport.java.patch @@ -8,7 +8,25 @@ } public String func_71501_a() { -@@ -132,6 +133,7 @@ +@@ -115,23 +116,13 @@ + throwable.setStackTrace(this.field_71511_b.getStackTrace()); + } + +- String s; +- try { +- stringwriter = new StringWriter(); +- printwriter = new PrintWriter(stringwriter); +- throwable.printStackTrace(printwriter); +- s = stringwriter.toString(); +- } finally { +- IOUtils.closeQuietly((Writer)stringwriter); +- IOUtils.closeQuietly((Writer)printwriter); +- } +- +- return s; ++ return net.minecraftforge.fml.CrashReportExtender.generateEnhancedStackTrace(throwable); + } + public String func_71502_e() { StringBuilder stringbuilder = new StringBuilder(); stringbuilder.append("---- Minecraft Crash Report ----\n"); diff --git a/src/fmllauncher/java/net/minecraftforge/fml/loading/FMLPaths.java b/src/fmllauncher/java/net/minecraftforge/fml/loading/FMLPaths.java index 7586d05e57..21483273d4 100644 --- a/src/fmllauncher/java/net/minecraftforge/fml/loading/FMLPaths.java +++ b/src/fmllauncher/java/net/minecraftforge/fml/loading/FMLPaths.java @@ -79,6 +79,10 @@ public enum FMLPaths } } + public Path relative() { + return relativePath; + } + public Path get() { return absolutePath; } diff --git a/src/fmllauncher/java/net/minecraftforge/fml/loading/ModDirTransformerDiscoverer.java b/src/fmllauncher/java/net/minecraftforge/fml/loading/ModDirTransformerDiscoverer.java new file mode 100644 index 0000000000..7e2662f196 --- /dev/null +++ b/src/fmllauncher/java/net/minecraftforge/fml/loading/ModDirTransformerDiscoverer.java @@ -0,0 +1,38 @@ +package net.minecraftforge.fml.loading; + +import cpw.mods.modlauncher.api.LamdbaExceptionUtils; +import cpw.mods.modlauncher.serviceapi.ITransformerDiscoveryService; +import org.apache.logging.log4j.LogManager; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; +import java.util.zip.ZipFile; + +public class ModDirTransformerDiscoverer implements ITransformerDiscoveryService { + @Override + public List candidates(final Path gameDirectory) { + final Path modsDir = gameDirectory.resolve(FMLPaths.MODSDIR.relative()); + List paths = new ArrayList<>(); + try { + Files.walk(modsDir, 1).forEach(p -> { + if (!Files.isRegularFile(p)) return; + if (!p.toString().endsWith(".jar")) return; + if (LamdbaExceptionUtils.uncheck(()->Files.size(p)) == 0) return; + try (ZipFile zf = new ZipFile(new File(p.toUri()))) { + if (zf.getEntry("META-INF/services/cpw.mods.modlauncher.api.ITransformationService") != null) { + paths.add(p); + } + } catch (IOException ioe) { + LogManager.getLogger().error("Zip Error when loading jar file {}", p, ioe); + } + }); + } catch (IOException | IllegalStateException ioe) { + LogManager.getLogger().error("Error during early discovery", ioe); + } + return paths; + } +} \ No newline at end of file diff --git a/src/fmllauncher/java/net/minecraftforge/fml/loading/moddiscovery/CoreModFile.java b/src/fmllauncher/java/net/minecraftforge/fml/loading/moddiscovery/CoreModFile.java index 2e933012ee..6a920789d8 100644 --- a/src/fmllauncher/java/net/minecraftforge/fml/loading/moddiscovery/CoreModFile.java +++ b/src/fmllauncher/java/net/minecraftforge/fml/loading/moddiscovery/CoreModFile.java @@ -46,4 +46,9 @@ public class CoreModFile implements ICoreModFile { public Path getPath() { return this.internalPath; } + + @Override + public String getOwnerId() { + return this.file.getModInfos().get(0).getModId(); + } } diff --git a/src/fmllauncher/java/net/minecraftforge/fml/loading/moddiscovery/ModsFolderLocator.java b/src/fmllauncher/java/net/minecraftforge/fml/loading/moddiscovery/ModsFolderLocator.java index 827a759c2f..e361c9b586 100644 --- a/src/fmllauncher/java/net/minecraftforge/fml/loading/moddiscovery/ModsFolderLocator.java +++ b/src/fmllauncher/java/net/minecraftforge/fml/loading/moddiscovery/ModsFolderLocator.java @@ -19,6 +19,7 @@ package net.minecraftforge.fml.loading.moddiscovery; +import net.minecraftforge.fml.loading.ModDirTransformerDiscoverer; import net.minecraftforge.fml.loading.StringUtils; import net.minecraftforge.fml.loading.FMLPaths; import org.apache.logging.log4j.LogManager; @@ -54,7 +55,9 @@ public class ModsFolderLocator extends AbstractJarFileLocator { @Override public List scanMods() { LOGGER.debug(SCAN,"Scanning mods dir {} for mods", this.modFolder); + List excluded = new ModDirTransformerDiscoverer().candidates(FMLPaths.GAMEDIR.get()); return uncheck(()-> Files.list(this.modFolder)). + filter(p->!excluded.contains(p)). sorted(Comparator.comparing(path-> StringUtils.toLowerCase(path.getFileName().toString()))). filter(p->StringUtils.toLowerCase(p.getFileName().toString()).endsWith(SUFFIX)). map(p->new ModFile(p, this)). diff --git a/src/fmllauncher/resources/META-INF/services/cpw.mods.modlauncher.serviceapi.ITransformerDiscoveryService b/src/fmllauncher/resources/META-INF/services/cpw.mods.modlauncher.serviceapi.ITransformerDiscoveryService new file mode 100644 index 0000000000..48b92283d6 --- /dev/null +++ b/src/fmllauncher/resources/META-INF/services/cpw.mods.modlauncher.serviceapi.ITransformerDiscoveryService @@ -0,0 +1 @@ +net.minecraftforge.fml.loading.ModDirTransformerDiscoverer \ No newline at end of file diff --git a/src/fmllauncher/resources/log4j2.xml b/src/fmllauncher/resources/log4j2.xml new file mode 100644 index 0000000000..29eb491b0f --- /dev/null +++ b/src/fmllauncher/resources/log4j2.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/net/minecraftforge/fml/CrashReportExtender.java b/src/main/java/net/minecraftforge/fml/CrashReportExtender.java index d48cbde4c8..107048f01a 100644 --- a/src/main/java/net/minecraftforge/fml/CrashReportExtender.java +++ b/src/main/java/net/minecraftforge/fml/CrashReportExtender.java @@ -19,6 +19,7 @@ package net.minecraftforge.fml; +import cpw.mods.modlauncher.log.TransformingThrowablePatternConverter; import net.minecraft.crash.CrashReport; import net.minecraft.crash.CrashReportCategory; import net.minecraftforge.fml.common.ICrashCallable; @@ -78,4 +79,9 @@ public class CrashReportExtender public static void addCrashReportHeader(StringBuilder stringbuilder, CrashReport crashReport) { } + + public static String generateEnhancedStackTrace(final Throwable throwable) { + return TransformingThrowablePatternConverter.generateEnhancedStackTrace(throwable); + } + } diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml index 28cbfac7b1..29eb491b0f 100644 --- a/src/main/resources/log4j2.xml +++ b/src/main/resources/log4j2.xml @@ -1,5 +1,5 @@ - + @@ -20,10 +20,10 @@ - + - - + +