Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -132,9 +132,9 @@ jobs:
if-no-files-found: error
retention-days: 30
path: |
build/libs/OreSpawn-4.0.11.119041.jar
build/libs/OreSpawn-4.0.11.119041-sources.jar
build/libs/OreSpawn-4.0.11.119041-javadoc.jar
build/libs/OreSpawn-4.0.16.119041.jar
build/libs/OreSpawn-4.0.16.119041-sources.jar
build/libs/OreSpawn-4.0.16.119041-javadoc.jar
build/release/SHA256SUMS
CHANGELOG.txt

Expand Down
38 changes: 38 additions & 0 deletions CHANGELOG.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,41 @@
Version 4.0.16.119041

* Leave benchmark shutdown to the GameTest harness when a benchmark is run
through Forge's GameTest server, preventing a null test-tracker crash and
allowing the harness to report its real test result.
* Ordinary dedicated benchmark servers still stop automatically when requested.

Version 4.0.15.119041

* Classify generated geology and public geology samples through the same
stable quart-biome cell at three-dimensional biome boundaries.
* Keep ore family-host filters and sampler predictions consistent when later
surface features alter the final heightmap by a small amount.
* Existing chunks, profiles, API signatures, and schemas are unchanged.

Version 4.0.14.119041

* Convert naturally exposed one-layer Snow at the first free block above the
motion-blocking surface while retaining the existing Snow and Ice scan.
* Preserve buried or authored Snow and Ice, unconfigured dimensions, fluids,
bedrock, block entities, profiles, schemas, and existing chunks.

Version 4.0.13.119041

* Give the public ore-dimension builder the exact biome include/exclude and
biome-dictionary filter support already available in provider JSON.
* Accept valid namespaced geome IDs in both creation-editor validation paths
while preserving legacy unnamespaced geome keys.
* API major 1, schemas, existing profiles, generated chunks, and worldgen
behaviour are unchanged.

Version 4.0.12.119041

* Classify public geology samples at the same highest occupied block used by
chunk geology generation, rather than the first free block above it.
* Keep public sampler predictions consistent with generated rock at vertical
biome seams without changing existing chunks, profiles, or generation.

Version 4.0.11.119041

* Preserve biome-dictionary geome weights when a data-driven biome is reached
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ End" policy used by mods such as Base Metals.
This is not the unrelated mod that adds mobs and dimensions under the same
name.

This branch builds target-qualified version `4.0.11.119041`: the OreSpawn 4.0.11
This branch builds target-qualified version `4.0.16.119041`: the OreSpawn 4.0.16
feature set for Minecraft 1.19.4 and Forge. See the
[versioning policy](docs/VERSIONS.md) for the encoding and release convention.

