
镭:重铸版
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 许可协议发布。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。