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
Jump to file
Failed to load files.
Loading
Diff view
Diff view
816 changes: 90 additions & 726 deletions .github/workflows/deploy-release.yml

Large diffs are not rendered by default.

8 changes: 3 additions & 5 deletions .github/workflows/release-on-tag.yml
Original file line number Diff line number Diff line change
Expand Up @@ -79,9 +79,7 @@ jobs:
echo
echo "**Nothing has been published.**"
echo
echo "To continue, open [Release Base Minerals]($RELEASE_WORKFLOW_URL), select **Run workflow**, and enter:"
echo
echo "- release_version: \`$GITHUB_REF_NAME\`"
echo "- curseforge_release_level: \`release\`, \`beta\`, or \`alpha\`"
echo "- confirm_live_publication: \`true\`"
echo "For a CurseForge release, open [Release Base Minerals]($RELEASE_WORKFLOW_URL) on master-1.12."
echo "Use the release version, merged SHA, successful upstream CI run ID and tested jar SHA-256."
echo "Leave confirmation off for the first run to verify the release inputs."
} >> "$GITHUB_STEP_SUMMARY"
20 changes: 9 additions & 11 deletions CHANGELOG.txt
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
2.5.1.110021 for 1.10.2

Move the 1.10.2 build to ForgeGradle 7 and Forge 12.18.3.2511.
Update the Base Metals and OreSpawn dependencies and move the Java packages to zone.moddev.mc.baseminerals. Keep existing registry names and configuration keys.
Use OreSpawn 4 for ore generation, with new depths and deposit shapes for the seven minerals. Existing chunks are not regenerated.
Fix material and fluid switches, charcoal ownership, disabled-content recipes and achievements, and client models and molten textures.
Add restart-required material settings to Forge Mods and OreSpawn Mods, plus automated build, compatibility and world-generation checks.
Use KiriCattus's ore overlays for all seven ores. Generate the models during the build, with support for full ore textures as well.

Known issues:
- OreSpawn 4.1.2 can add a second lithium rule when an OS1-imported world is moved without its original global import file.
- Published Electric Advantage 2.2.0 and Power Advantage 2.3.0 fail to load with the required Base Metals version.
- Mineralogy's default keeps separate sulfur placement. Reviewed shared-output settings have been tested.
This brings the 1.10.2 build up to date on Forge 12.18.3.2511. It needs Base Metals 2.6.0.110021 and OreSpawn 4.1.6.110021.

The seven ores have new depths and deposit shapes, and now use KiriCattus's overlays on vanilla stone. Saved ore settings and existing chunks are kept. OreSpawn now preserves the imported lithium rule when you move an old OS1 world and can remove an untouched duplicate left by an earlier version.

Base Electric shares sulfur and lithium placement with Base Minerals. In a pack with both Base Electric and Mineralogy, Mineralogy places sulfur and Base Minerals places lithium.

Material settings are available from Forge Mods and OreSpawn Mods and take effect after a restart. This update also fixes disabled material recipes and achievements, charcoal ownership, and molten material textures.

The old Electric Advantage 2.2.0 and Power Advantage 2.3.0 releases are incompatible with this Base Metals build.
15 changes: 7 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ not generate as ore.
The seven ores use KiriCattus's overlays on Minecraft's stone texture.

This branch targets Minecraft 1.10.2 and Forge 12.18.3.2511 or later. It requires
Base Metals 2.5.1.110021 and OreSpawn 4.1.2.110021, or compatible versions in the
Base Metals 2.6.0.110021 and OreSpawn 4.1.6.110021, or compatible versions in the
declared ranges. Mineralogy is optional. Tinkers' Construct adds melting and
casting for lithium and silicon.

Expand All @@ -20,15 +20,14 @@ and deposit shapes for each mineral. Vanilla stone and its variants are valid
hosts, and Base Minerals does not replace terrain.

