Releases: unknowbug/CoreSwap
Release list
coreswap 1.20.1-1.0.18
1.0.18 — 修复 spawn 崩溃(VEH vs JVM 冲突)+ SearchTree 平局对齐
崩溃修复(用户 0x34001 根因)
AddVectoredExceptionHandler(崩溃日志 VEH 实现)干扰 JVM 硬件异常处理:JIT null-check / GC guard page 均为 SEH 预期异常,VEH 先执行 StackWalk64/打印重活 → Server thread 堆损坏崩溃- 修复:JVM 进程(jvm.dll 已加载)不装 VEH,JVM 自带 hs_err(含 native 栈 dll 偏移)兜底
其他修复
- biome 判定平局 tie-break 对齐 vanilla(MultiNoiseUtil.SearchTree 移植;MSVC long=32 位截断 INT64_MAX 根因修复)——8576 99.9993% → 99.9994%
- build.gradle dll 同步源修复(processResources 指向 MC 侧旧 cpp → 打包旧 dll 坑)
- 顺手对齐:aquifer float 常量 / 无效液面判定 / SteepCond heightmap(pillar 写回)
验证
- 8576 99.9994% / 3200 99.9997%(主世界零退化)/ 20000 99.9989% / -288 95.74%(结案基线)
- scan_cpp_anchors invalid=0;jar 内 dll sha 与 build-msvc 一致
部署
替换 mods/ 下 coreswap jar 即可。
coreswap-1.20.1-1.0.17
CoreSwap 1.0.17(内存损坏诊断版)
1.0.16 用户崩溃定位:dll 已验证是最新(sha256 匹配,排除旧缓存)——崩溃=内存损坏
- fillOneChunk 的 memset 调用(0xEFE1)目标被覆盖成堆地址(0x299AA)→ 函数指针被堆越界写
- 崩溃日志现在打印 data[0x34000/1] 的值(对比正常值)
- fillOneChunk 每 chunk 校验 0x34001 vs 基线——一旦被写坏立即打印(定位写坏时机/线程)
Fabric 1.20.1 + Forge(Sinytra Connector),MSVC dll
coreswap-1.20.1-1.0.16
CoreSwap 1.0.16(崩溃日志增强——排查用户固定偏移崩溃)
1.0.15 用户三次崩溃(视距 32/8/8→32)都在 worldgen.dll+0xEFE7(memset 调用附近,读 0x0)
- CaptureStackBackTrace 在 vectored handler 里只剩 5 帧——看不到调用链
- 改 StackWalk64(用异常现场 CONTEXT 回溯)——崩溃日志给完整调用链(函数名+偏移)
- CppBridge.init 打印加载 dll 的路径/size/sha256——验证是否旧缓存(如果用户加载的不是 jar 内最新 dll,sha256 会不同)
Fabric 1.20.1 + Forge(Sinytra Connector,PR #3 兼容),MSVC dll
coreswap-1.20.1-1.0.15
CoreSwap 1.0.15(原生崩溃日志 handler)
新增:dll 崩溃日志自动捕获
- 崩溃时(访问违规等)自动打印:异常类型/地址/寄存器/崩溃指令字节/调用栈(模块偏移+函数名)
- 输出到 MC 的 latest.log + 游戏目录 crash-coreswap-<时间>.txt
- 便于定位崩溃点(之前只有 worldgen.dll+0x1BC40 这类地址)
- C++ 异常也捕获(try-catch 打印)
1.0.14 已含(并发崩溃修复):derivedSplitters 并发写数据竞争(Worker-Main-11 崩溃根因)
兼容性:Fabric 1.20.1 + Forge(通过 Sinytra Connector,PR #3 兼容——CoreSwapFixHelper 多级定位 jar 提取),MSVC dll 已验证
coreswap-1.20.1-1.0.14
CoreSwap 1.0.14(并发崩溃修复)
修复:derivedSplitters 并发写数据竞争(崩溃根因)
- 1.0.13 用户进图后 Worker-Main-11 崩溃(空 std::function 调用 → msvcp140.dll)
- fillOneChunk 被多个 Worker 并发调用,splitterFor 无锁写 mutable std::map → 数据竞争 → map 内部指针损坏
- 加 mutex 保护
1.0.13 已含的修复(heightmap 索引 x/z 交换)
- 3200 100%(无回归)、8576 99.58→99.80%、-288 95.47→95.72%
兼容性:Fabric 1.20.1 + Forge(通过 Sinytra Connector,PR #3 兼容),MSVC dll 已验证
coreswap-1.20.1-1.0.13
CoreSwap 1.0.13(heightmap 修复版)
修复:buildSurface heightmap 索引 x/z 交换错位(真 bug)
- buildSurface 遍历用 heightmap[k16+l](x16+z),但填充是 heightmap[bz16+bx](z16+x)——x/z 交换
- 平坦地形不暴露(3200 保持 100% 无回归),起伏地形错位 → 地表高度取错列 → grass/dirt 层偏移、terracotta 带错位
对齐率提升(block_probe 逐位对比)
- 3200:100%(无回归)
- 8576:99.58% → 99.80%(差块 13679 → 7278)
- -288:95.47% → 95.72%
兼容性:Fabric 1.20.1 + Forge(通过 Sinytra Connector,PR #3 兼容——CoreSwapFixHelper 多级定位 jar 提取),MSVC dll 已验证(dumpbin 导入表 MSVCP140/VCRUNTIME140)
CoreSwap 1.20.1-1.0.12-pre(崩溃修复版)
CoreSwap 1.20.1-1.0.12-pre(崩溃修复版)
修复 1.0.11-pre 的崩溃(32 视距创建世界 99% 崩溃 + 改视距进图崩溃):
根因:CoreSwapPool 的共享任务状态(fn/totalTasks/doneCount)在多 Worker 并发调用
fillBlocks 时互相覆盖——一个批次的 run 结束后把 fn 置空,另一个批次的 worker 线程
读取到空 std::function → 调用空函数 → 读地址 0 崩溃(EXCEPTION_ACCESS_VIOLATION)。
之前测试(block_probe 单批)不触发;MC 32 视距多个 worldgen 线程并发触发。
修复:run 加全局互斥(批次串行化,批次内部仍并行,性能影响小)。
另含 above_preliminary_surface 的 est 扫描修复(Java 语义)。
回归:3200 100%、20000 99.985%、-288 95.71% 无回归。
CoreSwap 1.20.1-1.0.11-pre(块状地形修复测试版)
1.0.11-pre(还原):cache_2d 缓存 key + weird rarity 两个根因修复
CoreSwap 1.20.1-1.0.9
1.0.9(还原):-Dcoreswap.threads 可配 + 发布
CoreSwap 1.20.1-1.0.10
1.0.10(还原):线程池复用 + 模式自适应 + dll 提取崩溃修复