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

Expand Down
25 changes: 25 additions & 0 deletions CHANGELOG.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,28 @@
Mineralogy 6.1.4.2601021 for Minecraft 26.1.2

- 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.
- Restored vanilla sculk catalyst conversion and dripstone/moss replacement on
37 natural terrain identities, including native aliases and special rocks.
- Goats can spawn on natural terrain and break horns against harder raw rocks.
Soft rocks and crafted blocks are excluded from horn breaking.
- Fixed dripstone water-pocket and column checks rejecting natural rocks.
Roots and forest rocks recognise natural substrates without making bare
rock suitable for growing azalea trees.
- Added slab, stair, furnace, ore, storage and dyed-block classifications.
Double slabs remain full blocks. Disabled construction references are
configuration-safe, and normal cobblestone follows the existing option.
- Rock-salt lamps retain the centre post on straight walls.
- Disabled construction loot tables no longer refer to missing items. Their
normal drops remain unchanged when construction is enabled.
- Sculk works in existing worlds after updating; natural cave decoration
improves in newly generated chunks. No sulfur-cube tags on this target.
- 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.2601021 for Minecraft 26.1.2

- Ported the complete Mineralogy 6.1.2 content, recipe, migration, and
Expand Down
16 changes: 15 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +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.2601021` for Forge `64.0.9`, with an
This branch builds Mineralogy `6.1.4.2601021` for Forge `64.0.9`, with an
additional compatibility smoke on Forge `64.1.0`, and is built and tested
against OreSpawn `4.0.16.2601021`. Its declared compatibility range is
OreSpawn `[4.0.6,5.0.0)`. Install both mods on clients and servers.

Mineralogy 6.1.4 fixes places where Minecraft wasn't recognising natural
Mineralogy stone. Sculk and moss can spread across it, dripstone and roots
recognise their natural substrates, and bats and goats keep their normal
spawning rules. Goats can break horns against harder raw rocks, not soft rocks
or crafted blocks. Sulfur cubes do not exist on this target.

Slabs, stairs, walls, furnaces, ores, storage blocks and coloured drywall now
have the appropriate classifications. Rock-salt lamps keep the post on straight
walls. Construction references stay loadable when their blocks are disabled.

These fixes work with cobblestone equivalence on or off. Existing worlds gain
the behaviour fixes after updating; improved cave decoration applies to newly
generated chunks and won't redecorate explored caves.

## 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 @@ -650,7 +650,7 @@ tasks.register('verifyReleaseConfiguration') {
description = 'Verifies the exact Mineralogy 26.1.2 release identity.'
dependsOn tasks.named('verifyMavenizerCompatibilityFixture')
doLast {
if (project.mod_version != '6.1.2.2601021'
if (project.mod_version != '6.1.4.2601021'
|| project.mod_group != expectedMavenGroup
|| project.minecraft_version != '26.1.2'
|| project.forge_version != '64.0.9'
Expand All @@ -665,7 +665,7 @@ tasks.register('verifyReleaseDependencies') {
group = 'verification'
description = 'Resolves and verifies the exact released OreSpawn dependency.'
doLast {
if (project.mod_version != '6.1.2.2601021'
if (project.mod_version != '6.1.4.2601021'
|| project.minecraft_version != project.mc_version
|| project.mc_version != '26.1.2'
|| project.loader_name != 'forge'
Expand Down Expand Up @@ -1449,7 +1449,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.2601021"')) {
if (eclipseMetadata.contains('${') || !eclipseMetadata.contains('version="6.1.4.2601021"')) {
throw new GradleException('Eclipse output contains unresolved or invalid Mineralogy version metadata')
}
}
Expand All @@ -1472,3 +1472,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'
19 changes: 19 additions & 0 deletions docs/DEVELOPER_GUIDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,25 @@ Mineralogy requires OreSpawn `[4.0.6,5.0.0)`. Reusable worldgen integrations
belong in `zone.moddev.mc.orespawn.api` or an OreSpawn provider rather than
Mineralogy internals.

## Compatibility Tags

`mineralogy:terrain_rocks` contains this target's 32 provider outputs and five
retained aliases. Natural replacement, roots, forest rocks and animal
substrates use that dedicated interface, not the configurable cobblestone
union. Horn breaking uses a separate hard-raw-rock whitelist.

Single/upright slabs, stairs and walls join the vanilla block and item
aggregates; separate double slabs remain full blocks. Common raw-stone,
furnace-workstation, ore, storage and dyed tags are additive. Unregisterable
construction members are optional, and their loot tables use native
item-existence guards without changing enabled drops. Normal cobblestone
follows the same runtime option as the root, preserving unrelated members.

The two dripstone Mixins redirect only the water-pocket and exposed-column
base-stone checks. They require exactly one hook each. Global base-stone,
ore-host, carver and azalea-growing-soil tags are deliberately unchanged.
Future ports must check the native consumers, not just copy tag names.

## Packaged Provider

The schema-4, revision-3 provider is at:
Expand Down
13 changes: 13 additions & 0 deletions docs/PLAYER_GUIDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,19 @@ and OreSpawn 4.0.16.2601021.
Install matching Mineralogy and OreSpawn jars on both clients and servers. Do
not open a world containing Mineralogy blocks without Mineralogy installed.

## Vanilla Stone Behaviour

Natural Mineralogy rocks support sculk spreading, moss, dripstone, rooted
dirt and forest-rock placement. Bats and goats can use natural terrain under
Minecraft's normal spawning rules. Harder raw rocks can break a charging
goat's horn; soft rocks and crafted blocks cannot.

Rock-salt lamps keep the centre post on straight walls. Slabs, stairs,
furnaces and coloured drywall have their matching common classifications.
These behaviours do not depend on cobblestone equivalence. They apply after
updating an existing world, but cave decoration needs newly generated chunks.
Sulfur cubes are not present in Minecraft 26.1.2.

## Creating Or Upgrading A World

Open **OreSpawn World Generation** while creating a world. **Recommended
Expand Down
48 changes: 40 additions & 8 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 26.1.2 Forge release is therefore:

```text
6.1.2.2601021
6.1.4.2601021
```

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.2601021`, not `26.1.2-6.1.2.2601021`. The Target already makes tags unique
`6.1.4.2601021`, not `26.1.2-6.1.4.2601021`. 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.21.1 | Forge | `121011` | `6.1.2.121011` |
| 1.21.11 | Forge | `121111` | `6.1.2.121111` |
| 26.1.2 | Forge | `2601021` | `6.1.2.2601021` |
| 26.1.2 | Forge | `2601021` | `6.1.4.2601021` |
| 26.2 | Forge | `2602001` | `6.0.0.2602001` |
| 26.2 | NeoForge | `2602002` | `6.0.0.2602002` |

