Skip to content

Commit ef08e5c

Browse files
authored
Merge Power Advantage for Minecraft 1.14.4
Bring the tested 1.14 port into MMD, keeping existing world identities and the public API.
2 parents 08a0027 + 1d498ca commit ef08e5c

237 files changed

Lines changed: 12818 additions & 2553 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.github/workflows/ci.yml‎

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
1-
name: Power Advantage 1.13 CI
1+
name: Power Advantage 1.14 CI
22

33
on:
44
push:
5-
branches: [master-1.13.2, 'feature/**']
5+
branches: [master-1.14.4, 'feature/**']
66
pull_request:
7-
branches: [master-1.13.2]
7+
branches: [master-1.14.4]
88

99
permissions:
1010
contents: read
1111

1212
concurrency:
13-
group: poweradvantage-1.13-${{ github.workflow }}-${{ github.ref }}
13+
group: poweradvantage-1.14-${{ github.workflow }}-${{ github.ref }}
1414
cancel-in-progress: true
1515

1616
jobs:
@@ -25,16 +25,16 @@ jobs:
2525
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
2626
with:
2727
repository: MinecraftModDevelopmentMods/OreSpawn
28-
ref: 6a7c2bb07b9a7771128812fcc07d185f7d9df58b
28+
ref: 9c2488cba02d317e3f31e24441dcc58273d8d0e6
2929
path: .ci-dependencies/OreSpawn
3030
- name: Use canonical LF dependency inputs
31-
# Base Metals predates archive text normalization; its LF artifact is separately pinned.
31+
# Use the same source bytes on hosted and local dependency builds.
3232
run: git config --global core.autocrlf false
3333
- name: Check out pinned Base Metals
3434
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
3535
with:
3636
repository: MinecraftModDevelopmentMods/BaseMetals
37-
ref: 1376a20d7d5ba22d3abc77dc34b49a2c88943697
37+
ref: 713802f93f2d1f650e1593fa35c487ea43add4a5
3838
path: .ci-dependencies/BaseMetals
3939
- name: Install Java 8 toolchain
4040
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
@@ -58,8 +58,8 @@ jobs:
5858
chmod +x "$orespawn/gradlew" "$basemetals/gradlew"
5959
(cd "$orespawn" && ./gradlew jar --no-daemon --stacktrace)
6060
(cd "$basemetals" && ./gradlew jar --no-daemon --stacktrace)
61-
osjar="$orespawn/build/libs-dev/OreSpawn-4.1.0.113021-deobf.jar"
62-
bmjar="$basemetals/build/libs-dev/BaseMetals-3.0.1.113021-deobf.jar"
61+
osjar="$orespawn/build/libs-dev/OreSpawn-4.1.1.114041-deobf.jar"
62+
bmjar="$basemetals/build/libs-dev/BaseMetals-3.0.1.114041-deobf.jar"
6363
test -f "$osjar" && test -f "$bmjar"
6464
echo "orespawn=$osjar" >> "$GITHUB_OUTPUT"
6565
echo "basemetals=$bmjar" >> "$GITHUB_OUTPUT"
@@ -73,20 +73,20 @@ jobs:
7373
- name: Upload audited release candidate
7474
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
7575
with:
76-
name: PowerAdvantage-1.13.2-${{ github.sha }}
76+
name: PowerAdvantage-1.14.4-${{ github.sha }}
7777
if-no-files-found: error
7878
retention-days: 30
7979
path: |
80-
build/libs/PowerAdvantage-2.4.4.113021.jar
81-
build/libs/PowerAdvantage-2.4.4.113021-sources.jar
82-
build/libs/PowerAdvantage-2.4.4.113021-javadoc.jar
80+
build/libs/PowerAdvantage-2.4.5.114041.jar
81+
build/libs/PowerAdvantage-2.4.5.114041-sources.jar
82+
build/libs/PowerAdvantage-2.4.5.114041-javadoc.jar
8383
build/release/SHA256SUMS
8484
CHANGELOG.txt
8585
- name: Upload diagnostics on failure
8686
if: failure()
8787
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
8888
with:
89-
name: PowerAdvantage-1.13.2-diagnostics-${{ github.sha }}
89+
name: PowerAdvantage-1.14.4-diagnostics-${{ github.sha }}
9090
if-no-files-found: ignore
9191
retention-days: 14
9292
path: |

‎.github/workflows/codeql-analysis.yml‎

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ name: CodeQL
22

