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
17 changes: 17 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
* text=auto
*.java text eol=lf
*.gradle text eol=lf
*.properties text eol=lf
*.json text eol=lf
*.lang text eol=lf
*.mcmeta text eol=lf
*.info text eol=lf
*.md text eol=lf
*.txt text eol=lf
LICENSE* text eol=lf
*.yml text eol=lf
*.py text eol=lf
gradlew text eol=lf
*.bat text eol=crlf
*.jar binary
*.png binary
61 changes: 61 additions & 0 deletions .github/workflows/artifact-audit.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
name: Audit LootableBodies 1.11 artifacts

on:
workflow_run:
workflows: [LootableBodies 1.11 CI]
types: [completed]

permissions:
contents: read
actions: read

jobs:
audit:
# Pull-request merge trees are audited inside CI. Push artifacts use the
# workflow run's exact head SHA, which is also their declared artifact name.
if: github.event.workflow_run.conclusion == 'success' && github.event.workflow_run.event == 'push'
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
ref: ${{ github.event.workflow_run.head_sha }}
- uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
with:
distribution: temurin
java-version: '25.0.3+9.0.LTS'
- uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
with:
distribution: temurin
java-version: '8.0.502+7'
- uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
with:
distribution: temurin
java-version: '17.0.1+12'
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
with:
name: LootableBodies-1.11.2-${{ github.event.workflow_run.head_sha }}
run-id: ${{ github.event.workflow_run.id }}
github-token: ${{ github.token }}
path: downloaded
- name: Require exact inputs and assemble an immutable audit bundle
run: |
set -euo pipefail
mkdir audited
for name in LootableBodies-2.4.2.111021.jar LootableBodies-2.4.2.111021-sources.jar LootableBodies-2.4.2.111021-javadoc.jar; do
test -s "downloaded/build/libs/$name"
cp "downloaded/build/libs/$name" audited/
done
test -s downloaded/build/release/SHA256SUMS
test -s downloaded/build/publications/mavenJava/pom-default.xml
test -s downloaded/CHANGELOG.txt
cp downloaded/build/release/SHA256SUMS audited/
cp downloaded/build/publications/mavenJava/pom-default.xml audited/LootableBodies-2.4.2.111021.pom
cp downloaded/CHANGELOG.txt audited/
- name: Audit original bytes without recompiling the jars
env:
LOOTABLEBODIES_JAVA8_HOME: ${{ env.JAVA_HOME_8_X64 }}
LOOTABLEBODIES_MAVENIZER_JAVA_HOME: ${{ env.JAVA_HOME_25_X64 }}
run: |
chmod +x ./gradlew
./gradlew verifyPreparedReleaseArtifacts -PpreparedReleaseDir=audited --no-daemon
336 changes: 336 additions & 0 deletions .github/workflows/ci.yml

Large diffs are not rendered by default.

76 changes: 76 additions & 0 deletions .github/workflows/codeql-analysis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
name: CodeQL

on:
push:
branches:
- master-1.11.2
- 1.11.2-dev
- 'feature/**'
pull_request:
branches:
- master-1.11.2
- 1.11.2-dev
schedule:
- cron: '43 7 * * 4'

permissions:
actions: read
contents: read
security-events: write

jobs:
analyze:
name: Analyze Java
runs-on: ubuntu-latest
timeout-minutes: 45

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

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

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

- name: Install pinned Java 17 Gradle runtime
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
with:
distribution: temurin
java-version: '17.0.1+12'

- name: Pin production JDK
run: |
echo "LOOTABLEBODIES_JAVA8_HOME=$JAVA_HOME_8_X64" >> "$GITHUB_ENV"
echo "LOOTABLEBODIES_MAVENIZER_JAVA_HOME=$JAVA_HOME_25_X64" >> "$GITHUB_ENV"

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

- name: Initialize CodeQL
uses: github/codeql-action/init@db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28 # v4
with:
languages: java-kotlin
build-mode: manual

- name: Compile production code
run: |
chmod +x ./gradlew
gradle_args=(
clean classes --no-build-cache --rerun-tasks
--no-daemon --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
)
./gradlew "${gradle_args[@]}"

- name: Analyze
uses: github/codeql-action/analyze@db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28 # v4
98 changes: 98 additions & 0 deletions .github/workflows/migration-matrix.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
name: LootableBodies 1.11 world upgrades

on:
push:
branches: [master-1.11.2, 1.11.2-dev]
pull_request:
branches: [master-1.11.2, 1.11.2-dev]
workflow_dispatch:

permissions:
contents: read

