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-1.21.1" --jq '.status')"
status="$(gh api "repos/MinecraftModDevelopmentMods/$repo/compare/$ref...master-1.21.11" --jq '.status')"
case "$status" in
identical|ahead) ;;
*) echo "::error::$repo $ref is not on upstream master-1.21.1 ($status)."; exit 1 ;;
*) echo "::error::$repo $ref is not on upstream master-1.21.11 ($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:?}/forge52-release-dependencies"
inputs="${RUNNER_TEMP:?}/forge61-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-1.21.1-52.1.0-installer.jar"
download 'https://maven.minecraftforge.net/net/minecraftforge/forge/1.21.1-52.1.0/forge-1.21.1-52.1.0-installer.jar' \
installer="$inputs/forge-1.21.11-61.1.0-installer.jar"
download 'https://maven.minecraftforge.net/net/minecraftforge/forge/1.21.11-61.1.0/forge-1.21.11-61.1.0-installer.jar' \
"$(value forge_installer_sha256)" "$installer"
{
printf 'power_ref=%s\n' "$power_ref"
Expand Down
26 changes: 13 additions & 13 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
name: baseSteam 1.21.1 CI
name: baseSteam 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: basesteam-1.21.1-${{ github.workflow }}-${{ github.ref }}
group: basesteam-1.21.11-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
Expand Down Expand Up @@ -62,7 +62,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 52 build inputs
- name: Verify the Forge 61 build inputs
shell: bash
env:
ORESPAWN_REF: ${{ steps.public-pins.outputs.orespawn_ref }}
Expand All @@ -74,15 +74,15 @@ 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' '019032A4A26ECB473D403EF017054D5892CE59A9904E8831B452287CD756397E' "$mavenizer" | sha256sum -c -
printf '%s %s\n' 'B36CA046DB72E30F27BD38E02B4AE34274ADB51AE1D65BAF9E1D07763755682E' "$mavenizer" | sha256sum -c -
echo "MAVENIZER=$mavenizer" >> "$GITHUB_ENV"
- name: Build the released basePower test bootstrap
shell: bash
run: |
set -euo pipefail
power="$GITHUB_WORKSPACE/.ci-dependencies/basePower"
(cd "$power" && bash ./gradlew $MMD_GRADLE_TOOLCHAINS unitBootstrapJar \
"-Pforge52MavenizerJar=$MAVENIZER" "-PbaseMetalsDeobfJar=$METALS_PLAYER" "-PoreSpawnDeobfJar=$ORESPAWN_PLAYER" --no-daemon)
"-Pforge61MavenizerJar=$MAVENIZER" "-PbaseMetalsDeobfJar=$METALS_PLAYER" "-PoreSpawnDeobfJar=$ORESPAWN_PLAYER" --no-daemon)
echo "POWER_BOOTSTRAP=$power/build/unit-bootstrap/forge-native-unit-bootstrap.jar" >> "$GITHUB_ENV"
echo "POWER_BOOTSTRAP_SOURCE=$power/test-rig/unit-bootstrap/ForgeCapabilityBootstrap.java" >> "$GITHUB_ENV"
echo "POWER_REGISTRY_SOURCE=$power/test-rig/unit-support/zone/moddev/mc/advantageworks/unit/ForgeUnitRegistries.java" >> "$GITHUB_ENV"
Expand All @@ -91,27 +91,27 @@ jobs:
run: |
./gradlew $MMD_GRADLE_TOOLCHAINS clean check build javadoc verifyReleaseDependencies verifyReleaseArtifacts \
writeReleaseChecksums verifyEclipseProductionClasspath --no-build-cache --no-daemon --stacktrace \
"-Pforge52MavenizerJar=$MAVENIZER" "-PpowerAdvantageDeobfJar=$POWER_PLAYER" \
"-Pforge61MavenizerJar=$MAVENIZER" "-PpowerAdvantageDeobfJar=$POWER_PLAYER" \
"-PbaseMetalsDeobfJar=$METALS_PLAYER" "-PoreSpawnDeobfJar=$ORESPAWN_PLAYER" \
"-PforgeCapabilityBootstrapJar=$POWER_BOOTSTRAP" "-PforgeCapabilityBootstrapSource=$POWER_BOOTSTRAP_SOURCE" \
"-PforgeUnitRegistriesSource=$POWER_REGISTRY_SOURCE"
- name: Upload audited release candidate
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: baseSteam-1.21.1-${{ github.sha }}
name: baseSteam-1.21.11-${{ github.sha }}
if-no-files-found: error
retention-days: 30
path: |
build/libs/baseSteam-2.2.15.121011.jar
build/libs/baseSteam-2.2.15.121011-sources.jar
build/libs/baseSteam-2.2.15.121011-javadoc.jar
build/libs/baseSteam-2.2.16.121111.jar
build/libs/baseSteam-2.2.16.121111-sources.jar
build/libs/baseSteam-2.2.16.121111-javadoc.jar
build/release/SHA256SUMS
CHANGELOG.txt
- name: Upload diagnostics on failure
if: failure()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: baseSteam-1.21.1-diagnostics-${{ github.sha }}
name: baseSteam-1.21.11-diagnostics-${{ github.sha }}
if-no-files-found: ignore
retention-days: 14
path: |
Expand Down
12 changes: 6 additions & 6 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-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
actions: read
security-events: write

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

