mirror of
https://github.com/m1ngsama/automa.git
synced 2025-12-24 10:51:20 +00:00
128 lines
3.3 KiB
Bash
Executable file
128 lines
3.3 KiB
Bash
Executable file
#!/bin/bash
|
||
|
||
# 加载日志模块
|
||
source "$(dirname "$0")/logger.sh"
|
||
|
||
MODS_FILE="./requirements.txt"
|
||
MODS_DIR="./data/mods"
|
||
|
||
# 初始化日志
|
||
main init
|
||
log_start "Minecraft 1.21.1 Fabric Mods 下载"
|
||
START_TIME=$(date +%s)
|
||
|
||
mkdir -p $MODS_DIR
|
||
|
||
log_info "开始下载 Minecraft 1.21.1 Fabric mods..."
|
||
log_info "Mods 文件: $MODS_FILE"
|
||
log_info "目标目录: $MODS_DIR"
|
||
|
||
# 测试网络连接
|
||
log_info "测试 Modrinth API 连接..."
|
||
if ! curl -s "https://api.modrinth.com/v2/project/fabric-api" >/dev/null; then
|
||
log_error "无法连接到 Modrinth API,请检查网络"
|
||
exit 1
|
||
fi
|
||
log_success "API 连接正常"
|
||
|
||
download_mod() {
|
||
local project_slug="$1"
|
||
local mod_name="$2"
|
||
|
||
log_info "正在处理: $mod_name ($project_slug)"
|
||
|
||
# 获取项目信息
|
||
project_info=$(curl -s "https://api.modrinth.com/v2/project/$project_slug")
|
||
if [[ $? -ne 0 || -z "$project_info" ]]; then
|
||
log_error "无法获取项目信息: $project_slug"
|
||
return 1
|
||
fi
|
||
|
||
# 获取版本信息
|
||
versions_url="https://api.modrinth.com/v2/project/$project_slug/version?game_versions=%5B%221.21.1%22%5D&loaders=%5B%22fabric%22%5D"
|
||
|
||
log_info "获取版本信息..."
|
||
versions_response=$(curl -s "$versions_url")
|
||
|
||
if [[ $? -ne 0 || -z "$versions_response" ]]; then
|
||
log_error "无法获取版本信息"
|
||
return 1
|
||
fi
|
||
|
||
# 检查是否返回空数组
|
||
if [[ "$versions_response" == "[]" ]]; then
|
||
log_warning "没有找到 1.21.1 Fabric 版本的 $mod_name"
|
||
return 1
|
||
fi
|
||
|
||
# 提取最新版本的信息
|
||
filename=$(echo "$versions_response" | grep -o '"filename":"[^"]*"' | head -1 | cut -d'"' -f4)
|
||
download_url=$(echo "$versions_response" | grep -o '"url":"[^"]*"' | head -1 | cut -d'"' -f4)
|
||
|
||
if [[ -z "$filename" || -z "$download_url" ]]; then
|
||
log_error "无法解析下载信息"
|
||
return 1
|
||
fi
|
||
|
||
log_info "文件名: $filename"
|
||
log_info "下载链接: $download_url"
|
||
|
||
# 下载文件
|
||
log_info "下载中..."
|
||
if curl -L -o "$MODS_DIR/$filename" "$download_url"; then
|
||
file_size=$(stat -c%s "$MODS_DIR/$filename" 2>/dev/null || stat -f%z "$MODS_DIR/$filename" 2>/dev/null)
|
||
if [[ $file_size -gt 1000 ]]; then
|
||
log_success "成功下载: $filename ($(($file_size / 1024)) KB)"
|
||
return 0
|
||
else
|
||
log_error "文件大小异常: $filename (只有 $file_size 字节)"
|
||
rm -f "$MODS_DIR/$filename"
|
||
return 1
|
||
fi
|
||
else
|
||
log_error "下载失败"
|
||
return 1
|
||
fi
|
||
}
|
||
|
||
# 读取 mods 文件
|
||
success_count=0
|
||
fail_count=0
|
||
|
||
while IFS='|' read -r mod_name project_slug version; do
|
||
# 去除空白字符
|
||
mod_name=$(echo "$mod_name" | xargs)
|
||
project_slug=$(echo "$project_slug" | xargs)
|
||
version=$(echo "$version" | xargs)
|
||
|
||
# 跳过空行和注释
|
||
if [[ -z "$mod_name" || "$mod_name" == \#* ]]; then
|
||
continue
|
||
fi
|
||
|
||
log_separator
|
||
if download_mod "$project_slug" "$mod_name"; then
|
||
((success_count++))
|
||
else
|
||
((fail_count++))
|
||
fi
|
||
|
||
sleep 1
|
||
|
||
done <"$MODS_FILE"
|
||
|
||
END_TIME=$(date +%s)
|
||
DURATION=$((END_TIME - START_TIME))
|
||
|
||
log_separator
|
||
log_info "Minecraft 1.21.1 Fabric mods 下载完成!"
|
||
log_info "位置: $MODS_DIR"
|
||
log_info "统计: 成功 $success_count, 失败 $fail_count"
|
||
|
||
# 记录最终文件列表
|
||
log_info "最终文件列表:"
|
||
ls -la "$MODS_DIR" >>"$LOG_FILE" 2>/dev/null
|
||
log_command "ls -la \"$MODS_DIR\""
|
||
|
||
log_end 0 "$DURATION"
|
||
show_log_location
|