Skip to content

Commit 5efdcfa

Browse files
authored
Merge pull request #237 from SkyBlade1978/master-1.20.6-neo
Master 1.20.6 neo
2 parents 69843d4 + 7943d95 commit 5efdcfa

51 files changed

Lines changed: 3171 additions & 414 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CHANGELOG.txt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,18 @@
1+
Version 4.0.6.120062
2+
3+
* Adopt target-qualified four-component versions so Minecraft and loader compatibility can be identified from the mod version.
4+
* Preserve generated worlds made with Mineralogy 1.10, 1.12, or 5.x by reading their saved mod metadata and exact legacy configuration before creating the OreSpawn world profile.
5+
* Write human-readable, idempotent upgrade reports for legacy OreSpawn and Mineralogy imports while retaining source files and existing chunks unchanged.
6+
* Audit automated runtime logs and dynamic-fluid generation so logged worldgen failures cannot pass merely because the process exits normally.
7+
* Qualify existing OreSpawn 4.0.5 global and per-world profiles without changing explicit Custom values or provider definitions.
8+
* Fix provider top and filler materials being generated one block below exposed ground.
9+
* Apply underwater materials from the corrected ground and ceiling materials to roof undersides.
10+
* Preserve trees, vegetation, structures and block entities by running surface replacement before late features.
11+
* Honour exact biome-to-geome weights on dynamic biome registries.
12+
* Stagger close Stable Layers geome transitions by layer instead of changing a whole rock column at one boundary.
13+
* Recalibrate Stable Layers edge-detail presets so Average retains natural variation at later rock contacts.
14+
* Existing chunks are not rewritten; the correction applies while generating new chunks.
15+
116
Version 4.0.5
217

318
* Complete native translations for every shipped non-English locale

README.md

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,22 @@ Important files:
3939
| `<world>/serverconfig/orespawn-worldgen.json` | Complete settings snapshot for one world |
4040
| `config/<modid>-orespawn.json` | Optional modpack override for one provider |
4141
| `config/orespawn-guide/README.md` | Guide exported automatically on first load |
42+
| `config/orespawn-upgrade-report.txt` | Human summary produced when legacy OreSpawn rules are imported |
43+
| `<world>/serverconfig/orespawn-upgrade-report.txt` | Human summary produced when a generated legacy Mineralogy world is pinned to its saved settings |
4244

4345
Profile edits affect newly generated chunks. Ore and flat-bedrock retrogen are
4446
separate opt-in features; OreSpawn never retro-generates rock strata.
47+
Stable Layers honours exact biome-ID geome influences on dynamic biome
48+
registries and spreads close geome transitions across layers rather than
49+
changing an entire vertical rock column at one boundary.
50+
51+
When an already-generated world has saved Mineralogy 1.10, 1.12, or 5.x mod
52+
metadata but no OreSpawn world profile, OreSpawn reads the matching published
53+
configuration contract and records the exact engine, numeric settings, rock
54+
order, and white/blacklists in the new world profile. Saved-world identity
55+
wins over stale files in the installation. A fresh world is never reclassified
56+
merely because an old `mineralogy.cfg` or `mineralogy-common.toml` remains in
57+
the instance.
4558

4659
To move a configured single-player world to a dedicated server, copy the
4760
world's `serverconfig/orespawn-worldgen.json` with the world and install the
@@ -84,9 +97,12 @@ Use Java 21 from the repository root:
8497
```
8598

8699
`build` runs the standard `check` lifecycle. In addition to the JUnit suite,
87-
that lifecycle packages a test-only provider mod, loads its custom biome in
88-
normal noise terrain, and verifies both fresh generation and reopening the
89-
same saved world. The fixture is not included in OreSpawn's published jars.
100+
that lifecycle packages a test-only provider mod and verifies exposed,
101+
underwater, filler, and ceiling surfaces in open and ceiling normal-noise
102+
dimensions. It also proves later vegetation, structures, and block entities
103+
survive, verifies identifier-weighted geology in a dynamic custom biome, then
104+
reopens and checks the exact saved world. The fixture is not included in
105+
OreSpawn's published jars.
90106

91107
Import or refresh the project with Eclipse Buildship. NeoGradle supplies the
92108
Eclipse model and run configurations through the `eclipse` task; this branch

build.gradle

Lines changed: 230 additions & 38 deletions
Large diffs are not rendered by default.

docs/AGENTS.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,6 @@ Use the focused guides for implementation details:
1212
- [BIOMES.md](BIOMES.md) and [DIMENSIONS.md](DIMENSIONS.md) for world integration;
1313
- [TEMPLATES.md](TEMPLATES.md) for selectable world styles;
1414
- [CONFIGURATION.md](CONFIGURATION.md) for configuration behavior;
15+
- [VERSIONS.md](VERSIONS.md) for the shared four-component target-qualified
16+
versioning and branch-release convention;
1517
- [README.md](README.md) for schemas, examples, and the complete documentation index.

docs/API.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -133,9 +133,11 @@ OreSpawnApi.createSampler(server.overworld()).ifPresent(sampler -> {
133133
});
134134
```
135135

