[MD]# EndStart 更新日志
---
## v4.0.0 — 当前版本
**发布日期:** 2026-03-07
本版本为重大功能重构版本,核心变更是将 Python 安装方式从预编译二进制包切换至 **uv** 工具链,并引入虚拟环境隔离机制,以适配 EndStone 0.11.0 及以上版本的运行要求。同时对脚本的容错逻辑、UI 交互、配色方案及环境初始化进行了全面优化。
### 新增功能
**uv 工具链集成**
新增 `install_uv()`、`ensure_uv()` 等函数,内嵌 uv 官方安装器逻辑(当前版本 v0.10.9)。安装器自动检测 CPU 架构(x86_64 / aarch64 / armv7)与操作系统(Linux / macOS),通过 `curl` 或 `wget` 将 uv 下载至脚本指定目录,全程无需 root 权限,不写入系统目录。uv 安装路径通过配置文件中的 `UV_INSTALL_PATH` 项持久化保存,重启后自动恢复。
**Python 版本交互式选择**
新增 `list_python_versions()` 与 `show_python_versions()` 函数,调用 `uv python list --all-versions` 获取可用版本列表,过滤出 3.10.x 至 3.14.x 范围内的版本(排除 freethreaded 变体),按 minor 版本分组后以竖向列表整齐打印,用户输入序号即可选择,输入 `0` 返回上级菜单。若 uv 无法联网,自动回退至内置后备版本列表。
**虚拟环境管理**
新增 `activate_venv()`、`get_venv_path()`、`get_uv_python_dir()` 三个函数,将 Python 安装流程从"安装 Python → 设置环境变量"改为两步式:
1. `uv python install cpython-<版本>` 将 Python 安装至 `<base_dir>/python/`
2. `uv venv <base_dir>/.venv --python <python路径>` 创建虚拟环境
EndStone 的安装与运行均在虚拟环境内进行,通过 `uv pip install --python $VENV_PYTHON` 完成,与宿主机 Python 环境完全隔离。
**重装虚拟环境功能**
将原"更新/重装/回退 Python"菜单选项替换为"重装虚拟环境"(`reinstall_venv()`),操作流程为:确认 → 选择 Python 版本 → 删除旧 `.venv` → 重新创建虚拟环境 → 询问是否重新安装 EndStone。
**HOME 目录重定向**
在 `initialize_data()` 初始化阶段新增 `export HOME="$SCRIPT_DIR"`,确保 uv、pip、Python 等工具的默认配置目录、缓存目录均写入脚本所在目录,不依赖宿主机的 `~` 目录,满足只读容器环境的运行需求。
**TOOLS_DIR 环境变量**
初始化时自动将 `tools/` 目录的绝对路径导出为 `$TOOLS_DIR` 环境变量,并对该目录下所有文件及子目录执行 `chmod -R 777`,确保插件脚本在受限容器中具有完整的读写执行权限。
**wget 安全包装函数**
新增 `wget_safe()` 函数,所有 wget 调用均通过此函数执行,自动附加以下参数:
- `--hsts-file="${TMP_DIR}/wget-hsts"`:将 HSTS 记录写入脚本可写目录,解决容器中 HOME 目录权限受限导致的 HSTS 报错
- `--no-check-certificate`:跳过 CA 证书验证,解决静态编译 wget 在无系统证书容器中的 HTTPS 连接失败问题
函数同时支持自动检测并优先使用脚本同目录或 `tools/` 目录下的预编译 wget 二进制。
### 改进与修复
**BDS 版本号解析重构**
EndStone 0.11.0 起,GitHub Release body 格式由 badge 链接(`minecraft-v1.21.130`)改为纯文字描述(`Added support for BDS version 1.26.x.x.`),导致旧正则完全失效。新版本采用三级回退策略:
| 优先级 | 匹配格式 | 适用版本 |
|---|---|---|
| 1 | `BDS version X.X.X.X` | EndStone 0.11.1+ |
| 2 | `BDS X.X.X` | EndStone 0.11.0 |
| 3 | `minecraft-vX.X.X` | EndStone 0.10.x |
对于 body 中不含任何 BDS 信息的版本(如 v0.10.18,仅含 changelog URL),采用"向后继承"策略,自动沿用下方(更旧)版本的有效 BDS 号,确保版本列表完整显示。
**EndStone 版本号提取修复**
将 `pip show endstone | grep Version` 改为 `grep "^Version:" | head -1 | awk '{print $2}' | tr -d '\r'`,修复因 `Requires-Dist` 字段含版本范围约束(如 `minecraft-bedrock-server (>=1.26,<2.0)`)而导致版本号显示为 `0.11.2\n 2.0,` 的问题。
**分割线长度优化**
将全脚本分割线从约 60 字符缩短为 32 字符,适配手机竖屏终端宽度,避免在窄屏设备上折行显示。
**主菜单状态区标签缩短**
将状态区标签由长格式(如 `• BDS版本: `)改为简洁格式(`• BDS: `),减少标签与数值之间的间距,防止在手机端折行。
### 删除内容
以下函数与逻辑因 Python 安装方式变更而不再需要,已从脚本中完全移除:
| 删除内容 | 原用途 |
|---|---|
| `fetch_python_versions()` | 从 HTTP 接口拉取预编译 Python 版本列表 |
| `load_python_versions()` | 加载并解析版本列表 |
| `download_file()` | 下载 tar.gz 预编译包 |
| `extract_file()` | 解压 tar.gz 预编译包 |
| `handle_no_download_tools()` | 无下载工具容错弹窗 |
| `handle_no_extract_tools()` | 无解压工具容错弹窗 |
| `handle_no_tools()` | 无工具综合容错处理 |
| `handle_download_failure()` | 下载失败容错处理 |
| `handle_download_failure_no_tar()` | 无 tar 时下载失败容错 |
| `install_system_tool()` | 尝试安装系统工具 |
| 全局变量 `HAS_TAR` / `TOOLS_MISSING` / `DOWNLOAD_URL` / `BACKUP_DOWNLOAD_URL` | 旧预编译方案相关变量 |
| 配置项 `DOWNLOAD_URL` | 旧预编译包下载地址 |
| 百宝箱"修改下载源地址"选项 | 已无实际意义 |
---[/MD]
+修复addon管理脚本及服务器配置文件编辑脚本
+addon管理脚本新增一键开关测试版api(gametest)