Skip to content

v1.7.6 - c2me 兼容性修复 / c2me Compatibility Fix

Choose a tag to compare

@OLKMO OLKMO released this 29 Jul 18:16

v1.7.6 - c2me 兼容性修复 / c2me Compatibility Fix

修复 fucksable 的 async-save 修复项与 c2me 的 preventAsyncEntityUnload mixin 冲突问题。

Fixed conflict between fucksable's async-save fix and c2me's preventAsyncEntityUnload mixin.

问题 / Issue

fucksable 把 SubLevelHoldingChunkMap.saveAll 整体放到异步 IO 线程执行,异步线程执行 processUnloadsremoveSubLevelremoveEntity 时,c2me 检测到异步线程调用 ChunkMap.removeEntity 并抛出 ConcurrentModificationException: Async entity unload,导致 sub-level 保存流程中断。

fucksable ran saveAll entirely on async IO thread; when the async thread called processUnloadsremoveSubLevelremoveEntity, c2me detected async ChunkMap.removeEntity call and threw ConcurrentModificationException: Async entity unload, interrupting the sub-level save flow.

修复 / Fix

检测 c2me 存在时,saveAll 在主线程执行(unload 部分不触发 c2me 冲突),但磁盘 IO(attemptSaveSubLevelattemptSaveHoldingChunk)提交到异步 IO 线程执行,saveAll 返回前等待所有异步磁盘 IO 完成。

When c2me is present, saveAll runs on main thread (unload does not trigger c2me conflict), but disk IO (attemptSaveSubLevel, attemptSaveHoldingChunk) is submitted to async IO thread; saveAll waits for all async disk IO to complete before returning.

c2me 不存在时行为不变(saveAll 整体在异步 IO 线程执行)。

Behavior unchanged when c2me is absent (saveAll runs entirely on async IO thread).

兼容性 / Compatibility

  • Sable 1.x 和 2.x / Sable 1.x and 2.x
  • NeoForge 1.21.1
  • Mohist/Youer 混合服务端 / Mohist/Youer hybrid servers
  • c2me(Concurrent Chunk Management Engine)兼容 / c2me compatible