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

on:
push:
branches: [master-1.18.2, 'feature/**']
branches: [master-1.19.4, 'feature/**']
pull_request:
branches: [master-1.18.2]
branches: [master-1.19.4]

permissions:
contents: read

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

jobs:
Expand All @@ -25,7 +25,7 @@ jobs:
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
repository: MinecraftModDevelopmentMods/OreSpawn
ref: d31f52f296739f34a0c13f554abf3e1ac071ae25
ref: 444d86ef48db2bf54422901b067c51d5832197fc
path: .ci-dependencies/OreSpawn
- name: Use canonical LF dependency inputs
# Use the same source bytes on hosted and local dependency builds.
Expand All @@ -34,7 +34,7 @@ jobs:
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
repository: MinecraftModDevelopmentMods/BaseMetals
ref: 3488ed58403722ac3ff203cff7680dfc16e0fd3f
ref: a9fdd6842f2a2e1e2e5b9a0abf9178d5675df044
path: .ci-dependencies/BaseMetals
- name: Install pinned Java 25 Mavenizer runtime
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
Expand Down Expand Up @@ -67,38 +67,41 @@ jobs:
set -euo pipefail
orespawn="$GITHUB_WORKSPACE/.ci-dependencies/OreSpawn"
basemetals="$GITHUB_WORKSPACE/.ci-dependencies/BaseMetals"
mavenizer="$orespawn/ci-fixtures/tools/minecraft-mavenizer-0.5.21-orespawn-compat.jar"
chmod +x "$orespawn/gradlew" "$basemetals/gradlew"
(cd "$orespawn" && ./gradlew $MMD_GRADLE_TOOLCHAINS jar --no-daemon --stacktrace)
(cd "$basemetals" && ./gradlew $MMD_GRADLE_TOOLCHAINS jar --no-daemon --stacktrace)
osjar="$orespawn/build/libs-dev/OreSpawn-4.1.0.118021-deobf.jar"
bmjar="$basemetals/build/libs-dev/BaseMetals-3.1.2.118021-deobf.jar"
osjar="$orespawn/build/libs-dev/OreSpawn-4.1.0.119041-deobf.jar"
bmjar="$basemetals/build/libs-dev/BaseMetals-3.1.2.119041-deobf.jar"
test -f "$osjar" && test -f "$bmjar"
echo "orespawn=$osjar" >> "$GITHUB_OUTPUT"
echo "basemetals=$bmjar" >> "$GITHUB_OUTPUT"
echo "mavenizer=$mavenizer" >> "$GITHUB_OUTPUT"
- name: Build and audit release artifacts
run: >-
./gradlew $MMD_GRADLE_TOOLCHAINS clean check build javadoc verifyReleaseDependencies verifyReleaseArtifacts
writeReleaseChecksums verifyEclipseProductionClasspath
-PbaseMetalsDeobfJar=${{ steps.dependencies.outputs.basemetals }}
-PoreSpawnDeobfJar=${{ steps.dependencies.outputs.orespawn }}
-Pforge45MavenizerJar=${{ steps.dependencies.outputs.mavenizer }}
--no-daemon --stacktrace
- name: Upload audited release candidate
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: basePower-1.18.2-${{ github.sha }}
name: basePower-1.19.4-${{ github.sha }}
if-no-files-found: error
retention-days: 30
path: |
build/libs/basePower-2.4.10.118021.jar
build/libs/basePower-2.4.10.118021-sources.jar
build/libs/basePower-2.4.10.118021-javadoc.jar
build/libs/basePower-2.4.11.119041.jar
build/libs/basePower-2.4.11.119041-sources.jar
build/libs/basePower-2.4.11.119041-javadoc.jar
build/release/SHA256SUMS
CHANGELOG.txt
- name: Upload diagnostics on failure
if: failure()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: basePower-1.18.2-diagnostics-${{ github.sha }}
name: basePower-1.19.4-diagnostics-${{ github.sha }}
if-no-files-found: ignore
retention-days: 14
path: |
Expand Down
17 changes: 10 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-1.18.2, 'feature/**']
branches: [master-1.19.4, 'feature/**']
pull_request:
branches: [master-1.18.2]
branches: [master-1.19.4]
schedule:
- cron: '47 7 * * 4'

