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 }