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
10 changes: 5 additions & 5 deletions .github/verify-published-pins.sh
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@ require_merged() {
echo "::error::$repo needs an exact source pin. A pending local candidate is not a public dependency."
exit 1
fi
status="$(gh api "repos/MinecraftModDevelopmentMods/$repo/compare/$ref...master-26.1.2" --jq '.status')"
status="$(gh api "repos/MinecraftModDevelopmentMods/$repo/compare/$ref...master-26.2" --jq '.status')"
case "$status" in
identical|ahead) ;;
*) echo "::error::$repo $ref is not on upstream master-26.1.2 ($status)."; exit 1 ;;
*) echo "::error::$repo $ref is not on upstream master-26.2 ($status)."; exit 1 ;;
esac
}

Expand All @@ -39,7 +39,7 @@ require_merged basePower "$power_ref"
require_merged BaseMetals "$(value basemetals_source_commit)"
require_merged OreSpawn "$orespawn_ref"

inputs="${RUNNER_TEMP:?}/forge64-release-dependencies"
inputs="${RUNNER_TEMP:?}/forge65-release-dependencies"
mkdir -p "$inputs"
power="$inputs/basePower-$(value poweradvantage_version).jar"
metals="$inputs/BaseMetals-$(value basemetals_version).jar"
Expand All @@ -48,8 +48,8 @@ public_jar basePower 1780140 "$(value poweradvantage_public_file_id)" "$(value p
public_jar BaseMetals 240967 "$(value basemetals_public_file_id)" "$(value basemetals_deobf_sha256)" "$metals"
public_jar OreSpawn 245586 "$(value orespawn_public_file_id)" "$(value orespawn_deobf_sha256)" "$orespawn"

installer="$inputs/forge-26.1.2-64.1.5-installer.jar"
download 'https://maven.minecraftforge.net/net/minecraftforge/forge/26.1.2-64.1.5/forge-26.1.2-64.1.5-installer.jar' \
installer="$inputs/forge-26.2-65.1.0-installer.jar"
download 'https://maven.minecraftforge.net/net/minecraftforge/forge/26.2-65.1.0/forge-26.2-65.1.0-installer.jar' \
"$(value forge_installer_sha256)" "$installer"
{
printf 'power_ref=%s\n' "$power_ref"
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: baseSteam 26.1.2 CI
name: baseSteam 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: basesteam-26.1.2-${{ github.workflow }}-${{ github.ref }}
group: basesteam-26.2-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
Expand Down Expand Up @@ -52,7 +52,7 @@ jobs:
-Porg.gradle.java.installations.auto-download=false" >> "$GITHUB_ENV"
- name: Set up Gradle
uses: gradle/actions/setup-gradle@9c971963bec38e04b3d30dcc455b5382be2fdbfb # v6
- name: Verify the Forge 64 build inputs
- name: Verify the Forge 65 build inputs
shell: bash
env:
ORESPAWN_REF: ${{ steps.public-pins.outputs.orespawn_ref }}
Expand All @@ -64,7 +64,7 @@ jobs:
test "$(git -C "$orespawn" rev-parse HEAD)" = "$ORESPAWN_REF"
test "$(git -C "$power" rev-parse HEAD)" = "$POWER_REF"
mavenizer="$orespawn/ci-fixtures/tools/minecraft-mavenizer-0.5.21-orespawn-compat.jar"
printf '%s %s\n' 'BB0DACB3DEB2A711CA67DD402D5FDAB5A9847C37C7B9B596DEC7CF37378FA085' "$mavenizer" | sha256sum -c -
printf '%s %s\n' '5ABAB52A3F1BE115381C3CE80D5FD38DBE6C9F4C0B9ECF70A957700EC90FB88B' "$mavenizer" | sha256sum -c -
echo "MAVENIZER=$mavenizer" >> "$GITHUB_ENV"
- name: Build the released basePower test bootstrap
shell: bash
Expand All @@ -89,20 +89,20 @@ jobs:
- name: Upload audited release candidate
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: baseSteam-26.1.2-${{ github.sha }}
name: baseSteam-26.2-${{ github.sha }}
if-no-files-found: error
retention-days: 30
path: |
build/libs/baseSteam-2.2.17.2601021.jar
build/libs/baseSteam-2.2.17.2601021-sources.jar
build/libs/baseSteam-2.2.17.2601021-javadoc.jar
build/libs/baseSteam-2.2.18.2602001.jar
build/libs/baseSteam-2.2.18.2602001-sources.jar
build/libs/baseSteam-2.2.18.2602001-javadoc.jar
build/release/SHA256SUMS
CHANGELOG.txt
- name: Upload diagnostics on failure
if: failure()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: baseSteam-26.1.2-diagnostics-${{ github.sha }}
name: baseSteam-26.2-diagnostics-${{ github.sha }}
if-no-files-found: ignore
retention-days: 14
path: |
Expand Down
10 changes: 5 additions & 5 deletions .github/workflows/codeql-analysis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,17 @@ 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]