136-
`sampleColumn` performs one biome/geome classification and reuses it for every
137-
Y query. Sampling is read-only and is intended for gameplay decisions,
138-
diagnostics, and compatible generation outside OreSpawn's block loops.
136+
`sampleColumn` performs one biome/dominant-geome classification and reuses its
137+
transition scores for every Y query. `rockAt` therefore matches Stable Layers
138+
when a close geome transition is staggered by layer. Sampling is read-only and
139+
is intended for gameplay decisions, diagnostics, and compatible generation
140+
outside OreSpawn's block loops.
139141
Callbacks inside OreSpawn generation loops are intentionally unsupported.
140142

141143
Custom pattern mods create a NeoForge `DeferredRegister<OrePatternType>` using

docs/BIOMES.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,16 @@ Biome surfaces support:
126126
- `ceiling_block`: optional underside material;
127127
- `filler_depth`: 0-16 blocks.
128128

129+
Provider surfaces run during `LOCAL_MODIFICATIONS`: after Minecraft has built
130+
base surfaces and lakes, but before structures and vegetation. That ordering
131+
lets OreSpawn replace the actual exposed ground while preserving later trees,
132+
plants, authored structures, and block entities. In ceiling dimensions,
133+
`ceiling_block` applies to the roof underside and does not replace the roof top.
134+
135+
Surface correction is generation-only. Installing or updating OreSpawn does
136+
not rewrite already generated chunks; travel into new terrain to see a changed
137+
provider surface definition.
138+
129139
Dimension materials support the ordinary aquifer fluid, a deep aquifer fluid
130140
and threshold, and replacements for vanilla snow and ice. OreSpawn converts
131141
weather products in loaded chunks and around players; it does not replace every

docs/CONFIGURATION.md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,14 @@ packaged or API providers, provider override files, the global configuration,
1717
the selected template, and Create World edits. The result is saved with the
1818
world. Restart after editing JSON by hand.
1919

20+
An existing generated world follows a stricter safety order. Its existing
21+
`serverconfig/orespawn-worldgen.json` always wins. If none exists, saved legacy
22+
Mineralogy mod metadata may select the matching 1.10, 1.12, or 5.x config
23+
contract before the world profile is first written. Installed-pack defaults,
24+
Create World choices, and unrelated stale legacy files cannot override that
25+
saved-world identity. See `MIGRATION.md` and the generated per-world upgrade
26+
report for the exact decision.
27+
2028
## Top-Level Fields
2129

2230
| Field | Values | Meaning |
@@ -75,10 +83,31 @@ When a control is `custom`, its value comes from `formations.custom`:
7583
| `edge_octaves` | 1-8 | Number of boundary-detail scales |
7684
| `continuity` | 0-1 | Proportion of formations retaining global identity |
7785

86+
For Stable Layers, the Edge Detail presets use these
87+
`wavelength / amplitude / octaves` values:
88+
89+
| Preset | Edge detail |
90+
|---|---:|
91+
| Tiny | `48 / 4 / 1` |
92+
| Small | `64 / 12 / 2` |
93+
| Average | `96 / 24 / 3` |
94+
| Large | `128 / 48 / 4` |
95+
| Huge | `192 / 96 / 5` |
96+
97+
Average is calibrated to retain visible variation at later layer contacts.
98+
Custom profiles keep their explicit values; these numbers are only used by the
99+
named presets and as defaults for new Custom settings.
100+
78101
Cyano settings use `cyano.geome_size` (4-32767),
79102
`cyano.rock_layer_noise` (1-32767), and `cyano.rock_layer_thickness` (1-255).
80103
They are ignored by Sky.
81104

105+
Profiles created from a legacy Mineralogy world also retain
106+
`cyano.enabled`, `cyano.realistic_coal_layers`, the three effective
107+
`*_rocks` arrays, the six original `*_whitelist`/`*_blacklist` arrays, and
108+
source/version fields. These are migration snapshots, not new settings that a
109+
fresh pack needs to author.
110+
82111
## Rocks And Geomes
83112

84113
A rock requires `enabled`, `family`, `depth_peak`, `depth_spread`, `min_y`,
@@ -90,6 +119,10 @@ weight by province. A weight of zero prevents selection in that context.
90119
Geomes contain a non-negative `base` weight and non-negative weights for each
91120
rock family. Biome and biome-dictionary maps multiply those geome weights.
92121
Missing optional-mod biome IDs are ignored during baking.
122+
Exact biome-ID maps remain effective when the target uses a dynamic biome
123+
registry. With Stable Layers, a close contest between two geomes transitions
124+
at a deterministic position per layer so the whole underground column does
125+
not change on one sheer plane.
93126

