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

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.117011 for Minecraft 1.17.1 Forge

- Fixed mining tags so all intended blocks load into their pickaxe and tool-tier
tags. Optional construction entries now use the format Minecraft accepts.
- Moss, dripstone, azalea roots and forest rocks recognise natural Mineralogy
terrain in newly generated chunks. Direct dripstone checks use a dedicated
interface, without changing global base-stone or ore-host tags.
- Single and upright slabs, stairs and walls use the matching vanilla tags;
raw stones and ore/storage blocks use common interoperability aggregates.
- Rock-salt lamps keep their posts on walls. Config-disabled construction
forms no longer leave required tags or loot entries.
- Normal cobblestone follows the existing option, retaining chert, pumice and
other mods' members. Minecraft 1.17 goat spawning stays unchanged.
- Rock furnaces keep their block-entity state in step when lighting and cooling,
preserving their contents, fuel and facing through the transition.
- Mining, lamp support and furnace fixes apply to existing worlds after updating.
- Recipes, IDs, configs, providers, migrations, textures and OreSpawn are unchanged.

Mineralogy 6.1.1.117011 for Minecraft 1.17.1

- Corrected relief occlusion so their intentionally open centres reveal the
Expand Down
14 changes: 13 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,22 @@ 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.1.117011` for Forge `37.1.1` and is built
This branch builds Mineralogy `6.1.4.117011` for Forge `37.1.1` and is built
and tested against OreSpawn `4.0.9.117011`. Its declared compatibility range is
OreSpawn `[4.0.6,5.0.0)`. Install both mods on clients and servers.

Mineralogy 6.1.4 restores the intended mining tags and lets moss, dripstone,
azalea roots and forest rocks recognise natural Mineralogy terrain. Cave
decoration changes appear in newly generated chunks. Rock-salt lamps keep
their wall posts, and disabled construction types no longer leave required
tag or loot references. Common stone and shape tags describe the matching
raw rocks and single slabs, stairs and walls; crafted blocks stay out of
natural replacement tags. Goat spawning keeps Minecraft 1.17's native rules.
Rock furnaces also keep their retained block entity in step with lit/unlit
transitions, without losing contents, fuel or facing.
Mining, lamp support and furnace fixes also apply to existing worlds after updating.
Recipes, IDs, configs, providers, migrations, textures and OreSpawn are unchanged.

## Configuration and help

Mineralogy's content and recipe switches remain in
Expand Down
7 changes: 5 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -336,7 +336,7 @@ tasks.register('verifyReleaseConfiguration') {
group = 'verification'
description = 'Verifies the exact Mineralogy 1.17 release identity.'
doLast {
if (project.mod_version != '6.1.1.117011'
if (project.mod_version != '6.1.4.117011'
|| project.mod_group != expectedMavenGroup
|| project.minecraft_version != '1.17.1'
|| project.forge_version != '37.1.1'
Expand All @@ -351,7 +351,7 @@ tasks.register('verifyReleaseDependencies') {
group = 'verification'
description = 'Resolves and verifies the exact released OreSpawn dependency.'
doLast {
if (project.mod_version != '6.1.1.117011'
if (project.mod_version != '6.1.4.117011'
|| project.minecraft_version != project.mc_version
|| project.mc_version != '1.17.1'
|| project.loader_name != 'forge'
Expand Down Expand Up @@ -958,3 +958,6 @@ tasks.named('check') {
dependsOn tasks.named('verifyReleaseDependencies')
dependsOn tasks.named('verifyMavenCoordinates')
}

apply from: 'gradle/verify-terrain-compatibility.gradle'
apply from: 'gradle/terrain-compatibility-probe.gradle'
8 changes: 8 additions & 0 deletions docs/DEVELOPER_GUIDE.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
# Mineralogy Developer Guide

The 6.1.4 terrain interface contains provider outputs and retained raw aliases,
not crafted forms. Cave consumers use additive, dedicated tags. The two
dripstone redirects and optional-construction loot guard verify exact native
hook counts on Forge 37. Keep its reload-aware Tag objects; do not replace them
with the holder/TagKey APIs from later Minecraft versions. Common normal
cobblestone follows the root option. Slab tags exclude separate double blocks.
Future ports must explicitly audit new vanilla/common tags and their consumers.

## Responsibility Split

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

In 6.1.4, natural Mineralogy terrain supports moss, dripstone, azalea roots and
forest rocks. Decoration improves in new chunks; mining, common-tag consumers
and lamp support improve in existing worlds too. Crafted blocks stay outside
natural replacement tags. Minecraft 1.17 goat spawning is unchanged.
Rock furnaces retain their contents, fuel and facing while their lit/unlit
block and block-entity states stay in step. This also applies to existing worlds.

## Installing

Mineralogy 6 needs Minecraft 1.17.1, Forge 37.1.1, and OreSpawn
Expand Down
65 changes: 46 additions & 19 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.1`
means major generation 6, minor release 1, and bug revision 1.
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.17.1 Forge release is therefore:

