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.3.2603002.jar
build/libs/Mineralogy-6.1.3.2603002-sources.jar
build/libs/Mineralogy-6.1.3.2603002-javadoc.jar
build/libs/Mineralogy-6.1.4.2603002.jar
build/libs/Mineralogy-6.1.4.2603002-sources.jar
build/libs/Mineralogy-6.1.4.2603002-javadoc.jar
build/release/SHA256SUMS
CHANGELOG.txt
- name: Upload diagnostics on failure
Expand Down
36 changes: 36 additions & 0 deletions CHANGELOG.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,39 @@
Mineralogy 6.1.4.2603002 for Minecraft 26.3 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. Vanilla and third-party
members remain intact; crafted forms are excluded from natural replacement.
- 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 the 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 the vanilla aggregates;
separate double slabs remain full blocks.
- Fixed data loading when construction forms are disabled. Recipes, recipe-book
entries and loot tables skip forms that are not registered; their normal
ingredients, outputs, counts and drops are unchanged.
The 24 vanilla slab recipe-book entries use matching guards so disabling
Mineralogy slabs does not leave them pointing at missing recipes.
- Connected raw stone, furnace workstations, ores, storage blocks and dyed
drywall to the common tags. Normal cobblestone follows the existing option,
including reloads, without changing mossy, infested or deepslate categories.
- Rock-salt lamps retain straight-wall posts, and cats can sit on lit Mineralogy
furnaces but not unlit ones.
- Sculk, moss and cube behavior updates existing worlds; natural cave decoration
and root/forest decoration improves in newly generated chunks. No OreSpawn,
provider, config, registry or texture changes. Recipe identities and enabled
contents are unchanged. Retained the released
6.1.3 NeoForge API fix and native texture mappings.

Mineralogy 6.1.3.2603002 for Minecraft 26.3 NeoForge

