FastChunkGen

FastChunkGen

FastChunkGen是C2ME的非官方Forge移植版,包含修复、稳定性提升和性能优化。

性能

FastChunkGen

FastChunkGen 基本上将 Minecraft 的区块处理移出了主服务器线程。世界生成在多个工作线程上运行,区块读取/写入异步进行,因此不会冻结主游戏循环!

它是 C2ME (作者 RelativityMC) 的非官方 Forge 移植版,但针对 Forge 进行了修复和改进。 别装其他的移植版,装这个就对了!

Patreon

它的作用

  • 跨多个线程生成区块,而非仅靠单线程(根据 CPU 核心数和内存进行扩展)。
  • 异步区块读取与写入,使自动保存不会拖慢服务器。
  • 将光照更新放在专用线程上。
  • 修复了大量仅在并行运行世界生成时才会出现的原版线程安全问题(结构片段、共享随机数、加权列表等)。
  • 减少了地表规则、NBT 处理和噪声采样中的内存分配。

你能获得多少 TPS/加载速度提升取决于你的 CPU 和世界生成模组,但总体而言,这个模组绝对会让区块加载更快。

与官方 C2ME 的区别

与许多现存的 c2me 移植版不同,此移植版真正针对 Forge 环境修复并改进了原版模组!

  • 不再丢失 Forge 区块数据: 原版 c2me 的异步保存路径只是原版的复制,忽略了 Forge 的 ChunkDataEvent.Save 事件。任何保存区块数据的模组都会在每次保存时丢失数据。fastchunkgen 会在主服务器线程上正确触发该事件。
  • 修复方块实体保存: 方块实体现在在主服务器线程上进行序列化。上游在线程外调用 saveWithFullMetadata(),导致与 Forge 能力系统出现竞争条件和数据损坏。区块 section、高度图、调色板和结构仍然保持异步。
  • 延迟 ChunkDataEvent.Load 事件: 现在该事件在服务器线程上、区块生效之前执行。
  • 修复无限循环错误: 修复了世界生成中的异常可能使工作线程陷入无限循环的错误。
  • 修复调度器死锁: 修复了单个异常会永久冻结所有区块调度的问题。
  • 修复锁泄漏: 当生成任务抛出错误时(以前会永久破坏该区域),邻接锁不再泄漏。
  • 修复 Ticket 泄漏: 线程外的区块请求在失败时会清理其 ticket,不再泄漏内存。
  • 更好的服务器关闭: 专用服务器不再立即执行 System.exit(0),因此你的退出代码和关闭日志得以保留。如果发生挂起,30 秒的看门狗仍会强制退出。
  • 正确的日志记录: 所有日志都通过带有模组名称的 SLF4J 记录,而不是将原始堆栈跟踪信息刷屏到 stderr。

特意未移植客户端模块或不相关的模块:无 tick 视距、客户端视距解锁、服务器实用命令以及原生数学库。

兼容性

已与 480+ 个模组一同测试。生成了 5000+ 个区块并游玩,零问题!

Fastchunkgen 还会在启动时检查已安装的模组以自动解决冲突:

  • ModernFix: 两个模组都优化了相同的三个地表规则和方块规则方法。FastChunkGen 的版本优先!如果你希望 ModernFix 来处理这些,请设置 generalOptimizations.overrideModernFixWorldGenAllocations = false。关于 proto chunks,关闭它以获得更快的区块生成速度。
  • Radium / Lithium / Canary: 如果安装了这些模组中的任何一个,我们重复的 NBT 复制补丁和区块优先级补丁会自动禁用。
  • ThreadTweak, FastNoise, FerriteCore: 没有重叠的方法,开箱即用,效果良好。

安装前请注意!

备份你的世界。 上游 C2ME 仍是 alpha 级技术,任何重写区块保存的模组都值得你先备份一下以防万一。

配置

配置文件在首次启动时生成于 config/fastchunkgen.toml。每个选项都有独立的开关,默认值设置为字符串 "default"。将其替换为实际值以进行覆盖。

高风险选项默认关闭:

  • ioSystem.gcFreeChunkSerializer - 无分配的区块写入器,但无法触发 ChunkDataEvent.Save 事件。启用后,模组会丢失每个区块的数据。
  • ioSystem.recoverFromErrors - 自动重新生成损坏的区块而不是崩溃,但会摧毁那里的任何建筑。
  • fixes.enforceSafeWorldRandomAccess - 对不安全的线程外世界随机访问进行硬崩溃,而不是仅仅记录警告。适用于查找有问题的世界生成模组。

致谢

C2ME 由 RelativityMC 和 ishland 开发(MIT 许可证)。Forge 移植基础来自 sj-hub9796/c2meF。均使用 MIT 许可证。

嗯……这是我最后一个归档项目了。自由的感觉真好.. ^_^