From 8ad1e899a3a760e1f7aadb5da4016e63cbdf2efd Mon Sep 17 00:00:00 2001 From: Paint_Ninja Date: Sat, 14 Oct 2023 17:38:29 +0100 Subject: [PATCH] Improve mod loading error message for errors inside mod constructors (#9751) --- .../net/minecraftforge/fml/javafmlmod/FMLModContainer.java | 7 +++++++ 1 file changed, 7 insertions(+) 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); }