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
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.
129 changes: 37 additions & 92 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,155 +1,100 @@
name: IronAgeFurniture 1.20.6 CI
name: IronAgeFurniture 26.1.2 NeoForge CI

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

permissions:
contents: read

concurrency:
group: iron-age-furniture-1.20.6-${{ github.workflow }}-${{ github.ref }}
group: iron-age-furniture-26.1.2-neoforge-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

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

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

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

- name: Install pinned Java 8 launcher toolchain
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
with:
distribution: temurin
java-version: '8.0.502+7'

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

- name: Bootstrap Forge from an empty cache
- name: Bootstrap an isolated empty NeoGradle cache
shell: bash
env:
GRADLE_USER_HOME: ${{ runner.temp }}/iron-age-furniture-cold-gradle
run: |
set -euo pipefail
test ! -e .gradle
test ! -e "$GRADLE_USER_HOME"
mkdir -p "$GRADLE_USER_HOME"
chmod +x ./gradlew
./gradlew verifyMavenizerCompatibilityFixture help \
--no-daemon --no-build-cache --stacktrace --max-workers=2 \
-Dorg.gradle.java.installations.paths="$JAVA_HOME,$JAVA_HOME_8_X64,$JAVA_HOME_25_X64" \
-Dorg.gradle.java.installations.auto-detect=false \
-Dorg.gradle.java.installations.auto-download=false \
| tee "$RUNNER_TEMP/cold-forge-bootstrap.log"
grep -F "OreSpawn Mavenizer compatibility runtime: Java 25.0.3" \
"$RUNNER_TEMP/cold-forge-bootstrap.log"
grep -F "OreSpawn Mavenizer compatibility: applied 0 rule(s) for net.minecraftforge:forge:1.20.6-50.2.0 (explicit no-op)" \
"$RUNNER_TEMP/cold-forge-bootstrap.log"
find "$GRADLE_USER_HOME" .gradle/mavenizer \
-name '*.orespawn-compatibility' -type f -print0 \
| sort -z | xargs -0 -r sha256sum > "$RUNNER_TEMP/markers-before.sha256"
test -s "$RUNNER_TEMP/markers-before.sha256"

- name: Verify same-cache preparation is idempotent
shell: bash
env:
GRADLE_USER_HOME: ${{ runner.temp }}/iron-age-furniture-cold-gradle
run: |
set -euo pipefail
./gradlew verifyMavenizerCompatibilityFixture help \
--no-daemon --no-build-cache --stacktrace --max-workers=2 \
-Dorg.gradle.java.installations.paths="$JAVA_HOME,$JAVA_HOME_8_X64,$JAVA_HOME_25_X64" \
-Dorg.gradle.java.installations.auto-detect=false \
test ! -d .gradle
export GRADLE_USER_HOME="$RUNNER_TEMP/iron-age-furniture-neoforge-cold-cache"
rm -rf "$GRADLE_USER_HOME"
gradle_jdk_args=(
"-Dorg.gradle.java.installations.paths=$JAVA_HOME"
-Dorg.gradle.java.installations.auto-detect=false
-Dorg.gradle.java.installations.auto-download=false
find "$GRADLE_USER_HOME" .gradle/mavenizer \
-name '*.orespawn-compatibility' -type f -print0 \
| sort -z | xargs -0 -r sha256sum > "$RUNNER_TEMP/markers-after.sha256"
diff -u "$RUNNER_TEMP/markers-before.sha256" "$RUNNER_TEMP/markers-after.sha256"
)
./gradlew help --no-daemon --no-build-cache --stacktrace --max-workers=2 "${gradle_jdk_args[@]}"
./gradlew help --offline --no-daemon --no-build-cache --stacktrace --max-workers=2 "${gradle_jdk_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: Install pinned Java 25 Mavenizer runtime
- name: Install exact Java 25
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
with:
distribution: temurin
java-version: '25.0.3+9.0.LTS'

- name: Install pinned Java 8 launcher toolchain
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
with:
distribution: temurin
java-version: '8.0.502+7'

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

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

- name: Build, test, document, and audit
shell: bash
run: |
set -euo pipefail
chmod +x ./gradlew
./gradlew clean check build javadoc verifyReleaseArtifacts verifyReleaseChecksums \
--no-daemon --stacktrace \
-Dorg.gradle.java.installations.paths="$JAVA_HOME,$JAVA_HOME_8_X64,$JAVA_HOME_25_X64" \
./gradlew clean check build javadoc verifyReleaseArtifacts writeReleaseChecksums verifyReleaseChecksums \
--no-daemon --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

- name: Generate and audit Eclipse production launches
run: >-
./gradlew genEclipseRuns eclipse isolateEclipseProductionRuns verifyEclipseProductionClasspath
--no-daemon --stacktrace
-Dorg.gradle.java.installations.paths="$JAVA_HOME,$JAVA_HOME_8_X64,$JAVA_HOME_25_X64"
-Dorg.gradle.java.installations.auto-detect=false
-Dorg.gradle.java.installations.auto-download=false

shell: bash
run: |
set -euo pipefail
./gradlew eclipse verifyEclipseProductionClasspath \
--no-daemon --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
- name: Upload audited release candidate
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: iron-age-furniture-1.20.6-${{ github.sha }}
name: iron-age-furniture-26.1.2-neoforge-${{ github.sha }}
if-no-files-found: error
retention-days: 30
path: |
build/libs/iron-age-furniture-0.3.0.120061.jar
build/libs/iron-age-furniture-0.3.0.120061-sources.jar
build/libs/iron-age-furniture-0.3.0.120061-javadoc.jar
build/libs/iron-age-furniture-0.3.0.2601022.jar
build/libs/iron-age-furniture-0.3.0.2601022-sources.jar
build/libs/iron-age-furniture-0.3.0.2601022-javadoc.jar
build/release/SHA256SUMS
CHANGELOG.md

