diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index d2293a4e33..ef5ef3dfe1 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -1,16 +1,2 @@
-# Modifications to the source code should be handled by the code review team
-*.java @Slimefun/code-reviewers
-
-# Modifications to sensitive files should be reviewed by maintainers
-/.github/ @Slimefun/slimefun4-maintainers
-pom.xml @Slimefun/slimefun4-maintainers
-CONTRIBUTING.md @Slimefun/slimefun4-maintainers
-
-# Changes to the Issue templates need to be checked by the triage team
-/.github/ISSUE_TEMPLATE/ @Slimefun/bug-testers
-
-# Our wiki lookup file will be reviewed by the wiki staff team
-/src/main/resources/wiki.json @Slimefun/wiki-staff
-
-# This file is handled by TheBusyBiscuit (admins have overwrite access anyway)
-/.github/CODEOWNERS @TheBusyBiscuit
+# All changes are reviewed by the maintainers
+* @Slimefun5/maintainers
diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md
index 0a2e285211..a6e04fc4ac 100644
--- a/.github/CODE_OF_CONDUCT.md
+++ b/.github/CODE_OF_CONDUCT.md
@@ -1,4 +1,4 @@
-# Slimefun4 - Code of Conduct
+# Slimefun5 - Code of Conduct
### What is a Code of Conduct?
> A code of conduct is a document that establishes expectations for behavior for your project’s participants.
> Adopting, and enforcing, a code of conduct can help create a positive social atmosphere for your community.
@@ -7,8 +7,7 @@
This document should serve the purpose of outlining the behaviour we expect from any participant of the project.
## :mag_right: Scope
-This Code of Conduct applies to all sections of the [Slimefun4 GitHub repository](https://github.com/Slimefun/Slimefun4), our [Slimefun GitHub organization](https://github.com/Slimefun) and all repositories owned by said organization.
-For our official Discord server, please refer to our article on [Discord Rules](https://github.com/Slimefun/Slimefun4/wiki/Discord-Rules).
+This Code of Conduct applies to all sections of the [Slimefun5 GitHub repository](https://github.com/Slimefun5/Slimefun5) and our [Slimefun5 GitHub organization](https://github.com/Slimefun5).
Everyone who engages with this project on any of these repositories is expected to follow the Code of Conduct.
This includes maintainers, contributors, sponsors and anyone who engages in the "Issues" section on GitHub.
@@ -18,8 +17,7 @@ This is an Open-Source project, anyone is welcome to engage and contribute!
We generally expect users to engage in the Issues section by reporting bugs or commenting on bug reports to give additional context, help, guidance or to propose possible solutions and fixes.
Pull Requests are very much welcome and encouraged! They keep the project alive, so if you see an Issue and know how to fix it, feel free to create a Pull Request!
-Issues that are considered "good first issues", indicated by the [good first issue](https://github.com/Slimefun/Slimefun4/labels/good%20first%20issue) label, are generally expected to be beginner-friendly.
-And even if you shouldn't know where to start or how to proceed, our [Discord Server](https://discord.gg/slimefun) and its community will be there for you!
+Issues that are considered "good first issues", indicated by the [good first issue](https://github.com/Slimefun5/Slimefun5/labels/good%20first%20issue) label, are generally expected to be beginner-friendly.
When commenting, please keep in mind that this software is offered for **free**. Don't expect to receive lightning-fast replies 24 hours a day.
Everyone here works on this project in their free time and usually has work, school, university or family to take care of, so we appreciate patience and understanding.
@@ -54,13 +52,12 @@ comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.
-You can see a list of people who are recognized as "project maintainers" for Slimefun on the Slimefun GitHub organization:
-https://github.com/orgs/Slimefun/people
+You can see a list of people who are recognized as "project maintainers" for Slimefun on the Slimefun5 GitHub organization:
+https://github.com/orgs/Slimefun5/people
## :wrench: Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
-reported to the community leaders (labelled on Discord as "Admins" or "Moderators") responsible for enforcement on our [Discord Server](discord.gg/slimefun).
-If you want your issue to be handled discreetly, message `TheBusyBiscuit#2610` or `Walshy#9709` privately on Discord and state your concerns.
+reported to the project maintainers via [GitHub Issues](https://github.com/Slimefun5/Slimefun5/issues).
All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the
diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md
index 08c508502f..96c9f3ba09 100644
--- a/.github/ISSUE_TEMPLATE.md
+++ b/.github/ISSUE_TEMPLATE.md
@@ -1,3 +1,3 @@
THIS ISSUE IS INVALID.
-TO REPORT A BUG, GO HERE -> https://github.com/Slimefun/Slimefun4/issues/new/choose
+TO REPORT A BUG, GO HERE -> https://github.com/Slimefun5/Slimefun5/issues/new/choose
diff --git a/.github/ISSUE_TEMPLATE/bug-report.yaml b/.github/ISSUE_TEMPLATE/bug-report.yaml
index fcc3435e70..3e14809431 100644
--- a/.github/ISSUE_TEMPLATE/bug-report.yaml
+++ b/.github/ISSUE_TEMPLATE/bug-report.yaml
@@ -1,28 +1,25 @@
name: Bug Report
-description: Report a Bug or an Issue with Slimefun 4.
+description: Report a Bug or an Issue with Slimefun.
labels: ['🎯 Needs testing', '🐞 Bug Report']
body:
- type: markdown
attributes:
value: |
- ## 👋 Welcome to the Slimefun Bug Tracker
- If you need any help to identify the problem, visit our [Discord server](https://discord.gg/slimefun) and see if others experience a similar issue.
- Also take a look at our [Troubleshooting Guide](https://github.com/Slimefun/Slimefun4/wiki/How-to-report-bugs) and the list of [existing Issues](https://github.com/Slimefun/Slimefun4/issues).
+ ## Bug Tracker
+ Take a look at our [Troubleshooting Guide](https://github.com/Slimefun/Slimefun4/wiki/How-to-report-bugs) and the list of [existing Issues](https://github.com/Slimefun5/Slimefun5/issues).
Fields marked with an asterisk (*) are required.
- id: checklist
type: checkboxes
attributes:
- label: '❗ Checklist'
+ label: 'Checklist'
description: Please go through this checklist before creating the issue.
options:
- label: I am using the official english version of Slimefun and did not modify the jar.
required: true
- - label: I downloaded the official version from the new build site [Blob Builds](https://blob.build/).
- required: true
- - label: I am using an up to date "DEV" (not "RC") version of Slimefun.
+ - label: I downloaded the latest release from [GitHub Releases](https://github.com/Slimefun5/Slimefun5/releases).
required: true
- label: I am aware that issues related to Slimefun addons need to be reported on their bug trackers and not here.
required: true
@@ -34,7 +31,7 @@ body:
validations:
required: true
attributes:
- label: '📍 Description'
+ label: 'Description'
description: |
A clear and detailed description of what went wrong.
The more information you can provide, the easier we can handle this problem.
@@ -46,7 +43,7 @@ body:
validations:
required: true
attributes:
- label: '📑 Reproduction Steps'
+ label: 'Reproduction Steps'
description: |
Tell us the exact steps to reproduce this issue, the more detailed the easier we can reproduce it.
placeholder: |
@@ -59,7 +56,7 @@ body:
validations:
required: true
attributes:
- label: '💡 Expected Behavior'
+ label: 'Expected Behavior'
description: |
What were you expecting to happen?
What do you think would have been the correct behaviour?
@@ -69,7 +66,7 @@ body:
- id: media
type: textarea
attributes:
- label: '📷 Screenshots / Videos'
+ label: 'Screenshots / Videos'
description: |
The best way to illustrate in an issue is by recording a Video or taking a Screenshot.
If you can capture any footage of the bug happening, it would help us out a lot!
@@ -79,7 +76,7 @@ body:
- id: server-log
type: input
attributes:
- label: '📜 Server Log'
+ label: 'Server Log'
description: |
Take a look at your Server Log and upload any error messages from Slimefun to a pasting site (e.g. https://pastebin.com/).
If you are unsure about it, post your full log, you can find it under /logs/latest.log
@@ -88,7 +85,7 @@ body:
- id: error-reports
type: input
attributes:
- label: '📂 `/error-reports/` folder'
+ label: '`/error-reports/` folder'
description: |
Check the folder `/plugins/Slimefun/error-reports/` and upload any files inside that folder to a pasting site (e.g. https://pastebin.com/).
placeholder: https://pastebin.com/...
@@ -98,13 +95,12 @@ body:
validations:
required: true
attributes:
- label: '💻 Server Software'
+ label: 'Server Software'
description: 'Please select the software your Server is running on'
options:
- Spigot
- Paper
- Purpur
- - Airplane
- Other (please specify in your description)
- id: minecraft-version
@@ -112,9 +108,10 @@ body:
validations:
required: true
attributes:
- label: '🎮 Minecraft Version'
+ label: 'Minecraft Version'
description: 'Please select the Minecraft version of the server'
options:
+ - 1.21.x
- 1.20.x
- 1.19.x
- 1.18.x
@@ -127,7 +124,7 @@ body:
validations:
required: true
attributes:
- label: '⭐ Slimefun version'
+ label: 'Slimefun version'
description: |
**"latest" is not a version number, we need the exact version.**
We recommend running "/sf versions" and uploading a screenshot of that.
@@ -137,7 +134,7 @@ body:
- id: other-versions
type: textarea
attributes:
- label: '🧭 Other plugins'
+ label: 'Other plugins'
description: |
If your issue is related to another plugin, make sure to include this here!
placeholder: The issue is related to plugin [...], version [...]
@@ -145,8 +142,6 @@ body:
- type: markdown
attributes:
value: |
- ## ❤️ Thank you for submitting your bug report!
+ ## Thank you for submitting your bug report!
If you find any additional info that can help to identify this problem, don't hesitate to comment on your issue!
Any additional info can help us fix this bug faster.
- In the meantime, try visiting our [Discord server](https://discord.gg/slimefun).
- Perhaps someone else has experienced a similar issue.
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
index b14ef722f3..4a69e7cfd6 100644
--- a/.github/ISSUE_TEMPLATE/config.yml
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -1,11 +1,8 @@
blank_issues_enabled: false
contact_links:
- name: Code of Conduct
- url: https://github.com/Slimefun/Slimefun4/blob/master/.github/CODE_OF_CONDUCT.md
+ url: https://github.com/Slimefun5/Slimefun5/blob/stable/.github/CODE_OF_CONDUCT.md
about: Please read this before posting
- name: Bug Report Guidelines
url: https://github.com/Slimefun/Slimefun4/wiki/How-to-report-bugs
about: Guidelines on how to make good Bug reports
- - name: Discord Server (for Questions and Suggestions)
- url: https://discord.gg/slimefun
- about: Please ask and answer questions here.
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index 0ebdee6426..7b2f4c2386 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -17,7 +17,7 @@
- [ ] I have fully tested the proposed changes and promise that they will not break everything into chaos.
- [ ] I have also tested the proposed changes in combination with various popular addons and can confirm my changes do not break them.
-- [ ] I have made sure that the proposed changes do not break compatibility across the supported Minecraft versions (1.16.* - 1.20.*).
+- [ ] I have made sure that the proposed changes do not break compatibility across the supported Minecraft versions (1.16.* - 1.21.*).
- [ ] I followed the existing code standards and didn't mess up the formatting.
- [ ] I did my best to add documentation to any public classes or methods I added.
- [ ] I have added `Nonnull` and `Nullable` annotations to my methods to indicate their behaviour for null values
diff --git a/.github/docs-config.yml b/.github/docs-config.yml
new file mode 100644
index 0000000000..552b077c7b
--- /dev/null
+++ b/.github/docs-config.yml
@@ -0,0 +1,7 @@
+description: "Slimefun is a Paper plugin that simulates a modpack-like atmosphere by adding over 500 new items and recipes to your Minecraft Server."
+java: "25"
+paper: "26.1.2"
+gradle_plugin: "1.8.2.1"
+
+bstats: 31272
+bstats_name: Slimefun 5
diff --git a/.github/workflows/auto-approve.yml b/.github/workflows/auto-approve.yml
deleted file mode 100644
index 8f3836fad9..0000000000
--- a/.github/workflows/auto-approve.yml
+++ /dev/null
@@ -1,26 +0,0 @@
-name: Auto approve
-
-on: pull_request
-
-permissions:
- contents: read
-
-jobs:
- auto-approve:
-
- name: Auto approve Pull Request
- runs-on: ubuntu-latest
-
- # for hmarr/auto-approve-action to approve PRs
- permissions:
- pull-requests: write
-
- # Only run this on the main repo
- if: github.event.pull_request.head.repo.full_name == 'Slimefun/Slimefun4'
-
- steps:
- - name: Approve via actions
- uses: hmarr/auto-approve-action@v4.0.0
- if: github.actor == 'TheBusyBot' || github.actor == 'renovate[bot]'
- with:
- github-token: "${{ secrets.GITHUB_TOKEN }}"
diff --git a/.github/workflows/auto-squash.yml b/.github/workflows/auto-squash.yml
deleted file mode 100644
index 8b8ef1f434..0000000000
--- a/.github/workflows/auto-squash.yml
+++ /dev/null
@@ -1,53 +0,0 @@
-name: Auto squash pull requests
-
-on:
- pull_request_review:
- types:
- - submitted
-
- check_suite:
- types:
- - completed
-
- status: {}
-
-jobs:
- autosquash-crowdin:
-
- name: Auto squash (Crowdin)
- runs-on: ubuntu-latest
-
- ## Only run this on the main repo
- if: github.event.pull_request.head.repo.full_name == 'Slimefun/Slimefun4'
-
- steps:
- - name: Auto squash
- uses: pascalgn/automerge-action@v0.16.4
- env:
- GITHUB_TOKEN: ${{ secrets.ACCESS_TOKEN }}
- UPDATE_RETRIES: 0
- MERGE_METHOD: squash
- MERGE_FORKS: false
- MERGE_DELETE_BRANCH: true
- MERGE_LABELS: '📄 Translations Update'
- MERGE_COMMIT_MESSAGE: '[CI skip] New locale updates from Crowdin'
-
- autosquash-renovate:
-
- name: Auto squash (Renovate)
- runs-on: ubuntu-latest
-
- ## Only run this on the main repo
- if: github.event.pull_request.head.repo.full_name == 'Slimefun/Slimefun4'
-
- steps:
- - name: Auto squash
- uses: pascalgn/automerge-action@v0.16.4
- env:
- GITHUB_TOKEN: ${{ secrets.ACCESS_TOKEN }}
- UPDATE_RETRIES: 0
- MERGE_METHOD: squash
- MERGE_FORKS: false
- MERGE_DELETE_BRANCH: true
- MERGE_LABELS: '🚨 Dependency Update'
- MERGE_COMMIT_MESSAGE: '[CI skip] ${{ github.event.pull_request.title }}'
diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
new file mode 100644
index 0000000000..1c069d3a70
--- /dev/null
+++ b/.github/workflows/ci.yaml
@@ -0,0 +1,7 @@
+name: CI
+
+on: [push, pull_request]
+
+jobs:
+ build:
+ uses: Slimefun5/workflows/.github/workflows/ci.yaml@stable
diff --git a/.github/workflows/close-invalid-issues.yml b/.github/workflows/close-invalid-issues.yml
deleted file mode 100644
index 705f6ab9a5..0000000000
--- a/.github/workflows/close-invalid-issues.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Close invalid Issue
-
-on:
- issues:
- types: [opened]
-
-jobs:
- comment:
-
- name: Invalid Issues
- runs-on: ubuntu-latest
-
- if: contains(github.event.issue.labels.*.name, '🐞 Bug Report') == false && contains(github.event.issue.labels.*.name, 'Hacktoberfest') == false
- steps:
- - name: Close Issue
- uses: maxkomarychev/octions/octions/issues/update@master
- with:
- token: ${{ secrets.ACCESS_TOKEN }}
- issue_number: ${{ github.event.issue.number }}
- state: closed
- - name: Add invalid label
- uses: maxkomarychev/octions/octions/issues/add-labels@master
- with:
- token: ${{ secrets.ACCESS_TOKEN }}
- issue_number: ${{ github.event.issue.number }}
- labels: 'invalid'
- - name: Create a comment
- uses: maxkomarychev/octions/octions/issues/create-comment@master
- with:
- token: ${{ secrets.ACCESS_TOKEN }}
- issue_number: ${{ github.event.issue.number }}
- body: |-
- Your issue seems to be missing our template.
- [Click here to create a bug report](https://github.com/Slimefun/Slimefun4/issues/new/choose)
-
- Please remember that this Bug Tracker is exclusively reserved for Bug reports, any other form
- of discussion, like suggestions or questions should be posted on our discord server (You can find a link [on our main page](https://github.com/Slimefun/Slimefun4#discord)).
diff --git a/.github/workflows/discord-webhook.yml b/.github/workflows/discord-webhook.yml
deleted file mode 100644
index 6735d5d642..0000000000
--- a/.github/workflows/discord-webhook.yml
+++ /dev/null
@@ -1,45 +0,0 @@
-name: Discord Webhook
-
-on:
- push:
- paths:
- - 'src/**'
- - '!src/main/resources/languages/**'
- - 'pom.xml'
-
-permissions:
- contents: read
-
-jobs:
- report:
-
- name: Discord Webhook
- runs-on: ubuntu-latest
-
- ## Only run this on the main repo
- if: github.repository == 'Slimefun/Slimefun4'
-
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4.2.2
-
- - name: Set up Java JDK 21
- uses: actions/setup-java@v4.6.0
- with:
- distribution: 'adopt'
- java-version: '21'
- java-package: jdk
- architecture: x64
-
- - name: Cache Maven packages
- uses: actions/cache@v4
- with:
- path: ~/.m2
- key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
- restore-keys: ${{ runner.os }}-m2
-
- - name: Run Discord Webhook
- uses: baked-libs/discord-webhook@1.5.1
- with:
- id: ${{ secrets.DISCORD_WEBHOOK_ID }}
- token: ${{ secrets.DISCORD_WEBHOOK_TOKEN }}
diff --git a/.github/workflows/duplicates.yml b/.github/workflows/duplicates.yml
deleted file mode 100644
index 7cb94d0dcb..0000000000
--- a/.github/workflows/duplicates.yml
+++ /dev/null
@@ -1,25 +0,0 @@
-name: Mark Issue as duplicate
-
-on:
- issue_comment:
- types: [created]
-
-permissions:
- contents: read
- issues: write
-
-jobs:
- comment:
-
- name: Mark Issue as duplicate
- runs-on: ubuntu-latest
-
- if: contains(github.event.comment.body, 'Duplicate of ')
-
- steps:
- - name: Add label to the Issue
- uses: maxkomarychev/octions/octions/issues/add-labels@master
- with:
- token: ${{ secrets.ACCESS_TOKEN }}
- issue_number: ${{ github.event.issue.number }}
- labels: '🚩 Duplicate'
diff --git a/.github/workflows/e2e-testing.yml b/.github/workflows/e2e-testing.yml
deleted file mode 100644
index e6be9ca39a..0000000000
--- a/.github/workflows/e2e-testing.yml
+++ /dev/null
@@ -1,81 +0,0 @@
-name: End to End Testing
-
-on:
- workflow_call:
- inputs:
- artifact-name:
- description: 'Slimefun artifact name'
- required: true
- type: string
-
-jobs:
- e2e-testing:
- name: End to End Testing
- runs-on: ubuntu-latest
- timeout-minutes: 5
-
- strategy:
- matrix:
- include:
- - mcVersion: '1.16.5'
- javaVersion: '16'
- - mcVersion: '1.17.1'
- javaVersion: '17'
- - mcVersion: '1.18.2'
- javaVersion: '18'
- - mcVersion: '1.19.4'
- javaVersion: '19'
- - mcVersion: '1.20.4'
- javaVersion: '20'
- - mcVersion: '1.20.6'
- javaVersion: '21'
- #- mcVersion: 'latest'
- # javaVersion: '21'
-
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
-
- - name: Set up JDK
- uses: actions/setup-java@v4.6.0
- with:
- distribution: temurin
- java-version: ${{ matrix.javaVersion }}
- java-package: jdk
- architecture: x64
-
- - name: Setup server
- run: |
- echo 'eula=true' > eula.txt
- mkdir plugins
-
- - name: Download ${{ matrix.mcVersion }} Paper
- run: |
- VERSION="${{ matrix.mcVersion }}"
- if [ "$VERSION" == "latest" ]; then
- VERSION=$(curl https://api.papermc.io/v2/projects/paper/ -s | jq -r '.versions[-1]')
- fi
-
- BUILD_JAR=$(curl -s "https://api.papermc.io/v2/projects/paper/versions/$VERSION/builds" \
- | jq '.builds[-1] | "\(.build) \(.downloads.application.name)"' -r)
- BUILD=$(echo "$BUILD_JAR" | awk '{print $1}')
- JAR_FILE=$(echo "$BUILD_JAR" | awk '{print $2}')
-
- echo "Downloading... https://api.papermc.io/v2/projects/paper/versions/$VERSION/builds/$BUILD/downloads/$JAR_FILE"
- curl -o paper.jar \
- "https://api.papermc.io/v2/projects/paper/versions/$VERSION/builds/$BUILD/downloads/$JAR_FILE"
-
- - name: Download Slimefun
- uses: actions/download-artifact@v4
- with:
- name: ${{ inputs.artifact-name }}
- path: plugins/
-
- - name: Download e2e-tester
- run: |
- curl -o e2e-tester.jar https://preview-builds.walshy.dev/download/e2e-tester/main/latest
- mv e2e-tester.jar plugins/e2e-tester.jar
-
- - name: Run server
- run: |
- java -jar paper.jar --nogui
diff --git a/.github/workflows/javadocs.yml b/.github/workflows/javadocs.yml
deleted file mode 100644
index f628c2a692..0000000000
--- a/.github/workflows/javadocs.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-name: Javadocs
-
-on:
- push:
- paths:
- - 'src/**'
- - 'pom.xml'
-
-permissions:
- contents: read
-
-jobs:
- build:
- name: Maven build
- runs-on: ubuntu-latest
-
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
-
- - name: Set up JDK 21
- uses: actions/setup-java@v4.6.0
- with:
- distribution: 'adopt'
- java-version: '21'
- java-package: jdk
- architecture: x64
-
- - name: Cache Maven packages
- uses: actions/cache@v4
- with:
- path: ~/.m2
- key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
- restore-keys: ${{ runner.os }}-m2
-
- - name: Build Javadocs
- run: mvn javadoc:javadoc
diff --git a/.github/workflows/json-validator.yml b/.github/workflows/json-validator.yml
deleted file mode 100644
index 512a484828..0000000000
--- a/.github/workflows/json-validator.yml
+++ /dev/null
@@ -1,27 +0,0 @@
-name: Validate JSON
-
-on:
- push:
- paths:
- - 'src/main/resources/wiki.json'
- pull_request:
- paths:
- - 'src/main/resources/wiki.json'
-
-permissions:
- contents: read
-
-jobs:
- validate:
-
- name: Validate JSON
- runs-on: ubuntu-latest
-
- steps:
- - name: Checkout Repository
- uses: actions/checkout@v4
- - name: Validate wiki.json
- uses: docker://orrosenblatt/validate-json-action:latest@sha256:02370758b8b199e0477da11ecfdd498c75c561685056b5c31b925a4ab95df7f4
- env:
- INPUT_SCHEMA: '.github/configs/wiki-schema.json'
- INPUT_JSONS: 'src/main/resources/wiki.json'
diff --git a/.github/workflows/label-resolved-issues.yml b/.github/workflows/label-resolved-issues.yml
deleted file mode 100644
index 5a54fb3144..0000000000
--- a/.github/workflows/label-resolved-issues.yml
+++ /dev/null
@@ -1,32 +0,0 @@
-name: Label resolved issues
-
-on:
- issues:
- types: [closed]
-
-permissions:
- contents: read
- issues: write
-
-jobs:
- label:
-
- name: Label Issue
- runs-on: ubuntu-latest
- if: contains(github.event.issue.labels.*.name, '🐞 Bug Report')
-
- steps:
- - name: Query recent commits
- uses: TheBusyBiscuit/recently-closed-issues@1.1.0
- id: resolved
- with:
- token: ${{ secrets.ACCESS_TOKEN }}
- max_commits: 20
-
- - name: Add label
- if: contains(steps.resolved.outputs.issues, github.event.issue.number)
- uses: maxkomarychev/octions/octions/issues/add-labels@master
- with:
- token: ${{ secrets.ACCESS_TOKEN }}
- issue_number: ${{ github.event.issue.number }}
- labels: '✔ Resolved'
diff --git a/.github/workflows/maven-compiler.yml b/.github/workflows/maven-compiler.yml
deleted file mode 100644
index fa79dc66ca..0000000000
--- a/.github/workflows/maven-compiler.yml
+++ /dev/null
@@ -1,46 +0,0 @@
-name: Java CI
-
-on:
- push:
- branches:
- - master
- paths:
- - 'src/**'
- - 'pom.xml'
- pull_request:
- paths:
- - '.github/workflows/**'
- - 'src/**'
- - 'pom.xml'
- - 'CHANGELOG.md'
-
-permissions:
- contents: read
-
-jobs:
- build:
-
- name: Maven build
- runs-on: ubuntu-latest
-
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
-
- - name: Set up JDK 21
- uses: actions/setup-java@v4.6.0
- with:
- distribution: 'adopt'
- java-version: '21'
- java-package: jdk
- architecture: x64
-
- - name: Cache Maven packages
- uses: actions/cache@v4
- with:
- path: ~/.m2
- key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
- restore-keys: ${{ runner.os }}-m2
-
- - name: Build with Maven
- run: mvn package --file pom.xml
diff --git a/.github/workflows/merge-conflicts.yml b/.github/workflows/merge-conflicts.yml
deleted file mode 100644
index 5ac09a0a50..0000000000
--- a/.github/workflows/merge-conflicts.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-name: Merge Conflicts
-
-on:
- push:
- branches:
- - master
-
-permissions:
- contents: read
- pull-requests: write
-
-jobs:
- validate:
- if: github.repository == 'Slimefun/Slimefun4'
- name: Check for merge conflicts
- runs-on: ubuntu-latest
-
- steps:
- - uses: mschilde/auto-label-merge-conflicts@master
- with:
- CONFLICT_LABEL_NAME: '⚡ Merge Conflicts'
- GITHUB_TOKEN: "${{ secrets.ACCESS_TOKEN }}"
diff --git a/.github/workflows/pr-labels.yml b/.github/workflows/pr-labels.yml
deleted file mode 100644
index b857b2faa6..0000000000
--- a/.github/workflows/pr-labels.yml
+++ /dev/null
@@ -1,61 +0,0 @@
-name: Pull Request Labels
-
-on:
- pull_request_target:
- types:
- - opened
-
-permissions:
- contents: read
- pull-requests: write
-
-jobs:
- pr-labeler:
-
- name: Pull Request Labels
- runs-on: ubuntu-latest
- if: github.repository == 'Slimefun/Slimefun4'
-
- steps:
- - uses: baked-libs/pull-request-labels@v1.1
- id: labeller
- name: Apply labels based on branch
- with:
- token: "${{ secrets.GITHUB_TOKEN }}"
- renovate: '🚨 Dependency Update'
- crowdin: '📄 Translations Update'
- feature: '🎈 Feature'
- fix: '✨ Fix'
- chore: '🧹 Chores'
- performance: '💡 Performance Optimization'
- api: '🔧 API'
- compatibility: '🤝 Compatibility'
-
- - uses: thollander/actions-comment-pull-request@v2.5.0
- name: Leave a comment about the applied label
- if: ${{ steps.labeller.outputs.applied != 0 }}
- with:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- message: |
- Your Pull Request was automatically labelled as: "${{ steps.labeller.outputs.applied }}"
- Thank you for contributing to this project! ❤️
-
- - uses: thollander/actions-comment-pull-request@v2.5.0
- name: Leave a comment about our branch naming convention
- if: ${{ steps.labeller.outputs.applied == 0 }}
- with:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- message: |
- **Pro Tip!**
- You can help us label your Pull Requests by using the following branch naming convention next time you create a pull request. ❤️
- Branch naming convention | Label
- ------------------------ | ------
- `feature/**` | 🎈 Feature
- `fix/**` | ✨ Fix
- `chore/**` | 🧹 Chores
- `api/**` | 🔧 API
- `performance/**` | 💡 Performance Optimization
- `compatibility/**` | 🤝 Compatibility
-
-
-
-
-
+ * Core compiles against the 1.8.8 floor where Adventure is absent. This {@code compileOnly} stub lets
+ * the Adventure-typed methods compile; it is NOT shaded, so on modern Paper the real Component is used
+ * at runtime (full feature parity). On legacy servers these methods simply are not callable.
+ */
+public interface Component {
+}
diff --git a/compat-stubs/src/main/java/net/kyori/adventure/text/event/HoverEvent.java b/compat-stubs/src/main/java/net/kyori/adventure/text/event/HoverEvent.java
new file mode 100644
index 0000000000..7d42042ab4
--- /dev/null
+++ b/compat-stubs/src/main/java/net/kyori/adventure/text/event/HoverEvent.java
@@ -0,0 +1,14 @@
+package net.kyori.adventure.text.event;
+
+/**
+ * Compile-only shadow stub of Adventure's {@code net.kyori.adventure.text.event.HoverEvent}.
+ * Not shaded; the real type is used on modern Paper at runtime. See {@code net.kyori.adventure.text.Component}.
+ *
+ * @param
+ * See {@link NamespacedKey} for the rationale. This is a {@code compileOnly} dependency and is not
+ * shaded into the jar. Note: classes that {@code implements Keyed} will fail to class-load on
+ * 1.8–1.11 servers (the interface is absent at runtime); those are handled in the version layer.
+ */
+public interface Keyed {
+
+ NamespacedKey getKey();
+}
diff --git a/compat-stubs/src/main/java/org/bukkit/Nameable.java b/compat-stubs/src/main/java/org/bukkit/Nameable.java
new file mode 100644
index 0000000000..451d59dc74
--- /dev/null
+++ b/compat-stubs/src/main/java/org/bukkit/Nameable.java
@@ -0,0 +1,12 @@
+package org.bukkit;
+
+/**
+ * Compile-only stub for {@code org.bukkit.Nameable} (Minecraft 1.12+). Not shaded; on modern servers
+ * the real interface is used at runtime.
+ */
+public interface Nameable {
+
+ String getCustomName();
+
+ void setCustomName(String name);
+}
diff --git a/compat-stubs/src/main/java/org/bukkit/NamespacedKey.java b/compat-stubs/src/main/java/org/bukkit/NamespacedKey.java
new file mode 100644
index 0000000000..a9884a3be4
--- /dev/null
+++ b/compat-stubs/src/main/java/org/bukkit/NamespacedKey.java
@@ -0,0 +1,67 @@
+package org.bukkit;
+
+import org.bukkit.plugin.Plugin;
+
+/**
+ * Compile-only shadow stub of Bukkit's {@code org.bukkit.NamespacedKey} (introduced in MC 1.12).
+ *
+ * Slimefun's core compiles against the 1.8.8 API floor, where this type does not exist. This stub
+ * exposes only the surface that core uses so the code compiles. It is supplied through a
+ * {@code compileOnly} dependency and is not shaded into the jar: on 1.12+ servers
+ * the server's real {@code NamespacedKey} is used at runtime. On 1.8–1.11 the type is absent at
+ * runtime, so any code path touching it must be guarded by the version layer.
+ *
+ * The method and constructor signatures mirror Bukkit's exactly so bytecode compiled against this
+ * stub binds to the real class at runtime.
+ */
+public final class NamespacedKey {
+
+ private final String namespace;
+ private final String key;
+
+ public NamespacedKey(Plugin owner, String key) {
+ this.namespace = owner == null ? "minecraft" : owner.getName().toLowerCase();
+ this.key = key;
+ }
+
+ public NamespacedKey(String namespace, String key) {
+ this.namespace = namespace;
+ this.key = key;
+ }
+
+ public static NamespacedKey minecraft(String key) {
+ return new NamespacedKey("minecraft", key);
+ }
+
+ public String getNamespace() {
+ return namespace;
+ }
+
+ public String getKey() {
+ return key;
+ }
+
+ @Override
+ public int hashCode() {
+ return (namespace + ":" + key).hashCode();
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+
+ if (!(obj instanceof NamespacedKey)) {
+ return false;
+ }
+
+ NamespacedKey other = (NamespacedKey) obj;
+ return namespace.equals(other.namespace) && key.equals(other.key);
+ }
+
+ @Override
+ public String toString() {
+ return namespace + ":" + key;
+ }
+}
diff --git a/compat-stubs/src/main/java/org/bukkit/Particle.java b/compat-stubs/src/main/java/org/bukkit/Particle.java
new file mode 100644
index 0000000000..c1a07a0abf
--- /dev/null
+++ b/compat-stubs/src/main/java/org/bukkit/Particle.java
@@ -0,0 +1,51 @@
+package org.bukkit;
+
+/**
+ * Compile-only shadow stub of Bukkit's {@code org.bukkit.Particle} (introduced in MC 1.9).
+ *
+ * Core compiles against the 1.8.8 API floor where this type does not exist. This stub exposes only
+ * the constants and the {@link DustOptions} nested type that Slimefun core references directly, so
+ * the code compiles. It is a {@code compileOnly} dependency and is NOT shaded into the jar: on 1.9+
+ * servers the server's real {@code Particle} is used at runtime (resolved by name, so differing enum
+ * ordinals are irrelevant). On 1.8 the type is absent at runtime, so particle code paths must be
+ * version-guarded (particles are a 1.9+ feature with no Bukkit API equivalent on 1.8).
+ *
+ * Constants are the post-1.20.5 names used directly in source; older-named variants are resolved
+ * reflectively at runtime by {@code VersionedParticle}.
+ */
+public enum Particle {
+
+ DUST,
+ SMOKE,
+ HAPPY_VILLAGER,
+ ENCHANTED_HIT,
+ EXPLOSION,
+ WITCH,
+ FIREWORK,
+ ENCHANT,
+ PORTAL,
+ HEART,
+ CRIMSON_SPORE;
+
+ /**
+ * Stub of {@code Particle.DustOptions} (the colored-dust data object). Signatures mirror Bukkit's.
+ */
+ public static class DustOptions {
+
+ private final Color color;
+ private final float size;
+
+ public DustOptions(Color color, float size) {
+ this.color = color;
+ this.size = size;
+ }
+
+ public Color getColor() {
+ return color;
+ }
+
+ public float getSize() {
+ return size;
+ }
+ }
+}
diff --git a/compat-stubs/src/main/java/org/bukkit/block/TileState.java b/compat-stubs/src/main/java/org/bukkit/block/TileState.java
new file mode 100644
index 0000000000..2b4e241ae2
--- /dev/null
+++ b/compat-stubs/src/main/java/org/bukkit/block/TileState.java
@@ -0,0 +1,11 @@
+package org.bukkit.block;
+
+import org.bukkit.persistence.PersistentDataHolder;
+
+/**
+ * Compile-only stub for {@code org.bukkit.block.TileState} (Minecraft 1.14+). Not shaded; on modern
+ * servers the real interface is used at runtime. Mirrors the real hierarchy ({@code extends BlockState,
+ * PersistentDataHolder}) so {@code instanceof}/casts and {@code getPersistentDataContainer()} resolve.
+ */
+public interface TileState extends BlockState, PersistentDataHolder {
+}
diff --git a/compat-stubs/src/main/java/org/bukkit/block/data/Ageable.java b/compat-stubs/src/main/java/org/bukkit/block/data/Ageable.java
new file mode 100644
index 0000000000..e144379adf
--- /dev/null
+++ b/compat-stubs/src/main/java/org/bukkit/block/data/Ageable.java
@@ -0,0 +1,14 @@
+package org.bukkit.block.data;
+
+/**
+ * Compile-only stub for {@code org.bukkit.block.data.Ageable} (Minecraft 1.13+). Signatures match the
+ * real interface so calls resolve at runtime on modern servers.
+ */
+public interface Ageable extends BlockData {
+
+ int getAge();
+
+ void setAge(int age);
+
+ int getMaximumAge();
+}
diff --git a/compat-stubs/src/main/java/org/bukkit/block/data/BlockData.java b/compat-stubs/src/main/java/org/bukkit/block/data/BlockData.java
new file mode 100644
index 0000000000..1a6f8a21ec
--- /dev/null
+++ b/compat-stubs/src/main/java/org/bukkit/block/data/BlockData.java
@@ -0,0 +1,13 @@
+package org.bukkit.block.data;
+
+/**
+ * Compile-only stub for {@code org.bukkit.block.data.BlockData} (added in Minecraft 1.13). Not
+ * shaded; on modern servers the real interface is used at runtime. Declared as a marker — concrete
+ * methods live on the sub-interfaces that Slimefun actually calls.
+ */
+public interface BlockData {
+
+ org.bukkit.Material getMaterial();
+
+ boolean isSupported(org.bukkit.block.Block block);
+}
diff --git a/compat-stubs/src/main/java/org/bukkit/block/data/Directional.java b/compat-stubs/src/main/java/org/bukkit/block/data/Directional.java
new file mode 100644
index 0000000000..8499c40aa6
--- /dev/null
+++ b/compat-stubs/src/main/java/org/bukkit/block/data/Directional.java
@@ -0,0 +1,13 @@
+package org.bukkit.block.data;
+
+import org.bukkit.block.BlockFace;
+
+/**
+ * Compile-only stub for {@code org.bukkit.block.data.Directional} (Minecraft 1.13+).
+ */
+public interface Directional extends BlockData {
+
+ BlockFace getFacing();
+
+ void setFacing(BlockFace facing);
+}
diff --git a/compat-stubs/src/main/java/org/bukkit/block/data/Levelled.java b/compat-stubs/src/main/java/org/bukkit/block/data/Levelled.java
new file mode 100644
index 0000000000..549fbb94a9
--- /dev/null
+++ b/compat-stubs/src/main/java/org/bukkit/block/data/Levelled.java
@@ -0,0 +1,13 @@
+package org.bukkit.block.data;
+
+/**
+ * Compile-only stub for {@code org.bukkit.block.data.Levelled} (Minecraft 1.13+).
+ */
+public interface Levelled extends BlockData {
+
+ int getLevel();
+
+ void setLevel(int level);
+
+ int getMaximumLevel();
+}
diff --git a/compat-stubs/src/main/java/org/bukkit/block/data/Orientable.java b/compat-stubs/src/main/java/org/bukkit/block/data/Orientable.java
new file mode 100644
index 0000000000..c2e7e10b43
--- /dev/null
+++ b/compat-stubs/src/main/java/org/bukkit/block/data/Orientable.java
@@ -0,0 +1,13 @@
+package org.bukkit.block.data;
+
+import org.bukkit.Axis;
+
+/**
+ * Compile-only stub for {@code org.bukkit.block.data.Orientable} (Minecraft 1.13+).
+ */
+public interface Orientable extends BlockData {
+
+ Axis getAxis();
+
+ void setAxis(Axis axis);
+}
diff --git a/compat-stubs/src/main/java/org/bukkit/block/data/Rotatable.java b/compat-stubs/src/main/java/org/bukkit/block/data/Rotatable.java
new file mode 100644
index 0000000000..b0b3baad71
--- /dev/null
+++ b/compat-stubs/src/main/java/org/bukkit/block/data/Rotatable.java
@@ -0,0 +1,13 @@
+package org.bukkit.block.data;
+
+import org.bukkit.block.BlockFace;
+
+/**
+ * Compile-only stub for {@code org.bukkit.block.data.Rotatable} (Minecraft 1.13+).
+ */
+public interface Rotatable extends BlockData {
+
+ BlockFace getRotation();
+
+ void setRotation(BlockFace rotation);
+}
diff --git a/compat-stubs/src/main/java/org/bukkit/block/data/Waterlogged.java b/compat-stubs/src/main/java/org/bukkit/block/data/Waterlogged.java
new file mode 100644
index 0000000000..b8be5fc311
--- /dev/null
+++ b/compat-stubs/src/main/java/org/bukkit/block/data/Waterlogged.java
@@ -0,0 +1,11 @@
+package org.bukkit.block.data;
+
+/**
+ * Compile-only stub for {@code org.bukkit.block.data.Waterlogged} (Minecraft 1.13+).
+ */
+public interface Waterlogged extends BlockData {
+
+ boolean isWaterlogged();
+
+ void setWaterlogged(boolean waterlogged);
+}
diff --git a/compat-stubs/src/main/java/org/bukkit/block/data/type/Dispenser.java b/compat-stubs/src/main/java/org/bukkit/block/data/type/Dispenser.java
new file mode 100644
index 0000000000..74faf57567
--- /dev/null
+++ b/compat-stubs/src/main/java/org/bukkit/block/data/type/Dispenser.java
@@ -0,0 +1,9 @@
+package org.bukkit.block.data.type;
+
+import org.bukkit.block.data.Directional;
+
+/**
+ * Compile-only stub for {@code org.bukkit.block.data.type.Dispenser} (Minecraft 1.13+).
+ */
+public interface Dispenser extends Directional {
+}
diff --git a/compat-stubs/src/main/java/org/bukkit/block/data/type/Farmland.java b/compat-stubs/src/main/java/org/bukkit/block/data/type/Farmland.java
new file mode 100644
index 0000000000..a70cdc093a
--- /dev/null
+++ b/compat-stubs/src/main/java/org/bukkit/block/data/type/Farmland.java
@@ -0,0 +1,15 @@
+package org.bukkit.block.data.type;
+
+import org.bukkit.block.data.BlockData;
+
+/**
+ * Compile-only stub for {@code org.bukkit.block.data.type.Farmland} (Minecraft 1.13+).
+ */
+public interface Farmland extends BlockData {
+
+ int getMoisture();
+
+ void setMoisture(int moisture);
+
+ int getMaximumMoisture();
+}
diff --git a/compat-stubs/src/main/java/org/bukkit/block/data/type/GlassPane.java b/compat-stubs/src/main/java/org/bukkit/block/data/type/GlassPane.java
new file mode 100644
index 0000000000..a7c5911e84
--- /dev/null
+++ b/compat-stubs/src/main/java/org/bukkit/block/data/type/GlassPane.java
@@ -0,0 +1,21 @@
+package org.bukkit.block.data.type;
+
+import java.util.Set;
+
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.Waterlogged;
+
+/**
+ * Compile-only stub for {@code org.bukkit.block.data.type.GlassPane} (Minecraft 1.13+). Mirrors the
+ * subset of {@code MultipleFacing} and {@code Waterlogged} that Slimefun uses.
+ */
+public interface GlassPane extends Waterlogged {
+
+ boolean hasFace(BlockFace face);
+
+ void setFace(BlockFace face, boolean has);
+
+ Set
+ * {@code RecipeChoice} is a real interface, but {@code MaterialChoice} is a real concrete class — it
+ * must be stubbed as a class (not an interface) so that {@code getChoices()} compiles to
+ * {@code invokevirtual} and resolves against the real class at runtime.
+ */
+public interface RecipeChoice extends Predicate {
+
+ PersistentDataType