Existing registry names and configuration keys are kept. Saved OreSpawn profiles
and OS3 imports keep their settings, and generated chunks are not rewritten.
OS1 imports have a known issue when a world is moved without its original global
import file; see the [known issues](docs/KNOWN_ISSUES.md). Defaults for new worlds
can be changed in `config/baseminerals-orespawn.json`.
and OS1 and OS3 imports keep their settings. OreSpawn 4.1.6 fixes duplicate
lithium placement when an OS1-imported world moves without its provider file.
Defaults for new worlds can be changed in `config/baseminerals-orespawn.json`.

See [ore generation](docs/ORE_GENERATION.md), [building](docs/BUILDING.md),
[verification](tools/validation/legacy110/README.md) and
[release preparation](docs/RELEASING.md).

The published Electric Advantage and Power Advantage versions also have a
compatibility problem with the required Base Metals version. The
[known issues](docs/KNOWN_ISSUES.md) describe both problems and the test results.
The historical Electric Advantage and Power Advantage releases have a
compatibility problem with the required Base Metals version. See the
[known issues](docs/KNOWN_ISSUES.md) for details.
47 changes: 14 additions & 33 deletions docs/KNOWN_ISSUES.md
Original file line number Diff line number Diff line change
@@ -1,40 +1,21 @@
# Known issues for Minecraft 1.10.2

The build and fresh-world generation checks pass. Two compatibility problems
remain with the pinned dependencies.
## OS1 profiles with an edited lithium rule

## Moving an OS1-imported world can add a second lithium rule

Pinned public OreSpawn 4.1.2.110021 converts an OS1 lithium entry to
`baseminerals:legacy/baseminerals_lithium_ore_0`. First import retains its custom
frequency 1.5, quantity 4 and Y=8..39. When only the saved world is copied into a
fresh instance without the original global OS1 file, provider merging adds
`baseminerals:legacy/lithium_ore` with the fresh defaults alongside it. Both
remain active in separate placement channels. A disposable 256-chunk later
sample contained 15,759 lithium blocks, rather than preserving the imported
budget alone.

This needs a fix in OreSpawn's import and provider merging. Its published API
has no rule-ID migration alias or way to edit an active profile. Turning off
all provider merging would also stop missing rules from being added. Base
Minerals does not rewrite world profiles or call OreSpawn's internal classes.

