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 @@ -100,9 +100,9 @@ jobs:
if-no-files-found: error
retention-days: 30
path: |
build/libs/Mineralogy-6.1.2.2602002.jar
build/libs/Mineralogy-6.1.2.2602002-sources.jar
build/libs/Mineralogy-6.1.2.2602002-javadoc.jar
build/libs/Mineralogy-6.1.4.2602002.jar
build/libs/Mineralogy-6.1.4.2602002-sources.jar
build/libs/Mineralogy-6.1.4.2602002-javadoc.jar
build/release/SHA256SUMS
CHANGELOG.txt
- name: Upload diagnostics on failure
Expand Down
28 changes: 28 additions & 0 deletions CHANGELOG.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,31 @@
Mineralogy 6.1.4.2602002 for Minecraft 26.2 NeoForge

- 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.
- Sulfur cubes accept only the 31 raw Mineralogy rocks as Slow Bouncy stones.
Polished blocks, bricks, slabs and other crafted Mineralogy items are excluded.
Minecraft's existing vanilla consumption rules are unchanged.
- Restored goat spawning on natural terrain and horn breaking against harder
raw rocks. Soft rocks and crafted blocks do not break horns.
- Fixed dripstone water-pocket and large-column checks without broadening
global base-stone or ore-host tags. Added natural root and forest-rock support
without making bare rock suitable soil for growing azalea trees.
- Made config-dependent construction tag entries optional. Single/upright
slabs and stairs join vanilla aggregates; separate double slabs stay full blocks.
- Connected raw stone, furnace workstations, ores, storage blocks and dyed
drywall to common tags. Normal cobblestone follows the existing option.
- Rock-salt lamps retain straight-wall posts like vanilla torches.
- Fixed missing-item resource errors when construction forms are disabled.
Recipes and unlocks check that their items are registered; loot tables follow
the matching content settings. Enabled recipes and drops are unchanged.
- Sculk, moss and cube eligibility updates existing worlds; natural cave
decoration improves in new chunks. No provider, config, registry, texture
or OreSpawn changes. Recipe identities and enabled contents are unchanged.

Mineralogy 6.1.2.2602002 for Minecraft 26.2 NeoForge

