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
  •  
  •  
  •  
74 changes: 74 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
name: Mineralogy 1.12 CI

on:
push:
branches:
- master-1.12
- 'feature/**'
pull_request:
branches:
- master-1.12

permissions:
contents: read

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

jobs:
build:
name: Build, test, and audit
runs-on: ubuntu-latest
timeout-minutes: 45

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

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

- name: Install Java 17 for Gradle
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
with:
distribution: microsoft
java-version: '17'

- name: Set up Gradle
uses: gradle/actions/setup-gradle@4733eaac7c1b0da527e4206b7671e0061de1ce37 # v6

- name: Make the wrapper executable
run: chmod +x ./gradlew

- name: Build, test, and audit release artifacts
run: >-
./gradlew clean check build javadoc verifyReleaseDependencies verifyReleaseArtifacts
writeReleaseChecksums --no-daemon --stacktrace

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

- name: Upload test reports on failure
if: failure()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: Mineralogy-1.12.2-test-reports-${{ github.sha }}
if-no-files-found: ignore
retention-days: 14
path: |
build/test-results/test/**
build/reports/tests/test/**
build/reports/problems/**
30 changes: 19 additions & 11 deletions .github/workflows/deploy-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,6 @@ concurrency:
group: mineralogy-release-${{ inputs.release_ref }}
cancel-in-progress: false

env:
MINECRAFT_VERSION: 1.10.2

jobs:
preflight:
name: Validate release request
Expand All @@ -51,6 +48,7 @@ jobs:
release_sha: ${{ steps.validate.outputs.release_sha }}
release_version: ${{ steps.validate.outputs.release_version }}
release_tag: ${{ steps.validate.outputs.release_tag }}
minecraft_version: ${{ steps.validate.outputs.minecraft_version }}
main_jar: ${{ steps.validate.outputs.main_jar }}
sources_jar: ${{ steps.validate.outputs.sources_jar }}
javadoc_jar: ${{ steps.validate.outputs.javadoc_jar }}
Expand All @@ -73,16 +71,26 @@ jobs:
set -euo pipefail

actual_version="$(sed -n 's/^mod_version=//p' gradle.properties)"
if [[ ! "$actual_version" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.110021$ ]]; then
echo "Selected ref declares invalid 1.10.2 Forge mod_version=$actual_version" >&2
minecraft_version="$(sed -n 's/^mc_version=//p' gradle.properties)"
case "$minecraft_version" in
1.10.2) target_suffix=110021 ;;
1.12.2) target_suffix=112021 ;;
*)
echo "Selected ref declares unsupported release target mc_version=$minecraft_version" >&2
exit 1
;;
esac
if [[ ! "$actual_version" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.${target_suffix}$ ]]; then
echo "Selected ref declares invalid Minecraft $minecraft_version Forge mod_version=$actual_version" >&2
exit 1
fi

release_sha="$(git rev-parse HEAD)"
release_tag="$MINECRAFT_VERSION-$actual_version"
release_tag="$actual_version"
echo "release_sha=$release_sha" >> "$GITHUB_OUTPUT"
echo "release_version=$actual_version" >> "$GITHUB_OUTPUT"
echo "release_tag=$release_tag" >> "$GITHUB_OUTPUT"
echo "minecraft_version=$minecraft_version" >> "$GITHUB_OUTPUT"
echo "main_jar=Mineralogy-$actual_version.jar" >> "$GITHUB_OUTPUT"
echo "sources_jar=Mineralogy-$actual_version-sources.jar" >> "$GITHUB_OUTPUT"
echo "javadoc_jar=Mineralogy-$actual_version-javadoc.jar" >> "$GITHUB_OUTPUT"
Expand Down Expand Up @@ -114,7 +122,7 @@ jobs:
"repos/$GITHUB_REPOSITORY/commits/$release_sha/check-runs?per_page=100" \
--jq '[.check_runs[] | select(.name == "Build, test, and audit" and .conclusion == "success")] | length')"
if [[ "$successful_ci" -lt 1 ]]; then
echo "The tagged commit has no successful Mineralogy 1.10 CI check" >&2
echo "The tagged commit has no successful Build, test, and audit check" >&2
exit 1
fi

Expand Down Expand Up @@ -170,7 +178,7 @@ jobs:
cp build/release/SHA256SUMS "$bundle/"
cp CHANGELOG.txt "$bundle/"
(cd "$bundle" && sha256sum --check SHA256SUMS)
echo "name=Mineralogy-1.10.2-${{ needs.preflight.outputs.release_sha }}-${GITHUB_RUN_ID}-${GITHUB_RUN_ATTEMPT}" >> "$GITHUB_OUTPUT"
echo "name=Mineralogy-${{ needs.preflight.outputs.minecraft_version }}-${{ needs.preflight.outputs.release_sha }}-${GITHUB_RUN_ID}-${GITHUB_RUN_ATTEMPT}" >> "$GITHUB_OUTPUT"

- name: Upload immutable release artifact
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
Expand Down Expand Up @@ -322,12 +330,12 @@ jobs:
with:
curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }}
curseforge-id: 240974
name: Mineralogy ${{ needs.preflight.outputs.release_version }} for Minecraft 1.10.2
name: Mineralogy ${{ needs.preflight.outputs.release_version }} for Minecraft ${{ needs.preflight.outputs.minecraft_version }}
version: ${{ needs.preflight.outputs.release_version }}
version-type: ${{ inputs.curseforge_channel }}
changelog-file: ${{ runner.temp }}/release-input/CHANGELOG.txt
loaders: forge
game-versions: 1.10.2
game-versions: ${{ needs.preflight.outputs.minecraft_version }}
game-version-filter: none
environment: client | server
java: Java 8
Expand Down Expand Up @@ -368,7 +376,7 @@ jobs:
github-commitish: ${{ needs.preflight.outputs.release_sha }}
github-draft: false
github-prerelease: ${{ inputs.curseforge_channel != 'release' }}
name: Mineralogy ${{ needs.preflight.outputs.release_version }} for Minecraft 1.10.2
name: Mineralogy ${{ needs.preflight.outputs.release_version }} for Minecraft ${{ needs.preflight.outputs.minecraft_version }}
version: ${{ needs.preflight.outputs.release_version }}
version-type: ${{ inputs.curseforge_channel }}
changelog-file: ${{ runner.temp }}/release-input/CHANGELOG.txt
Expand Down
69 changes: 69 additions & 0 deletions .github/workflows/release-on-tag.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
name: Start Mineralogy release from tag

on:
push:
tags:
- '*.*.*.112021'

permissions:
actions: write
contents: read

concurrency:
group: mineralogy-release-starter-${{ github.ref_name }}
cancel-in-progress: false

jobs:
dispatch-release:
name: Validate tag and start guarded release
if: github.repository == 'MinecraftModDevelopmentMods/MinecraftMineralogy'
runs-on: ubuntu-latest
timeout-minutes: 10

steps:
- name: Check out tagged source
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
fetch-depth: 0

- name: Validate release tag and prior CI
id: validate
env:
GH_TOKEN: ${{ github.token }}
run: |
set -euo pipefail

release_version="$(sed -n 's/^mod_version=//p' gradle.properties)"
if [[ ! "$release_version" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.112021$ ]]; then
echo "mod_version must use the four-part 1.12.2 Forge target format; found $release_version" >&2
exit 1
fi

expected_tag="$release_version"
if [[ "$GITHUB_REF_NAME" != "$expected_tag" ]]; then
echo "Release tag must be $expected_tag; found $GITHUB_REF_NAME" >&2
exit 1
fi

successful_ci="$(gh api \
"repos/$GITHUB_REPOSITORY/commits/$GITHUB_SHA/check-runs?per_page=100" \
--jq '[.check_runs[] | select(.name == "Build, test, and audit" and .conclusion == "success")] | length')"
if [[ "$successful_ci" -lt 1 ]]; then
echo "The tagged commit has no successful Mineralogy 1.12 CI check" >&2
exit 1
fi

echo "version=$release_version" >> "$GITHUB_OUTPUT"

- name: Start default-branch release workflow
env:
GH_TOKEN: ${{ github.token }}
RELEASE_VERSION: ${{ steps.validate.outputs.version }}
run: |
gh workflow run deploy-release.yml \
--repo "$GITHUB_REPOSITORY" \
--ref master-1.12 \
-f mode=publish \
-f release_ref="$GITHUB_REF_NAME" \
-f curseforge_channel=release \
-f confirm_version="$RELEASE_VERSION"
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,11 @@ build
eclipse
run
classes
/logs/

# local agent context
/AGENTS.md
/agent-notes/

/README.txt
/forge-*-changelog.txt
Expand Down
44 changes: 22 additions & 22 deletions .project
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>Mineralogy</name>
<comment>Mineralogy for Minecraft.</comment>
<projects/>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.buildship.core.gradleprojectnature</nature>
</natures>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments/>
</buildCommand>
<buildCommand>
<name>org.eclipse.buildship.core.gradleprojectbuilder</name>
<arguments/>
</buildCommand>
</buildSpec>
<linkedResources/>
<filteredResources/>
</projectDescription>
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>MinecraftMineralogy</name>
<comment></comment>
<projects/>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.buildship.core.gradleprojectnature</nature>
</natures>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments/>
</buildCommand>
<buildCommand>
<name>org.eclipse.buildship.core.gradleprojectbuilder</name>
<arguments/>
</buildCommand>
</buildSpec>
<linkedResources/>
<filteredResources/>
</projectDescription>
51 changes: 50 additions & 1 deletion CHANGELOG.txt
Original file line number Diff line number Diff line change
@@ -1 +1,50 @@
Mineralogy 1.12.x
Mineralogy 6.0.1.112021 for Minecraft 1.12.2

- Delegated terrain, strata, ore, and covered fluid-deposit generation to the
required OreSpawn 4.0.7 provider engine; removed Mineralogy's parallel
generators and historical OS3 shim.
- Preserved all world-facing registry, tile, NBT, asset, patch, recipe, and
OreDictionary identities while moving production packages to
zone.moddev.mc.mineralogy.
- Restored the registered `mineralogy:saprolite` and `mineralogy:pummice`
legacy patch blocks so established worlds resolve those historical IDs.
- Added compatibility-safe controls for drywall, rock-salt lamps, mineral
dusts, and fertilizer, plus stable five-way grouped creative tabs. Disabled
recipes and their 1.12 advancements share target-native Forge conditions,
so disabled content remains uncraftable without missing-recipe errors.
- Added Mineralogy crude oil, its source-only bucket integration, and the
covered Ocean deposit declaration.
- Repaired saved rock-furnace construction and burn-rate recovery, replacement
drop semantics, and exact full-block Silk Touch results for double slabs.
- Corrected gypsum packing, charcoal and Base Metals dust gunpowder routes,
exact slab precedence, slab recombination, construction-form brick
conversions, and sand polishing routes. All 1,387 crafting recipes are now
generated as native Minecraft/Forge 1.12 JSON; only target-native furnace
smelting remains registered through Java because 1.12 has no JSON smelting
loader.
- Restored the exact 1.10 relief progression: polished rock makes blank reliefs,
blanks make each marked relief, and two left reliefs make two right reliefs.
Relief recipes now use exact registered items instead of mismatched
OreDictionary names.
- Added a condition-matched unlock advancement for every one of the 1,387
crafting recipes. Unlocks follow the exact ingredient progression without
recursively unlocking consumers: polishing requires its matching source and
accepted sand, construction recipes require their direct form, and reliefs
progress from polished rock to blank to marked relief.
- Restored complete cobblestone and specialty OreDictionary compatibility.
- Added 17 reviewed locales with the same 938 ordered keys, including
Brazilian and European Portuguese.
- Added first-start player, developer, content, provider, and version guides.
- Upgraded the build to ForgeGradle 7.0.34 and Gradle 9.6.1 with Java 8
bytecode, reproducible three-jar release audits, and guarded 1.12 CI/release
automation while retaining the default-branch 1.10 maintenance dispatcher.
- Simplified release tags to the complete four-component version alone, such
as `6.0.1.112021`; the Target already identifies Minecraft and the loader.
- Generate and verify the Buildship project preferences required by the
ForgeGradle 7 Eclipse launches, including alignment with the active Gradle
cache and a merged production output for legacy FML resource discovery, so
regenerated Eclipse and Gradle development launches load normally. Quote
every generated Slime Launcher path so projects under directories containing
spaces also start correctly.
- Included the pre-existing rock-salt lamp and street-lamp inventory model
transform fixes.
46 changes: 25 additions & 21 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,29 +1,33 @@
[![](https://img.shields.io/badge/Discord-MMD-green.svg?style=flat&logo=Discord)](https://discord.mcmoddev.com)
[![](http://cf.way2muchnoise.eu/full_minecraft-mineralogy_downloads.svg)](http://minecraft.curseforge.com/projects/minecraft-mineralogy)
[![](http://cf.way2muchnoise.eu/versions/Minecraft_minecraft-mineralogy_all.svg)](http://minecraft.curseforge.com/projects/minecraft-mineralogy)
[![Build Status](https://ci.mcmoddev.com/job/Minecraft%20Mineralogy/job/Minecraft%20Mineralogy%201.12/badge/icon)](https://ci.mcmoddev.com/job/Minecraft%20Mineralogy/job/Minecraft%20Mineralogy%201.12/)
# Mineralogy 6 for Minecraft 1.12.2

# Mineralogy
## MMD's Minecraft Mineralogy Mod
This mod replaces the generic "stone" in Minecraft with real-world rock types.
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.

## Texture Packs
There are three levels of texture resolution available. The default textures are low-resolution (16x16 pixels, same as Minecraft), but I recommend trying the high-resolution (64x64 pixels) textures via the high-res texture pack (available on the Release page).
This branch builds Mineralogy `6.0.1.112021` for Forge `14.23.5.2859` and
requires OreSpawn `4.0.7` or another compatible 4.x release. Install both mods
on clients and servers.

## Q&A
Q: Why make this mod?
A: Minecraft is a game that involves a lot of mining, yet it takes very little inspiration from actual geology. We made this mod to give Minecraft more of a geology vibe. After all, there's no mineral called "stone" in the geology textbook.
## Configuration and help

Q: Where's the cobblestone?!
A: Many of the stone types can be used as cobblestone or as stone in crafting recipes. If you want "Stone", smelt gravel. If you want "Cobblestone", craft two blocks of rock with 2 blocks of gravel.
Mineralogy's content and recipe switches remain in `config/mineralogy.cfg`.
Use OreSpawn's world-creation UI or saved world profile for rock, ore, fluid,
dimension, altitude, and terrain-host settings. Generation changes apply to
new chunks only.

Q: There's too much lag when generating new chunks!
A: Yes, that can happen. Mineralogy puts a lot more computation into world generation, so you don't want to run the server (or play single-player) on a computer with a slow CPU. We tried to improve performance as much as possible, but there's no getting around the fact that the stone type needs to be calculated for every single underground block in the game.
After the first start, the complete human guide is available under
`config/mineralogy-guide/`. The maintained source is in [docs](docs/README.md)
and covers upgrades, content controls, pack overrides, provider data, and
four-component release versions.

Q: Why do the ores look funny?
A: We re-textured the ores to better match the appearance of the new rock types. You can change them back by making your own texture pack from the default Minecraft resources.
## Compatibility

## Notes to Other Modders
This mod replaces the WorldProvider for the Overworld in Minecraft. There can only be one provider per dimension, so this mod is therefore incompatible with other mods that also replace the same WorldProvider.
The `mineralogy` mod ID and historical block, item, tile, NBT, recipe, asset,
patch, and OreDictionary identities are retained. Established Mineralogy 3
worlds are migrated through OreSpawn's Cyano/Legacy profile unless their owner
explicitly selects a different engine.

The stone types are all registered with the OreDictionary as Stone and/or Cobblestone. If you use OreDictionary crafting recipes (ShapelessOreRecipe or ShapedOreRecipe), then there shouldn't be any trouble. However, if you manually specify the Stone or Cobblestone blocks in a standard crafting recipe object, then users of the Mineralogy mod will have to craft Cobblestone (2 gravel + 2 rock blocks) to use your recipe.
[CurseForge](https://www.curseforge.com/minecraft/mc-mods/minecraft-mineralogy) ·
[Source and issues](https://github.com/MinecraftModDevelopmentMods/MinecraftMineralogy) ·
[MMD Discord](https://discord.mcmoddev.com)
Loading