feat(worldgen): v4.1 - latitude zones via density function + Lithosphere

- Replace custom LatitudeBiomeSource/BiomeBand system with
  LatitudeSignalDensityFunction + LatitudeZonePlacement (mixin-based)
- Add mandatory Lithosphere (mr_lithosphere) dependency + mixin config
- Override overworld/large_biomes noise_settings for ultra-wide terrain
- Rename remove_vanilla_ores -> z_remove_vanilla_ores (load order)
- Merge cold/hot/tempered biome tags into latitude_*_surface tags
- Rework OresCommand, OreBiomeFinderItem, ModConfigs for new system
- Remove obsolete latitude classes, tests & world preset overrides
- Bump mod_version 3.2 -> 4.1
This commit is contained in:
feldenr
2026-07-20 23:11:16 +02:00
parent e667083853
commit e179baaf25
71 changed files with 6061 additions and 2832 deletions
+85
View File
@@ -0,0 +1,85 @@
# Custom Ore Gen — 4.0 Changelog
**Custom Ore Gen 4.0** is a full rewrite, rebuilt from the ground up for **NeoForge 1.21.1**. It drops KubeJS entirely, introduces a brand-new **latitude-based ore system**, ships custom **ultra-wide terrain** via the Lithosphere companion, and turns the **Deep Dark into a legendary northern feature**.
This is the biggest update in the mod's history. Existing worlds from 2.x are **not** compatible — create a new world.
---
## 🆕 New Features
* **Latitude-based ore generation** — Ores are now distributed by your **Z coordinate** instead of biome categories. The world is split into three bands:
* ❄️ **Cold** (Z < 8000, north): Lapis, Deepslate Diamond
* 🔥 **Hot** (Z > 8000, south): Pure Gold, Redstone, Copper
* 🌳 **Temperate** (middle): Iron, Concentrated Coal
* Works with **any biome mod** out of the box — no per-biome classification needed.
* **Legendary Deep Dark** — The Deep Dark now only generates in cold northern latitudes, making it a true endgame destination rather than a random underground encounter. (Implemented via a safe, targeted mixin.)
* **Custom ultra-wide terrain** — Ships a handcrafted world generation through the new **Lithosphere** companion mod (now a required dependency).
* **Config-gated feature toggles** — A custom `ConfigGatedFeaturesModifier` makes the config feature toggles (`concentratedOres`, `impureOres`, `vanillaOreVariants`, etc.) actually gate world generation at runtime.
* **Global Loot Modifier for drops** — Replaced fragile event-based drops with a proper data-driven loot modifier (also fixed a crash with the Create drill).
* **Color-coded `/ores` command & Ore Biome Finder** — Output is now color-coded per zone (cold = aqua, hot = gold, temperate = green, shard ores = light purple) and clearly explains that the **Z coordinate** determines your zone.
* **Configurable zone thresholds** — The cold/hot thresholds (default Z = ±8000) are now adjustable in `custom-ore-gen-common.toml`.
* **Create & Mekanism compat** — Standalone-safe recipes for crushing, milling, mixing and enriching shard diamonds.
---
## ⚙️ Changes
* **Migrated from Forge 1.20.1 → NeoForge 1.21.1.**
* **Removed KubeJS dependency entirely.** Vanilla ores are now removed via NeoForge **biome modifiers** (`z_remove_vanilla_ores.json`) — no startup scripts, nothing to run.
* **New required dependency: Lithosphere 1.7+** — provides the custom terrain the mod is balanced for.
* Tool & armor stats are now **linked to config** — durability, speed, damage and armor values can all be tuned.
* Emeralds remain **biome-based** (mountain and rare-biome tags), since they're tied to terrain, not latitude.
* Rebalanced ore drop counts and XP to align with vanilla 1.21.
* Iron and Gold ores now **ignore Fortune** like vanilla.
* Paxel now affects every block mineable by pickaxe/shovel/axe tags.
* Rebalanced Diamond Shard tier as a clear bridge between iron and diamond.
---
## 🐛 Bug Fixes
* **Vanilla diamond leaked everywhere** — All **4** vanilla diamond placed features are now removed (`ore_diamond`, `ore_diamond_buried`, `ore_diamond_large`, `ore_diamond_medium`). Previously only 2 were removed, so buried/medium diamonds spawned in every biome.
* **Copper showed the wrong texture in deepslate** — Custom copper now uses the vanilla two-target approach (stone → `copper_ore`, deepslate → `deepslate_copper_ore`) instead of forcing `copper_ore` everywhere.
* **`/ores` always reported temperate** — `zoneName()` was reading static fields instead of the config getters; it now reads the live thresholds.
* **Garbage `6a9` prefix in ore listings** — Removed a broken color-code remnant that appeared in front of every ore name.
* **Diamond rate was way too high in cold zones** — Reduced the custom Deepslate Diamond `count` from 6 → 3 (combined with the vanilla leak fix, diamonds are now properly rare).
* **Server hung on startup** — Removed the `SpawnRelocator` and `OreAuditHandler` entirely. They forced synchronous chunk generation on the main server thread (a known cause of deadlocks and world corruption) and the audit handler shipped a `System.exit(0)` hard-kill. Both were dev-only diagnostics that never belonged in a release.
* **Badlands gold leaked into non-hot zones** — Added `ore_gold_extra` to the vanilla removal list.
* **Cross-climate tag leaks** — Removed copper/gold appearing in temperate spawns due to overlapping surface tags.
* **Caves piercing the surface** — Reverted the stretched terrain that caused cave openings to break the surface.
* **Create processing recipes** — Repaired and made them standalone-safe (no leftover references to removed ores).
* Various startup crashes, build errors and config-load race conditions resolved.
---
## 🗑️ Removals
* **KubeJS** — no longer used or required.
* Auto-generated `kubejs/startup_scripts/custom_ore_gen_remove_vanilla_ores.js` — replaced by biome modifiers.
* Dead config categories, unused `EnchantabilityFix` class, and redundant `tectonic`/custom noise settings.
* Legacy biome-tag surface files (`latitude_cold_surface`, `latitude_hot_surface`, `latitude_temperate_surface`, `cold_biomes`, `hot_biomes`, `tempered_biomes`, etc.) — superseded by the Z-based system.
---
## 🧪 Technical / Internal
* Mixed-in `MultiNoiseBiomeSource` to intercept Deep Dark biome resolution safely (Mojmap, no refmap needed on production).
* Custom `LatitudeZonePlacement` placement modifier filters ore placement by Z at the placed-feature level.
* Comprehensive test suite added: `OresCommandTest`, `ModConfigsTest`, `ConfigurableOreDropsProcedureTest`, `OreDropMathTest`, plus an automated GameTest server for latitude validation.
* Cleaned up block/item classes and migrated the entire test suite to NeoForge.
---
## 📦 Requirements
* Minecraft 1.21.1
* NeoForge 21.1.x
* **Lithosphere 1.7+** (required)
* Biomes O' Plenty, Create, Mekanism (optional, recommended)
---
> ⚠️ **Create a NEW world after updating.** Chunks generated before 4.0 keep their old ore distribution.
**Happy mining!** 🌍⛏️✨