94127
Terrain dimensions require `enabled`, `host_blocks`, and `host_tags`.
95128
`biome_ids` and `biome_namespaces` can narrow a custom dimension. The Overworld

docs/DEVELOPER_GUIDE.md

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -198,10 +198,11 @@ bounded ore or bedrock retrogen is enabled.
198198
6. Confirm the provider appears in `/orespawn status`.
199199
7. Test a new world; profile edits do not rewrite already generated terrain.
200200

201-
OreSpawn's own standard `check` lifecycle includes a consumer-style biome
202-
integration test. It loads a separate test provider and datapack biome, proves
203-
the provider is active, verifies biome selection, tags, climate and configured
204-
surface blocks in non-flat terrain, then reopens and rechecks the same saved
205-
world. Run `gradlew check` (or `gradlew build`, which includes it) before
206-
publishing any change to biome registration, palettes, surfaces or profile
207-
persistence.
201+
OreSpawn's own standard `check` lifecycle includes a consumer-style surface
202+
integration test. A separate test provider creates independently marked
203+
Grass/Dirt, underwater, filler, and roof columns in open and ceiling
204+
normal-noise dimensions. The gate verifies biome and chunk edges, late tree,
205+
vegetation, structure and chest sentinels, the roof underside, and exact save
206+
reload behavior. Run `gradlew check` (or `gradlew build`, which includes it)
207+
before publishing any change to biome registration, palettes, surfaces,
208+
feature ordering, height handling, or profile persistence.

docs/MIGRATION.md

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,37 @@ legacy-ID behaviour.
1313

1414
Migration is non-destructive. OreSpawn writes `config/orespawn-worldgen.json`
1515
only when that target does not already exist and retains every source file.
16+
When legacy OreSpawn rules are translated, a concise player-facing summary is
17+
also written atomically to `config/orespawn-upgrade-report.txt`; the existing
18+
detailed rule report remains at `config/orespawn-migration/migration-report.txt`.
19+
20+
## Existing Mineralogy Worlds
21+
22+
An already-generated world without an OreSpawn per-world profile is inspected
23+
before OreSpawn chooses any installed-pack or Create World default. OreSpawn
24+
uses saved mod metadata from `level.dat`, with a valid `level.dat_old` as a
25+
fallback, to distinguish these published contracts:
26+
27+
- Mineralogy 1.10.2 `3.3.8.26` and its `mineralogy.cfg`;
28+
- Mineralogy 1.12.2 `3.8.0.53` and its distinct `mineralogy.cfg`;
29+
- Mineralogy 5.0.1 through 5.4.0 and `mineralogy-common.toml`.
30+
31+
The resulting world profile preserves enablement, selected legacy/geome
32+
engine, geome size, layer noise and thickness, realistic-coal behavior where
33+
supported, exact effective rock order (including historical duplicates), and
34+
all six white/blacklists. Saved-world identity chooses the lineage even when a
35+
different stale config is present. Missing or malformed values use that
36+
lineage's published defaults and are reported rather than silently broadening
37+
the world configuration.
38+
39+
The human-readable result is written atomically to
40+
`<world>/serverconfig/orespawn-upgrade-report.txt`. It identifies the saved
41+
version and metadata source, config source, selected engine and lineage,
42+
effective settings and outputs, missing IDs, fallbacks, and warnings. Source
43+
configuration and existing chunks are not rewritten. Once
44+
`orespawn-worldgen.json` exists it is authoritative and the import is not run
45+
again. A fresh world containing stale legacy files remains on its explicit
46+
OreSpawn/Create World settings.
1647

1748
When `config/mineralogy-geomes.json` exists, OreSpawn imports the Mineralogy 6
1849
profile directly, updates its schema marker, and records `migrated_from`.

docs/PLAYER_GUIDE.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,3 +93,20 @@ the same mods. Alternatively, place a prepared global profile at
9393

9494
The server console commands `/orespawn status`, `/orespawn reload`, and
9595
`/orespawn dump-biomes` help pack authors diagnose active providers and IDs.
96+
97+
### Upgrading a Mineralogy world
98+
99+
If the world was already generated with Mineralogy 1.10, 1.12, or 5.x and has
100+
no OreSpawn world profile yet, OreSpawn reads the Mineralogy version saved in
101+
the world and the matching old configuration. It preserves the selected
102+
engine, numeric settings, rock order, and lists rather than silently applying
103+
new-world defaults. Look for:
104+
105+
```text
106+
<world>/serverconfig/orespawn-upgrade-report.txt
107+
```
108+
109+
The report explains what was detected and retained, including any missing rock
110+
IDs or fallback values. OreSpawn leaves the old configuration and generated
111+
chunks untouched. A fresh world does not inherit this behavior merely because
112+
an old Mineralogy config is still present in the instance.

0 commit comments

Comments
 (0)