diff --git a/src/main/java/net/minecraftforge/fml/common/Loader.java b/src/main/java/net/minecraftforge/fml/common/Loader.java index 0afe5e17f0..4c739b42e7 100644 --- a/src/main/java/net/minecraftforge/fml/common/Loader.java +++ b/src/main/java/net/minecraftforge/fml/common/Loader.java @@ -219,7 +219,9 @@ public class Loader if (!mod.acceptableMinecraftVersionRange().containsVersion(minecraft.getProcessedVersion())) { FMLLog.severe("The mod %s does not wish to run in Minecraft version %s. You will have to remove it to play.", mod.getModId(), getMCVersionString()); - throw new WrongMinecraftVersionException(mod); + RuntimeException ret = new WrongMinecraftVersionException(mod, getMCVersionString()); + FMLLog.severe(ret.getMessage()); + throw ret; } Map names = Maps.uniqueIndex(mod.getRequirements(), new ArtifactVersionNameFunction()); Set versionMissingMods = Sets.newHashSet(); @@ -232,7 +234,9 @@ public class Loader { versionMissingMods.add(names.get(modid)); } - throw new MissingModsException(versionMissingMods, mod.getModId(), mod.getName()); + RuntimeException ret = new MissingModsException(versionMissingMods, mod.getModId(), mod.getName()); + FMLLog.severe(ret.getMessage()); + throw ret; } reqList.putAll(mod.getModId(), names.keySet()); ImmutableList allDeps = ImmutableList.builder().addAll(mod.getDependants()).addAll(mod.getDependencies()).build(); @@ -249,7 +253,9 @@ public class Loader if (!versionMissingMods.isEmpty()) { FMLLog.severe("The mod %s (%s) requires mod versions %s to be available", mod.getModId(), mod.getName(), versionMissingMods); - throw new MissingModsException(versionMissingMods, mod.getModId(), mod.getName()); + RuntimeException ret = new MissingModsException(versionMissingMods, mod.getModId(), mod.getName()); + FMLLog.severe(ret.toString()); + throw ret; } } diff --git a/src/main/java/net/minecraftforge/fml/common/WrongMinecraftVersionException.java b/src/main/java/net/minecraftforge/fml/common/WrongMinecraftVersionException.java index f093ab378c..ea272a7250 100644 --- a/src/main/java/net/minecraftforge/fml/common/WrongMinecraftVersionException.java +++ b/src/main/java/net/minecraftforge/fml/common/WrongMinecraftVersionException.java @@ -12,15 +12,27 @@ package net.minecraftforge.fml.common; -public class WrongMinecraftVersionException extends RuntimeException +public class WrongMinecraftVersionException extends EnhancedRuntimeException { private static final long serialVersionUID = 1L; public ModContainer mod; + private String mcVersion; - public WrongMinecraftVersionException(ModContainer mod) + public WrongMinecraftVersionException(ModContainer mod, String mcver) { super(String.format("Wrong Minecraft version for %s", mod.getModId())); this.mod = mod; + this.mcVersion = mcver; + } + + @Override + protected void printStackTrace(WrappedPrintStream stream) { + stream.println("Wrong Minecraft Versions!"); + stream.println("Mod: " + mod.getModId()); + stream.println("Location: " + mod.getSource().toString()); + stream.println("Expected: " + mod.acceptableMinecraftVersionRange().toString()); + stream.println("Current: " + mcVersion); + stream.println(""); } } diff --git a/src/main/java/net/minecraftforge/fml/common/toposort/ModSortingException.java b/src/main/java/net/minecraftforge/fml/common/toposort/ModSortingException.java index 78b3e8151a..1ee799ef70 100644 --- a/src/main/java/net/minecraftforge/fml/common/toposort/ModSortingException.java +++ b/src/main/java/net/minecraftforge/fml/common/toposort/ModSortingException.java @@ -14,7 +14,14 @@ package net.minecraftforge.fml.common.toposort; import java.util.Set; -public class ModSortingException extends RuntimeException +import org.apache.logging.log4j.Level; + +import net.minecraftforge.fml.common.EnhancedRuntimeException; +import net.minecraftforge.fml.common.FMLLog; +import net.minecraftforge.fml.common.ModContainer; +import net.minecraftforge.fml.common.toposort.ModSortingException.SortingExceptionData; + +public class ModSortingException extends EnhancedRuntimeException { private static final long serialVersionUID = 1L; @@ -53,4 +60,17 @@ public class ModSortingException extends RuntimeException return (SortingExceptionData) sortingExceptionData; } + @Override + protected void printStackTrace(WrappedPrintStream stream) + { + SortingExceptionData exceptionData = getExceptionData(); + stream.println("A dependency cycle was detected in the input mod set so an ordering cannot be determined"); + stream.println("The first mod in the cycle is " + exceptionData.getFirstBadNode()); + stream.println("The mod cycle involves:"); + for (ModContainer mc : exceptionData.getVisitedNodes()) + { + stream.println(String.format("\t%s : before: %s, after: %s", mc.toString(), mc.getDependants(), mc.getDependencies())); + } + } + }