permissions:
contents: read
actions: read
security-events: write

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

jobs:
Expand Down Expand Up @@ -54,7 +54,7 @@ jobs:
-Porg.gradle.java.installations.auto-download=false" >> "$GITHUB_ENV"
- name: Set up Gradle
uses: gradle/actions/setup-gradle@9c971963bec38e04b3d30dcc455b5382be2fdbfb # v6
- name: Verify the Forge 64 build inputs
- name: Verify the Forge 65 build inputs
shell: bash
env:
ORESPAWN_REF: ${{ steps.public-pins.outputs.orespawn_ref }}
Expand All @@ -66,7 +66,7 @@ jobs:
test "$(git -C "$orespawn" rev-parse HEAD)" = "$ORESPAWN_REF"
test "$(git -C "$power" rev-parse HEAD)" = "$POWER_REF"
mavenizer="$orespawn/ci-fixtures/tools/minecraft-mavenizer-0.5.21-orespawn-compat.jar"
printf '%s %s\n' 'BB0DACB3DEB2A711CA67DD402D5FDAB5A9847C37C7B9B596DEC7CF37378FA085' "$mavenizer" | sha256sum -c -
printf '%s %s\n' '5ABAB52A3F1BE115381C3CE80D5FD38DBE6C9F4C0B9ECF70A957700EC90FB88B' "$mavenizer" | sha256sum -c -
echo "MAVENIZER=$mavenizer" >> "$GITHUB_ENV"
- name: Initialize CodeQL
uses: github/codeql-action/init@db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28 # v4
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/release-on-tag.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,9 @@ jobs:
minecraft_version="$(value minecraft_version)"
loader_name="$(value loader_name)"
loader_code="$(value loader_code)"
if [[ "$minecraft_version" != '26.1.2' || "$(value forge_version)" != '64.1.5' ||
"$(value mapping_version)" != '26.1.2' || "$(value mcp_version)" != '20260409.101008' ]]; then
echo 'Expected the exact Minecraft 26.1.2 Forge 64.1.5 release target' >&2
if [[ "$minecraft_version" != '26.2' || "$(value forge_version)" != '65.1.0' ||
"$(value mapping_version)" != '26.2' || "$(value mcp_version)" != '20260616.103818' ]]; then
echo 'Expected the exact Minecraft 26.2 Forge 65.1.0 release target' >&2
exit 1
fi

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
8 changes: 8 additions & 0 deletions CHANGELOG.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
baseSteam 2.2.18.2602001 (Minecraft 26.2 / Forge)

- Target Minecraft 26.2 and Forge 65 with Java 25.
- Keep the shared Base Metals migration hook and existing machine, item and saved-data identities.
- Retain exact dependency, native pack, artifact and classpath guards.
- Pass the combined profile03 machine, migration, actor/order, client and two-world endurance checks, including independent 66-checkpoint replay.
- Complete the full release, cold-cache and manual checks. Publish after basePower so the expansion uses the released dependency.

baseSteam 2.2.17.2601021 (Minecraft 26.1.2 / Forge)

- Bring baseSteam to Minecraft 26.1.2 with Forge 64.1.5 and Java 25.
Expand Down
140 changes: 59 additions & 81 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,95 +1,73 @@
# baseSteam

**Minecraft 26.1.2 (Forge), baseSteam 2.2.17.2601021.**
**Minecraft 26.2 Forge, version 2.2.18.2602001. Automated and manual testing complete.**