```text
6.1.1.117011
6.1.4.117011
```

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.1.117011`, not `1.17.1-6.1.1.117011`. The Target already makes tags unique
`6.1.4.117011`, not `1.17.1-6.1.4.117011`. The Target already makes tags unique
across Minecraft versions and loaders.

## Reading the target component
Expand All @@ -51,21 +51,47 @@ minor digits, and all remaining digits for the Minecraft major version.
| 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.1.117011` |
| 1.18.2 | Forge | `118021` | `6.0.0.118021` |
| 1.20.6 | Forge | `120061` | `6.0.0.120061` |
| 1.21.11 | Forge | `121111` | `6.0.0.121111` |
| 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.6 | Forge | `120061` | `6.1.2.120061` |
| 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` |

The 1.17.1 row records this branch's current release. The other rows illustrate
target encoding only; they do not claim that the 6.1.0 changes have already
been forward-ported.
The 1.17.1 row records this branch's release. The other rows illustrate
target encoding or earlier releases; they do not claim that later Minecraft
targets already contain the same functional changes.

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 builds share the 6.1.4 stone compatibility fix. This is a target
matrix; check each target's release page for availability.
NeoForge 26.3 retains its existing 6.1.3 compatibility correction.

| Minecraft | Forge build | NeoForge build |
| --- | --- | --- |
| 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 receive only the 31 raw Mineralogy items on 26.2 and 26.3, not
polished or brick forms. Earlier targets carry only the interfaces they support.
Forge 1.13.2–1.15.2 are deferred until their later 6.1 ports. Native-texture
synchronization remains a separate campaign.

## Major version

The **Major** number changes for a fundamental or breaking new generation of
Expand All @@ -90,8 +116,8 @@ 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.1.117011 -> 6.2.0.117011
6.2.4.117011 -> 7.0.0.117011
6.1.4.119041 -> 6.2.0.119041
6.2.4.119041 -> 7.0.0.119041
```

## Bug version
Expand All @@ -115,8 +141,9 @@ Minecraft 1.10.2 / Forge / Mineralogy 6.0.0.110021
Minecraft 1.12.2 / Forge / Mineralogy 6.0.1.112021
Minecraft 1.14.4 / Forge / Mineralogy 6.0.1.114041
Minecraft 1.15.2 / Forge / Mineralogy 6.0.1.115021
Minecraft 1.17.1 / Forge / Mineralogy 6.1.1.117011
Minecraft 1.18.2 / Forge / Mineralogy 6.0.0.118021
Minecraft 1.17.1 / Forge / Mineralogy 6.1.4.117011
Minecraft 1.18.2 / Forge / Mineralogy 6.1.4.118021
Minecraft 1.19.4 / Forge / Mineralogy 6.1.4.119041
```

Minecraft and loader APIs may require different internal code without changing
Expand Down Expand Up @@ -148,9 +175,9 @@ excluding Mineralogy 7. Minecraft and loader metadata still decide whether a
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.17.1 Forge release is
`4.0.9.117011`. The dependency range deliberately describes the supported
functional OreSpawn generation; Forge still prevents jars for another
target calculation, so the matching Minecraft 1.17.1 Forge release used for
this release is `4.0.9.117011`. The dependency range deliberately describes
the supported functional OreSpawn generation; Forge still prevents jars for another
Minecraft target from loading together.

Pack maintainers should record the complete four-component versions in pack
Expand All @@ -162,7 +189,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.1.117011`.
branch, published metadata and artifacts therefore use `6.1.4.117011`.

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.1.117011
mod_version=6.1.4.117011
mod_group=zone.moddev.mc.mineralogy

# Release metadata consumed by the generic dispatcher.
Expand Down
74 changes: 74 additions & 0 deletions gradle/terrain-compatibility-probe.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
// Assertions are compiled separately and included only in the isolated probe.
tasks.register('compileRecipeIntegrationFixture', JavaCompile) {
dependsOn tasks.named('classes')
source fileTree('src/recipeIntegrationTest/java')
classpath = files(sourceSets.main.output, sourceSets.main.compileClasspath)
destinationDirectory = layout.buildDirectory.dir('recipe-integration-fixture/classes')
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)
}
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'), tasks.named('generateTerrainCompatibilityReflectionMap')
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' }
from layout.buildDirectory.dir('terrain-compatibility-fixture/reflection')
}

// The production loader uses SRG members. Reflection strings are not bytecode
// references, so seal their aliases from this exact target's official mappings.
tasks.register('generateTerrainCompatibilityReflectionMap') {
inputs.file(minecraft.dependency.toSrgFile)
def destination = layout.buildDirectory.file('terrain-compatibility-fixture/reflection/terrain-reflection.properties')
outputs.file(destination)
doLast {
def aliases = new TreeMap<String, Set<String>>()
String owner = null
def mapping = inputs.files.singleFile
new java.util.zip.GZIPInputStream(new FileInputStream(mapping)).withCloseable { stream ->
stream.newReader('UTF-8').eachLine { line ->
if (!line.startsWith('\t')) {
def columns = line.split(' ')
if (columns.length == 2) owner = columns[1].replace('/', '.')
} else if (owner != null && !line.startsWith('\t\t')) {
def columns = line.trim().split(' ')
if (columns.length >= 2) {
String key = owner + '.' + columns[0]
aliases.computeIfAbsent(key) { new TreeSet<String>() }.add(columns[-1])
}
}
}
}
if (aliases.isEmpty()) throw new GradleException('Missing pinned reflection aliases')
def output = destination.get().asFile
output.parentFile.mkdirs()
output.setText(aliases.collect { key, names -> key + '=' + names.join(',') }.join('\n') + '\n', 'UTF-8')
}
}

def packagedTerrainCompatibilityProbe = renamer.classes(tasks.named('terrainCompatibilityProbeJar', Jar)) {
map.from minecraft.dependency.toSrgFile
output = layout.buildDirectory.file('terrain-compatibility-fixture/terraincompatibilityprobe-reobf.jar')
}
tasks.register('packagedTerrainCompatibilityProbeJar') { dependsOn packagedTerrainCompatibilityProbe }
tasks.named('check') { dependsOn tasks.named('compileTerrainCompatibilityProbe') }
Loading
Loading