mirror of
https://github.com/m1ngsama/automa.git
synced 2025-12-24 10:51:20 +00:00
init index and upload the scripts of minecraft
This commit is contained in:
commit
3bafd84230
10 changed files with 632 additions and 0 deletions
11
minecraft/scripts/README.md
Normal file
11
minecraft/scripts/README.md
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
```bash
|
||||||
|
# Structure
|
||||||
|
minecraft/
|
||||||
|
├── automatic/
|
||||||
|
│ ├── deploy.sh # 主部署脚本
|
||||||
|
│ ├── download-mods.sh # 下载 mods 脚本
|
||||||
|
│ ├── logger.sh # 日志模块
|
||||||
|
│ ├── requirements.txt # mods 列表
|
||||||
|
│ └── server.properties # 服务器配置
|
||||||
|
└── mods/ # 下载的 mods(由脚本管理)
|
||||||
|
```
|
||||||
254
minecraft/scripts/automatic/deploy.sh
Executable file
254
minecraft/scripts/automatic/deploy.sh
Executable file
|
|
@ -0,0 +1,254 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# 加载日志模块
|
||||||
|
source "$(dirname "$0")/logger.sh"
|
||||||
|
|
||||||
|
# 配置变量
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||||
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||||||
|
MODS_SOURCE_DIR="$PROJECT_ROOT/mods"
|
||||||
|
SERVER_TARGET_DIR="$HOME/repo/mc-fabric"
|
||||||
|
BACKUP_DIR="$SERVER_TARGET_DIR/backups"
|
||||||
|
|
||||||
|
# 初始化日志
|
||||||
|
main init
|
||||||
|
log_start "Minecraft 服务器自动化部署"
|
||||||
|
START_TIME=$(date +%s)
|
||||||
|
|
||||||
|
log_info "=== Minecraft 服务器自动化部署 ==="
|
||||||
|
log_info "脚本目录: $SCRIPT_DIR"
|
||||||
|
log_info "项目根目录: $PROJECT_ROOT"
|
||||||
|
log_info "Mods 源目录: $MODS_SOURCE_DIR"
|
||||||
|
log_info "服务器目标目录: $SERVER_TARGET_DIR"
|
||||||
|
|
||||||
|
# 检查目录是否存在
|
||||||
|
check_directories() {
|
||||||
|
log_info "检查目录结构..."
|
||||||
|
|
||||||
|
if [[ ! -d "$MODS_SOURCE_DIR" ]]; then
|
||||||
|
log_warning "Mods 源目录不存在,创建: $MODS_SOURCE_DIR"
|
||||||
|
mkdir -p "$MODS_SOURCE_DIR"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -d "$SERVER_TARGET_DIR" ]]; then
|
||||||
|
log_error "服务器目标目录不存在: $SERVER_TARGET_DIR"
|
||||||
|
log_error "请先创建服务器目录或修改 SERVER_TARGET_DIR 变量"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
log_success "目录检查完成"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 备份现有 mods
|
||||||
|
backup_existing_mods() {
|
||||||
|
local backup_name="mods-backup-$(date +%Y%m%d-%H%M%S)"
|
||||||
|
local target_mods_dir="$SERVER_TARGET_DIR/mods"
|
||||||
|
|
||||||
|
if [[ -d "$target_mods_dir" && "$(ls -A "$target_mods_dir" 2>/dev/null)" ]]; then
|
||||||
|
log_info "备份现有 mods..."
|
||||||
|
mkdir -p "$BACKUP_DIR"
|
||||||
|
|
||||||
|
if tar -czf "$BACKUP_DIR/$backup_name.tar.gz" -C "$SERVER_TARGET_DIR" "mods"; then
|
||||||
|
log_success "Mods 备份完成: $backup_name.tar.gz"
|
||||||
|
|
||||||
|
# 统计备份信息
|
||||||
|
local file_count=$(find "$target_mods_dir" -name "*.jar" | wc -l)
|
||||||
|
local total_size=$(du -sh "$target_mods_dir" | cut -f1)
|
||||||
|
log_info "备份内容: $file_count 个 mods 文件, 总大小: $total_size"
|
||||||
|
else
|
||||||
|
log_error "Mods 备份失败"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
log_info "没有现有的 mods 需要备份"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 下载 mods(如果需要)
|
||||||
|
download_mods_if_needed() {
|
||||||
|
log_info "检查 mods 下载状态..."
|
||||||
|
|
||||||
|
local mods_count=$(find "$MODS_SOURCE_DIR" -name "*.jar" | wc -l)
|
||||||
|
|
||||||
|
if [[ $mods_count -eq 0 ]]; then
|
||||||
|
log_warning "未找到任何 mods,开始下载..."
|
||||||
|
|
||||||
|
if [[ -f "$SCRIPT_DIR/download-mods.sh" ]]; then
|
||||||
|
if "$SCRIPT_DIR/download-mods.sh"; then
|
||||||
|
log_success "Mods 下载完成"
|
||||||
|
else
|
||||||
|
log_error "Mods 下载失败"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
log_error "下载脚本不存在: $SCRIPT_DIR/download-mods.sh"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
log_success "发现 $mods_count 个 mods 文件,跳过下载"
|
||||||
|
|
||||||
|
# 显示 mods 列表
|
||||||
|
log_info "当前 mods 列表:"
|
||||||
|
find "$MODS_SOURCE_DIR" -name "*.jar" -exec basename {} \; | while read mod; do
|
||||||
|
log_info " - $mod"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 部署 mods 到服务器
|
||||||
|
deploy_mods() {
|
||||||
|
log_info "部署 mods 到服务器..."
|
||||||
|
|
||||||
|
local target_mods_dir="$SERVER_TARGET_DIR/mods"
|
||||||
|
|
||||||
|
# 创建目标 mods 目录
|
||||||
|
mkdir -p "$target_mods_dir"
|
||||||
|
|
||||||
|
# 清空目标目录(在备份之后)
|
||||||
|
if [[ -d "$target_mods_dir" ]]; then
|
||||||
|
log_info "清空目标 mods 目录..."
|
||||||
|
rm -f "$target_mods_dir"/*.jar
|
||||||
|
|
||||||
|
# 检查是否清空成功
|
||||||
|
local remaining_files=$(find "$target_mods_dir" -name "*.jar" | wc -l)
|
||||||
|
if [[ $remaining_files -ne 0 ]]; then
|
||||||
|
log_warning "有 $remaining_files 个文件未能删除,可能是正在被使用"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 复制新的 mods
|
||||||
|
log_info "复制 mods 文件..."
|
||||||
|
local copied_count=0
|
||||||
|
|
||||||
|
for mod_file in "$MODS_SOURCE_DIR"/*.jar; do
|
||||||
|
if [[ -f "$mod_file" ]]; then
|
||||||
|
local filename=$(basename "$mod_file")
|
||||||
|
if cp "$mod_file" "$target_mods_dir/"; then
|
||||||
|
log_success "复制: $filename"
|
||||||
|
((copied_count++))
|
||||||
|
else
|
||||||
|
log_error "复制失败: $filename"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ $copied_count -eq 0 ]]; then
|
||||||
|
log_error "没有成功复制任何 mods 文件"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
log_success "Mods 部署完成: 成功复制 $copied_count 个文件"
|
||||||
|
|
||||||
|
# 验证部署
|
||||||
|
local deployed_count=$(find "$target_mods_dir" -name "*.jar" | wc -l)
|
||||||
|
log_info "服务器 mods 目录现有文件: $deployed_count 个"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 部署服务器配置
|
||||||
|
deploy_server_config() {
|
||||||
|
log_info "部署服务器配置..."
|
||||||
|
|
||||||
|
local config_source="$SCRIPT_DIR/server.properties"
|
||||||
|
local config_target="$SERVER_TARGET_DIR/server.properties"
|
||||||
|
|
||||||
|
if [[ -f "$config_source" ]]; then
|
||||||
|
if cp "$config_source" "$config_target"; then
|
||||||
|
log_success "服务器配置部署完成"
|
||||||
|
|
||||||
|
# 显示配置差异(如果有旧配置)
|
||||||
|
if [[ -f "${config_target}.old" ]]; then
|
||||||
|
log_info "配置变更摘要:"
|
||||||
|
diff -u "${config_target}.old" "$config_target" | head -20
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 备份旧配置
|
||||||
|
if [[ -f "$config_target" ]]; then
|
||||||
|
cp "$config_target" "${config_target}.old"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
log_error "服务器配置部署失败"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
log_warning "未找到服务器配置文件: $config_source"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 检查服务器状态
|
||||||
|
check_server_status() {
|
||||||
|
log_info "检查服务器状态..."
|
||||||
|
|
||||||
|
# 检查服务器进程
|
||||||
|
if pgrep -f "fabric-server-mc" >/dev/null; then
|
||||||
|
log_warning "检测到服务器正在运行,部署后需要重启服务器"
|
||||||
|
SERVER_RUNNING=true
|
||||||
|
else
|
||||||
|
log_info "服务器当前未运行"
|
||||||
|
SERVER_RUNNING=false
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 检查关键文件
|
||||||
|
local essential_files=(
|
||||||
|
"$SERVER_TARGET_DIR/eula.txt"
|
||||||
|
"$SERVER_TARGET_DIR/server.properties"
|
||||||
|
"$SERVER_TARGET_DIR/fabric-server-mc.1.21.1-loader.0.17.2-launcher.1.1.0.jar"
|
||||||
|
)
|
||||||
|
|
||||||
|
for file in "${essential_files[@]}"; do
|
||||||
|
if [[ -f "$file" ]]; then
|
||||||
|
log_success "存在: $(basename "$file")"
|
||||||
|
else
|
||||||
|
log_warning "缺失: $(basename "$file")"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# 显示部署摘要
|
||||||
|
show_deployment_summary() {
|
||||||
|
log_separator
|
||||||
|
log_success "=== 部署完成摘要 ==="
|
||||||
|
|
||||||
|
local deployed_mods=$(find "$SERVER_TARGET_DIR/mods" -name "*.jar" | wc -l)
|
||||||
|
local source_mods=$(find "$MODS_SOURCE_DIR" -name "*.jar" | wc -l)
|
||||||
|
|
||||||
|
log_info "部署的 mods 数量: $deployed_mods"
|
||||||
|
log_info "源 mods 数量: $source_mods"
|
||||||
|
log_info "备份位置: $BACKUP_DIR"
|
||||||
|
|
||||||
|
if [[ "$SERVER_RUNNING" == "true" ]]; then
|
||||||
|
log_warning "⚠️ 服务器正在运行,需要重启以应用更改"
|
||||||
|
log_info "重启命令: cd $SERVER_TARGET_DIR && ./boot.sh stop && ./boot.sh start"
|
||||||
|
else
|
||||||
|
log_info "启动服务器: cd $SERVER_TARGET_DIR && ./boot.sh start"
|
||||||
|
fi
|
||||||
|
|
||||||
|
log_info "查看服务器日志: tail -f $SERVER_TARGET_DIR/logs/latest.log"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 主部署流程
|
||||||
|
main_deployment() {
|
||||||
|
log_info "开始自动化部署流程..."
|
||||||
|
|
||||||
|
# 执行各个步骤
|
||||||
|
check_directories
|
||||||
|
check_server_status
|
||||||
|
backup_existing_mods
|
||||||
|
download_mods_if_needed
|
||||||
|
deploy_mods
|
||||||
|
deploy_server_config
|
||||||
|
|
||||||
|
log_success "所有部署步骤完成"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 执行部署
|
||||||
|
if main_deployment; then
|
||||||
|
END_TIME=$(date +%s)
|
||||||
|
DURATION=$((END_TIME - START_TIME))
|
||||||
|
|
||||||
|
show_deployment_summary
|
||||||
|
log_end 0 "$DURATION"
|
||||||
|
show_log_location
|
||||||
|
else
|
||||||
|
log_error "部署过程中出现错误"
|
||||||
|
log_end 1
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
128
minecraft/scripts/automatic/download-mods.sh
Executable file
128
minecraft/scripts/automatic/download-mods.sh
Executable file
|
|
@ -0,0 +1,128 @@
|
||||||
|
#!/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
|
||||||
167
minecraft/scripts/automatic/logger.sh
Executable file
167
minecraft/scripts/automatic/logger.sh
Executable file
|
|
@ -0,0 +1,167 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
LOG_FILE="./logs/mod-install-log.txt"
|
||||||
|
mkdir -p "$(dirname "$LOG_FILE")"
|
||||||
|
|
||||||
|
# 颜色定义
|
||||||
|
RED='\033[0;31m'
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
YELLOW='\033[1;33m'
|
||||||
|
BLUE='\033[0;34m'
|
||||||
|
NC='\033[0m' # No Color
|
||||||
|
|
||||||
|
# 初始化日志文件
|
||||||
|
init_log() {
|
||||||
|
echo "==================================================" >"$LOG_FILE"
|
||||||
|
echo "Minecraft Mod 安装日志" >>"$LOG_FILE"
|
||||||
|
echo "开始时间: $(date)" >>"$LOG_FILE"
|
||||||
|
echo "==================================================" >>"$LOG_FILE"
|
||||||
|
echo "" >>"$LOG_FILE"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 记录系统信息
|
||||||
|
log_system_info() {
|
||||||
|
{
|
||||||
|
echo "=== 系统信息 ==="
|
||||||
|
echo "主机名: $(hostname)"
|
||||||
|
echo "操作系统: $(uname -s) $(uname -r)"
|
||||||
|
echo "架构: $(uname -m)"
|
||||||
|
|
||||||
|
# CPU 信息
|
||||||
|
if command -v nproc >/dev/null; then
|
||||||
|
echo "CPU 核心数: $(nproc)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if command -v lscpu >/dev/null; then
|
||||||
|
echo "CPU 型号: $(lscpu | grep "Model name" | cut -d: -f2 | xargs)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 内存信息
|
||||||
|
if command -v free >/dev/null; then
|
||||||
|
echo "内存总量: $(free -h | grep Mem: | awk '{print $2}')"
|
||||||
|
echo "可用内存: $(free -h | grep Mem: | awk '{print $7}')"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 磁盘信息
|
||||||
|
echo "磁盘使用:"
|
||||||
|
df -h . | tail -1 | awk '{print " 总量: " $2 ", 可用: " $4 ", 使用率: " $5}'
|
||||||
|
|
||||||
|
# 网络信息
|
||||||
|
echo "公网 IP: $(curl -s ifconfig.me 2>/dev/null || echo "无法获取")"
|
||||||
|
echo ""
|
||||||
|
} >>"$LOG_FILE"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 记录命令开始
|
||||||
|
log_start() {
|
||||||
|
local command_name="$1"
|
||||||
|
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
|
||||||
|
|
||||||
|
{
|
||||||
|
echo "╔═══════════════════════════════════════════════"
|
||||||
|
echo "║ 命令: $command_name"
|
||||||
|
echo "║ 开始时间: $timestamp"
|
||||||
|
echo "║ 工作目录: $(pwd)"
|
||||||
|
echo "║ 用户: $(whoami)"
|
||||||
|
echo "╚═══════════════════════════════════════════════"
|
||||||
|
echo ""
|
||||||
|
} >>"$LOG_FILE"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 记录命令结束
|
||||||
|
log_end() {
|
||||||
|
local exit_code="$1"
|
||||||
|
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
|
||||||
|
local duration="${2:-0}"
|
||||||
|
|
||||||
|
{
|
||||||
|
echo ""
|
||||||
|
echo "╔═══════════════════════════════════════════════"
|
||||||
|
echo "║ 结束时间: $timestamp"
|
||||||
|
if [[ -n "$duration" && "$duration" != "0" ]]; then
|
||||||
|
echo "║ 执行时长: ${duration}秒"
|
||||||
|
fi
|
||||||
|
echo "║ 退出代码: $exit_code"
|
||||||
|
echo "║ 状态: $([ $exit_code -eq 0 ] && echo "成功" || echo "失败")"
|
||||||
|
echo "╚═══════════════════════════════════════════════"
|
||||||
|
echo ""
|
||||||
|
echo ""
|
||||||
|
} >>"$LOG_FILE"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 记录信息(同时输出到屏幕和日志)
|
||||||
|
log_info() {
|
||||||
|
local message="$1"
|
||||||
|
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
|
||||||
|
echo -e "${BLUE}[INFO]${NC} $message"
|
||||||
|
echo "[$timestamp] [INFO] $message" >>"$LOG_FILE"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 记录成功
|
||||||
|
log_success() {
|
||||||
|
local message="$1"
|
||||||
|
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
|
||||||
|
echo -e "${GREEN}[SUCCESS]${NC} $message"
|
||||||
|
echo "[$timestamp] [SUCCESS] $message" >>"$LOG_FILE"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 记录警告
|
||||||
|
log_warning() {
|
||||||
|
local message="$1"
|
||||||
|
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
|
||||||
|
echo -e "${YELLOW}[WARNING]${NC} $message"
|
||||||
|
echo "[$timestamp] [WARNING] $message" >>"$LOG_FILE"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 记录错误
|
||||||
|
log_error() {
|
||||||
|
local message="$1"
|
||||||
|
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
|
||||||
|
echo -e "${RED}[ERROR]${NC} $message"
|
||||||
|
echo "[$timestamp] [ERROR] $message" >>"$LOG_FILE"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 记录命令输出
|
||||||
|
log_command() {
|
||||||
|
local command="$1"
|
||||||
|
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
|
||||||
|
|
||||||
|
{
|
||||||
|
echo "[$timestamp] [COMMAND] 执行: $command"
|
||||||
|
echo "[$timestamp] [OUTPUT]"
|
||||||
|
} >>"$LOG_FILE"
|
||||||
|
|
||||||
|
# 执行命令并捕获输出
|
||||||
|
eval "$command" 2>&1 | while IFS= read -r line; do
|
||||||
|
echo "[$timestamp] [OUTPUT] $line" >>"$LOG_FILE"
|
||||||
|
echo "$line" # 同时输出到屏幕
|
||||||
|
done
|
||||||
|
|
||||||
|
local exit_code=${PIPESTATUS[0]}
|
||||||
|
echo "[$timestamp] [COMMAND] 退出代码: $exit_code" >>"$LOG_FILE"
|
||||||
|
return $exit_code
|
||||||
|
}
|
||||||
|
|
||||||
|
# 记录分隔线
|
||||||
|
log_separator() {
|
||||||
|
echo "--------------------------------------------------" >>"$LOG_FILE"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 显示日志位置
|
||||||
|
show_log_location() {
|
||||||
|
log_info "详细日志已保存到: $LOG_FILE"
|
||||||
|
log_info "查看日志: tail -f $LOG_FILE"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 主函数
|
||||||
|
main() {
|
||||||
|
if [[ "$1" == "init" ]]; then
|
||||||
|
init_log
|
||||||
|
log_system_info
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 如果直接执行此脚本,则初始化
|
||||||
|
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
|
||||||
|
main "$@"
|
||||||
|
fi
|
||||||
19
minecraft/scripts/automatic/requirements.txt
Normal file
19
minecraft/scripts/automatic/requirements.txt
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
# Minecraft 1.21.1 Fabric Mods
|
||||||
|
# 格式: mod名称 | 项目slug | 版本号(可选)
|
||||||
|
|
||||||
|
# Fabric API (必需)
|
||||||
|
fabric-api | fabric-api | 0.100.3+1.21.1
|
||||||
|
|
||||||
|
# 锂 (Lithium) - 性能优化
|
||||||
|
lithium | lithium | 0.12.2+1.21.1
|
||||||
|
|
||||||
|
# 磷 (Phosphor) - 光照优化
|
||||||
|
phosphor | phosphor | 0.8.2+1.21.1
|
||||||
|
|
||||||
|
# 钠 (Sodium) - 渲染优化
|
||||||
|
sodium | sodium | 0.5.11+1.21.1
|
||||||
|
|
||||||
|
# Iris Shaders - 着色器支持
|
||||||
|
iris | iris | 1.7.2+1.21.1
|
||||||
|
|
||||||
|
# 注意:版本号可以不写,会自动下载最新版本
|
||||||
53
minecraft/scripts/automatic/server.properties
Normal file
53
minecraft/scripts/automatic/server.properties
Normal file
|
|
@ -0,0 +1,53 @@
|
||||||
|
# Minecraft 服务器配置
|
||||||
|
enable-jmx-monitoring=false
|
||||||
|
rcon.port=25575
|
||||||
|
level-seed=
|
||||||
|
gamemode=survival
|
||||||
|
enable-command-block=false
|
||||||
|
enable-query=false
|
||||||
|
generator-settings={}
|
||||||
|
enforce-secure-profile=true
|
||||||
|
level-name=world
|
||||||
|
motd=My Automated Fabric Server
|
||||||
|
query.port=25565
|
||||||
|
pvp=true
|
||||||
|
generate-structures=true
|
||||||
|
max-chained-neighbor-updates=1000000
|
||||||
|
difficulty=normal
|
||||||
|
network-compression-threshold=256
|
||||||
|
max-tick-time=60000
|
||||||
|
require-resource-pack=false
|
||||||
|
use-native-transport=true
|
||||||
|
max-players=20
|
||||||
|
online-mode=false
|
||||||
|
enable-status=true
|
||||||
|
allow-flight=false
|
||||||
|
broadcast-rcon-to-ops=true
|
||||||
|
view-distance=10
|
||||||
|
server-ip=
|
||||||
|
resource-pack-prompt=
|
||||||
|
allow-nether=true
|
||||||
|
server-port=25565
|
||||||
|
enable-rcon=true
|
||||||
|
sync-chunk-writes=true
|
||||||
|
op-permission-level=4
|
||||||
|
prevent-proxy-connections=false
|
||||||
|
hide-online-players=false
|
||||||
|
resource-pack=
|
||||||
|
entity-broadcast-range-percentage=100
|
||||||
|
simulation-distance=10
|
||||||
|
rcon.password=changeme123
|
||||||
|
player-idle-timeout=0
|
||||||
|
force-gamemode=false
|
||||||
|
rate-limit=0
|
||||||
|
hardcore=false
|
||||||
|
white-list=false
|
||||||
|
broadcast-console-to-ops=true
|
||||||
|
spawn-npcs=true
|
||||||
|
spawn-animals=true
|
||||||
|
function-permission-level=2
|
||||||
|
level-type=minecraft\:normal
|
||||||
|
spawn-monsters=true
|
||||||
|
enforce-whitelist=false
|
||||||
|
spawn-protection=16
|
||||||
|
max-world-size=29999984
|
||||||
BIN
minecraft/scripts/mods/fabric-api-0.116.7+1.21.1.jar
Normal file
BIN
minecraft/scripts/mods/fabric-api-0.116.7+1.21.1.jar
Normal file
Binary file not shown.
BIN
minecraft/scripts/mods/iris-fabric-1.8.8+mc1.21.1.jar
Normal file
BIN
minecraft/scripts/mods/iris-fabric-1.8.8+mc1.21.1.jar
Normal file
Binary file not shown.
BIN
minecraft/scripts/mods/lithium-fabric-0.15.0+mc1.21.1.jar
Normal file
BIN
minecraft/scripts/mods/lithium-fabric-0.15.0+mc1.21.1.jar
Normal file
Binary file not shown.
BIN
minecraft/scripts/mods/sodium-fabric-0.6.13+mc1.21.1.jar
Normal file
BIN
minecraft/scripts/mods/sodium-fabric-0.6.13+mc1.21.1.jar
Normal file
Binary file not shown.
Loading…
Reference in a new issue