- name: Upload diagnostics on failure
if: failure()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: iron-age-furniture-1.20.6-diagnostics-${{ github.sha }}
name: iron-age-furniture-26.1.2-neoforge-diagnostics-${{ github.sha }}
if-no-files-found: ignore
retention-days: 14
path: |
Expand Down
22 changes: 5 additions & 17 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-1.20.6
- master-26.1.2-neo
- 'feature/**'
pull_request:
branches:
- master-1.20.6
- master-26.1.2-neo
schedule:
- cron: '43 7 * * 4'

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

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

- name: Install pinned Java 8 launcher toolchain
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
with:
distribution: temurin
java-version: '8.0.502+7'

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

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

Expand All @@ -57,7 +45,7 @@ jobs:
chmod +x ./gradlew
gradle_args=(
clean classes --rerun-tasks --no-build-cache --no-daemon --stacktrace
"-Dorg.gradle.java.installations.paths=$JAVA_HOME,$JAVA_HOME_8_X64,$JAVA_HOME_25_X64"
"-Dorg.gradle.java.installations.paths=$JAVA_HOME"
-Dorg.gradle.java.installations.auto-detect=false
-Dorg.gradle.java.installations.auto-download=false
)
Expand All @@ -69,7 +57,7 @@ jobs:
echo "CodeQL compilation failed after $attempt attempts." >&2
exit 1
fi
echo "::warning::CodeQL compilation attempt $attempt failed; retrying with the preserved Forge cache."
echo "::warning::CodeQL compilation attempt $attempt failed; retrying with the preserved NeoGradle cache."
done

- name: Analyze
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.20.6
- master-26.1.2-neo
- 'feature/**'
pull_request:
branches:
- master-1.20.6
- master-26.1.2-neo

permissions:
contents: read
Expand Down
15 changes: 8 additions & 7 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
# IronAgeFurniture 0.3.0.120061
# IronAgeFurniture 0.3.0.2601022

- Port IronAgeFurniture to Minecraft 1.20.6 and Forge 50.2.0 on Java 21.
- Retain the complete contemporary Biomes O' Plenty furniture family and its conditional recipes and advancements.
- Omit Biomes We've Gone and Immersive Engineering furniture because neither integration has a compatible release for this target.
- Carry forward the deterministic checked-in furniture catalog, scoped BOP cherry remap, and positive optional-integration runtime probe.

This is a release candidate changelog. Publication requires the protected default-branch release workflow.
- Port IronAgeFurniture to Minecraft 26.1.2 and NeoForge 26.1.2.94 on Java 25.
- Retain Pale Oak and the complete contemporary Biomes O' Plenty furniture family, including Origin Oak.
- Validate built-in texture paths and every optional wood model semantically against the exact pinned Biomes O' Plenty jar.
- Omit Oh The Biomes We've Gone and Immersive Engineering because neither integration supports this target matrix.
- Generate NeoForge item definitions and target-native `neoforge:conditions` recipe and advancement data.
- Carry forward the deterministic checked-in furniture catalog, scoped BOP cherry alias, and positive BOP runtime probe.
- Provide reproducible Eclipse/Buildship setup with the exact Temurin Java 25 toolchain, processed resources, and a duplicate-free NeoForge classpath.
8 changes: 5 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@

IronAgeFurniture adds chairs, stools, benches, lighting, and other ye olde-style furniture to Minecraft.

This branch targets Minecraft 1.20.6 with Forge 50.2.0. Its current complete version is `0.3.0.120061` and its Maven coordinate is `zone.moddev.mc:iron-age-furniture:0.3.0.120061`.
This branch targets Minecraft 26.1.2 with NeoForge 26.1.2.94. Its current complete version is `0.3.0.2601022` and its Maven coordinate is `zone.moddev.mc:iron-age-furniture:0.3.0.2601022`.

## Build

Use the checked-in Gradle wrapper with Temurin Java 21.0.7+6. The checked-in Mavenizer compatibility fixture uses Temurin Java 25.0.3+9; the Java 8 installation retained in CI is only a launcher toolchain needed by the Forge preparation stack.
Use the checked-in Gradle wrapper with the exact Temurin Java 25.0.3+9 toolchain. This NeoForge target uses NeoGradle directly and does not need the Forge Mavenizer preparation fixture.

```text
gradlew.bat clean check build javadoc verifyReleaseArtifacts verifyReleaseChecksums
Expand All @@ -22,4 +22,6 @@ Release publication is initiated manually from the protected default-branch disp

Furniture registrations and their matching blockstates, models, recipes, advancements, and translations are generated from `gradle/furniture-catalog.json`. Normal builds verify committed output without changing it; run `gradlew.bat updateFurnitureCatalog` only when intentionally changing the catalog.

The Java API namespace is `zone.moddev.mc.ironagefurniture`. The persistent Forge mod, registry, resource, data, configuration, and saved-world namespace remains `ironagefurniture`.
Biomes O' Plenty furniture is optional and registers only when its compatible NeoForge 26.1.2 mod is loaded; its recipes and advancements use NeoForge conditions. Oh The Biomes We've Gone and Immersive Engineering furniture are intentionally absent because neither integration supports this target matrix.

The Java API namespace is `zone.moddev.mc.ironagefurniture`. The persistent runtime mod, registry, resource, data, configuration, and saved-world namespace remains `ironagefurniture`.
Loading
Loading