Skip to content

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)