FoamFix 是一个模组,旨在通过简单而有针对性的优化,改善模组化 Minecraft 体验的某些方面。
特性
FoamFix 主要专注于模组化 Minecraft 的以下方面:
- 内存占用(在 Minecraft 1.8+ 中)。这是 FoamFix 最初被制作出来的原因,也是它如今被整合进整合包的最重要原因。观察表明,在一些特别庞大的整合包中,Java 堆内存占用(使用 VisualVM 在主菜单、游戏完成加载后测量)最多可下降 50%!
- TPS 占用,尤其是在大型服务器上——幽灵区块加载修复和网络优化对单人游戏体验帮助不大,但在尝试扩展多人世界规模时会带来极大的收益。
此外还有一些其他较小的优化,但它们可能不会直接对你的游戏体验产生明显影响。完整列表请查看你的 foamfix.cfg 文件!
常见问题
- 问:我遇到了性能问题,移除 FoamFix 后问题就消失了!
- 答:请确保你已更新到最新版本。凭我个人的资源,不可能在成千上万种电脑硬件配置上测试 FoamFix,而其中某些特定配置有时确实会出现问题。如果你已经更新到最新版本但仍然遇到问题,请联系我!
- 问:如果客户端/服务端没有安装 FoamFix,我可以只在服务端/客户端运行它吗?
- 答:可以。
- 问:我可以在服务端和客户端混用不同版本的 FoamFix 吗?
- 答:同样可以。
- 问:为什么会有适用于 1.7.10 的 FoamFix?
- 答:FoamFix 主要面向 1.8+ 的模组化 Minecraft。不过,它后期加入的一些优化——尤其是幽灵区块加载修复——结合一些已被弃用的修复/优化项目(BugfixMod、Minecraft Forkage),促使我为 1.7.10 制作了一个同名优化模组,它共享其中一部分功能。和往常一样,请查看 foamfix.cfg 了解更多信息!
- 问:你能为原版制作一个 FoamFix 吗?
- 答:FoamFix 几乎所有优化都针对模组环境。将它移植到原版几乎没有什么收益,因为原版本身就比 Forge+FoamFix 更高效。如果你正在运行一个大型原版服务器,使用专门针对这种情况的解决方案可能会更好。
- 问:可以在开发环境中运行 FoamFix 吗?
- 答:可以,但你必须使用 BON2 或类似工具手动进行反混淆。
Bug 报告
请先尝试在不安装 FoamFix 的情况下复现该 Bug——如果在没有 FoamFix 时问题依然存在,那它很可能不是 FoamFix 的问题。
当你报告一个只会在安装 FoamFix 后出现的 Bug 时,
- 请只在这里报告!这能帮助我跟踪现有问题。
- 尤其请不要把这些问题报告给其他模组开发者!如果我最终判断问题是由另一个模组引起的,我会尽力亲自联系对方作者并与其讨论修复方案;不过,不必要的 Bug 报告确实有些烦人。
额外提示
(注意:这一部分之后某个时候会被重写为更全面的优化指南)
- 在 forge.cfg 中启用 alwaysSetupTerrainOffThread。(从 0.6.3 开始,FoamFix 会在新实例中自动为你这样做!)
- 如果你遇到了与“ghost chunk loading”相关的卡顿(大约每 30 秒一次明显卡顿尖峰),一种部分绕过该问题的方法是提高 forgeChunkLoading.cfg 中 dormantChunkCacheSize 的值。
- 对于某些 GPU/驱动配置(尤其是某些 AMD 驱动/显卡组合),禁用 mipmaps(将 Mipmap Levels 设置为 0)会显著提升 FPS。这是因为由动态纹理更新造成的延迟会随着需要更新的纹理数量增加而大幅上升,而这种开销会随 mipmap 级别数量线性增长。
- 在独立服务器上,将 max-tick-time=0 可以解决与 "java.lang.Error: Watching server" 相关的崩溃。仍在研究为什么会发生这种情况!
常见崩溃
- java.lang.NoSuchMethodError: net.minecraftforge.common.model.TRSRTransformation.isIdentity()Z 在 FoamFix 0.9.6+ 上出现 —— 将 Forge 更新到最新推荐版本,或将 FoamFix 降级到 0.9.5。
- java.lang.IllegalArgumentException: Cannot set property [...], it is not an allowed value —— 导致此错误的代码路径与原版行为非常接近,因此在没有 FoamFix 的情况下也应当会导致相同崩溃。请确认该问题无法在不安装 FoamFix 时复现。
- 如果你同时使用 SpongeForge 和 FoamFix(请注意,我不提供对它的支持),一个与 MixinMutableBlockPos 相关的常见崩溃可以通过在 config/foamfix.cfg 中禁用 coremod.optimizedBlockPos 来修复。
支持
- Bug 报告请只使用 GitHub issue tracker。这样更方便跟踪。
- 请注意,“不受支持”并不意味着“完全无法运行”——它更意味着“某些东西可能会出问题,而我可能因为各种原因无法提供帮助”。请谨慎使用!
以下模组不受支持,我也无法保证能妥善修复与它们交互相关的问题:
- FastCraft 2。其许可证限制非常严格,而且如果不把开发者当作神谕,几乎无法调试。
- NotEnoughIDs。自 2017 年 9 月起已不再维护。
- OptiFine。其许可证限制非常严格,而且如果不把开发者当作神谕,几乎无法调试。
- Sponge。我们的一些引擎改动彼此冲突。(请注意,即使你的服务端安装了 Sponge,客户端安装 FoamFix 并连接到 Sponge 服务器仍然是受支持的!)
- TexFix。
- 大多数其他专有优化模组。如果我看不到源代码,我大概率不会去修复相关问题。