Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
768515d
ignore neoforge stuff
North-West-Wind Mar 28, 2026
f94f7dc
refactor: 1.21.11 compat
North-West-Wind Mar 28, 2026
a49ebc1
build: identifiable build version
North-West-Wind Mar 28, 2026
54d64f2
refactor: 26.1.2 compat
North-West-Wind Jun 27, 2026
1686c5a
refactor: update loaderVersion
North-West-Wind Jun 27, 2026
06d5c89
refactor: 26.2 compat
North-West-Wind Jun 28, 2026
450c961
refactor: multiloader
North-West-Wind Jun 29, 2026
408d4ba
refactor: stonecutter
North-West-Wind Jun 29, 2026
c1c9082
feat: support 26.1.2 & 1.21.11
North-West-Wind Jun 29, 2026
e706469
refactor: use a loader property
North-West-Wind Jun 29, 2026
03bdaed
fix: use in-scope component
North-West-Wind Jun 29, 2026
1f553a8
refactor: how many templates can he find?
North-West-Wind Jun 29, 2026
d1aefaf
refactor: steal Faboslav's setup for Fabric
North-West-Wind Jun 29, 2026
5ef73b0
fix: fabric building
North-West-Wind Jun 29, 2026
9e75c91
fix: template names
North-West-Wind Jun 30, 2026
a16980a
feat: support 1.21.1
North-West-Wind Jun 30, 2026
052ab6a
refactor: clean up, re-add AT for Forge, change version naming
North-West-Wind Jun 30, 2026
b84974a
refactor: new repository location
North-West-Wind Jun 30, 2026
70ec43b
build: CI settings
North-West-Wind Jun 30, 2026
8ac2292
ci: build artifacts
North-West-Wind Jun 30, 2026
b96ccf2
fix: forge 1.21.1
North-West-Wind Jun 30, 2026
fc836a8
refactor: use fabric mapping for common
North-West-Wind Jun 30, 2026
12284a6
feat: support 1.20.1
North-West-Wind Jun 30, 2026
8d5f5f8
ci: publishing & renamed build
North-West-Wind Jun 30, 2026
d26ca3b
ci: steal Faboslav's setup
North-West-Wind Jun 30, 2026
daf39b8
feat: support 1.19.4 & 1.19.2
North-West-Wind Jun 30, 2026
b464481
feat: support 1.18.2
North-West-Wind Jun 30, 2026
c7a5244
feat: support 1.17.1
North-West-Wind Jun 30, 2026
2e4958f
feat: support 1.16.5 (except forge)
North-West-Wind Jun 30, 2026
fa623b6
fix: mark executable
North-West-Wind Jun 30, 2026
ab3d2a7
fix: git update-index for scripts
North-West-Wind Jun 30, 2026
f80c630
ci: bashing my scripts
North-West-Wind Jun 30, 2026
acd2cd4
ci: add changelog inputs
North-West-Wind Jun 30, 2026
4682032
ci: use changelog from release
North-West-Wind Jun 30, 2026
318ce82
ci: only trigger publish on release
North-West-Wind Jun 30, 2026
66906db
ci: centralize building during publish
North-West-Wind Jun 30, 2026
c98d7d5
ci: new push cancel old build
North-West-Wind Jun 30, 2026
1677bf5
refactor: remove old shared.gradle
North-West-Wind Jul 1, 2026
0466011
fix: forge mod loading
North-West-Wind Jul 2, 2026
462d2b6
fix: translation keys
North-West-Wind Jul 2, 2026
31ecc34
fix: background rendering
North-West-Wind Jul 2, 2026
eb7503a
fix: item filter for 1.19.2-
North-West-Wind Jul 2, 2026
0531555
ci: togglable publish
North-West-Wind Jul 2, 2026
6983e9e
ci: cache build & reusable build for publish
North-West-Wind Jul 2, 2026
2730754
chore: revert license to GPLv3
North-West-Wind Jul 2, 2026
0a7cdf3
chore: update README.md
North-West-Wind Jul 2, 2026
5ded20f
fix: bump patch version
North-West-Wind Jul 2, 2026
11d3f54
ci: parallel building
North-West-Wind Jul 2, 2026
6a5b10f
ci: YOUR TAKING TOO LONG (revert parallel)
North-West-Wind Jul 2, 2026
b0a7a7e
ci: build only on branch push
North-West-Wind Jul 2, 2026
401c5d6
fix: properly apply parchment
North-West-Wind Jul 2, 2026
9b2bfa4
test: use common run directory
North-West-Wind Jul 6, 2026
4016547
merge: master into multiloader-stonecutter
North-West-Wind Jul 6, 2026
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
21 changes: 16 additions & 5 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -1,5 +1,16 @@
# Disable autocrlf on generated files, they always generate with LF
# Add any extra files or paths here to make git stop saying they
# are changed when only line endings change.
src/generated/**/.cache/cache text eol=lf
src/generated/**/*.json text eol=lf
* text eol=lf
*.bat text eol=crlf
*.patch text eol=lf
*.java text eol=lf
*.gradle text eol=crlf
*.png binary
*.gif binary
*.exe binary
*.dll binary
*.jar binary
*.lzma binary
*.zip binary
*.pyd binary
*.cfg text eol=lf
*.jks binary
*.ogg binary
24 changes: 24 additions & 0 deletions .github/scripts/generate-publish-matrix.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#!/bin/bash
# Stolen from Faboslav
# https://github.com/Faboslav/friends-and-foes/blob/master/.github/scripts/generate-publish-matrix.sh

