Skip to content

CoreSwap 跳过自定义维度 surface_rule → mod 自定义维度世界生成被破坏(裸石) #24

Description

@XuanZhiYouXuan2025

问题

CoreSwap 会取消原版 NoiseBasedChunkGenerator.buildSurface,导致依赖它应用自身 surface_rule 的 mod 自定义维度永远不会铺上地表规则,只剩 default_block(石头)。后果:这些维度新生成区块地表为裸石,且树/植被也种不出来(需要草/土表面)。

环境

  • Minecraft 1.20.1,Forge 47.4.21(CoreSwap 为 Fabric mod,经 Sinytra Connector 加载)
  • coreswap-1.20.1-1.0.24.jar(replace mode 生效)
  • 受影响 mod:chaospersists(Chaos Persists / OreSpawn 1.20.1-0.3.0)自定义维度(chaospersists:utopia/village 等)

根因(已定位到字节码)

coreswap.mixins.jsonwg.bench.mixin.NoiseChunkGeneratorMixin 注入到 NoiseBasedChunkGenerator

  • wgPopulateNoise(注入 populateNoise,cancellable):if !CppBridge.enabled return;否则 fillChunk(...) 原生填块 + setReturnValue取消原版 populateNoise
  • wgBuildSurface(注入 buildSurface):if !CppBridge.enabled return;否则 ci.cancel()取消原版 buildSurface

即一旦 CppBridge.enabled,CoreSwap 就取消原版 buildSurface,改用其原生 surface。而其 worldgen-data/ 仅含原版内容(65 个原版 biome、原版 noise/density/surface),不识别 mod 的 surface_rule/自定义 biome

矿石菌种自定义维度 = 自定义生成器 chaospersists:plains_terrainChaosPlainsChunkGenerator),它包裹一个 minecraft:noise 内层生成器并把 buildSurface 委托给内层。内层是 NoiseBasedChunkGenerator → 被 wgBuildSurface 取消 → 其 surface_rule(草皮)永不执行 → 地表只剩石头。

日志:[BenchMod] CoreSwap replace mode: C++ worldgen active[CppBridge] init ... enabled=true[Mixin] buildSurface skipped chunk(...)

现象(实测)

  • chaospersists:utopia 新生成区块顶部以 minecraft:stone 为主(抽样 6 块 174–252/256 列),草方块 0–6 列,0 原木/0 树叶/0 水晶树。
  • 移除 CoreSwap 后重新生成 → 地表即为草方块(可作对照)。

影响范围

任何「依赖 NoiseBasedChunkGenerator.buildSurface 应用自身 surface_rule」的 mod 维度都会受影响:

  • 标准 minecraft:noise 生成器 + 自定义 noise_settings/surface_rule 的维度;
  • 自定义 chunk 生成器包裹 minecraft:noise 并委托 buildSurface 的维度(如本 mod);
  • 非原版 biome(CoreSwap 的 biome 参数表只有原版,不识别自定义 biome)。

(该整合包里的 aether / twilightforest / tofucraft / grising planet_x / sweet_calamity 等自定义维度同样受影响。)

建议(按优先级)

  1. 识别并跳过非原版维度:维度若用了非标准生成器(自定义 codec / 非 vanilla generator)、或 noise_settings/surface_rule/biome 非原版 → 禁用原生、回退到原版(Java)世界生成,并打印「跳过非原版维度 xxx」。
  2. 按维度排除的配置:提供黑/白名单(如 dimension_ids = ["minecraft:overworld","minecraft:the_nether","minecraft:the_end"]),名单外维度不接管。
  3. 至少:不要无条件取消原版 buildSurface;当 generator / surface_rule 非标准时放行原版。

期望

  • 原版/标准维度:CoreSwap 原生加速(保留其价值)。
  • mod 自定义维度:交回原版管线 → 正确铺草皮/树/结构,不被破坏。

(如需复现,可用上述 chaospersists + coreswap 组合,进该维度生成一块看地表;移除 CoreSwap 后即为草方块。)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:worldgen世界生成:地形/结构/生物群系triage:ackedAI 分诊:信息齐全,待人工确认triage:fixed已修复,待发版验证与报告者复测

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions