Commit Graph
24 Commits
Author SHA1 Message Date
feldenr fa8c40652b test+feat: depth-slice map validation + tune cave thresholds to target
Add geological depth slices to the automated GameTest: it now samples the
latitude world at three depths and renders one PNG per depth (a top-down
'view' of that Y layer):
  - latitude_map_surface.png  (Y=64)
  - latitude_map_mid_cave.png (Y=-15)
  - latitude_map_deep.png     (Y=-50)
plus a report section per slice and new assertions:
  - Deep Dark must stay rare in the deep zone (<8%)
  - cave biomes (lush/dripstone) must stay a minority in mid-cave (<25%)

Cave biome colors are now distinct (lush=green, dripstone=orange, deep_dark=
teal) so the slices are readable.

Tuned the cave thresholds using the test as a fast feedback loop (BiomeSource-
only sampling, ~30s per run, mods-independent):
  - CAVE_THRESHOLD 0.55 -> 0.38   (lush/dripstone pockets now ~6.5%)
  - DEEP_DARK_THRESHOLD 0.88 -> 0.55 (Deep Dark now legendary ~1.3%; was 0%)

Validated with BOP + Tectonic:
  spawn=birch_forest | north=100% | south=100% | swamp=1.26% |
  deepDark=1.30% | caveBiomes=6.5%
2026-06-16 21:26:32 +02:00
feldenr 060b77b506 feat: rethink cave generation - latitude extends underground, Deep Dark legendary
The previous implementation forced a uniform cave-biome slab (lush/dripstone/
deep_dark) across all of Y<30, which overrode the latitude logic for a huge
volume and made the Deep Dark far too common.

New 3-zone underground model keeps the latitude surface biome as the default
at every depth (mining under a desert feels like the desert) and only carves
rare cave features on top:

- Near surface (Y >= 0): latitude biome as-is, no override.
- Mid caves (-30 <= Y < 0): lush/dripstone pockets (~8%) matching the climate
  (humid/warm bands -> lush, dry/cold bands -> dripstone).
- Deep zone (Y < -30): legendary Deep Dark pockets (~1%, very low-frequency
  noise so they form large rare regions suitable for Ancient Cities); the
  surface latitude biome otherwise.

Deep Dark is removed from the biome band pools and driven solely by its own
noise, restoring it to a rare, legendary discovery. Cave biomes are now
resolved once and declared in possibleBiomes. BiomeBand.underground() removed
(caves are climate-driven, not band-pool-driven).

Validated by GameTest (BOP + Tectonic): spawn=birch_forest | north=100% |
south=100% | swamp=1.26%.
2026-06-16 21:12:17 +02:00
feldenr 45213d3580 fix(test): use tag membership for climate band assertions
With Biomes O' Plenty installed, the FROZEN/HOT bands are filled with BOP
cold/hot biomes which the previous hardcoded vanilla-only assertion sets
did not include, causing a false failure (FROZEN measured 31% vs real ~100%).

Assertions now resolve the surface tags from the real registry and check
membership, so vanilla + BOP biomes are both counted. Adds a per-band
breakdown to the report for easier diagnostics.

Validated with Create + JEI + Biomes O' Plenty + Tectonic + deps:
  spawn=birch_forest | north=100% | south=100% | swamp=1.26%
2026-06-15 23:10:24 +02:00
feldenr 169a447f7b test: add automated latitude validation via GameTest server
Run `./gradlew runGameTestServer` to validate the latitude biome system
without manual in-game testing. Boots a headless game server (full biome
registry), samples a 32000x32000 grid through LatitudeBiomeSource, renders a
PNG map and writes a distribution report, then asserts climate invariants:
  - spawn on a safe biome (plains/forest)
  - FROZEN band dominated by cold/frozen biomes (>60%)
  - HOT band dominated by warm/hot biomes (>60%)
  - swamp remains rare in the temperate band (<15%)

