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 @@ -50,9 +50,9 @@ jobs:
if-no-files-found: error
retention-days: 30
path: |
build/libs/OreSpawn-4.0.10.118021.jar
build/libs/OreSpawn-4.0.10.118021-sources.jar
build/libs/OreSpawn-4.0.10.118021-javadoc.jar
build/libs/OreSpawn-4.0.16.118021.jar
build/libs/OreSpawn-4.0.16.118021-sources.jar
build/libs/OreSpawn-4.0.16.118021-javadoc.jar
build/release/SHA256SUMS
CHANGELOG.txt

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

* 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.118021

* 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.118021

* Convert exposed one-layer vanilla Snow from the first free cell immediately
above Minecraft's motion-blocking surface when a dimension supplies a custom
snow material.
* Retain the existing surface Ice conversion and leave buried or authored Snow
and Ice unchanged.

Version 4.0.13.118021

* 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.118021

* 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.118021

* Preserve biome-dictionary geome weights when a data-driven biome is reached
through its stable registry key rather than the object baked at startup.
* Apply ore biome include and exclude filters by stable registry key so
dynamic-registry biome instances with the same ID are treated consistently.
* Existing chunks and profile formats are unchanged; the corrections apply to
generation in affected provider biomes.

Version 4.0.10.118021

* Evaluate Stable Layers rock min_y and max_y bounds against actual world Y
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.10.118021`: the OreSpawn 4.0.10
This branch builds target-qualified version `4.0.16.118021`: the OreSpawn 4.0.16
feature set for Minecraft 1.18.2 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 @@ -745,7 +745,7 @@ def preparedReleaseDir = providers.gradleProperty('preparedReleaseDir')
tasks.register('verifyReleaseConfiguration') {
group = 'verification'
doLast {
if (project.mod_version != '4.0.10.118021'
if (project.mod_version != '4.0.16.118021'
|| project.mod_group != expectedMavenGroup
|| project.minecraft_version != '1.18.2'
|| project.forge_version != '40.3.0'
Expand All @@ -759,9 +759,9 @@ tasks.register('verifyReleaseConfiguration') {
throw new GradleException('Unexpected dispatcher or Java target metadata')
}
List<String> expectedPublicArtifacts = [
'OreSpawn-4.0.10.118021.jar',
'OreSpawn-4.0.10.118021-sources.jar',
'OreSpawn-4.0.10.118021-javadoc.jar'
'OreSpawn-4.0.16.118021.jar',
'OreSpawn-4.0.16.118021-sources.jar',
'OreSpawn-4.0.16.118021-javadoc.jar'
]
if (base.archivesName.get() != expectedMavenArtifact
|| expectedReleaseFiles.get().collect { it.toString() } != expectedPublicArtifacts) {
Expand All @@ -778,7 +778,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.10.118021')) {
if (!file(path).getText('UTF-8').contains('4.0.16.118021')) {
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 without adding
TerraBlender:
Expand Down Expand Up @@ -127,9 +134,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
16 changes: 13 additions & 3 deletions docs/VERSIONS.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ Examples:
| 1.15.2 | Forge | `115021` | `4.0.9.115021` |
| 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.18.2 | Forge | `118021` | `4.0.16.118021` |
| 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 @@ -151,8 +151,18 @@ Bug number, such as Forge 1.14.4's `4.0.8.114041`, even though the 4.0.7 repair
was not applicable there. Forge 1.15.2, 1.16.5, and 1.17.1 then advanced to
their target-qualified 4.0.9 releases for the provider terrain-host ordering
repair. Forge 1.18.2 then advanced to `4.0.10.118021` for the distinct Stable
Layers actual-height eligibility repair. A branch may therefore legitimately
skip functional version numbers.
Layers actual-height eligibility repair, to `4.0.11.118021` to retain
biome-dictionary weights and ore biome filters for dynamic-registry biome
instances, and to `4.0.12.118021` so public geology samples classify the same
highest occupied block as chunk generation at vertical biome seams. It then
advanced to `4.0.13.118021` to restore API biome-filter parity and accept
provider-namespaced geomes in the creation editor, then to `4.0.14.118021` so
one-layer Snow above the motion-blocking surface is included in configured
weather-material conversion, then to `4.0.15.118021` so generated geology and
public samples use the same stable quart-biome cell at three-dimensional biome
boundaries, and then to `4.0.16.118021` so GameTest benchmark runs leave
shutdown and result reporting to the test harness. A branch
may therefore legitimately skip functional version numbers.

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=20220404.173914
mod_id=orespawn
mod_name=MMD OreSpawn
mod_license=LGPL-2.1
mod_version=4.0.10.118021
mod_version=4.0.16.118021
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