javaVersionDetect() { if [[ -n "${JAVA_VERSION:-}" ]]; then return fi log "Auto-detecting Java version from Mojang manifest..." local MANIFEST MANIFEST=$(curl -sf --connect-timeout 10 --max-time 30 \ "https://launchermeta.mojang.com/mc/game/version_manifest.json") || true if [[ -z "$MANIFEST" ]]; then warn "Could not fetch Mojang manifest, defaulting to temurin@21" JAVA_VERSION="temurin@21" return fi local VERSION_URL VERSION_URL=$(echo "$MANIFEST" | jq -r ".versions[] | select(.id == \"${MC_VERSION}\") | .url") if [[ -z "$VERSION_URL" || "$VERSION_URL" == "null" ]]; then warn "Version ${MC_VERSION} not found in manifest, defaulting to temurin@21" JAVA_VERSION="temurin@21" return fi local VERSION_DATA VERSION_DATA=$(curl -sf --connect-timeout 10 --max-time 30 "$VERSION_URL") || true if [[ -z "$VERSION_DATA" ]]; then warn "Could not fetch version data for ${MC_VERSION}, defaulting to temurin@21" JAVA_VERSION="temurin@21" return fi local JAVA_MAJOR JAVA_MAJOR=$(echo "$VERSION_DATA" | jq -r ".javaVersion.majorVersion // empty") if [[ -z "$JAVA_MAJOR" ]]; then JAVA_VERSION="temurin@8" else JAVA_VERSION="temurin@${JAVA_MAJOR}" fi log "Detected Java version: ${JAVA_VERSION}" } javaCheck() { javaVersionDetect JAVA_HOME="/data/java/${JAVA_VERSION}" if [[ -f "$HOME/.jabba/jabba.sh" ]]; then # shellcheck disable=SC1090 source "$HOME/.jabba/jabba.sh" else die "Jabba not found at ~/.jabba/jabba.sh — installation may have failed" fi if [[ ! -f "/data/java/${JAVA_VERSION}/bin/java" ]]; then log "Installing Java ${JAVA_VERSION}..." rm -rf "/data/java/${JAVA_VERSION}" jabba install "${JAVA_VERSION}" -o "/data/java/${JAVA_VERSION}" log "Java ${JAVA_VERSION} installed." else log "Java ${JAVA_VERSION} already cached." fi PATH="${JAVA_HOME}/bin:$PATH" JAVA="java" }