Outputs land in run/gametest-results/latitude/ (latitude_map.png +
latitude_report.txt). Sampling is BiomeSource-only (no chunk generation),
so it runs in ~35s regardless of installed mods.

- LatitudeGameTest: @GameTestHolder + @PrefixGameTestTemplate(false)
- structure/empty_1x1.nbt: minimal 1x1x1 air structure required by GameTest
- build.gradle: add gameTestServer run configuration
2026-06-15 21:07:43 +02:00
feldenr 7729eeb65c feat: latitude biome system with two world types + map validation command
Add a latitude-based world generation system: biomes are distributed by Z
coordinate (frozen north -> temperate equator -> hot south) with extremely
large biomes on a continental scale, plus full Biomes O' Plenty support.

World types (selectable in the world creation 'World Type' button):
- Ultra Wide Biome: latitude biomes + vanilla terrain (immune to Tectonic
  via a private noise_settings copy under custom_ore_gen).
- Tectonic Ultra Wide Biome: latitude biomes + minecraft:overworld terrain
  (uses Tectonic when present, vanilla otherwise).

Core implementation:
- LatitudeBiomeSource: custom BiomeSource distributing biomes by latitude.
  Temperature derived from Z with a boundary wobble, dual-octave selector
  noise for a flat biome distribution (no biome dominates), land/ocean mask,
  underground cave layer, moisture-driven rare swamp/mangrove pockets, and a
  guaranteed safe spawn zone (plains/forests) around the origin.
- BiomeBand: 5 climate bands (FROZEN/COLD/TEMPERATE/WARM/HOT) with vanilla
  surface pools + dedicated climate tags (latitude_*_surface) for optional
  BOP biomes via required:false, plus ocean and underground pools.
- WorldGenRegistration: DeferredRegister for the 'custom_ore_gen:latitude'
  BiomeSource codec.
- LatitudeSpawnHandler: pins spawn to a plains/forest biome on overworld load.

Validation:
- /latitude map [radius] [step]: samples the LatitudeBiomeSource on a large
  grid, renders a top-down PNG map (run/latitude/latitude_map.png) and writes
  a per-band distribution + invariant report (run/latitude/latitude_report.txt).

Constants tuned for a continental scale:
  TEMPERATURE_SCALE = 16000 (equator->pole)
  SURFACE_SELECTOR_SCALE = 0.00033 (biomes ~3000 blocks wide)

Swamp fix: removed from the common temperate surface tag and made rare
(~8% of temperate land via moisture noise), matching vanilla humidity biomes.
2026-06-14 22:59:09 +02:00
feldenr 74480d9d2c feat: replace event-based drops with Global Loot Modifier (fix Create drill crash)
- Add CustomOreLootModifier (Global Loot Modifier) handling all ore drops,
  ensuring compatibility with machines (Create drill/contraptions) and avoiding
  duplication. Handles silk touch (vanilla block / shard diamond block) and
  fortune via config-driven min/max drops.
- Register GLM serializer via DeferredRegister in CustomOreGenMod (user code block)
- Rewrite OreBreakEventHandler: remove direct drops mutation that caused
  UnsupportedOperationException on immutable list when broken by Create drill.
  Drops are now fully GLM-driven; handler only triggers XP/procedure logic.
- Migrate loot tables from loot_table/ (singular, 1.20) to loot_tables/
  (plural, NeoForge 1.21 format) for all 16 ore blocks.
- Declare GLM in data/neoforge/loot_modifiers/global_loot_modifiers.json
- Add Create crushing + milling recipes for diamond -> diamond shards
- Config tweaks: tool durabilities (pickaxe/axe/shovel 450, paxel 800),
  Pure Golden Ore maxHeight 256 -> 320
