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.121112.jar
build/libs/Mineralogy-6.1.2.121112-sources.jar
build/libs/Mineralogy-6.1.2.121112-javadoc.jar
build/libs/Mineralogy-6.1.4.121112.jar
build/libs/Mineralogy-6.1.4.121112-sources.jar
build/libs/Mineralogy-6.1.4.121112-javadoc.jar
build/release/SHA256SUMS
CHANGELOG.txt
- name: Upload diagnostics on failure
Expand Down
24 changes: 24 additions & 0 deletions CHANGELOG.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,27 @@
Mineralogy 6.1.4.121112 for Minecraft 1.21.11 NeoForge

- Completed natural-stone tags for cave decoration, goats and bats, and added
an explicit hard-rock horn-breaking list. Crafted blocks remain excluded.
- Classified single/upright slabs, stairs, walls, furnaces, ores, storage blocks
and coloured drywall through the appropriate vanilla and common tags.
- Fixed dripstone water-pocket and large-column boundaries on natural rocks,
and rock-salt lamp support on straight walls. Ore and carver hosts are unchanged.
- Let the native forest-rock feature place on natural Mineralogy substrates,
preserving its vanilla stone/dirt checks without making bare rock tree soil.
- Made optional construction tag entries safe when construction is disabled,
and skipped recipes, advancements and loot that require unregistered items.
Enabled recipe and drop payloads, identities and config settings are unchanged.
- Restored natural bat spawning on Mineralogy terrain through the additive
vanilla bats_spawnable_on block tag. Applies to existing worlds, preserves
normal light/height restrictions, and excludes crafted construction blocks.
Eligibility is independent of cobblestone equivalence.
- 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
improves in new chunks. No provider, config, registry, enabled recipe, texture or
OreSpawn changes. Sulfur-cube resources are not applicable before 26.2.

Mineralogy 6.1.2.121112 for Minecraft 1.21.11 NeoForge

- Ported the accepted NeoForge 1.21.1 product to Minecraft 1.21.11 and
Expand Down
21 changes: 20 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,32 @@ 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.121112` for NeoForge `21.11.45` and is built
This branch builds Mineralogy `6.1.4.121112` for NeoForge `21.11.45` and is built
and tested against OreSpawn `4.0.16.121112`. 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.11 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
improves in newly generated chunks. Sulfur-cube compatibility is only for 26.2+.

Natural bats can spawn above Mineralogy terrain under Minecraft's normal dark,
below-surface conditions. The additive bat tag applies to existing worlds and
is independent of cobblestone equivalence; crafted construction blocks remain
excluded.

Natural rocks also support goat spawning and horn breaking on the appropriate
hard substrates. Slabs, stairs, walls, furnaces, ores, storage blocks and coloured
drywall now have the common tags expected by other mods. Rock-salt lamps work
on straight walls as well as wall junctions. The two dripstone boundary checks
accept natural Mineralogy terrain without changing vanilla ore or carver hosts.
Turning construction off also skips resources that require the absent items;
enabled recipes and drops are unchanged.

## Configuration and help

Mineralogy's content and recipe switches remain in
Expand Down
17 changes: 11 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.11 NeoForge release identity.'
doLast {
if (project.mod_version != '6.1.2.121112'
if (project.mod_version != '6.1.4.121112'
|| project.mod_group != expectedMavenGroup
|| project.minecraft_version != '1.21.11'
|| project.neo_version != '21.11.45') {
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.121112'
if (project.mod_version != '6.1.4.121112'
|| project.minecraft_version != project.mc_version
|| project.mc_version != '1.21.11'
|| project.loader_name != 'neoforge'
Expand Down Expand Up @@ -792,8 +792,10 @@ tasks.register('verifyReleaseArtifacts') {
"data/mineralogy/advancement/recipes/${bridge.name}.json")))
if (recipe.type != 'minecraft:crafting_shapeless' || recipe.ingredients?.size() != 1 ||
recipe.ingredients[0] != 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:registered', registry: 'minecraft:item',
value: 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 @@ -855,8 +857,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:registered', registry: 'minecraft:item', value: 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 @@ -1140,3 +1142,6 @@ 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
@@ -1,5 +1,20 @@
# Mineralogy Developer Guide

## Focused compatibility interfaces

Use mineralogy:terrain_rocks for natural terrain replacement, raw_stones for
common stone classification and the explicit horn-breaking whitelist for hard
raw rocks. Crafted forms do not inherit terrain eligibility. Single/upright
slabs join slab aggregates; separate double slabs do not. Config-dependent
construction IDs are optional tag objects. Native registration conditions guard
their recipes and matching advancements; existing construction flags guard loot.
Enabled payloads are unchanged. Dripstone redirects target only water-pocket
containment and large-column boundaries, with exactly one hook each. Do not
broaden base-stone, carver or ore-host tags to solve these consumer checks.
NeoForge 21.11 also needs one redirect of BlockBlobFeature's direct isStone
call. It preserves the native check and adds only forest_rock_substrates,
which references natural terrain. Bare rock is not added to azalea tree soil.

## Responsibility Split

| Mineralogy owns | OreSpawn owns |
Expand Down
9 changes: 9 additions & 0 deletions docs/PLAYER_GUIDE.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
# Mineralogy Player Guide

## Natural stone compatibility in 6.1.4

Sculk, moss, dripstone, goats and bats recognise natural Mineralogy terrain.
Horn breaking uses the hard raw-rock whitelist; soft rocks and crafted forms
are excluded. These rules do not depend on cobblestone equivalence. Existing
worlds gain the behaviour fixes after updating; cave decoration changes new
chunks. Rock-salt lamps also stand correctly on straight and junction walls.
Disabled construction does not leave recipes or drops for missing blocks.

## Installing

Mineralogy 6 needs Minecraft 1.21.11, NeoForge 21.11.45, and OreSpawn
Expand Down
75 changes: 55 additions & 20 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.11 NeoForge release is therefore:

```text
6.1.2.121112
6.1.4.121112
```

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.121112`, not `1.21.11-6.1.2.121112`. The Target already makes tags unique
`6.1.4.121112`, not `1.21.11-6.1.4.121112`. The Target already makes tags unique
across Minecraft versions and loaders.

