Skip to content

Commit f141ae5

Browse files
authored
Fix geology in extended-height worlds
Use each dimension's actual build limits, preserve native terrain where no rock rule applies, and keep existing chunks and saved limits unchanged.
2 parents 1fb6537 + 37eaeff commit f141ae5

47 files changed

Lines changed: 762 additions & 130 deletions

Some content is hidden

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

‎.github/workflows/ci.yml‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,9 @@ jobs:
7979
if-no-files-found: error
8080
retention-days: 30
8181
path: |
82-
build/libs/OreSpawn-4.1.0.121012.jar
83-
build/libs/OreSpawn-4.1.0.121012-sources.jar
84-
build/libs/OreSpawn-4.1.0.121012-javadoc.jar
82+
build/libs/OreSpawn-4.1.1.121012.jar
83+
build/libs/OreSpawn-4.1.1.121012-sources.jar
84+
build/libs/OreSpawn-4.1.1.121012-javadoc.jar
8585
build/release/SHA256SUMS
8686
CHANGELOG.txt
8787
- name: Upload diagnostics on failure

‎CHANGELOG.txt‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
1+
Version 4.1.1.121012
2+
3+
* Use each dimension's actual height for rock strata, including deeper and
4+
taller worlds supplied by other mods or datapacks.
5+
* Keep native rock where no configured rock is eligible, rather than replacing
6+
it with stone. Preserve saved ranges and leave existing chunks untouched.
7+
* Allow rock height settings outside the vanilla range and explain how rock
8+
weights differ from a geome's family weights.
9+
110
Version 4.1.0.121012
211

312
* Keep imported vanilla ore settings inactive while Manage Vanilla Ores is off.

‎README.md‎

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,11 @@ It gives mods and modpacks one place to configure ores, deposit shapes, optional
1010
rock strata and geomes, provider-owned underground fluid deposits, biome
1111
palettes and world materials, flat bedrock, and bounded ore retrogen.
1212

13+
Rock strata use each dimension's actual build height, including deeper or
14+
taller worlds supplied by mods and datapacks. There is no separate OreSpawn
15+
world-floor setting to keep in sync. Explicit rock and ore ranges still apply;
16+
uncovered heights keep the terrain generator's original rock.
17+
1318
Its OS3 compatibility layer preserves ranged legacy block budgets, exclusive
1419
legacy height ceilings, and the historical "all dimensions except Nether and
1520
End" policy used by mods such as Base Metals.
@@ -102,10 +107,10 @@ exported to `config/orespawn-guide/` without overwriting existing files.
102107

103108
## Building
104109

105-
This branch builds target-qualified version `4.1.0.121012`: the OreSpawn 4.1
110+
This branch builds target-qualified version `4.1.1.121012`: the OreSpawn 4.1
106111
feature set for Minecraft 1.21.1 and NeoForge.
107112

108-
OreSpawn 4.1.0.121012 uses NeoGradle 7.1.38 and Gradle 9.2.1. Use exact
113+
OreSpawn 4.1.1.121012 uses NeoGradle 7.1.38 and Gradle 9.2.1. Use exact
109114
Temurin 21.0.7+6 from the repository root:
110115

