diff --git a/changelog.md b/changelog.md index 7108cea..0ec79c9 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,5 @@ +## 4.4.5 +- Fixed a crash in Fabric with certain mods ## 4.4.4 - Cleaned up some more things when the game crashes. ## 4.4.3 diff --git a/common/src/main/java/fudge/notenoughcrashes/NotEnoughCrashes.java b/common/src/main/java/fudge/notenoughcrashes/NotEnoughCrashes.java index 1641874..7f9730f 100644 --- a/common/src/main/java/fudge/notenoughcrashes/NotEnoughCrashes.java +++ b/common/src/main/java/fudge/notenoughcrashes/NotEnoughCrashes.java @@ -14,7 +14,6 @@ import java.util.List; public class NotEnoughCrashes { - public static final Path DIRECTORY = NecPlatform.instance().getGameDirectory().resolve("not-enough-crashes"); public static final String NAME = "Not Enough Crashes"; public static final String MOD_ID = "notenoughcrashes"; @@ -30,10 +29,12 @@ public static void logDebug(String message) { if (LOG_DEBUG) getLogger().error(message); } - public static final boolean ENABLE_GAMELOOP_CATCHING = true; + public static boolean enableGameloopCatching() { + return NecConfig.getCurrent().catchGameloopCrashes() && !NecPlatform.instance().irisExists(); + } public static boolean enableEntrypointCatching() { - return NecConfig.getCurrent().catchInitializationCrashes(); + return NecConfig.getCurrent().catchInitializationCrashes() && !NecPlatform.instance().irisExists(); } public static CommonModMetadata getMetadata() { diff --git a/common/src/main/java/fudge/notenoughcrashes/config/NecConfig.java b/common/src/main/java/fudge/notenoughcrashes/config/NecConfig.java index 9479149..1c33074 100644 --- a/common/src/main/java/fudge/notenoughcrashes/config/NecConfig.java +++ b/common/src/main/java/fudge/notenoughcrashes/config/NecConfig.java @@ -2,10 +2,10 @@ public record NecConfig(boolean disableReturnToMainMenu, boolean catchInitializationCrashes, - boolean debugModIdentification, int crashLimit) { + boolean debugModIdentification, int crashLimit,boolean catchGameloopCrashes) { public static NecConfig getCurrent() { return new NecConfig(NecMidnightConfig.disableReturnToMainMenu, NecMidnightConfig.catchInitializationCrashes, - NecMidnightConfig.debugModIdentification, NecMidnightConfig.crashLimit); + NecMidnightConfig.debugModIdentification, NecMidnightConfig.crashLimit, NecMidnightConfig.catchGameloop); } } diff --git a/common/src/main/java/fudge/notenoughcrashes/config/NecMidnightConfig.java b/common/src/main/java/fudge/notenoughcrashes/config/NecMidnightConfig.java index e1dcc35..4956edb 100644 --- a/common/src/main/java/fudge/notenoughcrashes/config/NecMidnightConfig.java +++ b/common/src/main/java/fudge/notenoughcrashes/config/NecMidnightConfig.java @@ -1,13 +1,5 @@ package fudge.notenoughcrashes.config; -//TODO: config Migration path. -// Current version: -// - If the new config value is non-default, use it, otherwise, use old config value. -// - Log a warning in the console to use the new format. -// Next MC Version: -// - Log an error in the console that the old config will stop working in the next Minecraft version. -// MC version after that: -// - Remove old config. public class NecMidnightConfig extends MidnightConfig { @Comment @@ -15,12 +7,14 @@ public class NecMidnightConfig extends MidnightConfig { @Comment public static Comment disableReturnToMainMenuComment2; @Entry - public static boolean disableReturnToMainMenu; + public static boolean disableReturnToMainMenu = false; @Comment public static Comment catchInitializationCrashesComment1; @Comment public static Comment catchInitializationCrashesComment2; + @Comment + public static Comment catchInitializationCrashesComment3; @Entry public static boolean catchInitializationCrashes = true; @@ -34,4 +28,11 @@ public class NecMidnightConfig extends MidnightConfig { @Entry public static int crashLimit = 20; + @Comment + public static Comment catchGameloopComment1; + @Comment + public static Comment catchGameloopComment2; + @Entry + public static boolean catchGameloop = true; + } \ No newline at end of file diff --git a/common/src/main/java/fudge/notenoughcrashes/gui/ProblemScreen.java b/common/src/main/java/fudge/notenoughcrashes/gui/ProblemScreen.java index 76f56c2..dbbc580 100644 --- a/common/src/main/java/fudge/notenoughcrashes/gui/ProblemScreen.java +++ b/common/src/main/java/fudge/notenoughcrashes/gui/ProblemScreen.java @@ -15,7 +15,6 @@ import net.minecraft.client.gui.screen.ConfirmLinkScreen; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.widget.ButtonWidget; -import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.*; import net.minecraft.util.Util; import net.minecraft.util.crash.CrashReport; @@ -30,6 +29,7 @@ public abstract class ProblemScreen extends Screen { )); private static final int GREEN = 0x00FF00; + private static final int GRAY = 0x9a9a9a; private static final Text uploadToCrashyText = NecLocalization.translatedText("notenoughcrashes.gui.uploadToCrashy") .copy().setStyle(Style.EMPTY.withColor(GREEN)); private static final Text uploadToCrashyLoadingText = NecLocalization.translatedText("notenoughcrashes.gui.loadingCrashyUpload"); @@ -135,16 +135,19 @@ private void handleCrashyUploadClick(ButtonWidget buttonWidget) { @Override public void init() { widgets = new ArrayList<>(); - +// height / 4 + 120 + 12 addDrawableChild( - ButtonWidget.builder(NecLocalization.translatedText("notenoughcrashes.gui.getLink"), this::handleLegacyLinkClick) - .dimensions(width / 2 - 155 + 160, height / 4 + 132 + 12, 150, 20) + ButtonWidget.builder( + NecLocalization.translatedText("notenoughcrashes.gui.getLink") + .copy().setStyle(Style.EMPTY.withColor(GRAY)) + , this::handleLegacyLinkClick) + .dimensions(width / 2 - 155 + 160, height / 4 + 144 + 12, 150, 20) .build() ); addDrawableChild( ButtonWidget.builder(uploadToCrashyText,this::handleCrashyUploadClick) - .dimensions(width / 2 - 155 + 160, height / 4 + 108 + 12, 150, 20) + .dimensions(width / 2 - 155 + 160, height / 4 + 120 + 12, 150, 20) .build() ); diff --git a/common/src/main/java/fudge/notenoughcrashes/mixins/client/MixinMinecraftClient.java b/common/src/main/java/fudge/notenoughcrashes/mixins/client/MixinMinecraftClient.java index 44c167e..b9de82a 100644 --- a/common/src/main/java/fudge/notenoughcrashes/mixins/client/MixinMinecraftClient.java +++ b/common/src/main/java/fudge/notenoughcrashes/mixins/client/MixinMinecraftClient.java @@ -4,7 +4,6 @@ import fudge.notenoughcrashes.mixinhandlers.EntryPointCatcher; import fudge.notenoughcrashes.mixinhandlers.InGameCatcher; import fudge.notenoughcrashes.patches.MinecraftClientAccess; -import fudge.notenoughcrashes.stacktrace.CrashUtils; import net.minecraft.client.MinecraftClient; import net.minecraft.util.crash.CrashReport; import net.minecraft.util.profiler.Recorder; @@ -36,6 +35,10 @@ public abstract class MixinMinecraftClient extends ReentrantThreadExecutor getAllMods() { @Override public boolean modContainsFile(CommonModMetadata mod, String path) { - return FabricLoader.getInstance().getModContainer(mod.id()).flatMap(modContainer -> modContainer.findPath(path)).isPresent(); + return FabricLoader.getInstance().getModContainer(mod.id()).flatMap(modContainer -> { + try { + return modContainer.findPath(path); + } catch (InvalidPathException e) { + // Sometimes weird mixin file fuck up this method call and throw a InvalidPathException + return Optional.empty(); + } + }).isPresent(); } -// @Override -// public NecConfig getCurrentConfig() { -// return new NecConfig(NecMidnightConfig.disableReturnToMainMenu, NecMidnightConfig.catchInitializationCrashes, -// NecMidnightConfig.debugModIdentification, NecMidnightConfig.crashLimit); -// } + @Override + public boolean irisExists() { + return irisExists; + } @Override public boolean isClient() { diff --git a/fabric/src/main/resources/notenoughcrashes.fabric.mixins.json b/fabric/src/main/resources/notenoughcrashes.fabric.mixins.json index 96b7ccf..d97f2ec 100644 --- a/fabric/src/main/resources/notenoughcrashes.fabric.mixins.json +++ b/fabric/src/main/resources/notenoughcrashes.fabric.mixins.json @@ -5,10 +5,11 @@ "minVersion": "0.8", "compatibilityLevel": "JAVA_17", "mixins": [ - "MixinMain" + "MixinMain", + "iris.SilentNEC" ], "client": [ - "client.MixinMain", - "client.CatchInitMInecraftClientMixin" + "client.CatchInitMInecraftClientMixin", + "client.MixinMain" ] } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 2f27746..b5866b2 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -13,7 +13,7 @@ task_tree = { id = "com.dorongold.task-tree", version.ref = "task_tree" } [versions] # This Mod Version -mod_version = "4.4.4" +mod_version = "4.4.5" # Gradle Plugins architectury_plugin = "3.4-SNAPSHOT"