Expand Down
10 changes: 5 additions & 5 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -845,7 +845,7 @@ def preparedReleaseDir = providers.gradleProperty('preparedReleaseDir')
tasks.register('verifyReleaseConfiguration') {
group = 'verification'
doLast {
if (project.mod_version != '4.0.11.119041'
if (project.mod_version != '4.0.16.119041'
|| project.mod_group != expectedMavenGroup
|| project.minecraft_version != '1.19.4'
|| project.forge_version != '45.4.0'
Expand All @@ -859,9 +859,9 @@ tasks.register('verifyReleaseConfiguration') {
throw new GradleException('Unexpected dispatcher or Java target metadata')
}
List<String> expectedPublicArtifacts = [
'OreSpawn-4.0.11.119041.jar',
'OreSpawn-4.0.11.119041-sources.jar',
'OreSpawn-4.0.11.119041-javadoc.jar'
'OreSpawn-4.0.16.119041.jar',
'OreSpawn-4.0.16.119041-sources.jar',
'OreSpawn-4.0.16.119041-javadoc.jar'
]
if (base.archivesName.get() != expectedMavenArtifact
|| expectedReleaseFiles.get().collect { it.toString() } != expectedPublicArtifacts) {
Expand All @@ -878,7 +878,7 @@ tasks.register('verifyReleaseConfiguration') {
'src/main/java/zone/moddev/mc/orespawn/worldgen/LegacyMineralogyProfileMigration.java',
'README.md', 'CHANGELOG.txt'
].each { path ->
if (!file(path).getText('UTF-8').contains('4.0.11.119041')) {
if (!file(path).getText('UTF-8').contains('4.0.16.119041')) {
throw new GradleException("Release identity missing from ${path}")
}
}
Expand Down
18 changes: 15 additions & 3 deletions docs/API.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,13 @@ WorldgenProvider provider = WorldgenProvider.builder("examplemod", 1)
`OilDefinition` and template `.oil(...)` remain deprecated migration adapters
for one legacy oil rule. New integrations should use `FluidDepositDefinition`.

Ore dimension builders expose the same biome filters as provider JSON and
fluid-deposit builders. Use `.biome(...)` and `.biomeDictionary(...)` for
inclusions, with `.excludeBiome(...)` and `.excludeBiomeDictionary(...)` for
exclusions. These methods work on both explicit `.dimension(...)` rules and
`.dimensionSelector(...)` fallbacks; built definitions and their returned
filter sets are immutable.

Register custom biomes with Forge as usual. `OreSpawnBiomes.copyAndRegister`
provides a small optional convenience for cloning a known biome:

Expand Down Expand Up @@ -126,9 +133,14 @@ OreSpawnApi.createSampler(server.overworld()).ifPresent(sampler -> {
```

`sampleColumn` performs one biome/geome classification and reuses it for every
Y query. Sampling is read-only and is intended for gameplay decisions,
diagnostics, and compatible generation outside OreSpawn's block loops.
Callbacks inside OreSpawn generation loops are intentionally unsupported.
Y query. Pass the first-free surface height returned by `Level.getHeight`;
OreSpawn uses the highest occupied block immediately below it for biome/geome
classification and resolves the same stable quart-biome cell used by chunk
geology. This avoids display-oriented fuzzy biome zoom changing the prediction
after later surface work alters a heightmap. Sampling is read-only and is
intended for gameplay decisions, diagnostics, and compatible generation outside
OreSpawn's block loops. Callbacks inside OreSpawn generation loops are
intentionally unsupported.

Custom pattern mods create a Forge `DeferredRegister<OrePatternType>` using
`OreSpawnPatternRegistry.REGISTRY_NAME`. An `OrePatternType` contains a codec
Expand Down
4 changes: 3 additions & 1 deletion docs/CONFIGURATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,9 @@ is omitted. `dimensions` limits membership, and `geomes` multiplies selection
weight by province. A weight of zero prevents selection in that context.

Geomes contain a non-negative `base` weight and non-negative weights for each
rock family. Biome and biome-dictionary maps multiply those geome weights.
rock family. Keys may retain the legacy unnamespaced form or use a provider
resource ID such as `examplemod:crystal_basin`; the creation editor preserves
both forms. Biome and biome-dictionary maps multiply those geome weights.
Missing optional-mod biome IDs are ignored during baking.

Terrain dimensions require `enabled`, `host_blocks`, and `host_tags`.
Expand Down
6 changes: 6 additions & 0 deletions docs/DEVELOPER_GUIDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,10 @@ private void enqueueWorldgen(InterModEnqueueEvent event) {
.quantityRange(4, 11)
.pattern(OrePattern.VEIN)
.heightDistribution(OreHeightDistribution.TRIANGLE)
.biome(new ResourceLocation("minecraft", "plains"))
.biomeDictionary("FOREST")
.excludeBiome(new ResourceLocation("minecraft", "dark_forest"))
.excludeBiomeDictionary("SPOOKY")
.hostTag(new ResourceLocation("minecraft", "stone_ore_replaceables"))))
.build();

Expand All @@ -114,6 +118,8 @@ Use `.quantity(8)` when every attempt should have a fixed budget. The selector
above preserves old OS3 behavior in every ordinary dimension except Nether and
End. Add an explicit `.dimension(overworld, ...)` as well when the Overworld
needs different settings; the explicit rule overrides the selector there.
Ore dimension builders support the same exact-ID and biome-dictionary include
and exclude filters as provider JSON and fluid-deposit builders.

## Pack Override Quick Start

Expand Down
13 changes: 11 additions & 2 deletions docs/VERSIONS.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ Examples:
| 1.16.5 | Forge | `116051` | `4.0.9.116051` |
| 1.17.1 | Forge | `117011` | `4.0.9.117011` |
| 1.18.2 | Forge | `118021` | `4.0.10.118021` |
| 1.19.4 | Forge | `119041` | `4.0.11.119041` |
| 1.19.4 | Forge | `119041` | `4.0.16.119041` |
| 1.20.6 | Forge | `120061` | `4.0.6.120061` |
| 1.21.11 | Forge | `121111` | `4.0.6.121111` |
| 26.1.2 | Forge | `2601021` | `4.0.6.2601021` |
Expand Down Expand Up @@ -157,7 +157,16 @@ therefore legitimately skip functional version numbers.

Forge 1.19.4 then advanced to `4.0.11.119041` to retain biome-dictionary
weights and ore biome filters when a data-driven biome is represented by a
different runtime object with the same stable registry key.
different runtime object with the same stable registry key, to
`4.0.12.119041` so public geology samples classify the same highest occupied
block as chunk generation at vertical biome seams, and to `4.0.13.119041` to
restore API biome-filter parity and accept provider-namespaced geomes in the
creation editor, and to `4.0.14.119041` to convert exposed one-layer Snow
without touching buried or authored weather materials. It then advanced to
`4.0.15.119041` so generated geology and public samples use the same stable
quart-biome cell at three-dimensional biome boundaries, and to
`4.0.16.119041` so GameTest benchmark runs leave shutdown and result reporting
to the test harness.

This provides three useful guarantees:

Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ mcp_version=20230314.122934
mod_id=orespawn
mod_name=MMD OreSpawn
mod_license=LGPL-2.1
mod_version=4.0.11.119041
mod_version=4.0.16.119041
mod_group=zone.moddev.mc.orespawn
mod_authors=SkyBlade1978, dshadowwolf, the MMD Team
mod_description=Configurable, provider-driven terrain, ore, and deposit generation.
Expand Down
Loading
Loading