#!/usr/bin/env bash # Shared helpers for building custom mods from manifests. # Expected layout: # mods//manifest.sh -> source the manifest (defines MOD_NAME, SOURCE_URL, ...) # scripts/lib.sh -> this file # out// -> built jars set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" MODS_DIR="$REPO_ROOT/mods" OUT_DIR="$REPO_ROOT/out" WORK_DIR="$REPO_ROOT/build" require_manifest() { local name="$1" local manifest="$MODS_DIR/$name/manifest.sh" if [[ ! -f "$manifest" ]]; then echo "ERROR: no manifest at $manifest" >&2 return 1 fi } load_manifest() { local name="$1" require_manifest "$name" # shellcheck disable=SC1090 source "$MODS_DIR/$name/manifest.sh" : "${MOD_NAME:?manifest must set MOD_NAME}" : "${SOURCE_URL:?manifest must set SOURCE_URL}" : "${BUILD_CMD:?manifest must set BUILD_CMD}" : "${JAR_GLOB:?manifest must set JAR_GLOB}" : "${LICENSE:?manifest must set LICENSE}" } list_manifests() { for d in "$MODS_DIR"/*/; do [[ -d "$d" ]] || continue basename "$d" done } check_jdk() { local ver ver="$(java -version 2>&1 | awk -F'"' '/version/ {print $2; exit}')" case "$ver" in 21*) return 0 ;; esac # Not on JDK 21: try to switch to a local JDK 21 install so the build uses # the right toolchain for NeoForge 1.21.1 mods. for jdk in /usr/lib/jvm/java-21-openjdk /usr/lib/jvm/java-21*; do if [[ -x "$jdk/bin/java" ]]; then export JAVA_HOME="$jdk" export PATH="$jdk/bin:$PATH" echo "Using JDK 21 at $jdk" return 0 fi done echo "WARNING: JDK $ver detected and no JDK 21 found; NeoForge 1.21.1 mods are built with JDK 21." >&2 }