镭:重铸版

镭:重铸版

Radium Reforged 1.20.1 的分支,用于修复错误

性能

Radium(重新锻造版) — 一个针对 Forge 1.20.1 的 Radium 维护分支。

Radium 是 CaffeineMC 的通用优化模组 Lithium 的 Forge 移植版。它在不改变原版行为、游戏玩法或世界生成的前提下,提升服务器刻(tick)性能。

由于上游开发已停滞,因此诞生了此分支。它使用相同的模组 ID,所以可以直接替换安装。

与上游版本的不同之处

已修复 — 复制 NBT 化合物时出现 NullPointerException

NbtCompoundMixin 可能会让一个 fastutil 映射表留下 null 的内部列表,导致任何对 CompoundTag 进行深度复制或深度迭代的模组崩溃。已知的解决方法是 mixin.alloc.nbt=false,但这意味着完全放弃该优化。现在映射表会被急切填充,该选项可以保持开启。

上游问题:Reforged-Hub/radium-upstream#52(在那里仍未关闭)。

已修复 — 实体状态更改期间的 ConcurrentModificationException

当一个区块部分的实体跟踪状态发生变化时触发的回调,可能会在遍历过程中丢弃实体并破坏迭代。现在,该部分的实体列表会通过其副本进行迭代。

配置:mixin.chunk.entity_status_iteration

新增 — 用于堆挤测试的推动性缓存

堆挤测试是二次方复杂度:每个区块部分中的每个实体都会询问其他每个实体是否可以被推动,而答案仅取决于被询问的实体。现在,每个实体每刻只计算一次,将 N*N 次调用减少为 N 次。

这在模组服务器上尤为重要。在原版中,isPushable() 很简单,但它会调用 isClimbing()——一个流行的 Mixin 目标。对一个模组服务器进行性能分析显示,Botania 会挂钩此方法以查询 Curios 槽位,每次调用都会遍历能力分发器:仅堆挤测试一项就占用了服务器线程约 0.6% 的时间,而 Pehkui 还在其上添加了自己的挂钩。

最多会产生一刻的延迟——一个实体在刻中死亡时,到该刻结束前仍被视为可推动。

配置:mixin.entity.collisions.pushable_cache

移植 — 上游 Radium 从未采用的优化

从 CaffeineMC 的 Lithium 1.20.1 分支引入:

  • mixin.ai.useless_sensors — 跳过其结果从未被读取的脑部传感器(山羊物品传感器;非幼年动物上的亲代动物传感器)
  • mixin.block.beehive — 蜂巢在每次尝试离开时都要进行昂贵的 NBT 复制,现在会先检查是否有障碍物
  • mixin.entity.sprinting_particles — 跳过服务端冲刺粒子效果的工作

这使得本分支与 Lithium 1.20.1 的功能持平,除一个实验性选项外:experimental.entity.block_caching.fluid_pushing。它将其缓存基于 Fabric 的 updateMovementInFluid 的流体标签参数,而 Forge 将该方法替换为了无参版本——因此没有可供缓存的关键字。其功能已被 mixin.entity.collisions.fluid 覆盖。

兼容性

  • Minecraft 1.20.1,Forge
  • 模组 ID 为 radium — 请勿与原版同时安装
  • 每项优化都有独立的配置开关,参见 lithium-mixin-config.md
  • Aperture Innovations:当安装此模组时,mixin.entity.collisions.movement 会自动关闭——否则其传送门将无法进入。您无需编辑任何配置。

更多优化

查看我的其他模组:JEIOptimizer

鸣谢与许可

Lithium 由 CaffeineMC 开发。Forge 移植版由 dima_dencep 和 NanoLive 完成。基于 LGPL-3.0-only 许可协议发布。

源代码:https://github.com/bigenergy/radium-reforged-patched