The frozen profile12 family has completed automated qualification and manual
testing. See the
[family qualification record](../../PowerAdvantage/docs/26.1.2/QUALIFICATION.md)
for the exact tested jars, completed checks and scope limits. Manual acceptance
is complete. [This release is available on CurseForge](https://www.curseforge.com/minecraft/mc-mods/basesteam/files/9577519),
MMD Maven and GitHub Releases. All three player-jar downloads match the tested
checksum.
baseSteam continues DrCyano's Steam Advantage and uses basePower's shared
API, machines and creative tab. Existing `basesteam` registry and saved-data
identities are retained.

baseSteam adds boilers, steam-powered machines, pumps, storage, elevators
and a blackpowder musket to basePower. Items and blocks share the basePower
creative tab. The mod ID and resource namespace remain `basesteam`.
The earlier [26.1.2 release](https://www.curseforge.com/minecraft/mc-mods/basesteam/files/9577519)
remains available on CurseForge, MMD Maven and GitHub Releases. The 26.2
release is being prepared separately; the version and dependency pins below
apply to this branch.

## Build
This port targets Forge **65.1.0**, official Minecraft **26.2** names,
MCP **20260616.103818**, Java **25.0.3+9**, ForgeGradle **7.0.34** and the
checksum-pinned Gradle **9.6.1** wrapper. Native pack formats are data
**107.1** and client **88.0**.

Target: Forge 64.1.5, official Minecraft 26.1.2 names and MCP
20260409.101008, with reobf=false. ForgeGradle 7.0.34 and the checksum-pinned
Gradle 9.6.1 wrapper use Temurin 25.0.3+9. The compiler, Minecraft,
Mavenizer and Slime launcher also use that Java 25 toolchain.
## Build

This port requires released basePower 2.4.16.2601021,
Base Metals 3.1.2.2601021 and OreSpawn 4.1.1.2601021.
They remain separate Forge jars on both client and server, not bundled copies.
The coordinated published dependency versions are basePower **2.4.17.2602001**
and Base Metals **3.1.2.2602001**. The Base Metals hook source is
`523335a59ecff399e40a7c66eb121a3aabdc45ba`, player SHA-256
`15CBD0C8DD95BBA846969929B8767887BA4B8152DFB10C9C58FB314AD39FB9E1`.
Base Metals is REQUIRED on both client and server, not an optional integration.
The default build paths use the coordinated 26.1.2 checkouts. The public inputs
are Power source a684e71e/player 23ABCC1F (CurseForge 9576332), Base Metals
source 5e708468/player 67862388 (9576007), and OreSpawn 810284EC (9572926).
Their anonymous downloads match the tested jars. Exact source, jar and fixture08
bootstrap pins are in gradle.properties. No 1.21.11 dependency is substituted.

The public-pin rebuild retains the accepted Steam jar bytes. Publication
follows Power, then Steam, then Electric; local acceptance does not stand in
for merged-source CI or public downloads.
The new clean release suite and fresh ECJ each pass 276 tests; independent
warm and empty-cache builds in paths with spaces reproduce all three archives.
These are child build gates, not combined-family or manual acceptance.

The released 1.21.11 baseline and its receipts remain separate historical
evidence. Native 26.1.2
metadata declares server data format 101.1 and client format 84.0; the hidden
client resource aggregate remains Forge's responsibility. The current kit's
native reader, machine, migration, side-loading and GUI results are recorded in
the family qualification record. Its original automated and manual-only scope
labels remain historical; manual acceptance was confirmed afterward.

The sealed BB0D Mavenizer fixture comes from OreSpawn's OS2612 checkout. Another
layout can use `-Pforge64MavenizerJar=<path>`. The `*DeobfJar` and `*PlayerJar`
properties select separate development and packaged inputs; both must
satisfy the committed checksums.

After the coordinated native dependency pins are available locally:

```powershell
$env:JAVA_HOME = "$env:USERPROFILE/.jdks/jdk-25.0.3+9"
$env:GRADLE_USER_HOME = 'D:/GradleCaches/basesteam-2612-port'
$toolchains = @("-Porg.gradle.java.installations.paths=$env:JAVA_HOME",
'-Porg.gradle.java.installations.auto-detect=false',
'-Porg.gradle.java.installations.auto-download=false')
./gradlew.bat @toolchains check build deobfJar verifyReleaseArtifacts writeReleaseChecksums
./gradlew.bat @toolchains verifyEclipseProductionClasspath
./gradlew.bat @toolchains -PsteamGameTestRunId=candidate verifyPlayerDependencies runGameTestServer
./tools/run-packaged-server-smoke.ps1 -ForgeInstall $env:FORGE_2612_SERVER_INSTALL -RunId candidate-with-metals -UseNioTransport -Reopen
```

For a checkout outside the sibling-folder layout, unit tests also need the
verified Power test bootstrap and its three source files. Build Power first,
then supply these paths as well as the dependency-jar overrides:
The released Power262 source is
`98863570ae84c5658a6b8ec2f8878e1f10009192`, player SHA-256
`7E456DE1A45140E86415A701D186FEDE08C4AB63D53C6B7848935DB70CBC68B1`.
Its public CurseForge file is [9583433](https://www.curseforge.com/minecraft/mc-mods/basepower/files/9583433);
Base Metals is [9583122](https://www.curseforge.com/minecraft/mc-mods/base-metals/files/9583122).

OreSpawn **4.1.1.2602001** is the published retained-settings repair,
qualified source `dcaaa933299dd8b1ebc73e31c9e5acd36dd7957c`, SHA-256
`BC0658DF2E149CC23E65E5771F3FF62E2BB13FFDA4E316AB632EB92EF7FA5A1F`.
Its public CurseForge file is [9582731](https://www.curseforge.com/minecraft/mc-mods/orespawn/files/9582731).
The qualified Base Metals and OreSpawn source pins are ancestors of their
released `master-26.2` merges. Their public CurseForge, Maven and GitHub
downloads have been verified against these exact hashes.

The Mavenizer fixture and its source-rule, patch, licence and provenance files
are checksum-sealed from the existing OS262 checkout. The established
`-Pforge64MavenizerJar` property remains a path alias; it selects the Forge65
fixture here. Dependencies stay separate mods and must match the source and
artifact pins in `gradle.properties`.

Use Temurin 25 and clear `JAVA_TOOL_OPTIONS`, `JDK_JAVA_OPTIONS` and
`_JAVA_OPTIONS` before qualification. The prepared sibling layout is the
default; explicit `*DeobfJar` and `*PlayerJar` flags change
paths, not the required bytes. With these exact coordinated inputs:

```text
-PforgeCapabilityBootstrapJar=<Power checkout>/build/unit-bootstrap/forge-native-unit-bootstrap.jar
-PforgeCapabilityBootstrapSource=<Power checkout>/test-rig/unit-bootstrap/ForgeCapabilityBootstrap.java
-PforgeUnitRegistriesSource=<Power checkout>/test-rig/unit-support/zone/moddev/mc/advantageworks/unit/ForgeUnitRegistries.java
-Pforge64UnitLoaderSource=<Power checkout>/test-rig/unit-support/zone/moddev/mc/advantageworks/unit/Forge64UnitLoader.java
./gradlew clean check build javadoc verifyReleaseDependencies verifyReleaseArtifacts writeReleaseChecksums --no-build-cache --no-daemon
./gradlew verifyEclipseProductionClasspath --no-daemon
node tools/verify-native-port.js
node tools/generate-recipe-unlocks.js --check
```

The atlas test uses the same verified Power jar selected for compilation;
it does not look for a second copy in a fixed local folder. Missing or
changed inputs fail the checks. The previous candidate09 passed 276 unit
tests and a fresh independent ECJ run of the same complete inventory. The
scoped runtime and reproducibility results are in the port status below;
they do not imply family or manual acceptance. Native resource tests disable interactive terminal setup in their
child process, while keeping warnings and errors fatal.
Keep Java option environment variables unset
when running the packaged family rig; it records its own runtime arguments.

Independent source checks: `node tools/verify-native-port.js` and
`node tools/generate-recipe-unlocks.js --check`.
Hosted CI and CodeQL verify merged dependency sources and checksum-matching
public downloads before compiling.
## Qualification

Combined profile03 passed the machine, migration, actor/dimension, actual
transformer-order and real-client checks, plus two 30-minute worlds, restart
and independent 66-checkpoint replay. See [26.2 port status](docs/PORT262-STATUS.md)
for the counts and exact inputs. The [family qualification record](https://github.com/MinecraftModDevelopmentMods/basePower/blob/master-26.2/docs/26.2/QUALIFICATION.md)
keeps the completed checks and their scope limits together.

The final root build and cold-cache checks passed, and manual testing was
accepted on 12 November 2026. Publication follows the dependency order:
OreSpawn and Base Metals, then basePower, then this expansion. The accepted
26.1.2 records remain historical proof of their original bytes, not a
substitute for the 26.2 results.

## Old Worlds

Expand All @@ -106,7 +84,7 @@ check machines, restarts, redstone, all drill directions, elevators,
GUI captions, whole fluid gauges, track transparency and musket effects
in-game. Release acceptance does not turn the remaining manual checks into
automated passes or qualify every modpack.
See the [26.1.2 port status](docs/PORT2612-STATUS.md). The
The [26.1.2 port status](docs/PORT2612-STATUS.md) is historical. The
[1.21.11 notes](docs/PORT12111-STATUS.md) and the
[1.21.1 notes](docs/PORT1211-STATUS.md) describe the accepted source baseline,
not qualification of this port.
Loading
Loading