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
58 changes: 35 additions & 23 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
name: Steam Advantage 1.14 CI
name: Steam Advantage 1.15 CI

on:
push:
branches: [master-1.14.4, 'feature/**']
branches: [master-1.15.2, 'feature/**']
pull_request:
branches: [master-1.14.4]
branches: [master-1.15.2]

permissions:
contents: read

concurrency:
group: steamadvantage-1.14-${{ github.workflow }}-${{ github.ref }}
group: steamadvantage-1.15-${{ 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: 9c2488cba02d317e3f31e24441dcc58273d8d0e6
ref: 5613baf876747ed071cb7ad7e2aff4e0ce4f0a03
path: .ci-dependencies/OreSpawn
- name: Use canonical LF dependency inputs
# Use the same source bytes on hosted and local dependency builds.
Expand All @@ -34,14 +34,19 @@ jobs:
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
repository: MinecraftModDevelopmentMods/BaseMetals
ref: 713802f93f2d1f650e1593fa35c487ea43add4a5
ref: ac1781e7cade15045ffe0135077087b4d1722603
path: .ci-dependencies/BaseMetals
- name: Check out PowerAdvantage 1.14.4
- name: Check out PowerAdvantage 1.15.2
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
repository: MinecraftModDevelopmentMods/PowerAdvantage
ref: 1d498ca02b6795b16435f0ece35ac04c67ef6948
ref: 6666099a734eba16561d98c86f3f4bb1b7c742f7
path: .ci-dependencies/PowerAdvantage
- name: Install pinned Java 25 Mavenizer runtime
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
with:
distribution: temurin
java-version: '25.0.3+9.0.LTS'
- name: Install Java 8 toolchain
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
with:
Expand All @@ -50,11 +55,18 @@ jobs:
- name: Install Java 17 for Gradle
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
with:
distribution: microsoft
java-version: '17'
distribution: temurin
java-version: '17.0.1+12'
- name: Use pinned build toolchains
# These are Gradle project properties, not JVM system properties.
shell: bash
run: >-
echo "MMD_GRADLE_TOOLCHAINS=-Porg.gradle.java.installations.paths=$JAVA_HOME,$JAVA_HOME_8_X64,$JAVA_HOME_25_X64
-Porg.gradle.java.installations.auto-detect=false
-Porg.gradle.java.installations.auto-download=false" >> "$GITHUB_ENV"
- name: Set up Gradle
uses: gradle/actions/setup-gradle@9c971963bec38e04b3d30dcc455b5382be2fdbfb # v6
- name: Build 1.14.4 dependency chain
- name: Build 1.15.2 dependency chain
id: dependencies
shell: bash
run: |
Expand All @@ -63,22 +75,22 @@ jobs:
basemetals="$GITHUB_WORKSPACE/.ci-dependencies/BaseMetals"
power="$GITHUB_WORKSPACE/.ci-dependencies/PowerAdvantage"
chmod +x "$orespawn/gradlew" "$basemetals/gradlew" "$power/gradlew"
(cd "$orespawn" && ./gradlew jar --no-daemon --stacktrace)
(cd "$basemetals" && ./gradlew jar --no-daemon --stacktrace)
osjar="$orespawn/build/libs-dev/OreSpawn-4.1.1.114041-deobf.jar"
bmjar="$basemetals/build/libs-dev/BaseMetals-3.0.1.114041-deobf.jar"
(cd "$power" && ./gradlew jar verifyReleaseDependencies \
(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.1.115021-deobf.jar"
bmjar="$basemetals/build/libs-dev/BaseMetals-3.0.2.115021-deobf.jar"
(cd "$power" && ./gradlew $MMD_GRADLE_TOOLCHAINS jar verifyReleaseDependencies \
-PbaseMetalsDeobfJar="$bmjar" -PoreSpawnDeobfJar="$osjar" \
--no-daemon --stacktrace)
powerjar="$power/build/libs-dev/PowerAdvantage-2.4.5.114041-deobf.jar"
powerjar="$power/build/libs-dev/PowerAdvantage-2.4.6.115021-deobf.jar"
test -f "$osjar" && test -f "$bmjar" && test -f "$powerjar"
echo "orespawn=$osjar" >> "$GITHUB_OUTPUT"
echo "basemetals=$bmjar" >> "$GITHUB_OUTPUT"
echo "power=$powerjar" >> "$GITHUB_OUTPUT"
echo "power_ref=$(git -C "$power" rev-parse HEAD)" >> "$GITHUB_OUTPUT"
- name: Build and audit release artifacts
run: >-
./gradlew clean check build javadoc verifyReleaseDependencies verifyReleaseArtifacts
./gradlew $MMD_GRADLE_TOOLCHAINS clean check build javadoc verifyReleaseDependencies verifyReleaseArtifacts
writeReleaseChecksums verifyEclipseProductionClasspath
-PpowerAdvantageDeobfJar=${{ steps.dependencies.outputs.power }}
-Ppoweradvantage_source_ref=${{ steps.dependencies.outputs.power_ref }}
Expand All @@ -88,20 +100,20 @@ jobs:
- name: Upload audited release candidate
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: SteamAdvantage-1.14.4-${{ github.sha }}
name: SteamAdvantage-1.15.2-${{ github.sha }}
if-no-files-found: error
retention-days: 30
path: |
build/libs/SteamAdvantage-2.2.6.114041.jar
build/libs/SteamAdvantage-2.2.6.114041-sources.jar
build/libs/SteamAdvantage-2.2.6.114041-javadoc.jar
build/libs/SteamAdvantage-2.2.7.115021.jar
build/libs/SteamAdvantage-2.2.7.115021-sources.jar
build/libs/SteamAdvantage-2.2.7.115021-javadoc.jar
build/release/SHA256SUMS
CHANGELOG.txt
- name: Upload diagnostics on failure
if: failure()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: SteamAdvantage-1.14.4-diagnostics-${{ github.sha }}
name: SteamAdvantage-1.15.2-diagnostics-${{ github.sha }}
if-no-files-found: ignore
retention-days: 14
path: |
Expand Down
44 changes: 28 additions & 16 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.14.4, 'feature/**']
branches: [master-1.15.2, 'feature/**']
pull_request:
branches: [master-1.14.4]
branches: [master-1.15.2]
schedule:
- cron: '53 7 * * 4'

Expand All @@ -25,7 +25,7 @@ jobs:
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
repository: MinecraftModDevelopmentMods/OreSpawn
ref: 9c2488cba02d317e3f31e24441dcc58273d8d0e6
ref: 5613baf876747ed071cb7ad7e2aff4e0ce4f0a03
path: .ci-dependencies/OreSpawn
- name: Use canonical LF dependency inputs
# Use the same source bytes on hosted and local dependency builds.
Expand All @@ -34,14 +34,19 @@ jobs:
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
repository: MinecraftModDevelopmentMods/BaseMetals
ref: 713802f93f2d1f650e1593fa35c487ea43add4a5
ref: ac1781e7cade15045ffe0135077087b4d1722603
path: .ci-dependencies/BaseMetals
- name: Check out PowerAdvantage 1.14.4
- name: Check out PowerAdvantage 1.15.2
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
repository: MinecraftModDevelopmentMods/PowerAdvantage
ref: 1d498ca02b6795b16435f0ece35ac04c67ef6948
ref: 6666099a734eba16561d98c86f3f4bb1b7c742f7
path: .ci-dependencies/PowerAdvantage
- name: Install pinned Java 25 Mavenizer runtime
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
with:
distribution: temurin
java-version: '25.0.3+9.0.LTS'
- name: Install Java 8 toolchain
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
with:
Expand All @@ -50,11 +55,18 @@ jobs:
- name: Install Java 17 for Gradle
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
with:
distribution: microsoft
java-version: '17'
distribution: temurin
java-version: '17.0.1+12'
- name: Use pinned build toolchains
# These are Gradle project properties, not JVM system properties.
shell: bash
run: >-
echo "MMD_GRADLE_TOOLCHAINS=-Porg.gradle.java.installations.paths=$JAVA_HOME,$JAVA_HOME_8_X64,$JAVA_HOME_25_X64
-Porg.gradle.java.installations.auto-detect=false
-Porg.gradle.java.installations.auto-download=false" >> "$GITHUB_ENV"
- name: Set up Gradle
uses: gradle/actions/setup-gradle@9c971963bec38e04b3d30dcc455b5382be2fdbfb # v6
- name: Build 1.14.4 dependency chain
- name: Build 1.15.2 dependency chain
id: dependencies
shell: bash
run: |
Expand All @@ -63,14 +75,14 @@ jobs:
basemetals="$GITHUB_WORKSPACE/.ci-dependencies/BaseMetals"
power="$GITHUB_WORKSPACE/.ci-dependencies/PowerAdvantage"
chmod +x "$orespawn/gradlew" "$basemetals/gradlew" "$power/gradlew"
(cd "$orespawn" && ./gradlew jar --no-daemon --stacktrace)
(cd "$basemetals" && ./gradlew jar --no-daemon --stacktrace)
osjar="$orespawn/build/libs-dev/OreSpawn-4.1.1.114041-deobf.jar"
bmjar="$basemetals/build/libs-dev/BaseMetals-3.0.1.114041-deobf.jar"
(cd "$power" && ./gradlew jar verifyReleaseDependencies \
(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.1.115021-deobf.jar"
bmjar="$basemetals/build/libs-dev/BaseMetals-3.0.2.115021-deobf.jar"
(cd "$power" && ./gradlew $MMD_GRADLE_TOOLCHAINS jar verifyReleaseDependencies \
-PbaseMetalsDeobfJar="$bmjar" -PoreSpawnDeobfJar="$osjar" \
--no-daemon --stacktrace)
powerjar="$power/build/libs-dev/PowerAdvantage-2.4.5.114041-deobf.jar"
powerjar="$power/build/libs-dev/PowerAdvantage-2.4.6.115021-deobf.jar"
test -f "$osjar" && test -f "$bmjar" && test -f "$powerjar"
echo "orespawn=$osjar" >> "$GITHUB_OUTPUT"
echo "basemetals=$bmjar" >> "$GITHUB_OUTPUT"
Expand All @@ -83,7 +95,7 @@ jobs:
- name: Compile SteamAdvantage production code
run: |
chmod +x ./gradlew
./gradlew clean classes --rerun-tasks --no-build-cache --no-daemon --stacktrace \
./gradlew $MMD_GRADLE_TOOLCHAINS clean classes --rerun-tasks --no-build-cache --no-daemon --stacktrace \
-PpowerAdvantageDeobfJar=${{ steps.dependencies.outputs.power }} \
-Ppoweradvantage_source_ref=${{ steps.dependencies.outputs.power_ref }} \
-PbaseMetalsDeobfJar=${{ steps.dependencies.outputs.basemetals }} \
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-1.14.4
- master-1.15.2
- 'feature/**'
pull_request:
branches:
- master-1.14.4
- master-1.15.2

permissions:
contents: read
Expand Down
14 changes: 14 additions & 0 deletions CHANGELOG.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,17 @@
Steam Advantage 2.2.7.115021

- Target Minecraft 1.15.2 / Forge 31.2.57 with snapshot 20200514-1.15.1 mappings and MCP 20200515.085601.
- Pin the native Power Advantage 2.4.6.115021, Base Metals and OreSpawn development dependencies.
- Use native tile renderer registration, matrix stacks and lit vertex buffers without changing drill dimensions, UVs or animation axes.
- Register the steam track's cutout render layer on the client and retain non-solid helper blocks through native properties.
- Use native entity position accessors and action-result factories for elevators and muskets.
- Preserve registry identities, recipes, migration codecs, saved NBT, machine costs and output quantities.
- Register recipe conditions after parallel setup to prevent intermittent missing recipes at startup.
- Retain the steam track's light transmission and keep tracks and elevator platforms from conducting redstone through their full-cube shapes.
- Add all-facing renderer, lighting, matrix-restoration and native block-property regressions.
- Record combined operating and disposable-copy migration results in Power Advantage's shared 1.15 test notes; manual acceptance remains separate.
- Record the accepted in-game visuals and recipe unlocks; the shared test record retains the remaining limits.

Steam Advantage 2.2.6.114041

- Save the drill's cached facing without reloading a chunk during its unload-save.
Expand Down
40 changes: 24 additions & 16 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,27 +1,35 @@
# SteamAdvantage

**Minecraft 1.14.4 port, version 2.2.6.114041.** Native compilation and 27 unit/resource tests pass.
The combined-mod automated checks also cover client resources, connected machinery,
drill movement, chunk lifecycle, restart persistence and disposable-copy migration.
The [1.14 test results](https://github.com/MinecraftModDevelopmentMods/PowerAdvantage/blob/master-1.14.4/docs/1.14/BROADER-QUALIFICATION.md)
describe the tested scenarios and remaining limits, not a guarantee for an entire modpack.
**Minecraft 1.15.2, version 2.2.7.115021.** See the
[shared test record](https://github.com/MinecraftModDevelopmentMods/PowerAdvantage/blob/master-1.15.2/docs/1.15/CURRENT-QUALIFICATION.md)
for exact jars, automated machine and upgrade results, and remaining manual
checks. Visuals and recipe unlocks were accepted on 27 October 2026. The historical
[1.14 test results](https://github.com/MinecraftModDevelopmentMods/PowerAdvantage/blob/master-1.14.4/docs/1.14/BROADER-QUALIFICATION.md)
are not evidence of 1.15 gameplay or world-upgrade compatibility.

Steam Advantage adds steam-powered machines and infrastructure to Power Advantage for Minecraft 1.14.4.
Steam Advantage adds steam-powered machines and infrastructure to Power Advantage for Minecraft 1.15.2.

Every crafting variant has an ingredient-triggered recipe-book discovery. See the [shared material checklist and discovery tests](https://github.com/MinecraftModDevelopmentMods/PowerAdvantage/blob/master-1.13.2/docs/1.13/RECIPE-DISCOVERY.md). Regenerate unlock JSON after recipe changes with `node tools/generate-recipe-unlocks.js`; `check` audits recipe coverage and criteria. Crushing recipes are deliberately excluded from the crafting book.

The historical [manufacturing progression protocol](https://github.com/MinecraftModDevelopmentMods/PowerAdvantage/blob/master-1.13.2/docs/1.13/MANUFACTURING-PROGRESSION.md) describes raw-material, processing and loot acquisition paths in every mode, including restart persistence. See the 1.14 test results above for this port's coverage.
The historical [manufacturing progression protocol](https://github.com/MinecraftModDevelopmentMods/PowerAdvantage/blob/master-1.13.2/docs/1.13/MANUFACTURING-PROGRESSION.md) describes raw-material, processing and loot acquisition paths in every mode, including restart persistence. Earlier results do not establish those outcomes on 1.15.

## Building Minecraft 1.14.4
## Building Minecraft 1.15.2

The `master-1.14.4` build targets Forge 28.2.26, snapshot `20190719-1.14.3` mappings,
and MCP `20190829.143755`. It uses ForgeGradle 7.0.34 and Gradle 9.6.1.
Run Gradle with Java 17; production code is compiled for Java 8.
The `master-1.15.2` build targets Forge 31.2.57, snapshot `20200514-1.15.1` mappings,
and MCP `20200515.085601`. It uses ForgeGradle 7.0.34 and Gradle 9.6.1.
Run Gradle with Temurin 17.0.1+12; production code is compiled with Temurin 8.0.502+7.
The Forge Mavenizer also requires Temurin 25.0.3+9.0.LTS. CI installs all three
explicitly and disables automatic toolchain detection and downloads.

Build the matching 1.14 PowerAdvantage, Base Metals and OreSpawn deobf jars first.
Build the matching 1.15 PowerAdvantage, Base Metals and OreSpawn deobf jars first.
Dependency versions, checksums and the exact Power source reference belong in
`gradle.properties`. Release audits reject missing or placeholder pins; do not
bypass those checks or substitute a 1.13 dependency.
bypass those checks or substitute a dependency from an earlier Minecraft version.
Base Metals `3.0.2.115021` source `ac1781e7cade15045ffe0135077087b4d1722603`
and Power source `6666099a734eba16561d98c86f3f4bb1b7c742f7` are the exact tested
dependency pins. CI builds them before Steam Advantage; none is embedded in
the Steam Advantage jar.

With the standard sibling layout:

```text
Expand Down Expand Up @@ -55,7 +63,7 @@ The Eclipse resource root is `build/resources/main`, so its builder copies expan

## Compatibility

The 1.14 source adaptations preserve machine callbacks, all six drill directions, native
The 1.15 source adaptations retain machine callbacks, all six drill directions, native
helper-tile lifecycle, saved progress and target snapshots, energy/inventory NBT, legacy
fluid contracts, musket loaded-state bytes and migration codecs. Native villager professions
replace the removed smith careers (armorer, weaponsmith, toolsmith) and priest (cleric).
Expand All @@ -67,8 +75,8 @@ in-world GUI, rendering, sound, control or musket interaction, multiplayer behav
or compatibility with arbitrary third-party mods. Unit/resource tests alone are not
runtime or world-upgrade evidence.

For an all-Advantage play-test, run `prepareCombinedEclipseLaunch` in the sibling PowerAdvantage checkout and select its `runClientAllAdvantage.launch`. The [native resource probe](https://github.com/MinecraftModDevelopmentMods/PowerAdvantage/blob/master-1.14.4/test-rig/client-resources/README.md) checks models, textures and names across all three mods. These resource checks do not replace gameplay testing.
The combined 1.15 harness must be prepared before an all-Advantage play-test. Its launch and resource probe belong to the sibling PowerAdvantage checkout. The [historical resource-probe protocol](https://github.com/MinecraftModDevelopmentMods/PowerAdvantage/blob/master-1.14.4/test-rig/client-resources/README.md) describes model, texture and name checks; its previous passes do not establish 1.15 rendering or gameplay results.

The implementation namespace is `zone.moddev.mc.steamadvantage`. Runtime identities, registries, tile IDs, saved NBT, recipes, and assets remain stable. Steam registers its legacy state and NBT codecs with PowerAdvantage's shared migration hook so 1.10 and 1.12 worlds can be converted before Minecraft flattens old numeric block states.

The historical [1.13 migration guide](https://github.com/MinecraftModDevelopmentMods/PowerAdvantage/blob/master-1.13.2/docs/1.13/MIGRATION.md) explains the legacy conversion and backup process; the 1.14 test results above describe this port's coverage. Always make a whole-world backup before upgrading, keep the complete set of migration backups, and test only disposable copies. Check that every other mod supports the target version; these results do not qualify unrelated mods or an entire existing modpack.
The historical [1.13 migration guide](https://github.com/MinecraftModDevelopmentMods/PowerAdvantage/blob/master-1.13.2/docs/1.13/MIGRATION.md) explains the legacy conversion and backup process; it is not a 1.15 migration qualification. Always make a whole-world backup before upgrading, keep the complete set of migration backups, and test only disposable copies. Check that every other mod supports the target version; these results do not qualify unrelated mods or an entire existing modpack.
Loading
Loading