mirror of
https://github.com/MinecraftForge/MinecraftForge
synced 2026-08-22 04:26:10 -04:00
[1.20.1] Improve mod loading error message for errors inside mod constructors (#9707)
This commit is contained in:
parent
2fb2bbeed0
commit
48d72fb7c6
3 changed files with 29 additions and 0 deletions
|
|
@ -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");
|
||||
}
|
||||
}
|
||||
|
|
@ -41,6 +41,9 @@ modId="mdk_datagen"
|
|||
[[mods]]
|
||||
modId="calculate_normals_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.
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue