Skip to content

Add Ex Nihilo Creatio integration - #15

Open
MrKono wants to merge 17 commits into
masterfrom
kono/addExNihiloCreatioIntegration
Open

Add Ex Nihilo Creatio integration#15
MrKono wants to merge 17 commits into
masterfrom
kono/addExNihiloCreatioIntegration

Conversation

@MrKono

@MrKono MrKono commented Aug 4, 2026

Copy link
Copy Markdown
Member
  • add crook
  • add hammering compatibility
  • add sieving compatibility (will be removed)

Summary by CodeRabbit

  • New Features
    • Added Ex Nihilo: Creatio integration with GT-style crooks and GregTech hard-hammer compatibility.
    • Added Steam and Electric Sieves with crafting recipes and JEI support.
    • Added configurable sieve drops, including pebbles and GregTech-material ore chunks.
    • Added four throwable pebble variants and visual support for ore chunk variants.
  • Documentation
    • Added setup, configuration, compatibility, credits, and v1.5.0 release information.
  • Chores
    • Added required integration support and licensing information.

@MrKono
MrKono requested a review from tier940 August 4, 2026 14:07
builder.outputs(siftable.getDrop().getItemStack());
} else {
builder.chancedOutput(siftable.getDrop().getItemStack(),
(int) (siftable.getChance() * 10000), 500);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[要対応] chance が 0 に丸められるとロード時クラッシュの可能性があります。

register() は Ex Nihilo の SieveRegistry 全体(config で追加した分だけでなく、Ex Nihilo 本体や他 MOD が登録した siftable すべて)をミラーします。そのうち確率が 0.01%(0.0001)未満 のドロップがあると、(int)(siftable.getChance() * 10000)0 に丸められます。

GTCEu の RecipeBuilder.chancedOutputchance <= 0 を渡すと recipeStatus = INVALID をセットし、これが RecipeMap.setFoundInvalidRecipe(true) まで伝播して、通常環境(ignoreErrorOrInvalidRecipes = false)では最終的に LoaderException でロードが中断されます(=ハードクラッシュ)。破棄されるのは該当ドロップだけでなく レシピ1件まるごと です。

同梱 config のデフォルト値は最小 0.0004(→4)なので config 経由では発火しませんが、ミラー対象の確率はランタイムのレジストリ内容に依存するため潜在的です。0.01% 未満の確率を持つ MOD/パックと組み合わせると発火します。

Suggested change
(int) (siftable.getChance() * 10000), 500);
builder.chancedOutput(siftable.getDrop().getItemStack(),
Math.max(1, (int) (siftable.getChance() * 10000)), 500);

(丸めて 0 になるドロップは登録せず continue でスキップする方針でも構いません。)

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if (siftable.getChance() <= 0) continue;を追加しました

'R', new UnificationEntry(OrePrefix.stick, Materials.Wood));

ModHandler.removeRecipeByOutput(Mods.ExNihilo.getItem("crook_iron"));
ModHandler.addShapedRecipe("crook_diamond", ExNihiloToolsItems.CROOK.get(Materials.Iron),

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[要対応] replaceCrook=true のときレシピ登録名が衝突します(この行は typo で "crook_iron" が正しい)。

registerRecipes()ループ(L19-24)→ replaceCrooks()(L26-28)の順 で実行されます。replaceCrook=true だと crooks() のガード !replaceCrook && ...(L32-33)が早期 return しないため、ループが先に crook_ironcrook_diamond(どちらも出力は CROOK.get(material))を登録します。

GTCEu の ModHandler.addShapedRecipe同名 regName を先勝ちで扱い、後続の登録は WARN ログ(スタックトレース付き)を出して破棄 します(クラッシュも上書きもしません)。そのため replaceCrooks() 内の

  • この行(Iron を、typo で "crook_diamond" 名で登録)
  • L71-74(Diamond を "crook_diamond" 名で登録)

両方ともループ登録済みの crook_diamond に負けて破棄 されます。

一方 Gold / Wood は PropertyKey.TOOL を持たずループに入らないため、crook_gold(L53-56)と crook_wood(L60-64)だけは意図通り登録されます。

→ 実害: replaceCrook=true のとき Iron/Diamond の置換登録が すべて無駄撃ち+ログスパム(結果はループ版と同一なので見た目は動いてしまう)。この行の typo はその症状です。

修正の方向性(いずれか):

  1. crooks() のガードを見直し、replaceCrook=true のときは Iron/Gold/Diamond をループ側でスキップして、登録名の所有権を replaceCrooks() に渡す。
  2. replaceCrooks() を廃止し、置換ロジックをループ本体に一本化する。
  3. 最低限この行を "crook_iron" に直す(ただし上記の実行順序を直さない限り、依然としてループ版に負けて破棄される点に注意)。

registry.register(drops.getKey().getName(), new ItemInfo(stack.getItem(), stack.getMetadata()),
drop.getChance(), drop.getMeshLevel());
} else {
registry.register(

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[軽微] explicitInput 系がデッドコードで、ロジックが二重管理になっています。

enum に explicitInput フィールドと hasExplicitInput()(L200-202)/ getExplicitInput()(L204-206)を用意しているのに、この L152-159 の分岐はそれらを使わず、SieveDropType.END / NETHERRACK を直接比較して三項演算子で ModBlocks.endstoneCrushed / netherrackCrushed を参照しています。

そのため enum のフィールド/メソッドは未使用のデッドコードになり、「どの入力ブロックを使うか」のロジックが enum 定義側と分岐側の2箇所に分散しています。

提案: この分岐を type.hasExplicitInput() / type.getExplicitInput() を使う形に統一するか、使わないなら enum 側の未使用フィールド・メソッドを削除する。

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

enum側のメソッドを使った場合、動かなくなったためenum側を破棄しました

public static final String ENDER_MACHINES = "enderiomachines";
public static final String ENDER_CONDUITS = "enderioconduits";
public static final String ENDER_AE2_CONDUITS = "enderioconduitsappliedenergistics";
public static final String EX_NIHOLO = "exnihilocreatio";

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nit] 定数名のスペルミス: EX_NIHOLOEX_NIHILO

値は "exnihilocreatio" で正しいので動作には影響ありませんが、NIHILO の綴りが NIHOLO になっています。直す場合は参照側(L47 ExNihilo(Names.EX_NIHOLO))も併せて更新が必要です。

@tier940

tier940 commented Aug 4, 2026

Copy link
Copy Markdown
Member

Ex Nihilo Creatio 連携、丁寧に作られていて良いと思います 👍(モジュール分割・LICENSE 表記・README/CHANGELOG・en/ja 両対応・config 経由の Sieve ドロップ設定・診断用 VeinProbabilityReporter など)。

GTCEu 側のソース(ModHandler / RecipeBuilder / StoneVariantBlock / Materials)を実際に確認したうえで、いくつか指摘を残します。

要対応

  • [1] ExNihiloSieveRecipe: chancedOutput に確率0が渡ると GTCEu 側でレシピ全体が INVALID 破棄 → デフォルト環境でロード時クラッシュの可能性(潜在)。
  • [2] ExNihiloToolRecipe: replaceCrook=true のときレシピ登録名が衝突し、replaceCrooks() の Iron/Diamond 分は破棄される(L67 は typo)。

軽微

  • [3] VeinProbabilityReporter(Overflow) ラベルがラッチする(ログのみ)
  • [4] SieveDrops の static マップ null 化がライフサイクルに脆い
  • [5] SieveDropType.explicitInput 系がデッドコード+ロジック重複
  • [6] Mods.EX_NIHOLO のスペルミス(nit)

確認済みで問題なし: pebble→cobble のマッピングは StoneVariantBlock.StoneType の並び(BLACK_GRANITE, RED_GRANITE, MARBLE, BASALT)と一致しており正しいです。

詳細は各行のコメントに記載しました。

@tier940

tier940 commented Aug 6, 2026

Copy link
Copy Markdown
Member

@coderabbitai full review

@coderabbitai

coderabbitai Bot commented Aug 6, 2026

Copy link
Copy Markdown
✅ Action performed

Full review finished.

@coderabbitai

coderabbitai Bot commented Aug 6, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

Added Ex Nihilo: Creatio integration with configurable sieve drops, GT crooks and hammers, pebble items, steam and electric sieves, recipe conversion, vein probability reporting, documentation, licenses, and client assets.

Changes

Integration contracts and configuration

Layer / File(s) Summary
Build integration and public contracts
.github/workflows/publish.yml, buildscript.properties, dependencies.gradle, src/main/java/com/github/gtexpert/gtmt/api/..., src/main/java/com/github/gtexpert/gtmt/modules/Modules.java
Added Ex Nihilo dependency settings, module identifiers, mod detection, and ore chunk prefixes.
Sieve configuration
src/main/java/com/github/gtexpert/gtmt/integration/exnihilo/ExNihiloConfigHolder.java
Added configurable sieve drops, crook replacement, harder meshes, and vein probability logging.
Documentation and licensing
README.md, DEVELOPER.md, CHANGELOG.md, LICENSE-*
Documented the integration and added release, credit, and license entries.

Module registration and tools

Layer / File(s) Summary
Module lifecycle and event handling
src/main/java/com/github/gtexpert/gtmt/integration/exnihilo/ExNihiloModule.java, ExNihiloEventHandlers.java
Registered Ex Nihilo content, event handlers, sieve defaults, recipes, models, and colors.
Crook and pebble items
src/main/java/com/github/gtexpert/gtmt/integration/exnihilo/tools/*, src/main/java/com/github/gtexpert/gtmt/integration/exnihilo/items/*
Added a GT crook, four pebble variants, pebble throwing, and ore dictionary registration.
JEI and recipe map wiring
src/main/java/com/github/gtexpert/gtmt/integration/jei/ExNihiloJEIPlugin.java, src/main/java/com/github/gtexpert/gtmt/integration/exnihilo/ExNihiloRecipeMaps.java
Added hard-hammer catalysts and the Ex Nihilo sieve recipe map.

Sieve machines and recipes

Layer / File(s) Summary
Sieve machines and interfaces
src/main/java/com/github/gtexpert/gtmt/integration/exnihilo/metatileentities/*
Added bronze and steel steam sieves, tiered electric sieves, inventories, GUIs, progress displays, and output controls.
Crafting and tool recipes
src/main/java/com/github/gtexpert/gtmt/integration/exnihilo/recipes/ExNihiloMiscRecipe.java, ExNihiloToolRecipe.java
Added hammer, crook, mesh, pebble, and sieve machine recipes.
Sieve conversion and drops
src/main/java/com/github/gtexpert/gtmt/integration/exnihilo/recipes/ExNihiloSieveRecipe.java, recipes/sieve/SieveDrops.java
Validated configured drops and converted Ex Nihilo sieve recipes into GregTech recipes.

Vein distribution and reporting

Layer / File(s) Summary
Vein indexing and normalization
src/main/java/com/github/gtexpert/gtmt/integration/exnihilo/recipes/sieve/VeinPathUtils.java, VeinGroupIndex.java
Normalized vein paths and indexed positive-weight veins by group.
Layered material calculation
src/main/java/com/github/gtexpert/gtmt/integration/exnihilo/recipes/sieve/LayeredVeinMaterialDistribution.java
Calculated normalized material distributions for layered ore veins.
Probability reporting
src/main/java/com/github/gtexpert/gtmt/integration/exnihilo/recipes/sieve/VeinProbabilityReporter.java
Reported vein weights, relative probabilities, and suggested sieve chances.

Client assets and localization

Layer / File(s) Summary
Ore chunk and pebble assets
src/main/resources/assets/gregtech/models/item/material_sets/*, src/main/resources/assets/gtmt/blockstates/gtpebble.json
Added generated models and pebble variant mappings.
Localization and crook model
src/main/resources/assets/gtmt/lang/*, src/main/resources/assets/gtmt/models/item/tools/crook.json
Added English and Japanese names, tooltips, recipe-map labels, and the crook model.

Estimated code review effort: 5 (Critical) | ~120 minutes

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 13.75% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes the pull request's primary change: adding Ex Nihilo: Creatio integration.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch kono/addExNihiloCreatioIntegration

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 9

🧹 Nitpick comments (1)
src/main/java/com/github/gtexpert/gtmt/integration/exnihilo/recipes/sieve/VeinProbabilityReporter.java (1)

110-115: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Rename formatPercent to match its output.

The method returns a fraction in the range 0 to 1 with four decimals. It does not multiply by 100 and does not append %. Rename it to formatProbability, or multiply by 100 and append %. Also import java.util.Locale instead of using the fully qualified name, to match the import style in this file.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@src/main/java/com/github/gtexpert/gtmt/integration/exnihilo/recipes/sieve/VeinProbabilityReporter.java`
around lines 110 - 115, The formatPercent method returns a bounded probability
fraction rather than a percentage; rename it to formatProbability and update all
call sites. Replace the fully qualified Locale.ROOT reference with an imported
java.util.Locale, preserving the existing four-decimal formatting and clamping
behavior.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@CHANGELOG.md`:
- Line 2: Correct the changelog heading from “Ex Nihiro: Creatio Integration” to
use the mod name “Ex Nihilo: Creatio,” preserving the existing heading format.

In `@DEVELOPER.md`:
- Line 266: Update the component name in the referenced documentation entry from
“Conveyer” to “Conveyor,” leaving the other abbreviations and descriptions
unchanged.

In
`@src/main/java/com/github/gtexpert/gtmt/integration/exnihilo/ExNihiloEventHandlers.java`:
- Around line 40-43: Update the stack construction in the event handler around
ExNihiloUtil.isContained to create the ItemStack from event.getState() so the
harvested block’s metadata is preserved. Keep the existing containment check and
subsequent drop handling unchanged.

In
`@src/main/java/com/github/gtexpert/gtmt/integration/exnihilo/items/ItemGTMTPebbles.java`:
- Around line 43-44: Validate the ItemStack metadata before indexing
GTPebbles.VALUES or locations in ItemGTMTPebbles.getTranslationKey and the
mesh-definition logic. For metadata outside 0..3, use the established safe
fallback by returning the base translation key and fallback model instead of
accessing either array.

In
`@src/main/java/com/github/gtexpert/gtmt/integration/exnihilo/recipes/ExNihiloSieveRecipe.java`:
- Around line 36-42: Update the siftable-drop handling in ExNihiloSieveRecipe so
getChance() is converted to the integer chance value once before output
selection; skip the drop when that converted value is zero, use it for the
guaranteed-output threshold and chancedOutput call, and retain the existing
behavior for valid nonzero chances.

In
`@src/main/java/com/github/gtexpert/gtmt/integration/exnihilo/recipes/sieve/LayeredVeinMaterialDistribution.java`:
- Around line 133-137: Update the second weighted-entry loop in
LayeredVeinMaterialDistribution to handle nullable values from
weightedEntry.getLeft() before unboxing, using the same null-and-nonpositive
guard as the first loop. Preserve processing only for entries with valid
positive weights.

In
`@src/main/java/com/github/gtexpert/gtmt/integration/exnihilo/recipes/sieve/VeinProbabilityReporter.java`:
- Around line 45-47: Update the average calculation in VeinProbabilityReporter
to use floating-point division for additionalVeinsInSection, computing the
expected count with add / 2.0 rather than integer division. Preserve the
existing min and finalChance logic so fractional averages are reflected in the
reported sieve chances.

In
`@src/main/resources/assets/gregtech/models/item/material_sets/opal/ore_chunk.json`:
- Around line 4-5: Replace the Ruby texture namespace with Opal in both texture
references for all four listed files:
src/main/resources/assets/gregtech/models/item/material_sets/opal/ore_chunk.json
lines 4-5, ore_ender_chunk.json lines 4-5, ore_nether_chunk.json lines 4-5, and
ore_sandy_chunk.json lines 4-5. Preserve each model’s base texture and use the
corresponding standard, Ender, Nether, or Sandy overlay.

In
`@src/main/resources/assets/gregtech/models/item/material_sets/sand/ore_chunk.json`:
- Around line 4-5: Update the texture namespace in all four sand chunk models:
src/main/resources/assets/gregtech/models/item/material_sets/sand/ore_chunk.json
lines 4-5 should reference sand/ore_chunk and sand/ore_chunk_overlay;
ore_ender_chunk.json lines 4-5 should reference sand/ore_chunk and
sand/ore_ender_chunk_overlay; ore_nether_chunk.json lines 4-5 should reference
sand/ore_chunk and sand/ore_nether_chunk_overlay; and ore_sandy_chunk.json lines
4-5 should reference sand/ore_chunk and sand/ore_sandy_chunk_overlay.

---

Nitpick comments:
In
`@src/main/java/com/github/gtexpert/gtmt/integration/exnihilo/recipes/sieve/VeinProbabilityReporter.java`:
- Around line 110-115: The formatPercent method returns a bounded probability
fraction rather than a percentage; rename it to formatProbability and update all
call sites. Replace the fully qualified Locale.ROOT reference with an imported
java.util.Locale, preserving the existing four-decimal formatting and clamping
behavior.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: e6b581c7-7452-4b94-bb45-845d7bb864e4

📥 Commits

Reviewing files that changed from the base of the PR and between 4878ed3 and 1acc435.

⛔ Files ignored due to path filters (82)
  • src/main/resources/assets/gregtech/textures/gui/progress_bar/progress_bar_sift_bronze.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/gui/progress_bar/progress_bar_sift_steel.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/diamond/ore_chunk.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/diamond/ore_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/diamond/ore_ender_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/diamond/ore_nether_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/diamond/ore_sandy_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/dull/ore_chunk.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/dull/ore_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/dull/ore_ender_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/dull/ore_nether_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/dull/ore_sandy_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/emerald/ore_chunk.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/emerald/ore_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/emerald/ore_ender_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/emerald/ore_nether_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/emerald/ore_sandy_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/fine/ore_chunk.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/fine/ore_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/fine/ore_ender_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/fine/ore_nether_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/fine/ore_sandy_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/flint/ore_chunk.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/flint/ore_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/flint/ore_ender_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/flint/ore_nether_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/flint/ore_sandy_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/gem_horizontal/ore_chunk.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/gem_horizontal/ore_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/gem_horizontal/ore_ender_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/gem_horizontal/ore_nether_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/gem_horizontal/ore_sandy_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/gem_vertical/ore_chunk.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/gem_vertical/ore_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/gem_vertical/ore_ender_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/gem_vertical/ore_nether_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/gem_vertical/ore_sandy_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/lapis/ore_chunk.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/lapis/ore_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/lapis/ore_ender_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/lapis/ore_nether_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/lapis/ore_sandy_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/lignite/ore_chunk.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/lignite/ore_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/lignite/ore_ender_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/lignite/ore_nether_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/lignite/ore_sandy_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/metallic/ore_chunk.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/metallic/ore_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/metallic/ore_ender_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/metallic/ore_nether_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/metallic/ore_sandy_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/netherstar/ore_chunk.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/netherstar/ore_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/netherstar/ore_ender_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/netherstar/ore_nether_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/netherstar/ore_sandy_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/quartz/ore_chunk.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/quartz/ore_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/quartz/ore_ender_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/quartz/ore_nether_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/quartz/ore_sandy_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/rough/ore_chunk.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/rough/ore_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/rough/ore_ender_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/rough/ore_nether_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/rough/ore_sandy_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/ruby/ore_chunk.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/ruby/ore_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/ruby/ore_ender_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/ruby/ore_nether_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/ruby/ore_sandy_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/shiny/ore_chunk.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/shiny/ore_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/shiny/ore_ender_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/shiny/ore_nether_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gregtech/textures/items/material_sets/shiny/ore_sandy_chunk_overlay.png is excluded by !**/*.png
  • src/main/resources/assets/gtmt/textures/items/ex_nihilo/basalt_pebble.png is excluded by !**/*.png
  • src/main/resources/assets/gtmt/textures/items/ex_nihilo/black_granite_pebble.png is excluded by !**/*.png
  • src/main/resources/assets/gtmt/textures/items/ex_nihilo/marble_pebble.png is excluded by !**/*.png
  • src/main/resources/assets/gtmt/textures/items/ex_nihilo/red_granite_pebble.png is excluded by !**/*.png
  • src/main/resources/assets/gtmt/textures/items/tools/crook.png is excluded by !**/*.png
📒 Files selected for processing (105)
  • .github/workflows/publish.yml
  • CHANGELOG.md
  • DEVELOPER.md
  • LICENSE-ExNihiloCreatio
  • LICENSE-Gregification
  • README.md
  • buildscript.properties
  • dependencies.gradle
  • src/main/java/com/github/gtexpert/gtmt/api/unification/material/info/GTMTMaterialIconType.java
  • src/main/java/com/github/gtexpert/gtmt/api/unification/material/ore/GTMTOrePrefix.java
  • src/main/java/com/github/gtexpert/gtmt/api/util/Mods.java
  • src/main/java/com/github/gtexpert/gtmt/integration/exnihilo/ExNihiloConfigHolder.java
  • src/main/java/com/github/gtexpert/gtmt/integration/exnihilo/ExNihiloEventHandlers.java
  • src/main/java/com/github/gtexpert/gtmt/integration/exnihilo/ExNihiloModule.java
  • src/main/java/com/github/gtexpert/gtmt/integration/exnihilo/ExNihiloRecipeMaps.java
  • src/main/java/com/github/gtexpert/gtmt/integration/exnihilo/ExNihiloUtil.java
  • src/main/java/com/github/gtexpert/gtmt/integration/exnihilo/items/ExNihiloItems.java
  • src/main/java/com/github/gtexpert/gtmt/integration/exnihilo/items/ItemGTMTPebbles.java
  • src/main/java/com/github/gtexpert/gtmt/integration/exnihilo/metatileentities/ExNihiloMetaTileEntities.java
  • src/main/java/com/github/gtexpert/gtmt/integration/exnihilo/metatileentities/MetaTileEntityElectricSieve.java
  • src/main/java/com/github/gtexpert/gtmt/integration/exnihilo/metatileentities/MetaTileEntitySteamSieve.java
  • src/main/java/com/github/gtexpert/gtmt/integration/exnihilo/metatileentities/SieveRecipeMap.java
  • src/main/java/com/github/gtexpert/gtmt/integration/exnihilo/recipes/ExNihiloMiscRecipe.java
  • src/main/java/com/github/gtexpert/gtmt/integration/exnihilo/recipes/ExNihiloSieveRecipe.java
  • src/main/java/com/github/gtexpert/gtmt/integration/exnihilo/recipes/ExNihiloToolRecipe.java
  • src/main/java/com/github/gtexpert/gtmt/integration/exnihilo/recipes/sieve/LayeredVeinMaterialDistribution.java
  • src/main/java/com/github/gtexpert/gtmt/integration/exnihilo/recipes/sieve/SieveDrops.java
  • src/main/java/com/github/gtexpert/gtmt/integration/exnihilo/recipes/sieve/VeinGroupIndex.java
  • src/main/java/com/github/gtexpert/gtmt/integration/exnihilo/recipes/sieve/VeinPathUtils.java
  • src/main/java/com/github/gtexpert/gtmt/integration/exnihilo/recipes/sieve/VeinProbabilityReporter.java
  • src/main/java/com/github/gtexpert/gtmt/integration/exnihilo/tools/ExNihiloToolsItems.java
  • src/main/java/com/github/gtexpert/gtmt/integration/jei/ExNihiloJEIPlugin.java
  • src/main/java/com/github/gtexpert/gtmt/modules/Modules.java
  • src/main/resources/assets/gregtech/models/item/material_sets/diamond/ore_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/diamond/ore_ender_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/diamond/ore_nether_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/diamond/ore_sandy_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/dull/ore_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/dull/ore_ender_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/dull/ore_nether_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/dull/ore_sandy_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/emerald/ore_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/emerald/ore_ender_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/emerald/ore_nether_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/emerald/ore_sandy_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/fine/ore_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/fine/ore_ender_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/fine/ore_nether_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/fine/ore_sandy_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/flint/ore_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/flint/ore_ender_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/flint/ore_nether_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/flint/ore_sandy_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/gem_horizontal/ore_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/gem_horizontal/ore_ender_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/gem_horizontal/ore_nether_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/gem_horizontal/ore_sandy_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/gem_vertical/ore_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/gem_vertical/ore_ender_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/gem_vertical/ore_nether_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/gem_vertical/ore_sandy_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/lapis/ore_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/lapis/ore_ender_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/lapis/ore_nether_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/lapis/ore_sandy_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/lignite/ore_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/lignite/ore_ender_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/lignite/ore_nether_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/lignite/ore_sandy_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/metallic/ore_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/metallic/ore_ender_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/metallic/ore_nether_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/metallic/ore_sandy_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/netherstar/ore_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/netherstar/ore_ender_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/netherstar/ore_nether_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/netherstar/ore_sandy_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/opal/ore_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/opal/ore_ender_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/opal/ore_nether_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/opal/ore_sandy_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/quartz/ore_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/quartz/ore_ender_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/quartz/ore_nether_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/quartz/ore_sandy_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/rough/ore_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/rough/ore_ender_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/rough/ore_nether_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/rough/ore_sandy_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/ruby/ore_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/ruby/ore_ender_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/ruby/ore_nether_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/ruby/ore_sandy_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/sand/ore_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/sand/ore_ender_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/sand/ore_nether_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/sand/ore_sandy_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/shiny/ore_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/shiny/ore_ender_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/shiny/ore_nether_chunk.json
  • src/main/resources/assets/gregtech/models/item/material_sets/shiny/ore_sandy_chunk.json
  • src/main/resources/assets/gtmt/blockstates/gtpebble.json
  • src/main/resources/assets/gtmt/lang/en_us.lang
  • src/main/resources/assets/gtmt/lang/ja_jp.lang
  • src/main/resources/assets/gtmt/models/item/tools/crook.json

Comment thread CHANGELOG.md
@@ -1,3 +1,17 @@
# v1.5.0
## Ex Nihiro: Creatio Integration

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Correct the integration name.

Line 2 spells the mod name as Ex Nihiro. Use Ex Nihilo: Creatio.

🧰 Tools
🪛 LanguageTool

[grammar] ~2-~2: Ensure spelling is correct
Context: # v1.5.0 ## Ex Nihiro: Creatio Integration - _Crooking Compati...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@CHANGELOG.md` at line 2, Correct the changelog heading from “Ex Nihiro:
Creatio Integration” to use the mod name “Ex Nihilo: Creatio,” preserving the
existing heading format.

Source: Linters/SAST tools

Comment thread DEVELOPER.md
```

- **C** = Circuit (all tier-scaled), **P** = Piston
- **V** = Conveyer, **H** = Hull, **W** = `cableGTSingle` (LV = Tin, MV = Copper, ...)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Correct the component name.

Line 266 uses Conveyer. Use Conveyor.

🧰 Tools
🪛 LanguageTool

[grammar] ~266-~266: Ensure spelling is correct
Context: ... tier-scaled), P = Piston - V = Conveyer, H = Hull, W = cableGTSingle ...

(QB_NEW_EN_ORTHOGRAPHY_ERROR_IDS_1)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@DEVELOPER.md` at line 266, Update the component name in the referenced
documentation entry from “Conveyer” to “Conveyor,” leaving the other
abbreviations and descriptions unchanged.

Source: Linters/SAST tools

Comment on lines +43 to +44
public String getTranslationKey(@Nonnull ItemStack stack) {
return String.format("%s.%s", getTranslationKey(), GTPebbles.VALUES[stack.getItemDamage()].getName());

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

Validate pebble metadata before indexing arrays.

getTranslationKey and the mesh definition index GTPebbles.VALUES and locations with unvalidated metadata. An ItemStack with metadata outside 0..3 crashes tooltip or model rendering.

Normalize invalid metadata to a valid fallback, or return the base translation key and model for invalid values.

Also applies to: 89-96

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@src/main/java/com/github/gtexpert/gtmt/integration/exnihilo/items/ItemGTMTPebbles.java`
around lines 43 - 44, Validate the ItemStack metadata before indexing
GTPebbles.VALUES or locations in ItemGTMTPebbles.getTranslationKey and the
mesh-definition logic. For metadata outside 0..3, use the established safe
fallback by returning the base translation key and fallback model instead of
accessing either array.

Comment on lines +36 to +42
if (siftable.getChance() <= 0) continue;
if (siftable.getMeshLevel() == recipe.getMesh().getMetadata()) {
if ((int) siftable.getChance() * 10000 >= 10000) {
builder.outputs(siftable.getDrop().getItemStack());
} else {
builder.chancedOutput(siftable.getDrop().getItemStack(),
(int) (siftable.getChance() * 10000), 500);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Skip probabilities that underflow during conversion.

The source check allows positive values below 0.0001. Line 42 converts these values to 0 and passes that value to chancedOutput. This invalidates the generated recipe and can stop loading when another mod registers an ultra-low-probability sieve drop.

Convert the chance once, then skip the drop when the converted value is zero.

Proposed fix
-                    if (siftable.getChance() <= 0) continue;
+                    int chance = (int) (siftable.getChance() * 10000);
+                    if (chance <= 0) continue;
                     if (siftable.getMeshLevel() == recipe.getMesh().getMetadata()) {
-                        if ((int) siftable.getChance() * 10000 >= 10000) {
+                        if (chance >= 10000) {
                             builder.outputs(siftable.getDrop().getItemStack());
                         } else {
                             builder.chancedOutput(siftable.getDrop().getItemStack(),
-                                    (int) (siftable.getChance() * 10000), 500);
+                                    chance, 500);
                         }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@src/main/java/com/github/gtexpert/gtmt/integration/exnihilo/recipes/ExNihiloSieveRecipe.java`
around lines 36 - 42, Update the siftable-drop handling in ExNihiloSieveRecipe
so getChance() is converted to the integer chance value once before output
selection; skip the drop when that converted value is zero, use it for the
guaranteed-output threshold and chancedOutput call, and retain the existing
behavior for valid nonzero chances.

Comment on lines +133 to +137
for (Pair<Integer, FillerEntry> weightedEntry : weightedEntries) {
int weight = weightedEntry.getLeft();
if (weight <= 0) {
continue;
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

Guard the null weight consistently in both loops.

Line 124 treats weightedEntry.getLeft() as nullable. Line 134 unboxes the same value into an int without a null check. If a null weight is possible, the second loop throws a NullPointerException. Make both loops use the same guard.

🐛 Proposed fix
             for (Pair<Integer, FillerEntry> weightedEntry : weightedEntries) {
-                int weight = weightedEntry.getLeft();
-                if (weight <= 0) {
+                Integer weight = weightedEntry.getLeft();
+                if (weight == null || weight <= 0) {
                     continue;
                 }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
for (Pair<Integer, FillerEntry> weightedEntry : weightedEntries) {
int weight = weightedEntry.getLeft();
if (weight <= 0) {
continue;
}
for (Pair<Integer, FillerEntry> weightedEntry : weightedEntries) {
Integer weight = weightedEntry.getLeft();
if (weight == null || weight <= 0) {
continue;
}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@src/main/java/com/github/gtexpert/gtmt/integration/exnihilo/recipes/sieve/LayeredVeinMaterialDistribution.java`
around lines 133 - 137, Update the second weighted-entry loop in
LayeredVeinMaterialDistribution to handle nullable values from
weightedEntry.getLeft() before unboxing, using the same null-and-nonpositive
guard as the first loop. Preserve processing only for entries with valid
positive weights.

Comment on lines +45 to +47
int min = ConfigHolder.worldgen.minVeinsInSection;
int add = ConfigHolder.worldgen.additionalVeinsInSection;
int ave = min + add / 2;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Use floating-point arithmetic for the average vein count.

add / 2 is integer division. The expected additional count is add / 2.0. Two effects follow:

  • If min is 0 and add is 1, ave becomes 0. Every suggested sieve chance is then reported as 0.0000.
  • For any odd add, the average is truncated downward, so all suggested chances are understated.
🐛 Proposed fix
         int min = ConfigHolder.worldgen.minVeinsInSection;
         int add = ConfigHolder.worldgen.additionalVeinsInSection;
-        int ave = min + add / 2;
+        double ave = min + add / 2.0;

finalChance at Line 97 is already a double, so no other change is needed.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
int min = ConfigHolder.worldgen.minVeinsInSection;
int add = ConfigHolder.worldgen.additionalVeinsInSection;
int ave = min + add / 2;
int min = ConfigHolder.worldgen.minVeinsInSection;
int add = ConfigHolder.worldgen.additionalVeinsInSection;
double ave = min + add / 2.0;
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@src/main/java/com/github/gtexpert/gtmt/integration/exnihilo/recipes/sieve/VeinProbabilityReporter.java`
around lines 45 - 47, Update the average calculation in VeinProbabilityReporter
to use floating-point division for additionalVeinsInSection, computing the
expected count with add / 2.0 rather than integer division. Preserve the
existing min and finalChance logic so fractional averages are reflected in the
reported sieve chances.

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

Labels

None yet

Development

Successfully merging this pull request may close these issues.

2 participants