微妙效果线程修复

微妙效果线程修复

修复了NeoForge 1.21.1上由Subtle Effects生物群系粒子引起的“从多个线程访问LegacyRandomSource”崩溃问题。

微效效果线程修复

这是针对 NeoForge 1.21.1 上由 Subtle Effects 引发的 Accessing LegacyRandomSource from multiple threads 崩溃的终极修复方案。


问题所在

当 Subtle Effects 与现代优化模组(如 Sodium、Flywheel、ScalableLux、ModernFix 等)一起使用,或者仅仅是在高负载的客户端 + 集成服务器环境下,游戏可能会随机崩溃,并出现以下错误:

堆栈跟踪几乎总是指向:

einstein.subtle_effects.ticking.biome_particles.BiomeParticleManager.tickBiomeParticles

这是因为 Minecraft 的 LegacyRandomSource 并非线程安全,而 Subtle Effects 在可能被多个线程访问的上下文中使用了它。


解决方案

本模组提供两层保护:

  1. 主要修复 将 tickBiomeParticles 内部的 Level#getRandom() / Level#random() 调用重定向到一个适当的线程安全 RandomSource(ThreadLocal)。

  2. 安全网 如果仍有任何与 LegacyRandomSource 相关的 IllegalStateException 逃逸,它会被捕获,并且该帧的生物群系粒子更新将被跳过。游戏将继续正常运行。

结果:不再崩溃,同时绝大多数情况下生物群系粒子仍能正常工作。


特性

  • 对 Subtle Effects 为软(可选)依赖 —— 若该模组未安装则不起任何作用
  • 仅客户端
  • 零配置
  • 极为轻量
  • 与重型优化整合包完全兼容

安装方法

  1. 安装 NeoForge 1.21.1
  2. 安装 Subtle Effects
  3. 安装本模组
  4. 启动游戏

无需任何配置。


兼容性

  • Minecraft:1.21.1
  • 加载器:NeoForge
  • 软依赖:Subtle Effects

致谢

为 Perfection Rework 视觉整合包制作。 灵感来源于原始的 Subtle Fix 概念。


许可证

MIT