- Fixed a client crash during world-list and world-creation tag reloads on
Expand Down
21 changes: 20 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,33 @@ 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.3.2603002` for NeoForge `26.3.0.1-beta`, is
This branch builds Mineralogy `6.1.4.2603002` for NeoForge `26.3.0.1-beta`, is
runtime-validated on NeoForge `26.3.0.8-beta`, and is built and tested against
OreSpawn `4.0.16.2603002`. 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.3 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 the harder raw rocks. Cats can sit on lit rock furnaces,
and rock-salt lamps retain straight-wall posts like vanilla torches.

These block and animal fixes work in existing worlds. Improved cave, root and
forest decoration needs newly generated chunks. Natural terrain eligibility is
independent of cobblestone equivalence. Construction tags tolerate disabled
blocks, and slabs, stairs, furnaces, ores, storage blocks and coloured drywall
join their appropriate common interfaces. The released 6.1.3 NeoForge loader
correction and synchronized native textures are retained.

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
32 changes: 23 additions & 9 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.3 NeoForge release identity.'
doLast {
if (project.mod_version != '6.1.3.2603002'
if (project.mod_version != '6.1.4.2603002'
|| project.mod_group != expectedMavenGroup
|| project.minecraft_version != '26.3'
|| project.neo_version != '26.3.0.1-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.3.2603002'
if (project.mod_version != '6.1.4.2603002'
|| project.minecraft_version != project.mc_version
|| project.mc_version != '26.3'
|| project.loader_name != 'neoforge'
Expand Down Expand Up @@ -880,8 +880,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 @@ -946,8 +946,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 @@ -1016,11 +1016,14 @@ tasks.register('verifyReleaseArtifacts') {
expectedMinecraftAdvancements.addAll(['andesite', 'basalt', 'diorite', 'granite', 'tuff'].collect {
"data/minecraft/advancement/recipes/building_blocks/polished_${it}.json"
})
expectedMinecraftAdvancements.addAll(slabOverrides.collect {
"data/minecraft/advancement/recipes/building_blocks/${it}.json"
})
def minecraftAdvancements = names.findAll {
it.startsWith('data/minecraft/advancement/recipes/') && it.endsWith('.json')
} as Set
if (minecraftAdvancements != expectedMinecraftAdvancements) {
throw new GradleException('Release jar must contain exactly 16 cobblestone and five polished-block advancement overrides')
throw new GradleException('Release jar must contain 16 cobblestone, five polished-block and 24 guarded native slab advancements')
}
advancementCategories.each { recipe, category ->
def data = new JsonSlurper().parse(zip.getInputStream(zip.getEntry(
Expand All @@ -1038,8 +1041,16 @@ tasks.register('verifyReleaseArtifacts') {
}
verifyAdvancementPredicates(advancement, entryName)
}
if (recipeUnlockCriteria != 1454) {
throw new GradleException("Expected 1454 Minecraft 26.3 recipe-unlocked criteria, found ${recipeUnlockCriteria}")
slabOverrides.each { recipe ->
String entryName = "data/minecraft/advancement/recipes/building_blocks/${recipe}.json"
def advancement = new JsonSlurper().parse(zip.getInputStream(zip.getEntry(entryName)))
if (advancement.sends_telemetry_event != false) {
throw new GradleException("Native slab advancement must disable telemetry: ${entryName}")
}
verifyAdvancementPredicates(advancement, entryName)
}
if (recipeUnlockCriteria != 1478) {
throw new GradleException("Expected 1478 Minecraft 26.3 recipe-unlocked criteria, found ${recipeUnlockCriteria}")
}
def wallBlockstates = names.findAll { it ==~ /assets\/mineralogy\/blockstates\/.+_wall\.json/ }
def tallWallModels = names.findAll { it ==~ /assets\/mineralogy\/models\/block\/.+_wall_side_tall\.json/ }
Expand Down Expand Up @@ -1306,3 +1317,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'
34 changes: 33 additions & 1 deletion docs/DEVELOPER_GUIDE.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,22 @@
# Mineralogy Developer Guide

## Stone compatibility tags

`mineralogy:terrain_rocks` contains provider terrain outputs and retained raw
aliases, not construction blocks, ores or storage conversions. Natural consumers
use it independently of cobblestone equivalence. `mineralogy:raw_stones` omits
sandstone for common stone consumers. `mineralogy:horn_breaking_rocks` is a
hard-rock whitelist; rock salt, scoria, siltstone and other soft materials stay
out. Sulfur cubes receive only the 31 raw Mineralogy items, including through
aggregate tags.

Config-dependent construction references are optional objects inside `values`.
Slab aggregates include single/upright slabs, not separate double slabs.
Two required, single-target Mixins extend only dripstone water containment and
column boundaries through `mineralogy:dripstone_base_stones`. Global base-stone
and ore-host tags remain unchanged. Every port must explicitly review new
native tags and consumer checks rather than copy an adjacent target blindly.

## Responsibility Split

| Mineralogy owns | OreSpawn owns |
Expand Down Expand Up @@ -184,6 +201,20 @@ produce the modern lowercase representation.

## Building

Construction settings can prevent blocks and items from registering. Native
`neoforge:registered` conditions guard recipes, their matching advancements and
loot tables before decoding those item references. Keep the enabled payloads
unchanged, and preserve the existing content-switch conditions. Run
`scripts/guard-construction-resources.ps1` after editing generated data; the
recipe generator also runs it automatically.

Minecraft 26.3 advancements resolve recipe holders during registry loading.
The 24 native slab advancements therefore need the same guard as the overridden
recipe when a Mineralogy slab is disabled. Their native criteria and rewards
are preserved. This brings the packaged Minecraft advancement overrides to 45
(16 cobblestone, five polishing and 24 slab guards); the 48 recipe overrides
and 1,433 Mineralogy recipe/advancement pairs remain unchanged.

The build uses NeoGradle 7.1.39 and the Gradle 9.2.1 wrapper on Java 25,
with an exact Temurin 25.0.3+9 toolchain for production and test bytecode.
NeoForge 26.3 uses the validated binary userdev path; the temporary 26.1.2
Expand All @@ -192,7 +223,8 @@ 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
.\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 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

## Natural stone compatibility

Natural Mineralogy rocks support sculk, moss, dripstone, bats and goat spawning.
Goats can break horns against harder raw rocks, but not soft or crafted blocks.
Sulfur cubes accept the 31 raw Mineralogy rocks as Slow Bouncy stones; polished
blocks, bricks and other crafted Mineralogy items are not food. Vanilla blocks
keep Minecraft's own consumption rules.

Cats can sit on lit Mineralogy furnaces, and rock-salt lamps keep straight-wall
posts. These changes work in existing worlds. Improved dripstone, root and
forest-rock generation applies to new chunks, not explored terrain.

## Installing

Mineralogy 6 needs Minecraft 26.3, a compatible NeoForge 26.3 release, and
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.3`
means major generation 6, minor release 1, and bug revision 3.
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.3 NeoForge release is therefore:

```text
6.1.3.2603002
6.1.4.2603002
```

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.3.2603002`, not `26.3-6.1.3.2603002`. The Target already makes tags unique
`6.1.4.2603002`, not `26.3-6.1.4.2603002`. The Target already makes tags unique
across Minecraft versions and loaders.

## Reading the target component
Expand Down Expand Up @@ -65,7 +65,7 @@ minor digits, and all remaining digits for the Minecraft major version.
| 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.3 | NeoForge | `2603002` | `6.1.3.2603002` |
| 26.3 | NeoForge | `2603002` | `6.1.4.2603002` |

The 26.3 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 @@ -75,6 +75,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 target builds share the 6.1.4 stone compatibility
fix. 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.
Sulfur cubes receive only the 31 raw Mineralogy items on 26.2 and 26.3, not
polished or brick forms. Earlier targets carry only supported interfaces.
Forge 1.13.2–1.15.2 are deferred until their later 6.1 ports. Backporting 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 @@ -133,7 +159,7 @@ 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.3 / NeoForge / Mineralogy 6.1.3.2603002
Minecraft 26.3 / NeoForge / Mineralogy 6.1.4.2603002
```

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

Expand All @@ -176,10 +202,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.3.2603002`.
branch, published metadata and artifacts therefore use `6.1.4.2603002`.

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.3.2603002
mod_version=6.1.4.2603002
mod_group=zone.moddev.mc.mineralogy
mod_group_id=zone.moddev.mc.mineralogy
mod_id=mineralogy
Expand Down
Loading
Loading