Skip to content

架构设计

⚠️ 免责声明

本文档由 GLM4.7 自动生成,内容可能存在错误或不完整之处。 请以人工书写的官方文档为准


项目架构

Luna Launcher 继承了 Prism Launcher 的架构,是一个基于 Qt 的模块化应用程序。

核心设计

  • 组件系统:所有模块(Minecraft、Mod 加载器、库)都是独立的组件
  • 实例隔离:每个实例完全独立,互不干扰
  • 任务驱动:异步任务系统处理所有耗时操作

模块结构

launcher/
├── Application.cpp          # 主应用程序入口
├── ui/                      # 用户界面层
│   ├── MainWindow.cpp       # 主窗口
│   ├── InstanceWindow.cpp   # 实例窗口
│   └── pages/               # 各个页面
├── minecraft/               # Minecraft 逻辑
│   ├── launch/              # 启动逻辑
│   ├── update/              # 更新逻辑
│   └── GameOptions.cpp      # 游戏选项
├── modplatform/             # Mod 平台支持
│   ├── atlauncher/          # ATLauncher
│   ├── flame/               # CurseForge
│   └── modrinth/            # Modrinth
├── meta/                    # 元数据管理
├── icons/                   # 图标管理
├── net/                     # 网络层
│   └── ByteArraySink.h      # 下载处理
├── tasks/                   # 任务系统
│   └── Task.cpp             # 异步任务
└── translations/            # 国际化

关键组件

Application

主应用程序类,负责:

  • 初始化 Qt 应用
  • 加载配置
  • 管理主题
  • 初始化主窗口

MainWindow

主窗口类,负责:

  • 实例列表显示
  • 主题切换
  • 菜单栏
  • 状态栏

Instance

实例类,表示一个 Minecraft 实例:

  • 实例配置
  • Mod 列表
  • 资源包
  • 游戏设置

Minecraft Launch

Minecraft 启动流程:

1. 检查 Java 版本
2. 验证游戏文件
3. 下载缺失文件
4. 处理 Libraries
5. 处理 Assets
6. 生成启动参数
7. 启动游戏进程

任务系统

异步任务系统,处理耗时操作:

cpp
// 任务示例
class MyTask : public Task {
    void executeTask() override {
        setStatus("Processing...");
        // 执行操作
        emitSucceeded();
    }
};

Luna 特有功能

BMCLAPI 集成

客户端 URL 重写策略:

  1. Library 下载 (launcher/minecraft/Library.cpp)

    cpp
    // 重写 Library URL
    if (url.contains("libraries.minecraft.net")) {
        url = replaceWithMirror(url, "bmclapi");
    }
  2. Asset 下载 (launcher/minecraft/update/AssetUpdateTask.cpp)

    cpp
    // 重写 Asset URL
    if (url.contains("resources.download.minecraft.net")) {
        url = replaceWithMirror(url, "bmclapi-assets");
    }
  3. Meta URL 重写

    cpp
    // 重写 Meta URL
    if (url.contains("piston-meta.mojang.com")) {
        url = replaceWithMirror(url, "bmclapi-meta");
    }

P2P 联机

集成方式:

  • 作为可选组件集成
  • 启动时加载联机模块
  • 与游戏进程通信

Fluent 主题

主题系统:

  • 基于 Qt 样式表
  • 亚克力材质效果
  • 圆角和阴影
  • 自定义图标

依赖库

核心依赖

用途
QtGUI 框架
cmarkMarkdown 解析
quazipZIP 压缩
libnbtplusplusNBT 数据
katabasisOAuth 认证

Git 子模块

所有依赖库通过 Git 子模块管理:

bash
# 克隆时获取子模块
git clone --recursive https://github.com/AndreaFrederica/LunaLauncher.git

# 或后续更新
git submodule update --init --recursive

数据流

实例启动流程

用户点击启动

检查实例配置

验证游戏文件

下载缺失文件(使用镜像)

处理 Libraries

处理 Assets

生成启动参数

启动游戏进程

监控游戏状态

Modpack 导入流程

用户选择文件

检测文件类型

解析 Modpack 格式

创建新实例

下载依赖文件

安装 Mods

完成导入

扩展开发

添加新功能

  1. 确定功能所属模块
  2. 创建或修改相关类
  3. 更新 UI(如需要)
  4. 添加翻译字符串
  5. 编写测试

代码风格

  • 遵循 Qt 代码风格
  • 使用 C++17 特性
  • 添加必要注释
  • 编写单元测试

← 返回开发者文档