mirror of
https://github.com/MinecraftForge/MinecraftForge.git
synced 2026-11-13 16:54:22 +00:00
Improve mod loading error message for errors inside mod constructors (#9708)
Co-authored-by: Jab125 <67534807+jab125@users.noreply.github.com>
This commit is contained in:
1 parent
664a2c06ad
commit
dfef5101f1
3 files changed
+29
No files matched your search
@@ -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);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
/*
|
||||
* Copyright (c) Forge Development LLC and contributors
|
||||
* SPDX-License-Identifier: LGPL-2.1-only
|
||||
*/
|
||||
|
||||
package net.minecraftforge.debug;
|
||||
|
||||
import net.minecraftforge.fml.common.Mod;
|
||||
|
||||
/**
|
||||
* Test that the mod loading error screen shows the cause of the crash when a mod constructor throws an exception.
|
||||
* <p>Enable or disable this test in the mods.toml</p>
|
||||
*/
|
||||
@Mod("constructor_throw_test")
|
||||
public class ConstructorThrowTest {
|
||||
public ConstructorThrowTest() {
|
||||
throw new RuntimeException("Test");
|
||||
}
|
||||
}
|
||||
@@ -33,6 +33,9 @@ modId="mdk_datagen"
|
||||
[[mods]]
|
||||
modId="custom_preset_editor_test"
|
||||
|
||||
#[[mods]]
|
||||
# modId="constructor_throw_test"
|
||||
|
||||
# LEGACY TEST CASES
|
||||
###### The mods below are from the old test framework and need to be yeeted later again.
|
||||
|
||||
|
||||
Reference in new issue
Block a user