Expand All @@ -70,6 +70,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 local candidates share the 6.1.4 additive terrain compatibility
fix. This is a candidate matrix, not a claim that every release is published.
NeoForge 26.3 retains its existing 6.1.3 compatibility correction.

| Minecraft | Forge candidate | NeoForge candidate |
| --- | --- | --- |
| 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 local candidates need renewed testing before publication resumes.
Minecraft 1.13.2–1.15.2 remain unchanged; applicable classifications and
target-native substrate checks are recorded for 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 @@ -94,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.2601021 -> 6.2.0.2601021
6.1.4.2601021 -> 6.2.0.2601021
6.2.4.2601021 -> 7.0.0.2601021
```

Expand Down Expand Up @@ -126,7 +152,7 @@ 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.11 / Forge / Mineralogy 6.1.2.121111
Minecraft 26.1.2 / Forge / Mineralogy 6.1.2.2601021
Minecraft 26.1.2 / Forge / Mineralogy 6.1.4.2601021
```

Minecraft and loader APIs may require different internal code without changing
Expand Down Expand Up @@ -169,10 +195,16 @@ feature generation, not the exact jar.

## Builds and release notes

This local 6.1.4 candidate 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 Mineralogy candidates
remain unchanged. 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 Forge loader. CI build numbers are not appended. For this
branch, published metadata and artifacts therefore use `6.1.2.2601021`.
branch, published metadata and artifacts therefore use `6.1.4.2601021`.

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=true

mod_version=6.1.2.2601021
mod_version=6.1.4.2601021
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