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
4 changes: 2 additions & 2 deletions .github/test-base-metals-pin.sh
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ chmod +x "$scratch/bin/gh"
export PATH="$scratch/bin:$PATH"
commit=1111111111111111111111111111111111111111
cd "$scratch/project"
for minecraft in 1.20.6 1.21.1 1.21.11 26.1.2; do
for minecraft in 1.20.6 1.21.1 1.21.11 26.1.2 26.2; do
printf 'minecraft_version=%s\nbasemetals_source_commit=%s\n' "$minecraft" "$commit" > gradle.properties
export EXPECTED_COMPARE="repos/MinecraftModDevelopmentMods/BaseMetals/compare/$commit...master-$minecraft"
export GITHUB_OUTPUT="$scratch/output"
Expand All @@ -44,7 +44,7 @@ for minecraft in 1.20.6 1.21.1 1.21.11 26.1.2; do
test ! -s "$GITHUB_OUTPUT"
done
done
for minecraft in invalid 26.1 26.1.2/evil master-26.1.2 0.1.2; do
for minecraft in invalid 1.21 26.2/evil master-26.2 0.1.2; do
printf 'minecraft_version=%s\nbasemetals_source_commit=%s\n' "$minecraft" "$commit" > gradle.properties
if bash "$verify" > "$scratch/invalid.log" 2>&1; then
echo "Incorrectly accepted an invalid target: $minecraft" >&2
Expand Down
2 changes: 1 addition & 1 deletion .github/verify-base-metals-pin.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ if [[ ! "$commit" =~ ^[0-9a-f]{40}$ ]]; then
fi

minecraft="$(sed -n 's/^minecraft_version=//p' gradle.properties)"
if [[ ! "$minecraft" =~ ^(1|[2-9][0-9])\.[0-9]+\.[0-9]+$ ]]; then
if [[ ! "$minecraft" =~ ^(1\.[0-9]+\.[0-9]+|[2-9][0-9]\.[0-9]+(\.[0-9]+)?)$ ]]; then
echo "::error::Expected a complete Minecraft target version in gradle.properties"
exit 1
fi
Expand Down
22 changes: 11 additions & 11 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
name: basePower 26.1.2 CI
name: basePower 26.2 CI

on:
push:
branches: [master-26.1.2, 'feature/**']
branches: [master-26.2, 'feature/**']
pull_request:
branches: [master-26.1.2]
branches: [master-26.2]

permissions:
contents: read

concurrency:
group: basepower-26.1.2-${{ github.workflow }}-${{ github.ref }}
group: basepower-26.2-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
Expand All @@ -23,7 +23,7 @@ jobs:
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- name: Test target-derived dependency guards
run: bash .github/test-base-metals-pin.sh
- name: Require the Base Metals pin on upstream master-26.1.2
- name: Require the Base Metals pin on upstream master-26.2
id: base-metals-pin
env:
GH_TOKEN: ${{ github.token }}
Expand All @@ -34,13 +34,13 @@ jobs:
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
repository: MinecraftModDevelopmentMods/OreSpawn
ref: 101fd12b598934c353e417c57edc5c2bbefd5f53
ref: dcaaa933299dd8b1ebc73e31c9e5acd36dd7957c
path: .ci-dependencies/OreSpawn
- name: Check out pinned Base Metals
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
repository: MinecraftModDevelopmentMods/BaseMetals
ref: 331fa46914f854db71a8c33500cc559a8878b7d3
ref: 523335a59ecff399e40a7c66eb121a3aabdc45ba
path: .ci-dependencies/BaseMetals
- name: Install Java 25 for Gradle, tools and Minecraft
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
Expand Down Expand Up @@ -68,8 +68,8 @@ jobs:
(cd "$basemetals" && bash gradle/stage-orespawn-release.sh "$mirror")
(cd "$orespawn" && bash gradlew $MMD_GRADLE_TOOLCHAINS jar --no-daemon --stacktrace)
(cd "$basemetals" && bash gradlew $MMD_GRADLE_TOOLCHAINS jar -PorespawnVerificationRepository="$mirror" --no-daemon --stacktrace)
osjar="$orespawn/build/libs/OreSpawn-4.1.1.2601021.jar"
bmjar="$basemetals/build/libs/BaseMetals-3.1.2.2601021.jar"
osjar="$orespawn/build/libs/OreSpawn-4.1.1.2602001.jar"
bmjar="$basemetals/build/libs/BaseMetals-3.1.2.2602001.jar"
test -f "$osjar" && test -f "$bmjar"
echo "orespawn=$osjar" >> "$GITHUB_OUTPUT"
echo "basemetals=$bmjar" >> "$GITHUB_OUTPUT"
Expand All @@ -85,7 +85,7 @@ jobs:
- name: Upload audited release candidate
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: basePower-26.1.2-${{ github.sha }}
name: basePower-26.2-${{ github.sha }}
if-no-files-found: error
retention-days: 30
path: |
Expand All @@ -96,7 +96,7 @@ jobs:
if: failure()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: basePower-26.1.2-diagnostics-${{ github.sha }}
name: basePower-26.2-diagnostics-${{ github.sha }}
if-no-files-found: ignore
retention-days: 14
path: |
Expand Down
14 changes: 7 additions & 7 deletions .github/workflows/codeql-analysis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ name: CodeQL

on:
push:
branches: [master-26.1.2, 'feature/**']
branches: [master-26.2, 'feature/**']
pull_request:
branches: [master-26.1.2]
branches: [master-26.2]
schedule:
- cron: '47 7 * * 4'

Expand All @@ -23,7 +23,7 @@ jobs:
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- name: Test target-derived dependency guards
run: bash .github/test-base-metals-pin.sh
- name: Require the Base Metals pin on upstream master-26.1.2
- name: Require the Base Metals pin on upstream master-26.2
id: base-metals-pin
env:
GH_TOKEN: ${{ github.token }}
Expand All @@ -34,13 +34,13 @@ jobs:
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
repository: MinecraftModDevelopmentMods/OreSpawn
ref: 101fd12b598934c353e417c57edc5c2bbefd5f53
ref: dcaaa933299dd8b1ebc73e31c9e5acd36dd7957c
path: .ci-dependencies/OreSpawn
- name: Check out pinned Base Metals
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
repository: MinecraftModDevelopmentMods/BaseMetals
ref: 331fa46914f854db71a8c33500cc559a8878b7d3
ref: 523335a59ecff399e40a7c66eb121a3aabdc45ba
path: .ci-dependencies/BaseMetals
- name: Install Java 25 for Gradle, tools and Minecraft
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
Expand Down Expand Up @@ -69,8 +69,8 @@ jobs:
chmod +x "$orespawn/gradlew" "$basemetals/gradlew"
(cd "$orespawn" && ./gradlew $MMD_GRADLE_TOOLCHAINS jar --no-daemon --stacktrace)
(cd "$basemetals" && ./gradlew $MMD_GRADLE_TOOLCHAINS jar -PorespawnVerificationRepository="$mirror" --no-daemon --stacktrace)
echo "orespawn=$orespawn/build/libs/OreSpawn-4.1.1.2601021.jar" >> "$GITHUB_OUTPUT"
echo "basemetals=$basemetals/build/libs/BaseMetals-3.1.2.2601021.jar" >> "$GITHUB_OUTPUT"
echo "orespawn=$orespawn/build/libs/OreSpawn-4.1.1.2602001.jar" >> "$GITHUB_OUTPUT"
echo "basemetals=$basemetals/build/libs/BaseMetals-3.1.2.2602001.jar" >> "$GITHUB_OUTPUT"
echo "mavenizer=$mavenizer" >> "$GITHUB_OUTPUT"
- name: Initialize CodeQL
uses: github/codeql-action/init@db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28 # v4
Expand Down
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-26.1.2
- master-26.2
- 'feature/**'
pull_request:
branches:
- master-26.1.2
- master-26.2

permissions:
contents: read
Expand Down
9 changes: 9 additions & 0 deletions CHANGELOG.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,12 @@
basePower 2.4.17.2602001 (Minecraft 26.2)

- Bring the accepted 26.1.2 source to Forge 65 and Java 25, keeping existing machine identities and saved data.
- Update the native data and client resource format checks for Minecraft 26.2.
- Use the current native GUI and rendering APIs without changing machine balance.
- Recognise Minecraft's new sulfur-caves biome when checking saved registry snapshots.
- Keep the shared Base Metals migration hook and qualify OreSpawn's retained-settings repair locally.
- Complete machine, recipe progression, old-world migration, full-restart, graphical and two-world 30-minute endurance checks, followed by manual testing.

basePower 2.4.16.2601021 (Minecraft 26.1.2)

- Require OreSpawn 4.1.1 so old generation rules keep their saved settings without enabling duplicate modern ore rules.
Expand Down
63 changes: 33 additions & 30 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
# basePower

**Minecraft 26.1.2 (Forge), version 2.4.16.2601021.**

This branch has passed its
[26.1.2 automated qualification](docs/26.1.2/QUALIFICATION.md) and manual
playtesting. [basePower is available on CurseForge](https://www.curseforge.com/minecraft/mc-mods/basepower/files/9576332),
MMD Maven and GitHub Releases. All three downloads have the same player-jar
checksum. The
[port record](docs/26.1.2/PORT-STATUS.md) keeps the earlier findings separate.
**Minecraft 26.2 (Forge), version 2.4.17.2602001. Accepted for release.**

This branch is a fresh port of the accepted 26.1.2 source. Its automated
machine, migration, graphical and endurance checks have passed, and manual
testing is complete. Publication is being prepared separately. See the
[26.2 qualification](docs/26.2/QUALIFICATION.md) and
[port record](docs/26.2/PORT-STATUS.md).
The [26.1.2 qualification](docs/26.1.2/QUALIFICATION.md) and
[port record](docs/26.1.2/PORT-STATUS.md) keep the earlier findings separate.
The [1.21.11 qualification](docs/1.21.11/QUALIFICATION.md) remains historical
evidence, not proof of this port.

Expand All @@ -17,39 +18,40 @@ matching baseSteam and baseElectric candidates with basePower.
basePower continues DrCyano's Power Advantage. It provides shared power,
fluids and item transport for baseSteam and baseElectric.

## Testing On 26.1.2
## Testing On 26.2

- Use MMD OreSpawn `4.1.1.2601021` on both client and server. This includes
the fix that keeps saved ore settings when providers rename their rules.
- Use released [Base Metals `3.1.2.2601021`](https://www.curseforge.com/minecraft/mc-mods/base-metals/files/9576007)
on both client and server. It includes the shared migration hook used by the
upgrade tests; the older `3.1.1` jar is not a substitute.
- Use the local MMD OreSpawn `4.1.1.2602001` on both client and server. This
includes the retained-provider-settings fix used by the upgrade tests.
- Use the local Base Metals `3.1.2.2602001` migration-hook build on both sides.
Neither dependency fix is published. Older public jars are not substitutes
for this test kit; exact source commits and hashes are in `gradle.properties`.
- baseSteam and baseElectric are separate mods. Use only their matching
26.1.2 builds. Additional Loot Tables is not needed for the built-in loot.
26.2 builds: version `2.2.18.2602001` for each. Additional Loot Tables is not
needed for the built-in loot.

**Back up the entire world before upgrading. Test only disposable copies.**
The port keeps existing registry names and machine data. The upgrade checks
used disposable copies of original Advantage and released base* saves,
including connected machines, and check them after a full restart. Check that
the other mods in your world support 26.1.2 before attempting an upgrade.
the other mods in your world support 26.2 before attempting an upgrade.
The accepted [1.14 results](docs/1.14/BROADER-QUALIFICATION.md) are historical
evidence, not qualification of this port or a whole modpack.

Recipe-book discovery now follows relevant ingredients. See the [all-Advantage material checklist and automated discovery tests](docs/1.13/RECIPE-DISCOVERY.md). To regenerate the checked-in unlock JSON after changing recipes, run `node tools/generate-recipe-unlocks.js`; `check` rejects missing or stale ingredient criteria.

The [manufacturing progression audit](docs/1.13/MANUFACTURING-PROGRESSION.md) traces survival parts from raw resources, including configured material aliases, processing, loot-only parts and automated restart checks.

## Building Minecraft 26.1.2
## Building Minecraft 26.2

The build uses Forge 64.1.5, official `26.1.2` names,
MCP `20260409.101008`, ForgeGradle 7.0.34 and Gradle 9.6.1.
The build uses Forge 65.1.0, official `26.2` names,
MCP `20260616.103818`, ForgeGradle 7.0.34 and Gradle 9.6.1.
Use Java `25.0.3+9` for Gradle, compilation, Mavenizer and Minecraft. Pass its home using
`-Porg.gradle.java.installations.paths=<java25>` and disable
automatic discovery and downloads for a reproducibility check.

Use the pinned Base Metals `3.1.2.2601021` and OreSpawn `4.1.1.2601021` jars.
Use the pinned Base Metals `3.1.2.2602001` and OreSpawn `4.1.1.2602001` jars.
The source pins and checksums are in `gradle.properties`.
Forge 64 also needs the Mavenizer compatibility jar in the pinned OreSpawn
Forge 65 also needs the Mavenizer compatibility jar in the pinned OreSpawn
checkout's `ci-fixtures/tools/` directory. This is the same checksum-verified
source preparation tool used by OreSpawn; its manifest makes no source changes
for this target. It is not part of the mod or game runtime.
Expand All @@ -67,8 +69,8 @@ gradlew.bat clean check build javadoc genEclipseRuns eclipse isolateEclipseProdu
The default dependency jars are:

```text
D:\BaseMetals\BaseMetals 2612\BaseMetals\build\libs\BaseMetals-3.1.2.2601021.jar
D:\MinecraftMineralogy\OS2612\OreSpawn\build\libs\OreSpawn-4.1.1.2601021.jar
D:\BaseMetals\BaseMetals 262\BaseMetals\build\libs\BaseMetals-3.1.2.2602001.jar
D:\MinecraftMineralogy\OS262\OreSpawn\build\libs\OreSpawn-4.1.1.2602001.jar
```

Other layouts can pass `-PbaseMetalsDeobfJar=<path>` and `-PoreSpawnDeobfJar=<path>`.
Expand All @@ -77,10 +79,11 @@ Dependencies are never embedded in PowerAdvantage artifacts.
Dependency checksums and source commits are recorded in `gradle.properties`.
Unknown artifacts fail the dependency audit. The release audit also rejects a
player jar that differs from the frozen test kit. Hosted CI requires the Base
Metals pin to be on its upstream `master-26.1.2` branch; a locally tested pin
does not qualify a hosted build.
Metals pin to be on its upstream `master-26.2` branch; a locally tested pin
does not qualify a hosted build. The current local dependency fixes still
need their own review and publication before that gate can pass.

Release jars are written to `build/libs`. Forge 64 uses the same mod jar for play
Release jars are written to `build/libs`. Forge 65 uses the same mod jar for play
and development; `deobfJar` is kept as a task alias for older build scripts.

For Eclipse, import this repository as an existing Gradle project and run:
Expand All @@ -93,10 +96,10 @@ Refresh the project in Eclipse, allow its Java build to finish, and launch the g

Eclipse copies production resources from `build/resources/main`, not directly from `src/main/resources`. This prevents its builder from overwriting the expanded `mods.toml` with raw `${version}` placeholders. After updating this setup, use **Gradle > Refresh Gradle Project**, then **Project > Clean** before relaunching. After editing resources or version properties, run `processResources` or refresh the Gradle project before the Eclipse build. See the [metadata regression notes](docs/1.13/ECLIPSE-METADATA.md).

To prepare a combined client, build the baseSteam and baseElectric `2.2.17.2601021` jars,
To prepare a combined client, build the baseSteam and baseElectric `2.2.18.2602001` jars,
run `gradlew.bat prepareCombinedEclipseLaunch`, refresh Eclipse, then launch
`runClientAllAdvantage.launch`. Inputs must match
`test-rig/profiles/native2612/dev-core.json`; alternative layouts can pass
`test-rig/profiles/native262/dev-core.json`; alternative layouts can pass
`-PsteamAdvantageDeobfJar=<path>` and `-PelectricAdvantageDeobfJar=<path>`.
The ordinary `runClient.launch` remains Power-only. Both use the `run` directory;
preparing a launch does not copy, open or qualify a save.
Expand Down Expand Up @@ -131,7 +134,7 @@ data-pack tags. The shared pre-flattening migration hook remains necessary;
its presence is not proof that an upgrade is safe.

The [legacy migration guide](docs/1.13/MIGRATION.md) describes the earlier protocols.
The [Advantage Works 1.20.1 guide](test-rig/NATIVE1201.md) describes the prior
qualification and the checks carried forward into later ports.
The [Advantage Works 26.2 guide](test-rig/NATIVE262.md) describes the current
drivers, input seals and independent replay. Earlier guides remain historical.

The historical 1.10 handbook remains on the [1.10.2 branch](https://github.com/MinecraftModDevelopmentMods/PowerAdvantage/blob/master-1.10.2/docs/1.10/README.md).
Loading
Loading