包医生

包医生

从配置文件中诊断并禁用缓慢或损坏的模组集成,无需编辑任何模组jar文件。

Pack Doctor


有些模组自带一些集成功能,这些功能可能运行缓慢、存在缺陷,或者你根本不想要,但模组本身却不提供关闭它们的选项。通常你只能选择删除整个模组,或者从它的 jar 文件中修改类。

Pack Doctor 将这些问题变成了配置项。

它修复了什么

一个 JEI 插件导致世界加入界面卡顿。 JEI 没有针对单个插件的开关。在一个真实的整合包中,某个模组的奥术铁砧集成功能,因将游戏内每个物品与每个法术进行交叉相乘,导致每次加入世界时 多花费 42 秒。将该插件加入黑名单后,JEI 其他功能一切正常——只是该模组的配方不再显示在浏览器中。

[jei]
    pluginBlacklist = ["irons_spellbooks:jei_plugin"]

接受完整的插件 UID,或者仅使用模组 id 来屏蔽该模组注册的所有内容。

不知道哪个插件是问题所在。 开启计时功能后,Pack Doctor 会记录每个 JEI 插件的耗时,从高到低排序,保存到 config/packdoctor-timings.txt 文件中。

[jei]
    logJeiPlugins = true
    autoBlacklistOverSeconds = 15.0

autoBlacklistOverSeconds 是一个安全网:任何在上次启动时耗时超过此设定值的插件,将在下次启动时被自动跳过,并记录日志。将其设置为 0 可禁用此功能。

合成书导致生存模式物品栏卡顿。 某个模组在对配方进行分类时抛出异常,会导致原版合成书无限重新构建——创造模式物品栏正常,但生存模式卡顿严重,并且日志中没有任何线索指向问题原因。

[recipeBook]
    disableRecipeBook = false
    recipeBlacklist = ["aoa3"]

可以完全禁用合成书,或仅将某个模组的配方从其中移除,保留其余功能正常。无论哪种方式,JEI 都不受影响——这些配方仍会显示在 JEI 中。

模组强制在加入世界时给你一本指南书。 许多模组硬编码了“玩家首次加入世界时给予这本书”的逻辑,且没有配置开关。

# packdoctor-common.toml - 服务端
[items]
    blockedJoinItems = ["patchouli:guide_book", "simplyswords:runic_grimoire"]

帕秋莉 (Patchouli) 的书都是同一个物品,仅 NBT 不同,因此指定特定的书名只会屏蔽那一本书,而不会影响所有的帕秋莉书。每次移除操作都会记录物品、堆叠数量和匹配规则,因此玩家报告物品丢失时,可以追溯到对应的规则。

警告: 此功能会永久性删除玩家物品栏中的物品,无法撤销。通配符形式 "mymod:*" 会匹配 该模组注册的所有物品,包括玩家制作的装备和身上穿着的盔甲。不带冒号的纯模组 id 会被有意拒绝,因此无法通过照搬 [jei] 部分的语法来启用整个模组的删除功能。

FTB Library 的侧边栏按钮。 即绘制在物品栏界面上的键帽风格图标。FTB Library 没有为其提供开关。

[ui]
    hideSidebarButtons = true

任务书物品仍然可用;你只是失去了那个界面上的快捷方式。

客户端或服务端

两者相互独立。JEI、合成书和 UI 选项是客户端侧的;加入世界物品拦截器是服务端侧的。该模组不需要在两端都安装——客户端可以针对原版 Forge 服务端使用 JEI 黑名单,服务端也可以使用物品拦截器,而无需对玩家提出任何要求。

安全性

每个 mixin 都使用 defaultRequire: 0。如果未来的 JEI 或 Minecraft 版本改变了某些目标,Pack Doctor 会退化为不执行任何操作,而不会导致游戏崩溃。JEI 是可选依赖——没有它,JEI 的 mixin 就永远不会生效。