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
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
6 changes: 3 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -95,9 +95,9 @@ jobs:
if-no-files-found: error
retention-days: 30
path: |
build/libs/Mineralogy-6.1.2.121012.jar
build/libs/Mineralogy-6.1.2.121012-sources.jar
build/libs/Mineralogy-6.1.2.121012-javadoc.jar
build/libs/Mineralogy-6.1.4.121012.jar
build/libs/Mineralogy-6.1.4.121012-sources.jar
build/libs/Mineralogy-6.1.4.121012-javadoc.jar
build/release/SHA256SUMS
CHANGELOG.txt
- name: Upload diagnostics on failure
Expand Down
18 changes: 18 additions & 0 deletions CHANGELOG.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,21 @@
Mineralogy 6.1.4.121012 for Minecraft 1.21.1 NeoForge

- Added matching 37-member terrain-rock block/item tags and additive vanilla
sculk, dripstone and moss replacement interfaces, preserving existing members.
- Natural replacement is independent of cobblestone equivalence and excludes
crafted forms. Sculk/moss eligibility updates existing worlds; cave decoration
uses the right substrates in new chunks. Provider, config, registry, texture
and OreSpawn identities are unchanged. Sulfur-cube resources do not apply here.
- Natural rock now supports goat spawning, with a separate hard-rock whitelist
for breaking horns. Slabs, stairs, walls, furnaces, ores, storage blocks and
coloured drywall join their appropriate vanilla or common tags.
- Fixed the direct vanilla checks that blocked dripstone water pockets, large
columns and forest rocks on Mineralogy terrain. Azalea roots can replace rock;
bare rock has not been made suitable soil for growing an azalea tree.
- Rock-salt lamps keep the expected wall post. Disabled construction no longer
leaves broken tag, recipe, advancement or loot references. Enabled recipes,
progression and drops are unchanged.

Mineralogy 6.1.2.121012 for Minecraft 1.21.1 NeoForge

- Ported the accepted NeoForge feature and compatibility contract to Minecraft
Expand Down
13 changes: 12 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,24 @@ mineral ores and dusts, rock furnaces, drywall, rock-salt lighting, fertilizer,
and crude oil. OreSpawn 4 is the sole terrain, strata, ore, and deposit engine;
Mineralogy no longer installs a parallel world generator.

This branch builds Mineralogy `6.1.2.121012` for NeoForge `21.1.247` and is built
This branch builds Mineralogy `6.1.4.121012` for NeoForge `21.1.247` and is built
and tested against OreSpawn `4.0.16.121012`. Its declared compatibility range is
OreSpawn `[4.0.6,5.0.0)`. Install both mods on clients and servers.

This is the NeoForge build. It is intentionally maintained separately from the
Forge 1.21.1 branch; use the jar that matches the loader in your modpack.

Mineralogy 6.1.4 restores sculk catalyst conversion, moss growth and dripstone
decoration on natural Mineralogy terrain. Eligibility is independent of
cobblestone equivalence; crafted blocks are excluded from natural replacement.
Sculk and moss behavior updates existing worlds; natural cave decoration
uses the correct substrates in newly generated chunks. Sulfur-cube compatibility
is only for 26.2+ and covers raw Mineralogy rock, not polished or crafted forms.
Natural rocks also support goat spawning and horn breaking on the intended hard
substrates. Slabs, stairs and walls participate in their normal construction
tags; rock furnaces, ores, storage blocks and dyed drywall use the common tags.
Turning construction off no longer leaves missing tag or loot references.

## Configuration and help