111116
```powershell
@@ -130,7 +135,7 @@ Use `runClient` or `runTestOreSourcesClient` from Eclipse's Gradle Tasks view.
130135
NeoGradle does not need ForgeGradle's `genEclipseRuns` task or standalone
131136
`.launch` files.
132137

133-
The audited public outputs are `OreSpawn-4.1.0.121012.jar`, its sources jar,
138+
The audited public outputs are `OreSpawn-4.1.1.121012.jar`, its sources jar,
134139
and its Javadoc jar. CI additionally proves a cache-cold NeoGradle bootstrap
135140
and a same-cache offline rerun.
136141

‎docs/API.md‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,12 @@ Layers when a close geome transition is staggered by layer, even when later
163163
surface work changes the final heightmap slightly. Sampling is read-only and is
164164
intended for gameplay decisions, diagnostics, and compatible generation outside
165165
OreSpawn's block loops.
166+
The sampler uses the level's actual build limits, including extended-height
167+
dimensions. It samples configured strata, not blocks already in the world.
168+
Where no configured rock is eligible, generation leaves native terrain alone,
169+
`familyAt` is empty, and `rockAt` retains its Stone fallback. That fallback is
170+
not a prediction of the other generator's rock; inspect existing terrain if
171+
you need its actual block.
166172
Callbacks inside OreSpawn generation loops are intentionally unsupported.
167173

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

‎docs/CONFIGURATION.md‎

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,12 +124,32 @@ fresh pack needs to author.
124124

125125
## Rocks And Geomes
126126

127-
A rock requires `enabled`, `family`, `depth_peak`, `depth_spread`, `min_y`,
127+
A rock uses `enabled`, `family`, `depth_peak`, `depth_spread`, `min_y`,
128128
`max_y`, `weight`, and `ore_replaceable`. Provider definitions should also set
129129
`block`; global/world entries may use the rule ID as the block ID when `block`
130130
is omitted. `dimensions` limits membership, and `geomes` multiplies selection
131131
weight by province. A weight of zero prevents selection in that context.
132132

133+
Rock heights are absolute world Y coordinates. On this Minecraft target the
134+
editor accepts -2032 through 2031, and generation is limited to the actual
135+
dimension's build range. OreSpawn reads that range at runtime, so a modded
136+
floor such as -128 needs no matching OreSpawn height setting. Omitting a
137+
rock's `min_y` or `max_y` leaves that end unrestricted within the dimension.
138+
Explicit saved values stay unchanged: a rule with `min_y: -64` still stops at
139+
-64 until you edit it. The same applies to provider declarations and imported
140+
rules. Explicit ore and fluid-deposit ranges are not stretched automatically.
141+
142+
`depth_peak` and `depth_spread` describe a preference, not hard cutoffs. The
143+
rock's `min_y` and `max_y` decide where it is eligible. Where no rock is
144+
eligible, the terrain generator's original rock is left in place, including
145+
deepslate. These changes affect new terrain only; strata have no retrogen pass.
146+
147+
Rock weights are relative to other eligible rocks in the same family. A low
148+
andesite weight can still win every volcanic layer if it is the only eligible
149+
volcanic rock. To reduce the whole family's share, lower that family's weight
150+
in the relevant geomes. To exclude an individual rock, disable it or set its
151+
weight to zero. Geome-specific rock weights can narrow the choice further.
152+
133153
Geomes contain a non-negative `base` weight and non-negative weights for each
134154
rock family. Keys may retain the legacy unnamespaced form or use a provider
135155
resource ID such as `examplemod:crystal_basin`; the creation editor preserves

‎docs/PLAYER_GUIDE.md‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,18 @@ replace.
8585
Removing a rock from generation does not unregister its block or recipes. It
8686
only prevents that rock appearing in newly generated terrain.
8787

88+
Rock weight is not an overall percentage. It compares that rock with the other
89+
eligible rocks in its family. For example, reducing andesite's weight has
90+
little effect if it is the only volcanic rock available. Lower the volcanic
91+
family weight in the relevant geomes to reduce volcanic layers, or disable
92+
andesite to exclude it completely.
93+
94+
For deeper or taller worlds, OreSpawn detects the dimension's real height.
95+
You do not need to enter the world's floor a second time. Check the rocks'
96+
own Minimum Y and Maximum Y, though: saved limits are kept exactly as entered.
97+
For a floor of -128, an old rock rule starting at -64 will not extend down
98+
automatically. Where no rock rule applies, native stone or deepslate remains.
99+
88100
## Existing Worlds And Servers
89101

90102
Each world stores its final choices in:

‎docs/PROVIDERS.md‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,15 @@ including vanilla granite/diorite/andesite/tuff features, untouched. Formation
2727
controls remain inert until a profile contains eligible rocks and an enabled
2828
terrain-replacement dimension.
2929

30+
Rock heights use absolute world Y, not distance from the bottom. Omitted rock
31+
limits and the Java rock builder's defaults cover the dimension's full build
32+
range. Explicit limits remain authoritative, including values such as
33+
`min_y: -128`; they are not rewritten when a terrain mod changes the world's
34+
height. The runtime clips generation to each dimension's actual bounds and
35+
leaves native rock wherever no declared rock is eligible. No Tectonic-specific
36+
configuration or integration hook is needed. Ore and fluid-deposit height
37+
ranges remain independent and are not extended automatically.
38+
3039
Rule IDs in `rocks` and `ores` must use the provider namespace. They are stable
3140
ownership keys, not necessarily block IDs. Set `block` for one output or
3241
`outputs` for a weighted list:

‎docs/TROUBLESHOOTING.md‎

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,19 @@ Confirm the dimension is enabled in `terrain_dimensions`, its hosts resolve,
1919
at least one enabled rock includes that dimension, and biome restrictions
2020
match. OreSpawn does not replace Nether or End terrain by default.
2121

22+
## Rocks stop at the old world floor
23+
24+
OreSpawn reads each dimension's actual build range at runtime, including
25+
deeper and taller dimensions supplied by terrain mods or datapacks. There is
26+
no separate world-floor setting to duplicate. Check each rock's explicit
27+
`min_y` and `max_y`: an existing `min_y: -64` remains a deliberate limit even
28+
if the world now reaches -128. Edit that rule if you want it to extend lower.
29+
30+
Where no rock is eligible, native stone or deepslate stays in place. Test in
31+
newly generated chunks. A fix cannot reconstruct deepslate that an earlier
32+
version already replaced, and rock strata are never retro-generated. Keep
33+
world backups before changing a terrain mod's height settings.
34+
2235
## A custom biome does not appear
2336

2437
Confirm its registry ID resolves, its palette targets the intended dimension,

‎docs/VERSIONS.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ Examples:
6262
| 1.20.6 | Forge | `120061` | `4.0.16.120061` |
6363
| 1.20.6 | NeoForge | `120062` | `4.0.16.120062` |
6464
| 1.21.1 | Forge | `121011` | `4.0.16.121011` |
65-
| 1.21.1 | NeoForge | `121012` | `4.1.0.121012` |
65+
| 1.21.1 | NeoForge | `121012` | `4.1.1.121012` |
6666
| 1.21.11 | Forge | `121111` | `4.0.6.121111` |
6767
| 1.21.11 | NeoForge | `121112` | `4.0.6.121112` |
6868
| 26.1.2 | Forge | `2601021` | `4.0.6.2601021` |

‎docs/schemas/profile-common.schema.json‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,15 +81,15 @@
8181
},
8282
"rock": {
8383
"type": "object",
84-
"required": ["enabled", "family", "depth_peak", "depth_spread", "min_y", "max_y", "weight", "ore_replaceable"],
84+
"required": ["enabled", "family", "depth_peak", "depth_spread", "weight", "ore_replaceable"],
8585
"properties": {
8686
"block": { "$ref": "#/$defs/registryId" },
8787
"enabled": { "type": "boolean" },
8888
"family": { "$ref": "#/$defs/family" },
8989
"depth_peak": { "type": "integer", "minimum": -2048, "maximum": 2048 },
9090
"depth_spread": { "type": "integer", "minimum": 1 },
91-
"min_y": { "type": "integer", "minimum": -2048, "maximum": 2048 },
92-
"max_y": { "type": "integer", "minimum": -2048, "maximum": 2048 },
91+
"min_y": { "type": "integer", "minimum": -2048, "maximum": 2048, "description": "Lowest absolute world Y. If omitted, the dimension's lower build limit applies." },
92+
"max_y": { "type": "integer", "minimum": -2048, "maximum": 2048, "description": "Highest absolute world Y. If omitted, the dimension's upper build limit applies." },
9393
"weight": { "type": "number", "minimum": 0 },
9494
"ore_replaceable": { "type": "boolean" },
9595
"geomes": { "$ref": "#/$defs/weights" },

0 commit comments

Comments
 (0)