Unlucky Launcher v0.0.1-alpha
CI / fmt (rustfmt --check) (push) Canceled after 0s
CI / clippy (ubuntu-latest) (push) Canceled after 0s
CI / clippy (windows-latest) (push) Canceled after 0s
CI / test (ubuntu-latest) (push) Canceled after 0s
CI / test (windows-latest) (push) Canceled after 0s
CI / build release (ubuntu-latest) (push) Canceled after 0s
CI / build release (windows-latest) (push) Canceled after 0s
Guards / core 零 UI 守门 (push) Canceled after 0s
Guards / 文件行数 ≤400 守门 (push) Canceled after 0s
Guards / 依赖许可与来源(cargo-deny) (push) Canceled after 0s

Rust 原生单文件 Minecraft 启动器:CLI 完整可用(install/launch/accounts/java/diagnose/agent),
MCP server 接入外部 Agent 工具,GUI 开发中。
This commit is contained in:
AskaEth committed 2026-10-31 21:54:10 +08:00
commit bc41dfcf7d
517 files changed
+92844

No files matched your search

@@ -0,0 +1,141 @@
# 规则库 · Fabric mod 解析(8 条)
# 移植自 HMCL CrashReportAnalyzer.Rule 的 Fabric 组(analyse/02 §7.3 第 5 组)。
# Fabric 的 ModResolutionException 家族特征:异常后面跟一段以 " - " 开头的列表,
# 因此这些规则用 file scope(跨行)。
version: 1
category: fabric
rules:
- id: fabric.mod_resolution
severity: critical
scope: file
pattern: 'ModResolutionException: (?<reason>(.*)[\n\r]*( - (.*)[\n\r]*)+)'
confidence: 0.75
priority: 70
cause:
key: diagnose.cause.fabric.mod_resolution
summary: 'Fabric 解析 mod 依赖失败(缺依赖/版本冲突/模组不配套)'
detail: '按下方列出的 mod 名单逐个处理:缺依赖就补装,冲突就删一个'
fix_action:
- kind: remove_mod
action: disable
note: '按 Fabric 报的 mod 名单逐个禁用排查'
sample: samples/fabric/mod_resolution.log
source: 'HMCL CrashReportAnalyzer.Rule.MOD_RESOLUTION'
- id: fabric.mod_resolution_conflict
severity: critical
pattern: 'ModResolutionException: Found conflicting mods: (?<sourcemod>.*) conflicts with (?<destmod>.*)'
confidence: 0.92
priority: 86
suppress:
- integrity.no_class_def_found
- integrity.no_such_method
cause:
key: diagnose.cause.fabric.mod_resolution_conflict
summary: 'Fabric 报告 mod 冲突:{sourcemod} 与 {destmod} 不能共存'
detail: '两个只能留一个(或都升级到互相兼容的版本)'
fix_action:
- kind: remove_mod
mod_ids:
- '{sourcemod}'
- '{destmod}'
action: remove
sample: samples/fabric/mod_resolution_conflict.log
source: 'HMCL CrashReportAnalyzer.Rule.MOD_RESOLUTION_CONFLICT'
- id: fabric.mod_resolution_missing
severity: critical
pattern: 'ModResolutionException: Could not find required mod: (?<sourcemod>.*) requires (?<destmod>.*)'
confidence: 0.9
priority: 85
cause:
key: diagnose.cause.fabric.mod_resolution_missing
summary: '缺少前置 mod:{sourcemod} 需要 {destmod}'
detail: '装上 {destmod} 的对应版本;装不上就删掉 {sourcemod}'
fix_action:
- kind: remove_mod
mod_ids:
- '{sourcemod}'
action: replace
note: '补装前置 {destmod},或换掉 {sourcemod}'
sample: samples/fabric/mod_resolution_missing.log
source: 'HMCL CrashReportAnalyzer.Rule.MOD_RESOLUTION_MISSING'
- id: fabric.mod_resolution_missing_minecraft
severity: critical
pattern: 'ModResolutionException: Could not find required mod: (?<mod>.*) requires \{minecraft @ (?<version>.*)\}'
confidence: 0.9
priority: 85
cause:
key: diagnose.cause.fabric.mod_resolution_missing_minecraft
summary: '{mod} 要求 Minecraft {version},与当前实例版本不一致'
fix_action:
- kind: remove_mod
mod_ids:
- '{mod}'
action: replace
note: '换该 mod 的 {version} 版本,或改实例版本'
sample: samples/fabric/mod_resolution_missing_minecraft.log
source: 'HMCL CrashReportAnalyzer.Rule.MOD_RESOLUTION_MISSING_MINECRAFT'
- id: fabric.mod_resolution_collection
severity: critical
pattern: 'ModResolutionException: Could not resolve valid mod collection \(at: (?<sourcemod>.*) requires (?<destmod>.*)\)'
confidence: 0.88
priority: 84
cause:
key: diagnose.cause.fabric.mod_resolution_collection
summary: 'mod 集合无法解析:{sourcemod} 与 {destmod} 的版本组合不成立'
fix_action:
- kind: remove_mod
mod_ids:
- '{sourcemod}'
action: upgrade
sample: samples/fabric/mod_resolution_collection.log
source: 'HMCL CrashReportAnalyzer.Rule.MOD_RESOLUTION_COLLECTION'
- id: fabric.mod_resolution_details
severity: warning
pattern: '(\tMod File:|-- MOD |\tFailure message:)'
confidence: 0.5
priority: 45
cause:
key: diagnose.cause.fabric.mod_resolution_details
summary: 'Fabric 打印了 mod 解析明细(Mod File / Failure message):具体结论见上方规则'
detail: '这条只表示「日志里有解析失败明细」,用于把证据片段指给 AI/用户'
fix_action:
- kind: seek_help
export_diagnostics: true
sample: samples/fabric/mod_resolution_details.log
source: 'HMCL CrashReportAnalyzer.Rule.MOD_RESOLUTION0'
- id: fabric.loader_0_12
severity: critical
pattern: 'java\.lang\.NoClassDefFoundError: org/spongepowered/asm/mixin/transformer/FabricMixinTransformerProxy'
confidence: 0.85
priority: 80
cause:
key: diagnose.cause.fabric.loader_0_12
summary: 'Fabric Loader 0.12 与旧 mixin 类不兼容(loader 删掉了 deprecated 类)'
fix_action:
- kind: reinstall
component: fabric
note: '换匹配的 Fabric Loader 版本'
sample: samples/fabric/loader_0_12.log
source: 'HMCL CrashReportAnalyzer.Rule.FABRIC_VERSION_0_12'
- id: fabric.warnings
severity: warning
scope: file
pattern: '(Warnings were found!|Incompatible mod set!|Incompatible mods found!)(.*?)[\n\r]+(?<reason>[^\[]+)\['
confidence: 0.7
priority: 62
cause:
key: diagnose.cause.fabric.warnings
summary: 'Fabric 报告 mod 集合不兼容:{reason}'
fix_action:
- kind: remove_mod
action: disable
note: '按警告列表逐个禁用'
sample: samples/fabric/warnings.log
source: 'HMCL CrashReportAnalyzer.Rule.FABRIC_WARNINGS'
+136
View File
@@ -0,0 +1,136 @@
# 规则库 · Forge mod 解析(8 条)
# 移植自 HMCL CrashReportAnalyzer.Rule 的 Forge 组(analyse/02 §7.3 第 6 组)。
version: 1
category: forge
rules:
- id: forge.missing_dependencies
severity: critical
scope: file
pattern: 'Missing or unsupported mandatory dependencies:(?<reason>(.*)[\n\r]*(\t(.*)[\n\r]*)+)'
confidence: 0.85
priority: 80
cause:
key: diagnose.cause.forge.missing_dependencies
summary: 'Forge 报「缺少或不支持强制依赖」:有 mod 的前置没装或版本不对'
detail: '按报错里的 mod 名补齐前置;装不上就删掉依赖它的 mod'
fix_action:
- kind: remove_mod
action: disable
note: '按报错逐条补齐/禁用'
sample: samples/forge/missing_dependencies.log
source: 'HMCL CrashReportAnalyzer.Rule.FORGEMOD_RESOLUTION'
- id: forge.duplicate_mods
severity: critical
scope: file
pattern: 'Found duplicate mods:(?<reason>(.*)(?:\r\n|\n|\r)*(\t(.*)(?:\r\n|\n|\r)*)+)'
confidence: 0.9
priority: 86
cause:
key: diagnose.cause.forge.duplicate_mods
summary: '同一个 mod 装了两份(mods 目录里重复的 jar)'
detail: '删掉重复的那一份,只留一个版本'
fix_action:
- kind: remove_mod
action: remove
note: '保留一个版本'
sample: samples/forge/duplicate_mods.log
source: 'HMCL CrashReportAnalyzer.Rule.FORGE_FOUND_DUPLICATE_MODS'
- id: forge.duplicated_mod
severity: critical
pattern: 'Found a duplicate mod (?<name>.*) at (?<path>.*)'
confidence: 0.92
priority: 88
cause:
key: diagnose.cause.forge.duplicated_mod
summary: 'mod 重复:{name} 同时出现在 {path}'
fix_action:
- kind: remove_mod
mod_ids:
- '{name}'
action: remove
note: '删除路径 {path} 那一份'
sample: samples/forge/duplicated_mod.log
source: 'HMCL CrashReportAnalyzer.Rule.DUPLICATED_MOD'
- id: forge.repeat_installation
severity: critical
pattern: 'MultipleArgumentsForOptionException: Found multiple arguments for option (.*?), but you asked for only one'
confidence: 0.85
priority: 80
cause:
key: diagnose.cause.forge.repeat_installation
summary: 'Forge 被装了两次(同一版本出现多个安装参数)'
detail: '删掉重复的 Forge 安装/版本 JSON,再重装一次'
fix_action:
- kind: reinstall
component: forge
sample: samples/forge/repeat_installation.log
source: 'HMCL CrashReportAnalyzer.Rule.FORGE_REPEAT_INSTALLATION'
- id: forge.optifine_repeat_installation
severity: critical
pattern: 'ResolutionException: Module optifine reads another module named optifine'
confidence: 0.88
priority: 82
cause:
key: diagnose.cause.forge.optifine_repeat_installation
summary: 'OptiFine 装了两份(mods 里一个 + 自动安装一个)'
fix_action:
- kind: remove_mod
mod_ids:
- optifine
action: remove
note: '只保留一种安装方式'
sample: samples/forge/optifine_repeat_installation.log
source: 'HMCL CrashReportAnalyzer.Rule.OPTIFINE_REPEAT_INSTALLATION'
- id: forge.too_many_mods
severity: critical
pattern: 'maximum id range exceeded'
confidence: 0.9
priority: 80
cause:
key: diagnose.cause.forge.too_many_mods
summary: '装的 mod 太多,方块/物品 ID 超出上限(1.12 及更早的经典问题)'
detail: '删掉一部分 mod,或换用 1.13+ 的版本(不再有 ID 上限)'
fix_action:
- kind: remove_mod
action: disable
note: '减量或换版本'
sample: samples/forge/too_many_mods.log
source: 'HMCL CrashReportAnalyzer.Rule.TOO_MANY_MODS_LEAD_TO_EXCEEDING_THE_ID_LIMIT'
- id: forge.module_name_invalid
severity: warning
pattern: >-
Invalid module name: '' is not a Java identifier
confidence: 0.8
priority: 70
cause:
key: diagnose.cause.forge.module_name_invalid
summary: '某个 mod 的 jar 文件名不含英文字母/数字,Forge 把它当成非法 JPMS 模块名(如「拔刀剑.jar」)'
detail: '把该 jar 改成英文文件名(保留 .jar 后缀)再启动'
fix_action:
- kind: remove_mod
action: replace
note: '把 jar 改成英文文件名'
sample: samples/forge/module_name_invalid.log
source: 'HMCL CrashReportAnalyzer.Rule.MOD_NAME'
- id: forge.bootstrap_failed
severity: critical
pattern: 'Failed to create mod instance\. ModID: (?<id>.*?),'
confidence: 0.85
priority: 80
cause:
key: diagnose.cause.forge.bootstrap_failed
summary: 'mod {id} 的实例创建失败(初始化就抛异常)'
fix_action:
- kind: remove_mod
mod_ids:
- '{id}'
action: disable
sample: samples/forge/bootstrap_failed.log
source: 'HMCL CrashReportAnalyzer.Rule.BOOTSTRAP_FAILED'
@@ -0,0 +1,221 @@
# 规则库 · 显卡 / 图形(11 条 = HMCL 移植 6 + Vulkan 组 5)
# 移植自 HMCL CrashReportAnalyzer.Rule 的图形组(analyse/02 §7.3 第 3 组);
# Vulkan 组见文件末尾(依据 research/05-mc-vulkan.md §3.4 的 renderpearl 原因码)。
version: 1
category: graphics
rules:
- id: graphics.gl_operation_failure
severity: warning
pattern: '(1282: Invalid operation|Maybe try a lower resolution resourcepack\?)'
confidence: 0.7
priority: 60
cause:
key: diagnose.cause.graphics.gl_operation_failure
summary: '某个 mod/光影包做了非法的 OpenGL 操作(GL_INVALID_OPERATION)'
detail: '换掉最近装的光影/资源包,或把资源包分辨率降下来'
fix_action:
- kind: change_graphics
setting: renderer
suggested_value: 'OpenGL 兼容模式'
note: '先低分辨率资源包验证'
sample: samples/graphics/gl_operation_failure.log
source: 'HMCL CrashReportAnalyzer.Rule.GL_OPERATION_FAILURE'
- id: graphics.opengl_not_supported
severity: critical
pattern: 'The driver does not appear to support OpenGL'
confidence: 0.85
priority: 75
cause:
key: diagnose.cause.graphics.opengl_not_supported
summary: '显卡驱动不支持 OpenGL(多半是没装显卡驱动,走了软件渲染)'
detail: '装/更新显卡厂商驱动;虚拟机里需要开 3D 加速'
fix_action:
- kind: change_graphics
setting: driver
update_driver: true
sample: samples/graphics/opengl_not_supported.log
source: 'HMCL CrashReportAnalyzer.Rule.OPENGL_NOT_SUPPORTED'
- id: graphics.graphics_driver
severity: critical
# HMCL 的跨行贪婪模式(EXCEPTION_ACCESS_VIOLATION … # C [ig/nvoglv/atio)→ file scope。
# 末四段是 SDL 变体:26.3-snapshot-4 起窗口层 GLFW→SDL(lwjgl-glfw 消失、lwjgl-sdl 出现),
# 同类故障的原文会变成 SDL_GetError 的文本;旧 GLFW 模式保留(老版本日志仍需要)。
scope: file
pattern: '(Pixel format not accelerated|GLX: Failed to create context: GLXBadFBConfig|Couldn''t set pixel format|net\.minecraftforge\.fml\.client\.SplashProgress|org\.lwjgl\.LWJGLException|EXCEPTION_ACCESS_VIOLATION(.|\n|\r)+# C {2}\[(ig|atio|nvoglv)|SDL_CreateWindow failed|Couldn''t find matching render driver|No available video device)'
confidence: 0.8
priority: 78
cause:
key: diagnose.cause.graphics.graphics_driver
summary: '显卡驱动侧创建 OpenGL 上下文失败(像素格式/驱动崩溃)'
detail: '更新显卡驱动并重启;老显卡可用软渲染或换 OpenGL 兼容模式'
fix_action:
- kind: change_graphics
setting: driver
update_driver: true
- kind: change_graphics
setting: software_renderer
note: '驱动更新无效时用软渲染兜底(性能会掉)'
sample: samples/graphics/graphics_driver.log
source: 'HMCL CrashReportAnalyzer.Rule.GRAPHICS_DRIVER'
- id: graphics.macos_display_port
severity: critical
# 原 GLFW 模式保留。后两段是 SDL 变体(26.3 起窗口层换 SDL,无显示器/远程会话在 SDL 侧
# 报 SDL_Init 失败)——**但它必须和 `cocoa` 同时出现才命中**:SDL 在 macOS 上的视频驱动
# 就叫 `cocoa`,用它把本规则的 macOS 特异性钉住,免得 Windows/Linux 的 SDL_Init 失败被
# 误归因成「macOS 显示器问题」。⚠️ SDL 侧原文未在 26.3 实机验证(预测模式),拿到真实
# 日志后按实际文本收紧;宁可漏诊也不要跨平台误归因。
pattern: '(java\.lang\.IllegalStateException: GLFW error before init: \[0x10008\]Cocoa: Failed to find service port for display|(?i:cocoa).*SDL_Init.*failed|SDL_Init.*failed.*(?i:cocoa))'
confidence: 0.85
priority: 78
cause:
key: diagnose.cause.graphics.macos_display_port
summary: 'macOS 上 GLFW 初始化窗口失败(Cocoa 找不到 display service port)'
detail: '多见于远程桌面/无显示器会话;换成本机登录或升级 macOS 后再试'
fix_action:
- kind: change_graphics
setting: any
note: 'macOS 会话/显示器问题'
sample: samples/graphics/macos_display_port.log
source: 'HMCL CrashReportAnalyzer.Rule.MACOS_FAILED_TO_FIND_SERVICE_PORT_FOR_DISPLAY'
- id: graphics.resolution_too_high
severity: warning
pattern: 'Maybe try a (lower resolution|lowerresolution) (resourcepack|texturepack)\?'
confidence: 0.8
priority: 65
cause:
key: diagnose.cause.graphics.resolution_too_high
summary: '资源包分辨率过高(游戏直接提示换低分辨率资源包)'
fix_action:
- kind: change_graphics
setting: resolution
suggested_value: '低分辨率资源包'
sample: samples/graphics/resolution_too_high.log
source: 'HMCL CrashReportAnalyzer.Rule.RESOLUTION_TOO_HIGH'
- id: graphics.rtss_sodium
severity: warning
pattern: 'RivaTuner Statistics Server \(RTSS\) is not compatible with Sodium'
confidence: 0.9
priority: 70
cause:
key: diagnose.cause.graphics.rtss_sodium
summary: 'RTSS(微星小飞机/帧数显示)与 Sodium 不兼容'
detail: '关掉或卸载 RTSS 的 OSD 覆盖层,或改用 Sodium 兼容的帧数显示'
fix_action:
- kind: change_graphics
setting: overlay
suggested_value: '关闭 RTSS 覆盖层'
sample: samples/graphics/rtss_sodium.log
source: 'HMCL CrashReportAnalyzer.Rule.RTSS_FOREST_SODIUM'
# ── Vulkan 后端组(MC 26.2+ 的实验性 Vulkan 渲染)────────────────────────────
# 证据:research/05-mc-vulkan.md §3.4。renderpearl 的
# `BackendCreationException$Reason` 有五个稳定原因码(四个 vulkan_* + opengl_missing),
# 它们同时出现在 latest.log 的 `Backend failure reason: <码>` 与崩溃报告的
# `Backend failure reason` 行,是最可靠的落点(比英文正文稳,正文会随版本改)。
# 注意语义:26.2/26.3 的 Vulkan 首选失败会**自动回落 OpenGL**,所以单条 vulkan_* 命中
# 通常不是崩溃主因(warning);只有五个后端全挂才是 critical(见最后一条)。
- id: graphics.vulkan_loader_missing
severity: warning
pattern: '(Vulkan loader library is missing|vulkan_loader_missing)'
confidence: 0.85
priority: 80
cause:
key: diagnose.cause.graphics.vulkan_loader_missing
summary: '机器上没有 Vulkan loader(Vulkan 后端起不来,游戏已回落 OpenGL)'
detail: '装/更新显卡驱动(Windows 需要 vulkan-1.dll,Linux 需要 libvulkan.so.1);装不上就改用 OpenGL 后端'
fix_action:
- kind: change_graphics
setting: graphics_api
suggested_value: 'opengl'
note: 'Vulkan loader 缺失时强制 OpenGL,避免每次启动都白试一遍'
- kind: change_graphics
setting: driver
update_driver: true
sample: samples/graphics/vulkan_loader_missing.log
source: 'research/05-mc-vulkan.md §3.4(renderpearl BackendCreationException.Reason)'
- id: graphics.vulkan_device_version_too_low
severity: warning
pattern: '(vulkan_device_version_too_low|Vulkan [0-9]\.[0-9].{0,40}at least [0-9]\.[0-9] required)'
confidence: 0.85
priority: 78
cause:
key: diagnose.cause.graphics.vulkan_device_version_too_low
summary: '显卡/驱动支持的 Vulkan 版本低于 1.2(Vulkan 后端起不来)'
detail: '更新显卡驱动;驱动停更的老卡(10 年以上)没有 Vulkan 1.2,只能继续用 OpenGL'
fix_action:
- kind: change_graphics
setting: graphics_api
suggested_value: 'opengl'
- kind: change_graphics
setting: driver
update_driver: true
sample: samples/graphics/vulkan_device_version_too_low.log
source: 'research/05-mc-vulkan.md §3.4'
- id: graphics.vulkan_missing_extension
severity: warning
pattern: '(vulkan_missing_extension|missing: .*VK_KHR_(dynamic_rendering|push_descriptor))'
confidence: 0.85
priority: 76
cause:
key: diagnose.cause.graphics.vulkan_missing_extension
summary: '驱动缺 Vulkan 必需扩展(VK_KHR_dynamic_rendering / VK_KHR_push_descriptor)'
detail: 'MC 26.2+ 的 Vulkan 后端要求 VK 1.2 + dynamic_rendering + push_descriptor,三者缺一就跑不了;Mesa Dozen 也不支持 push_descriptor'
fix_action:
- kind: change_graphics
setting: graphics_api
suggested_value: 'opengl'
- kind: change_graphics
setting: driver
update_driver: true
note: '只有在驱动有新版本时才可能补上扩展'
sample: samples/graphics/vulkan_missing_extension.log
source: 'research/05-mc-vulkan.md §3.4 + §4.4(Dozen 反例)'
- id: graphics.vulkan_missing_feature
severity: warning
pattern: '(vulkan_missing_feature|missing capabilities: .*VULKAN_CORE_1_2)'
confidence: 0.8
priority: 74
cause:
key: diagnose.cause.graphics.vulkan_missing_feature
summary: '驱动缺 Vulkan 必需特性集(VULKAN_CORE_1_2)'
detail: '同上,属于驱动能力不足;老核显/虚拟机里常见,用 OpenGL 后端即可'
fix_action:
- kind: change_graphics
setting: graphics_api
suggested_value: 'opengl'
sample: samples/graphics/vulkan_missing_feature.log
source: 'research/05-mc-vulkan.md §3.4'
- id: graphics.no_graphics_backend
severity: critical
pattern: 'No supported graphics backend was found'
confidence: 0.9
priority: 82
suppress:
- graphics.vulkan_loader_missing
- graphics.vulkan_device_version_too_low
- graphics.vulkan_missing_extension
- graphics.vulkan_missing_feature
cause:
key: diagnose.cause.graphics.no_graphics_backend
summary: 'Vulkan 与 OpenGL 两个后端都创建失败(26.2+ 只有这两条路)'
detail: '硬件/驱动两侧都不满足:先更新显卡驱动;虚拟机需要开 3D 加速;实在不行只能换机器'
fix_action:
- kind: change_graphics
setting: graphics_api
suggested_value: 'opengl'
note: '先确认 Vulkan 失败原因再决定是否强推 OpenGL'
- kind: change_graphics
setting: software_renderer
note: '软渲染兜底能起来但基本没法玩,只用于导数据/排查'
sample: samples/graphics/no_graphics_backend.log
source: 'research/05-mc-vulkan.md §1.5(两个后端全失败才崩)'
@@ -0,0 +1,138 @@
# 规则库 · 文件与安装完整性(8 条)
# 移植自 HMCL CrashReportAnalyzer.Rule 的完整性组(analyse/02 §7.3 第 4 组)。
# 组内约定:通用异常(NoSuchMethodError / NoClassDefFoundError)优先级低,
# 让「安装不完整 / jar 被解压 / mod 冲突」这类能定位根因的规则通过 suppress 把它们降级为次生结论。
version: 1
category: integrity
rules:
- id: integrity.file_changed
severity: critical
pattern: 'java\.lang\.SecurityException: SHA1 digest error for (?<file>.*)|signer information does not match signer information of other classes in the same package'
confidence: 0.85
priority: 85
cause:
key: diagnose.cause.integrity.file_changed
summary: '游戏文件被改过(SHA1 校验不一致):jar 内容与清单哈希对不上'
detail: '重新下载/校验该文件;不要手改 jar 里的内容'
fix_action:
- kind: reinstall
component: game_jar
path_hint: '{file}'
sample: samples/integrity/file_changed.log
source: 'HMCL CrashReportAnalyzer.Rule.FILE_CHANGED'
- id: integrity.no_such_method
severity: warning
pattern: 'java\.lang\.NoSuchMethodError: (?<class>.*?)'
confidence: 0.6
priority: 40
cause:
key: diagnose.cause.integrity.no_such_method
summary: 'NoSuchMethodError:加载器/coremod 注入的东西与当前库版本不匹配'
detail: '常见于 mod 与游戏版本/Forge 版本不配套;重装加载器或删掉冲突 mod'
fix_action:
- kind: reinstall
component: loader
note: '先重装加载器;仍失败再逐个禁用 mod'
sample: samples/integrity/no_such_method.log
source: 'HMCL CrashReportAnalyzer.Rule.NO_SUCH_METHOD_ERROR'
- id: integrity.no_class_def_found
severity: warning
pattern: 'java\.lang\.NoClassDefFoundError: (?<class>.*)'
confidence: 0.6
priority: 40
cause:
key: diagnose.cause.integrity.no_class_def_found
summary: 'NoClassDefFoundError:缺少类文件(库没下全 / jar 被解压 / mod 不配套)'
detail: '先检查 libraries 是否完整,再排查 mods 里的解压目录'
fix_action:
- kind: reinstall
component: libraries
sample: samples/integrity/no_class_def_found.log
source: 'HMCL CrashReportAnalyzer.Rule.NO_CLASS_DEF_FOUND_ERROR'
- id: integrity.illegal_access
severity: warning
pattern: 'java\.lang\.IllegalAccessError: tried to access class (.*?) from class (?<class>.*?)'
confidence: 0.55
priority: 45
cause:
key: diagnose.cause.integrity.illegal_access
summary: 'IllegalAccessError:某个 coremod 想反射访问别的类的内部成员(在新 JDK 上被封了)'
fix_action:
- kind: reinstall
component: loader
note: '或换该 coremod/mod 的兼容版本'
sample: samples/integrity/illegal_access.log
source: 'HMCL CrashReportAnalyzer.Rule.ILLEGAL_ACCESS_ERROR'
- id: integrity.file_already_exists
severity: warning
pattern: 'java\.nio\.file\.FileAlreadyExistsException: (?<file>.*)'
confidence: 0.75
priority: 60
cause:
key: diagnose.cause.integrity.file_already_exists
summary: '某个 mod 要求一个「不该存在」的文件/目录,导致写入失败'
detail: '按提示删掉该文件(通常是玩家手建的空目录/unzip 残留)'
fix_action:
- kind: reinstall
component: mods
path_hint: '{file}'
note: '按路径删掉多余文件'
sample: samples/integrity/file_already_exists.log
source: 'HMCL CrashReportAnalyzer.Rule.FILE_ALREADY_EXISTS'
- id: integrity.mod_files_decompressed
severity: critical
pattern: '(The directories below appear to be extracted jar files\. Fix this before you continue|Extracted mod jars found, loading will NOT continue)'
confidence: 0.95
priority: 90
suppress:
- integrity.no_class_def_found
- integrity.no_such_method
cause:
key: diagnose.cause.integrity.mod_files_decompressed
summary: 'mods 目录里有被解压成文件夹的 jar:加载器会直接拒绝启动'
detail: '把解压出来的目录删掉,只保留 .jar 文件(很多压缩软件双击就解压了)'
fix_action:
- kind: reinstall
component: mods
note: '删掉解压出来的目录'
sample: samples/integrity/mod_files_decompressed.log
source: 'HMCL CrashReportAnalyzer.Rule.MOD_FILES_ARE_DECOMPRESSED'
- id: integrity.incomplete_forge
severity: critical
pattern: '(java\.io\.UncheckedIOException: java\.io\.IOException: Invalid paths argument, contained no existing paths: \[(.*?)(forge-(.*?)-client\.jar|fmlcore-(.*?)\.jar)\]|Failed to find Minecraft resource version (.*?) at (.*?)forge-(.*?)-client\.jar|Cannot find launch target fmlclient, unable to launch|java\.lang\.IllegalStateException: Could not find net/minecraft/client/Minecraft\.class in classloader SecureModuleClassLoader)'
confidence: 0.9
priority: 88
suppress:
- integrity.no_class_def_found
- integrity.no_such_method
cause:
key: diagnose.cause.integrity.incomplete_forge
summary: 'Forge 安装不完整(缺 forge-*-client.jar / fmlcore)'
detail: '重装该版本的 Forge,并检查 libraries 是否下全'
fix_action:
- kind: reinstall
component: forge
sample: samples/integrity/incomplete_forge.log
source: 'HMCL CrashReportAnalyzer.Rule.INCOMPLETE_FORGE_INSTALLATION'
- id: integrity.unsatisfied_link
severity: critical
pattern: 'java\.lang\.UnsatisfiedLinkError: Failed to locate library: (?<name>.*)'
confidence: 0.85
priority: 82
cause:
key: diagnose.cause.integrity.unsatisfied_link
summary: '找不到原生库(natives):{name} 没解压出来或被杀软删了'
detail: '重装组件(重新解压 natives);Windows 上检查杀软隔离区'
fix_action:
- kind: reinstall
component: natives
path_hint: '{name}'
sample: samples/integrity/unsatisfied_link.log
source: 'HMCL CrashReportAnalyzer.Rule.UNSATISFIED_LINK_ERROR'
+142
View File
@@ -0,0 +1,142 @@
# 规则库 · JVM / Java 版本(8 条)
# 移植自 HMCL CrashReportAnalyzer.Rule(analyse/02 §7.3 第 1 组)。
# schema 见 ../CONTRACT.md §2:pattern(regex) -> {cause, confidence, fix_action[]}
version: 1
category: jvm
rules:
- id: jvm.openj9
severity: critical
pattern: '(Open J9 is not supported|OpenJ9 is incompatible|\.J9VMInternals\.)'
confidence: 0.9
priority: 88
cause:
key: diagnose.cause.jvm.openj9
summary: '当前用的是 OpenJ9 虚拟机:Minecraft 与绝大多数 mod 只支持 HotSpot(Oracle/OpenJDK)'
detail: '请换成 HotSpot 的 Java 8/17/21(Adoptium、Zulu、Microsoft OpenJDK 的 hotspot 版本都可以)'
fix_action:
- kind: change_java
vendor: hotspot
note: 'OpenJ9 不兼容,换 HotSpot'
sample: samples/jvm/openj9.log
source: 'HMCL CrashReportAnalyzer.Rule.OPENJ9'
- id: jvm.need_jdk11
severity: critical
pattern: '(no such method: sun\.misc\.Unsafe\.defineAnonymousClass\(Class,byte\[\],Object\[\]\)Class/invokeVirtual|java\.lang\.UnsupportedClassVersionError: icyllis/modernui/forge/MixinConnector has been compiled by a more recent version of the Java Runtime \(class file version 55\.0\), this version of the Java Runtime only recognizes class file versions up to 52\.0|java\.lang\.IllegalArgumentException: The requested compatibility level JAVA_11 could not be set\. Level is not supported by the active JRE or ASM version)'
confidence: 0.92
priority: 90
cause:
key: diagnose.cause.jvm.need_jdk11
summary: '模组/加载器需要 Java 11,当前 Java 版本不够'
detail: '把实例的 Java 换到 11 或更高(1.17+ 的游戏通常要 17/21)'
fix_action:
- kind: change_java
required_major: 11
sample: samples/jvm/need_jdk11.log
source: 'HMCL CrashReportAnalyzer.Rule.NEED_JDK11'
- id: jvm.too_old_java
severity: critical
pattern: 'java\.lang\.UnsupportedClassVersionError: (.*?) version (?<expected>\d+)\.0'
confidence: 0.92
priority: 88
cause:
key: diagnose.cause.jvm.too_old_java
summary: 'Java 版本过低:无法加载用 class file version {expected} 编译的类,请换用更高版本的 Java'
detail: '这个 class 版本号减去 44 就是所需的 Java 大版本(52→Java 8、61→Java 17)'
fix_action:
- kind: change_java
class_file_version_group: expected
sample: samples/jvm/too_old_java.log
source: 'HMCL CrashReportAnalyzer.Rule.TOO_OLD_JAVA'
- id: jvm.32bit
severity: critical
pattern: '(Could not reserve enough space for (.*?)KB object heap|The specified size exceeds the maximum representable size|Invalid maximum heap size)'
scope: line
confidence: 0.9
priority: 92
suppress:
- memory.out_of_memory
cause:
key: diagnose.cause.jvm.32bit
summary: '分配堆内存失败:多半是 32 位 Java 或 -Xmx 超过系统可用内存'
detail: '32 位 Java 最多只能用约 1.5 GB;换 64 位 Java 或把 -Xmx 降到 2048 MB 以下'
fix_action:
- kind: adjust_memory
need_64bit_java: true
min_xmx_mb: 1024
- kind: change_java
required_major: 17
note: '32 位换 64 位'
sample: samples/jvm/jvm_32bit.log
source: 'HMCL CrashReportAnalyzer.Rule.JVM_32BIT'
- id: jvm.jdk_9
severity: critical
pattern: 'java\.lang\.ClassCastException: (java\.base/jdk|class jdk)'
confidence: 0.8
priority: 80
cause:
key: diagnose.cause.jvm.jdk_9
summary: '游戏只能在 Java 8 上跑(Forge/旧核心库不兼容 Java 9+),当前 Java 版本太高'
fix_action:
- kind: change_java
max_major: 8
sample: samples/jvm/jdk_9.log
source: 'HMCL CrashReportAnalyzer.Rule.JDK_9'
- id: jvm.version_too_high
severity: critical
pattern: '(Unable to make protected final java\.lang\.Class java\.lang\.ClassLoader\.defineClass|java\.lang\.NoSuchFieldException: ucp|Unsupported class file major version|because module java\.base does not export|java\.lang\.ClassNotFoundException: jdk\.nashorn\.api\.scripting\.NashornScriptEngineFactory|java\.lang\.ClassNotFoundException: java\.lang\.invoke\.LambdaMetafactory|Exception in thread "main" java\.lang\.NullPointerException: Cannot read the array length because "urls" is null)'
confidence: 0.85
priority: 84
cause:
key: diagnose.cause.jvm.version_too_high
summary: 'Java 版本过高:老版本 Forge/核心库用了被新 JDK 移除或封装的接口'
detail: '1.16 及更早优先用 Java 8;1.17–1.20.4 用 Java 17;1.20.5+ 用 Java 21'
fix_action:
- kind: change_java
vendor: hotspot
note: '降到该游戏版本要求的 Java'
- kind: reinstall
component: loader
note: '或把 Forge/加载器升级到支持新 Java 的版本'
sample: samples/jvm/java_version_is_too_high.log
source: 'HMCL CrashReportAnalyzer.Rule.JAVA_VERSION_IS_TOO_HIGH'
- id: jvm.modlauncher_8
severity: critical
pattern: 'java\.lang\.NoSuchMethodError: (''void sun\.security\.util\.ManifestEntryVerifier\.<init>\(java\.util\.jar\.Manifest\)''|sun\.security\.util\.ManifestEntryVerifier\.<init>\(Ljava/util/jar/Manifest;\)V)'
confidence: 0.9
priority: 86
cause:
key: diagnose.cause.jvm.modlauncher_8
summary: 'ModLauncher 8 与当前 Java 不兼容(JDK-8273826):1.16+ Forge 在新 JDK 上会这样崩'
fix_action:
- kind: change_java
max_major: 8
- kind: reinstall
component: forge
note: '或升级 Forge 到新版'
sample: samples/jvm/modlauncher_8.log
source: 'HMCL CrashReportAnalyzer.Rule.MODLAUNCHER_8'
- id: jvm.mac_jdk8u261
severity: critical
pattern: >-
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'NSWindow drag regions should only be invalidated on the Main Thread!'
confidence: 0.85
priority: 82
cause:
key: diagnose.cause.jvm.mac_jdk8u261
summary: 'macOS 上 JDK 8u261+ 用新 Xcode 编译导致的 Forge/OptiFine 崩溃(sp614x/optifine#4824)'
detail: '换 Java 8u252 及更早,或升级 Forge/OptiFine'
fix_action:
- kind: change_java
max_major: 8
note: '优先试 8u252'
- kind: reinstall
component: optifine
sample: samples/jvm/mac_jdk8u261.log
source: 'HMCL CrashReportAnalyzer.Rule.MAC_JDK_8U261'
@@ -0,0 +1,39 @@
# 规则库 · 内存(2 条)
# 移植自 HMCL CrashReportAnalyzer.Rule 的内存组(analyse/02 §7.3 第 2 组)。
version: 1
category: memory
rules:
- id: memory.out_of_memory
severity: critical
# 最后一条是跨行组合("Error occurred during initialization of VM" + "Too small maximum heap"),
# 因此整条规则用 file scope;HMCL 的 \R 在 Rust regex 里写成 (?:\r\n|\n|\r)。
scope: file
pattern: '(java\.lang\.OutOfMemoryError|The system is out of physical RAM or swap space|Out of Memory Error|Error occurred during initialization of VM(?:\r\n|\n|\r)Too small maximum heap)'
confidence: 0.9
priority: 80
cause:
key: diagnose.cause.memory.out_of_memory
summary: '游戏内存不足(OutOfMemoryError):-Xmx 太小,或装的 mod 太多/整合包太大'
detail: '把 -Xmx 调到物理内存的一半左右(一般 4096–8192 MB),装光影/大量 mod 时适度加大'
fix_action:
- kind: adjust_memory
min_xmx_mb: 2048
note: '优先加大 -Xmx;若已经是 32 位 Java,先换 64 位'
sample: samples/memory/out_of_memory.log
source: 'HMCL CrashReportAnalyzer.Rule.OUT_OF_MEMORY'
- id: memory.memory_exceeded
severity: critical
pattern: 'There is insufficient memory for the Java Runtime Environment to continue'
confidence: 0.88
priority: 82
cause:
key: diagnose.cause.memory.memory_exceeded
summary: '系统物理内存/交换区耗尽:JVM 连续分配失败,整机内存不够'
detail: '关掉占内存的程序、降低 -Xmx,或扩大系统虚拟内存(页面文件)'
fix_action:
- kind: adjust_memory
increase_system_swap: true
note: '整机内存不足,不只是 -Xmx 的问题'
sample: samples/memory/memory_exceeded.log
source: 'HMCL CrashReportAnalyzer.Rule.MEMORY_EXCEEDED'
@@ -0,0 +1,152 @@
# 规则库 · 模组互斥(8 条)
# 移植自 HMCL CrashReportAnalyzer.Rule 的互斥组(analyse/02 §7.3 第 8 组):
# 具体到某个知名 mod 与 OptiFine / Sodium 的成名冲突,修复动作几乎都是「删 OptiFine 或其对手」。
version: 1
category: mod_conflict
rules:
- id: conflict.optifine_forge
severity: critical
scope: file
# 移植说明:HMCL 原文里的 \> / \< 在这里改成裸 > / <(正则里 \< \> 是词边界断言,要字面量得写裸字符)。
# 末尾 alternative 保持 upstream 语义:`\(Reflector\.java)` 的前置 \( 是**字面括号**,尾部裸 ) 才是**闭合外层分组**,
# 因此它是前缀匹配。这里显式写成 `\(Reflector\.java(?::\d+)?\))`:裸 `(Reflector.java)` 与带行号的
# `(Reflector.java:455)` 两种真实栈帧形态都能命中(P2-1 回归,见 tests/diagnose/engine_rank.rs)。
pattern: >-
(java\.lang\.NoSuchMethodError: 'java\.lang\.Class sun\.misc\.Unsafe\.defineAnonymousClass\(java\.lang\.Class, byte\[\], java\.lang\.Object\[\]\)'|java\.lang\.NoSuchMethodError: 'void net\.minecraft\.client\.renderer\.texture\.SpriteContents\.<init>\(net\.minecraft\.resources\.ResourceLocation, |java\.lang\.NoSuchMethodError: 'void net\.minecraftforge\.client\.gui\.overlay\.ForgeGui\.renderSelectedItemName\(net\.minecraft\.client\.gui\.GuiGraphics, int\)'|java\.lang\.NoSuchMethodError: 'java\.lang\.String com\.mojang\.blaze3d\.systems\.RenderSystem\.getBackendDescription\(\)'|java\.lang\.NoSuchMethodError: 'net\.minecraft\.network\.chat\.FormattedText net\.minecraft\.client\.gui\.Font\.ellipsize\(net\.minecraft\.network\.chat\.FormattedText, int\)'|java\.lang\.NoSuchMethodError: 'void net\.minecraft\.server\.level\.DistanceManager\.(.*?)\(net\.minecraft\.server\.level\.TicketType, net\.minecraft\.world\.level\.ChunkPos, int, java\.lang\.Object, boolean\)'|java\.lang\.NoSuchMethodError: 'void net\.minecraft\.client\.renderer\.block\.model\.BakedQuad\.<init>\(int\[\], int, net\.minecraft\.core\.Direction, net\.minecraft\.client\.renderer\.texture\.TextureAtlasSprite, boolean, boolean\)'|TRANSFORMER/net\.optifine/net\.optifine\.reflect\.Reflector\.<clinit>\(Reflector\.java(?::\d+)?\))
confidence: 0.9
priority: 87
suppress:
- integrity.no_such_method
- integrity.no_class_def_found
cause:
key: diagnose.cause.conflict.optifine_forge
summary: 'OptiFine 与 Forge(或某个 Forge mod)不兼容:NoSuchMethodError 指向被 OptiFine 改写的原版方法'
detail: '删掉 OptiFine,改用同类替代(Sodium/Iris、Embeddium、Oculus 等),或换 OptiFine 的匹配版本'
fix_action:
- kind: remove_mod
mod_ids:
- optifine
action: remove
note: 'OptiFine 与 Forge 冲突,删掉其一'
sample: samples/mod_conflict/optifine_forge.log
source: 'HMCL CrashReportAnalyzer.Rule.OPTIFINE_IS_NOT_COMPATIBLE_WITH_FORGE'
- id: conflict.shaders_mod
severity: critical
pattern: 'java\.lang\.RuntimeException: Shaders Mod detected\. Please remove it, OptiFine has built-in support for shaders\.'
confidence: 0.95
priority: 85
cause:
key: diagnose.cause.conflict.shaders_mod
summary: '装了独立的 Shaders Mod,但 OptiFine 自带光影支持,两者不能共存'
fix_action:
- kind: remove_mod
mod_ids:
- shadersmod
action: remove
sample: samples/mod_conflict/shaders_mod.log
source: 'HMCL CrashReportAnalyzer.Rule.SHADERS_MOD'
- id: conflict.multipart_optifine
severity: critical
pattern: 'Error occurred applying transform of coremod META-INF/asm/multipart\.js function render'
confidence: 0.8
priority: 80
cause:
key: diagnose.cause.conflict.multipart_optifine
summary: 'Forge Multipart 的 coremod 转换失败(多为 OptiFine 同时存在导致)'
fix_action:
- kind: remove_mod
mod_ids:
- optifine
action: remove
note: '删 OptiFine 或 ForgeMultipart 之一'
sample: samples/mod_conflict/multipart_optifine.log
source: 'HMCL CrashReportAnalyzer.Rule.MOD_FOREST_OPTIFINE'
- id: conflict.performant_optifine
severity: critical
pattern: 'org\.spongepowered\.asm\.mixin\.injection\.throwables\.InjectionError: Critical injection failure: Redirector OnisOnLadder\(Lnet/minecraft/block/BlockState;Lnet/minecraft/world/World;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/entity/LivingEntity;\)Z in performant\.mixins\.json:entity\.LivingEntityMixin failed injection check, \(0/1\) succeeded\. Scanned 1 target\(s\)\. Using refmap performant\.refmap\.json'
confidence: 0.9
priority: 86
cause:
key: diagnose.cause.conflict.performant_optifine
summary: 'Performant 与 OptiFine 的 mixin 冲突(LivingEntityMixin 注入失败)'
fix_action:
- kind: remove_mod
mod_ids:
- performant
- optifine
action: remove
note: '两者只能留一个'
sample: samples/mod_conflict/performant_optifine.log
source: 'HMCL CrashReportAnalyzer.Rule.PERFORMANT_FOREST_OPTIFINE'
- id: conflict.twilight_optifine
severity: warning
pattern: 'java\.lang\.IllegalArgumentException: (.*) outside of image bounds (.*)'
confidence: 0.6
priority: 70
cause:
key: diagnose.cause.conflict.twilight_optifine
summary: '贴图越界(outside of image bounds):1.16 上 Twilight Forest 与 OptiFine 的经典冲突'
fix_action:
- kind: remove_mod
mod_ids:
- optifine
action: remove
note: '删 OptiFine 或 Twilight Forest 的兼容版本'
sample: samples/mod_conflict/twilight_optifine.log
source: 'HMCL CrashReportAnalyzer.Rule.TWILIGHT_FOREST_OPTIFINE'
- id: conflict.jade_optifine
severity: critical
pattern: 'Critical injection failure: LVT in net/minecraft/client/renderer/GameRenderer::m_109093_\(FJZ\)V has incompatible changes at opcode 760 in callback jade\.mixins\.json:GameRendererMixin->@Inject::jade\$runTick\(FJZLorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;IILcom/mojang/blaze3d/platform/Window;Lorg/joml/Matrix4f;Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/gui/GuiGraphics;\)V\.'
confidence: 0.9
priority: 86
cause:
key: diagnose.cause.conflict.jade_optifine
summary: 'Jade 与 OptiFine 在 1.20+ 冲突(GameRendererMixin 注入失败)'
fix_action:
- kind: remove_mod
mod_ids:
- optifine
- jade
action: remove
note: '两者只能留一个'
sample: samples/mod_conflict/jade_optifine.log
source: 'HMCL CrashReportAnalyzer.Rule.JADE_FOREST_OPTIFINE'
- id: conflict.neoforge_optifine
severity: critical
pattern: 'cpw\.mods\.modlauncher\.InvalidLauncherSetupException: Invalid Services found OptiFine'
confidence: 0.9
priority: 86
cause:
key: diagnose.cause.conflict.neoforge_optifine
summary: 'NeoForge 与 OptiFine 不兼容(launcher setup 阶段就拒绝)'
fix_action:
- kind: remove_mod
mod_ids:
- optifine
action: remove
sample: samples/mod_conflict/neoforge_optifine.log
source: 'HMCL CrashReportAnalyzer.Rule.NEOFORGE_FOREST_OPTIFINE'
- id: conflict.optifine_world_load
severity: critical
# 移植修正:HMCL 原文写的是 ChunkManager$ProxyTicketManager,Java 正则里 $ 是行尾锚点,
# 那条规则实际上永远命中不了。这里转义成字面量 $,规则才能真正生效。
pattern: 'java\.lang\.NoSuchMethodError: net\.minecraft\.world\.server\.ChunkManager\$ProxyTicketManager\.shouldForceTicks\(J\)Z'
confidence: 0.85
priority: 84
cause:
key: diagnose.cause.conflict.optifine_world_load
summary: 'OptiFine 导致世界无法加载(ChunkManager$ProxyTicketManager 方法被改写)'
fix_action:
- kind: remove_mod
mod_ids:
- optifine
action: remove
sample: samples/mod_conflict/optifine_world_load.log
source: 'HMCL CrashReportAnalyzer.Rule.OPTIFINE_CAUSES_THE_WORLD_TO_FAIL_TO_LOAD'
@@ -0,0 +1,136 @@
# 规则库 · mod 运行期崩(8 条)
# 移植自 HMCL CrashReportAnalyzer.Rule 的运行期组(analyse/02 §7.3 第 7 组)。
version: 1
category: mod_runtime
rules:
- id: mod.loading_crashed_forge
severity: critical
pattern: 'LoaderExceptionModCrash: Caught exception from (?<name>.*?) \((?<id>.*)\)'
confidence: 0.9
priority: 85
cause:
key: diagnose.cause.mod.loading_crashed_forge
summary: 'Forge 抓到 {name}({id})在加载时抛异常'
detail: '禁用该 mod 或换它的兼容版本;同一条栈里往往还有具体异常类型'
fix_action:
- kind: remove_mod
mod_ids:
- '{id}'
action: disable
sample: samples/mod_runtime/loading_crashed_forge.log
source: 'HMCL CrashReportAnalyzer.Rule.LOADING_CRASHED_FORGE'
- id: mod.loading_crashed_fabric
severity: critical
pattern: >-
Could not execute entrypoint stage '(.*?)' due to errors, provided by '(?<id>.*)'!
confidence: 0.9
priority: 85
cause:
key: diagnose.cause.mod.loading_crashed_fabric
summary: 'Fabric 在入口点阶段执行 mod {id} 时出错'
fix_action:
- kind: remove_mod
mod_ids:
- '{id}'
action: disable
sample: samples/mod_runtime/loading_crashed_fabric.log
source: 'HMCL CrashReportAnalyzer.Rule.LOADING_CRASHED_FABRIC'
- id: mod.config_failed
severity: warning
pattern: 'Failed loading config file (?<file>.*?) of type (.*?) for modid (?<id>.*)'
confidence: 0.7
priority: 60
cause:
key: diagnose.cause.mod.config_failed
summary: 'mod {id} 的配置文件 {file} 解析失败(多半是被手改坏或版本升级后格式变了)'
detail: '删掉该配置文件让 mod 重新生成默认值'
fix_action:
- kind: remove_mod
mod_ids:
- '{id}'
action: disable
note: '删配置文件 {file} 后重试(不一定要禁用 mod)'
sample: samples/mod_runtime/config_failed.log
source: 'HMCL CrashReportAnalyzer.Rule.CONFIG'
- id: mod.mixin_failure
severity: critical
pattern: '(MixinApplyError|Mixin prepare failed |Mixin apply failed |mixin\.injection\.throwables\.|\.mixins\.json\] FAILED during \))'
confidence: 0.7
priority: 65
cause:
key: diagnose.cause.mod.mixin_failure
summary: 'Mixin 注入失败:某个 mod 的 mixin 与当前游戏/其他 mod 的代码不匹配'
detail: '常见于 mod 与游戏版本不配套;看日志里 mixin 的 target 类名能定位到 mod'
fix_action:
- kind: remove_mod
action: disable
note: '按 mixin 配置文件名(xxx.mixins.json)定位 mod'
sample: samples/mod_runtime/mixin_failure.log
source: 'HMCL CrashReportAnalyzer.Rule.MODMIXIN_FAILURE'
- id: mod.mixin_apply_failed
severity: critical
pattern: 'Mixin apply for mod (?<id>.*) failed'
confidence: 0.85
priority: 82
cause:
key: diagnose.cause.mod.mixin_apply_failed
summary: 'mod {id} 的 mixin 应用失败'
fix_action:
- kind: remove_mod
mod_ids:
- '{id}'
action: disable
sample: samples/mod_runtime/mixin_apply_failed.log
source: 'HMCL CrashReportAnalyzer.Rule.MIXIN_APPLY_MOD_FAILED'
- id: mod.forge_error
severity: warning
scope: file
pattern: 'An exception was thrown, the game will display an error screen and halt\.(?:\r\n|\n|\r)*(?<reason>.*(?:\r\n|\n|\r)*(\s*at .*(?:\r\n|\n|\r))+)'
confidence: 0.6
priority: 55
cause:
key: diagnose.cause.mod.forge_error
summary: 'Forge 捕获到未处理异常并已弹出错误界面(Forge 自己给了栈)'
detail: '栈顶的 at 行指向哪个 mod 的包名,就去禁用/升级那个 mod'
fix_action:
- kind: seek_help
export_diagnostics: true
sample: samples/mod_runtime/forge_error.log
source: 'HMCL CrashReportAnalyzer.Rule.FORGE_ERROR'
- id: mod.night_config_fixes
severity: warning
pattern: 'com\.electronwill\.nightconfig\.core\.io\.ParsingException: Not enough data available'
confidence: 0.85
priority: 75
cause:
key: diagnose.cause.mod.night_config_fixes
summary: 'night-config 配置文件读坏了(常见于 nightconfigfixes 相关 mod 组合)'
detail: '删掉对应 mod 的配置文件,或移除 nightconfigfixes'
fix_action:
- kind: remove_mod
mod_ids:
- nightconfigfixes
action: remove
sample: samples/mod_runtime/night_config_fixes.log
source: 'HMCL CrashReportAnalyzer.Rule.NIGHT_CONFIG_FIXES'
- id: mod.install_mixinbootstrap
severity: critical
pattern: 'java\.lang\.ClassNotFoundException: org\.spongepowered\.asm\.launch\.MixinTweaker'
confidence: 0.8
priority: 75
cause:
key: diagnose.cause.mod.install_mixinbootstrap
summary: '缺少 MixinBootstrap 前置(Forge 1.12.2 上很多 mod 需要它)'
fix_action:
- kind: reinstall
component: mixin_bootstrap
note: '装上 MixinBootstrap 0.8+'
sample: samples/mod_runtime/install_mixinbootstrap.log
source: 'HMCL CrashReportAnalyzer.Rule.INSTALL_MIXINBOOTSTRAP'
@@ -0,0 +1,22 @@
# 规则库 · 其它(1 条)
# 移植自 HMCL CrashReportAnalyzer.Rule 的杂项组(analyse/02 §7.3 第 10 组)。
# 将来「用户反馈沉淀的新规则」如果归不了类,也先落这里(标记 source 与需要复核)。
version: 1
category: other
rules:
- id: other.debug_crash
severity: info
pattern: 'Manually triggered debug crash'
confidence: 0.95
priority: 70
cause:
key: diagnose.cause.other.debug_crash
summary: '这次崩溃是手动触发的(游戏里按 F3+C),不是真的故障'
detail: '如果用户点了「导出诊断包」做测试,可以忽略这条'
fix_action:
- kind: seek_help
export_diagnostics: false
needs_more_info:
- '确认是否手动触发的调试崩溃'
sample: samples/other/debug_crash.log
source: 'HMCL CrashReportAnalyzer.Rule.DEBUG_CRASH'
@@ -0,0 +1,2 @@
[12:00:40] [main/ERROR]: Failed to start Fabric loader
java.lang.NoClassDefFoundError: org/spongepowered/asm/mixin/transformer/FabricMixinTransformerProxy
@@ -0,0 +1,3 @@
net.fabricmc.loader.impl.FormattedException: net.fabricmc.loader.impl.discovery.ModResolutionException: Mod resolution encountered an incompatible mod set!
- Mod 'Sodium' (sodium) 0.5.8 requires version 0.6.0 or later of mod 'Iris' (iris)
- Mod 'Iris' (iris) 0.5.0 is present but is incompatible
@@ -0,0 +1 @@
net.fabricmc.loader.impl.discovery.ModResolutionException: Could not resolve valid mod collection (at: iris requires sodium)
@@ -0,0 +1 @@
net.fabricmc.loader.impl.discovery.ModResolutionException: Found conflicting mods: sodium conflicts with sodium-extra
@@ -0,0 +1,3 @@
Mod File: /mods/sodium-fabric-0.5.0.jar
Failure message: Mod resolution failed
net.fabricmc.loader.impl.discovery.ModResolutionException: see above
@@ -0,0 +1 @@
net.fabricmc.loader.impl.discovery.ModResolutionException: Could not find required mod: sodium requires iris
@@ -0,0 +1 @@
net.fabricmc.loader.impl.discovery.ModResolutionException: Could not find required mod: sodium requires {minecraft @ 1.20.1}
@@ -0,0 +1,3 @@
Warnings were found!
- Sodium 0.4.10 is incompatible with Iris 1.6.0
[
@@ -0,0 +1 @@
[12:00:55] [main/ERROR]: Failed to create mod instance. ModID: alexsmobs, Class: com.github.alexthe666.alexsmobs.AlexsMobs
@@ -0,0 +1,3 @@
Found duplicate mods:
jei-1.20.1-15.2.0.27.jar
jei-1.20.1-15.2.0.28.jar
@@ -0,0 +1 @@
[12:00:50] [main/ERROR]: Found a duplicate mod jei at /mods/jei-1.20.1-15.2.0.28.jar
@@ -0,0 +1,2 @@
Missing or unsupported mandatory dependencies:
Mod ID: citadel, Requested by: alexsmobs, Expected range: [1.20.1-2.4.0,), Actual version: MISSING
@@ -0,0 +1 @@
[12:00:54] [main/ERROR]: java.lang.IllegalArgumentException: Invalid module name: '' is not a Java identifier
@@ -0,0 +1 @@
[12:00:52] [main/ERROR]: org.spongepowered.asm.launch.platform.MixinPlatformManager threw ResolutionException: Module optifine reads another module named optifine
@@ -0,0 +1 @@
[12:00:51] [main/ERROR]: joptsimple.MultipleArgumentsForOptionException: Found multiple arguments for option net.minecraftforge, but you asked for only one
@@ -0,0 +1 @@
[12:00:53] [main/ERROR]: java.lang.RuntimeException: maximum id range exceeded
@@ -0,0 +1,3 @@
[12:00:20] [Render thread/ERROR]: ########## GL ERROR ##########
[12:00:20] [Render thread/ERROR]: @ Pre render
[12:00:20] [Render thread/ERROR]: 1282: Invalid operation
@@ -0,0 +1,7 @@
#
# A fatal error has been detected by the Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00007ffb1a2b3c4d, pid=12344, tid=0x0000000000002a1c
#
# Problematic frame:
# C [ig8d64.dll+0x9b3c4d]
@@ -0,0 +1 @@
[12:00:22] [main/ERROR]: java.lang.IllegalStateException: GLFW error before init: [0x10008]Cocoa: Failed to find service port for display
@@ -0,0 +1,15 @@
---- Minecraft Crash Report ----
// I let you down. Sorry :(
Time: 2026-10-30 12:00:21
Description: Initializing game
net.minecraft.client.Minecraft$GameLoadException: No supported graphics backend was found.
at net.minecraft.client.Minecraft.<init>(Minecraft.java:612)
at net.minecraft.client.main.Main.main(Main.java:184)
-- Graphics Backend --
Backend: VULKAN
Backend failure reason: vulkan_loader_missing
Backend: OPENGL
Backend failure reason: opengl_missing
@@ -0,0 +1 @@
[12:00:21] [main/ERROR]: The driver does not appear to support OpenGL
@@ -0,0 +1 @@
[12:00:23] [Render thread/WARN]: Maybe try a lower resolution resourcepack?
@@ -0,0 +1 @@
[12:00:24] [main/ERROR]: RivaTuner Statistics Server (RTSS) is not compatible with Sodium
@@ -0,0 +1,5 @@
[12:00:21] [Render thread/INFO]: Using graphics backend VULKAN, using drivers: Intel proprietary driver
[12:00:21] [Render thread/ERROR]: Backend failure reason: vulkan_device_version_too_low
[12:00:21] [Render thread/ERROR]: Backend failure message: Device NVIDIA GeForce GT 710 reports Vulkan 1.0.0, at least 1.2 required
[12:00:21] [Render thread/ERROR]: Failed to create backend VULKAN
[12:00:21] [Render thread/INFO]: Falling back to OpenGL
@@ -0,0 +1,5 @@
[12:00:21] [Render thread/INFO]: Backend library: LWJGL version 3.4.3+13
[12:00:21] [Render thread/INFO]: Using graphics backend VULKAN, using drivers: AMD proprietary driver
[12:00:21] [Render thread/ERROR]: Vulkan loader library is missing
[12:00:21] [Render thread/ERROR]: Failed to create backend VULKAN: Backend failure reason: vulkan_loader_missing
[12:00:21] [Render thread/INFO]: Falling back to OpenGL
@@ -0,0 +1,5 @@
[12:00:21] [Render thread/INFO]: Using graphics backend VULKAN, using drivers: Mesa (zink)
[12:00:21] [Render thread/ERROR]: Backend failure reason: vulkan_missing_extension
[12:00:21] [Render thread/ERROR]: Device [AMD Radeon RX 580] does not support required extensions from FeatureSet [VULKAN_12], missing: [VK_KHR_dynamic_rendering, VK_KHR_push_descriptor]
[12:00:21] [Render thread/ERROR]: Failed to create backend VULKAN
[12:00:21] [Render thread/INFO]: Falling back to OpenGL
@@ -0,0 +1,5 @@
[12:00:21] [Render thread/INFO]: Using graphics backend VULKAN, using drivers: llvmpipe (Mesa)
[12:00:21] [Render thread/ERROR]: Backend failure reason: vulkan_missing_feature
[12:00:21] [Render thread/ERROR]: Backend failure missing capabilities: VULKAN_CORE_1_2
[12:00:21] [Render thread/ERROR]: Failed to create backend VULKAN
[12:00:21] [Render thread/INFO]: Falling back to OpenGL
@@ -0,0 +1,34 @@
#
# A fatal error has been detected by the Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00007ffb1a2b3c4d, pid=12344, tid=0x0000000000002a1c
#
# JRE version: Java(TM) SE Runtime Environment (8.0_51-b16) (build 1.8.0_51-b16)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.51-b03 mixed mode windows-amd64 compressed oops)
# Problematic frame:
# C [ig8d64.dll+0x9b3c4d]
#
# Failed to write core dump. Minidumps are not enabled by default on client versions of Windows
#
# If you would like to submit a bug report, please visit:
# http://bugreport.java.com/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#
--------------- T H R E A D ---------------
Current thread (0x000000001f3b8000): JavaThread "Render thread" [_thread_in_native, id=10780, stack(0x000000001a000000,0x000000001a100000)]
siginfo: ExceptionCode=0xc0000005, ExceptionInformation=0x0000000000000000 0x0000000000000000 0x0000000000000000
VM Arguments:
jvm_args: -Xmx4096m -Xms1024m -Djava.library.path=C:\Users\player\.minecraft\natives
java_command: net.minecraft.launchwrapper.Launch --gameDir . --assetsDir assets
--------------- H E A P ---------------
Heap:
garbage-first heap total 4194304K, used 1048576K [0x0000000700000000, 0x0000000800000000)
Memory: 4k page, physical 16741480k(4716856k free), swap 18672384k(9433608k free)
@@ -0,0 +1,19 @@
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 1073741824 bytes for committing reserved memory.
#
# Out of Memory Error (os_windows.cpp:3521), pid=9876, tid=0x0000000000001f44
#
# JRE version: Java(TM) SE Runtime Environment (17.0.9+9) (build 17.0.9+9-LTS-211)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (17.0.9+9-LTS-211, mixed mode, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, windows-amd64)
#
--------------- T H R E A D ---------------
Current thread (0x0000021d6f82b1a0): JavaThread "Render thread" [_thread_in_vm, id=14120, stack(0x000000a1b0000000,0x000000a1b0100000)]
VM Arguments:
jvm_args: -Xmx8192m -Xms2048m
java_command: net.fabricmc.loader.impl.launch.knot.KnotClient --gameDir .
Memory: 4k page, physical 8134564k(120944k free), swap 9723904k(550664k free)
@@ -0,0 +1 @@
[12:00:34] [main/ERROR]: java.nio.file.FileAlreadyExistsException: config/example-mod.toml
@@ -0,0 +1,2 @@
[12:00:30] [main/ERROR]: Failed to verify class file
java.lang.SecurityException: SHA1 digest error for net/minecraft/client/main/Main.class
@@ -0,0 +1,2 @@
[12:00:33] [main/ERROR]: coremod failed
java.lang.IllegalAccessError: tried to access class net.minecraft.client.Minecraft from class com.example.coremod.Hook
@@ -0,0 +1 @@
[12:00:36] [main/ERROR]: java.io.UncheckedIOException: java.io.IOException: Invalid paths argument, contained no existing paths: [/home/user/.minecraft/libraries/net/minecraftforge/forge/1.20.1-47.2.0/forge-1.20.1-47.2.0-client.jar]
@@ -0,0 +1,2 @@
[12:00:35] [main/ERROR]: Extracted mod jars found, loading will NOT continue
[12:00:35] [main/ERROR]: The directories below appear to be extracted jar files. Fix this before you continue
@@ -0,0 +1,2 @@
[12:00:32] [main/ERROR]: A mod crashed on startup
java.lang.NoClassDefFoundError: net/minecraftforge/fml/loading/FMLEnvironment
@@ -0,0 +1,3 @@
[12:00:31] [main/ERROR]: Failed to start
java.lang.NoSuchMethodError: net.minecraft.world.World.getBlockState(Lnet/minecraft/core/BlockPos;)Lnet/minecraft/world/level/block/state/BlockState;
at com.example.mod.Foo.bar(Foo.java:42)
@@ -0,0 +1,2 @@
[12:00:37] [main/ERROR]: Failed to initialise LWJGL
java.lang.UnsatisfiedLinkError: Failed to locate library: lwjgl.dll
@@ -0,0 +1,3 @@
[12:00:06] [main/ERROR]: Unable to launch
java.lang.NoSuchFieldException: ucp
at java.base/java.lang.ClassLoader$UnsafeAccessor.getUnsafe(ClassLoader.java:123)
@@ -0,0 +1,2 @@
[12:00:05] [main/ERROR]: Failed to launch
java.lang.ClassCastException: java.base/jdk.internal.loader.ClassLoaders$AppClassLoader cannot be cast to java.net.URLClassLoader
@@ -0,0 +1,3 @@
[12:00:04] [main/INFO]: Starting JVM with -Xmx4096m
Error occurred during initialization of VM
Could not reserve enough space for 4194304KB object heap
@@ -0,0 +1 @@
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'NSWindow drag regions should only be invalidated on the Main Thread!'
@@ -0,0 +1,3 @@
[12:00:07] [main/ERROR]: ModLauncher failed
java.lang.NoSuchMethodError: 'void sun.security.util.ManifestEntryVerifier.<init>(java.util.jar.Manifest)'
at cpw.mods.modlauncher.TransformingClassLoader.buildTransformedClassNodeFor(TransformingClassLoader.java:151)
@@ -0,0 +1,2 @@
[12:00:02] [main/ERROR]: Failed to start the game
java.lang.IllegalArgumentException: The requested compatibility level JAVA_11 could not be set. Level is not supported by the active JRE or ASM version
@@ -0,0 +1,2 @@
[12:00:01] [main/INFO]: Loading Minecraft 1.20.1 with Forge 47.2.0
OpenJ9 is incompatible with the authentication libraries used by this launcher
@@ -0,0 +1,2 @@
[12:00:03] [main/ERROR]: Could not find or load main class net.fabricmc.loader.impl.launch.knot.KnotClient
java.lang.UnsupportedClassVersionError: net/fabricmc/loader/impl/launch/knot/KnotClient has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 52.0
@@ -0,0 +1,3 @@
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 67108864 bytes for committing reserved memory.
@@ -0,0 +1,3 @@
[12:00:10] [Render thread/ERROR]: Encountered an unexpected exception
java.lang.OutOfMemoryError: Java heap space
at net.minecraft.client.renderer.chunk.RenderChunk.rebuildChunk(RenderChunk.java:123)
@@ -0,0 +1 @@
[12:01:15] [main/ERROR]: Critical injection failure: LVT in net/minecraft/client/renderer/GameRenderer::m_109093_(FJZ)V has incompatible changes at opcode 760 in callback jade.mixins.json:GameRendererMixin->@Inject::jade$runTick(FJZLorg/spongepowered/asm/mixin/injection/callback/CallbackInfo;IILcom/mojang/blaze3d/platform/Window;Lorg/joml/Matrix4f;Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/gui/GuiGraphics;)V.
@@ -0,0 +1 @@
[12:01:12] [main/ERROR]: Error occurred applying transform of coremod META-INF/asm/multipart.js function render
@@ -0,0 +1 @@
[12:01:16] [main/ERROR]: cpw.mods.modlauncher.InvalidLauncherSetupException: Invalid Services found OptiFine
@@ -0,0 +1,4 @@
[12:01:10] [main/ERROR]: Failed to launch Forge
java.lang.NoSuchMethodError: 'java.lang.String com.mojang.blaze3d.systems.RenderSystem.getBackendDescription()'
at net.optifine.reflect.Reflector.<clinit>(Reflector.java:455)
TRANSFORMER/net.optifine/net.optifine.reflect.Reflector.<clinit>(Reflector.java:455)
@@ -0,0 +1 @@
[12:01:17] [main/ERROR]: java.lang.NoSuchMethodError: net.minecraft.world.server.ChunkManager$ProxyTicketManager.shouldForceTicks(J)Z
@@ -0,0 +1 @@
[12:01:13] [main/ERROR]: org.spongepowered.asm.mixin.injection.throwables.InjectionError: Critical injection failure: Redirector OnisOnLadder(Lnet/minecraft/block/BlockState;Lnet/minecraft/world/World;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/entity/LivingEntity;)Z in performant.mixins.json:entity.LivingEntityMixin failed injection check, (0/1) succeeded. Scanned 1 target(s). Using refmap performant.refmap.json
@@ -0,0 +1 @@
[12:01:11] [main/ERROR]: java.lang.RuntimeException: Shaders Mod detected. Please remove it, OptiFine has built-in support for shaders.
@@ -0,0 +1 @@
[12:01:14] [main/ERROR]: java.lang.IllegalArgumentException: 512 outside of image bounds 256
@@ -0,0 +1 @@
[12:01:02] [main/ERROR]: Failed loading config file alexsmobs-common.toml of type COMMON for modid alexsmobs
@@ -0,0 +1,3 @@
[12:01:05] [main/ERROR]: An exception was thrown, the game will display an error screen and halt.
java.lang.NullPointerException: Cannot invoke "net.minecraft.world.level.Level.getBlockState()" because "level" is null
at com.example.mod.Foo.tick(Foo.java:123)
@@ -0,0 +1 @@
[12:01:07] [main/ERROR]: java.lang.ClassNotFoundException: org.spongepowered.asm.launch.MixinTweaker
@@ -0,0 +1 @@
[12:01:01] [main/ERROR]: Could not execute entrypoint stage 'main' due to errors, provided by 'sodium'!
@@ -0,0 +1 @@
[12:01:00] [main/ERROR]: LoaderExceptionModCrash: Caught exception from Alex's Mobs (alexsmobs)
@@ -0,0 +1 @@
[12:01:04] [main/ERROR]: Mixin apply for mod examplemod failed examplemod.mixins.json:MixinFoo from mod examplemod->@Inject::handler
@@ -0,0 +1 @@
[12:01:03] [main/ERROR]: org.spongepowered.asm.mixin.injection.throwables.InvalidInjectionException: Critical injection failure: @Inject annotation could not find target method
@@ -0,0 +1 @@
[12:01:06] [main/ERROR]: com.electronwill.nightconfig.core.io.ParsingException: Not enough data available
@@ -0,0 +1 @@
[12:01:30] [Render thread/INFO]: Manually triggered debug crash
@@ -0,0 +1,6 @@
[12:01:21] [Worker-Main-1/ERROR]: Unable to bake model
java.lang.RuntimeException: Failed to tessellate
-- Block being tessellated --
Details:
Block: minecraft:grass_block
Block location: World: (12,64,-34)
@@ -0,0 +1,6 @@
[12:01:20] [Server thread/ERROR]: Encountered an unexpected exception
java.lang.NullPointerException: Ticking entity
-- Entity being ticked --
Details:
Entity Type: minecraft:cow (net.minecraft.world.entity.animal.Cow)
Entity's Exact location: 123.45, 64.00, -67.89
@@ -0,0 +1,39 @@
# 规则库 · 游戏实体/方块(2 条)
# 移植自 HMCL CrashReportAnalyzer.Rule 的实体/方块组(analyse/02 §7.3 第 9 组):
# 崩在 tick 时能拿到实体类型/方块类型与坐标,是「哪个 mod 的实体坏了」的直接线索。
version: 1
category: world
rules:
- id: world.entity_tick
severity: critical
scope: file
pattern: "Entity Type: (?<type>.*)[\\w\\W\\n\\r]*?Entity's Exact location: (?<location>.*)"
confidence: 0.75
priority: 70
cause:
key: diagnose.cause.world.entity_tick
summary: '崩在实体 tick:实体 {type}(坐标 {location})'
detail: '看看这个实体来自哪个 mod(血条/怪物增强/刷怪类 mod 居多),禁用该 mod 或删掉存档里这个实体'
fix_action:
- kind: remove_mod
action: disable
note: '按实体类型定位 mod'
sample: samples/world/entity_tick.log
source: 'HMCL CrashReportAnalyzer.Rule.ENTITY'
- id: world.block_model
severity: warning
scope: file
pattern: 'Block: (?<type>.*)[\w\W\n\r]*?Block location: (?<location>.*)'
confidence: 0.65
priority: 65
cause:
key: diagnose.cause.world.block_model
summary: '崩在方块({type},坐标 {location}):多半是方块模型/贴图相关 mod 的问题'
detail: '定位该方块所属 mod;资源包也可能导致(先换回原版资源包验证)'
fix_action:
- kind: remove_mod
action: disable
note: '按方块类型定位 mod / 先换回原版资源包'
sample: samples/world/block_model.log
source: 'HMCL CrashReportAnalyzer.Rule.BLOCK'