#!/bin/sh set -eu ############ # 常量定义 # ############ REPO_URL="${REPO_URL:-https://gitea.service.jazzwhom.top/Passthem/pt-minecraft-modpack}" REPO_REF="${REPO_REF:-main}" PT_SERVER="${PT_SERVER:-server-02-skygrid}" INSTALL_DIR="${INSTALL_DIR:-$(pwd)/pt-minecraft-modpack}" ARCHIVE_PATH="${ARCHIVE_PATH:-$(pwd)/pt-minecraft-modpack.tar.gz}" TMP_DIR="${TMP_DIR:-$(pwd)/pt-minecraft-modpack.__tmp}" PT_JAVA_VERSION="${PT_JAVA_VERSION:-17}" SERVER_MEMORY="${SERVER_MEMORY:-2048}" PACKWIZ_INSTALLER_URL="${PACKWIZ_INSTALLER_URL:-https://github.com/packwiz/packwiz-installer/releases/latest/download/packwiz-installer.jar}" openjdk8="/usr/bin/jdk/jdk1.8.0_361/bin/java" openjdk11="/usr/bin/jdk/jdk-11.0.18/bin/java" openjdk17="/usr/bin/jdk/jdk-17.0.6/bin/java" openjdk19="/usr/bin/jdk/jdk-19.0.2/bin/java" openjdk21="/usr/bin/jdk/jdk-21.0.2/bin/java" openjdk25="/usr/bin/jdk/jdk-25.0.2/bin/java" maxmem=$((SERVER_MEMORY - 1000)) case "$PT_JAVA_VERSION" in 8) JAVA_BIN="$openjdk8" ;; 11) JAVA_BIN="$openjdk11" ;; 17) JAVA_BIN="$openjdk17" ;; 19) JAVA_BIN="$openjdk19" ;; 21) JAVA_BIN="$openjdk21" ;; 25) JAVA_BIN="$openjdk25" ;; *) JAVA_BIN="java" ;; esac PT_JAVA_ARGS="${PT_JAVA_ARGS:--Xms1024M -Xmx${maxmem}M}" ############ # 辅助函数 # ############ log() { printf '[panel-entry] %s\n' "$*" } fail() { printf '[panel-entry] ERROR: %s\n' "$*" >&2 exit 1 } need_cmd() { command -v "$1" >/dev/null 2>&1 || fail "缺少命令: $1" } need_cmd sh need_cmd tar need_cmd find rm -rf "$TMP_DIR" mkdir -p "$TMP_DIR" log "下载仓库归档: $REPO_URL ($REPO_REF)" if command -v curl >/dev/null 2>&1; then curl -fL --retry 3 --retry-delay 2 -o "$ARCHIVE_PATH" "$REPO_URL/archive/$REPO_REF.tar.gz" elif command -v wget >/dev/null 2>&1; then wget -O "$ARCHIVE_PATH" "$REPO_URL/archive/$REPO_REF.tar.gz" else fail "缺少 curl 或 wget" fi log "解压仓库归档" tar -xzf "$ARCHIVE_PATH" -C "$TMP_DIR" EXTRACTED_DIR="$(find "$TMP_DIR" -mindepth 1 -maxdepth 1 -type d | head -n 1)" [ -n "$EXTRACTED_DIR" ] || fail "解压失败" if [ ! -d "$INSTALL_DIR" ]; then mv "$EXTRACTED_DIR" "$INSTALL_DIR" else log "保留现有安装目录,仅覆盖仓库文件" cp -r "$EXTRACTED_DIR"/. "$INSTALL_DIR"/ rm -rf "$EXTRACTED_DIR" fi rm -rf "$TMP_DIR" "$ARCHIVE_PATH" cd "$INSTALL_DIR" mkdir -p .pt-panel-runtime/downloads log "下载 packwiz-installer" if command -v curl >/dev/null 2>&1; then curl -fL --retry 3 --retry-delay 2 -o .pt-panel-runtime/downloads/packwiz-installer.jar "$PACKWIZ_INSTALLER_URL" elif command -v wget >/dev/null 2>&1; then wget -O .pt-panel-runtime/downloads/packwiz-installer.jar "$PACKWIZ_INSTALLER_URL" else fail "缺少 curl 或 wget" fi log "调用仓库内 start.sh" PT_REPO_URL="$REPO_URL" \ PT_REPO_REF="$REPO_REF" \ PT_SERVER="$PT_SERVER" \ PT_JAVA_ARGS="$PT_JAVA_ARGS" \ PT_JAVA_VERSION="$PT_JAVA_VERSION" \ SERVER_MEMORY="$SERVER_MEMORY" \ JAVA_BIN="$JAVA_BIN" \ PT_PACKWIZ_BOOTSTRAP_NO_UPDATE="${PT_PACKWIZ_BOOTSTRAP_NO_UPDATE:-1}" \ PT_PACKWIZ_BOOTSTRAP_MAIN_JAR="$(pwd)/.pt-panel-runtime/downloads/packwiz-installer.jar" \ bash ./start.sh