matrix_content="{\"include\":["
enabled_platforms=$(awk -F= '/stonecutter_enabled_platforms/{print $2}' gradle.properties | tr -d ' ')

for platform in $(echo $enabled_platforms | tr ',' ' '); do
versions=$(awk -F= '/stonecutter_enabled_'$platform'_versions/{print $2}' gradle.properties | tr -d ' ')
for version in $(echo $versions | tr ',' ' '); do
if [[ "$platform" == "fabric" ]]; then
supported_loaders="\"fabric\",\"quilt\""
else
supported_loaders="\"$platform\""
fi

matrix_entry="{\"loader\":\"$platform\",\"version\":\"$version\",\"supported_loaders\":[$supported_loaders]},"
matrix_content+="$matrix_entry"
done
done

matrix_content="${matrix_content%,}]}"
echo "Generated matrix: $matrix_content"
echo "matrix=$matrix_content" >> $GITHUB_OUTPUT
29 changes: 29 additions & 0 deletions .github/scripts/parse-gradle-properties.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#!/bin/bash
# Stolen from Faboslav
# https://github.com/Faboslav/friends-and-foes/blob/master/.github/scripts/parse-gradle-properties.sh

version=${1:-}

parse_properties_file() {
local file=$1
while IFS='=' read -r key value || [[ -n "$key" ]]; do
key=$(echo "$key" | awk '{$1=$1;print}')
value=$(echo "$value" | awk '{$1=$1;print}')

if [[ -z "$key" || "$key" =~ ^# || "$key" == "org.gradle.jvmargs" ]]; then
continue
fi

key=$(echo "$key" | tr '[:lower:]' '[:upper:]' | tr -c '[:alnum:]' '_')
key=$(echo "$key" | sed 's/_$//')

echo "${key}=${value}"
echo "${key}=${value}" >> "$GITHUB_OUTPUT"
done < "$file"
}

parse_properties_file gradle.properties

if [[ -n "$version" ]]; then
parse_properties_file "versions/${version}/gradle.properties"
fi
51 changes: 51 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
name: Build

on:
push:
branches:
- multiloader-stonecutter
pull_request:
workflow_call:

concurrency:
group: build-${{ github.ref }}
cancel-in-progress: true

jobs:
build:
name: Build Everything
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 1

- name: Set up JDK
uses: actions/setup-java@v3
with:
java-version: 25
distribution: temurin
cache: gradle

- name: Setup Gradle
uses: gradle/actions/setup-gradle@v6
with:
cache-read-only: false
gradle-version: wrapper
add-job-summary: 'on-failure'

- name: Make gradlew executable
run: chmod +x ./gradlew
shell: bash

- name: Build with Gradle
run: ./gradlew build
shell: bash

- name: Upload Artifacts
uses: actions/upload-artifact@v4
with:
name: mod-artifacts
path: ./**/versions/**/build/libs
65 changes: 65 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
name: Publish

on:
release:
types: [published]

concurrency:
group: publish-${{ github.ref }}
cancel-in-progress: false

jobs:
generate-publish-matrix:
runs-on: ubuntu-latest
name: Generate Publish Matrix
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 1

- id: set-matrix
run: bash ./.github/scripts/generate-publish-matrix.sh

build:
uses: ./.github/workflows/build.yml

publish:
needs: [generate-publish-matrix, build]
runs-on: ubuntu-latest
name: Publish ${{ matrix.loader }} ${{ matrix.version }}
strategy:
max-parallel: 3
fail-fast: false
matrix: ${{ fromJSON(needs.generate-publish-matrix.outputs.matrix) }}
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 1

- uses: actions/download-artifact@v4
with:
name: mod-artifacts

- name: "Parse gradle properties"
id: gradle-properties
run: bash ./.github/scripts/parse-gradle-properties.sh ${{ matrix.version }}

- uses: Kir-Antipov/mc-publish@v3.3
with:
modrinth-id: ${{ vars.MODRINTH_PUB && vars.MODRINTH_ID }}
modrinth-token: ${{ vars.MODRINTH_PUB && secrets.MODRINTH_TOKEN }}
curseforge-id: ${{ vars.CURSEFORGE_PUB && vars.CURSEFORGE_ID }}
curseforge-token: ${{ vars.CURSEFORGE_PUB && secrets.CURSEFORGE_TOKEN }}
files: |
${{ matrix.loader }}/versions/${{ matrix.version }}/build/libs/*.jar
loaders: ${{ join(matrix.supported_loaders, ' ') }}
game-versions: |
>=${{ steps.gradle-properties.outputs.MIN_MINECRAFT_VERSION }} <=${{ steps.gradle-properties.outputs.MINECRAFT_VERSION }}
version: ${{ steps.gradle-properties.outputs.MOD_VERSION }}-${{ matrix.version }}-${{ matrix.loader }}
name: ${{ steps.gradle-properties.outputs.MOD_NAME }} ${{ steps.gradle-properties.outputs.MOD_VERSION }} (${{ matrix.version }}-${{ matrix.loader }})
version-type: ${{ github.event.release.prerelease && 'beta' || 'release' }}
changelog: ${{ github.event.release.body || '' }}
retry-attempts: 6
retry-delay: 30000
135 changes: 113 additions & 22 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,28 +1,119 @@
# eclipse
bin
*.launch
.settings
.metadata
.classpath
.project

# idea
out
# User-specific stuff
.idea/

*.iml
*.ipr
*.iws
*.iml
.idea

# gradle
build
# IntelliJ
out/
# mpeltonen/sbt-idea plugin
.idea_modules/

# JIRA plugin
atlassian-ide-plugin.xml

# Compiled class file
*.class

# Log file
*.log

# BlueJ files
*.ctxt

# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar

# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*

*~

# temporary files which can be created if a process still has a handle open of a deleted file
.fuse_hidden*

# KDE directory preferences
.directory

# Linux trash folder which might appear on any partition or disk
.Trash-*

# .nfs files are created when an open file is removed but is still being accessed
.nfs*

# General
.DS_Store
.AppleDouble
.LSOverride

# Icon must end with two \r
Icon

# Thumbnails
._*

# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent

# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk

# Windows thumbnail cache files
Thumbs.db
Thumbs.db:encryptable
ehthumbs.db
ehthumbs_vista.db

# Dump file
*.stackdump

# Folder config file
[Dd]esktop.ini

# Recycle Bin used on file shares
$RECYCLE.BIN/

# Windows Installer files
*.cab
*.msi
*.msix
*.msm
*.msp

# Windows shortcuts
*.lnk

.gradle
build/

# Ignore Gradle GUI config
gradle-app.setting

# Cache of project
.gradletasknamecache

**/build/

# other
eclipse
run
runs
run-data
.vscode
# Common working directory
run/
runs/

# Files from Forge MDK
forge*changelog.txt
# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored)
!gradle-wrapper.jar
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
Expand Up @@ -671,4 +671,4 @@ into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.
<https://www.gnu.org/licenses/why-not-lgpl.html>.
Loading
Loading