Two cohesive passes that harden the latitude worldgen and clean up
long-standing inconsistencies.
== Bug fixes & doc alignment ==
- licence: set MIT in gradle.properties and neoforge.mods.toml
(was "Not specified" - blocks distribution)
- OreAuditHandler: fix javadoc that referenced a non-existent system
property; the trigger is the .oreaudit marker file. Add an explicit
warning about the System.exit(0) and point to LatitudeGameTest as the
non-destructive alternative
- KubeJS: remove the dead kubejs_version, the commented dependency and
all README claims about an "automatic KubeJS script"/KubeJSIntegration
class that no longer exists. Vanilla ore removal is now native via the
neoforge:remove_features biome modifier
- README: refresh the technical header (1.21.1 / NeoForge 21.1.219 /
Java 21 / v3.2, was 1.20.1/Forge/Java17/v2.1.5) and the shard-diamond
surface note (both variants are generated, gated by shardDiamondOre)
- CLAUDE.md / CONFIG_INTEGRATION_GUIDE.md: mark the feature toggles and
tool stats as wired (they read ModConfigs at runtime); correct the
"hardcoded tools" claim
== Generation tests (56 unit + 6 GameTest, all green) ==
- Extract the pure geometry of LatitudeBiomeSource into LatitudeMath
(temperature, 3-zone underground model, spawn safe zone, dual-octave
selector index). LatitudeBiomeSource now delegates to it, so one
source of truth drives both runtime and tests - no behaviour drift
- LatitudeMathTest (21): temperature clamp/monotonicity, zone boundaries
without gaps, Deep Dark / cave threshold predicates, spawn-safe square
symmetry, selector index bounds + near-uniform distribution
- BiomeBandTest (18): fromTemperature boundary cases, surface/ocean
pool non-empty, cave biomes never in a surface pool
- ModConfigsTest (+2 guards): every ConfigHelper toggle string maps to
a real FeatureToggleConfig field, so a typo cannot silently produce a
dead toggle (default: return true)
- LatitudeGameTest (+4 server tests): determinism (1485 pts, 0 mismatch),
no cave biome at surface (160k samples, 0 leak), surface continuity
(7% transitions - large biomes), climate gradient (north=cold 100%,
south=hot 100%, equator cold 0%)
== Build ==
- build.gradle: addModdingDependenciesTo(sourceSets.test) so pure unit
tests can reference Minecraft types without a full game server
- neoforge.mods.toml: optional BOP/create/mekanism dependencies removed;
declared with mandatory=false + versionRange="[0,)" they broke mod
loading when the mods were absent ("requires X 0 or above"). Optional
integration is already handled via data tags (required:false) and
data-only recipes that no-op if the mod is missing
- gradlew: restore executable bit
Verification: ./gradlew test build -> BUILD SUCCESSFUL, 56/56 unit tests
./gradlew runGameTestServer -> 6/6 GameTests passed in 840ms
33 lines
1.1 KiB
TOML
33 lines
1.1 KiB
TOML
modLoader="javafml"
|
|
loaderVersion="[1,)"
|
|
license="MIT"
|
|
|
|
[[mods]]
|
|
modId="${mod_id}"
|
|
version="${mod_version}"
|
|
displayName="${mod_name}"
|
|
displayURL="https://lanro.eu"
|
|
credits="Created using mod maker MCreator - https://mcreator.net/about"
|
|
authors="${mod_authors}"
|
|
description='''${mod_description}'''
|
|
|
|
# Start of user code block mod configuration
|
|
# End of user code block mod configuration
|
|
|
|
[[dependencies."${mod_id}"]]
|
|
modId="minecraft"
|
|
mandatory=true
|
|
versionRange="${minecraft_version_range}"
|
|
ordering="AFTER"
|
|
side="BOTH"
|
|
|
|
|
|
# Start of user code block dependencies configuration
|
|
# Note: optional mods (biomesoplenty, create, mekanism) are intentionally NOT declared
|
|
# here. Optional integration is handled via data tags with "required": false entries
|
|
# (see data/custom_ore_gen/tags/worldgen/biome/latitude_*_surface.json) and via
|
|
# data-only recipes (data/create, data/mekanism) which simply no-op if the mod is
|
|
# absent. Declaring them here with mandatory=false + versionRange caused NeoForge to
|
|
# fail loading when the mods were not installed (see commit history).
|
|
# End of user code block dependencies configuration
|