Skip to content

Releases: yzsyzdy/Minecraft-Terminal-Server-Launcher

MSTL正式版1.1.33

Choose a tag to compare

@yzsyzdy yzsyzdy released this 15 Jul 04:21

新增俄语翻译

MSTL正式版1.1.32

Choose a tag to compare

@yzsyzdy yzsyzdy released this 14 Jul 13:21
692e61b

新增功能

i18n国际化,目前支持zh和en

修复

Bug 1 server_manager.py zip slip:解压时未校验路径穿越(../../ 可能写到目标目录外) 提取前计算 os.path.abspath,校验必须以 target_abs + os.sep 开头,跳过不安全路径
Bug 2 download_msl.py 部分 CDN 对 HEAD 返回不支持 Range,但 GET 实际支持,导致不必要地回退单线程 移除 HEAD 的 Range 判断,直接尝试多线程,失败才回退
Bug 3 plugin_sources.py SpigotMC 下载 302 到 ForgeCDN 后因缺少 Referer 返回 403 请求中添加 Referer: https://www.spigotmc.org/
完成的优化

优化

Opt 1 constants.py (新) User-Agent 散落在 3 个文件中,彼此不一致 新建 constants.py,统一 USER_AGENT = "MSTL/1.0",各模块从常量文件导入
Opt 2 server_launcher.py _handle_sigint 用 sys.exit(0),在 PIPE 模式下子进程可能残留 改为 os._exit(0),直接终止进程,确保子进程被回收
Opt 3 i18n.py / start.py _detect_os_language() 定义在 start.py,无法被其他模块复用 移到 i18n.detect_os_language(),全局可用,start.py 改为调用该函数
Opt 4 plugin_sources.py / mod_sources.py / download_msl.py API 基础 URL(SPIGET_BASE、MODRI

MSTL正式版1.1.0

Choose a tag to compare

@yzsyzdy yzsyzdy released this 13 Jul 13:08

新增功能

序号 功能
1 新增服务器导出功能
2 通过curse.tools是不需要配置curseapikey也可以正常使用相关功能

代码优化

序号 位置 问题 建议
1 mod_sources.py:15 User-Agent 仍是 MinecraftServerLauncher/1.0,与 plugin_sources.py 和 download_msl.py 的 MSTL/1.0 不一致 统一为 MSTL/1.0
2 server_launcher.py start_minecraft_server() 和 start_server_interactive() 有大量重复代码(JVM 参数、命令拼接、错误检查) 提取公共函数 _build_jvm_cmd()
3 menu.py 插件和模组的删除/禁用启用/添加逻辑几乎是完全复制的两份 参数化为一个通用函数
4 menu.py from clear import clear_screen 在至少 6 个函数内重复 import 提到文件顶部的模块级 import
5 java_tools.py java_list.json 中写了 last_selected 字段但从未读取 要么真正使用(下次启动自动选中),要么去掉
6 download_msl.py multithreaded_download 的重试机制复杂且已坏,函数约 70 行 简化:去掉重试,失败直接回退到 _download_with_progress
7 start.py _is_eula_unagreed() 只检查 eula=false 字符串,如果文件内容有 eula=false 作为注释或 url 的一部分会误触发 用正则或按行解析更精确
8 全局 多处 print("\u2588" * ...) 进度条代码重复(server_manager.py 解压、download_msl.py 下载) 提取 _progress_bar() 公共工具函数

修复bug

序号 代码位置 问题描述 备注
1 download_msl.py:201-215 multithreaded_download() 重试逻辑在 with ThreadPoolExecutor() 块结束后调用 executor.submit(),此时 executor 已 shutdown,会抛出 RuntimeError 分块下载失败后重试永远不会执行,静默失败
2 server_manager.py:115-117 classify_server_type() candidate in {"arclight"} and any(x in name for x in (...)) 是不可达的死代码——“arclight” 本身已在 _HYBRID_IDS 集合中,条件分支在前面已命中 逻辑冗余,不影响结果
3 menu.py:221-222 _show_plugin_menu() 入口 函数开头 clear_screen() 一次,while 循环顶又 clear_screen() 一次,每次都清两次屏 界面闪烁,无实际效果损失
4 menu.py:401-402 _show_mod_menu() 入口 同上,double clear 同上
5 menu.py:282 _search_and_download_mod() from config import load_config 后通过 os.path.dirname(os.path.dirname(mods_dir)) 猜 project_dir,如果 mods_dir 不含 servers/ 路径前缀则拿不到 config CurseForge key 可能读不到
6 start.py:126-132 first_start 分支 if first_start: 和 else: 分支打印完全相同的消息 无用代码
7 java_tools.py:275 _download_jdk() 解压后只 shutil.move 第一个根目录,如果压缩包内的根目录名和预期 jdk-{version} 不一致,不会 renaming 到标准路径 后续 os.path.isfile(java_exe) 检查可能通过(因为走 os.path.isdir(jdk_dir) 提前返回),但 JDK 路径不在预期位置

快速开始

运行start.py或解压压缩包,运行MSTL.exe(winamd64)

MSTL正式版1.0.0

Choose a tag to compare

@yzsyzdy yzsyzdy released this 12 Jul 11:53
e807c71

MSTL v1.0.0 — Minecraft Terminal Server Launcher

一个零第三方依赖的 Minecraft 服务端管理器,在终端里搞定多服务器全生命周期管理。

核心能力

多服务器管理
每个服务器独立目录,独立配置 MC 版本、Java 版本、内存、JVM 参数。支持 30+ 种服务端类型(Paper、Purpur、Fabric、Forge、NeoForge……)。

Java 全自动处理
从环境变量和标准安装路径自动扫描已安装的 JDK,根据 MC 版本校验兼容性。系统没 Java 或版本不对?自动从镜像下载 GraalVM JDK(17 / 21 / 25)(Linux/win)。

服务端一键下载
通过 MSL 镜像源获取服务端核心,交互式选类型和版本,每日缓存避免重复请求。

插件管理
同时搜索 SpigotMC、Modrinth、Hangar 三个源,结果按下载量排序。选编号直接下载到 plugins/ 目录。也支持本地 jar 导入、启用/禁用。

模组管理
通过 Modrinth(免 API key)和 CurseForge(需申请 key)搜索,自动按当前服务器的 MC 版本和加载器(Fabric / Forge / NeoForge / Quilt)过滤。

EULA 智能处理
首次启动检测到 eula=false 时自动询问,同意后修改并重启,不用手动改文件再重新开。

压缩包导入
把已有的服务器压缩包拖进来,自动解压、识别核心 jar。

快速开始

使用exe二级制文件

下载MSTL1.0.0.zip并解压,运行MSTL.exe

编译

# Python 3.10+ 即可,零第三方依赖
python start.py
或者用 Nuitka 打包成单文件 exe:

pip install nuitka && python -m nuitka --standalone --assume-yes-for-downloads --enable-plugin=anti-bloat --windows-console-mode=force --windows-icon-from-ico=icon.png --output-dir=build --product-name=MSTL --file-description="Minecraft Terminal Server Launcher" --product-version="1.0.0" --file-version="1.0.0" --copyright="MSTL" start.py
已知限制
CurseForge 搜索需要手动申请 API key(填入 config.json)
全部使用标准库,无异步框架,下载大文件时终端会阻塞
控制台交互模式下服务器日志和输入在同一窗口,不支持 Tab 补全
没有 Web UI,纯终端操作
致谢
MSL 镜像源([api.mslmc.cn/v4](http://api.mslmc.cn/v4))提供服务端核心下载
FastMirror提供jdk镜像
Spiget API、Modrinth API、Hangar API 提供插件数据