XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEServerManager

【Java】我的世界XFE服务器管理器

公开
关注 0 Fork 0 Star 0
UTF-8
#!/usr/bin/env bash
set -euo pipefail

ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
VERSION="${1:-${MOD_VERSION:-0.1.0-SNAPSHOT}}"
DIST_DIR="$ROOT_DIR/dist"

if [[ ! "$VERSION" =~ ^[0-9A-Za-z][0-9A-Za-z.+_-]*$ ]]; then
  echo "Invalid version: $VERSION" >&2
  exit 2
fi

require_java() {
  local major="$1"
  local variable="JAVA_HOME_${major}"
  local java_installation="${!variable:-}"
  if [[ -z "$java_installation" || ! -x "$java_installation/bin/java" ]]; then
    echo "$variable must point to a JDK $major installation" >&2
    exit 2
  fi
  local actual
  actual="$("$java_installation/bin/java" -version 2>&1 | sed -n '1s/.*version "\([0-9]*\).*/\1/p')"
  if [[ "$actual" != "$major" ]]; then
    echo "$variable points to Java $actual, expected $major" >&2
    exit 2
  fi
  printf '%s' "$java_installation"
}

JAVA17="$(require_java 17)"
JAVA21="$(require_java 21)"

mkdir -p "$DIST_DIR"
rm -f "$DIST_DIR"/xfeservermanager-forge-*.jar "$DIST_DIR/SHA256SUMS"

echo "Building and testing the embedded web UI"
npm --prefix "$ROOT_DIR/web-ui" ci
npm --prefix "$ROOT_DIR/web-ui" test
npm --prefix "$ROOT_DIR/web-ui" run build

echo "Testing common Java modules"
JAVA_HOME="$JAVA17" bash "$ROOT_DIR/gradlew" -p "$ROOT_DIR" --no-daemon check

build_platform() {
  local minecraft="$1"
  local java_home="$2"
  local project="$ROOT_DIR/platform/forge-$minecraft"
  echo "Building Forge $minecraft with $("$java_home/bin/java" -version 2>&1 | head -n 1)"
  JAVA_HOME="$java_home" bash "$project/gradlew" -p "$project" --no-daemon clean check assemble \
    "-Pmod_version=$VERSION"

  local jar
  jar="$(find "$project/build/libs" -maxdepth 1 -type f \
    -name "xfeservermanager-forge-${minecraft}-*.jar" \
    ! -name '*-slim.jar' ! -name '*-sources.jar' ! -name '*-javadoc.jar' \
    -print -quit)"
  if [[ -z "$jar" ]]; then
    echo "No distributable JAR found for Minecraft $minecraft" >&2
    exit 1
  fi
  cp "$jar" "$DIST_DIR/xfeservermanager-forge-${minecraft}-${VERSION}.jar"
}

build_platform "1.20.1" "$JAVA17"
build_platform "1.20.6" "$JAVA21"
build_platform "1.21.1" "$JAVA21"
build_platform "1.21.11" "$JAVA21"

(
  cd "$DIST_DIR"
  sha256sum xfeservermanager-forge-*.jar > SHA256SUMS
)

echo "Artifacts written to $DIST_DIR"