jobs:
Expand Down Expand Up @@ -64,7 +64,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 52 build inputs
- name: Verify the Forge 61 build inputs
shell: bash
env:
ORESPAWN_REF: ${{ steps.public-pins.outputs.orespawn_ref }}
Expand All @@ -76,7 +76,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' '019032A4A26ECB473D403EF017054D5892CE59A9904E8831B452287CD756397E' "$mavenizer" | sha256sum -c -
printf '%s %s\n' 'B36CA046DB72E30F27BD38E02B4AE34274ADB51AE1D65BAF9E1D07763755682E' "$mavenizer" | sha256sum -c -
echo "MAVENIZER=$mavenizer" >> "$GITHUB_ENV"
- name: Initialize CodeQL
uses: github/codeql-action/init@db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28 # v4
Expand All @@ -87,7 +87,7 @@ jobs:
shell: bash
run: |
./gradlew $MMD_GRADLE_TOOLCHAINS classes verifyReleaseDependencies --rerun-tasks --no-build-cache --no-daemon --stacktrace \
"-Pforge52MavenizerJar=$MAVENIZER" "-PpowerAdvantageDeobfJar=$POWER_PLAYER" \
"-Pforge61MavenizerJar=$MAVENIZER" "-PpowerAdvantageDeobfJar=$POWER_PLAYER" \
"-PbaseMetalsDeobfJar=$METALS_PLAYER" "-PoreSpawnDeobfJar=$ORESPAWN_PLAYER"
- name: Analyze
uses: github/codeql-action/analyze@db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28 # v4
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" != '1.21.1' || "$(value forge_version)" != '52.1.0' ||
"$(value mapping_version)" != '1.21.1' || "$(value mcp_version)" != '20240808.132146' ]]; then
echo 'Expected the exact Minecraft 1.21.1 Forge 52.1.0 release target' >&2
if [[ "$minecraft_version" != '1.21.11' || "$(value forge_version)" != '61.1.0' ||
"$(value mapping_version)" != '1.21.11' || "$(value mcp_version)" != '20251223.124241' ]]; then
echo 'Expected the exact Minecraft 1.21.11 Forge 61.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-1.21.1
- master-1.21.11
- 'feature/**'
pull_request:
branches:
- master-1.21.1
- master-1.21.11

permissions:
contents: read
Expand Down
12 changes: 12 additions & 0 deletions CHANGELOG.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,15 @@
baseSteam 2.2.16.121111 (Minecraft 1.21.11 / Forge)

- Target Forge 61.1.0, Java 21 and released basePower 2.4.15.121111.
- Adapt native registration, persistence, recipes, item definitions and drill rendering.
- Retain registry identities, legacy state keys, recipe payloads and configuration defaults.
- Use native Forge hidden-client pack metadata with data-format 94.1 at the mod root.
- Require Base Metals on both client and server in Forge metadata as well as distribution metadata; retain the defensive recipe guards unchanged.
- Keep block/material sprites, including the drill bit, out of the native item atlas; retain legacy item-icon lookup compatibility.
- Make the atlas regression test use the configured, checksum-verified Power jar, including builds outside the usual sibling folders.
- Keep native resource tests noninteractive in CI without suppressing warnings or errors.
- Complete the combined machine, upgrade, graphical and two-world endurance checks against the current jars.

baseSteam 2.2.15.121011 (Minecraft 1.21.1 / Forge)

- Target Forge 52.1.0 and Java 21 with basePower 2.4.14.121011.
Expand Down
74 changes: 54 additions & 20 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,34 +1,48 @@
# baseSteam

