# PCSMT-2 项目功能实现文档
PCSMT-2 已经停止更新, 后续版本将不再维护.
# 1. 项目概述
PCSMT-2(Python Minecraft Server Manager Tool 2)是一个功能全面的Minecraft服务器管理工具,支持GUI界面、命令行操作和Web管理界面,提供从服务器创建、配置、启动到监控的全生命周期管理。
# 1.1 主要特性
- 多版本Java自动管理与安装
- 服务器添加、配置、启动、停止、删除等核心功能
- 定时任务与服务器监控
- RCON协议支持实现远程控制
- 备份与回档功能
- Web API接口
- Tkinter GUI界面
- 命令历史记录和自动补全
# 2. 系统架构
# 2.1 核心模块结构
- 主程序模块:PCSMT2.py,程序入口点,负责初始化GUI、命令行界面和启动相关服务
- 服务器管理模块:Server.py,实现服务器的添加、启动、停止、删除等核心功能
- Java管理模块:Java.py,负责Java版本的检测、安装和配置
- 定时任务模块:timer.py,实现服务器状态监控和存储大小更新等定时任务
- Web API模块:api目录下的相关文件,提供HTTP接口供Web界面调用
- 配置管理:通过config.json和java_versions.json管理程序配置
# 3. 核心功能实现
# 3.1 程序初始化流程
程序启动时执行以下初始化流程:
- 进程检查:确保只运行一个程序实例,防止冲突
- Java环境检测:检查并自动安装所需的Java版本(1.8、16、17、21)
- 配置加载:读取config.json配置文件
- 定时任务初始化:启动存储大小更新定时器和心跳检测
- GUI初始化:创建Tkinter主窗口和界面组件
- Web服务器启动:启动Flask Web API服务
核心初始化代码如下:
# 进程检查与窗口置顶
def SetWindowTop(ProgramName):
# 实现进程检查和窗口置顶逻辑
# Java环境检测与安装
versions = [1.8, 16, 17, 21]
for version in versions:
results = Examine.Java.Exist(version)
if not results:
# 尝试自动安装Java
result = Java.Install.Windows(version)
# 定时任务启动
timer.TimerStorageSizeUpdate.thread()
# Web服务器启动
from bin.api import main
# GUI初始化
app = TkinterApp()
app.MainLoop()
# 3.2 Java版本管理功能
Java版本管理模块负责检测、安装和配置不同版本的Java环境,支持自动下载和安装Amazon Corretto JDK。
核心功能:
- 自动检测系统已安装的Java版本
- 支持自动下载并安装指定版本的Java(1.8、16、17、21)
- 为不同版本的Minecraft服务器选择合适的Java版本
- 环境变量配置
版本匹配逻辑:
# 根据Minecraft版本选择合适的Java版本
def JavaVersion(Version: str):
java_args: str = ''
v = version.parse(Version)
# 按照版本使用不同版本的Java JDK
with open('./java_versions.json', 'r', encoding='utf-8') as f:
java_versions_address = json.load(f)
if v < version.parse('1.17.0'):
java_args = java_versions_address['1.8']
elif v > version.parse('1.17.0') and v <= version.parse('1.18.2'):
java_args = java_versions_address['16']
elif v > version.parse('1.18.2') and v <= version.parse('1.20.4'):
java_args = java_versions_address['17']
elif v > version.parse('1.20.5') and v <= version.parse('1.21.8'):
java_args = java_versions_address['21']
return java_args
# 3.3 服务器管理功能
服务器管理是本程序的核心功能,提供了Minecraft服务器的全生命周期管理。
# 3.3.1 服务器添加功能
功能说明:将已有的Minecraft服务器目录添加到程序管理中,创建必要的配置文件和启动脚本。
实现流程:
- 扫描指定目录下的服务器核心文件(.jar文件)
- 过滤排除不必要的jar文件
- 创建服务器启动批处理文件
- 生成服务器信息JSON文件,包含名称、路径、核心、大小等信息
- 创建EULA协议文件
代码实现:
# 添加服务器
def Add(Path, Name):
# 检查路径是否存在
# 查找服务器核心文件
# 过滤排除关键字文件
# 创建启动批处理文件
# 创建服务器信息JSON文件
# 创建EULA协议文件
# 3.3.2 服务器启动功能
功能说明:启动指定的Minecraft服务器,支持nogui模式和内存配置。
实现流程:
- 读取服务器信息文件
- 检查EULA协议是否同意
- 获取或设置服务器端口
- 设置RCON端口(如果启用)
- 根据服务器版本选择合适的Java版本
- 创建并执行启动进程
- 记录服务器启动信息到latest.json和latest.txt
代码实现:
# 启动服务器
def Start(server_name):
# 读取服务器信息
# 检查EULA协议
# 获取服务器端口
# 设置RCON端口
# 选择Java版本
# 创建并执行启动进程
# 记录启动信息
# 3.3.3 服务器停止功能
功能说明:停止指定的Minecraft服务器,支持RCON方式优雅停止和强制停止。
实现流程:
- 尝试通过RCON协议发送/stop命令优雅停止服务器
- 如果RCON方式失败,尝试通过任务管理器结束进程
代码实现:
# 停止服务器
def Stop(server_name):
# 尝试RCON方式停止
# 如果失败,尝试强制停止
# 3.3.4 服务器删除功能
功能说明:从程序中删除指定的服务器,支持保留或删除实际服务器文件。
实现流程:
- 查找服务器信息文件
- 显示服务器信息并请求确认
- 删除服务器信息文件
- 可选删除服务器实际文件
代码实现:
# 删除服务器
def Delete(server_name):
# 查找服务器信息
# 请求确认
# 删除服务器信息文件
# 可选删除服务器文件
# 3.3.5 服务器回档功能
功能说明:将服务器回档到之前的备份状态,支持mod和plugin类型的备份。
实现流程:
- 查找备份文件(支持FTB Backups 2模组和eBackup插件)
- 解压备份文件
- 替换现有服务器文件
- 处理权限问题
代码实现:
# 服务器回档
def Retracement(server_name):
# 查找备份文件
# 解压备份
# 替换服务器文件
# 处理权限
# 3.3.6 服务器属性修改功能
功能说明:修改服务器的配置属性,如服务器端口、游戏模式、难度等。
实现流程:
- 读取服务器server.properties文件
- 查找指定关键字
- 修改对应的值
- 保存文件
代码实现:
# 修改服务器属性
class Change:
def Properties(server_name: str, keyword: str, argument: str):
# 读取服务器信息
# 查找并修改关键字参数
# 3.3.7 服务器运行内存修改功能
功能说明:修改服务器启动时的内存配置(最小内存和最大内存)。
实现流程:
- 读取服务器启动批处理文件
- 修改-Xms和-Xmx参数
- 保存文件
代码实现:
# 修改服务器运行内存
class Change:
def RunningMemories(server_name, memory_min, memory_max):
# 读取服务器信息
# 修改启动批处理文件中的内存参数
# 保存文件
# 3.4 定时任务与监控功能
定时任务模块负责定期更新服务器存储大小和监控服务器在线状态。
# 3.4.1 存储大小更新功能
功能说明:定期更新并记录服务器存储大小,支持配置更新频率。
实现流程:
- 为每个服务器创建单独的定时任务线程
- 定期检查服务器存储大小
- 如果大小有变化,记录到存储大小文件
- 更新服务器信息文件中的大小字段
代码实现:
# 存储大小更新定时器
class TimerStorageSizeUpdate:
def thread(cls):
# 为每个服务器创建定时任务线程
# 启动线程
def timer(self, server_name):
# 定时检查存储大小
# 更新存储大小记录
# 3.4.2 服务器心跳检测功能
功能说明:定期检测服务器在线状态,更新服务器状态信息。
实现流程:
- 创建心跳检测线程
- 定期检查所有服务器的在线状态
- 维护服务器状态列表
代码实现:
# 服务器心跳检测
class Heartbeat:
def thread(self):
# 创建并启动心跳检测线程
def Start(self):
# 定期检测服务器状态
def GetInfo(self):
# 获取并更新服务器状态信息
# 3.5 RCON协议功能
RCON协议功能允许程序与Minecraft服务器进行远程通信,执行命令和获取信息。
核心功能:
- 建立RCON连接
- 发送命令(如ban、op、stop等)
- 接收命令执行结果
- 服务器在线状态检测
应用场景:
- 封禁/解封玩家(do_banned/do_unban命令)
- 添加/删除OP玩家(do_op/do_deop命令)
- 优雅停止服务器(do_stop_server命令)
- 获取服务器状态信息
# 3.6 GUI界面实现
程序使用Tkinter库实现图形用户界面,提供直观的操作体验。
核心组件:
- 主窗口:支持自定义大小和位置
- 顶部按钮区域:包含帮助、调试模式等功能按钮
- 日志输出区域:使用ScrolledText组件显示程序日志
- 命令输入区域:支持命令输入和自动补全
- 状态栏:显示程序版本信息
交互功能:
- 命令历史记录:支持上下键导航历史命令
- 命令自动补全:支持Tab键命令和参数补全
- 日志重定向:将控制台输出重定向到日志区域
代码实现:
# GUI主类
class TkinterApp:
def __init__(self):
# 初始化主窗口
# 创建界面组件
# 绑定事件
def CreateWidgets(self):
# 创建按钮区域
# 创建日志输出区域
# 创建命令输入区域
def CompleteCommand(self, event=None):
# 实现命令自动补全功能
def RunCommand(self, event=None):
# 执行输入的命令
# 3.7 命令行功能实现
程序基于cmd2库实现命令行功能,提供丰富的命令集。
核心命令:
- version:查看程序版本信息
- about:查看程序关于信息
- sta:显示服务器状态
- add_server:添加服务器
- start_server:启动服务器
- server_list:列出所有服务器
- change_server_properties:修改服务器属性
- change_server_run_memories_config:修改服务器运行内存
- delete_server:删除服务器
- search_server:搜索服务器
- banned/unban:封禁/解封玩家
- op/deop:添加/删除OP玩家
- stop_server:停止服务器
命令自动补全: 为主要命令实现了参数自动补全功能,提高用户体验。
代码实现:
# 命令行类
class PCSMT2(Cmd):
def do_version(self, arg):
# 显示程序版本信息
def do_add_server(self, arg):
# 添加服务器命令实现
def complete_add_server(self, text, line, begidx, endidx):
# 命令补全实现
# 3.8 Web API与管理界面
程序内置Flask Web服务器,提供HTTP API接口,并支持Web管理界面。
核心API接口:
/api/program/version:获取程序版本信息/api/server/list:获取服务器列表- 其他服务器管理相关接口
Web管理界面功能:
- 服务器列表显示
- 服务器状态监控
- CPU、内存、磁盘使用率监控
- 服务器操作(启动、停止等)
- 终端日志查看
定时刷新功能: Web界面使用JavaScript定时器定期刷新服务器状态和监控数据。
# 4. 配置系统
程序通过配置文件管理各种设置,主要包括:
# 4.1 config.json配置文件
主要配置项:
PCSMT2_Version:程序版本号ReleaseVersion:发布版本类型RunningMemories_Min:最小运行内存(MB)RunningMemories_Max:最大运行内存(MB)Nogui:是否使用nogui模式启动服务器EULAGenerateWaitTime:EULA生成等待时间AutoStartup:自动启动选项UpdateSource:更新源(如Github)GetMinecraftTestVersion:是否获取测试版服务器版本StorageSizeUpdateTime:存储大小更新时间(秒)Port:Web服务器端口号
# 4.2 java_versions.json配置文件
记录不同Java版本的安装路径,用于服务器启动时选择合适的Java版本。
# 5. 文件结构
# 5.1 主要目录结构
PCSMT-2/
├── PCSMT2.py # 主程序文件
├── config.json # 程序配置文件
├── java_versions.json # Java版本配置文件
├── bin/ # 核心功能模块目录
│ ├── command/ # 命令实现模块
│ ├── export/ # 导出和工具模块
│ ├── api/ # Web API模块
│ ├── find_files/ # 文件查找工具
│ └── introduction/ # 介绍信息模块
├── static/ # 静态资源文件
│ ├── js/ # JavaScript文件
│ └── PCSMT2.ico # 程序图标
└── servers/ # 服务器存储目录
# 5.2 关键文件说明
- PCSMT2.py:程序入口点,实现GUI和命令行界面
- bin/command/Server.py:服务器管理核心功能实现
- bin/export/timer.py:定时任务和监控功能实现
- bin/export/Java.py:Java版本管理功能实现
- bin/api/main.py:Web API入口点
# 6. 技术栈
- 编程语言:Python
- GUI框架:Tkinter
- Web框架:Flask
- 服务器通信:RCON协议
- 并发处理:多线程
- 配置管理:JSON文件
- 系统交互:psutil、subprocess
- 版本管理:packaging.version
# 7. 未来功能规划
根据README中的说明,项目计划在未来实现以下功能:
- 丰富命令和功能
- 支持更多类型的服务器
- 增强服务器管理功能
# 8. 总结
PCSMT-2是一个功能全面的Minecraft服务器管理工具,通过结合GUI、命令行和Web界面,为用户提供了便捷的服务器管理体验。其核心优势在于自动Java版本管理、完善的服务器生命周期管理、实时监控和丰富的命令集。程序采用模块化设计,各功能模块相对独立,便于维护和扩展。
通过本文档,希望能够帮助开发者理解PCSMT-2的整体架构和功能实现细节,为后续的项目开发和维护提供参考。