## Reading the target component
Expand All @@ -50,19 +50,19 @@ minor digits, and all remaining digits for the Minecraft major version.
| 1.12.2 | Forge | `112021` | `6.0.1.112021` |
| 1.14.4 | Forge | `114041` | `6.0.1.114041` |
| 1.15.2 | Forge | `115021` | `6.0.1.115021` |
| 1.16.5 | Forge | `116051` | `6.1.0.116051` |
| 1.17.1 | Forge | `117011` | `6.1.0.117011` |
| 1.18.2 | Forge | `118021` | `6.1.2.118021` |
| 1.19.4 | Forge | `119041` | `6.1.2.119041` |
| 1.20.1 | Forge | `120011` | `6.1.2.120011` |
| 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.11 | Forge | `121111` | `6.1.2.121111` |
| 1.21.11 | NeoForge | `121112` | `6.1.2.121112` |
| 26.2 | Forge | `2602001` | `6.0.0.2602001` |
| 26.2 | NeoForge | `2602002` | `6.0.0.2602002` |
| 1.16.5 | Forge | `116051` | `6.1.4.116051` |
| 1.17.1 | Forge | `117011` | `6.1.4.117011` |
| 1.18.2 | Forge | `118021` | `6.1.4.118021` |
| 1.19.4 | Forge | `119041` | `6.1.4.119041` |
| 1.20.1 | Forge | `120011` | `6.1.4.120011` |
| 1.20.6 | Forge | `120061` | `6.1.4.120061` |
| 1.20.6 | NeoForge | `120062` | `6.1.4.120062` |
| 1.21.1 | Forge | `121011` | `6.1.4.121011` |
| 1.21.1 | NeoForge | `121012` | `6.1.4.121012` |
| 1.21.11 | Forge | `121111` | `6.1.4.121111` |
| 1.21.11 | NeoForge | `121112` | `6.1.4.121112` |
| 26.2 | Forge | `2602001` | `6.1.4.2602001` |
| 26.2 | NeoForge | `2602002` | `6.1.4.2602002` |

The 1.21.11 NeoForge row records this branch's current release. The other rows illustrate
target encoding or earlier releases; they do not claim that later Minecraft
Expand All @@ -72,6 +72,35 @@ 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 |

The revised campaign includes Forge 1.16.5–1.18.2 with only the interfaces
available on each target. Native-texture synchronization remains a separate
campaign. Sulfur cubes consume only raw Mineralogy rocks on 26.2/26.3; no
sulfur-cube resources apply to this 1.21.11 target. Existing worlds gain the
behaviour fixes after updating; natural decoration changes newly generated
chunks.

## Major version

The **Major** number changes for a fundamental or breaking new generation of
Expand Down Expand Up @@ -127,7 +156,7 @@ Minecraft 1.19.4 / Forge / Mineralogy 6.1.2.119041
Minecraft 1.20.1 / Forge / Mineralogy 6.1.2.120011
Minecraft 1.20.6 / Forge / Mineralogy 6.1.2.120061
Minecraft 1.21.1 / NeoForge / Mineralogy 6.1.2.121012
Minecraft 1.21.11 / NeoForge / Mineralogy 6.1.2.121112
Minecraft 1.21.11 / NeoForge / Mineralogy 6.1.4.121112
```

Minecraft and loader APIs may require different internal code without changing
Expand Down Expand Up @@ -160,7 +189,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.11 NeoForge release used for
this candidate is `4.0.16.121112`. The dependency range deliberately describes the supported
this release is `4.0.16.121112`. The dependency range deliberately describes the supported
functional OreSpawn generation; NeoForge still prevents jars for another
Minecraft target from loading together.

Expand All @@ -170,10 +199,16 @@ feature generation, not the exact jar.

## Builds and release notes

This 6.1.4 release also repairs natural bat substrate eligibility.
Minecraft introduced the bats_spawnable_on block tag in 1.21.2; the compatibility
interface belongs only on 1.21.2-and-later targets. Earlier targets retain their
existing spawn checks. The additive block tag reuses natural terrain membership,
not the broad base_stone_overworld tag, and preserves vanilla spawn restrictions.

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.121112`.
branch, published metadata and artifacts therefore use `6.1.4.121112`.

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 @@ -7,7 +7,7 @@ org.gradle.caching=true
org.gradle.parallel=false
neogradle.subsystems.decompiler.enabled=true

mod_version=6.1.2.121112
mod_version=6.1.4.121112
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