- Ported the accepted NeoForge 26.1.2 product to Minecraft 26.2 and
Expand Down
20 changes: 19 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,31 @@ 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.2602002` for NeoForge `26.2.0.45-beta` and is built
This branch builds Mineralogy `6.1.4.2602002` for NeoForge `26.2.0.45-beta` and is built
and tested against OreSpawn `4.0.16.2602002`. 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 26.2 branch; use the jar that matches the loader in your modpack.

Mineralogy 6.1.4 restores sculk conversion, moss and dripstone decoration, and
natural animal behaviour on Mineralogy terrain. Sulfur cubes can absorb the
31 raw Mineralogy rocks, not polished blocks, bricks or other crafted items;
vanilla blocks keep Minecraft's own rules. Goats spawn on natural rocks and
break horns against harder raw rocks. Rock-salt lamps retain straight-wall posts.

These block and animal fixes work in existing worlds. Improved cave, root and
forest decoration needs newly generated chunks. Terrain eligibility is
independent of cobblestone equivalence. Construction tags tolerate disabled
forms, and single/upright slabs and stairs join the vanilla aggregates.
Recipes, their unlocks and loot tables skip construction items that a content
setting prevents from registering. Enabled recipes and drops are unchanged.

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.

## 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 @@ -473,7 +473,7 @@ tasks.register('verifyReleaseConfiguration') {
group = 'verification'
description = 'Verifies the exact Mineralogy 26.2 NeoForge release identity.'
doLast {
if (project.mod_version != '6.1.2.2602002'
if (project.mod_version != '6.1.4.2602002'
|| project.mod_group != expectedMavenGroup
|| project.minecraft_version != '26.2'
|| project.neo_version != '26.2.0.45-beta') {
Expand All @@ -489,7 +489,7 @@ tasks.register('verifyReleaseDependencies') {
group = 'verification'
description = 'Resolves and verifies the exact released OreSpawn dependency.'
doLast {
if (project.mod_version != '6.1.2.2602002'
if (project.mod_version != '6.1.4.2602002'
|| project.minecraft_version != project.mc_version
|| project.mc_version != '26.2'
|| project.loader_name != 'neoforge'
Expand Down Expand Up @@ -810,8 +810,8 @@ 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 @@ -876,8 +876,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("Optional Mineralogy slab override must guard its registered output: ${recipe}")
}
if (recipe.endsWith('_stonecutting')) {
if (!(data.result instanceof Map) || data.result.id == null
Expand Down Expand Up @@ -1173,3 +1173,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'
22 changes: 20 additions & 2 deletions docs/DEVELOPER_GUIDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -184,8 +184,9 @@ source-decompiler workaround is deliberately absent:

```powershell
$env:JAVA_HOME='path-to-Temurin-25.0.3+9'
$env:GRADLE_USER_HOME='D:\MinecraftMineralogy\.gradle-verify-cache'
.\gradlew.bat clean check build javadoc verifyReleaseConfiguration verifyReleaseDependencies verifyReleaseArtifacts writeReleaseChecksums --no-daemon
$env:GRADLE_USER_HOME='D:\GradleCaches\minecraft-mineralogy-shared'
.\gradlew.bat clean --no-daemon
.\gradlew.bat check build javadoc verifyReleaseConfiguration verifyReleaseDependencies verifyReleaseArtifacts writeReleaseChecksums --no-daemon
.\gradlew.bat eclipse verifyEclipseProductionClasspath --no-daemon
.\gradlew.bat assemble --no-daemon
```
Expand All @@ -194,6 +195,23 @@ Inspect complete client/server logs and test the reobfuscated jar with released
OreSpawn in a launcher-like NeoForge installation. The normal jar packages this
guide under `META-INF/mineralogy/docs/`.

## Terrain compatibility

The isolated terrain generator maintains additive block/item interfaces without
rewriting recipes or provider data. Natural terrain has 37 identities, common
stone excludes sandstone, and sulfur cubes receive exactly 31 raw Mineralogy
items. Optional construction references use objects inside `values`; separate
double slabs are not classified as vanilla slabs.

Required Mixins extend only the dripstone water-pocket and large-column
containment checks. Each verifies exactly one native base-stone field access.
Do not broaden global base-stone or ore-host tags. Roots and forest rocks use
dedicated substrate tags; bare rocks remain outside azalea-growing soil.

Canonical `c:` classifications cover raw stone, furnace workstations, ores,
storage blocks and dyed drywall. Cobblestone policy preserves third-party
members and unconditional chert/pumice across initial loading and reloads.

The complete release version is `Major.Minor.Bug.Target`; see
[Mineralogy Versioning](VERSIONS.md). This branch validates target `2602002`
for Minecraft 26.2 NeoForge and does not append CI build numbers.
16 changes: 14 additions & 2 deletions docs/PLAYER_GUIDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,8 @@ recommended before upgrading the original.
where covered Ocean deposits form.

Raw Mineralogy rocks work in broad stone recipes. With
`COBBLESTONE_EQUIVILENT=true`, they also join Forge's block and item
`cobblestone` tags for recipes such as levers, pistons, dispensers, and brewing stands.
`COBBLESTONE_EQUIVILENT=true`, they also join the common `c:cobblestones` tags
and historical compatibility aliases for levers, pistons, dispensers and brewing stands.
Exact Mineralogy rocks still make their matching Mineralogy slabs, stairs, and
walls.

Expand Down Expand Up @@ -72,6 +72,18 @@ polished-brick furnaces use the corresponding slab finish.

## Configuration And Servers

Natural Mineralogy terrain supports sculk conversion, moss, dripstone, bats
and goat spawning independently of cobblestone equivalence. Harder raw rocks
can break goat horns; soft rocks and crafted forms cannot. Sulfur cubes accept
only the 31 raw Mineralogy rocks as Slow Bouncy stones. They do not consume
Mineralogy polished blocks, bricks, slabs or other crafted items. Minecraft's
existing rules for vanilla blocks are unchanged.

Block and animal eligibility changes apply to existing worlds after updating.
Improved cave, root and forest-rock decoration needs newly generated chunks.
Bare rock is not suitable soil for growing azalea trees. Rock-salt lamps retain
wall posts like torches, including straight walls.

`config/mineralogy-common.toml` controls Mineralogy content and recipe compatibility.
OreSpawn's UI and JSON profile control terrain and deposits. Settings require a
restart.
Expand Down
49 changes: 41 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.2 NeoForge release is therefore:

```text
6.1.2.2602002
6.1.4.2602002
```

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.2602002`, not `26.2-6.1.2.2602002`. The Target already makes tags unique
`6.1.4.2602002`, not `26.2-6.1.4.2602002`. The Target already makes tags unique
across Minecraft versions and loaders.

## Reading the target component
Expand Down Expand Up @@ -64,7 +64,7 @@ minor digits, and all remaining digits for the Minecraft major version.
| 26.1.2 | Forge | `2601021` | `6.1.2.2601021` |
| 26.1.2 | NeoForge | `2601022` | `6.1.2.2601022` |
| 26.2 | Forge | `2602001` | `6.1.2.2602001` |
| 26.2 | NeoForge | `2602002` | `6.1.2.2602002` |
| 26.2 | NeoForge | `2602002` | `6.1.4.2602002` |

The 26.2 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 @@ -74,6 +74,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 target builds share the 6.1.4 terrain and tag compatibility
fixes. This matrix describes the release targets, not their publication status.
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 |

These branches have been tested and approved for sequential release.
Only interfaces supported by each Minecraft version are included. Sulfur cubes
receive raw Mineralogy rocks only on 26.2/26.3; cats target lit rock furnaces
only on 26.3. Forge 1.13–1.15 remain unchanged until their later 6.1 ports.
Deferred native-texture synchronization remains a separate campaign.

## Major version

The **Major** number changes for a fundamental or breaking new generation of
Expand Down Expand Up @@ -131,7 +158,7 @@ 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 26.1.2 / NeoForge / Mineralogy 6.1.2.2601022
Minecraft 26.2 / NeoForge / Mineralogy 6.1.2.2602002
Minecraft 26.2 / NeoForge / Mineralogy 6.1.4.2602002
```

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

Expand All @@ -174,10 +201,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 Mineralogy targets
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 NeoForge loader. CI build numbers are not appended. For this
branch, published metadata and artifacts therefore use `6.1.2.2602002`.
branch, published metadata and artifacts therefore use `6.1.4.2602002`.

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 @@ -5,7 +5,7 @@ org.gradle.daemon=false
org.gradle.configuration-cache=false
org.gradle.caching=true
org.gradle.parallel=false
mod_version=6.1.2.2602002
mod_version=6.1.4.2602002
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