63 lines
1.7 KiB
Bash
Executable file
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
|
|
}
|