- Refresh shard diamond armor/item textures
- Simplify unit tests for new drop system
2026-06-14 11:08:59 +02:00
feldenrandClaude 3ef6f03244 fix: make ore generation biome-specific and add command permissions
- Replace overworld-wide ore spawning with biome-specific generation
- Delete add_custom_ores.json that caused ores to spawn everywhere
- Create 6 biome-specific modifiers:
  * add_cold_biomes_ores.json - Lapis, concentrated diamond
  * add_hot_biomes_ores.json - Pure gold, copper, redstone
  * add_mountain_biomes_ores.json - High emerald
  * add_rare_biomes_ores.json - Lower emerald
  * add_tempered_biomes_ores.json - Iron, concentrated coal
  * add_shard_diamond_ores.json - Shard diamond (all biomes)
- Add permission level 2 requirement to /ores and /ore commands

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
2026-02-03 14:06:50 +01:00
feldenr 93bb4afb97 refactor: cleanup block classes and migrate tests to NeoForge
- Removed onDestroyedByPlayer from blocks (now handled by OreBreakEventHandler)
- Updated tests to use NeoForge classes (ModConfigSpec instead of ForgeConfigSpec)
- Fixed EnchantabilityFix annotation and commented out placeholder code
- Updated pack.mcmeta format for 1.21.1
2026-02-02 23:21:11 +01:00
feldenr 0fa495474b fix: register config and update recipe formats for 1.21.1
- Registered ModConfigs.SPEC in CustomOreGenMod to avoid IllegalStateException
- Updated all recipe JSONs to use 'id' instead of 'item' in result fields
- Renamed mekanism recipes folder to match 1.21.1 conventions
2026-02-02 23:20:17 +01:00
feldenr bca6034dd7 fix: restore ore drops and make them configurable via procedure
- Renamed data folders to 1.21.1 standards (singular names)
- Implemented OreBreakEventHandler to call ConfigurableOreDropsProcedure
- Updated procedure and config to handle all custom and variant ores
- Modified loot tables to only handle Silk Touch (manual drops via procedure)
- Fixed missing drops issue caused by folder name mismatch in 1.21.1
2026-02-02 23:11:42 +01:00
feldenr 4b9a4b0a05 Fix custom ore drops and tool enchantability for 1.21 2026-02-02 22:24:52 +01:00
feldenr 1030689b64 v2.1.12: Fix Ore Gen, Optional BOP Tags, Add Create Millstone Recipe 2026-02-01 00:43:06 +01:00
feldenr 734f89a720 feat: Add FR translation and Mekanism/Create compatibility + Bump version to 2.1.8 2026-01-23 14:27:15 +01:00
feldenr d64792d3d3 feat: Version 2.1.7 - Mekanism Compatibility & Ore Rebalance
- Added Forge tags (forge:ores/*) for all ores

- Added Shik Mekanism Enrichment recipe for Shard Diamond

- Rebalanced Lapis (0-32, 2x) and Diamond (Deepslate 6x) to match Vanilla

- Reduced Shard Diamond vein sizes for rarity

- Updated Biome Scanner & /ores to display Y-levels

- Fixed Shard Diamond Boots crafting recipe
2026-01-22 22:20:48 +01:00
feldenrandClaude 8699a36294 Rename Concentrated Diamond Ore to Deepslate Diamond Ore
- Renamed ConcentrateddiamondoreBlock to DeepslatediamondoreBlock
- Updated registry references (CONCENTRATEDDIAMONDORE → DEEPSLATEDIAMONDORE)
- Renamed all JSON resource files
- Updated display name: "Concentrated diamond ore" → "Deepslate diamond ore"
- Updated minecraft tags and biome modifiers

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
2026-01-14 13:31:36 +01:00
feldenrandClaude 0d3805f654 Version 2.1.6 - Bug fixes and recipe improvements
- Fixed paxel recipe: now requires 1 pickaxe + 1 shovel + 1 axe + 2 sticks
- Fixed silk touch on Concentrated Diamond Ore: now drops vanilla diamond_ore
- Fixed Copper High Ore sound: changed from GRAVEL to STONE
- Added Sculk Catalyst recipe: 4 Diamond Shards + 4 Soul Sand + 1 Soul Soil
- Fixed Ore Biome Finder recipe: moved from recipe/ to recipes/ folder

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
2026-01-07 17:44:37 +01:00
feldenrandClaude 613d679525 Add Sculk Catalyst recipe with Diamond Shards
- Added alternative recipe to craft Sculk Catalyst
- Recipe: 4 Diamond Shards + 4 Soul Sand + 1 Soul Soil
- Provides a way to craft Sculk Catalyst without Sculk Sensor

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
2026-01-07 17:28:36 +01:00
feldenrandClaude 140b1f9111 Version 2.1.6 - Bug fixes
- Fixed paxel recipe: now requires 1 pickaxe + 2 sticks (instead of 3 pickaxes)
- Fixed silk touch on Concentrated Diamond Ore: now drops vanilla diamond_ore
- Fixed Copper High Ore sound: changed from GRAVEL to STONE

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
2026-01-07 17:09:36 +01:00
feldenrandClaude 93cfa0dfe3 Mise à jour README.md version 2.1.5
- Documentation de la dépendance obligatoire KubeJS
- Création automatique du script de suppression des minerais vanilla
- Nouvel onglet créatif personnalisé
- Changelog complet de la version 2.1.5
- Architecture mise à jour avec KubeJSIntegration et ShardDiamondArmorMaterial

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
2026-01-07 14:18:04 +01:00
feldenrandClaude 11d596b788 Version 2.1.5 - Major update with armor, creative tab, KubeJS integration
Features:
- Added Diamond Shard armor set (helmet, chestplate, leggings, boots)
- Added Diamond Shard tools (pickaxe, shovel, axe, paxel)
- Created custom creative tab "Custom Ore Gen" with all mod items
- Fixed armor texture loading with proper ArmorMaterial implementation
- Updated diamond shard item texture to 32x32
- Fixed diamond shard ore textures (swapped surface/deepslate)
- Disabled surface diamond shard ore generation (only deepslate remains)
- Added KubeJS as mandatory dependency
- Auto-create KubeJS startup script to remove vanilla ores

Technical changes:
- Created ShardDiamondArmorMaterial class with proper getName() format
- Created KubeJSIntegration class for automatic script creation
- Updated mods.toml with KubeJS dependency and version 2.1.5
- Removed ModArmorMaterials enum (replaced by class-based approach)
- Updated CreativeTab to include all mod items in custom tab

Textures:
- New armor textures from new_armor folder
- New diamond shard item texture
- Fixed armor layer textures for proper rendering

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
2026-01-07 13:52:01 +01:00
feldenr 3f199c1bdf Creation d'un menu dans le creatif, Rework image de l'ore du Diamond shard et de l'items 2026-01-07 12:51:24 +01:00
feldenrandClaude 1876805803 Fix armor textures and implement new armor material system
- Created ShardDiamondArmorMaterial class with proper getName() returning "custom_ore_gen:shard_diamond"
- Updated all armor items to use the new material instance
- Added new armor textures from new_armor folder
- Fixed armor texture loading by using correct modid:name format in getName()
- Added CLAUDE.md for project documentation
- Added armor crafting recipes

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
2026-01-07 11:24:12 +01:00
feldenrandClaude 919980cb34 Version 2.0.8 - Correction armure et craft paxel
- Correction bug texture armure Diamond Shard (renommage textures layer_1/layer_2)
- Correction craft paxel (remplacement espace par lettre T pour stick)
- Correction compilation SharddiamondpaxelItem (getTier().getSpeed())
- Mise à jour version 2.0.6 -> 2.0.8

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
2026-01-05 21:44:03 +01:00
feldenr e388fb6ad1 Changement global + ajout item et commande 2026-01-04 22:08:42 +01:00