33
on:
44
push:
5-
branches: [master-1.13.2, 'feature/**']
5+
branches: [master-1.14.4, 'feature/**']
66
pull_request:
7-
branches: [master-1.13.2]
7+
branches: [master-1.14.4]
88
schedule:
99
- cron: '47 7 * * 4'
1010

@@ -25,16 +25,16 @@ jobs:
2525
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
2626
with:
2727
repository: MinecraftModDevelopmentMods/OreSpawn
28-
ref: 6a7c2bb07b9a7771128812fcc07d185f7d9df58b
28+
ref: 9c2488cba02d317e3f31e24441dcc58273d8d0e6
2929
path: .ci-dependencies/OreSpawn
3030
- name: Use canonical LF dependency inputs
31-
# Base Metals predates archive text normalization; its LF artifact is separately pinned.
31+
# Use the same source bytes on hosted and local dependency builds.
3232
run: git config --global core.autocrlf false
3333
- name: Check out pinned Base Metals
3434
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
3535
with:
3636
repository: MinecraftModDevelopmentMods/BaseMetals
37-
ref: 1376a20d7d5ba22d3abc77dc34b49a2c88943697
37+
ref: 713802f93f2d1f650e1593fa35c487ea43add4a5
3838
path: .ci-dependencies/BaseMetals
3939
- name: Install Java 8 toolchain
4040
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
@@ -58,8 +58,8 @@ jobs:
5858
chmod +x "$orespawn/gradlew" "$basemetals/gradlew"
5959
(cd "$orespawn" && ./gradlew jar --no-daemon --stacktrace)
6060
(cd "$basemetals" && ./gradlew jar --no-daemon --stacktrace)
61-
echo "orespawn=$orespawn/build/libs-dev/OreSpawn-4.1.0.113021-deobf.jar" >> "$GITHUB_OUTPUT"
62-
echo "basemetals=$basemetals/build/libs-dev/BaseMetals-3.0.1.113021-deobf.jar" >> "$GITHUB_OUTPUT"
61+
echo "orespawn=$orespawn/build/libs-dev/OreSpawn-4.1.1.114041-deobf.jar" >> "$GITHUB_OUTPUT"
62+
echo "basemetals=$basemetals/build/libs-dev/BaseMetals-3.0.1.114041-deobf.jar" >> "$GITHUB_OUTPUT"
6363
- name: Initialize CodeQL
6464
uses: github/codeql-action/init@db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28 # v4
6565
with:

‎.github/workflows/validate-gradle-build.yml‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ name: Validate Gradle Wrapper
33
on:
44
push:
55
branches:
6-
- master-1.13.2
6+
- master-1.14.4
77
- 'feature/**'
88
pull_request:
99
branches:
10-
- master-1.13.2
10+
- master-1.14.4
1111

1212
permissions:
1313
contents: read

‎.gitignore‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@
6464
/test-rig/migration/.venv/
6565
/test-rig/migration/__pycache__/
6666