Keeping the original global OS1 file lets the importer suppress the extra rule
again on reload; that control passes. A saved world profile alone fails to retain
its budget. The packaged suite now asserts one lithium rule after profile-only
reload. The standalone reproduction fails on this pin, and
`run_continuity_checks.py` also checks that the rule IDs for each imported output
stay the same. The earlier checks verified settings but missed the extra rule.
OS3 imports with matching rule IDs and saved selector-only profiles pass these
checks.
[OreSpawn 4.1.6.110021](https://www.curseforge.com/minecraft/mc-mods/mmd-orespawn/files/9518063)
keeps the imported lithium rule when a world moves without its original
configuration. It backs up an affected profile before removing an untouched
duplicate. The packaged tests cover the move and the repair of a copied 4.1.2
profile. If the added rule or its source policy was edited, OreSpawn preserves
the edits and flags the rule for review.

## Historical Electric Advantage dependencies

Public Electric Advantage 2.2.0 / Power Advantage 2.3.0 fail before world load
against required Base Metals 2.5.1.110021: Power Advantage references missing
`cyano.basemetals.init.Materials`. The combined Mineralogy case fails too.
Synthetic source-policy tests do not clear this public integration gate.
Electric Advantage 2.2.0 and Power Advantage 2.3.0 fail before world load with
Base Metals 2.6.0.110021 because Power Advantage references the old
`cyano.basemetals.init.Materials` class. The same failure occurs with
Mineralogy installed.

Public Mineralogy 6.0.1.110021 loads and supports reviewed sulfur consolidation.
Its fresh profile retains separate sulfur placement; automatic default
consolidation is not claimed.
Base Electric 2.2.6.110021 and Base Power 2.4.4.110021 passed the fresh and
reload shared-ore checks with the pinned Base Metals and OreSpawn builds.
See [ore generation](ORE_GENERATION.md) for the tested defaults.
9 changes: 7 additions & 2 deletions docs/ORE_GENERATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,10 @@ does not become controllable merely through an Ore Dictionary alias.
An existing profile choice remains authoritative even after sources become
manageable. Review the resulting source groups in OreSpawn before changing them.

With OreSpawn 4.1.6, fresh worlds using public Base Electric share sulfur and
lithium outputs under one placement source per ore. With Mineralogy installed,
Mineralogy places sulfur. Base Minerals places lithium in the combined pack.

Native global overrides use `config/baseminerals-orespawn.json`. Existing world
profiles and native overrides take precedence over legacy imports. Supported
OS1/OS3 custom and disabled rules retain their settings rather than adopting this
Expand All @@ -59,5 +63,6 @@ these are alternative dimension declarations, not two generation passes. Existin
ore entries are kept as whole entries, including older selector-only rules. Missing entries follow OreSpawn's normal provider merge behavior.
Retrogen stays disabled; generated chunks are unchanged. Keep legacy files until
the importer report and resulting settings have been reviewed.
The pinned engine currently reinserts a native rule after an OS1-imported world
reload; that migration gate fails. See [qualification limits](KNOWN_ISSUES.md).
OreSpawn 4.1.6 keeps OS1 placement settings when only the saved world is moved.
It backs up profiles before removing an untouched duplicate and flags edited
duplicates for review. See [qualification limits](KNOWN_ISSUES.md).
30 changes: 13 additions & 17 deletions docs/RELEASING.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,22 +10,18 @@ CI has a cold bootstrap/offline rebuild, build/tests, resource/schema checks,
packaged server qualification, Eclipse generation and clean reproducibility check.
CodeQL/wrapper checks are separate. Actions use full commit hashes.

Versions use `Major.Minor.Patch.110021`. Tags validate metadata/prior CI without
publishing. The dispatcher requires `confirm_live_publication`, the upstream
repository, matching target/tag/commit and successful hosted checks. It publishes
the same candidate bytes to Maven, CurseForge **270972**, then GitHub. CurseForge
requires Base Metals **240967** and MMD OreSpawn **245586**. Credentials and an
HTTPS Maven target are required.
Run `deploy-release.yml` from MMD's default branch, `master-1.12`. Enter the
`Major.Minor.Patch.110021` version, full merged `master-1.10.2` SHA, successful
upstream push CI run ID and SHA-256 of the tested player jar. Run it once with
confirmation off to verify the source, changelog and CI bundle.

The dispatcher must be installed on the repository's default branch before a
manual release can be started. Merging the 1.10 branch does not install it on the
1.12 default branch. Publication is a separate step and needs approval. If an
upload times out, check its status before trying again.
Set `confirm_live_publication` to upload the verified player jar to CurseForge
project **270972** with Base Metals **240967** and MMD OreSpawn **245586** marked
as required. The workflow needs access to `CURSEFORGE_TOKEN`. Check the public
file and its download checksum after upload. If an upload times out, check its
status before trying again.

The [known issues](KNOWN_ISSUES.md) remain unresolved: a moved OS1-imported world
can gain a second lithium rule, and the published Electric Advantage / Power
Advantage pair fails before world load with the required Base Metals version.
The synthetic source-policy tests do not prove that those public mods load.
Mineralogy's reviewed sulfur settings pass, while its default keeps separate
placement. Keep these results with the release candidate; the full compatibility
suite has not passed.
The historical Electric Advantage and Power Advantage pair fails before world
load with the required Base Metals version. Keep the public compatibility
results and the OS1 migration checks with the release candidate. See the
[known issues](KNOWN_ISSUES.md).
8 changes: 4 additions & 4 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ curseforge_project_id=270972
cf_requirements=mmd-orespawn,base-metals
orespawn_curse_project_id=245586
coreplugin=zone.moddev.mc.baseminerals.compat.BaseMineralsLoadingPlugin
orespawn_version=4.1.2.110021
orespawn_version_range=[4.1.2.110021,5.0.0)
orespawn_version=4.1.6.110021
orespawn_version_range=[4.1.6.110021,5.0.0)

basemetals_version=2.5.1.110021
basemetals_version_range=[2.5.1.110021,2.6.0)
basemetals_version=2.6.0.110021
basemetals_version_range=[2.6.0.110021,2.7.0)
12 changes: 6 additions & 6 deletions gradle/dependencies.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -40,14 +40,14 @@ tasks.register('verifyReleaseDependencies') {
doLast {
def artifacts = configurations.legacyModArtifacts.resolvedConfiguration.resolvedArtifacts
def orespawn = specs.find { it.id == 'orespawn' }
if (orespawn.coordinate != 'curse.maven:mmd-orespawn-245586:9276430'
|| orespawn.sha256 != '4D4975421FEEBF17505056306D06B0344D7A4553B6275885D7C5C5065B0348A6') {
throw new GradleException('Use the verified OreSpawn 4.1.2.110021 release.')
if (orespawn.coordinate != 'curse.maven:mmd-orespawn-245586:9518063'
|| orespawn.sha256 != '05DB7CBFAADC815D6A713DACDFB9F0647BCED49CCFC357FB2FF010E95BD1379F') {
throw new GradleException('Use the verified OreSpawn 4.1.6.110021 release.')
}
def basemetals = specs.find { it.id == 'basemetals' }
if (basemetals.coordinate != 'curse.maven:base-metals-240967:9280029'
|| basemetals.sha256 != '8BB1823592DCD558D17C4848AE917266FE7197B754CA628297DF837CFB3D20A3') {
throw new GradleException('Use the verified Base Metals 2.5.1.110021 release.')
if (basemetals.coordinate != 'curse.maven:base-metals-240967:9524447'
|| basemetals.sha256 != '9CA948215549C4A3D30D76339932ED489FB7D2C73A71A5F4F8F68456B8BC276B') {
throw new GradleException('Use the verified Base Metals 2.6.0.110021 release.')
}
specs.each { spec ->
def parts = spec.coordinate.split(':')
Expand Down
8 changes: 4 additions & 4 deletions gradle/dependencies.json
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
[
{
"id": "basemetals",
"coordinate": "curse.maven:base-metals-240967:9280029",
"sha256": "8BB1823592DCD558D17C4848AE917266FE7197B754CA628297DF837CFB3D20A3",
"coordinate": "curse.maven:base-metals-240967:9524447",
"sha256": "9CA948215549C4A3D30D76339932ED489FB7D2C73A71A5F4F8F68456B8BC276B",
"repository": "https://www.cursemaven.com",
"runtime": true
},
{
"id": "orespawn",
"coordinate": "curse.maven:mmd-orespawn-245586:9276430",
"sha256": "4D4975421FEEBF17505056306D06B0344D7A4553B6275885D7C5C5065B0348A6",
"coordinate": "curse.maven:mmd-orespawn-245586:9518063",
"sha256": "05DB7CBFAADC815D6A713DACDFB9F0647BCED49CCFC357FB2FF010E95BD1379F",
"repository": "https://www.cursemaven.com",
"runtime": true
},
Expand Down
8 changes: 5 additions & 3 deletions gradle/release/artifacts.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -47,13 +47,15 @@ tasks.register('verifyReleaseConfiguration') {
if (!source.contains('VERSION = "' + project.version + '"') || !source.contains('MODID = "baseminerals"')) {
throw new GradleException('The mod identity differs from the build metadata.')
}
if (project.orespawn_version != '4.1.2.110021'
|| project.orespawn_version_range != '[4.1.2.110021,5.0.0)'
if (project.orespawn_version != '4.1.6.110021'
|| project.orespawn_version_range != '[4.1.6.110021,5.0.0)'
|| !source.contains('required-after:orespawn@' + project.orespawn_version_range)
|| !source.contains('required-after:Forge@[12.18.3.2511,)')) {
throw new GradleException('The OreSpawn or Forge runtime requirement changed.')
}
if (!source.contains('required-after:basemetals@[2.5.1.110021,2.6.0)')) {
if (project.basemetals_version != '2.6.0.110021'
|| project.basemetals_version_range != '[2.6.0.110021,2.7.0)'
|| !source.contains('required-after:basemetals@' + project.basemetals_version_range)) {
throw new GradleException('The published Base Metals runtime requirement changed.')
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
modid = BaseMinerals.MODID,
name = BaseMinerals.NAME,
version = BaseMinerals.VERSION,
dependencies = "required-after:Forge@[12.18.3.2511,);required-after:basemetals@[2.5.1.110021,2.6.0);required-after:orespawn@[4.1.2.110021,5.0.0);after:tconstruct;after:enderio;before:buildingbricks",
dependencies = "required-after:Forge@[12.18.3.2511,);required-after:basemetals@[2.6.0.110021,2.7.0);required-after:orespawn@[4.1.6.110021,5.0.0);after:tconstruct;after:enderio;before:buildingbricks",
acceptedMinecraftVersions = "[1.10.2]",
guiFactory = "zone.moddev.mc.baseminerals.client.BaseMineralsGuiFactory",
updateJSON = BaseMinerals.UPDATEJSON)
Expand Down
10 changes: 5 additions & 5 deletions tools/validation/legacy110/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,11 @@ material is tested through actual generation, rather than registration alone.
Seed zero needs explicit fresh metadata because server.properties treats `0`
as random. `--quick` is only an early smoke.

The full packaged suite currently fails when it loads an OS1-imported world
without the original global import file: the pinned engine adds a second native
lithium rule. Run `reproduce_os1_reload.py` with `--java`, `--template` and a new
`--output` directory for the shorter reproduction. See the
[known issues](../../../docs/KNOWN_ISSUES.md). This failure is kept in the suite.
The packaged suite requires a single imported lithium rule after moving an OS1
world without its global import file. Run `reproduce_os1_reload.py` with
`--java`, `--template` and a new `--output` directory for the shorter check.
Keep the assertion when updating OreSpawn. See the
[known issues](../../../docs/KNOWN_ISSUES.md) for edited profiles.

`run_overlap_suite.py` stages public sibling jars pinned in
`overlap_dependencies.json` and captures their real source policies. Its Electric
Expand Down
14 changes: 9 additions & 5 deletions tools/validation/legacy110/dependency_requirements.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,9 @@

OLD = {
'base':('base-metals-240967','2323100','f919cef794c73f02758bbd967346dba0b53f6383153c7e29bd79f211cda8c319'),
'os':('mmd-orespawn-245586','2533153','d964148c20175e16ccefab02ae43a181a50dc08a1d636a77e59cfe8c8ea8d41a')
'previous_base':('base-metals-240967','9280029','8bb1823592dcd558d17c4848ae917266fe7197b754ca628297df837cfb3d20a3'),
'os':('mmd-orespawn-245586','2533153','d964148c20175e16ccefab02ae43a181a50dc08a1d636a77e59cfe8c8ea8d41a'),
'os4':('mmd-orespawn-245586','9276430','4d4975421feebf17505056306d06b0344d7a4553b6275885d7c5c5065b0348a6')
}

def verify(java,template,output,base,orespawn,minerals):
Expand All @@ -22,10 +24,12 @@ def verify(java,template,output,base,orespawn,minerals):
assert hashlib.sha256(target.read_bytes()).hexdigest()==expected,'Public fixture checksum mismatch'
old[key]=target
scenarios={
'missing-base':([orespawn,minerals],'basemetals','2.5.1.110021'),
'old-base':([old['base'],orespawn,minerals],'basemetals','2.5.1.110021'),
'missing-orespawn':([base,minerals],'orespawn','4.1.2.110021'),
'old-orespawn':([base,old['os'],minerals],'orespawn','4.1.2.110021')
'missing-base':([orespawn,minerals],'basemetals','2.6.0.110021'),
'old-base':([old['base'],orespawn,minerals],'basemetals','2.6.0.110021'),
'previous-base':([old['previous_base'],orespawn,minerals],'basemetals','2.6.0.110021'),
'missing-orespawn':([base,minerals],'orespawn','4.1.6.110021'),
'old-orespawn':([base,old['os'],minerals],'orespawn','4.1.6.110021'),
'old-orespawn4':([base,old['os4'],minerals],'orespawn','4.1.6.110021')
}
result={}
for name,(jars,modid,version) in scenarios.items():
Expand Down
Loading