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.120062.jar
build/libs/Mineralogy-6.1.2.120062-sources.jar
build/libs/Mineralogy-6.1.2.120062-javadoc.jar
build/libs/Mineralogy-6.1.4.120062.jar
build/libs/Mineralogy-6.1.4.120062-sources.jar
build/libs/Mineralogy-6.1.4.120062-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.120062 for Minecraft 1.20.6 NeoForge

- Natural rocks now work with sculk catalysts, moss, dripstone, azalea roots
and forest rocks. Goats can spawn on them and lose horns against the hard
raw-rock whitelist; soft rocks and crafted forms remain excluded.
- Fixed the two direct dripstone checks and the forest-rock substrate check
without broadening global base-stone or ore-host tags. Rock-salt lamps keep
wall posts upright like vanilla torches.
- Added the appropriate raw-stone, slab, stair, wall, furnace-workstation,
ore, storage and dyed-colour classifications, preserving existing members.
- Construction switches no longer leave required references to absent blocks
or items in tags, recipes, advancements and loot. Enabled recipes and drops
are unchanged, and cobblestone equivalence remains a separate setting.
- Interaction fixes apply to existing worlds; natural cave decoration changes
newly generated chunks. Provider, configuration, registry, migration,
texture, translation and OreSpawn identities are unchanged. Sulfur cubes
and the later bat substrate tag do not exist on this target.

Mineralogy 6.1.2.120062 for Minecraft 1.20.6 NeoForge

- Added the first NeoForge Mineralogy baseline while retaining gameplay,
Expand Down
14 changes: 13 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,25 @@ 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.120062` for NeoForge `20.6.139` and is built
This branch builds Mineralogy `6.1.4.120062` for NeoForge `20.6.139` and is built
and tested against OreSpawn `4.0.16.120062`. 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.20.6 branch; use the jar that matches the loader in your modpack.

Mineralogy 6.1.4 lets sculk catalysts, moss, dripstone, azalea roots and forest
rocks recognise natural Mineralogy terrain. Goats can spawn on it and break
their horns against the supported hard raw rocks, while soft and crafted forms
stay excluded. These rules do not depend on cobblestone equivalence. Existing
worlds gain the interaction fixes; natural decoration changes new chunks.

Slabs, stairs, walls, furnaces, ores, storage blocks and coloured drywall now
join their appropriate vanilla and common tags. Disabling construction no
longer leaves missing tag, recipe, advancement or loot references. Enabled
recipes and drops are unchanged. Sulfur cubes and the later bat substrate tag
are not available on Minecraft 1.20.6.

## 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 @@ -433,7 +433,7 @@ tasks.register('verifyReleaseConfiguration') {
group = 'verification'
description = 'Verifies the exact Mineralogy 1.20.6 NeoForge release identity.'
doLast {
if (project.mod_version != '6.1.2.120062'
if (project.mod_version != '6.1.4.120062'
|| project.mod_group != expectedMavenGroup
|| project.minecraft_version != '1.20.6'
|| project.neo_version != '20.6.139') {
Expand All @@ -446,7 +446,7 @@ tasks.register('verifyReleaseDependencies') {
group = 'verification'
description = 'Resolves and verifies the exact released OreSpawn dependency.'
doLast {
if (project.mod_version != '6.1.2.120062'
if (project.mod_version != '6.1.4.120062'
|| project.minecraft_version != project.mc_version
|| project.mc_version != '1.20.6'
|| project.loader_name != 'neoforge'
Expand Down Expand Up @@ -670,8 +670,9 @@ tasks.register('verifyReleaseArtifacts') {
"data/mineralogy/advancements/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 @@ -727,8 +728,8 @@ tasks.register('verifyReleaseArtifacts') {
}
slabOverrides.each { recipe ->
def data = new JsonSlurper().parse(zip.getInputStream(zip.getEntry("data/minecraft/recipes/${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 @@ -1000,3 +1001,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'
16 changes: 16 additions & 0 deletions docs/DEVELOPER_GUIDE.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,21 @@
# Mineralogy Developer Guide

## Vanilla terrain compatibility

`mineralogy:terrain_rocks` is the natural-terrain interface, derived from the
provider outputs and retained aliases. Crafted forms are excluded. Dedicated
replacement, goat/horn, root and forest-rock tags preserve native and third-party
members without broadening global stone or ore-host tags. Common `c:` tags
classify raw stones, furnace workstations, ores, storage blocks and dyed drywall.

This target uses plural data paths and three narrowly scoped, exact-count
JavaScript redirects for proven direct dripstone and forest-rock checks. The
legacy conversion coremod is separate and unchanged. Config-dependent members
are optional objects inside `values`. Recipes and matching advancements use
NeoForge's native `neoforge:item_exists` condition; loot guards use the existing
construction flags and their registration prerequisites. Enabled payloads and
public IDs are unchanged. Keep the full local tag index out of published jars.

## Responsibility Split

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

## What changes in 6.1.4

Natural rocks work with sculk catalysts, moss, dripstone, azalea roots and
forest rocks. Goats can spawn on them; only the supported hard raw rocks break
horns. Crafted forms stay out of natural replacement, and these rules do not
depend on cobblestone equivalence. Existing worlds gain the interaction fixes;
natural cave decoration changes newly generated chunks. Construction switches
also keep tags, recipes, recipe-book entries and drops safe when blocks are off.
Sulfur cubes and the later bat substrate tag do not exist in Minecraft 1.20.6.

## Installing

Mineralogy 6 needs Minecraft 1.20.6, NeoForge 20.6.139, and OreSpawn
Expand Down
42 changes: 33 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.20.6 NeoForge release is therefore:

```text
6.1.2.120062
6.1.4.120062
```

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.120062`, not `1.20.6-6.1.2.120062`. The Target already makes tags unique
`6.1.4.120062`, not `1.20.6-6.1.4.120062`. The Target already makes tags unique
across Minecraft versions and loaders.

## Reading the target component
Expand Down Expand Up @@ -56,7 +56,7 @@ minor digits, and all remaining digits for the Minecraft major version.
| 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.20.6 | NeoForge | `120062` | `6.1.4.120062` |
| 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 @@ -69,6 +69,30 @@ 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 targets share the 6.1.4 terrain and tag compatibility fixes.
This release matrix does not claim that every target is already published.
NeoForge 26.3 retains its existing 6.1.3 compatibility correction.

| Minecraft | Forge release | NeoForge release |
| --- | --- | --- |
| 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 |

Sulfur cubes in 26.2/26.3 accept Mineralogy's raw rocks only; polished and brick
Mineralogy blocks are excluded. Vanilla consumption rules are unchanged.
Older 1.13–1.15 ports and native-texture synchronization remain separate work.

## Major version

The **Major** number changes for a fundamental or breaking new generation of
Expand All @@ -93,7 +117,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.120062 -> 6.2.0.120062
6.1.4.120062 -> 6.2.0.120062
6.2.4.120062 -> 7.0.0.120062
```

Expand Down Expand Up @@ -123,7 +147,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.20.6 / Forge / Mineralogy 6.1.2.120061
Minecraft 1.20.6 / NeoForge / Mineralogy 6.1.2.120062
Minecraft 1.20.6 / NeoForge / Mineralogy 6.1.4.120062
```

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

Expand All @@ -169,7 +193,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.120062`.
branch, published metadata and artifacts therefore use `6.1.4.120062`.

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.120062
mod_version=6.1.4.120062
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