Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
1687bd6
Port Building Pieces to Minecraft 1.14.4
SkyBlade1978 Oct 31, 2026
dd3e557
Preserve legacy materials and inventories during world upgrades
SkyBlade1978 Oct 31, 2026
f07a38b
Avoid chunk reads when recovering saved item frames
SkyBlade1978 Nov 1, 2026
ad44d22
Use the Grass Slabs support repair
SkyBlade1978 Nov 1, 2026
a002b56
Port Building Pieces to Minecraft 1.15.2
SkyBlade1978 Nov 1, 2026
c5573be
Recover retired material targets before restoring migration states
SkyBlade1978 Nov 1, 2026
8965015
Port building pieces to Minecraft 1.16.5
SkyBlade1978 Nov 1, 2026
64bbca2
Preserve recovered biomes in the active world registry
SkyBlade1978 Nov 1, 2026
7842655
Preserve source registries before early level saves
SkyBlade1978 Nov 1, 2026
4e4e9a8
Port Building Pieces to Minecraft 1.17.1
SkyBlade1978 Nov 1, 2026
60ad7e6
Keep complete logs from every packaged client load
SkyBlade1978 Nov 1, 2026
2ebc275
Match jar metadata to the production Java target
SkyBlade1978 Nov 1, 2026
a148bc5
Keep add-on piece names readable on Java 16
SkyBlade1978 Nov 1, 2026
4ddbf88
Preserve native mining rules for add-on pieces
SkyBlade1978 Nov 1, 2026
d240c1a
Wait for native lighting through the server mailbox
SkyBlade1978 Nov 1, 2026
95ef7d8
Keep queued native lighting work progressing
SkyBlade1978 Nov 1, 2026
b19dca9
Register legacy save hooks after parallel mod setup
SkyBlade1978 Nov 2, 2026
b8d7fac
Pump native chunk work while waiting for fixture lighting
SkyBlade1978 Nov 2, 2026
d98d79c
Port Building Pieces to Minecraft 1.18.2
SkyBlade1978 Nov 2, 2026
b3c5cfe
Check every upgrade fixture in the registry audit
SkyBlade1978 Nov 2, 2026
1482e9e
Preserve add-on biome names during 1.18 world upgrades
SkyBlade1978 Nov 2, 2026
f9bc348
Preserve sparse biome IDs when upgrading older worlds
SkyBlade1978 Nov 2, 2026
2be3ed9
Use the updated Grass Slabs config build
SkyBlade1978 Nov 3, 2026
600c685
Port Building Pieces to Minecraft 1.19.4
SkyBlade1978 Nov 3, 2026
8b442a4
Keep saved path recovery targets readable after upgrades
SkyBlade1978 Nov 3, 2026
6603719
Port Building Pieces to Forge 1.20.1
SkyBlade1978 Nov 4, 2026
afd7652
Port Building Pieces to Forge 1.20.6
SkyBlade1978 Nov 4, 2026
612f2de
Use the corrected Grass Slabs save reader in development
SkyBlade1978 Nov 4, 2026
1d8659c
Port Building Pieces to Forge 1.21.1
SkyBlade1978 Nov 5, 2026
4a5e64c
Bring Building Pieces to Forge 1.21.11
SkyBlade1978 Nov 5, 2026
03a211d
Preserve recovered biomes alongside other chunk upgrades
SkyBlade1978 Nov 5, 2026
79d8f4d
Use the Grass Slabs config screen fix in development runs
SkyBlade1978 Nov 5, 2026
d0476ec
Port Building Pieces to Minecraft 26.1.2 on Forge
SkyBlade1978 Nov 5, 2026
d7535e6
Register the Mineralogy models listener through Forge
SkyBlade1978 Nov 5, 2026
8d48e15
Keep recovered short grass in old inventories
SkyBlade1978 Nov 6, 2026
8b76e56
Port Building Pieces to Minecraft 26.2 on Forge
SkyBlade1978 Nov 6, 2026
a038cf4
Let world upgrades read larger Forge registry snapshots
SkyBlade1978 Nov 6, 2026
5df2d0f
Port Building Pieces to Minecraft 26.3 on Forge
SkyBlade1978 Nov 6, 2026
bf811e9
Register individual building pieces and keep old saves readable
SkyBlade1978 Nov 8, 2026
8598281
Recover compact block states from older 26.3 worlds
SkyBlade1978 Nov 8, 2026
6ef615d
Keep named wool pieces under their Sky block IDs
SkyBlade1978 Nov 8, 2026
c8b6f3b
Keep grass and dirt slab recipes in Grass Slabs
SkyBlade1978 Nov 9, 2026
7101499
Prepare the Forge 26.3 release
SkyBlade1978 Nov 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
13 changes: 13 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,21 @@
*.md text eol=lf
*.gradle text eol=lf
*.properties text eol=lf
*.mcmeta text eol=lf
*.py text eol=lf
*.toml text eol=lf
*.yml text eol=lf
gradlew text eol=lf
*.bat text eol=crlf
*.png binary
*.jar binary
*.zip binary
*.nbt binary

# Keep build scripts and the sealed Mavenizer fixture stable on Windows.
.gitattributes text eol=lf
*.js text eol=lf
ci-fixtures/tools/** -text

# Keep the signed-off registry proof bytes unchanged on every checkout.
src/testFixtures/worlds/*.forge61-registry.json -text whitespace=cr-at-eol
140 changes: 108 additions & 32 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,22 +1,76 @@
name: Sky's Building Pieces CI
name: Sky's Building Pieces 26.3 CI

on:
push:
branches:
- 'master-*'
- master-26.3
- 'feature/**'
pull_request:
branches:
- 'master-*'
- master-26.3

permissions:
contents: read

concurrency:
group: skysbuildingpieces-${{ github.workflow }}-${{ github.ref }}
group: skysbuildingpieces-26.3-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
cold-forge-bootstrap:
name: Cold Forge bootstrap
runs-on: ubuntu-latest
timeout-minutes: 60

steps:
- name: Check out source
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7

- name: Install pinned Java 25 runtime and toolchain
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
with:
distribution: temurin
java-version: '25.0.3+9.0.LTS'

- name: Pin production Java
run: |
echo "SBP_JAVA25_HOME=$JAVA_HOME" >> "$GITHUB_ENV"

- name: Bootstrap Forge from an empty cache
shell: bash
env:
GRADLE_USER_HOME: ${{ runner.temp }}/skysbuildingpieces-cold-gradle
run: |
set -euo pipefail
test ! -e .gradle
test ! -e "$GRADLE_USER_HOME"
mkdir -p "$GRADLE_USER_HOME"
chmod +x ./gradlew
gradle_args=(
classes test
--no-daemon --no-build-cache --stacktrace --max-workers=2
-Dorg.gradle.java.installations.paths="$JAVA_HOME"
-Dorg.gradle.java.installations.auto-detect=false
-Dorg.gradle.java.installations.auto-download=false
)
./gradlew "${gradle_args[@]}"

- name: Verify same-cache bootstrap offline
shell: bash
env:
ORESPAWN_MAVENIZER_OFFLINE: 'true'
GRADLE_USER_HOME: ${{ runner.temp }}/skysbuildingpieces-cold-gradle
run: |
set -euo pipefail
gradle_args=(
classes test
--rerun-tasks --offline --no-daemon --no-build-cache --stacktrace --max-workers=2
-Dorg.gradle.java.installations.paths="$JAVA_HOME"
-Dorg.gradle.java.installations.auto-detect=false
-Dorg.gradle.java.installations.auto-download=false
)
./gradlew "${gradle_args[@]}"

build:
name: Build, test, and audit
runs-on: ubuntu-latest
Expand All @@ -26,73 +80,95 @@ jobs:
- name: Check out source
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7

- name: Read target build metadata
- name: Read target Java metadata
id: target
shell: bash
run: |
set -euo pipefail
value() { sed -n "s/^$1=//p" gradle.properties; }
toolchain="$(value java_toolchain_version)"
selector="$(value java_setup_version)"
echo "java_setup_version=${selector:-$toolchain}" >> "$GITHUB_OUTPUT"
echo "java_version=$(value java_version)" >> "$GITHUB_OUTPUT"
echo "minecraft_version=$(value minecraft_version)" >> "$GITHUB_OUTPUT"
echo "gradle_java_version=$(value gradle_java_version)" >> "$GITHUB_OUTPUT"
echo "artifact_prefix=SkysBuildingPieces-$(value mod_version)" >> "$GITHUB_OUTPUT"

- name: Install target Java toolchain
test "$(value java_toolchain_version)" = "$(value gradle_java_toolchain_version)"
echo "java_setup_version=$(value java_setup_version)" >> "$GITHUB_OUTPUT"

- name: Install pinned Java 25 runtime and toolchain
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
with:
distribution: temurin
java-version: ${{ steps.target.outputs.java_setup_version }}

- name: Pin production Java
if: steps.target.outputs.java_version == '8'
- name: Pin production Java for coordinated builds
shell: bash
run: |
echo "SGS_JAVA8_HOME=$JAVA_HOME" >> "$GITHUB_ENV"
echo "SBP_JAVA8_HOME=$JAVA_HOME" >> "$GITHUB_ENV"
echo "STS_JAVA8_HOME=$JAVA_HOME" >> "$GITHUB_ENV"

- name: Install Java for Gradle
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
with:
distribution: microsoft
java-version: ${{ steps.target.outputs.gradle_java_version }}
set -euo pipefail
for prefix in SGS SBP STS; do
echo "${prefix}_JAVA25_HOME=$JAVA_HOME" >> "$GITHUB_ENV"
done

- name: Set up Gradle
uses: gradle/actions/setup-gradle@9c971963bec38e04b3d30dcc455b5382be2fdbfb # v6


- name: Make the wrapper executable
run: chmod +x ./gradlew

- name: Read coordinated Grass Slabs source pin
id: grass
shell: bash
run: |
set -euo pipefail
commit="$(sed -n 's/^source.commit=//p' gradle/grass-slabs-release.properties)"
[[ "$commit" =~ ^[0-9a-f]{40}$ ]]
echo "commit=$commit" >> "$GITHUB_OUTPUT"

- name: Check out pinned Grass Slabs source
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
repository: MinecraftModDevelopmentMods/SkysGrassSlabs
ref: ${{ steps.grass.outputs.commit }}
path: .gradle/qualification-sources/grass-slabs

- name: Build pinned optional Grass Slabs dependency
shell: bash
run: |
set -euo pipefail
dependency="$GITHUB_WORKSPACE/.gradle/qualification-sources/grass-slabs"
chmod +x "$dependency/gradlew"
"$dependency/gradlew" -p "$dependency" assemble --no-daemon --stacktrace \
-Dorg.gradle.java.installations.paths="$JAVA_HOME"
version="$(sed -n 's/^version=//p' gradle/grass-slabs-release.properties)"
echo "ORG_GRADLE_PROJECT_grassSlabsMainJar=$dependency/build/libs/SkysGrassSlabs-$version.jar" >> "$GITHUB_ENV"

- name: Build, test, and audit release artifacts
run: >-
./gradlew clean check integrationTest build javadoc verifyReleaseArtifacts writeReleaseChecksums
verifyEclipseProductionClasspath --no-daemon --stacktrace
verifyEclipseProductionClasspath --no-daemon --stacktrace
-Dorg.gradle.java.installations.paths="$JAVA_HOME"
-Dorg.gradle.java.installations.auto-detect=false
-Dorg.gradle.java.installations.auto-download=false

- name: Replay artifact checks offline
env:
ORESPAWN_MAVENIZER_OFFLINE: 'true'
run: >-
./gradlew assemble verifyReleaseArtifacts writeReleaseChecksums --offline --no-daemon --stacktrace
-Dorg.gradle.java.installations.paths="$JAVA_HOME"

- name: Upload audited release candidate
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: SkysBuildingPieces-${{ steps.target.outputs.minecraft_version }}-${{ github.sha }}
name: SkysBuildingPieces-26.3-${{ github.sha }}
if-no-files-found: error
retention-days: 30
path: |
build/libs/${{ steps.target.outputs.artifact_prefix }}.jar
build/libs/${{ steps.target.outputs.artifact_prefix }}-sources.jar
build/libs/${{ steps.target.outputs.artifact_prefix }}-javadoc.jar
build/libs/SkysBuildingPieces-0.3.9.2603001.jar
build/libs/SkysBuildingPieces-0.3.9.2603001-sources.jar
build/libs/SkysBuildingPieces-0.3.9.2603001-javadoc.jar
build/release/SHA256SUMS
CHANGELOG.md

- name: Upload diagnostics on failure
if: failure()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: SkysBuildingPieces-${{ steps.target.outputs.minecraft_version }}-diagnostics-${{ github.sha }}
name: SkysBuildingPieces-26.3-diagnostics-${{ github.sha }}
if-no-files-found: ignore
retention-days: 14
path: |
Expand Down
28 changes: 19 additions & 9 deletions .github/workflows/codeql-analysis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@ name: CodeQL
on:
push:
branches:
- 'master-*'
- master-26.3
- 'feature/**'
pull_request:
branches:
- 'master-*'
- master-26.3
schedule:
- cron: '47 7 * * 4'

Expand Down Expand Up @@ -40,24 +40,33 @@ jobs:
echo "gradle_java_version=$(value gradle_java_version)" >> "$GITHUB_OUTPUT"
echo "artifact_prefix=SkysBuildingPieces-$(value mod_version)" >> "$GITHUB_OUTPUT"

- name: Install Mavenizer Java runtime
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
with:
distribution: temurin
java-version: '25.0.3+9.0.LTS'

- name: Install target Java toolchain
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
with:
distribution: temurin
java-version: ${{ steps.target.outputs.java_setup_version }}

- name: Pin production Java
if: steps.target.outputs.java_version == '8'
shell: bash
run: |
echo "SGS_JAVA8_HOME=$JAVA_HOME" >> "$GITHUB_ENV"
echo "SBP_JAVA8_HOME=$JAVA_HOME" >> "$GITHUB_ENV"
echo "STS_JAVA8_HOME=$JAVA_HOME" >> "$GITHUB_ENV"
set -euo pipefail
java_version="${{ steps.target.outputs.java_version }}"
[[ "$java_version" =~ ^[0-9]+$ ]]
for prefix in SGS SBP STS; do
echo "${prefix}_JAVA${java_version}_HOME=$JAVA_HOME" >> "$GITHUB_ENV"
done

- name: Install Java for Gradle
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
with:
distribution: microsoft
java-version: ${{ steps.target.outputs.gradle_java_version }}
distribution: temurin
java-version: '25.0.3+9.0.LTS'

- name: Set up Gradle
uses: gradle/actions/setup-gradle@9c971963bec38e04b3d30dcc455b5382be2fdbfb # v6
Expand All @@ -71,7 +80,8 @@ jobs:
- name: Compile production code
run: |
chmod +x ./gradlew
./gradlew clean classes --rerun-tasks --no-daemon --stacktrace
./gradlew clean classes --rerun-tasks --no-daemon --stacktrace \
-Dorg.gradle.java.installations.paths="$JAVA_HOME"

- name: Analyze
uses: github/codeql-action/analyze@db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28 # v4
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -77,3 +77,8 @@ agent_notes/
# Files from Forge MDK
forge*changelog.txt
/README.txt

# Resource-generation tools
__pycache__/
*.py[cod]
.pytest_cache/
Loading
Loading