fix: migrate PaperMC to v3 API, fix NeoForge beta fallback, add test suite

- Migrate Paper loader from sunset v2 API to v3 (fill.papermc.io)
- Fix NeoForge: fall back to beta versions when no stable exists (set -e + grep)
- Fix setEula/setperms ordering (was writing eula.txt before /data was writable)
- Fix setEula/serverInfoWrite to use absolute paths (/data/server/)
- Add VOLUME directive removal (was shadowing bind mounts)
- Add comprehensive API test suite (110 tests across 6 suites)
- Move test.sh to tests/integration.sh, switch to named volumes
- Add Docker build cache to CI workflows
- Add .editorconfig, expand .gitignore, improve README docs
This commit is contained in:
2026-08-21 12:49:27 -04:00
parent a6f610de28
commit 5688b30892
26 changed files with 2530 additions and 263 deletions
+35 -32
View File
@@ -1,42 +1,45 @@
getForge() {
SERVER_TYPE="Forge Server"
if [[ -n "$MC_VERSION" ]]; then
VER_MINECRAFT=$MC_VERSION
if [[ -n "${FORGE_VERSION}" ]]; then
VER_LOADER="${FORGE_VERSION}"
DL_URL=https://maven.minecraftforge.net/net/minecraftforge/forge/${VER_MINECRAFT}-${VER_LOADER}/forge-${VER_MINECRAFT}-${VER_LOADER}-installer.jar
else
LATEST_BUILD=$(curl -s https://files.minecraftforge.net/net/minecraftforge/forge/promotions_slim.json | jq -r ".promos[\"${VER_MINECRAFT}-latest\"]")
VER_LOADER=$LATEST_BUILD
DL_URL=https://maven.minecraftforge.net/net/minecraftforge/forge/${VER_MINECRAFT}-${VER_LOADER}/forge-${VER_MINECRAFT}-${VER_LOADER}-installer.jar
fi
else
echo "Minecraft version not set"
exit 1
if [[ -z "${MC_VERSION}" ]]; then
die "MC_VERSION is required for Forge loader"
fi
if [[ -n "$DL_URL" ]]; then
echo "$DL_URL"
rm -rf server.jar
curl -o forge-install.jar "${DL_URL}"
echo "$JAVA -jar forge-install.jar --installServer"
$JAVA -jar forge-install.jar --installServer
local DL_URL
if [[ -n "${FORGE_VERSION}" ]]; then
VER_LOADER="${FORGE_VERSION}"
DL_URL="https://maven.minecraftforge.net/net/minecraftforge/forge/${MC_VERSION}-${VER_LOADER}/forge-${MC_VERSION}-${VER_LOADER}-installer.jar"
else
log "Fetching latest Forge version for MC ${MC_VERSION}..."
local LATEST_BUILD
LATEST_BUILD=$(curl -sf --connect-timeout 10 --max-time 30 \
"https://files.minecraftforge.net/net/minecraftforge/forge/promotions_slim.json" |
jq -r ".promos[\"${MC_VERSION}-latest\"]")
if [[ "$(printf '%s\n' "1.17.1" "$MC_VERSION" | sort -V | head -n1)" = "1.17.1" ]]; then
NEW_FORGE=true
rm -f forge-install.jar
rm -f forge-install.jar.log
else
NEW_FORGE=false
rm -f forge-install.jar
rm -f forge-install.jar.log
ln -s forge-"${VER_MINECRAFT}"-"${VER_LOADER}".jar server.jar
if [[ -z "$LATEST_BUILD" || "$LATEST_BUILD" == "null" ]]; then
die "No Forge version found for MC ${MC_VERSION}"
fi
touch server.properties
else
echo "No Valid Download URL"
crash
VER_LOADER="$LATEST_BUILD"
DL_URL="https://maven.minecraftforge.net/net/minecraftforge/forge/${MC_VERSION}-${VER_LOADER}/forge-${MC_VERSION}-${VER_LOADER}-installer.jar"
fi
log "Downloading Forge ${MC_VERSION}-${VER_LOADER} installer..."
rm -f server.jar
curl -fL -o forge-install.jar "${DL_URL}"
log "Running Forge installer..."
$JAVA -jar forge-install.jar --installServer
newForge
rm -f forge-install.jar forge-install.jar.log
if [[ "${NEW_FORGE}" == "true" ]]; then
log "Forge ${MC_VERSION} installed (new-style launcher)."
else
ln -sf "forge-${MC_VERSION}-${VER_LOADER}.jar" server.jar
log "Forge ${MC_VERSION}-${VER_LOADER} installed."
fi
touch server.properties
}