diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/GameCrashWindow.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/GameCrashWindow.java index 991f073c0..5d573993f 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/GameCrashWindow.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/GameCrashWindow.java @@ -151,11 +151,18 @@ public class GameCrashWindow extends Stage { Set keywords = pair.getValue(); List segments = new ArrayList<>(); + + boolean hasMultipleRules = results.stream().map(CrashReportAnalyzer.Result::getRule).distinct().count() > 1; + if (hasMultipleRules) { + segments.addAll(FXUtils.parseSegment(i18n("game.crash.reason.multiple"), Controllers::onHyperlinkAction)); + } + for (CrashReportAnalyzer.Result result : results) { switch (result.getRule()) { case TOO_OLD_JAVA: segments.addAll(FXUtils.parseSegment(i18n("game.crash.reason.too_old_java", CrashReportAnalyzer.getJavaVersionFromMajorVersion(Integer.parseInt(result.getMatcher().group("expected")))), Controllers::onHyperlinkAction)); + segments.add(new Text("\n")); break; case MOD_RESOLUTION_CONFLICT: case MOD_RESOLUTION_MISSING: @@ -164,19 +171,23 @@ public class GameCrashWindow extends Stage { translateFabricModId(result.getMatcher().group("sourcemod")), parseFabricModId(result.getMatcher().group("destmod")), parseFabricModId(result.getMatcher().group("destmod"))), Controllers::onHyperlinkAction)); + segments.add(new Text("\n")); break; case MOD_RESOLUTION_MISSING_MINECRAFT: segments.addAll(FXUtils.parseSegment(i18n("game.crash.reason." + result.getRule().name().toLowerCase(Locale.ROOT), translateFabricModId(result.getMatcher().group("mod")), result.getMatcher().group("version")), Controllers::onHyperlinkAction)); + segments.add(new Text("\n")); break; case TWILIGHT_FOREST_OPTIFINE: segments.addAll(FXUtils.parseSegment(i18n("game.crash.reason.mod", "OptiFine"), Controllers::onHyperlinkAction)); + segments.add(new Text("\n")); break; default: segments.addAll(FXUtils.parseSegment(i18n("game.crash.reason." + result.getRule().name().toLowerCase(Locale.ROOT), Arrays.stream(result.getRule().getGroupNames()).map(groupName -> result.getMatcher().group(groupName)) .toArray()), Controllers::onHyperlinkAction)); + segments.add(new Text("\n")); break; } segments.add(new Text("\n")); diff --git a/HMCL/src/main/resources/assets/lang/I18N.properties b/HMCL/src/main/resources/assets/lang/I18N.properties index 0d04f69db..f639a8982 100644 --- a/HMCL/src/main/resources/assets/lang/I18N.properties +++ b/HMCL/src/main/resources/assets/lang/I18N.properties @@ -407,6 +407,7 @@ game.crash.feedback=Is it a common issue that almost everyone has had? Please le game.crash.info=Crash Info game.crash.reason=Crash Cause game.crash.reason.analyzing=Analyzing... +game.crash.reason.multiple=Multiple reasons detected:\n\n game.crash.reason.block=The game crashed due to a block.\n\ \n\ You can try to remove this block using MCEdit or delete that mod that added it.\n\ diff --git a/HMCL/src/main/resources/assets/lang/I18N_es.properties b/HMCL/src/main/resources/assets/lang/I18N_es.properties index 5854cca50..563edd84e 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_es.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_es.properties @@ -365,6 +365,7 @@ game.crash.feedback=¿Es un problema común que casi todo el mundo ha tenido? Po game.crash.info=Información sobre el fallo game.crash.reason=Causa del fallo game.crash.reason.analyzing=Analizando... +game.crash.reason.multiple=Se detectaron múltiples razones:\n\n game.crash.reason.block=El juego se ha bloqueado debido a un error.\ \n\ Puede tratar de eliminar este bloque utilizando MCEdit o eliminar el mod que lo ha añadido.\n\ diff --git a/HMCL/src/main/resources/assets/lang/I18N_ja.properties b/HMCL/src/main/resources/assets/lang/I18N_ja.properties index 600248a58..c2d4b8f6f 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_ja.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_ja.properties @@ -334,6 +334,7 @@ game.crash.feedback=問題は非常に一般的ですが、理由がわかりま game.crash.info=ゲームステータス game.crash.reason=クラッシュアナライザー game.crash.reason.analyzing=分析中.. +game.crash.reason.multiple=複数の理由が検出されました:\n\n game.crash.reason.block=ブロックが原因でゲームを実行できません。\nMCEditでこのブロックを削除するか、関連するModを直接削除できます。\nブロックタイプ:%1$s \nブロックの場所:%2$s game.crash.reason.bootstrap_failed=mod %1$s がクラッシュしたため、ゲームを実行できません。\n削除または更新を試みることができます。 game.crash.reason.config=modが構成ファイルを解析できないため、ゲームを実行できません。\nMod %1$s は構成ファイル %2$s を解析できません。 diff --git a/HMCL/src/main/resources/assets/lang/I18N_ru.properties b/HMCL/src/main/resources/assets/lang/I18N_ru.properties index 5a33071a3..ff976450d 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_ru.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_ru.properties @@ -336,6 +336,7 @@ game.crash.feedback=Проблема настолько распростране game.crash.info=Статус игры game.crash.reason=Анализатор сбоев game.crash.reason.analyzing=Анализирование... +game.crash.reason.multiple=Обнаружено несколько причин:\n\n game.crash.reason.block=Невозможно запустить игру из-за блока.\nУдалите этот блок с помощью MCEdit или удалите мод связанный с ним напрямую.\nТип блока: %1$s\nРасположение блока: %2$s game.crash.reason.bootstrap_failed=Невозможно запустить игру из-за сбоя мода %1$s.\nПопробуйте удалить или обновить его. game.crash.reason.config=Невозможно запустить игру из-за того, что мод не может разобрать файл конфигурации.\nМод %1$s не может разобрать свой файл конфигурации %2$s. diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh.properties b/HMCL/src/main/resources/assets/lang/I18N_zh.properties index 91e833bf0..3f577bc97 100644 --- a/HMCL/src/main/resources/assets/lang/I18N_zh.properties +++ b/HMCL/src/main/resources/assets/lang/I18N_zh.properties @@ -392,6 +392,7 @@ game.crash.feedback=查看了日誌發現問題很常見?歡迎在 MCEdit 工具编辑存档删除该方块,或者直接删除相应的 Mod。\n方块类型:%1$s\n方块坐标:%2$s \n你可以在 此处 寻求帮助。 +game.crash.reason.multiple=检测到多个原因:\n\n +game.crash.reason.block=当前游戏因为某个方块不能正常工作,无法继续运行。\n你可以尝试通过 MCEdit 工具编辑存档删除该方块,或者直接删除相应的 Mod。\n方块类型:%1$s\n方块坐标:%2$s \n你可以在 此处 寻求帮助。 game.crash.reason.bootstrap_failed=当前游戏因为模组 %1$s 错误,无法继续运行。\n你可以尝试删除或更新该模组以解决问题。\n你可以在 此处 寻求帮助。 game.crash.reason.config=当前游戏因为无法解析模组配置文件,无法继续运行\n模组 %1$s 的配置文件 %2$s 无法被解析。\n你可以在 此处 寻求帮助。 game.crash.reason.debug_crash=当前游戏因为手动触发崩溃,无法继续运行。\n事实上游戏并没有问题,问题都是你造成的!