# 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!** ๐ŸŒโ›๏ธโœจ