通用配置(General)
基本信息
| 属性 | 值 |
|---|---|
| 分类 | General(BetterCrashesConfig.GENERAL) |
| 配置项数 | 6 |
| 生效侧 | 仅客户端(BetterCrashes.java:20-21 在 Side.CLIENT 才 init) |
全部配置项
| 键 | 类型 | 默认值 | 取值范围 | 说明 |
|---|---|---|---|---|
crashLogLimitClient |
int | 30 | 0 – Integer.MAX_VALUE |
每次启动客户端最多生成的崩溃日志数 |
crashLogLimitServer |
int | 30 | 0 – Integer.MAX_VALUE |
每次启动最多生成的崩溃日志数(对应集成服务器崩溃) |
crashLogPasteService |
String | mclo.gs |
— | 上传服务名;注释明确「目前只支持 mclo.gs」 |
issueTrackerURL |
String | ""(空) |
— | 问题追踪链接;非空时界面才显示「Open bug tracker」按钮 |
unsupportedMods |
String[] | [](空) |
— | 整合包不正式支持的 modid 列表 |
stacktraceDeobfuscation |
boolean | true |
— | 用 MCP 映射反混淆原版方法名,让堆栈可读 |
崩溃日志限流
crashLogLimitClient / crashLogLimitServer 是核心防刷机制。
MinecraftMixin.betterCrashes$shouldGenerateCrashLog()(:421-424):
return clientCrashCount <= crashLogLimitClient
&& serverCrashCount <= crashLogLimitServer;
超过阈值后仍然显示崩溃界面,只是不再往磁盘写 txt。
界面会改显 paragraph6 / paragraph7
(“Number of crash logs exceeded limit and log was not generated.” /
“Limit can be changed via config.”)。
两个计数器是 MinecraftMixin 的 @Unique 实例字段,每次游戏启动重置为 0,
所以阈值是「每次启动」而非「永久」。
unsupportedMods 的额外行为
GuiProblemScreen.getUnsupportedMods()(:294-309)会:
- 遍历已装 mod,取出 modid 命中
unsupportedMods列表的,加显示名进列表 - 无条件追加
"Optifine"(若FMLClientHandler.hasOptifine()为真)
⇒ OptiFine 永远出现在「本整合包不正式支持」一栏,且无法通过配置关闭。 界面会提示玩家在提交报告时一并提及这些 mod。
源码核对(2026-10-01 审计)
- ⚠️ 默认值取自错误来源的高发点(已订正):
BetterCrashesConfig.java:20写的是public static boolean stacktraceDeobfuscation = false;—— 字段初始化值是 false;但:56-60的config.getBoolean("stacktraceDeobfuscation", GENERAL, true, ...)默认值是 true,且syncConfig()在 preInit 无条件执行, 会立刻用true覆写该字段。 ⇒ 实际默认值 = true。字段初始化的false是从未生效的死值, 照抄字段声明会写错。 - ⚠️
syncConfig()中crashLogLimitClient等没有写回同名字段之前的前置检查, 但所有 6 项都做了config.hasChanged() → save(),配置会在首次运行时落盘。 - ⚠️
unsupportedMods用Arrays.asList(...)包装config.getStringList(...)(:50-55)⇒ 返回的是固定长度 List, 若将来有代码调用.add()/.remove()会抛UnsupportedOperationException。 当前源码无此类调用,暂不触发。 - 本 mod 无任何方块/物品/实体/配方,配置项是它唯一的可调面。