- 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
104 lines
2.9 KiB
Bash
104 lines
2.9 KiB
Bash
serverSelect() {
|
|
mkdir -p /data/server
|
|
cd /data/server || die "Cannot access /data/server"
|
|
if [[ -f "server.jar" ]] || [[ -f "run.sh" ]] || [[ -f "bedrock_server" ]]; then
|
|
log "Found existing server files, skipping download."
|
|
else
|
|
case "$MC_LOADER" in
|
|
vanilla)
|
|
getVanilla
|
|
;;
|
|
paper)
|
|
getPaper
|
|
;;
|
|
fabric)
|
|
getFabric
|
|
;;
|
|
forge)
|
|
getForge
|
|
;;
|
|
neoforge)
|
|
getNeoForge
|
|
;;
|
|
bedrock)
|
|
getBedrock
|
|
;;
|
|
*)
|
|
die "Server type '${MC_LOADER}' is not recognized. Valid: vanilla, paper, fabric, forge, neoforge, bedrock"
|
|
;;
|
|
esac
|
|
fi
|
|
}
|
|
|
|
buildCommand() {
|
|
JAVA_ARGS="-Xms${XMS} -Xmx${XMX}"
|
|
if [[ -n "${ADD_ARGS}" ]]; then
|
|
RUN_STRING="${ADD_ARGS} ${JAVA_ARGS} -jar ${JAR} nogui"
|
|
else
|
|
RUN_STRING="${JAVA_ARGS} -jar ${JAR} nogui"
|
|
fi
|
|
}
|
|
|
|
detectForgeVersion() {
|
|
# Detect the forge/neoforge version from the installed jar names
|
|
VER_LOADER="${VER_LOADER:-}"
|
|
if [[ -n "$VER_LOADER" ]]; then
|
|
return
|
|
fi
|
|
|
|
if [[ "$MC_LOADER" == "neoforge" ]] && [[ -L "/data/server/server.jar" ]]; then
|
|
VER_LOADER=$(readlink "/data/server/server.jar" | sed 's/^neoforge-//;s/\.jar$//')
|
|
elif [[ "$MC_LOADER" == "forge" ]]; then
|
|
local forge_jar
|
|
forge_jar=$(ls /data/server/forge-"${MC_VERSION}"-*.jar 2>/dev/null | head -1)
|
|
if [[ -n "$forge_jar" ]]; then
|
|
VER_LOADER="${forge_jar#/data/server/forge-${MC_VERSION}-}"
|
|
VER_LOADER="${VER_LOADER%.jar}"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
serverStart() {
|
|
detectForgeVersion
|
|
newForge
|
|
|
|
cd /data/server || die "Cannot access /data/server"
|
|
if [[ ! -f "server.properties" ]]; then
|
|
touch "server.properties"
|
|
fi
|
|
|
|
if [[ ! -f "$JAR" ]] && [[ ! -f "run.sh" ]] && [[ ! -f "bedrock_server" ]]; then
|
|
die "Server binary not found in /data/server"
|
|
fi
|
|
|
|
log "--- Server Starting ---"
|
|
log "Minecraft Version: ${MC_VERSION}"
|
|
log "Loader Type: ${SERVER_TYPE:-$MC_LOADER}"
|
|
log "Loader Version: ${MC_LOADER_VERSION:-auto}"
|
|
if [[ "$MC_LOADER" != "bedrock" ]]; then
|
|
log "Java Version: ${JAVA_VERSION}"
|
|
log "Jar: ${JAR}"
|
|
log "Memory: Xms=${XMS} Xmx=${XMX}"
|
|
if [[ -n "${ADD_ARGS}" ]]; then
|
|
log "Additional Args: ${ADD_ARGS}"
|
|
fi
|
|
fi
|
|
log "Running as UID:${PUID} GID:${PGID}"
|
|
|
|
serverInfoWrite
|
|
|
|
if [[ "$MC_LOADER" == "bedrock" ]]; then
|
|
log "Starting Bedrock server..."
|
|
exec env LD_LIBRARY_PATH=. ./bedrock_server
|
|
elif [[ "$MC_LOADER" == "neoforge" ]]; then
|
|
log "Starting NeoForge server..."
|
|
exec java @user_jvm_args.txt @libraries/net/neoforged/neoforge/"${VER_LOADER}"/unix_args.txt "$@"
|
|
elif [[ "$MC_LOADER" == "forge" ]] && [[ "${NEW_FORGE:-false}" == "true" ]]; then
|
|
log "Starting Forge server (new-style)..."
|
|
exec java @user_jvm_args.txt @libraries/net/minecraftforge/forge/"${MC_VERSION}"-"${VER_LOADER}"/unix_args.txt "$@"
|
|
else
|
|
log "Starting ${SERVER_TYPE:-$MC_LOADER} server..."
|
|
exec java $RUN_STRING
|
|
fi
|
|
}
|