Expand All @@ -25,7 +25,7 @@ jobs:
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
repository: MinecraftModDevelopmentMods/OreSpawn
ref: d31f52f296739f34a0c13f554abf3e1ac071ae25
ref: 444d86ef48db2bf54422901b067c51d5832197fc
path: .ci-dependencies/OreSpawn
- name: Use canonical LF dependency inputs
# Use the same source bytes on hosted and local dependency builds.
Expand All @@ -34,7 +34,7 @@ jobs:
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
repository: MinecraftModDevelopmentMods/BaseMetals
ref: 3488ed58403722ac3ff203cff7680dfc16e0fd3f
ref: a9fdd6842f2a2e1e2e5b9a0abf9178d5675df044
path: .ci-dependencies/BaseMetals
- name: Install pinned Java 25 Mavenizer runtime
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
Expand Down Expand Up @@ -67,11 +67,13 @@ jobs:
set -euo pipefail
orespawn="$GITHUB_WORKSPACE/.ci-dependencies/OreSpawn"
basemetals="$GITHUB_WORKSPACE/.ci-dependencies/BaseMetals"
mavenizer="$orespawn/ci-fixtures/tools/minecraft-mavenizer-0.5.21-orespawn-compat.jar"
chmod +x "$orespawn/gradlew" "$basemetals/gradlew"
(cd "$orespawn" && ./gradlew $MMD_GRADLE_TOOLCHAINS jar --no-daemon --stacktrace)
(cd "$basemetals" && ./gradlew $MMD_GRADLE_TOOLCHAINS jar --no-daemon --stacktrace)
echo "orespawn=$orespawn/build/libs-dev/OreSpawn-4.1.0.118021-deobf.jar" >> "$GITHUB_OUTPUT"
echo "basemetals=$basemetals/build/libs-dev/BaseMetals-3.1.2.118021-deobf.jar" >> "$GITHUB_OUTPUT"
echo "orespawn=$orespawn/build/libs-dev/OreSpawn-4.1.0.119041-deobf.jar" >> "$GITHUB_OUTPUT"
echo "basemetals=$basemetals/build/libs-dev/BaseMetals-3.1.2.119041-deobf.jar" >> "$GITHUB_OUTPUT"
echo "mavenizer=$mavenizer" >> "$GITHUB_OUTPUT"
- name: Initialize CodeQL
uses: github/codeql-action/init@db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28 # v4
with:
Expand All @@ -81,6 +83,7 @@ jobs:
chmod +x ./gradlew
./gradlew $MMD_GRADLE_TOOLCHAINS clean classes --rerun-tasks --no-build-cache --no-daemon --stacktrace \
-PbaseMetalsDeobfJar=${{ steps.dependencies.outputs.basemetals }} \
-PoreSpawnDeobfJar=${{ steps.dependencies.outputs.orespawn }}
-PoreSpawnDeobfJar=${{ steps.dependencies.outputs.orespawn }} \
-Pforge45MavenizerJar=${{ 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.18.2
- master-1.19.4
- 'feature/**'
pull_request:
branches:
- master-1.18.2
- master-1.19.4

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.11.119041 (Minecraft 1.19.4)

- Bring basePower to Forge 45 and Java 17 without renaming existing machines or items.
- Use the Forge creative tab, fluid types and capabilities. The three mods still share one tab.
- Load the existing machine and oil textures into the new Minecraft texture atlas.
- Adapt the world upgrade hooks to the new save reader and retain the old block, item and machine mappings.
- Keep saved painting variants and recognise the two unused villager points of interest that Minecraft removes when upgrading a 1.18.2 world.
- Keep shared test sources in the right packages so the Eclipse project imports without Java errors.

basePower 2.4.10.118021 (Minecraft 1.18.2)

- Bring basePower to Forge 40 and Java 17, keeping the same blocks, items and machine data.
Expand Down
48 changes: 25 additions & 23 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,41 +1,43 @@
# basePower

**Minecraft 1.18.2, version 2.4.10.118021.**
**Minecraft 1.19.4, version 2.4.11.119041.**

See the [1.18 port record](docs/1.18/PORT-STATUS.md) for the current checks.
See the [1.19 port record](docs/1.19/PORT-STATUS.md) for the current checks.
Results from earlier versions do not qualify this build.

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

**Back up the entire world before upgrading. Test only disposable copies.**
The port keeps existing registry names and machine data. I tested disposable
copies of original Advantage and released base* saves, including connected
machines, and checked them again after closing and restarting Minecraft.
Check that the other mods in your world support 1.18.2 before you upgrade.
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.19.4 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.18.2
## Building Minecraft 1.19.4

The build uses Forge 40.3.0, official `1.18.2` mappings,
MCP `20220404.173914`, ForgeGradle 7.0.34 and Gradle 9.6.1.
The build uses Forge 45.4.0, official `1.19.4` mappings,
MCP `20230314.122934`, ForgeGradle 7.0.34 and Gradle 9.6.1.
Use Java 17 for Gradle, compilation and Minecraft. Mavenizer also
needs Java 25. CI pins these JDKs and Java 8 for the legacy renamer. Pass the installed homes using
`-Porg.gradle.java.installations.paths=<java8>,<java17>,<java25>` and disable
automatic discovery and downloads for a reproducibility check.

Build the pinned Base Metals `3.1.2.118021` and OreSpawn `4.1.0.118021` deobf jars first.
Build the pinned Base Metals `3.1.2.119041` and OreSpawn `4.1.0.119041` deobf jars first.
The source pins and checksums are in `gradle.properties`.
Check out the pinned dependency sources with `core.autocrlf=false` so the
Base Metals development jar matches CI.
Use Base Metals 3.1.2 for upgrades with Base Metals installed. Its shared
save hook lets both mods preserve old items and machines before Minecraft
converts the chunk. Older Base Metals builds do not have that hook.
Forge 45 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 `-Pforge45MavenizerJar=<path>` when that checkout is in another location.
Use Base Metals 3.1.2 if it is installed when upgrading a world. 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.

Then run from the repository root:

Expand All @@ -46,8 +48,8 @@ gradlew.bat clean check build javadoc verifyReleaseDependencies verifyReleaseArt
The default dependency jars are:

```text
D:\BaseMetals\BaseMetals 118\BaseMetals\build\libs-dev\BaseMetals-3.1.2.118021-deobf.jar
D:\MinecraftMineralogy\OS118\OreSpawn\build\libs-dev\OreSpawn-4.1.0.118021-deobf.jar
D:\BaseMetals\BaseMetals 119\BaseMetals\build\libs-dev\BaseMetals-3.1.2.119041-deobf.jar
D:\MinecraftMineralogy\OS119\OreSpawn\build\libs-dev\OreSpawn-4.1.0.119041-deobf.jar
```

Other layouts can pass `-PbaseMetalsDeobfJar=<path>` and `-PoreSpawnDeobfJar=<path>`.
Expand All @@ -69,17 +71,17 @@ 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.11.118021` deobf jars,
To prepare a combined client, build the baseSteam and baseElectric `2.2.12.119041` deobf jars,
run `gradlew.bat prepareCombinedEclipseLaunch`, refresh Eclipse, then launch
`runClientAllAdvantage.launch`. Inputs must match
`test-rig/profiles/native118/dev-core.json`; alternative layouts can pass
`test-rig/profiles/native119/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.

`check` and Eclipse preparation also run `verifyDevelopmentRuntimeArchives`,
which reads every development runtime jar entry and checks its size and CRC.
This catches damaged cached dependencies before the next test launch.
`check` and the Eclipse audit verify that Java files are in the directories
matching their packages. They also read every development runtime jar entry
and check its size and CRC to catch damaged cached dependencies.

Keep Eclipse's access-restriction checks enabled and use Java 17 for its project
JRE and Minecraft launches. Check visuals, menus and recipe discovery against the
Expand Down Expand Up @@ -107,6 +109,6 @@ 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 [1.18 status](docs/1.18/PORT-STATUS.md) tracks this port's qualification.
The [1.19 status](docs/1.19/PORT-STATUS.md) tracks this port's qualification.

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