From 8892e2b2737c2b056493f716ddd8c8de70f54578 Mon Sep 17 00:00:00 2001 From: huanghongxun Date: Tue, 12 Oct 2021 23:39:12 +0800 Subject: [PATCH] feat(crash): fabric 0.12 may be incompatible with mods. --- .../resources/assets/lang/I18N.properties | 1 + .../resources/assets/lang/I18N_zh.properties | 1 + .../assets/lang/I18N_zh_CN.properties | 1 + .../hmcl/game/CrashReportAnalyzer.java | 1 + .../hmcl/game/CrashReportAnalyzerTest.java | 7 +++ .../resources/logs/fabric-version-0.12.txt | 49 +++++++++++++++++++ 6 files changed, 60 insertions(+) create mode 100644 HMCLCore/src/test/resources/logs/fabric-version-0.12.txt diff --git a/HMCL/src/main/resources/assets/lang/I18N.properties b/HMCL/src/main/resources/assets/lang/I18N.properties index 1dea11d40..bf3a5d012 100644 --- a/HMCL/src/main/resources/assets/lang/I18N.properties +++ b/HMCL/src/main/resources/assets/lang/I18N.properties @@ -344,6 +344,7 @@ game.crash.reason.config=Game cannot run because a mod cannot parse its config f game.crash.reason.debug_crash=Game cannot run because crash is manually trigged.\nIn fact, the game is innocent, it's all your fault. game.crash.reason.duplicated_mod=Game cannot run because of duplicate mods: %s.\n%s\nEach Mod can only be installed one, please delete the duplicate mod and try again. game.crash.reason.entity=Game cannot run because of an entity.\nYou can remove this entity by MCEdit, or directly remove the related Mod.\nEntity Type:%1$s\nEntity Location: %2$s +game.crash.reason.fabric_version_0_12=Fabric 0.12 and above are incompatible with currently installed mods. You should downgrade fabric to 0.11.7. game.crash.reason.fabric_warnings=Fabric gives some warnings:\n%1$s game.crash.reason.file_already_exists=Game cannot run because file %1$s already exists.\nIf it can be deleted, backup it, delete it and try again. game.crash.reason.file_changed=Game cannot run because file verification failed.\nIf you have modified the Minecraft primary jar, you need roll back the changes, or re-download the game. diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh.properties b/HMCL/src/main/resources/assets/lang/I18N_zh.properties index 1330a3259..bfeac9e12 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh.properties @@ -344,6 +344,7 @@ game.crash.reason.config=當前遊戲因為無法解析模組配置文件,無 game.crash.reason.debug_crash=當前遊戲因為手動觸發崩潰,無法繼續運行。\n事實上遊戲並沒有問題,問題都是你造成的。 game.crash.reason.duplicated_mod=當前遊戲因為 Mod 重複安裝,無法繼續運行。\n%s\n每種 Mod 只能安裝一個,請你刪除多餘的 Mod 再試。 game.crash.reason.entity=當前遊戲因為某個實體不能正常工作,無法繼續運行。\n你可以嘗試通過 MCEdit 工具編輯存檔刪除該實體,或者直接刪除相應的 Mod。\n實體類型:%1$s\n實體坐標:%2$s +game.crash.reason.fabric_version_0_12=Fabric 0.12 及以上版本與當前已經安裝的 Mod 可能不相容,你需要將 Fabric 降級至 0.11.7。 game.crash.reason.fabric_warnings=Fabric 提供了一些警告訊息:\n%1$s game.crash.reason.file_already_exists=當前遊戲因為文件 %1$s 已經存在,無法繼續運行。\n如果你認為這個文件可以刪除,你可以在備份這個文件後嘗試刪除它,並重新啟動遊戲。 game.crash.reason.file_changed=當前遊戲因為檔案校驗失敗,無法繼續運行。\n如果你手動修改了 Minecraft.jar 檔案,你需要回退修改,或者重新下載遊戲。 diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties index 81560785d..7e6b4ee80 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties @@ -344,6 +344,7 @@ game.crash.reason.config=当前游戏因为无法解析模组配置文件,无 game.crash.reason.debug_crash=当前游戏因为手动触发崩溃,无法继续运行。\n事实上游戏并没有问题,问题都是你造成的。 game.crash.reason.duplicated_mod=当前游戏因为模组 %1$s 重复安装,无法继续运行。\n%2$s\n每种 Mod 只能安装一个,请你删除多余的 Mod 再试。 game.crash.reason.entity=当前游戏因为某个实体不能正常工作,无法继续运行。\n你可以尝试通过 MCEdit 工具编辑存档删除该实体,或者直接删除相应的 Mod。\n实体类型:%1$s\n实体坐标:%2$s +game.crash.reason.fabric_version_0_12=Fabric 0.12 及以上版本与当前已经安装的 Mod 可能不兼容,你需要将 Fabric 降级至 0.11.7。 game.crash.reason.fabric_warnings=Fabric 提供了一些警告信息:\n%1$s game.crash.reason.file_already_exists=当前游戏因为文件 %1$s 已经存在,无法继续运行。\n如果你认为这个文件可以删除,你可以在备份这个文件后尝试删除它,并重新启动游戏。 game.crash.reason.file_changed=当前游戏因为文件校验失败,无法继续运行。\n如果你手动修改了 Minecraft.jar 文件,你需要回退修改,或者重新下载游戏。 diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/CrashReportAnalyzer.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/CrashReportAnalyzer.java index 6640e110e..0b7397c46 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/game/CrashReportAnalyzer.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/game/CrashReportAnalyzer.java @@ -75,6 +75,7 @@ public final class CrashReportAnalyzer { BOOTSTRAP_FAILED(Pattern.compile("Failed to create mod instance. ModID: (?.*?),"), "id"), // Fabric found some mod crashed in game loading LOADING_CRASHED_FABRIC(Pattern.compile("Could not execute entrypoint stage '(.*?)' due to errors, provided by '(?.*)'!"), "id"), + FABRIC_VERSION_0_12(Pattern.compile("java\\.lang\\.NoClassDefFoundError: org/spongepowered/asm/mixin/transformer/FabricMixinTransformerProxy")), // Manually triggerd debug crash DEBUG_CRASH(Pattern.compile("Manually triggered debug crash")), CONFIG(Pattern.compile("Failed loading config file (?.*?) of type SERVER for modid (?.*)"), "id", "file"), diff --git a/HMCLCore/src/test/java/org/jackhuang/hmcl/game/CrashReportAnalyzerTest.java b/HMCLCore/src/test/java/org/jackhuang/hmcl/game/CrashReportAnalyzerTest.java index 0e24b29f9..240e1bbd2 100644 --- a/HMCLCore/src/test/java/org/jackhuang/hmcl/game/CrashReportAnalyzerTest.java +++ b/HMCLCore/src/test/java/org/jackhuang/hmcl/game/CrashReportAnalyzerTest.java @@ -280,6 +280,13 @@ public class CrashReportAnalyzerTest { Assert.assertEquals("{fabric @ [>=0.39.2]}", result.getMatcher().group("destmod")); } + @Test + public void fabric0_12() throws IOException { + CrashReportAnalyzer.Result result = findResultByRule( + CrashReportAnalyzer.anaylze(loadLog("/logs/fabric-version-0.12.txt")), + CrashReportAnalyzer.Rule.FABRIC_VERSION_0_12); + } + @Test public void fabricMissingMinecraft() throws IOException { CrashReportAnalyzer.Result result = findResultByRule( diff --git a/HMCLCore/src/test/resources/logs/fabric-version-0.12.txt b/HMCLCore/src/test/resources/logs/fabric-version-0.12.txt new file mode 100644 index 000000000..d74d985ba --- /dev/null +++ b/HMCLCore/src/test/resources/logs/fabric-version-0.12.txt @@ -0,0 +1,49 @@ +java.lang.RuntimeException: Could not execute entrypoint stage 'preLaunch' due to errors, provided by 'advanced_runtime_resource_pack'! + at net.fabricmc.loader.impl.entrypoint.EntrypointUtils.lambda$invoke0$0(EntrypointUtils.java:51) + at net.fabricmc.loader.impl.util.ExceptionUtil.gatherExceptions(ExceptionUtil.java:33) + at net.fabricmc.loader.impl.entrypoint.EntrypointUtils.invoke0(EntrypointUtils.java:49) + at net.fabricmc.loader.impl.entrypoint.EntrypointUtils.invoke(EntrypointUtils.java:35) + at net.fabricmc.loader.impl.launch.knot.Knot.init(Knot.java:134) + at net.fabricmc.loader.impl.launch.knot.Knot.launch(Knot.java:68) + at net.fabricmc.loader.impl.launch.knot.KnotClient.main(KnotClient.java:23) +Caused by: net.fabricmc.loader.api.EntrypointException: Exception while loading entries for entrypoint 'preLaunch' provided by 'advanced_runtime_resource_pack' + at net.fabricmc.loader.impl.entrypoint.EntrypointContainerImpl.getEntrypoint(EntrypointContainerImpl.java:56) + at net.fabricmc.loader.impl.entrypoint.EntrypointUtils.invoke0(EntrypointUtils.java:47) + ... 4 more +Caused by: java.lang.RuntimeException: Mixin transformation of net.devtech.arrp.ARRP failed + at net.fabricmc.loader.impl.launch.knot.KnotClassDelegate.getPostMixinClassByteArray(KnotClassDelegate.java:224) + at net.fabricmc.loader.impl.launch.knot.KnotClassDelegate.tryLoadClass(KnotClassDelegate.java:133) + at net.fabricmc.loader.impl.launch.knot.KnotClassLoader.loadClass(KnotClassLoader.java:155) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:519) + at java.base/java.lang.Class.forName0(Native Method) + at java.base/java.lang.Class.forName(Class.java:466) + at net.fabricmc.loader.impl.util.DefaultLanguageAdapter.create(DefaultLanguageAdapter.java:50) + at net.fabricmc.loader.impl.entrypoint.EntrypointStorage$NewEntry.getOrCreate(EntrypointStorage.java:117) + at net.fabricmc.loader.impl.entrypoint.EntrypointContainerImpl.getEntrypoint(EntrypointContainerImpl.java:53) + ... 5 more +Caused by: java.lang.NoClassDefFoundError: org/spongepowered/asm/mixin/transformer/FabricMixinTransformerProxy + at java.base/java.lang.ClassLoader.defineClass1(Native Method) + at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1010) + at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150) + at net.fabricmc.loader.impl.launch.knot.KnotClassLoader.defineClassFwd(KnotClassLoader.java:218) + at net.fabricmc.loader.impl.launch.knot.KnotClassDelegate.tryLoadClass(KnotClassDelegate.java:149) + at net.fabricmc.loader.impl.launch.knot.KnotClassLoader.loadClass(KnotClassLoader.java:155) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:519) + at meteordevelopment.meteorclient.MixinPlugin.onLoad(MixinPlugin.java:59) + at org.spongepowered.asm.mixin.transformer.PluginHandle.onLoad(PluginHandle.java:119) + at org.spongepowered.asm.mixin.transformer.MixinConfig.onSelect(MixinConfig.java:709) + at org.spongepowered.asm.mixin.transformer.MixinProcessor.selectConfigs(MixinProcessor.java:498) + at org.spongepowered.asm.mixin.transformer.MixinProcessor.select(MixinProcessor.java:460) + at org.spongepowered.asm.mixin.transformer.MixinProcessor.checkSelect(MixinProcessor.java:438) + at org.spongepowered.asm.mixin.transformer.MixinProcessor.applyMixins(MixinProcessor.java:290) + at org.spongepowered.asm.mixin.transformer.MixinTransformer.transformClass(MixinTransformer.java:234) + at org.spongepowered.asm.mixin.transformer.MixinTransformer.transformClassBytes(MixinTransformer.java:202) + at net.fabricmc.loader.impl.launch.knot.KnotClassDelegate.getPostMixinClassByteArray(KnotClassDelegate.java:222) + ... 13 more +Caused by: java.lang.ClassNotFoundException: org.spongepowered.asm.mixin.transformer.FabricMixinTransformerProxy + at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:636) + at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:182) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:519) + at net.fabricmc.loader.impl.launch.knot.KnotClassLoader.loadClass(KnotClassLoader.java:158) + at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:519) + ... 30 more \ No newline at end of file