Skip to content

fix(material): 补齐矿石材质粉尘形态与缺失的矿脉引用 - #158

Open
mmyddd wants to merge 1 commit into
devfrom
fix/139-material-ore-cleanup
Open

mmyddd wants to merge 1 commit into
devfrom
fix/139-material-ore-cleanup

Conversation

@mmyddd

@mmyddd mmyddd commented Oct 17, 2026 •

Copy link
Copy Markdown
Member

Closes #139

问题

  1. CTNHMaterials.java 里 13 个矿石材质(MeteoricTroilite、Cerite、GadoliniteSm、Sperrylite、Wolframite、Germanite、Bismuthinite、Yttrofluorite、Tarkianite、Crocoite、Smithsonite、Roquesite、Rheniite)只写了 .ore(),没有 .dust(),而配方/处理链是按 dust 前缀消费它们的。
  2. TwilightForestOres.java 里 8 个暮色材质(SteelLeaf、SpiritAsh、ToxicSwampAmber、IllusionIron、PolarIceCore、Dragonflame、EclipseShadow、LightningPattern)注册了 .ore(),却没有任何矿脉引用。
  3. AdAstraOres.java 的 SHELDONITE_VEIN_MOON 权重 3 主力层写成 GTMaterials.Bornite,而全仓不存在 Sheldonite 材质。
  4. CTNHMaterials.java 的 Holystone 挂了 DECOMPOSITION_BY_CENTRIFUGING,但没有 element/components。
  5. CTNHMaterials.java:999 与 GTMaterialAddon.java:54 把 Calcium 同时做成「金属锭」和「只有气相流体」。

原因

  • 分解配方在没有 DUST 时会退化成取物料流体:DecompositionRecipeHandler.java:116-120 的判断是 if (hasDust) builder.inputItems(dust, material, totalInputAmount); else builder.inputFluids(material.getFluid(1000));。13 个材质里除 Wolframite/Tarkianite/Rheniite 带 DISABLE_DECOMPOSITION 外都会走到 else 分支,而它们没有 FLUID 属性,Material#getFluid() 会抛 IllegalArgumentException。补上 .dust() 后它们才能正常进入分解/离心链(GTRecipes.java:51-66 会遍历所有已注册材质调用 DecompositionRecipeHandler.run)。
  • 暮色 8 个材质的问题不是「忘了注册矿脉」,而是被注释掉的 .layer(...) 写在 buildLayerPattern(pattern -> pattern …) 的闭合括号之后,本来就不在 pattern 链上,注释掉等于完全不生效。
  • GTMaterials.Cooperite 的显示名(langValue)就是 Sheldonite(GregTech-Modern/.../FirstDegreeMaterials.java:191-197),DefaultRecipes.java 里「谢尔顿矿粉电解」用的也正是 Cooperite 粉尘,所以主力层应该是 Cooperite 而不是 Bornite。
  • Holystone 没有 components 时 DecompositionRecipeHandler.java:37 会直接 return,flag 只是死配置。
  • MaterialRecipeHandler.java:338-340 用主流体生成 solidify_calcium_to_ingot,而钙在本包里只有气相,补 INGOT 等于让气态钙凝固成锭。

修改

  • registry/material/CTNHMaterials.java:13 个材质补 .dust();Holystone 去掉 DECOMPOSITION_BY_CENTRIFUGING。
  • registry/material/GTMaterialAddon.java:删掉 Calcium 的 PropertyKey.INGOT,保留粉尘 + 气相(气相供 DefaultRecipes 里锎 + 钙聚变出气奥)。
  • registry/ores/TwilightForestOres.java:8 个特色层从注释里恢复并接进对应的 layer pattern(雷纹矿脉只挂 LightningPattern,幽影层已属于幽影矿脉,避免重复)。
  • registry/ores/AdAstraOres.java:SHELDONITE_VEIN_MOON 主力层 Bornite → Cooperite,并去掉重复的次级 Cooperite 层。

验证

  • ./gradlew :modules:CTNH-Core:compileJava :modules:CTNH-Core:spotlessCheck --offline BUILD SUCCESSFUL。
  • git diff --stat 为 4 个文件、+29/-33;13 处 .dust().ore();8 个暮色材质现在各自恰好有 1 条生效的 .layer(...)。
  • GT/worldgen 结果未做游戏内实测:矿脉分布需要在运行中的服务端实际开图确认,粉尘/分解配方属于运行时生成,本仓库不会产出 JSON 证据。

@illuciaz23

Copy link
Copy Markdown
Collaborator

找写这些矿脉和材料的的人讨论一下。格式也注意一下(链式调用不要挤在一行),不要写无意义的注释

- 13 个只注册 .ore() 的材质补上 .dust():GTCEu 的分解处理在没有 DUST 时会去掉用
  物料流体(DecompositionRecipeHandler:116),而这些材质没有 FLUID 属性,
  Material#getFluid 会直接抛异常,等于矿石既不能离心也不能电解
- Holystone 去掉恒不生效的 DECOMPOSITION_BY_CENTRIFUGING:没有 element/components
  时 DecompositionRecipeHandler:37 直接 return,该 flag 只会留下一条永不生成的死配置
- Calcium 去掉 INGOT 属性:本包里钙只有粉尘与气相(气相供锎+钙聚变出气奥),
  补上 INGOT 会让 GTCEu 按主流体生成 solidify_calcium_to_ingot,变成气态钙凝固成锭
- 暮色森林 8 个矿脉把被注释掉的特色层真正接进 layer pattern:原写法把 .layer 放在
  buildLayerPattern 之外,注释掉就等于材质没有任何矿脉引用
- 月球谢尔顿矿脉主力层由 Bornite 改为 Cooperite(GTCEu 中 Cooperite 的显示名正是
  Sheldonite),同时去掉改动后重复的次级 Cooperite 层
@mmyddd
mmyddd force-pushed the fix/139-material-ore-cleanup branch from eb2ec69 to a18518e Compare October 17, 2026 10:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

材质只挂 ore 不挂 dust / 注册了却不在任何矿脉里

2 participants