Created
March 25, 2025 10:18
-
-
Save krisstibex/b7dcc11a389ea4882e76952d3153ab55 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/bash | |
| # 切换到脚本所在目录(仅本地运行时) | |
| if [[ -z "$BASH_SOURCE" || "$BASH_SOURCE" == "$0" ]]; then | |
| cd "$(dirname "$0")" | |
| fi | |
| # Minecraft 服务器下载 URL | |
| MINECRAFT_VERSIONS_API="https://launchermeta.mojang.com/mc/game/version_manifest.json" | |
| # 解析命令行参数 | |
| DOWNLOAD_DIR="" | |
| while getopts "o:" opt; do | |
| case ${opt} in | |
| o ) DOWNLOAD_DIR="$OPTARG" ;; | |
| * ) echo "用法: $0 [-o 下载目录]"; exit 1 ;; | |
| esac | |
| done | |
| # 远程运行检测(即使用 bash <(curl -fsSL <URL>) 方式) | |
| if [[ ! -t 0 && -z "$DOWNLOAD_DIR" ]]; then | |
| echo "远程运行时必须使用 -o 参数指定下载目录!" | |
| exit 1 | |
| fi | |
| # 如果未指定目录,则使用当前目录 | |
| if [[ -z "$DOWNLOAD_DIR" ]]; then | |
| DOWNLOAD_DIR="$(pwd)" | |
| fi | |
| mkdir -p "$DOWNLOAD_DIR" | |
| # 读取版本信息 | |
| echo "正在获取 Minecraft 服务器版本列表..." | |
| VERSIONS_JSON=$(curl -s "$MINECRAFT_VERSIONS_API") | |
| # 解析版本列表 | |
| RELEASE_VERSIONS=($(echo "$VERSIONS_JSON" | jq -r '.versions[] | select(.type=="release") | .id')) | |
| SNAPSHOT_VERSIONS=($(echo "$VERSIONS_JSON" | jq -r '.versions[] | select(.type=="snapshot") | .id')) | |
| OLD_BETA_VERSIONS=($(echo "$VERSIONS_JSON" | jq -r '.versions[] | select(.type=="old_beta") | .id')) | |
| OLD_ALPHA_VERSIONS=($(echo "$VERSIONS_JSON" | jq -r '.versions[] | select(.type=="old_alpha") | .id')) | |
| ALL_VERSIONS=("${RELEASE_VERSIONS[@]}" "${SNAPSHOT_VERSIONS[@]}" "${OLD_BETA_VERSIONS[@]}" "${OLD_ALPHA_VERSIONS[@]}") | |
| BETA_VERSIONS=("${SNAPSHOT_VERSIONS[@]}" "${OLD_BETA_VERSIONS[@]}") | |
| ALPHA_VERSIONS=("${OLD_ALPHA_VERSIONS[@]}") | |
| # 选择版本类型菜单 | |
| while true; do | |
| echo -e "\n请选择 Minecraft 服务器版本类型:" | |
| echo "1) 正式版(Release)" | |
| echo "2) 测试版(Beta & Snapshot)" | |
| echo "3) 远古版(Alpha)" | |
| echo "4) 所有版本" | |
| echo "0) 退出脚本" | |
| read -p "输入选项(0-4): " VERSION_TYPE | |
| case $VERSION_TYPE in | |
| 1) SELECTED_VERSIONS=("${RELEASE_VERSIONS[@]}");; | |
| 2) SELECTED_VERSIONS=("${BETA_VERSIONS[@]}");; | |
| 3) SELECTED_VERSIONS=("${ALPHA_VERSIONS[@]}");; | |
| 4) SELECTED_VERSIONS=("${ALL_VERSIONS[@]}");; | |
| 0) echo "已退出脚本。"; exit 0;; | |
| *) echo "无效选项,请重新输入!"; continue;; | |
| esac | |
| # 版本选择菜单 | |
| while true; do | |
| echo -e "\n可用的 Minecraft 服务器版本:" | |
| for i in "${!SELECTED_VERSIONS[@]}"; do | |
| echo "$(($i+1)). ${SELECTED_VERSIONS[$i]}" | |
| done | |
| echo -e "\n输入序号选择版本,或直接输入版本号" | |
| echo "直接回车下载最新版本(${SELECTED_VERSIONS[0]})" | |
| echo "输入 0 返回上级菜单" | |
| read -p "请输入选择的版本: " USER_INPUT | |
| # 处理用户输入 | |
| if [[ -z "$USER_INPUT" ]]; then | |
| SELECTED_VERSION=${SELECTED_VERSIONS[0]} | |
| elif [[ "$USER_INPUT" == "0" ]]; then | |
| break | |
| elif [[ "$USER_INPUT" =~ ^[0-9]+$ ]]; then | |
| INDEX=$(($USER_INPUT - 1)) | |
| if [[ $INDEX -ge 0 && $INDEX -lt ${#SELECTED_VERSIONS[@]} ]]; then | |
| SELECTED_VERSION=${SELECTED_VERSIONS[$INDEX]} | |
| else | |
| echo "无效的序号!" | |
| continue | |
| fi | |
| else | |
| SELECTED_VERSION=$USER_INPUT | |
| fi | |
| # 获取选定版本的详细信息 | |
| VERSION_INFO=$(echo "$VERSIONS_JSON" | jq -r --arg ver "$SELECTED_VERSION" '.versions[] | select(.id==$ver)') | |
| if [[ -z "$VERSION_INFO" ]]; then | |
| echo "未找到 $SELECTED_VERSION 版本的信息,请重新选择!" | |
| continue | |
| fi | |
| # 获取服务器 JAR 下载链接 | |
| SERVER_DOWNLOAD_URL=$(echo "$VERSION_INFO" | jq -r '.url' | xargs curl -s | jq -r '.downloads.server.url') | |
| if [[ -z "$SERVER_DOWNLOAD_URL" ]]; then | |
| echo "未找到 $SELECTED_VERSION 服务器的下载链接,请重新选择!" | |
| continue | |
| fi | |
| # 显示版本详情 | |
| echo -e "\nMinecraft 服务器版本详情:" | |
| echo "版本号: $SELECTED_VERSION" | |
| echo "下载路径: $DOWNLOAD_DIR/minecraft_server_$SELECTED_VERSION.jar" | |
| echo "下载地址: $SERVER_DOWNLOAD_URL" | |
| echo -e "\n是否确认下载?" | |
| read -p "输入 Y 进行下载,其他任意键返回版本选择菜单: " CONFIRM | |
| if [[ "$CONFIRM" =~ ^[Yy]$ ]]; then | |
| echo "正在下载 Minecraft 服务器 $SELECTED_VERSION..." | |
| curl -o "$DOWNLOAD_DIR/minecraft_server_$SELECTED_VERSION.jar" "$SERVER_DOWNLOAD_URL" | |
| echo "下载完成:$DOWNLOAD_DIR/minecraft_server_$SELECTED_VERSION.jar" | |
| exit 0 | |
| fi | |
| done | |
| done |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment