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
  •  
  •  
  •  
28 changes: 13 additions & 15 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
name: basePower 1.21.1 CI
name: basePower 1.21.11 CI

on:
push:
branches: [master-1.21.1, 'feature/**']
branches: [master-1.21.11, 'feature/**']
pull_request:
branches: [master-1.21.1]
branches: [master-1.21.11]

permissions:
contents: read

concurrency:
group: basepower-1.21.1-${{ github.workflow }}-${{ github.ref }}
group: basepower-1.21.11-${{ 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-1.21.1
- name: Require the Base Metals pin on upstream master-1.21.11
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: 62c08169c71f4d4fd8f107289e63fd2a4c7c655c
ref: ecad75b24309a344f712d898d717c6a8823fc9f2
path: .ci-dependencies/OreSpawn
- name: Check out pinned Base Metals
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
repository: MinecraftModDevelopmentMods/BaseMetals
ref: 327c197bcdd0bb5e883d844bb6a6c8791bc580b7
ref: 616d527e50e4bf0137eeb9c44fa586e34a0452a0
path: .ci-dependencies/BaseMetals
- name: Install pinned Java 25 Mavenizer runtime
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
Expand Down Expand Up @@ -78,8 +78,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.0.121011.jar"
bmjar="$basemetals/build/libs/BaseMetals-3.1.2.121011.jar"
osjar="$orespawn/build/libs/OreSpawn-4.1.0.121111.jar"
bmjar="$basemetals/build/libs/BaseMetals-3.1.2.121111.jar"
test -f "$osjar" && test -f "$bmjar"
echo "orespawn=$osjar" >> "$GITHUB_OUTPUT"
echo "basemetals=$bmjar" >> "$GITHUB_OUTPUT"
Expand All @@ -90,25 +90,23 @@ jobs:
writeReleaseChecksums verifyEclipseProductionClasspath
-PbaseMetalsDeobfJar=${{ steps.dependencies.outputs.basemetals }}
-PoreSpawnDeobfJar=${{ steps.dependencies.outputs.orespawn }}
-Pforge52MavenizerJar=${{ steps.dependencies.outputs.mavenizer }}
-Pforge61MavenizerJar=${{ steps.dependencies.outputs.mavenizer }}
--no-daemon --stacktrace
- name: Upload audited release candidate
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: basePower-1.21.1-${{ github.sha }}
name: basePower-1.21.11-${{ github.sha }}
if-no-files-found: error
retention-days: 30
path: |
build/libs/basePower-2.4.14.121011.jar
build/libs/basePower-2.4.14.121011-sources.jar
build/libs/basePower-2.4.14.121011-javadoc.jar
build/libs/basePower-*.jar
build/release/SHA256SUMS
CHANGELOG.txt
- name: Upload diagnostics on failure
if: failure()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: basePower-1.21.1-diagnostics-${{ github.sha }}
name: basePower-1.21.11-diagnostics-${{ github.sha }}
if-no-files-found: ignore
retention-days: 14
path: |
Expand Down
16 changes: 8 additions & 8 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-1.21.1, 'feature/**']
branches: [master-1.21.11, 'feature/**']
pull_request:
branches: [master-1.21.1]
branches: [master-1.21.11]
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-1.21.1
- name: Require the Base Metals pin on upstream master-1.21.11
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: 62c08169c71f4d4fd8f107289e63fd2a4c7c655c
ref: ecad75b24309a344f712d898d717c6a8823fc9f2
path: .ci-dependencies/OreSpawn
- name: Check out pinned Base Metals
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
repository: MinecraftModDevelopmentMods/BaseMetals
ref: 327c197bcdd0bb5e883d844bb6a6c8791bc580b7
ref: 616d527e50e4bf0137eeb9c44fa586e34a0452a0
path: .ci-dependencies/BaseMetals
- name: Install pinned Java 25 Mavenizer runtime
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
Expand Down Expand Up @@ -79,8 +79,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.0.121011.jar" >> "$GITHUB_OUTPUT"
echo "basemetals=$basemetals/build/libs/BaseMetals-3.1.2.121011.jar" >> "$GITHUB_OUTPUT"
echo "orespawn=$orespawn/build/libs/OreSpawn-4.1.0.121111.jar" >> "$GITHUB_OUTPUT"
echo "basemetals=$basemetals/build/libs/BaseMetals-3.1.2.121111.jar" >> "$GITHUB_OUTPUT"
echo "mavenizer=$mavenizer" >> "$GITHUB_OUTPUT"
- name: Initialize CodeQL
uses: github/codeql-action/init@db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28 # v4
Expand All @@ -93,6 +93,6 @@ jobs:
./gradlew $MMD_GRADLE_TOOLCHAINS clean classes verifyReleaseDependencies --rerun-tasks --no-build-cache --no-daemon --stacktrace \
-PbaseMetalsDeobfJar=${{ steps.dependencies.outputs.basemetals }} \
-PoreSpawnDeobfJar=${{ steps.dependencies.outputs.orespawn }} \
-Pforge52MavenizerJar=${{ steps.dependencies.outputs.mavenizer }}
-Pforge61MavenizerJar=${{ steps.dependencies.outputs.mavenizer }}
- 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.21.1
- master-1.21.11
- 'feature/**'
pull_request:
branches:
- master-1.21.1
- master-1.21.11

permissions:
contents: read
Expand Down
19 changes: 19 additions & 0 deletions CHANGELOG.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,22 @@
basePower 2.4.15.121111 (Minecraft 1.21.11)

- Bring basePower to Forge 61 and Java 21, keeping the existing machine and world identities.
- Use native value-based saves and migration Mixins while retaining the legacy API's saved fields.
- Update recipes, item definitions, resource packs and fluid screens for the newer APIs.
- Keep old-world upgrade checks separate from the machine, restart and visual checks.
- Keep chunk-migration callbacks cooperative with Base Metals so old turbine and entity data is restored.
- Handle vanilla's chain rename and retired registry indexes when upgrading newer saved worlds.
- Keep machine and pipe item names translated with the native block-item naming rules.
- Separate block and item atlas entries so the new renderer keeps machine textures visible.
- Keep older biome registry snapshots from blocking upgrades through 1.13 saves. Minecraft still converts the saved biome names.
- Translate older Forge registry names without dropping their entries, and keep an exact recovery copy of the retired enchantment index.
- Recognise four removed vanilla sound indexes when upgrading older worlds.
- Require Base Metals in Forge's dependency checks as well as on CurseForge.
- Keep the release upload in step with the declared version.
- Run wrapper validation on the current Minecraft branch as well as the main build and CodeQL checks.
- Keep resource checks non-interactive in CI without hiding warnings or errors.
- Complete machine, upgrade, graphical and two-world endurance checks against the current jars. Manual testing is accepted; publication remains a separate step.

basePower 2.4.14.121011 (Minecraft 1.21.1)

- Bring basePower to Forge 52 and Java 21, keeping existing blocks, items and machine data.
Expand Down
65 changes: 36 additions & 29 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,57 +1,64 @@
# basePower

**Minecraft 1.21.1 (Forge), version 2.4.14.121011.**
**Minecraft 1.21.11 (Forge), version 2.4.15.121111.**

This version keeps the existing machines and saved-world data while updating
to Forge 52 and Java 21. See the [1.21.1 test results](docs/1.21.1/TEST-RESULTS.md)
for the checked upgrade routes, machine tests and remaining modpack limits.
This version has passed automated qualification and manual testing. See the
[1.21.11 port record](docs/1.21.11/PORT-STATUS.md) for the checks and remaining
coverage limits. Release publication is handled separately; results from
earlier versions do not qualify this build.

The current Base Metals-installed test set has passed its automated machine,
upgrade, graphical and two-world 30-minute endurance checks. Manual testing has
also been accepted. See the [qualification record](docs/1.21.11/QUALIFICATION.md)
for the exact jars, results and remaining human checks.

For the combined Eclipse test, use `runClientAllAdvantage.launch` in this
project. It loads the matching baseSteam and baseElectric candidates. The
[port record](docs/1.21.1/PORT-STATUS.md) separates the automated checks from
[port record](docs/1.21.11/PORT-STATUS.md) separates the automated checks from
the remaining manual gameplay and visual checks.

basePower continues DrCyano's Power Advantage. It provides shared power,
fluids and item transport for baseSteam and baseElectric.

## Playing On 1.21.1
## Playing On 1.21.11

- Install [MMD OreSpawn 4.1.0.121011](https://www.curseforge.com/minecraft/mc-mods/mmd-orespawn/files/9189594) on both client and server.
- Base Metals is optional for a new basePower world. For a world that already
uses Base Metals, keep it installed and use the matching Forge 1.21.1 build
`3.1.2.121011` or a later compatible Forge 52 release. Older Base Metals
builds do not have the shared upgrade hook.
- Install [MMD OreSpawn 4.1.0.121111](https://www.curseforge.com/minecraft/mc-mods/mmd-orespawn/files/9268464) on both client and server.
- Base Metals is required on both client and server. Use the matching Forge
1.21.11 build `3.1.2.121111`. Older Base Metals builds do not have the shared
upgrade hook. The matching dependency must be published before the base*
releases; a local test result alone does not establish public availability.
- baseSteam and baseElectric are separate mods. Use only their matching
1.21.1 builds. Additional Loot Tables is not needed for the built-in loot.
1.21.11 builds. 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
use disposable copies of original Advantage and released base* saves, including
connected machines, and check them again after a full restart. Check that the
other mods in your world support 1.21.1 before you upgrade.
other mods in your world support 1.21.11 before you 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 1.21.1
## Building Minecraft 1.21.11

The build uses Forge 52.1.0, official `1.21.1` mappings,
MCP `20240808.132146`, ForgeGradle 7.0.34 and Gradle 9.6.1.
The build uses Forge 61.1.0, official `1.21.11` mappings,
MCP `20251223.124241`, ForgeGradle 7.0.34 and Gradle 9.6.1.
Use Java 21 for Gradle, compilation and Minecraft. Mavenizer also
needs Java 25; the development launcher helper uses Java 8. Pass the installed homes using
`-Porg.gradle.java.installations.paths=<java8>,<java21>,<java25>` and disable
automatic discovery and downloads for a reproducibility check.

Use the pinned Base Metals `3.1.2.121011` and OreSpawn `4.1.0.121011` jars.
Use the pinned Base Metals `3.1.2.121111` and OreSpawn `4.1.0.121111` jars.
The source pins and checksums are in `gradle.properties`.
Forge 52 also needs the Mavenizer compatibility jar in the pinned OreSpawn
checkout's `ci-fixtures/tools/` directory. It fixes decompiled Forge sources
on a clean build and uses Java 25. It is not part of the mod or game runtime.
Set `-Pforge52MavenizerJar=<path>` when that checkout is in another location.
If Base Metals is installed, use the pinned 3.1.2 build when testing an upgrade. It lets
Forge 61 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 Forge 61.1.0. It uses Java 25 and is not part of the mod or game runtime.
Set `-Pforge61MavenizerJar=<path>` when that checkout is in another location.
Use the pinned Base Metals 3.1.2 build for both new worlds and upgrades. It lets
both mods preserve old items and machines before Minecraft converts the
chunk. An older Base Metals jar is not a substitute for this upgrade path.

Expand All @@ -64,8 +71,8 @@ gradlew.bat clean check build javadoc genEclipseRuns eclipse isolateEclipseProdu
The default dependency jars are:

```text
D:\BaseMetals\.verification-basemetals1211\Advantage shared hook\build\libs\BaseMetals-3.1.2.121011.jar
D:\MinecraftMineralogy\OS1211\OreSpawn\build\libs\OreSpawn-4.1.0.121011.jar
D:\BaseMetals\.verification-basemetals12111\Advantage shared hook\build\libs\BaseMetals-3.1.2.121111.jar
D:\MinecraftMineralogy\OS12111\OreSpawn\build\libs\OreSpawn-4.1.0.121111.jar
```

Other layouts can pass `-PbaseMetalsDeobfJar=<path>` and `-PoreSpawnDeobfJar=<path>`.
Expand All @@ -74,10 +81,10 @@ 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-1.21.1` branch; a locally tested pin
Metals pin to be on its upstream `master-1.21.11` branch; a locally tested pin
does not qualify a hosted build.

Release jars are written to `build/libs`. Forge 52 uses the same mod jar for play
Release jars are written to `build/libs`. Forge 61 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 @@ -90,10 +97,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.15.121011` jars,
To prepare a combined client, build the baseSteam and baseElectric `2.2.16.121111` jars,
run `gradlew.bat prepareCombinedEclipseLaunch`, refresh Eclipse, then launch
`runClientAllAdvantage.launch`. Inputs must match
`test-rig/profiles/native1211/dev-core.json`; alternative layouts can pass
`test-rig/profiles/native12111/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 @@ -129,6 +136,6 @@ 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 into 1.21.1.
qualification and the checks carried into 1.21.11.

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