
Spawn C2ME Fix
修复了同时使用Spawn和C2ME时的区块死锁和游戏崩溃问题。
描述
此模组为 Spawn 模组中的 AnimalVariantManager.chooseWeightedVariant() 打补丁,使其使用实体自身线程安全的 RandomSource,而不是 Level.random.。
这可以防止 C2ME 在区块生成期间从工作线程调用 finalizeSpawn 时出现 ConcurrentModificationException,否则该异常会导致进一步的区块加载死锁。
此外,它还修复了一处线程冲突,该冲突可能在区块自动保存期间导致服务器死锁或崩溃。Spawn 的方块变体分配代码(Moray Crevice、海洋生物装饰、海胆)偶尔会执行不安全的世界查询,例如生物群系查找、相邻方块更新,而这些操作所处的上下文已无法保证 C2ME 的异步区块系统能够完成它们,从而导致服务器卡死。方块变体分配现在被推迟到正常的 tick 中执行,而不是在区块自动保存期间运行,并且其生物群系查找不再强制加载区块。
已知问题
最初的方法旨在使动物变体具有确定性,这意味着在相同种子下,你总会在世界中的相同位置遇到相同的变体。此修复破坏了这一行为,使变体完全随机。使用相同种子生成世界,每次都会得到不同的结果。
可能存在一种更优雅的解决方法,但这需要更深入的集成,而对我个人而言这超出了范围。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。