Mineralogy's content and recipe switches remain in
Expand Down
15 changes: 9 additions & 6 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -462,7 +462,7 @@ tasks.register('verifyReleaseConfiguration') {
group = 'verification'
description = 'Verifies the exact Mineralogy 1.21.1 NeoForge release identity.'
doLast {
if (project.mod_version != '6.1.2.121012'
if (project.mod_version != '6.1.4.121012'
|| project.mod_group != expectedMavenGroup
|| project.minecraft_version != '1.21.1'
|| project.neo_version != '21.1.247') {
Expand All @@ -475,7 +475,7 @@ tasks.register('verifyReleaseDependencies') {
group = 'verification'
description = 'Resolves and verifies the exact released OreSpawn dependency.'
doLast {
if (project.mod_version != '6.1.2.121012'
if (project.mod_version != '6.1.4.121012'
|| project.minecraft_version != project.mc_version
|| project.mc_version != '1.21.1'
|| project.loader_name != 'neoforge'
Expand Down Expand Up @@ -718,8 +718,9 @@ tasks.register('verifyReleaseArtifacts') {
"data/mineralogy/advancement/recipes/${bridge.name}.json")))
if (recipe.type != 'minecraft:crafting_shapeless' || recipe.ingredients?.size() != 1 ||
recipe.ingredients[0].item != bridge.source || recipe.result?.id != bridge.result ||
recipe.result?.count != 1 || recipe.containsKey('neoforge:conditions') ||
advancement.containsKey('neoforge:conditions') ||
recipe.result?.count != 1 ||
recipe['neoforge:conditions'] != [[type: 'neoforge:item_exists', item: bridge.source.startsWith('mineralogy:') ? bridge.source : bridge.result]] ||
advancement['neoforge:conditions'] != recipe['neoforge:conditions'] ||
advancement.criteria?.has_rock?.conditions?.items?.getAt(0)?.items != bridge.source) {
throw new GradleException("Invalid native/Mineralogy slab conversion: ${bridge.name}")
}
Expand Down Expand Up @@ -781,8 +782,8 @@ tasks.register('verifyReleaseArtifacts') {
}
slabOverrides.each { recipe ->
def data = new JsonSlurper().parse(zip.getInputStream(zip.getEntry("data/minecraft/recipe/${recipe}.json")))
if (data.containsKey('neoforge:conditions')) {
throw new GradleException("Guaranteed Mineralogy slab override must be unconditional: ${recipe}")
if (data['neoforge:conditions'] != [[type: 'neoforge:item_exists', item: data.result?.id]]) {
throw new GradleException("Invalid optional Mineralogy slab guard: ${recipe}")
}
if (recipe.endsWith('_stonecutting')) {
if (!(data.result instanceof Map) || data.result.id == null
Expand Down Expand Up @@ -1054,3 +1055,5 @@ tasks.named('check') {
dependsOn tasks.named('verifyOilCompatibilityFixtureIsolation')
dependsOn tasks.named('compileRecipeIntegrationFixture')
}
apply from: 'gradle/verify-terrain-compatibility.gradle'
apply from: 'gradle/terrain-compatibility-probe.gradle'
15 changes: 15 additions & 0 deletions docs/DEVELOPER_GUIDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -175,3 +175,18 @@ guide under `META-INF/mineralogy/docs/`.
The complete release version is `Major.Minor.Bug.Target`; see
[Mineralogy Versioning](VERSIONS.md). This branch validates target `121012`
for Minecraft 1.21.1 NeoForge and does not append CI build numbers.
# Terrain interfaces in 6.1.4

`mineralogy:terrain_rocks` is the natural-terrain block/item interface, derived
from provider outputs and retained legacy aliases. Crafted forms, ores, lamps,
furnaces and storage conversions are excluded. Common stone classification
uses the narrower raw-stone interface and excludes sandstone. Construction
members that configuration can remove use optional objects inside `values`.

Three exact-count JavaScript hooks preserve native checks while adding dedicated
terrain eligibility for dripstone water pockets, large columns and forest rocks.
They do not broaden vanilla base-stone, carver or ore-host tags. Recipe and
advancement resources use this target's native `neoforge:item_exists` conditions
for optional construction IDs. Loot guards retain the existing construction
flags and nested registration prerequisites. Enabled payloads and public IDs
remain unchanged; tests and artifact audits enforce these contracts.
12 changes: 12 additions & 0 deletions docs/PLAYER_GUIDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -218,3 +218,15 @@ Each world stores its complete worldgen profile at:
Copy the complete world, including that file, to a dedicated server and
install the same required mods. For advanced setup, read
`config/mineralogy-guide/` and `config/orespawn-guide/` after one start.
# Natural stone compatibility in 6.1.4

Sculk catalysts and moss can work on natural Mineralogy terrain in existing
worlds. Goat spawning and horn breaking use separate substrate rules: soft
rocks and crafted blocks are not horn-breaking surfaces. Dripstone, azalea
roots and forest rocks can use the intended natural substrates when new chunks
are generated. Bare rock is still not soil for growing an azalea tree.

Single and upright slabs, stairs and walls use normal construction tags;
separate double-slab full blocks are excluded. Rock-salt lamps retain their
wall post. These rules do not depend on cobblestone equivalence. Sulfur cubes
exist only on 26.2+ builds; their Mineralogy contribution is raw rock only.
44 changes: 35 additions & 9 deletions docs/VERSIONS.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,14 @@ exact Minecraft/loader target are both visible in one number.
Major.Minor.Bug.Target
```

The first three components are the **functional version**. Mineralogy `6.1.2`
means major generation 6, minor release 1, and bug revision 2.
The first three components are the **functional version**. Mineralogy `6.1.4`
means major generation 6, minor release 1, and bug revision 4.

The fourth component identifies the target build. The complete version for
this Minecraft 1.21.1 NeoForge release is therefore:

```text
6.1.2.121012
6.1.4.121012
```

This expanded numeric form is compatible with Maven version ordering, but it
Expand All @@ -25,7 +25,7 @@ components.

The release tag is exactly the complete four-component version, with no
redundant Minecraft-version prefix. For this branch the tag is therefore
`6.1.2.121012`, not `1.21.1-6.1.2.121012`. The Target already makes tags unique
`6.1.4.121012`, not `1.21.1-6.1.4.121012`. The Target already makes tags unique
across Minecraft versions and loaders.

## Reading the target component
Expand Down Expand Up @@ -58,7 +58,7 @@ minor digits, and all remaining digits for the Minecraft major version.
| 1.20.6 | Forge | `120061` | `6.1.2.120061` |
| 1.20.6 | NeoForge | `120062` | `6.1.2.120062` |
| 1.21.1 | Forge | `121011` | `6.1.2.121011` |
| 1.21.1 | NeoForge | `121012` | `6.1.2.121012` |
| 1.21.1 | NeoForge | `121012` | `6.1.4.121012` |
| 1.21.11 | Forge | `121111` | `6.1.2.121111` |
| 26.2 | Forge | `2602001` | `6.0.0.2602001` |
| 26.2 | NeoForge | `2602002` | `6.0.0.2602002` |
Expand All @@ -71,6 +71,32 @@ Historical Mineralogy releases may also have four numeric components that used
the last number as an ordinary build sequence. The target policy applies to
new releases and does not reinterpret an old file's version.

## Vanilla stone compatibility campaign

The following versions make up the 6.1.4 compatibility release campaign.
Publication proceeds separately for each target; this matrix does not claim
that every release is already available. NeoForge 26.3 retains its earlier
compatibility correction.

| Minecraft | Forge version | NeoForge version |
| --- | --- | --- |
| 1.16.5 | 6.1.4.116051 | Not in scope |
| 1.17.1 | 6.1.4.117011 | Not in scope |
| 1.18.2 | 6.1.4.118021 | Not in scope |
| 1.19.4 | 6.1.4.119041 | Not in scope |
| 1.20.1 | 6.1.4.120011 | Not in scope |
| 1.20.6 | 6.1.4.120061 | 6.1.4.120062 |
| 1.21.1 | 6.1.4.121011 | 6.1.4.121012 |
| 1.21.11 | 6.1.4.121111 | 6.1.4.121112 |
| 26.1.2 | 6.1.4.2601021 | 6.1.4.2601022 |
| 26.2 | 6.1.4.2602001 | 6.1.4.2602002 |
| 26.3 | 6.1.4.2603001 | 6.1.4.2603002 |

Interfaces apply only where the target provides them: sculk starts with 1.19,
bat substrate tags apply to the newer targets, and sulfur cubes on 26.2+ accept
raw Mineralogy rock only. Earlier cave and construction fixes are included on
1.16–1.18 where applicable. Native-texture synchronization remains separate.

## Major version

The **Major** number changes for a fundamental or breaking new generation of
Expand All @@ -95,7 +121,7 @@ When Major changes, Minor and Bug reset to zero. When Minor changes, Bug resets
to zero. The target for the actual build is then appended:

```text
6.1.2.121012 -> 6.2.0.121012
6.1.4.121012 -> 6.2.0.121012
6.2.4.121012 -> 7.0.0.121012
```

Expand Down Expand Up @@ -125,7 +151,7 @@ Minecraft 1.18.2 / Forge / Mineralogy 6.1.2.118021
Minecraft 1.19.4 / Forge / Mineralogy 6.1.2.119041
Minecraft 1.20.1 / Forge / Mineralogy 6.1.2.120011
Minecraft 1.21.1 / Forge / Mineralogy 6.1.2.120061
Minecraft 1.21.1 / NeoForge / Mineralogy 6.1.2.121012
Minecraft 1.21.1 / NeoForge / Mineralogy 6.1.4.121012
```

Minecraft and loader APIs may require different internal code without changing
Expand Down Expand Up @@ -158,7 +184,7 @@ particular jar can load on the current game.

Mineralogy 6 also requires OreSpawn `[4.0.6,5.0.0)`. OreSpawn uses the same
target calculation, so the matching Minecraft 1.21.1 NeoForge release used for
this candidate is `4.0.16.121012`. The dependency range deliberately describes the supported
this release is `4.0.16.121012`. The dependency range deliberately describes the supported
functional OreSpawn generation; NeoForge still prevents jars for another
Minecraft target from loading together.

Expand All @@ -171,7 +197,7 @@ feature generation, not the exact jar.
The Gradle build reads the complete version from `mod_version`, verifies that
it has four numeric components, and checks that its Target matches the declared
Minecraft version and NeoForge loader. CI build numbers are not appended. For this
branch, published metadata and artifacts therefore use `6.1.2.121012`.
branch, published metadata and artifacts therefore use `6.1.4.121012`.

Every release note should state:

Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ org.gradle.configuration-cache=false
org.gradle.caching=true
org.gradle.parallel=false

mod_version=6.1.2.121012
mod_version=6.1.4.121012
mod_group=zone.moddev.mc.mineralogy
mod_group_id=zone.moddev.mc.mineralogy
mod_id=mineralogy
Expand Down
23 changes: 23 additions & 0 deletions gradle/terrain-compatibility-probe.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
def probeClasses = layout.buildDirectory.dir('terrain-compatibility-fixture/classes')
tasks.register('compileTerrainCompatibilityProbe', JavaCompile) {
dependsOn tasks.named('classes'), tasks.named('compileRecipeIntegrationFixture')
source fileTree('src/terrainCompatibilityTest/java')
classpath = files(sourceSets.main.output, sourceSets.main.compileClasspath, layout.buildDirectory.dir('recipe-integration-fixture/classes'))
destinationDirectory = probeClasses
javaCompiler = javaToolchains.compilerFor {
languageVersion = JavaLanguageVersion.of(Integer.parseInt(project.java_version))
vendor = JvmVendorSpec.ADOPTIUM
}
options.encoding = 'UTF-8'
options.release = Integer.parseInt(project.java_version)
}
tasks.register('terrainCompatibilityProbeJar', Jar) {
dependsOn tasks.named('compileTerrainCompatibilityProbe')
archiveFileName = 'terraincompatibilityprobe.jar'
destinationDirectory = layout.buildDirectory.dir('terrain-compatibility-fixture')
from probeClasses
from 'src/terrainCompatibilityTest/resources'
from(layout.buildDirectory.dir('recipe-integration-fixture/classes')) { include 'zone/moddev/mc/mineralogy/fixture/RecipeIntegrationAssertions*.class' }
from('src/test/resources') { include 'tag-compatibility-contract.json', 'construction-resource-contract.json' }
}
tasks.named('check') { dependsOn tasks.named('compileTerrainCompatibilityProbe') }
Loading
Loading