Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 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
b37de62
Port Building Pieces to NeoForge 1.20.1
SkyBlade1978 Nov 4, 2026
dec04db
Port Building Pieces to NeoForge 1.20.6
SkyBlade1978 Nov 5, 2026
929e5ce
Port Building Pieces to NeoForge 1.21.1
SkyBlade1978 Nov 5, 2026
2c5a4f2
Keep native plant rules on soil pieces
SkyBlade1978 Nov 5, 2026
b7c84c3
Give building pieces individual block IDs
SkyBlade1978 Nov 7, 2026
b99041b
Check the expanded Mineralogy block catalogue
SkyBlade1978 Nov 7, 2026
29ee1c3
Show Building Pieces settings in the Mods menu
SkyBlade1978 Nov 7, 2026
3f5f1aa
Enable the NeoForge 1.21.1 release
SkyBlade1978 Nov 7, 2026
5d76b9d
Test the native NeoForge client settings format
SkyBlade1978 Nov 7, 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.
10 changes: 10 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,18 @@
*.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
132 changes: 94 additions & 38 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,24 +1,23 @@
name: Sky's Building Pieces CI
name: Sky's Building Pieces 1.21.1 NeoForge CI

on:
push:
branches:
- 'master-*'
- 'feature/**'
- master-1.21.1-neo
pull_request:
branches:
- 'master-*'
- master-1.21.1-neo

permissions:
contents: read

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

jobs:
build:
name: Build, test, and audit
cold-bootstrap:
name: Cold NeoForge bootstrap
runs-on: ubuntu-latest
timeout-minutes: 60

Expand All @@ -31,73 +30,130 @@ jobs:
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
echo "java_setup_version=$(sed -n 's/^java_setup_version=//p' gradle.properties)" >> "$GITHUB_OUTPUT"
echo "gradle_java_version=$(sed -n 's/^gradle_java_version=//p' gradle.properties)" >> "$GITHUB_OUTPUT"

- name: Install pinned Java 21 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: Check the Gradle JVM
env:
GRADLE_JAVA_MAJOR: ${{ steps.target.outputs.gradle_java_version }}
run: java -version 2>&1 | grep -F "version \"$GRADLE_JAVA_MAJOR."

- name: Bootstrap NeoForge 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:
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
timeout-minutes: 60

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

- name: Read target build metadata
id: target
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
echo "java_setup_version=$(sed -n 's/^java_setup_version=//p' gradle.properties)" >> "$GITHUB_OUTPUT"
echo "gradle_java_version=$(sed -n 's/^gradle_java_version=//p' gradle.properties)" >> "$GITHUB_OUTPUT"

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

- name: Check the Gradle JVM
env:
GRADLE_JAVA_MAJOR: ${{ steps.target.outputs.gradle_java_version }}
run: java -version 2>&1 | grep -F "version \"$GRADLE_JAVA_MAJOR."

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


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

- name: Build, test, and audit release artifacts
run: >-
./gradlew clean check integrationTest build javadoc verifyReleaseArtifacts writeReleaseChecksums
verifyEclipseProductionClasspath --no-daemon --stacktrace

- name: Replay artifact checks offline
run: >-
./gradlew assemble verifyReleaseArtifacts writeReleaseChecksums --offline --no-daemon --stacktrace
./gradlew clean check build javadoc verifyReleaseArtifacts writeReleaseChecksums
preparePackagedRuntimeProbes eclipse verifyEclipseConfiguration --no-daemon --stacktrace
-Declipse.application=org.eclipse.ui.ide.workbench
-Dorg.gradle.java.installations.paths="$JAVA_HOME"
-Dorg.gradle.java.installations.auto-detect=false
-Dorg.gradle.java.installations.auto-download=false

- name: Test native fresh and reload servers
run: |
set -euo pipefail
python3 -m unittest discover -s tools -p 'test_*.py'
args=(--directory build/ci-native-probe --mode server
--probe build/native-bootstrap-probe/building-pieces-native-checks.jar)
python3 tools/run_development_checks.py "${args[@]}" --phase fresh --fresh
python3 tools/run_development_checks.py "${args[@]}" --phase reload

