custom-server-mods/scripts/lib.sh

63 lines
1.7 KiB
Bash
Executable file

#!/usr/bin/env bash
# Shared helpers for building custom mods from manifests.
# Expected layout:
# mods/<name>/manifest.sh -> source the manifest (defines MOD_NAME, SOURCE_URL, ...)
# scripts/lib.sh -> this file
# out/<name>/ -> 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
}