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
  •  
  •  
  •  
3 changes: 3 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# The checksum-sealed Mavenizer compatibility files are immutable build-tool
# fixtures. Preserve their exact bytes instead of applying platform text filters.
ci-fixtures/tools/* binary
108 changes: 97 additions & 11 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,22 +1,90 @@
name: Mineralogy 1.18.2 CI
name: Mineralogy 1.19.4 CI

on:
push:
branches:
- master-1.18.2
- master-1.19
- 'feature/**'
pull_request:
branches:
- master-1.18.2
- master-1.19

permissions:
contents: read

concurrency:
group: mineralogy-1.18-${{ github.workflow }}-${{ github.ref }}
group: mineralogy-1.19-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
cold-forge-bootstrap:
name: Cold Forge bootstrap
runs-on: ubuntu-latest
timeout-minutes: 60

steps:
- name: Check out source
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7

- name: Install pinned Java 25 Mavenizer runtime
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
with:
distribution: temurin
java-version: '25.0.3+9.0.LTS'

- name: Install pinned Java 8 launcher toolchain
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
with:
distribution: temurin
java-version: '8.0.502+7'

- name: Install pinned Java 17 runtime and toolchain
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
with:
distribution: temurin
java-version: '17.0.1+12'

- name: Bootstrap Forge from an empty cache
shell: bash
env:
GRADLE_USER_HOME: ${{ runner.temp }}/mineralogy-cold-gradle
run: |
set -euo pipefail
test ! -e .gradle
test ! -e "$GRADLE_USER_HOME"
mkdir -p "$GRADLE_USER_HOME"
chmod +x ./gradlew
./gradlew verifyMavenizerCompatibilityFixture help \
--no-daemon --no-build-cache --stacktrace --max-workers=2 \
-Dorg.gradle.java.installations.paths="$JAVA_HOME,$JAVA_HOME_8_X64,$JAVA_HOME_25_X64" \
-Dorg.gradle.java.installations.auto-detect=false \
-Dorg.gradle.java.installations.auto-download=false \
| tee "$RUNNER_TEMP/cold-forge-bootstrap.log"
grep -F "OreSpawn Mavenizer compatibility runtime: Java 25.0.3" \
"$RUNNER_TEMP/cold-forge-bootstrap.log"
grep -F "OreSpawn Mavenizer compatibility: applied 8 rule(s) for net.minecraftforge:forge:1.19.4-45.4.0" \
"$RUNNER_TEMP/cold-forge-bootstrap.log"
find "$GRADLE_USER_HOME" .gradle/mavenizer \
-name '*.orespawn-compatibility' -type f -print0 \
| sort -z | xargs -0 -r sha256sum > "$RUNNER_TEMP/markers-before.sha256"
test -s "$RUNNER_TEMP/markers-before.sha256"

- name: Verify same-cache preparation is idempotent
shell: bash
env:
GRADLE_USER_HOME: ${{ runner.temp }}/mineralogy-cold-gradle
run: |
set -euo pipefail
./gradlew verifyMavenizerCompatibilityFixture help \
--no-daemon --no-build-cache --stacktrace --max-workers=2 \
-Dorg.gradle.java.installations.paths="$JAVA_HOME,$JAVA_HOME_8_X64,$JAVA_HOME_25_X64" \
-Dorg.gradle.java.installations.auto-detect=false \
-Dorg.gradle.java.installations.auto-download=false
find "$GRADLE_USER_HOME" .gradle/mavenizer \
-name '*.orespawn-compatibility' -type f -print0 \
| sort -z | xargs -0 -r sha256sum > "$RUNNER_TEMP/markers-after.sha256"
diff -u "$RUNNER_TEMP/markers-before.sha256" "$RUNNER_TEMP/markers-after.sha256"

build:
name: Build, test, and audit
runs-on: ubuntu-latest
Expand All @@ -26,6 +94,18 @@ jobs:
- name: Check out source
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7

- name: Install pinned Java 25 Mavenizer runtime
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
with:
distribution: temurin
java-version: '25.0.3+9.0.LTS'

- name: Install pinned Java 8 launcher toolchain
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
with:
distribution: temurin
java-version: '8.0.502+7'

- name: Install pinned Java 17 runtime and toolchain
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
with:
Expand All @@ -45,34 +125,40 @@ jobs:
- name: Build, test, and audit release artifacts
run: |
chmod +x ./gradlew
./gradlew clean check build javadoc verifyReleaseDependencies verifyReleaseArtifacts writeReleaseChecksums \
./gradlew clean check build javadoc verifyReleaseConfiguration verifyReleaseDependencies verifyReleaseArtifacts writeReleaseChecksums \
-PorespawnVerificationRepository="${{ steps.orespawn.outputs.repository }}" \
--no-daemon --stacktrace
--no-daemon --stacktrace \
-Dorg.gradle.java.installations.paths="$JAVA_HOME,$JAVA_HOME_8_X64,$JAVA_HOME_25_X64" \
-Dorg.gradle.java.installations.auto-detect=false \
-Dorg.gradle.java.installations.auto-download=false

- name: Generate and audit Eclipse production launches
run: >-
./gradlew genEclipseRuns eclipse isolateEclipseProductionRuns verifyEclipseProductionClasspath
-PorespawnVerificationRepository=${{ steps.orespawn.outputs.repository }}
--no-daemon --stacktrace
-Dorg.gradle.java.installations.paths="$JAVA_HOME,$JAVA_HOME_8_X64,$JAVA_HOME_25_X64"
-Dorg.gradle.java.installations.auto-detect=false
-Dorg.gradle.java.installations.auto-download=false

- name: Upload audited release candidate
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: Mineralogy-1.18.2-${{ github.sha }}
name: Mineralogy-1.19.4-${{ github.sha }}
if-no-files-found: error
retention-days: 30
path: |
build/libs/Mineralogy-6.1.0.118021.jar
build/libs/Mineralogy-6.1.0.118021-sources.jar
build/libs/Mineralogy-6.1.0.118021-javadoc.jar
build/libs/Mineralogy-6.1.0.119041.jar
build/libs/Mineralogy-6.1.0.119041-sources.jar
build/libs/Mineralogy-6.1.0.119041-javadoc.jar
build/release/SHA256SUMS
CHANGELOG.txt

- name: Upload diagnostics on failure
if: failure()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: Mineralogy-1.18.2-diagnostics-${{ github.sha }}
name: Mineralogy-1.19.4-diagnostics-${{ github.sha }}
if-no-files-found: ignore
retention-days: 14
path: |
Expand Down
43 changes: 40 additions & 3 deletions .github/workflows/codeql-analysis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,13 @@ name: CodeQL
on:
push:
branches:
- master-1.18.2
- master-1.19
- 'feature/**'
pull_request:
branches:
- master-1.18.2
- master-1.19
schedule:
- cron: '43 7 * * 4'

permissions:
actions: read
Expand All @@ -24,6 +26,18 @@ jobs:
- name: Check out source
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7

- name: Install pinned Java 25 Mavenizer runtime
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
with:
distribution: temurin
java-version: '25.0.3+9.0.LTS'

- name: Install pinned Java 8 launcher toolchain
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
with:
distribution: temurin
java-version: '8.0.502+7'

- name: Install pinned Java 17 runtime and toolchain
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
with:
Expand All @@ -38,10 +52,33 @@ jobs:
with:
languages: java-kotlin

- name: Stage exact OreSpawn release dependency
id: orespawn
run: |
mirror="$RUNNER_TEMP/orespawn-mirror"
bash gradle/stage-orespawn-release.sh "$mirror"
echo "repository=$mirror" >> "$GITHUB_OUTPUT"

- name: Compile production code
run: |
chmod +x ./gradlew
./gradlew clean classes --rerun-tasks --no-build-cache --no-daemon --stacktrace
gradle_args=(
clean classes --rerun-tasks --no-build-cache --no-daemon --stacktrace
"-PorespawnVerificationRepository=${{ steps.orespawn.outputs.repository }}"
"-Dorg.gradle.java.installations.paths=$JAVA_HOME,$JAVA_HOME_8_X64,$JAVA_HOME_25_X64"
-Dorg.gradle.java.installations.auto-detect=false
-Dorg.gradle.java.installations.auto-download=false
)
for attempt in 1 2 3; do
if ./gradlew "${gradle_args[@]}"; then
exit 0
fi
if [ "$attempt" -eq 3 ]; then
echo "CodeQL compilation failed after $attempt attempts." >&2
exit 1
fi
echo "::warning::CodeQL compilation attempt $attempt failed; retrying with the preserved Forge cache."
done

- name: Analyze
uses: github/codeql-action/analyze@db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28 # v4
4 changes: 2 additions & 2 deletions .github/workflows/validate-gradle-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@ name: Validate Gradle Wrapper
on:
push:
branches:
- master-1.18.2
- master-1.19
- 'feature/**'
pull_request:
branches:
- master-1.18.2
- master-1.19

permissions:
contents: read
Expand Down
27 changes: 14 additions & 13 deletions CHANGELOG.txt
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
Mineralogy 6.1.0.118021 for Minecraft 1.18.2
Mineralogy 6.1.0.119041 for Minecraft 1.19.4

- Delegated terrain, strata, ore, and covered fluid-deposit generation to the
released OreSpawn 4.0.10.118021 provider engine, retaining the supported
released OreSpawn 4.0.16.119041 provider engine, retaining the supported
`[4.0.6,5.0.0)` range; removed Mineralogy's parallel
geology, geome, ore, noise, and stone-replacement generators.
- Preserved all world-facing registry, tile, NBT, recipe, asset, patch, and
pre-flattening conversion identities while moving production packages to
zone.moddev.mc.mineralogy. Existing 1.10/1.12 chunks are protected during
1.18.2's flattening conversion. Legacy rock-furnace IDs are established
1.19.4's flattening conversion. Legacy rock-furnace IDs are established
before Mojang data fixing, then all pre-namespaced tile IDs are made safe
before Forge constructs tile entities, so inventories and progress survive
and an uppercase vanilla ID cannot abort the complete chunk load.
Expand All @@ -22,11 +22,11 @@ Mineralogy 6.1.0.118021 for Minecraft 1.18.2
- Made the historical `COBBLESTONE_EQUIVILENT` option functional through
target-native per-family block and item tags, including vanilla aliases,
reapplied after data reloads by updating the exact immutable tag objects
retained by already-parsed Forge 40 recipe ingredients. Chert and pumice
retained by already-parsed Forge 45 recipe ingredients. Chert and pumice
remain unconditional cobblestone equivalents.
- Added isolated Mineralogy crude-oil source and flowing fluids, block, bucket,
rendering resources, and the covered Ocean deposit declaration.
- Uses Minecraft 1.18's native granite, diorite, andesite, basalt, and tuff for
- Uses Minecraft 1.19's native granite, diorite, andesite, basalt, and tuff for
new OreSpawn terrain while retaining Mineralogy's historical registrations
and conversion aliases. Native smooth basalt joins Mineralogy's smooth-basalt
family without replacing Minecraft's basalt-smelting route. Deepslate remains
Expand All @@ -52,7 +52,7 @@ Mineralogy 6.1.0.118021 for Minecraft 1.18.2
slab and back at a lossless 1:1 ratio for modpacks that require an exact
vanilla item. Recipe advancements use the same exact item or family tag as
the recipe they reveal.
- Extended Minecraft 1.18's native stone crafting and tool-material tags so
- Extended Minecraft 1.19's native stone crafting and tool-material tags so
every enabled cobblestone equivalent, including all 27 legacy rock families
and target-native aliases, works in the complete vanilla contract. Sixteen
conditional JSON overrides cover furnaces, brewing stands, redstone and
Expand All @@ -61,15 +61,15 @@ Mineralogy 6.1.0.118021 for Minecraft 1.18.2
ingredients and keeps blackstone, chert and pumice valid. Matching-slab
rock-furnace upgrades and vanilla cobblestone construction recipes remain
distinct.
- Prevented Forge 40 from silently reducing optional carbon- or coal-dust
- Prevented Forge 45 from silently reducing optional carbon- or coal-dust
gunpowder recipes to nitrate plus sulfur when their compatibility tag is
empty; every loaded gunpowder recipe now requires all three components.
- Added 17 reviewed UTF-8 JSON locales with the same 938 ordered keys, including
Brazilian and European Portuguese, Canadian French, Japanese, Korean, and
Russian.
- Added first-start player, developer, content, provider, and version guides,
plus an exact provider example. Existing exported guides are never
overwritten. Forge 40 Eclipse launches keep their required merged
overwritten. Forge 45 Eclipse launches keep their required merged
`bin/main` mod output; if Eclipse removes Gradle's staged guide copies, the
exporter reads the authoritative source-checkout guides without weakening
packaged-jar validation.
Expand All @@ -81,12 +81,13 @@ Mineralogy 6.1.0.118021 for Minecraft 1.18.2
entries onto Mineralogy's stable provider rule IDs. This prevents duplicate
ore generation and preserves world-specific geology choices on first start;
established OreSpawn files remain authoritative and reloads are byte-stable.
- Preserved 1.18-native wall tall-side blockstates and models, wall/item tags,
loot tables, fluid APIs, rendering setup, and pack format 9 resources.
- Preserved 1.19.4-native wall tall-side blockstates and models, wall/item tags,
loot tables, fluid APIs, rendering setup, resource pack format 13, and data
pack format 12 resources.
- Added reproducible Java 17 main, sources, and Javadoc artifacts, exact released
OreSpawn dependency verification, guarded 1.18.2 CI, and the four-component
release tag `6.1.0.118021`.
- Kept ForgeGradle 7 while sealing Forge 40's required Mavenizer compatibility
OreSpawn dependency verification, guarded 1.19.4 CI, and the four-component
release tag `6.1.0.119041`.
- Kept ForgeGradle 7 while sealing Forge 45's required Mavenizer compatibility
fixture by SHA-256. The build-only tool runs on Java 25; Mineralogy compiles
and ships exclusively as Java 17, and release audits reject fixture leakage.
- Isolated CI's verified OreSpawn artifact in an exclusive Gradle repository so
Expand Down
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
[![Discord](https://img.shields.io/badge/Discord-MMD-green.svg?style=flat&logo=Discord)](https://discord.moddev.zone)
[![CurseForge downloads](https://cf.way2muchnoise.eu/full_minecraft-mineralogy_downloads.svg)](https://www.curseforge.com/minecraft/mc-mods/minecraft-mineralogy)
[![Supported Minecraft versions](https://cf.way2muchnoise.eu/versions/Minecraft_minecraft-mineralogy_all.svg)](https://www.curseforge.com/minecraft/mc-mods/minecraft-mineralogy)
[![Build, test, and audit](https://github.com/MinecraftModDevelopmentMods/MinecraftMineralogy/actions/workflows/ci.yml/badge.svg?branch=master-1.18.2)](https://github.com/MinecraftModDevelopmentMods/MinecraftMineralogy/actions/workflows/ci.yml?query=branch%3Amaster-1.18.2)
[![Build, test, and audit](https://github.com/MinecraftModDevelopmentMods/MinecraftMineralogy/actions/workflows/ci.yml/badge.svg?branch=master-1.19)](https://github.com/MinecraftModDevelopmentMods/MinecraftMineralogy/actions/workflows/ci.yml?query=branch%3Amaster-1.19)

# Mineralogy 6 for Minecraft 1.18.2
# Mineralogy 6 for Minecraft 1.19.4

Mineralogy adds real-world rock families, matching construction blocks,
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.0.118021` for Forge `40.3.0` and is built
and tested against OreSpawn `4.0.10.118021`. Its declared compatibility range is
This branch builds Mineralogy `6.1.0.119041` for Forge `45.4.0` and is built
and tested against OreSpawn `4.0.16.119041`. Its declared compatibility range is
OreSpawn `[4.0.6,5.0.0)`. Install both mods on clients and servers.

## Configuration and help
Expand Down
Loading
Loading