新增功能
| 序号 |
功能 |
| 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)