**Minecraft 1.21.1 (Forge), version 2.2.15.121011.**
**Minecraft 1.21.11 (Forge), baseSteam 2.2.16.121111.**

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`.

## Build

Target: Forge 52.1.0, official Minecraft 1.21.1 mappings and MCP
20240808.132146. ForgeGradle 7.0.34 and the checksum-pinned Gradle 9.6.1
Target: Forge 61.1.0, official Minecraft 1.21.11 mappings and MCP
20251223.124241. ForgeGradle 7.0.34 and the checksum-pinned Gradle 9.6.1
wrapper use Temurin 21.0.7+6. Mavenizer uses Java 25; the launcher helper
also needs Java 8. Minecraft itself runs on Java 21.

The default dependency paths use the coordinated 1.21.1 checkouts. This
version needs the released basePower 2.4.14.121011, Base Metals 3.1.2.121011 and
OreSpawn 4.1.0.121011 as separate native jars, not bundled copies.
Exact source, public file, jar and test-bootstrap pins are in `gradle.properties`.
They are checked before compilation and tests. CurseForge, Maven and GitHub
releases use the same checked player jar.
Install [basePower 2.4.15.121111](https://github.com/MinecraftModDevelopmentMods/basePower/releases/tag/2.4.15.121111),
[Base Metals 3.1.2.121111](https://www.curseforge.com/minecraft/mc-mods/base-metals/files/9566738)
and [OreSpawn 4.1.0.121111](https://www.curseforge.com/minecraft/mc-mods/mmd-orespawn/files/9268464)
as separate Forge 1.21.11 jars on both client and server, not bundled copies.
Base Metals is REQUIRED on both client and server, not an optional integration.
The default build paths use the coordinated 1.21.11 checkouts. Exact released
source, jar and test-bootstrap pins are in `gradle.properties` and are checked
before compilation and tests.

The Mavenizer fixture comes from OreSpawn's OS1211 checkout. Another layout
can use `-Pforge52MavenizerJar=<path>`. The `*DeobfJar` and `*PlayerJar`
This version has passed automated qualification and manual acceptance. The
[qualification record](https://github.com/MinecraftModDevelopmentMods/basePower/blob/master-1.21.11/docs/1.21.11/QUALIFICATION.md)
records the machine, upgrade, graphical and two-world endurance checks and
their coverage limits. Earlier no-Base-Metals receipts are
historical evidence, not a supported installation profile.
The mod root declares server data format 94.1. Forge supplies format 75.x
metadata for its hidden client resource aggregate. Native resource-reader
tests cover both paths without codec warnings; see
[Forge metadata notes](docs/FORGE61-RESOURCE-METADATA.md) for the separate
Forge 61.1.0 server compatibility-label defect.

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

With the pinned local dependencies available:
With the pinned released dependencies available locally:

```powershell
$env:JAVA_HOME = "$env:USERPROFILE/.jdks/temurin-21.0.7+6"
$env:GRADLE_USER_HOME = 'D:/GradleCaches/basesteam-12111-port'
$jdk8 = "$env:USERPROFILE/.jdks/temurin-8.0.502+7/jdk8u502-b07"
$jdks = "$env:JAVA_HOME,$env:USERPROFILE/.jdks/jdk-25.0.3+9,$jdk8"
$toolchains = @("-Porg.gradle.java.installations.paths=$jdks",
Expand All @@ -37,14 +51,31 @@ $toolchains = @("-Porg.gradle.java.installations.paths=$jdks",
./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_1211_SERVER_INSTALL -RunId candidate-with-metals
./tools/run-packaged-server-smoke.ps1 -ForgeInstall $env:FORGE_1211_SERVER_INSTALL -RunId candidate-without-metals -WithoutBaseMetals
./tools/run-packaged-server-smoke.ps1 -ForgeInstall $env:FORGE_12111_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 two source files. Build Power first,
then supply these paths as well as the dependency-jar overrides:

```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
```

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 current source check passes 252 unit
tests. 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 require merged sources and checksum-matching public
downloads before compiling. Pending local pins cannot pass that gate.
Hosted CI and CodeQL verify merged dependency sources and checksum-matching
public downloads before compiling.

## Old Worlds

Expand All @@ -56,8 +87,11 @@ Steam retains machine IDs and saved fields, drill directions, musket wear
and loading, and all four musket enchantments. The singular datapack folders
do not change logical recipe or advancement identities.

Use basePower's migration rig for whole-world checks. Before accepting the
port, check machines, restarts, redstone, all drill directions, elevators,
Use basePower's migration rig for whole-world checks. For your own world,
check machines, restarts, redstone, all drill directions, elevators,
GUI captions, whole fluid gauges, track transparency and musket effects
in-game. Automated, packaged and manual acceptance are separate gates.
See the [1.21.1 notes](docs/PORT1211-STATUS.md).
in-game. Release acceptance does not turn the remaining manual checks into
automated passes or qualify every modpack.
See the [1.21.11 notes](docs/PORT12111-STATUS.md). The
[1.21.1 notes](docs/PORT1211-STATUS.md) describe the accepted source baseline,
not qualification of this port.
Loading
Loading