diff --git a/javafmllanguage/src/main/java/net/minecraftforge/fml/javafmlmod/FMLModContainer.java b/javafmllanguage/src/main/java/net/minecraftforge/fml/javafmlmod/FMLModContainer.java index a2fbedbe1c..e0186a00bc 100644 --- a/javafmllanguage/src/main/java/net/minecraftforge/fml/javafmlmod/FMLModContainer.java +++ b/javafmllanguage/src/main/java/net/minecraftforge/fml/javafmlmod/FMLModContainer.java @@ -21,6 +21,8 @@ import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Marker; import org.apache.logging.log4j.MarkerManager; +import java.lang.reflect.InvocationTargetException; +import java.util.Objects; import java.util.Optional; public class FMLModContainer extends ModContainer @@ -70,6 +72,11 @@ public class FMLModContainer extends ModContainer } catch (Throwable e) { + // When a mod constructor throws an exception, it's wrapped in an InvocationTargetException which hides the + // actual exception from the mod loading error screen. + if (e instanceof InvocationTargetException wrapped) + e = Objects.requireNonNullElse(wrapped.getCause(), e); // unwrap the exception + LOGGER.error(LOADING,"Failed to create mod instance. ModID: {}, class {}", getModId(), modClass.getName(), e); throw new ModLoadingException(modInfo, ModLoadingStage.CONSTRUCT, "fml.modloading.failedtoloadmod", e, modClass); }