jobs:
upgrade:
name: ${{ matrix.origin }} / ${{ matrix.stamps }}
runs-on: ubuntu-latest
timeout-minutes: 90
strategy:
fail-fast: false
matrix:
origin: [original-110, released-110, original-111, recovery-110]
stamps: [normal, stamps]
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
with:
distribution: temurin
java-version: '25.0.3+9.0.LTS'
- uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
with:
distribution: temurin
java-version: '8.0.502+7'
- uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
with:
distribution: temurin
java-version: '17.0.1+12'
- uses: gradle/actions/setup-gradle@9c971963bec38e04b3d30dcc455b5382be2fdbfb # v6
with:
cache-disabled: true
- name: Pin separate toolchains
run: |
echo "LOOTABLEBODIES_JAVA8_HOME=$JAVA_HOME_8_X64" >> "$GITHUB_ENV"
echo "LOOTABLEBODIES_MAVENIZER_JAVA_HOME=$JAVA_HOME_25_X64" >> "$GITHUB_ENV"
chmod +x ./gradlew
- name: Build candidate and isolated fixture writers
run: ./gradlew build upgradeContractTest prepareLegacyWorldFixtures preparePackagedIntegrationProbe preparePackagedForgeControl --no-daemon
- name: Download and verify historical artifacts
run: python3 tools/prepare_migration_inputs.py --java "$JAVA_HOME_8_X64/bin/java" --output build/migration-inputs
- name: Create worlds with historical mod writers
run: >-
python3 tools/verify_world_upgrades.py --java "$JAVA_HOME_8_X64/bin/java"
--forge110-home build/migration-inputs/forge110 --forge111-home build/migration-inputs/forge111
--original-110 build/migration-inputs/original-110.jar --released-110 build/migration-inputs/released-110.jar
--original-111 build/migration-inputs/original-111.jar --origins ${{ matrix.origin }}
--seed-only --output build/migration-seeds
- name: Reproduce the Forge diagnostic without Lootable Bodies
run: >-
python3 tools/verify_forge_upgrade_control.py --java "$JAVA_HOME_8_X64/bin/java"
--forge110-home build/migration-inputs/forge110 --forge111-home build/migration-inputs/forge111
--output build/migration-control
- name: Verify first load, recovery, deferred dimensions and restarts
run: >-
python3 tools/verify_world_upgrades.py --java "$JAVA_HOME_8_X64/bin/java"
--forge110-home build/migration-inputs/forge110 --forge111-home build/migration-inputs/forge111
--original-110 build/migration-inputs/original-110.jar --released-110 build/migration-inputs/released-110.jar
--original-111 build/migration-inputs/original-111.jar --origins ${{ matrix.origin }}
--seeds build/migration-seeds --variants ${{ matrix.stamps }}
--control-report build/migration-control/result.json --output build/migration-results
- name: Verify unsafe preservation stops world loading
run: >-
python3 tools/verify_upgrade_abort.py --java "$JAVA_HOME_8_X64/bin/java"
--forge-home build/migration-inputs/forge111
--source-world build/migration-seeds/${{ matrix.origin }}/world --output build/migration-abort
- name: Require every report
run: |
for path in build/migration-inputs/inputs.json build/migration-seeds/seed-report.json build/migration-control/result.json build/migration-results/result.json build/migration-abort/result.json; do
test -s "$path"
done
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: LootableBodies-1.11.2-upgrade-${{ matrix.origin }}-${{ matrix.stamps }}-${{ github.sha }}
if-no-files-found: error
path: |
build/migration-inputs/inputs.json
build/migration-seeds/seed-report.json
build/migration-control/result.json
build/migration-results/result.json
build/migration-abort/result.json
- name: Upload failed run diagnostics
if: failure()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: LootableBodies-1.11.2-upgrade-failure-${{ matrix.origin }}-${{ matrix.stamps }}-${{ github.sha }}
if-no-files-found: error
path: |
build/reports/**
build/migration-*/**/*.log
build/migration-*/**/crash-reports/**
25 changes: 25 additions & 0 deletions .github/workflows/validate-gradle-build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
name: Validate Gradle Wrapper

on:
push:
branches:
- master-1.11.2
- 1.11.2-dev
- 'feature/**'
pull_request:
branches:
- master-1.11.2
- 1.11.2-dev

permissions:
contents: read

jobs:
validation:
name: Validation
runs-on: ubuntu-latest
steps:
- name: Check out source
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
- name: Validate wrapper integrity
uses: gradle/actions/wrapper-validation@9c971963bec38e04b3d30dcc455b5382be2fdbfb # v6
49 changes: 30 additions & 19 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,21 +1,32 @@
*.class
*.iml
*.ipr
*.iws
*.classpath
*.project
*.prefs
*.launch
/output

#ForgeGradle
/build
/.gradle
/eclipse/assets
/libs
/README.txt
/.classpath
/forge-*-changelog.txt
/bin/*
/.gradle/*
/eclipse/.metadata/.plugins/org.eclipse.core.resources/.history/*
/eclipse/.metadata/*.dat
/eclipse/.metadata/*.tree
/eclipse/.metadata/*.index
*.index
*~
/temp/*
/build/*
/classes/*
/.idea/*
temp/*
/run/*
/.project
/.settings/
/*.launch
/.eclipse/
/build/
/bin/
/run/
/out/
gradle.properties
__pycache__/
*.pyc

\.idea/

/gradle-local.properties
/logs/
/crash-reports/
/runs/
/out/
12 changes: 0 additions & 12 deletions .travis.yml

This file was deleted.

15 changes: 15 additions & 0 deletions CHANGELOG.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
2.4.2.111021 - Minecraft 1.11.2, Forge

- Fixed item loss and duplication during death, corpse inventory transfers,
hotbar swaps, dragging and cancelled drops.
- Added protection for corpses when upgrading 1.10.2 and 1.11.2 worlds,
including bodies in chunks you visit later.
- Kept unreadable item records for recovery when missing mods return.
- Corpses wait for unloaded terrain and only move out of walls when there is
enough clear, loaded space for the whole body.
- Added a Config button on the Mods list. Appearance changes apply straight
away; world and server rules take effect after restarting Minecraft.
- Fixed untranslated names on nameless corpses and their spawn eggs.

Existing settings and defaults are unchanged. Back up your world before
upgrading, including its data folder. Downgrading an upgraded world is unsupported.
Loading
Loading