# 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 程序初始化流程

程序启动时执行以下初始化流程:

  1. 进程检查:确保只运行一个程序实例,防止冲突
  2. Java环境检测:检查并自动安装所需的Java版本(1.8、16、17、21)
  3. 配置加载:读取config.json配置文件
  4. 定时任务初始化:启动存储大小更新定时器和心跳检测
  5. GUI初始化:创建Tkinter主窗口和界面组件
  6. 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服务器目录添加到程序管理中,创建必要的配置文件和启动脚本。

实现流程:

  1. 扫描指定目录下的服务器核心文件(.jar文件)
  2. 过滤排除不必要的jar文件
  3. 创建服务器启动批处理文件
  4. 生成服务器信息JSON文件,包含名称、路径、核心、大小等信息
  5. 创建EULA协议文件

代码实现:

# 添加服务器
def Add(Path, Name):
    # 检查路径是否存在
    # 查找服务器核心文件
    # 过滤排除关键字文件
    # 创建启动批处理文件
    # 创建服务器信息JSON文件
    # 创建EULA协议文件

# 3.3.2 服务器启动功能

功能说明:启动指定的Minecraft服务器,支持nogui模式和内存配置。

实现流程:

  1. 读取服务器信息文件
  2. 检查EULA协议是否同意
  3. 获取或设置服务器端口
  4. 设置RCON端口(如果启用)
  5. 根据服务器版本选择合适的Java版本
  6. 创建并执行启动进程
  7. 记录服务器启动信息到latest.json和latest.txt

代码实现:

# 启动服务器
def Start(server_name):
    # 读取服务器信息
    # 检查EULA协议
    # 获取服务器端口
    # 设置RCON端口
    # 选择Java版本
    # 创建并执行启动进程
    # 记录启动信息

# 3.3.3 服务器停止功能

功能说明:停止指定的Minecraft服务器,支持RCON方式优雅停止和强制停止。

实现流程:

  1. 尝试通过RCON协议发送/stop命令优雅停止服务器
  2. 如果RCON方式失败,尝试通过任务管理器结束进程

代码实现:

# 停止服务器
def Stop(server_name):
    # 尝试RCON方式停止
    # 如果失败,尝试强制停止

# 3.3.4 服务器删除功能

功能说明:从程序中删除指定的服务器,支持保留或删除实际服务器文件。

实现流程:

  1. 查找服务器信息文件
  2. 显示服务器信息并请求确认
  3. 删除服务器信息文件
  4. 可选删除服务器实际文件

代码实现:

# 删除服务器
def Delete(server_name):
    # 查找服务器信息
    # 请求确认
    # 删除服务器信息文件
    # 可选删除服务器文件

# 3.3.5 服务器回档功能

功能说明:将服务器回档到之前的备份状态,支持mod和plugin类型的备份。

实现流程:

  1. 查找备份文件(支持FTB Backups 2模组和eBackup插件)
  2. 解压备份文件
  3. 替换现有服务器文件
  4. 处理权限问题

代码实现:

# 服务器回档
def Retracement(server_name):
    # 查找备份文件
    # 解压备份
    # 替换服务器文件
    # 处理权限

# 3.3.6 服务器属性修改功能

功能说明:修改服务器的配置属性,如服务器端口、游戏模式、难度等。

实现流程:

  1. 读取服务器server.properties文件
  2. 查找指定关键字
  3. 修改对应的值
  4. 保存文件

代码实现:

# 修改服务器属性
class Change:
    def Properties(server_name: str, keyword: str, argument: str):
        # 读取服务器信息
        # 查找并修改关键字参数

# 3.3.7 服务器运行内存修改功能

功能说明:修改服务器启动时的内存配置(最小内存和最大内存)。

实现流程:

  1. 读取服务器启动批处理文件
  2. 修改-Xms和-Xmx参数
  3. 保存文件

代码实现:

# 修改服务器运行内存
class Change:
    def RunningMemories(server_name, memory_min, memory_max):
        # 读取服务器信息
        # 修改启动批处理文件中的内存参数
        # 保存文件

# 3.4 定时任务与监控功能

定时任务模块负责定期更新服务器存储大小和监控服务器在线状态。

# 3.4.1 存储大小更新功能

功能说明:定期更新并记录服务器存储大小,支持配置更新频率。

实现流程:

  1. 为每个服务器创建单独的定时任务线程
  2. 定期检查服务器存储大小
  3. 如果大小有变化,记录到存储大小文件
  4. 更新服务器信息文件中的大小字段

代码实现:

# 存储大小更新定时器
class TimerStorageSizeUpdate:
    def thread(cls):
        # 为每个服务器创建定时任务线程
        # 启动线程

    def timer(self, server_name):
        # 定时检查存储大小
        # 更新存储大小记录

# 3.4.2 服务器心跳检测功能

功能说明:定期检测服务器在线状态,更新服务器状态信息。

实现流程:

  1. 创建心跳检测线程
  2. 定期检查所有服务器的在线状态
  3. 维护服务器状态列表

代码实现:

# 服务器心跳检测
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的整体架构和功能实现细节,为后续的项目开发和维护提供参考。