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
  •  
  •  
  •  
6 changes: 3 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -148,9 +148,9 @@ jobs:
if-no-files-found: error
retention-days: 30
path: |
build/libs/Mineralogy-6.1.2.121011.jar
build/libs/Mineralogy-6.1.2.121011-sources.jar
build/libs/Mineralogy-6.1.2.121011-javadoc.jar
build/libs/Mineralogy-6.1.4.121011.jar
build/libs/Mineralogy-6.1.4.121011-sources.jar
build/libs/Mineralogy-6.1.4.121011-javadoc.jar
build/release/SHA256SUMS
CHANGELOG.txt

Expand Down
25 changes: 23 additions & 2 deletions CHANGELOG.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,24 @@
Mineralogy 6.1.4.121011 for Minecraft 1.21.1 (Forge)

- Restored vanilla sculk catalyst conversion and dripstone/moss replacement on
37 natural terrain identities, including native aliases and special rocks.
- Sculk works in existing worlds after updating. Natural cave decoration can
use these rocks in newly generated chunks. No sulfur-cube tags on this target.
- Natural terrain now supports goat spawning. Horn breaking uses a separate
hard raw-rock whitelist, leaving soft rocks and crafted blocks out.
- Fixed the two dripstone helpers that still checked vanilla base stone
directly, without changing global base-stone or ore-host tags.
- Added common raw-stone, furnace, ore, storage and dyed-drywall classifications,
plus single-slab, stair and wall aggregates. Double-slab full blocks stay out.
- Made disabled construction references optional, guarded their loot pools,
and aligned normal cobblestone with the existing configurable root policy.
- Rock-salt lamps now keep the supporting post on straight and junction walls.
- Bare rock can be replaced by azalea roots without becoming azalea tree soil.
Existing OreSpawn carving order and ore-host eligibility remain unchanged.
- Added deterministic tag, real-loader/reload, vanilla consumer, cave sample
and packaged-runtime validation. No recipes, IDs, configurations, provider,
OreSpawn engine, translations, or existing textures changed.

Mineralogy 6.1.2.121011 for Minecraft 1.21.1