- name: Upload audited release candidate
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: SkysBuildingPieces-${{ steps.target.outputs.minecraft_version }}-${{ github.sha }}
name: SkysBuildingPieces-1.21.1-${{ 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.121012.jar
build/libs/SkysBuildingPieces-0.3.9.121012-sources.jar
build/libs/SkysBuildingPieces-0.3.9.121012-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-1.21.1-diagnostics-${{ github.sha }}
if-no-files-found: ignore
retention-days: 14
path: |
build/test-results/**
build/reports/**
build/*-run/logs/**
build/*-run/**/*.properties
build/ci-native-probe/*-console.log
build/ci-native-probe/logs/**
build/problems/**
42 changes: 8 additions & 34 deletions .github/workflows/codeql-analysis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,10 @@ name: CodeQL
on:
push:
branches:
- 'master-*'
- 'feature/**'
- master-1.21.1-neo
pull_request:
branches:
- 'master-*'
- master-1.21.1-neo
schedule:
- cron: '47 7 * * 4'

Expand All @@ -26,43 +25,15 @@ jobs:
- name: Check out source
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7

- name: Read target build 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
- name: Install pinned Java 21 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'
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 }}
java-version: '21.0.7+6.0.LTS'

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


- name: Initialize CodeQL
uses: github/codeql-action/init@db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28 # v4
with:
Expand All @@ -71,7 +42,10 @@ 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" \
-Dorg.gradle.java.installations.auto-detect=false \
-Dorg.gradle.java.installations.auto-download=false

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

# Resource-generation tools
__pycache__/
*.py[cod]
.pytest_cache/
.eclipse/
72 changes: 72 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,77 @@
# Changelog

## 0.3.9.121012

- Give each material and shape its own block ID. Older worlds keep their pieces and their orientation.
- Show Building Pieces items in the mod's creative tab. Vanilla pieces stay in their usual tabs.
- Let players switch to ordinary slab placement from the Mods menu.

## 0.3.8.121012

- Bring Building Pieces to Minecraft 1.21.1 on NeoForge.
- Keep existing pieces, recipes and supported world upgrades.
- Grass Slabs and Mineralogy are still optional.

## 0.3.8.120062 — Minecraft 1.20.6, NeoForge

- Bring the building pieces and recipes to NeoForge 1.20.6.
- Keep the names and custom data on pieces when you rotate them in a crafting grid.
- Keep existing piece IDs and supported world upgrades, including optional Mineralogy pieces.

## 0.3.8.120012

- Bring the building pieces, creative tab and continuous glass walls to NeoForge 1.20.1.
- Preserve existing pieces, their recipes and supported world upgrades.
- Keep Grass Slabs and Mineralogy integration optional.

## 0.3.8.119041

- Bring the building pieces, creative tab and continuous glass walls to Minecraft 1.19.4.
- Keep the existing palettes, recipes and supported world recovery.
- Retain optional Grass Slabs and Mineralogy integration without requiring either mod.


## 0.3.8.118021 - Minecraft 1.18.2 (unreleased)

- Bring the existing building shapes and Mineralogy pieces to Minecraft 1.18.2.
- Keep placement, joins, continuous glass walls, grass, snow, waterlogging and paths.
- Keep saved palettes, orientations, inventories and custom item data when upgrading.
- Preserve recovery progress in the new chunk format, including add-on coverage.
- Keep add-on biome names through Minecraft's conversion to section palettes.
- Fix loading of older worlds with gaps in their saved biome numbers.
- Use the matching Grass Slabs version for shared grass behaviour when installed.

## 0.3.8.117011 - Minecraft 1.17.1 (unreleased)

- Bring the existing building shapes and Mineralogy pieces to Minecraft 1.17.1.
- Keep placement, joins, continuous glass walls, grass, snow, waterlogging and paths.
- Show recipes in the recipe book when their matching ingredients are collected.
- Keep saved palettes, orientations and custom item data when upgrading.
- Keep add-on material names short and translated, including BOP wood pieces.
- Keep the full material's mining rules for pieces made from retired rocks.
- Fix a startup crash when several mods preserve old world data.

## 0.3.8.116051 - Minecraft 1.16.5 (unreleased)

- Bring the existing building shapes and Mineralogy pieces to Minecraft 1.16.5.
- Keep placement, joins, continuous glass walls, grass, snow, waterlogging and paths.
- Preserve saved palette identities, older pieces and custom item data.
- Use the matching Grass Slabs version for shared grass behaviour when installed.

## 0.3.8.115021 - Minecraft 1.15.2 (unreleased)

- Bring the existing building shapes and Mineralogy pieces to Minecraft 1.15.2.
- Keep placement, joining, glass walls, grass, snow, waterlogging and paths.
- Keep saved palette identities and recovery of older pieces and item data.
- Use the matching Grass Slabs release for shared grass behaviour when installed.

## 0.3.8.114041

Minecraft 1.14.4 support, native waterlogging and recipe-book integration.
Existing piece palettes, orientations and custom item data are kept when
upgrading from 1.12.2. Saved item frames also load without stalling the world.
See the [release notes](docs/RELEASE-0.3.8.114041.md).

## 0.3.8.112021

- Added the missing recipe-book unlocks for crafting and rebuilding pieces.
Expand Down
Loading
Loading