67-
# Local dependency artifacts; 1.13 converters use Forge Energy instead.
67+
# Local dependency artifacts; converters use Forge Energy instead.
6868
/libs/*
6969
*.jar
7070
*.zip

‎CHANGELOG.txt‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,15 @@
1+
Power Advantage 2.4.5.114041 (Minecraft 1.14.4)
2+
3+
- Move to Minecraft 1.14.4 and Forge 28.2.26, retaining existing registry names, saved-state keys and public API packages.
4+
- Use native Forge fluid rendering and sided capabilities, registered machine menus, tag updates and parts-loot events.
5+
- Keep the pre-flattening world migration hook and handle the retired vanilla villager profession index without discarding custom entries.
6+
- Add native block loot, including portable tank contents, and invalidate machine capabilities when their tiles are removed.
7+
- Keep water in tanks when reading saves that use its old unqualified fluid name.
8+
- Keep incoming Forge Energy when converting it to steam, electricity or quantum power; the RF- and Tech Reborn-labelled converters no longer discard it.
9+
- Register the world-save hook after parallel mod loading to avoid intermittent autosave failures when Base Metals also registers a hook.
10+
- Carry forward the restart and moving-drill fixes. The 1.14 validation status is tracked separately from the earlier 1.13 results.
11+
- Manual visuals and recipe unlocks are accepted. Machine functionality is covered by automated tests, not personal play-testing; the 1.14 qualification notes retain the exact tested jars and remaining coverage limits.
12+
113
Power Advantage 2.4.4.113021
214

315
- Exclude empty directories so development jars match between existing workspaces and fresh CI checkouts.

‎README.md‎

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,39 @@
11
# PowerAdvantage
22

3-
Power Advantage provides shared power, fluid, item transport, and compatibility APIs for its Minecraft 1.13.2 expansion mods.
3+
**Minecraft 1.14.4**
44

5-
This port keeps existing registry names and includes migration from 1.10 and 1.12.
5+
This port has passed the automated machine/migration tests and a manual check of
6+
visuals and recipe unlocks. See the [qualification report](docs/1.14/BROADER-QUALIFICATION.md)
7+
for coverage and limits. Use disposable copies for upgrades.
8+
9+
Power Advantage provides shared power, fluids, item transport and compatibility APIs for Steam Advantage and Electric Advantage.
10+
11+
This port keeps existing registry names and carries forward migration from 1.10 and 1.12.
612
Always back up a world before upgrading, and check that its other mods also support the target version.
7-
The [qualification notes](docs/1.13/CURRENT-QUALIFICATION.md) separate tested scenarios from remaining gaps;
13+
The archived [1.13 qualification notes](docs/1.13/CURRENT-QUALIFICATION.md) separate its tested scenarios from remaining gaps;
814
they are not a guarantee that an entire modpack can be upgraded without losses.
15+
The [1.14 qualification report](docs/1.14/BROADER-QUALIFICATION.md) records the
16+
repeated checks, exact tested jars and remaining limits for this candidate.
917

1018
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.
1119

1220
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.
1321

14-
## Building Minecraft 1.13.2
22+
## Building Minecraft 1.14.4
1523

16-
The `master-1.13.2` build uses ForgeGradle 7.0.34 and Gradle 9.6.1. Run Gradle with Java 17; Gradle resolves the Java 8 production toolchain.
24+
The `master-1.14.4` build uses Forge 28.2.26, ForgeGradle 7.0.34 and Gradle 9.6.1. Run Gradle with Java 17; Gradle resolves the Java 8 production toolchain.
1725

18-
Build the pinned Base Metals `3.0.1.113021` and OreSpawn `4.1.0.113021` deobf jars in their sibling checkouts, then run:
26+
Build the pinned Base Metals `3.0.1.114041` and OreSpawn `4.1.1.114041` deobf jars in their sibling checkouts, then run:
1927

2028
```text
2129
gradlew.bat clean check build javadoc verifyReleaseDependencies verifyReleaseArtifacts writeReleaseChecksums verifyEclipseProductionClasspath
2230
```
2331

2432
The default dependency paths follow the local MMD checkout layout. Other layouts can pass `-PbaseMetalsDeobfJar=<path>` and `-PoreSpawnDeobfJar=<path>`. Dependencies are present on development classpaths but are never embedded in PowerAdvantage artifacts.
2533

26-
The pinned Base Metals development jar predates archive line-ending normalization.
27-
Both the original Windows-input jar and a clean LF-checkout build have exact
28-
checksums in `gradle.properties`. Their class bytes and archive entries match;
29-
only text line endings differ. CI uses the LF build. Unknown hashes still fail.
30-
Advantage's own archives normalize text to LF.
31-
All Advantage archives also exclude empty directories left behind by older source layouts.
34+
Dependency checksums and source commits are recorded in `gradle.properties`.
35+
Unknown artifacts fail the dependency audit. Archives use reproducible ordering,
36+
LF text and no empty directories, so fresh checkouts produce the same bytes.
3237

3338
Release jars are written to `build/libs`; `deobfJar` writes the sibling-development jar to `build/libs-dev`.
3439

@@ -42,16 +47,21 @@ Refresh the project in Eclipse, allow its Java build to finish, and launch the g
4247

4348
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).
4449

45-
To test all three Advantage mods together, run `gradlew.bat prepareCombinedEclipseLaunch`, refresh Eclipse, and launch `runClientAllAdvantage.launch`. This additional profile loads the pinned Steam/Electric deobf jars, Base Metals and OreSpawn alongside Power's Eclipse output. It uses the same `run` directory and test saves; it does not copy, open or modify a save automatically. The ordinary `runClient.launch` remains Power-only. Alternative checkout layouts can pass `-PsteamAdvantageDeobfJar=<path>` and `-PelectricAdvantageDeobfJar=<path>`; supplied jars must match the `test-rig/profiles/dev-core.json` pins. Regenerate the combined launch after refreshing its dependencies or the base launch.
50+
To test all three Advantage mods together, run `gradlew.bat prepareCombinedEclipseLaunch`, refresh Eclipse, and launch `runClientAllAdvantage.launch`. This additional profile loads the pinned Steam/Electric deobf jars, Base Metals and OreSpawn alongside Power's Eclipse output. It uses the same `run` directory and test saves; it does not copy, open or modify a save automatically. The ordinary `runClient.launch` remains Power-only. Alternative checkout layouts can pass `-PsteamAdvantageDeobfJar=<path>` and `-PelectricAdvantageDeobfJar=<path>`; supplied jars must match the `test-rig/profiles/native114/dev-core.json` pins. Regenerate the combined launch after refreshing its dependencies or the base launch.
4651

47-
The combined [client resource probe](test-rig/client-resources/README.md), with `-RequireExtensions`, checks item names, baked models, textures and every valid block state across all three Advantage mods. The legacy Steam/Electric model-path and selector failures are repaired; [the qualification notes](docs/1.13/OIL-TRANSFER.md#combined-resource-repair-21-october-2026) retain the failing evidence and subsequent full-scope result. Native resource checks remain separate from manual graphical/gameplay acceptance.
52+
The combined [client resource probe](test-rig/client-resources/README.md) checks native baked models, textures, creative entries, translated item names, fluid rendering and tank gauges without opening a save. Static resource and locale regressions also run under `check`. Automated recipe-book fixtures and the accepted manual visual/recipe-unlock checks have separate scopes; see the [current port status](docs/1.14/PORT-STATUS.md).
4853

49-
The [client resource probe](test-rig/client-resources/README.md) checks native baked models, textures, creative entries, and translated item names without opening a world. Static resource and locale regressions also run under `check`.
54+
The [broader 1.14 test results and play-test checklist](docs/1.14/BROADER-QUALIFICATION.md) separate migration, connected machinery, endurance and manual checks. Test worlds and reports stay local; use disposable copies when trying an old save.
5055

5156
## Compatibility
5257

5358
The implementation namespace is `zone.moddev.mc.poweradvantage`. The historical `cyano.poweradvantage.api` surface, including `FluidNetworkApi`, remains available to dependent mods. Registry names, fluids, tile IDs, NBT keys, OreSpawn provider IDs, and configuration meaning remain stable.
5459

60+
Forge 1.14 handles oil rendering, fluid containers, registered menus, tag updates
61+
and parts-loot events directly. Advantage's public fluid contract is bridged to
62+
native sided fluid capabilities; its millibucket units and saved tank keys remain
63+
unchanged. The remaining coremod runs before vanilla's legacy-world data fixes.
64+
5565
PowerAdvantage owns the shared pre-flattening migration hook used by all three Advantage mods. See [the 1.13 migration guide](docs/1.13/MIGRATION.md) before opening an irreplaceable 1.10 or 1.12 world. The [Advantage Works rig](test-rig/README.md) provides repeatable machine, restart, world-generation, and migration checks.
5666

5767
The [endurance protocol](docs/1.13/ENDURANCE.md) exercises repeat-batch operation in fresh and migrated disposable worlds, followed by a complete server-process restart. Its coverage limits are separate from frozen-state migration and manual client acceptance.
@@ -60,7 +70,7 @@ The [chunk and moving-drill protocol](docs/1.13/CHUNK-AND-DRILLS.md) adds genuin
6070

6171
The [partial-network and extended-drill protocol](docs/1.13/PARTIAL-NETWORKS-AND-EXTENDED-DRILLS.md) separates endpoint unloading/recovery from whole-network reloads, and covers repeated moves, vertical track travel, junctions, blocked output and redstone interruption.
6272

63-
The [player and entity migration report](docs/1.13/PLAYER-AND-ENTITY-MIGRATION.md) covers player files, inventories, nested items, ownership, saved entities and full restarts. The eight tested routes pass with the repaired 1.12 bridge. Use Electric Advantage `2.2.3.112021` for the current turbine and drill fixes; the original `2.2.1.112021` jar remains a failing historical control.
73+
The archived [player and entity migration report](docs/1.13/PLAYER-AND-ENTITY-MIGRATION.md) covers player files, inventories, nested items, ownership, saved entities and full restarts on 1.13. Its eight routes passed with the repaired 1.12 bridge. Use Electric Advantage `2.2.3.112021` for that bridge's turbine and drill fixes; the original `2.2.1.112021` jar remains a failing historical control.
6474

6575
The [additional-dimension protocol](docs/1.13/DIMENSIONS-AND-ENTITY-LIFECYCLE.md)
6676
covers Nether/End player and entity fixtures, native passenger/leash relationships

0 commit comments

Comments
 (0)