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 1.20.6 NeoForge CI

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

permissions:
contents: read

concurrency:
group: iron-age-furniture-1.20.6-${{ github.workflow }}-${{ github.ref }}
group: iron-age-furniture-1.20.6-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
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
- name: Install exact Java 21
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
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
- name: Install exact Java 21
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-1.20.6-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.120062.jar
build/libs/iron-age-furniture-0.3.0.120062-sources.jar
build/libs/iron-age-furniture-0.3.0.120062-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-1.20.6-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-1.20.6-neo
- 'feature/**'
pull_request:
branches:
- master-1.20.6
- master-1.20.6-neo
schedule:
- cron: '43 7 * * 4'

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

- name: Install pinned Java 25 Mavenizer runtime
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
- name: Install exact Java 21
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
with:
distribution: temurin
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-1.20.6-neo
- 'feature/**'
pull_request:
branches:
- master-1.20.6
- master-1.20.6-neo

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

- Port IronAgeFurniture to Minecraft 1.20.6 and Forge 50.2.0 on Java 21.
- Translate IronAgeFurniture to Minecraft 1.20.6 and NeoForge 20.6.139 on Java 21.
- Replace Forge conditional wrappers with native `neoforge:conditions` and use NeoForge registry aliases for legacy BOP cherry furniture.
- Retain the complete contemporary Biomes O' Plenty furniture family and its conditional recipes and advancements.
- Correct every Biomes O' Plenty model to use its matching wood textures and validate the mappings against the pinned integration jar.
- Update legacy vanilla texture references, including iron-sconce models, to their current paths.
- 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.
- Fix recipe advancements so furniture unlocks only when its actual ingredient is obtained, including conditional optional-mod recipes.
- Restore normal wooden-furniture fire behaviour while keeping Crimson and Warped furniture non-flammable.
- Restore throwable lava lamps, water shattering with the glass sound and obsidean-chunk drop, and safe creative-mode removal.
- Provide reproducible Eclipse/Buildship setup with the exact Temurin Java 21 toolchain, processed resources, and a duplicate-free NeoForge classpath.

This is a release candidate changelog. Publication requires the protected default-branch release workflow.
17 changes: 13 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,25 @@

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 1.20.6 with NeoForge 20.6.139. Its current complete version is `0.3.0.120062` and its Maven coordinate is `zone.moddev.mc:iron-age-furniture:0.3.0.120062`.

## Optional integrations

Biomes O' Plenty furniture is enabled only when Biomes O' Plenty is present; it is not a hard dependency. Its recipes and recipe advancements are loaded conditionally with the integration, and existing IronAgeFurniture BOP Cherry furniture remaps to vanilla Cherry.

Oh The Biomes We've Gone and Immersive Engineering furniture are intentionally unavailable because neither integration has a compatible release for this target.

## 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 Temurin Java 21.0.7+6. This NeoForge target uses NeoGradle directly and does not need the Forge Mavenizer preparation fixture.

```text
gradlew.bat clean check build javadoc verifyReleaseArtifacts verifyReleaseChecksums
gradlew.bat clean
gradlew.bat check build javadoc verifyReleaseArtifacts verifyReleaseChecksums
```

Run the clean and verification commands separately because NeoGradle resolves model inputs under `build/tmp` while configuring the verification build.

Generate reproducible Eclipse/Buildship metadata with:

```text
Expand All @@ -22,4 +31,4 @@ 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`.
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