- Updated all pickaxe and harvest-tier tags to the supported optional
Expand Down Expand Up @@ -53,8 +74,8 @@ Mineralogy 6.1.2.121011 for Minecraft 1.21.1
- Reconciled Minecraft's native andesite, basalt, diorite, granite, and expanded
tuff family with
their retained Mineralogy world-compatibility blocks. Native blocks now
unlock and feed every non-conflicting matching Mineralogy recipe. The four
five vanilla polished-block recipes are replaced by block-plus-sand routes so
unlock and feed every non-conflicting matching Mineralogy recipe. The five
vanilla polished-block recipes are replaced by block-plus-sand routes so
the 2x2 recipes remain available for Mineralogy bricks. The six shared
andesite, diorite, granite, and tuff slab recipes plus all fifteen matching
stonecutter routes now produce Mineralogy's more capable slabs, while the
Expand Down
13 changes: 12 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,21 @@ 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.121011` for Forge `52.1.0` and is built
This branch builds Mineralogy `6.1.4.121011` for Forge `52.1.0` and is built
and tested against OreSpawn `4.0.16.121011`. Its declared compatibility range is
OreSpawn `[4.0.6,5.0.0)`. Install both mods on clients and servers.

Version 6.1.4 lets vanilla sculk, moss, dripstone, goats and forest-rock features
recognise natural Mineralogy terrain. It also fixes dripstone water pockets and
column boundaries, rock-salt lamp support on walls, and common stone, furnace,
ore, storage, dyed-colour and construction tags. Disabled construction options
no longer leave required tag or loot references behind.

Sculk, goat and wall-support changes work in existing worlds after updating.
Natural cave decoration changes need newly generated chunks. Terrain eligibility
is independent of cobblestone equivalence and excludes crafted blocks. Sulfur
cubes do not exist on this target.

## Configuration and help

Mineralogy's content and recipe switches remain in
Expand Down
9 changes: 6 additions & 3 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -579,7 +579,7 @@ tasks.register('verifyReleaseConfiguration') {
description = 'Verifies the exact Mineralogy 1.21.1 release identity.'
dependsOn tasks.named('verifyMavenizerCompatibilityFixture')
doLast {
if (project.mod_version != '6.1.2.121011'
if (project.mod_version != '6.1.4.121011'
|| project.mod_group != expectedMavenGroup
|| project.minecraft_version != '1.21.1'
|| project.forge_version != '52.1.0'
Expand All @@ -594,7 +594,7 @@ tasks.register('verifyReleaseDependencies') {
group = 'verification'
description = 'Resolves and verifies the exact released OreSpawn dependency.'
doLast {
if (project.mod_version != '6.1.2.121011'
if (project.mod_version != '6.1.4.121011'
|| project.minecraft_version != project.mc_version
|| project.mc_version != '1.21.1'
|| project.loader_name != 'forge'
Expand Down Expand Up @@ -1301,7 +1301,7 @@ tasks.register('verifyEclipseProductionClasspath') {
throw new GradleException('Eclipse output contains stale or unexpanded mods.toml metadata')
}
String eclipseMetadata = eclipseModsToml.getText('UTF-8')
if (eclipseMetadata.contains('${') || !eclipseMetadata.contains('version="6.1.2.121011"')) {
if (eclipseMetadata.contains('${') || !eclipseMetadata.contains('version="6.1.4.121011"')) {
throw new GradleException('Eclipse output contains unresolved or invalid Mineralogy version metadata')
}
}
Expand All @@ -1327,3 +1327,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'
18 changes: 18 additions & 0 deletions docs/DEVELOPER_GUIDE.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,23 @@
# Mineralogy Developer Guide

## Natural terrain interfaces

`mineralogy:terrain_rocks` contains the 32 provider outputs and five retained
legacy aliases. Its block and item forms stay independent of cobblestone
equivalence. Additive vanilla replacement and goat tags refer to the block
interface; crafted forms are excluded. `mineralogy:raw_stones` excludes sandstone
and feeds the available common stone tags. A separate hard-rock whitelist
controls horn breaking.

Two exact-count JavaScript hooks redirect only the proven dripstone water-pocket
and large-column base-stone reads to `mineralogy:dripstone_base_stones`. Global
base-stone, carver and ore-host tags remain unchanged. Azalea root replacement
does not make bare rock eligible tree soil. Optional construction entries and
item-existence loot guards allow disabled construction settings to load cleanly.

The focused resource contracts and non-shipping native probes are checked again
at release audit. Ports must make explicit decisions for newly introduced tags.

## Responsibility Split

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

## Vanilla stone compatibility in 6.1.4

Natural Mineralogy rocks now work with sculk spreading, moss and dripstone
replacement, goat spawning, azalea roots and forest-rock placement. Hard raw
rocks can break goat horns; soft rocks and crafted blocks cannot. Rock-salt
lamps also keep their supporting wall post, like a vanilla torch.

These interactions work in existing worlds after updating. Decoration changes
need newly generated chunks and do not promise a particular number of cave
features. Bare rock is not azalea tree soil. Sulfur cubes and the later bat
substrate tag do not exist in Minecraft 1.21.1.

## Installing

Mineralogy 6 needs Minecraft 1.21.1, Forge 52.1.0, and OreSpawn
Expand Down
45 changes: 36 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 Forge release is therefore:

```text
6.1.2.121011
6.1.4.121011
```

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.121011`, not `1.21.1-6.1.2.121011`. The Target already makes tags unique
`6.1.4.121011`, not `1.21.1-6.1.4.121011`. 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.21.1 | Forge | `121011` | `6.1.2.121011` |
| 1.21.1 | Forge | `121011` | `6.1.4.121011` |
| 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,33 @@ 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 release targets share the 6.1.4 terrain compatibility fixes.
Each target is published separately; this matrix does not mean every file is live.
NeoForge 26.3 retains its existing 6.1.3 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 where each interface exists.
Minecraft 1.17 retains its native goat-spawning rule. Sulfur cubes on 26.2 and
26.3 consume only raw Mineralogy rocks, not polished or brick forms; vanilla's
own consumption rules are unchanged. Native-texture synchronization remains a
separate update.

## Major version

The **Major** number changes for a fundamental or breaking new generation of
Expand All @@ -93,7 +120,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.121011 -> 6.2.0.121011
6.1.4.121011 -> 6.2.0.121011
6.2.4.121011 -> 7.0.0.121011
```

Expand Down Expand Up @@ -123,7 +150,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.21.1 / Forge / Mineralogy 6.1.2.121011
Minecraft 1.21.1 / Forge / Mineralogy 6.1.4.121011
```

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

Expand All @@ -169,7 +196,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 Forge loader. CI build numbers are not appended. For this
branch, published metadata and artifacts therefore use `6.1.2.121011`.
branch, published metadata and artifacts therefore use `6.1.4.121011`.

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
net.minecraftforge.gradle.merge-source-sets=false

mod_version=6.1.2.121011
mod_version=6.1.4.121011
mod_group=zone.moddev.mc

# Release metadata consumed by the generic dispatcher.
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' }
}
tasks.named('check') { dependsOn tasks.named('compileTerrainCompatibilityProbe') }
Loading
Loading